X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcmd4.c;h=5ef50d40ba5dc6c1085892afd4e88d7fdeeb998a;hb=a656ac86e352cdd459723556edb7f8c8f708308d;hp=d2d09080ead58e1ae8955bc715e6df2993ca5cf4;hpb=add79ba38d4a702503e681e2bb0f347f59cd7a36;p=hengband%2Fhengband.git diff --git a/src/cmd4.c b/src/cmd4.c index d2d09080e..5ef50d40b 100644 --- a/src/cmd4.c +++ b/src/cmd4.c @@ -1291,17 +1291,19 @@ void do_cmd_message_one(void) */ void do_cmd_messages(int num_now) { - int i, j, k, n; - uint q; + int i, n; char shower[80]; char finder[80]; int wid, hgt; - + int num_lines; /* Get size */ Term_get_size(&wid, &hgt); + /* Number of message lines in a screen */ + num_lines = hgt - 4; + /* Wipe finder */ strcpy(finder, ""); @@ -1315,28 +1317,25 @@ void do_cmd_messages(int num_now) /* Start on first message */ i = 0; - /* Start at leftmost edge */ - q = 0; - /* Save the screen */ screen_save(); + /* Clear screen */ + Term_clear(); + /* Process requests until done */ while (1) { - /* Clear screen */ - Term_clear(); + int j; + int skey; /* Dump up to 20 lines of messages */ - for (j = 0; (j < hgt - 4) && (i + j < n); j++) + for (j = 0; (j < num_lines) && (i + j < n); j++) { cptr msg = message_str(i+j); - /* Apply horizontal scroll */ - msg = (strlen(msg) >= q) ? (msg + q) : ""; - /* Dump the messages, bottom to top */ - Term_putstr(0, hgt-j-3, -1, (bool)(i+j < num_now ? TERM_WHITE : TERM_SLATE), msg); + c_prt((i+j < num_now ? TERM_WHITE : TERM_SLATE), msg, num_lines + 1 - j, 0); /* Hilite "shower" */ if (shower[0]) @@ -1344,12 +1343,12 @@ void do_cmd_messages(int num_now) cptr str = msg; /* Display matches */ - while ((str = strstr(str, shower)) != NULL) + while ((str = my_strstr(str, shower)) != NULL) { int len = strlen(shower); /* Display the match */ - Term_putstr(str-msg, hgt-j-3, len, TERM_YELLOW, shower); + Term_putstr(str-msg, num_lines + 1 - j, len, TERM_YELLOW, shower); /* Advance */ str += len; @@ -1357,14 +1356,20 @@ void do_cmd_messages(int num_now) } } + /* Erase remaining lines */ + for (; j < num_lines; j++) + { + Term_erase(0, num_lines + 1 - j, 255); + } + /* Display header XXX XXX XXX */ #ifdef JP /* translation */ - prt(format("°ÊÁ°¤Î¥á¥Ã¥»¡¼¥¸ %d-%d Á´Éô¤Ç(%d) ¥ª¥Õ¥»¥Ã¥È(%d)", - i, i+j-1, n, q), 0, 0); + prt(format("°ÊÁ°¤Î¥á¥Ã¥»¡¼¥¸ %d-%d Á´Éô¤Ç(%d)", + i, i+j-1, n), 0, 0); #else - prt(format("Message Recall (%d-%d of %d), Offset %d", - i, i+j-1, n, q), 0, 0); + prt(format("Message Recall (%d-%d of %d)", + i, i+j-1, n), 0, 0); #endif @@ -1377,36 +1382,16 @@ void do_cmd_messages(int num_now) /* Get a command */ - k = inkey(); + skey = inkey_special(TRUE); /* Exit on Escape */ - if (k == ESCAPE) break; + if (skey == ESCAPE) break; /* Hack -- Save the old index */ j = i; - /* Horizontal scroll */ - if (k == '4') - { - /* Scroll left */ - q = (q >= 40) ? (q - 40) : 0; - - /* Success */ - continue; - } - - /* Horizontal scroll */ - if (k == '6') - { - /* Scroll right */ - q = q + 40; - - /* Success */ - continue; - } - /* Hack -- handle show */ - if (k == '=') + if (skey == '=') { /* Prompt */ #ifdef JP @@ -1417,14 +1402,14 @@ void do_cmd_messages(int num_now) /* Get a "shower" string, or continue */ - if (!askfor_aux(shower, 80)) continue; + if (!askfor(shower, 80)) continue; /* Okay */ continue; } /* Hack -- handle find */ - if (k == '/') + if (skey == '/' || skey == KTRL('s')) { int z; @@ -1437,7 +1422,7 @@ void do_cmd_messages(int num_now) /* Get a "finder" string, or continue */ - if (!askfor_aux(finder, 80)) continue; + if (!askfor(finder, 80)) continue; /* Show it */ strcpy(shower, finder); @@ -1448,7 +1433,7 @@ void do_cmd_messages(int num_now) cptr msg = message_str(z); /* Search for it */ - if (strstr(msg, finder)) + if (my_strstr(msg, finder)) { /* New location */ i = z; @@ -1460,45 +1445,59 @@ void do_cmd_messages(int num_now) } /* Recall 1 older message */ - if ((k == '8') || (k == '\n') || (k == '\r')) + if (skey == SKEY_TOP) + { + /* Go to the oldest line */ + i = n - num_lines; + } + + /* Recall 1 newer message */ + if (skey == SKEY_BOTTOM) + { + /* Go to the newest line */ + i = 0; + } + + /* Recall 1 older message */ + if (skey == '8' || skey == SKEY_UP || skey == '\n' || skey == '\r') { - /* Go newer if legal */ - if (i + 1 < n) i += 1; + /* Go older if legal */ + i = MIN(i + 1, n - num_lines); } /* Recall 10 older messages */ - if (k == '+') + if (skey == '+') { /* Go older if legal */ - if (i + 10 < n) i += 10; + i = MIN(i + 10, n - num_lines); } /* Recall 20 older messages */ - if ((k == 'p') || (k == KTRL('P')) || (k == ' ')) + if (skey == 'p' || skey == KTRL('P') || skey == ' ' || skey == SKEY_PGUP) { /* Go older if legal */ - if (i + 20 < n) i += 20; + i = MIN(i + num_lines, n - num_lines); } /* Recall 20 newer messages */ - if ((k == 'n') || (k == KTRL('N'))) + if (skey == 'n' || skey == KTRL('N') || skey == SKEY_PGDOWN) { /* Go newer (if able) */ - i = (i >= 20) ? (i - 20) : 0; + i = MAX(0, i - num_lines); } /* Recall 10 newer messages */ - if (k == '-') + if (skey == '-') { /* Go newer (if able) */ - i = (i >= 20) ? (i - 20) : 0; + i = MAX(0, i - 10); } /* Recall 1 newer messages */ - if (k == '2') + if (skey == '2' || skey == SKEY_DOWN) { /* Go newer (if able) */ - i = (i >= 1) ? (i - 1) : 0; + i = MAX(0, i - 1); } /* Hack -- Error of some kind */ @@ -1902,8 +1901,6 @@ static void do_cmd_options_autosave(cptr info) } -#define PAGE_AUTODESTROY 7 - /* * Interact with some options */ @@ -1913,6 +1910,8 @@ void do_cmd_options_aux(int page, cptr info) int i, k = 0, n = 0, l; int opt[24]; char buf[80]; + bool browse_only = (page == OPT_PAGE_BIRTH) && character_generated && + (!p_ptr->wizard || !allow_debug_opts); /* Lookup the options */ @@ -1936,9 +1935,9 @@ void do_cmd_options_aux(int page, cptr info) /* Prompt XXX XXX XXX */ #ifdef JP - sprintf(buf, "%s (¥ê¥¿¡¼¥ó:¼¡, y/n:Êѹ¹, ESC:½ªÎ», ?:¥Ø¥ë¥×) ", info); + sprintf(buf, "%s (¥ê¥¿¡¼¥ó:¼¡, %sESC:½ªÎ», ?:¥Ø¥ë¥×) ", info, browse_only ? "" : "y/n:Êѹ¹, "); #else - sprintf(buf, "%s (RET:next, y/n:change, ESC:accept, ?:help) ", info); + sprintf(buf, "%s (RET:next, %s, ?:help) ", info, browse_only ? "ESC:exit" : "y/n:change, ESC:accept"); #endif prt(buf, 0, 0); @@ -1946,9 +1945,9 @@ void do_cmd_options_aux(int page, cptr info) /* HACK -- description for easy-auto-destroy options */ #ifdef JP - if (page == PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "°Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢´Ê°×¼«Æ°Ç˲õ¤ò»ÈÍѤ¹¤ë¤È¤­¤Î¤ßÍ­¸ú", 6, 6); + if (page == OPT_PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "°Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢´Ê°×¼«Æ°Ç˲õ¤ò»ÈÍѤ¹¤ë¤È¤­¤Î¤ßÍ­¸ú", 6, 6); #else - if (page == PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "Following options will protect items from easy auto-destroyer.", 6, 3); + if (page == OPT_PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "Following options will protect items from easy auto-destroyer.", 6, 3); #endif /* Display the options */ @@ -1969,11 +1968,11 @@ void do_cmd_options_aux(int page, cptr info) #endif option_info[opt[i]].o_text); - if ((page == PAGE_AUTODESTROY) && i > 2) c_prt(a, buf, i + 5, 0); + if ((page == OPT_PAGE_AUTODESTROY) && i > 2) c_prt(a, buf, i + 5, 0); else c_prt(a, buf, i + 2, 0); } - if ((page == PAGE_AUTODESTROY) && (k > 2)) l = 3; + if ((page == OPT_PAGE_AUTODESTROY) && (k > 2)) l = 3; else l = 0; /* Hilite current option */ @@ -2018,6 +2017,7 @@ void do_cmd_options_aux(int page, cptr info) case 'Y': case '6': { + if (browse_only) break; (*option_info[opt[k]].o_var) = TRUE; k = (k + 1) % n; break; @@ -2027,6 +2027,7 @@ void do_cmd_options_aux(int page, cptr info) case 'N': case '4': { + if (browse_only) break; (*option_info[opt[k]].o_var) = FALSE; k = (k + 1) % n; break; @@ -2035,7 +2036,7 @@ void do_cmd_options_aux(int page, cptr info) case 't': case 'T': { - (*option_info[opt[k]].o_var) = !(*option_info[opt[k]].o_var); + if (!browse_only) (*option_info[opt[k]].o_var) = !(*option_info[opt[k]].o_var); break; } @@ -2049,7 +2050,7 @@ void do_cmd_options_aux(int page, cptr info) /* Peruse the help file */ (void)show_file(TRUE, buf, NULL, 0, 0); - Term_clear(); + Term_clear(); break; } @@ -2282,62 +2283,84 @@ void do_cmd_options(void) /* Why are we here */ #ifdef JP - prt("[ ¥ª¥×¥·¥ç¥ó¤ÎÀßÄê ]", 2, 0); + prt("[ ¥ª¥×¥·¥ç¥ó¤ÎÀßÄê ]", 1, 0); #else - prt("Options", 2, 0); + prt("Options", 1, 0); #endif /* Give some choices */ #ifdef JP - prt("(1) ¥­¡¼ÆþÎÏ ¥ª¥×¥·¥ç¥ó", 4, 5); - prt("(2) ²èÌ̽ÐÎÏ ¥ª¥×¥·¥ç¥ó", 5, 5); - prt("(3) ¥²¡¼¥à¥×¥ì¥¤ ¥ª¥×¥·¥ç¥ó", 6, 5); - prt("(4) ¹ÔÆ°Ãæ»ß´Ø·¸ ¥ª¥×¥·¥ç¥ó", 7, 5); - prt("(5) ¸úΨ²½ ¥ª¥×¥·¥ç¥ó", 8, 5); - prt("(6) ´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ ¥ª¥×¥·¥ç¥ó", 9, 5); - prt("(R) ¥×¥ì¥¤µ­Ï¿ ¥ª¥×¥·¥ç¥ó", 10, 5); + prt("(1) ¥­¡¼ÆþÎÏ ¥ª¥×¥·¥ç¥ó", 2, 5); + prt("(2) ¥Þ¥Ã¥×²èÌÌ ¥ª¥×¥·¥ç¥ó", 3, 5); + prt("(3) ¥Æ¥­¥¹¥Èɽ¼¨ ¥ª¥×¥·¥ç¥ó", 4, 5); + prt("(4) ¥²¡¼¥à¥×¥ì¥¤ ¥ª¥×¥·¥ç¥ó", 5, 5); + prt("(5) ¹ÔÆ°Ãæ»ß´Ø·¸ ¥ª¥×¥·¥ç¥ó", 6, 5); + prt("(6) ´Ê°×¼«Æ°Ç˲õ ¥ª¥×¥·¥ç¥ó", 7, 5); + prt("(R) ¥×¥ì¥¤µ­Ï¿ ¥ª¥×¥·¥ç¥ó", 8, 5); + /* Special choices */ - prt("(D) ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 12, 5); - prt("(H) Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 13, 5); - prt("(A) ¼«Æ°¥»¡¼¥Ö ¥ª¥×¥·¥ç¥ó", 14, 5); + prt("(P) ¼«Æ°½¦¤¤¥¨¥Ç¥£¥¿", 10, 5); + prt("(D) ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 11, 5); + prt("(H) Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 12, 5); + prt("(M) ÄãËâÎÏ¿§ïçÃÍ", 13, 5); + prt("(A) ¼«Æ°¥»¡¼¥Ö ¥ª¥×¥·¥ç¥ó", 14, 5); /* Window flags */ - prt("(W) ¥¦¥¤¥ó¥É¥¦¥Õ¥é¥°", 15, 5); -#else - prt("(1) Input Options", 4, 5); - prt("(2) Output Options", 5, 5); - prt("(3) Game-Play Options", 6, 5); - prt("(4) Disturbance Options", 7, 5); - prt("(5) Efficiency Options", 8, 5); - prt("(6) Easy Auto-Destroyer Options", 9, 5); - prt("(R) Play-record Options", 10, 5); - + prt("(W) ¥¦¥¤¥ó¥É¥¦¥Õ¥é¥°", 15, 5); +#else + prt("(1) Input Options", 2, 5); + prt("(2) Map Screen Options", 3, 5); + prt("(3) Text Display Options", 4, 5); + prt("(4) Game-Play Options", 5, 5); + prt("(5) Disturbance Options", 6, 5); + prt("(6) Easy Auto-Destroyer Options", 7, 5); + prt("(R) Play-record Options", 8, 5); /* Special choices */ - prt("(D) Base Delay Factor", 12, 5); - prt("(H) Hitpoint Warning", 13, 5); + prt("(P) Auto-picker/destroyer editor", 10, 5); + prt("(D) Base Delay Factor", 11, 5); + prt("(H) Hitpoint Warning", 12, 5); + prt("(M) Mana Color Threshold", 13, 5); prt("(A) Autosave Options", 14, 5); - - /* Window flags */ prt("(W) Window Flags", 15, 5); #endif + if (!p_ptr->wizard || !allow_debug_opts) + { + /* Birth */ +#ifdef JP + prt("(B) ½é´ü ¥ª¥×¥·¥ç¥ó (»²¾È¤Î¤ß)", 16, 5); +#else + prt("(B) Birth Options (Browse Only)", 16, 5); +#endif + } + else + { + /* Birth */ +#ifdef JP + prt("(B) ½é´ü ¥ª¥×¥·¥ç¥ó", 16, 5); +#else + prt("(B) Birth Options", 16, 5); +#endif + } + + if (p_ptr->noscore || allow_debug_opts) { /* Cheating */ #ifdef JP - prt("(C) º¾µ½ ¥ª¥×¥·¥ç¥ó", 16, 5); + prt("(C) º¾µ½ ¥ª¥×¥·¥ç¥ó", 17, 5); #else - prt("(C) Cheating Options", 16, 5); + prt("(C) Cheating Options", 17, 5); #endif } /* Prompt */ #ifdef JP - prt("¥³¥Þ¥ó¥É:", 18, 0); + prt("¥³¥Þ¥ó¥É:", 19, 0); #else - prt("Command: ", 18, 0); + prt("Command: ", 19, 0); #endif @@ -2350,79 +2373,73 @@ void do_cmd_options(void) /* Analyze */ switch (k) { - /* General Options */ case '1': { /* Process the general options */ #ifdef JP - do_cmd_options_aux(1, "¥­¡¼ÆþÎÏ¥ª¥×¥·¥ç¥ó"); + do_cmd_options_aux(OPT_PAGE_INPUT, "¥­¡¼ÆþÎÏ¥ª¥×¥·¥ç¥ó"); #else - do_cmd_options_aux(1, "Input Options"); + do_cmd_options_aux(OPT_PAGE_INPUT, "Input Options"); #endif break; } - /* General Options */ case '2': { /* Process the general options */ #ifdef JP - do_cmd_options_aux(2, "²èÌ̽ÐÎÏ¥ª¥×¥·¥ç¥ó"); + do_cmd_options_aux(OPT_PAGE_MAPSCREEN, "¥Þ¥Ã¥×²èÌÌ¥ª¥×¥·¥ç¥ó"); #else - do_cmd_options_aux(2, "Output Options"); + do_cmd_options_aux(OPT_PAGE_MAPSCREEN, "Map Screen Options"); #endif break; } - /* Inventory Options */ case '3': { /* Spawn */ #ifdef JP - do_cmd_options_aux(3, "¥²¡¼¥à¥×¥ì¥¤¡¦¥ª¥×¥·¥ç¥ó"); + do_cmd_options_aux(OPT_PAGE_TEXT, "¥Æ¥­¥¹¥Èɽ¼¨¥ª¥×¥·¥ç¥ó"); #else - do_cmd_options_aux(3, "Game-Play Options"); + do_cmd_options_aux(OPT_PAGE_TEXT, "Text Display Options"); #endif break; } - /* Disturbance Options */ case '4': { /* Spawn */ #ifdef JP - do_cmd_options_aux(4, "¹ÔÆ°Ãæ»ß´Ø·¸¤Î¥ª¥×¥·¥ç¥ó"); + do_cmd_options_aux(OPT_PAGE_GAMEPLAY, "¥²¡¼¥à¥×¥ì¥¤¡¦¥ª¥×¥·¥ç¥ó"); #else - do_cmd_options_aux(4, "Disturbance Options"); + do_cmd_options_aux(OPT_PAGE_GAMEPLAY, "Game-Play Options"); #endif break; } - /* Efficiency Options */ case '5': { /* Spawn */ #ifdef JP - do_cmd_options_aux(5, "¸úΨ²½¥ª¥×¥·¥ç¥ó"); + do_cmd_options_aux(OPT_PAGE_DISTURBANCE, "¹ÔÆ°Ãæ»ß´Ø·¸¤Î¥ª¥×¥·¥ç¥ó"); #else - do_cmd_options_aux(5, "Efficiency Options"); + do_cmd_options_aux(OPT_PAGE_DISTURBANCE, "Disturbance Options"); #endif break; } - /* Object auto-destruction Options */ case '6': { /* Spawn */ #ifdef JP - do_cmd_options_aux(7, "´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ¥ª¥×¥·¥ç¥ó"); + do_cmd_options_aux(OPT_PAGE_AUTODESTROY, "´Ê°×¼«Æ°Ç˲õ¥ª¥×¥·¥ç¥ó"); #else - do_cmd_options_aux(7, "Easy Auto-Destroyer Options"); + do_cmd_options_aux(OPT_PAGE_AUTODESTROY, "Easy Auto-Destroyer Options"); #endif break; } @@ -2433,13 +2450,27 @@ void do_cmd_options(void) { /* Spawn */ #ifdef JP - do_cmd_options_aux(10, "¥×¥ì¥¤µ­Ï¿¥ª¥×¥·¥ç¥ó"); + do_cmd_options_aux(OPT_PAGE_PLAYRECORD, "¥×¥ì¥¤µ­Ï¿¥ª¥×¥·¥ç¥ó"); #else - do_cmd_options_aux(10, "Play-record Option"); + do_cmd_options_aux(OPT_PAGE_PLAYRECORD, "Play-record Options"); #endif break; } + /* Birth Options */ + case 'B': + case 'b': + { + /* Spawn */ +#ifdef JP + do_cmd_options_aux(OPT_PAGE_BIRTH, (!p_ptr->wizard || !allow_debug_opts) ? "½é´ü¥ª¥×¥·¥ç¥ó(»²¾È¤Î¤ß)" : "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)"); +#else + do_cmd_options_aux(OPT_PAGE_BIRTH, (!p_ptr->wizard || !allow_debug_opts) ? "Birth Options(browse only)" : "Birth Options((*)s effect score)"); +#endif + + break; + } + /* Cheating Options */ case 'C': { @@ -2485,15 +2516,23 @@ void do_cmd_options(void) break; } + /* Auto-picker/destroyer editor */ + case 'P': + case 'p': + { + do_cmd_edit_autopick(); + break; + } + /* Hack -- Delay Speed */ case 'D': case 'd': { /* Prompt */ #ifdef JP - prt("¥³¥Þ¥ó¥É: ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 18, 0); + prt("¥³¥Þ¥ó¥É: ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 19, 0); #else - prt("Command: Base Delay Factor", 18, 0); + prt("Command: Base Delay Factor", 19, 0); #endif @@ -2539,9 +2578,9 @@ void do_cmd_options(void) { /* Prompt */ #ifdef JP - prt("¥³¥Þ¥ó¥É: Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 18, 0); + prt("¥³¥Þ¥ó¥É: Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 19, 0); #else - prt("Command: Hitpoint Warning", 18, 0); + prt("Command: Hitpoint Warning", 19, 0); #endif @@ -2580,6 +2619,53 @@ void do_cmd_options(void) break; } + /* Hack -- mana color factor */ + case 'M': + case 'm': + { + /* Prompt */ +#ifdef JP + prt("¥³¥Þ¥ó¥É: ÄãËâÎÏ¿§ïçÃÍ", 19, 0); +#else + prt("Command: Mana Color Threshold", 19, 0); +#endif + + + /* Get a new value */ + while (1) + { +#ifdef JP + prt(format("¸½ºß¤ÎÄãËâÎÏ¿§ïçÃÍ: %d0%%", + mana_warn), 22, 0); +#else + prt(format("Current mana color threshold: %d0%%", + mana_warn), 22, 0); +#endif + +#ifdef JP + prt("ÄãËâÎÏïçÃÍ (0-9) ESC¤Ç·èÄê: ", 20, 0); +#else + prt("Mana color Threshold (0-9 or ESC to accept): ", 20, 0); +#endif + + k = inkey(); + if (k == ESCAPE) break; + else if (k == '?') + { +#ifdef JP + (void)show_file(TRUE, "joption.txt#Manapoint", NULL, 0, 0); +#else + (void)show_file(TRUE, "option.txt#Manapoint", NULL, 0, 0); +#endif + Term_clear(); + } + else if (isdigit(k)) mana_warn = D2I(k); + else bell(); + } + + break; + } + case '?': #ifdef JP (void)show_file(TRUE, "joption.txt", NULL, 0, 0); @@ -2636,64 +2722,16 @@ void do_cmd_pref(void) (void)process_pref_file_command(buf); } -void do_cmd_pickpref(void) +void do_cmd_reload_autopick(void) { - char buf[80]; - errr err; - #ifdef JP - if(!get_check("¼«Æ°½¦¤¤ÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹¤«? ")) return; + if (!get_check("¼«Æ°½¦¤¤ÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹¤«? ")) return; #else - if(!get_check("Reload auto-pick preference file? ")) return; + if (!get_check("Reload auto-pick preference file? ")) return; #endif - /* Free old entries */ - init_autopicker(); - - /* ¥­¥ã¥éËè¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß */ -#ifdef JP - sprintf(buf, "picktype-%s.prf", player_name); -#else - sprintf(buf, "pickpref-%s.prf", player_name); -#endif - err = process_pickpref_file(buf); - - if(err == 0) - { -#ifdef JP - msg_format("%s¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£", buf); -#else - msg_format("loaded '%s'.", buf); -#endif - } - - /* ¶¦Ä̤ÎÀßÄê¥Õ¥¡¥¤¥ëÆɤ߹þ¤ß */ - - /* Process 'pick????.prf' if 'pick????-.prf' doesn't exist */ - if (0 > err) - { -#ifdef JP - err = process_pickpref_file("picktype.prf"); -#else - err = process_pickpref_file("pickpref.prf"); -#endif - - if(err == 0) - { -#ifdef JP - msg_print("picktype.prf¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£"); -#else - msg_print("loaded 'pickpref.prf'."); -#endif - } - } - - -#ifdef JP - if(err) msg_print("¼«Æ°½¦¤¤ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£"); -#else - if(err) msg_print("Failed to reload autopick preference."); -#endif + /* Load the file with messages */ + autopick_load_pref(TRUE); } #ifdef ALLOW_MACROS @@ -3054,7 +3092,7 @@ void do_cmd_macros(void) sprintf(tmp, "%s.prf", player_name); /* Ask for a file */ - if (!askfor_aux(tmp, 80)) continue; + if (!askfor(tmp, 80)) continue; /* Process the given filename */ err = process_pref_file(tmp); @@ -3110,7 +3148,7 @@ void do_cmd_macros(void) sprintf(tmp, "%s.prf", player_name); /* Ask for a file */ - if (!askfor_aux(tmp, 80)) continue; + if (!askfor(tmp, 80)) continue; /* Dump the macros */ (void)macro_dump(tmp); @@ -3210,6 +3248,13 @@ void do_cmd_macros(void) /* Clear */ clear_from(20); + /* Help message */ +#ifdef JP + c_prt(TERM_L_RED, "¥«¡¼¥½¥ë¥­¡¼¤Îº¸±¦¤Ç¥«¡¼¥½¥ë°ÌÃÖ¤ò°ÜÆ°¡£Backspace¤«Delete¤Ç°ìʸ»úºï½ü¡£", 22, 0); +#else + c_prt(TERM_L_RED, "Press Left/Right arrow keys to move cursor. Backspace/Delete to delete a char.", 22, 0); +#endif + /* Prompt */ #ifdef JP prt("¥Þ¥¯¥í¹ÔÆ°: ", 20, 0); @@ -3222,7 +3267,7 @@ void do_cmd_macros(void) ascii_to_text(tmp, macro__buf); /* Get an encoded action */ - if (askfor_aux(tmp, 80)) + if (askfor(tmp, 80)) { /* Convert to ascii */ text_to_ascii(macro__buf, tmp); @@ -3297,7 +3342,7 @@ void do_cmd_macros(void) sprintf(tmp, "%s.prf", player_name); /* Ask for a file */ - if (!askfor_aux(tmp, 80)) continue; + if (!askfor(tmp, 80)) continue; /* Dump the macros */ (void)keymap_dump(tmp); @@ -3397,6 +3442,13 @@ void do_cmd_macros(void) /* Clear */ clear_from(20); + /* Help message */ +#ifdef JP + c_prt(TERM_L_RED, "¥«¡¼¥½¥ë¥­¡¼¤Îº¸±¦¤Ç¥«¡¼¥½¥ë°ÌÃÖ¤ò°ÜÆ°¡£Backspace¤«Delete¤Ç°ìʸ»úºï½ü¡£", 22, 0); +#else + c_prt(TERM_L_RED, "Press Left/Right arrow keys to move cursor. Backspace/Delete to delete a char.", 22, 0); +#endif + /* Prompt */ #ifdef JP prt("¹ÔÆ°: ", 20, 0); @@ -3409,7 +3461,7 @@ void do_cmd_macros(void) ascii_to_text(tmp, macro__buf); /* Get an encoded action */ - if (askfor_aux(tmp, 80)) + if (askfor(tmp, 80)) { /* Convert to ascii */ text_to_ascii(macro__buf, tmp); @@ -3477,15 +3529,28 @@ void do_cmd_macros(void) prt("Command: Enter a new action", 16, 0); #endif + /* Clear */ + clear_from(20); - /* Go to the correct location */ - Term_gotoxy(0, 22); + /* Help message */ +#ifdef JP + c_prt(TERM_L_RED, "¥«¡¼¥½¥ë¥­¡¼¤Îº¸±¦¤Ç¥«¡¼¥½¥ë°ÌÃÖ¤ò°ÜÆ°¡£Backspace¤«Delete¤Ç°ìʸ»úºï½ü¡£", 22, 0); +#else + c_prt(TERM_L_RED, "Press Left/Right arrow keys to move cursor. Backspace/Delete to delete a char.", 22, 0); +#endif + + /* Prompt */ +#ifdef JP + prt("¥Þ¥¯¥í¹ÔÆ°: ", 20, 0); +#else + prt("Action: ", 20, 0); +#endif /* Hack -- limit the value */ tmp[80] = '\0'; /* Get an encoded action */ - if (!askfor_aux(buf, 80)) continue; + if (!askfor(buf, 80)) continue; /* Extract an action */ text_to_ascii(macro__buf, buf); @@ -3509,6 +3574,22 @@ void do_cmd_macros(void) } +static cptr lighting_level_str[F_LIT_MAX] = +{ +#ifdef JP + "ɸ½à¿§", + "ÌÀ¿§", + "°Å¿§", + "°Å°Å¿§", +#else + "standard", + "brightly lit", + "darkened", + "darkly darkened", +#endif +}; + + static void cmd_visuals_aux(int i, int *num, int max) { if (iscntrl(i)) @@ -3549,6 +3630,7 @@ void do_cmd_visuals(void) if (use_bigtile) empty_symbol = "<< ?? >>"; + /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); @@ -3609,7 +3691,7 @@ void do_cmd_visuals(void) /* Prompt */ #ifdef JP - prt("¥³¥Þ¥ó¥É:", 18, 0); + prt("¥³¥Þ¥ó¥É:", 15, 0); #else prt("Command: ", 15, 0); #endif @@ -3634,7 +3716,7 @@ void do_cmd_visuals(void) /* Prompt */ #ifdef JP - prt("¥Õ¥¡¥¤¥ë: ", 18, 0); + prt("¥Õ¥¡¥¤¥ë: ", 17, 0); #else prt("File: ", 17, 0); #endif @@ -3644,7 +3726,7 @@ void do_cmd_visuals(void) sprintf(tmp, "%s.prf", player_name); /* Query */ - if (!askfor_aux(tmp, 70)) continue; + if (!askfor(tmp, 70)) continue; /* Process the given filename */ (void)process_pref_file(tmp); @@ -3677,7 +3759,7 @@ void do_cmd_visuals(void) sprintf(tmp, "%s.prf", player_name); /* Get a filename */ - if (!askfor_aux(tmp, 70)) continue; + if (!askfor(tmp, 70)) continue; /* Build the filename */ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp); @@ -3745,7 +3827,7 @@ void do_cmd_visuals(void) sprintf(tmp, "%s.prf", player_name); /* Get a filename */ - if (!askfor_aux(tmp, 70)) continue; + if (!askfor(tmp, 70)) continue; /* Build the filename */ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp); @@ -3820,7 +3902,7 @@ void do_cmd_visuals(void) sprintf(tmp, "%s.prf", player_name); /* Get a filename */ - if (!askfor_aux(tmp, 70)) continue; + if (!askfor(tmp, 70)) continue; /* Build the filename */ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp); @@ -3850,8 +3932,11 @@ void do_cmd_visuals(void) auto_dump_printf("# %s\n", (f_name + f_ptr->name)); /* Dump the feature attr/char info */ - auto_dump_printf("F:%d:0x%02X/0x%02X\n\n", i, - (byte)(f_ptr->x_attr), (byte)(f_ptr->x_char)); + auto_dump_printf("F:%d:0x%02X/0x%02X:0x%02X/0x%02X:0x%02X/0x%02X:0x%02X/0x%02X\n\n", i, + (byte)(f_ptr->x_attr[F_LIT_STANDARD]), (byte)(f_ptr->x_char[F_LIT_STANDARD]), + (byte)(f_ptr->x_attr[F_LIT_LITE]), (byte)(f_ptr->x_char[F_LIT_LITE]), + (byte)(f_ptr->x_attr[F_LIT_DARK]), (byte)(f_ptr->x_char[F_LIT_DARK]), + (byte)(f_ptr->x_attr[F_LIT_DARKDARK]), (byte)(f_ptr->x_char[F_LIT_DARKDARK])); } /* Close */ @@ -3883,8 +3968,7 @@ void do_cmd_visuals(void) while (1) { monster_race *r_ptr = &r_info[r]; - byte a, a2; - char c, c2; + char c; int t; byte da = (r_ptr->d_attr); @@ -3914,13 +3998,7 @@ void do_cmd_visuals(void) #endif Term_putstr(40, 19, -1, TERM_WHITE, empty_symbol); - - a = da; - c = dc; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - - Term_putch(43, 19, a, c); - if (use_bigtile) Term_putch(43 + 1, 19, a2, c2); + Term_queue_bigchar(43, 19, da, dc, 0, 0); /* Label the Current values */ #ifdef JP @@ -3932,14 +4010,7 @@ void do_cmd_visuals(void) #endif Term_putstr(40, 20, -1, TERM_WHITE, empty_symbol); - - a = ca; - c = cc; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - - Term_putch(43, 20, a, c); - if (use_bigtile) Term_putch(43 + 1, 20, a2, c2); - + Term_queue_bigchar(43, 20, ca, cc, 0, 0); /* Prompt */ #ifdef JP @@ -3996,8 +4067,7 @@ void do_cmd_visuals(void) while (1) { object_kind *k_ptr = &k_info[k]; - byte a, a2; - char c, c2; + char c; int t; byte da = (byte)k_ptr->d_attr; @@ -4027,13 +4097,7 @@ void do_cmd_visuals(void) #endif Term_putstr(40, 19, -1, TERM_WHITE, empty_symbol); - a = da; - c = dc; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - - Term_putch(43, 19, a, c); - if (use_bigtile) Term_putch(43 + 1, 19, a2, c2); - + Term_queue_bigchar(43, 19, da, dc, 0, 0); /* Label the Current values */ #ifdef JP @@ -4045,13 +4109,7 @@ void do_cmd_visuals(void) #endif Term_putstr(40, 20, -1, TERM_WHITE, empty_symbol); - a = ca; - c = cc; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - - Term_putch(43, 20, a, c); - if (use_bigtile) Term_putch(43 + 1, 20, a2, c2); - + Term_queue_bigchar(43, 20, ca, cc, 0, 0); /* Prompt */ #ifdef JP @@ -4095,6 +4153,7 @@ void do_cmd_visuals(void) else if (i == '8') { static int f = 0; + static int lighting_level = F_LIT_STANDARD; /* Prompt */ #ifdef JP @@ -4108,24 +4167,24 @@ void do_cmd_visuals(void) while (1) { feature_type *f_ptr = &f_info[f]; - byte a, a2; - char c, c2; + char c; int t; - byte da = (byte)f_ptr->d_attr; - byte dc = (byte)f_ptr->d_char; - byte ca = (byte)f_ptr->x_attr; - byte cc = (byte)f_ptr->x_char; + byte da = (byte)f_ptr->d_attr[lighting_level]; + byte dc = (byte)f_ptr->d_char[lighting_level]; + byte ca = (byte)f_ptr->x_attr[lighting_level]; + byte cc = (byte)f_ptr->x_char[lighting_level]; /* Label the object */ + prt("", 17, 5); #ifdef JP Term_putstr(5, 17, -1, TERM_WHITE, - format("ÃÏ·Á = %d, ̾Á° = %-40.40s", - f, (f_name + f_ptr->name))); + format("ÃÏ·Á = %d, ̾Á° = %s, ÌÀÅÙ = %s", + f, (f_name + f_ptr->name), lighting_level_str[lighting_level])); #else Term_putstr(5, 17, -1, TERM_WHITE, - format("Terrain = %d, Name = %-40.40s", - f, (f_name + f_ptr->name))); + format("Terrain = %d, Name = %s, Lighting = %s", + f, (f_name + f_ptr->name), lighting_level_str[lighting_level])); #endif @@ -4139,12 +4198,8 @@ void do_cmd_visuals(void) #endif Term_putstr(40, 19, -1, TERM_WHITE, empty_symbol); - a = da; - c = dc; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - Term_putch(43, 19, a, c); - if (use_bigtile) Term_putch(43 + 1, 19, a2, c2); + Term_queue_bigchar(43, 19, da, dc, 0, 0); /* Label the Current values */ @@ -4157,21 +4212,15 @@ void do_cmd_visuals(void) #endif Term_putstr(40, 20, -1, TERM_WHITE, empty_symbol); - a = ca; - c = cc; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - - Term_putch(43, 20, a, c); - if (use_bigtile) Term_putch(43 + 1, 20, a2, c2); - + Term_queue_bigchar(43, 20, ca, cc, 0, 0); /* Prompt */ #ifdef JP Term_putstr(0, 22, -1, TERM_WHITE, - "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C): "); + "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C/l/L/^L): "); #else Term_putstr(0, 22, -1, TERM_WHITE, - "Command (n/N/^N/a/A/^A/c/C/^C): "); + "Command (n/N/^N/a/A/^A/c/C/^C/l/L/^L): "); #endif /* Get a command */ @@ -4190,14 +4239,17 @@ void do_cmd_visuals(void) cmd_visuals_aux(i, &f, max_f_idx); break; case 'a': - t = (int)f_info[f].x_attr; + t = (int)f_info[f].x_attr[lighting_level]; cmd_visuals_aux(i, &t, 256); - f_info[f].x_attr = (byte)t; + f_info[f].x_attr[lighting_level] = (byte)t; break; case 'c': - t = (int)f_info[f].x_char; + t = (int)f_info[f].x_char[lighting_level]; cmd_visuals_aux(i, &t, 256); - f_info[f].x_char = (byte)t; + f_info[f].x_char[lighting_level] = (byte)t; + break; + case 'l': + cmd_visuals_aux(i, &lighting_level, F_LIT_MAX); break; } } @@ -4325,7 +4377,7 @@ void do_cmd_colors(void) sprintf(tmp, "%s.prf", player_name); /* Query */ - if (!askfor_aux(tmp, 70)) continue; + if (!askfor(tmp, 70)) continue; /* Process the given filename */ (void)process_pref_file(tmp); @@ -4364,7 +4416,7 @@ void do_cmd_colors(void) sprintf(tmp, "%s.prf", player_name); /* Get a filename */ - if (!askfor_aux(tmp, 70)) continue; + if (!askfor(tmp, 70)) continue; /* Build the filename */ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp); @@ -4846,6 +4898,7 @@ static cptr monster_group_text[] = { #ifdef JP "¥æ¥Ë¡¼¥¯", /* "Uniques" */ + "¾èÇϲÄǽ¤Ê¥â¥ó¥¹¥¿¡¼", /* "Riding" */ "¥¢¥ê", "¥³¥¦¥â¥ê", "¥à¥«¥Ç", @@ -4903,6 +4956,7 @@ static cptr monster_group_text[] = "µåÂÎ", #else "Uniques", + "Ridable monsters", "Ant", "Bat", "Centipede", @@ -4955,7 +5009,7 @@ static cptr monster_group_text[] = "Yeti", "Zephyr Hound", "Mimic", - "Wall/Plant/Gus", + "Wall/Plant/Gas", "Mushroom patch", "Ball", #endif @@ -4970,6 +5024,7 @@ static cptr monster_group_text[] = static cptr monster_group_char[] = { (char *) -1L, + (char *) -2L, "a", "b", "c", @@ -5071,6 +5126,9 @@ static int collect_monsters(int grp_cur, s16b mon_idx[], byte mode) /* XXX Hack -- Check if this is the "Uniques" group */ bool grp_unique = (monster_group_char[grp_cur] == (char *) -1L); + /* XXX Hack -- Check if this is the "Riding" group */ + bool grp_riding = (monster_group_char[grp_cur] == (char *) -2L); + /* Check every race */ for (i = 0; i < max_r_idx; i++) { @@ -5083,17 +5141,27 @@ static int collect_monsters(int grp_cur, s16b mon_idx[], byte mode) /* Require known monsters */ if (!(mode & 0x02) && !cheat_know && !r_ptr->r_sights ) continue; - if (grp_unique && !(r_ptr->flags1 & RF1_UNIQUE)) continue; + if (grp_unique) + { + if (!(r_ptr->flags1 & RF1_UNIQUE)) continue; + } - /* Check for race in the group */ - if (grp_unique || strchr(group_char, r_ptr->d_char)) + else if (grp_riding) { - /* Add the race */ - mon_idx[mon_cnt++] = i; + if (!(r_ptr->flags7 & RF7_RIDING)) continue; + } - /* XXX Hack -- Just checking for non-empty group */ - if (mode & 0x01) break; + else + { + /* Check for race in the group */ + if (!my_strchr(group_char, r_ptr->d_char)) continue; } + + /* Add the race */ + mon_idx[mon_cnt++] = i; + + /* XXX Hack -- Just checking for non-empty group */ + if (mode & 0x01) break; } /* Terminate the list */ @@ -5170,7 +5238,7 @@ static cptr object_group_text[] = "Rods", "Cards", "Capture Balls", - "Parchements", + "Parchments", "Spikes", "Boxs", "Figurines", @@ -5219,7 +5287,7 @@ static byte object_group_tval[] = TV_ROD, TV_CARD, TV_CAPTURE, - TV_PARCHEMENT, + TV_PARCHMENT, TV_SPIKE, TV_CHEST, TV_FIGURINE, @@ -5396,79 +5464,6 @@ static int collect_artifacts(int grp_cur, int object_idx[]) static char hack[17] = "dwsorgbuDWvyRGBU"; -static errr photo_fgets(FILE *fff, char *buf, huge n) -{ - huge i = 0; - - char *s; - - char tmp[1024]; - - /* Read a line */ - if (fgets(tmp, 1024, fff)) - { - /* Convert weirdness */ - for (s = tmp; *s; s++) - { - /* Handle newline */ - if (*s == '\n') - { - /* Terminate */ - buf[i] = '\0'; - - /* Success */ - return (0); - } - - /* Handle tabs */ - else if (*s == '\t') - { - /* Hack -- require room */ - if (i + 8 >= n) break; - - /* Append a space */ - buf[i++] = ' '; - - /* Append some more spaces */ - while (!(i % 8)) buf[i++] = ' '; - } - -#ifdef JP - else if (iskanji(*s)) - { - if (!s[1]) break; - buf[i++] = *s++; - buf[i++] = *s; - } -# ifndef EUC - /* Ⱦ³Ñ¤«¤Ê¤ËÂбþ */ - else if ((((int)*s & 0xff) > 0xa1) && (((int)*s & 0xff ) < 0xdf)) - { - buf[i++] = *s; - if (i >= n) break; - } -# endif -#endif - /* Handle printables */ - else - { - /* Copy */ - buf[i++] = *s; - - /* Check length */ - if (i >= n) break; - } - } - } - - /* Nothing */ - buf[0] = '\0'; - - /* Failure */ - return (1); -} - - /* * Hack -- load a screen dump from a file */ @@ -5515,32 +5510,46 @@ void do_cmd_load_screen(void) /* Load the screen */ - for (y = 0; okay && (y < hgt); y++) + for (y = 0; okay; y++) { - /* Get a line of data */ - if (photo_fgets(fff, buf, 1024)) okay = FALSE; + /* Get a line of data including control code */ + if (!fgets(buf, 1024, fff)) okay = FALSE; + + /* Get the blank line */ + if (buf[0] == '\n' || buf[0] == '\0') break; + + /* Ignore too large screen image */ + if (y >= hgt) continue; /* Show each row */ for (x = 0; x < wid - 1; x++) { + /* End of line */ + if (buf[x] == '\n' || buf[x] == '\0') break; + /* Put the attr/char */ Term_draw(x, y, TERM_WHITE, buf[x]); } } - /* Get the blank line */ - if (my_fgets(fff, buf, sizeof(buf))) okay = FALSE; - - /* Dump the screen */ - for (y = 0; okay && (y < hgt); y++) + for (y = 0; okay; y++) { - /* Get a line of data */ - if (photo_fgets(fff, buf, 1024)) okay = FALSE; + /* Get a line of data including control code */ + if (!fgets(buf, 1024, fff)) okay = FALSE; + + /* Get the blank line */ + if (buf[0] == '\n' || buf[0] == '\0') break; + + /* Ignore too large screen image */ + if (y >= hgt) continue; /* Dump each row */ for (x = 0; x < wid - 1; x++) { + /* End of line */ + if (buf[x] == '\n' || buf[x] == '\0') break; + /* Get the attr/char */ (void)(Term_what(x, y, &a, &c)); @@ -5557,10 +5566,6 @@ void do_cmd_load_screen(void) } - /* Get the blank line */ - if (my_fgets(fff, buf, sizeof(buf))) okay = FALSE; - - /* Close it */ my_fclose(fff); @@ -5590,215 +5595,124 @@ cptr inven_res_label = " AcElFiCoPoLiDkShSoNtNxCaDi BlFeCfFaSeHlEpSdRgLv"; #endif -/* XTRA HACK RESLIST */ -static void do_cmd_knowledge_inven_aux(FILE *fff, object_type *o_ptr, - int *j, byte tval, char *where) -{ - char o_name[MAX_NLEN]; - u32b flgs[TR_FLAG_SIZE]; - - if (!o_ptr->k_idx)return; - if (o_ptr->tval != tval)return; - - /* - * HACK:Ring of Lordly protection and Dragon shield/helm - * have random resistances. - */ - if ( ((o_ptr->tval >= TV_BOW && o_ptr->tval<= TV_DRAG_ARMOR && o_ptr->name2) - || (o_ptr->tval == TV_RING && o_ptr->sval == SV_RING_LORDLY) - || (o_ptr->tval == TV_SHIELD && o_ptr->sval == SV_DRAGON_SHIELD) - || (o_ptr->tval == TV_HELM && o_ptr->sval == SV_DRAGON_HELM) - || (o_ptr->tval == TV_GLOVES && o_ptr->sval == SV_SET_OF_DRAGON_GLOVES) - || (o_ptr->tval == TV_BOOTS && o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) - || o_ptr->art_name || o_ptr->name1) && object_known_p(o_ptr)) - { - int i = 0; - object_desc(o_name, o_ptr, TRUE, 0); - while ( o_name[i] && i < 26 ){ #ifdef JP - if (iskanji(o_name[i])) i++; -#endif - i++; - } - if(i<28) while(i<28){o_name[i]=' ';i++;} - o_name[i]=0; - - fprintf(fff,"%s %s", where, o_name); - - if (!(o_ptr->ident & (IDENT_MENTAL))) - { -#ifdef JP - fprintf(fff, "-------ÉÔÌÀ--------------- -------ÉÔÌÀ---------\n"); +#define IM_FLAG_STR "¡ö" +#define HAS_FLAG_STR "¡Ü" +#define NO_FLAG_STR "¡¦" #else - fprintf(fff, "-------unknown------------ -------unknown------\n"); +#define IM_FLAG_STR "* " +#define HAS_FLAG_STR "+ " +#define NO_FLAG_STR ". " #endif - } - else { - object_flags_known(o_ptr, flgs); - -#ifdef JP - if (have_flag(flgs, TR_IM_ACID)) fprintf(fff,"¡ö"); - else if (have_flag(flgs, TR_RES_ACID)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - if (have_flag(flgs, TR_IM_ELEC)) fprintf(fff,"¡ö"); - else if (have_flag(flgs, TR_RES_ELEC)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); +#define print_im_or_res_flag(IM, RES) \ +{ \ + fputs(have_flag(flgs, (IM)) ? IM_FLAG_STR : \ + (have_flag(flgs, (RES)) ? HAS_FLAG_STR : NO_FLAG_STR), fff); \ +} - if (have_flag(flgs, TR_IM_FIRE)) fprintf(fff,"¡ö"); - else if (have_flag(flgs, TR_RES_FIRE)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); +#define print_flag(TR) \ +{ \ + fputs(have_flag(flgs, (TR)) ? HAS_FLAG_STR : NO_FLAG_STR, fff); \ +} - if (have_flag(flgs, TR_IM_COLD)) fprintf(fff,"¡ö"); - else if (have_flag(flgs, TR_RES_COLD)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_POIS)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_LITE)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_DARK)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_SHARDS)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_SOUND)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_NETHER)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_NEXUS)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_CHAOS)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_DISEN)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - fprintf(fff," "); - - if (have_flag(flgs, TR_RES_BLIND)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_FEAR)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_RES_CONF)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_FREE_ACT)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_SEE_INVIS)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - - if (have_flag(flgs, TR_HOLD_LIFE)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); - if (have_flag(flgs, TR_TELEPATHY)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); +/* XTRA HACK RESLIST */ +static void do_cmd_knowledge_inven_aux(FILE *fff, object_type *o_ptr, int *j, byte tval, char *where) +{ + char o_name[MAX_NLEN]; + u32b flgs[TR_FLAG_SIZE]; + + if (!o_ptr->k_idx) return; + if (o_ptr->tval != tval) return; + + /* Identified items only */ + if (!object_known_p(o_ptr)) return; + + /* + * HACK:Ring of Lordly protection and Dragon equipment + * have random resistances. + */ + if (((TV_WEARABLE_BEGIN <= tval) && (tval <= TV_WEARABLE_END) && o_ptr->name2) + || ((tval == TV_AMULET) && (o_ptr->sval == SV_AMULET_RESISTANCE)) + || ((tval == TV_RING) && (o_ptr->sval == SV_RING_LORDLY)) + || ((tval == TV_SHIELD) && (o_ptr->sval == SV_DRAGON_SHIELD)) + || ((tval == TV_HELM) && (o_ptr->sval == SV_DRAGON_HELM)) + || ((tval == TV_GLOVES) && (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES)) + || ((tval == TV_BOOTS) && (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE)) + || o_ptr->art_name || o_ptr->name1) + { + int i = 0; + object_desc(o_name, o_ptr, OD_NAME_ONLY); - if (have_flag(flgs, TR_SLOW_DIGEST)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); + while (o_name[i] && (i < 26)) + { +#ifdef JP + if (iskanji(o_name[i])) i++; +#endif + i++; + } + if (i < 28) + { + while (i < 28) + { + o_name[i] = ' '; i++; + } + } + o_name[i] = '\0'; - if (have_flag(flgs, TR_REGEN)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); + fprintf(fff, "%s %s", where, o_name); - if (have_flag(flgs, TR_FEATHER)) fprintf(fff,"¡Ü"); - else fprintf(fff,"¡¦"); + if (!(o_ptr->ident & (IDENT_MENTAL))) + { +#ifdef JP + fputs("-------ÉÔÌÀ--------------- -------ÉÔÌÀ---------\n", fff); #else - if (have_flag(flgs, TR_IM_ACID)) fprintf(fff,"* "); - else if (have_flag(flgs, TR_RES_ACID)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_IM_ELEC)) fprintf(fff,"* "); - else if (have_flag(flgs, TR_RES_ELEC)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_IM_FIRE)) fprintf(fff,"* "); - else if (have_flag(flgs, TR_RES_FIRE)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_IM_COLD)) fprintf(fff,"* "); - else if (have_flag(flgs, TR_RES_COLD)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_POIS)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_LITE)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_DARK)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_SHARDS)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_SOUND)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_NETHER)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_NEXUS)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_CHAOS)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_DISEN)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - fprintf(fff," "); - - if (have_flag(flgs, TR_RES_BLIND)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_FEAR)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_RES_CONF)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_FREE_ACT)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_SEE_INVIS)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_HOLD_LIFE)) fprintf(fff,"+ "); - else fprintf(fff,". "); - - if (have_flag(flgs, TR_TELEPATHY)) fprintf(fff,"+ "); - else fprintf(fff,". "); + fputs("-------unknown------------ -------unknown------\n", fff); +#endif + } + else + { + object_flags_known(o_ptr, flgs); - if (have_flag(flgs, TR_SLOW_DIGEST)) fprintf(fff,"+ "); - else fprintf(fff,". "); + print_im_or_res_flag(TR_IM_ACID, TR_RES_ACID); + print_im_or_res_flag(TR_IM_ELEC, TR_RES_ELEC); + print_im_or_res_flag(TR_IM_FIRE, TR_RES_FIRE); + print_im_or_res_flag(TR_IM_COLD, TR_RES_COLD); + print_flag(TR_RES_POIS); + print_flag(TR_RES_LITE); + print_flag(TR_RES_DARK); + print_flag(TR_RES_SHARDS); + print_flag(TR_RES_SOUND); + print_flag(TR_RES_NETHER); + print_flag(TR_RES_NEXUS); + print_flag(TR_RES_CHAOS); + print_flag(TR_RES_DISEN); + fputs(" ", fff); - if (have_flag(flgs, TR_REGEN)) fprintf(fff,"+ "); - else fprintf(fff,". "); + print_flag(TR_RES_BLIND); + print_flag(TR_RES_FEAR); + print_flag(TR_RES_CONF); + print_flag(TR_FREE_ACT); + print_flag(TR_SEE_INVIS); + print_flag(TR_HOLD_LIFE); + print_flag(TR_TELEPATHY); + print_flag(TR_SLOW_DIGEST); + print_flag(TR_REGEN); + print_flag(TR_FEATHER); - if (have_flag(flgs, TR_FEATHER)) fprintf(fff,"+ "); - else fprintf(fff,". "); -#endif - fprintf(fff,"\n"); - } - (*j)++; - if(*j==9) - { - *j=0; - fprintf(fff,"%s\n", inven_res_label); + fputc('\n', fff); + } + (*j)++; + if (*j == 9) + { + *j = 0; + fprintf(fff, "%s\n", inven_res_label); + } } - } } /* @@ -5806,23 +5720,22 @@ static void do_cmd_knowledge_inven_aux(FILE *fff, object_type *o_ptr, */ static void do_cmd_knowledge_inven(void) { - FILE *fff; char file_name[1024]; - + store_type *st_ptr; - object_type *o_ptr; byte tval; - int i=0; - int j=0; + int i = 0; + int j = 0; char where[32]; /* Open a new file */ fff = my_fopen_temp(file_name, 1024); - if (!fff) { + if (!fff) + { #ifdef JP msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name); #else @@ -5831,55 +5744,50 @@ static void do_cmd_knowledge_inven(void) msg_print(NULL); return; } - fprintf(fff,"%s\n",inven_res_label); + fprintf(fff, "%s\n", inven_res_label); - for (tval=TV_BOW; tval <= TV_RING; tval++){ + for (tval = TV_WEARABLE_BEGIN; tval <= TV_WEARABLE_END; tval++) + { + if (j != 0) + { + for (; j < 9; j++) fputc('\n', fff); + j = 0; + fprintf(fff, "%s\n", inven_res_label); + } - if (j!=0) { - for (;j<9;j++) fprintf(fff, "\n"); - j=0; - fprintf(fff,"%s\n",inven_res_label); - } - #ifdef JP - strcpy(where, "Áõ"); + strcpy(where, "Áõ"); #else - strcpy(where, "E "); + strcpy(where, "E "); #endif - for (i = INVEN_RARM; i < INVEN_TOTAL; i++) - { - o_ptr = &inventory[i]; - do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where); - } - + for (i = INVEN_RARM; i < INVEN_TOTAL; i++) + { + do_cmd_knowledge_inven_aux(fff, &inventory[i], &j, tval, where); + } + #ifdef JP - strcpy(where, "»ý"); + strcpy(where, "»ý"); #else - strcpy(where, "I "); + strcpy(where, "I "); #endif - for (i = 0; i < INVEN_PACK; i++) - { - o_ptr = &inventory[i]; - do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where); - } - - - /* Print all homes in the different towns */ - st_ptr = &town[1].store[STORE_HOME]; + for (i = 0; i < INVEN_PACK; i++) + { + do_cmd_knowledge_inven_aux(fff, &inventory[i], &j, tval, where); + } + + st_ptr = &town[1].store[STORE_HOME]; #ifdef JP - strcpy(where, "²È"); + strcpy(where, "²È"); #else - strcpy(where, "H "); + strcpy(where, "H "); #endif - - /* Dump all available items */ - for (i = 0; i < st_ptr->stock_num; i++) - { - o_ptr = &st_ptr->stock[i]; - do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where); - } + + for (i = 0; i < st_ptr->stock_num; i++) + { + do_cmd_knowledge_inven_aux(fff, &st_ptr->stock[i], &j, tval, where); + } } - + /* Close the file */ my_fclose(fff); @@ -6492,8 +6400,11 @@ static void do_cmd_knowledge_artifacts(void) /* Make it an artifact */ q_ptr->name1 = (byte)who[k]; + /* Display as if known */ + q_ptr->ident |= IDENT_STORE; + /* Describe the artifact */ - object_desc_store(base_name, q_ptr, FALSE, 0); + object_desc(base_name, q_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); } /* Hack -- Build the artifact name */ @@ -6851,25 +6762,25 @@ void plural_aux(char *Name) { int NameLen = strlen(Name); - if (strstr(Name, "Disembodied hand")) + if (my_strstr(Name, "Disembodied hand")) { strcpy(Name, "Disembodied hands that strangled people"); } - else if (strstr(Name, "Colour out of space")) + else if (my_strstr(Name, "Colour out of space")) { strcpy(Name, "Colours out of space"); } - else if (strstr(Name, "stairway to hell")) + else if (my_strstr(Name, "stairway to hell")) { strcpy(Name, "stairways to hell"); } - else if (strstr(Name, "Dweller on the threshold")) + else if (my_strstr(Name, "Dweller on the threshold")) { strcpy(Name, "Dwellers on the threshold"); } - else if (strstr(Name, " of ")) + else if (my_strstr(Name, " of ")) { - cptr aider = strstr(Name, " of "); + cptr aider = my_strstr(Name, " of "); char dummy[80]; int i = 0; cptr ctr = Name; @@ -6893,7 +6804,7 @@ void plural_aux(char *Name) strcpy(&(dummy[i+1]), aider); strcpy(Name, dummy); } - else if (strstr(Name, "coins")) + else if (my_strstr(Name, "coins")) { char dummy[80]; strcpy(dummy, "piles of "); @@ -6901,7 +6812,7 @@ void plural_aux(char *Name) strcpy(Name, dummy); return; } - else if (strstr(Name, "Manes")) + else if (my_strstr(Name, "Manes")) { return; } @@ -6975,6 +6886,7 @@ static void do_cmd_knowledge_pets(void) int i; FILE *fff; monster_type *m_ptr; + char pet_name[80]; int t_friends = 0; int show_upkeep = 0; char file_name[1024]; @@ -7004,17 +6916,9 @@ static void do_cmd_knowledge_pets(void) /* Calculate "upkeep" for pets */ if (is_pet(m_ptr)) { - char pet_name[80]; t_friends++; - monster_desc(pet_name, m_ptr, 0x88); - fprintf(fff, "%s (%s)", pet_name, look_mon_desc(i, 0x00)); - if (p_ptr->riding == i) -#ifdef JP - fprintf(fff, " ¾èÇÏÃæ"); -#else - fprintf(fff, " Riding"); -#endif - fprintf(fff, "\n"); + monster_desc(pet_name, m_ptr, MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE); + fprintf(fff, "%s (%s)\n", pet_name, look_mon_desc(m_ptr, 0x00)); } } @@ -7176,14 +7080,14 @@ static void do_cmd_knowledge_kill_count(void) { #ifdef JP /* p,t¤Ï¿Í¤È¿ô¤¨¤ë by ita*/ - if(strchr("pt",r_ptr->d_char)) + if(my_strchr("pt",r_ptr->d_char)) fprintf(fff, " %3d ¿Í¤Î %s\n", This, r_name + r_ptr->name); else fprintf(fff, " %3d ɤ¤Î %s\n", This, r_name + r_ptr->name); #else if (This < 2) { - if (strstr(r_name + r_ptr->name, "coins")) + if (my_strstr(r_name + r_ptr->name, "coins")) { fprintf(fff, " 1 pile of %s\n", (r_name + r_ptr->name)); } @@ -7395,8 +7299,8 @@ static void display_visual_list(int col, int row, int height, int width, byte at /* Display columns until done */ for (j = 0; j < width; j++) { - byte a, a2; - char c, c2; + byte a; + char c; int x = col + j; int y = row + i; int ia, ic; @@ -7418,13 +7322,8 @@ static void display_visual_list(int col, int row, int height, int width, byte at /* Force correct code for both ASCII character and tile */ if (c & 0x80) a |= 0x80; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - /* Display symbol */ - Term_putch(x, y, a, c); - - /* Second byte */ - if (use_bigtile) Term_putch(x + 1, y, a2, c2); + Term_queue_bigchar(x, y, a, c, 0, 0); } } } @@ -7455,13 +7354,17 @@ static void place_visual_list_cursor(int col, int row, byte a, byte c, byte attr static byte attr_idx = 0; static byte char_idx = 0; +/* Hack -- for feature lighting */ +static byte attr_idx_feat[F_LIT_MAX] = {0, 0, 0, 0}; +static byte char_idx_feat[F_LIT_MAX] = {0, 0, 0, 0}; + /* * Do visual mode command -- Change symbols */ static bool visual_mode_command(char ch, bool *visual_list_ptr, - int height, int width, - byte *attr_top_ptr, byte *char_left_ptr, - byte *cur_attr_ptr, byte *cur_char_ptr) + int height, int width, + byte *attr_top_ptr, byte *char_left_ptr, + byte *cur_attr_ptr, byte *cur_char_ptr, bool *need_redraw) { static byte attr_old = 0, char_old = 0; @@ -7486,6 +7389,7 @@ static bool visual_mode_command(char ch, bool *visual_list_ptr, { /* Accept change */ *visual_list_ptr = FALSE; + *need_redraw = TRUE; return TRUE; } @@ -7509,19 +7413,30 @@ static bool visual_mode_command(char ch, bool *visual_list_ptr, case 'C': case 'c': - /* Set the visual */ - attr_idx = *cur_attr_ptr; - char_idx = *cur_char_ptr; + { + int i; + /* Set the visual */ + attr_idx = *cur_attr_ptr; + char_idx = *cur_char_ptr; + + /* Hack -- for feature lighting */ + for (i = 0; i < F_LIT_MAX; i++) + { + attr_idx_feat[i] = 0; + char_idx_feat[i] = 0; + } + } return TRUE; case 'P': case 'p': - if (attr_idx) + if (attr_idx || (!(char_idx & 0x80) && char_idx)) /* Allow ATTR_DARK text */ { /* Set the char */ *cur_attr_ptr = attr_idx; *attr_top_ptr = MAX(0, (*cur_attr_ptr & 0x7f) - 5); + if (!*visual_list_ptr) *need_redraw = TRUE; } if (char_idx) @@ -7529,6 +7444,7 @@ static bool visual_mode_command(char ch, bool *visual_list_ptr, /* Set the char */ *cur_char_ptr = char_idx; *char_left_ptr = MAX(0, *cur_char_ptr - 10); + if (!*visual_list_ptr) *need_redraw = TRUE; } return TRUE; @@ -7543,7 +7459,7 @@ static bool visual_mode_command(char ch, bool *visual_list_ptr, if (use_bigtile) eff_width = width / 2; else eff_width = width; - + /* Restrict direction */ if ((a == 0) && (ddy[d] < 0)) d = 0; if ((c == 0) && (ddx[d] < 0)) d = 0; @@ -7589,8 +7505,6 @@ static void display_monster_list(int col, int row, int per_page, s16b mon_idx[], for (i = 0; i < per_page && mon_idx[mon_top + i]; i++) { byte attr; - byte a, a2; - char c, c2; /* Get the race index */ int r_idx = mon_idx[mon_top + i] ; @@ -7615,15 +7529,9 @@ static void display_monster_list(int col, int row, int per_page, s16b mon_idx[], c_prt(attr, format("%d", r_idx), row + i, 60); } - a = r_ptr->x_attr; - c = r_ptr->x_char; - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - /* Display symbol */ - Term_putch(70, row + i, a, c); + Term_queue_bigchar(70, row + i, r_ptr->x_attr, r_ptr->x_char, 0, 0); - /* Second byte */ - if (use_bigtile) Term_putch(70 + 1, row + i, a2, c2); /* Display kills */ if (!(r_ptr->flags1 & RF1_UNIQUE)) put_str(format("%5d", r_ptr->r_pkills), row + i, 73); @@ -7646,7 +7554,7 @@ static void display_monster_list(int col, int row, int per_page, s16b mon_idx[], /* * Display known monsters. */ -static void do_cmd_knowledge_monsters(void) +static void do_cmd_knowledge_monsters(bool *need_redraw) { int i, len, max; int grp_cur, grp_top, old_grp_cur; @@ -7654,7 +7562,7 @@ static void do_cmd_knowledge_monsters(void) int grp_cnt, grp_idx[100]; int mon_cnt; s16b *mon_idx; - + int column = 0; bool flag; bool redraw; @@ -7805,11 +7713,11 @@ static void do_cmd_knowledge_monsters(void) { Term_gotoxy(max + 3, 6 + (mon_cur - mon_top)); } - + ch = inkey(); /* Do visual mode command if needed */ - if (visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, &r_ptr->x_attr, &r_ptr->x_char)) continue; + if (visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, &r_ptr->x_attr, &r_ptr->x_char, need_redraw)) continue; switch (ch) { @@ -7861,8 +7769,7 @@ static void display_object_list(int col, int row, int per_page, int object_idx[] for (i = 0; i < per_page && object_idx[object_top + i]; i++) { char o_name[80]; - byte a, a2; - char c, c2; + byte a, c; /* Get the object index */ int k_idx = object_idx[object_top + i]; @@ -7902,13 +7809,8 @@ static void display_object_list(int col, int row, int per_page, int object_idx[] a = TERM_DARK; } - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); - /* Display symbol */ - Term_putch(76, row + i, a, c); - - /* Second byte */ - if (use_bigtile) Term_putch(76 + 1, row + i, a2, c2); + Term_queue_bigchar(76, row + i, a, c, 0, 0); } /* Clear remaining lines */ @@ -7963,7 +7865,7 @@ static void desc_obj_fake(int k_idx) /* * Display known objects */ -static void do_cmd_knowledge_objects(void) +static void do_cmd_knowledge_objects(bool *need_redraw) { int i, len, max; int grp_cur, grp_top, old_grp_cur; @@ -8103,7 +8005,7 @@ static void do_cmd_knowledge_objects(void) /* Prompt */ #ifdef JP - prt(format("<Êý¸þ>, 'r'¤Ç»×¤¤½Ð¤ò¸«¤ë%s%s, ESC", k_ptr->flavor ? "" : visual_list ? ", ENTER¤Ç·èÄê" : ", 'v'¤Ç¥·¥ó¥Ü¥ëÊѹ¹", (attr_idx||char_idx) ? ", 'c', 'p'¤Ç¥Ú¡¼¥¹¥È" : ", 'c'¤Ç¥³¥Ô¡¼"), hgt - 1, 0); + prt(format("<Êý¸þ>, 'r'¤Ç¾ÜºÙ¤ò¸«¤ë%s%s, ESC", k_ptr->flavor ? "" : visual_list ? ", ENTER¤Ç·èÄê" : ", 'v'¤Ç¥·¥ó¥Ü¥ëÊѹ¹", (attr_idx||char_idx) ? ", 'c', 'p'¤Ç¥Ú¡¼¥¹¥È" : ", 'c'¤Ç¥³¥Ô¡¼"), hgt - 1, 0); #else prt(format(", 'r' to recall%s%s, ESC", k_ptr->flavor ? "" : visual_list ? ", ENTER to accept" : ", 'v' for visuals", (attr_idx||char_idx) ? ", 'c', 'p' to paste" : ", 'c' to copy"), hgt - 1, 0); #endif @@ -8130,12 +8032,12 @@ static void do_cmd_knowledge_objects(void) { Term_gotoxy(max + 3, 6 + (object_cur - object_top)); } - + ch = inkey(); /* Do visual mode command if needed */ /* Symbol of objects with flavor cannot be changed */ - if (!k_ptr->flavor && visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, &k_ptr->x_attr, &k_ptr->x_char)) continue; + if (!k_ptr->flavor && visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, &k_ptr->x_attr, &k_ptr->x_char, need_redraw)) continue; switch (ch) { @@ -8170,20 +8072,26 @@ static void do_cmd_knowledge_objects(void) } - /* * Display the features in a group. */ static void display_feature_list(int col, int row, int per_page, int *feat_idx, - int feat_cur, int feat_top) + int feat_cur, int feat_top, int lighting_level) { int i; + int col2 = 67; + int col3 = 69; + int col4 = 71; + + /* Correct columns 1 and 4 */ + if (use_bigtile) + { + col2++; col3 += 2; col4 += 3; + } /* Display lines until done */ for (i = 0; i < per_page && feat_idx[feat_top + i]; i++) { - byte a, a2; - char c, c2; byte attr; /* Get the index */ @@ -8201,19 +8109,30 @@ static void display_feature_list(int col, int row, int per_page, int *feat_idx, /* Hack -- visual_list mode */ if (per_page == 1) { - c_prt(attr, format("%02x/%02x", f_ptr->x_attr, f_ptr->x_char), row + i, 60); + /* Display lighting level */ + c_prt(attr, format("(%s)", lighting_level_str[lighting_level]), row + i, col + 1 + strlen(f_name + f_ptr->name)); + + c_prt(attr, format("%02x/%02x", f_ptr->x_attr[lighting_level], f_ptr->x_char[lighting_level]), row + i, 56); } - a = f_ptr->x_attr; - c = f_ptr->x_char; + /* Display symbol */ + Term_queue_bigchar(65, row + i, f_ptr->x_attr[F_LIT_STANDARD], f_ptr->x_char[F_LIT_STANDARD], 0, 0); - if (use_bigtile) bigtile_attr(&c, &a, &c2, &a2); + Term_putch(col2, row + i, TERM_SLATE, '('); + Term_putch(col3, row + i, TERM_SLATE, '/'); + Term_putch(col4, row + i, TERM_SLATE, '/'); + Term_putch(col4 + (use_bigtile ? 3 : 2), row + i, TERM_SLATE, ')'); - /* Display symbol */ - Term_putch(68, row + i, a, c); + /* Mega-hack */ + + /* Use lightened colour */ + Term_queue_bigchar(col2 + 1, row + i, f_ptr->x_attr[F_LIT_LITE], f_ptr->x_char[F_LIT_LITE], 0, 0); + + /* Use darkened colour */ + Term_queue_bigchar(col3 + 1, row + i, f_ptr->x_attr[F_LIT_DARK], f_ptr->x_char[F_LIT_DARK], 0, 0); - /* Second byte */ - if (use_bigtile) Term_putch(68 + 1, row + i, a2, c2); + /* Use darkly darkened colour */ + Term_queue_bigchar(col4 + 1, row + i, f_ptr->x_attr[F_LIT_DARKDARK], f_ptr->x_char[F_LIT_DARKDARK], 0, 0); } /* Clear remaining lines */ @@ -8227,7 +8146,7 @@ static void display_feature_list(int col, int row, int per_page, int *feat_idx, /* * Interact with feature visuals. */ -static void do_cmd_knowledge_features(void) +static void do_cmd_knowledge_features(bool *need_redraw) { int i, len, max; int grp_cur, grp_top, old_grp_cur; @@ -8235,7 +8154,7 @@ static void do_cmd_knowledge_features(void) int grp_cnt, grp_idx[100]; int feat_cnt; int *feat_idx; - + int column = 0; bool flag; bool redraw; @@ -8246,6 +8165,11 @@ static void do_cmd_knowledge_features(void) int browser_rows; int wid, hgt; + byte attr_old[F_LIT_MAX] = {0, 0, 0, 0}; + byte char_old[F_LIT_MAX] = {0, 0, 0, 0}; + byte *cur_attr_ptr, *cur_char_ptr; + int lighting_level = F_LIT_STANDARD; + /* Get size */ Term_get_size(&wid, &hgt); @@ -8293,11 +8217,20 @@ static void do_cmd_knowledge_features(void) if (redraw) { clear_from(0); - + +#ifdef JP + prt("ɽ¼¨ - ÃÏ·Á", 2, 0); + prt("¥°¥ë¡¼¥×", 4, 0); + prt("̾Á°", 4, max + 3); + if (use_bigtile) prt("ʸ»ú ( l/ d/ D)", 4, 63); + else prt("ʸ»ú (l/d/D)", 4, 62); +#else prt("Visuals - features", 2, 0); prt("Group", 4, 0); prt("Name", 4, max + 3); - prt("Sym", 4, 67); + if (use_bigtile) prt("Sym ( l/ d/ D)", 4, 64); + else prt("Sym (l/d/D)", 4, 63); +#endif for (i = 0; i < 78; i++) { @@ -8336,14 +8269,14 @@ static void do_cmd_knowledge_features(void) if (!visual_list) { /* Display a list of features in the current group */ - display_feature_list(max + 3, 6, browser_rows, feat_idx, feat_cur, feat_top); + display_feature_list(max + 3, 6, browser_rows, feat_idx, feat_cur, feat_top, F_LIT_STANDARD); } else { feat_top = feat_cur; /* Display a list of features in the current group */ - display_feature_list(max + 3, 6, 1, feat_idx, feat_cur, feat_top); + display_feature_list(max + 3, 6, 1, feat_idx, feat_cur, feat_top, lighting_level); /* Display visual list below first object */ display_visual_list(max + 3, 7, browser_rows-1, wid - (max + 3), attr_top, char_left); @@ -8351,17 +8284,19 @@ static void do_cmd_knowledge_features(void) /* Prompt */ #ifdef JP - prt(format("<Êý¸þ>%s%s, ESC", visual_list ? ", ENTER¤Ç·èÄê" : ", 'v'¤Ç¥·¥ó¥Ü¥ëÊѹ¹", (attr_idx||char_idx) ? ", 'c', 'p'¤Ç¥Ú¡¼¥¹¥È" : ", 'c'¤Ç¥³¥Ô¡¼"), hgt - 1, 0); + prt(format("<Êý¸þ>%s%s, ESC", visual_list ? ", ENTER¤Ç·èÄê, 'a'¤ÇÂоÝÌÀÅÙÊѹ¹" : ", 'v'¤Ç¥·¥ó¥Ü¥ëÊѹ¹", (attr_idx||char_idx) ? ", 'c', 'p'¤Ç¥Ú¡¼¥¹¥È" : ", 'c'¤Ç¥³¥Ô¡¼"), hgt - 1, 0); #else - prt(format("%s%s, ESC", visual_list ? ", ENTER to accept" : ", 'v' for visuals", (attr_idx||char_idx) ? ", 'c', 'p' to paste" : ", 'c' to copy"), hgt - 1, 0); + prt(format("%s%s, ESC", visual_list ? ", ENTER to accept, 'a' for lighting level" : ", 'v' for visuals", (attr_idx||char_idx) ? ", 'c', 'p' to paste" : ", 'c' to copy"), hgt - 1, 0); #endif /* Get the current feature */ f_ptr = &f_info[feat_idx[feat_cur]]; + cur_attr_ptr = &f_ptr->x_attr[lighting_level]; + cur_char_ptr = &f_ptr->x_char[lighting_level]; if (visual_list) { - place_visual_list_cursor(max + 3, 7, f_ptr->x_attr, f_ptr->x_char, attr_top, char_left); + place_visual_list_cursor(max + 3, 7, *cur_attr_ptr, *cur_char_ptr, attr_top, char_left); } else if (!column) { @@ -8371,11 +8306,85 @@ static void do_cmd_knowledge_features(void) { Term_gotoxy(max + 3, 6 + (feat_cur - feat_top)); } - + ch = inkey(); + if ((ch == 'A') && visual_list) + { + if (lighting_level <= F_LIT_STANDARD) lighting_level = F_LIT_DARKDARK; + else lighting_level--; + attr_top = MAX(0, (f_ptr->x_attr[lighting_level] & 0x7f) - 5); + char_left = MAX(0, f_ptr->x_char[lighting_level] - 10); + continue; + } + + else if ((ch == 'a') && visual_list) + { + if (lighting_level >= F_LIT_DARKDARK) lighting_level = F_LIT_STANDARD; + else lighting_level++; + attr_top = MAX(0, (f_ptr->x_attr[lighting_level] & 0x7f) - 5); + char_left = MAX(0, f_ptr->x_char[lighting_level] - 10); + continue; + } + /* Do visual mode command if needed */ - if (visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, &f_ptr->x_attr, &f_ptr->x_char)) continue; + else if (visual_mode_command(ch, &visual_list, browser_rows-1, wid - (max + 3), &attr_top, &char_left, cur_attr_ptr, cur_char_ptr, need_redraw)) + { + switch (ch) + { + /* Restore previous visual settings */ + case ESCAPE: + for (i = 0; i < F_LIT_MAX; i++) + { + f_ptr->x_attr[i] = attr_old[i]; + f_ptr->x_char[i] = char_old[i]; + } + + /* Fall through */ + + case '\n': + case '\r': + lighting_level = F_LIT_STANDARD; + break; + + /* Preserve current visual settings */ + case 'V': + case 'v': + for (i = 0; i < F_LIT_MAX; i++) + { + attr_old[i] = f_ptr->x_attr[i]; + char_old[i] = f_ptr->x_char[i]; + } + lighting_level = F_LIT_STANDARD; + break; + + case 'C': + case 'c': + if (!visual_list) + { + for (i = 0; i < F_LIT_MAX; i++) + { + attr_idx_feat[i] = f_ptr->x_attr[i]; + char_idx_feat[i] = f_ptr->x_char[i]; + } + } + break; + + case 'P': + case 'p': + if (!visual_list) + { + /* Allow ATTR_DARK text */ + for (i = F_LIT_NS_BEGIN; i < F_LIT_MAX; i++) + { + if (attr_idx_feat[i] || (!(char_idx_feat[i] & 0x80) && char_idx_feat[i])) f_ptr->x_attr[i] = attr_idx_feat[i]; + if (char_idx_feat[i]) f_ptr->x_char[i] = char_idx_feat[i]; + } + } + break; + } + continue; + } switch (ch) { @@ -8427,6 +8436,8 @@ static void do_cmd_knowledge_kubi(void) if (fff) { + bool listed = FALSE; + #ifdef JP fprintf(fff, "º£Æü¤Î¥¿¡¼¥²¥Ã¥È : %s\n", (p_ptr->today_mon ? r_name + r_info[p_ptr->today_mon].name : "ÉÔÌÀ")); fprintf(fff, "\n"); @@ -8436,17 +8447,25 @@ static void do_cmd_knowledge_kubi(void) fprintf(fff, "\n"); fprintf(fff, "List of wanted monsters\n"); #endif + fprintf(fff, "----------------------------------------------\n"); + for (i = 0; i < MAX_KUBI; i++) { - fprintf(fff,"%-40s ---- ",r_name + r_info[(kubi_r_idx[i] > 10000 ? kubi_r_idx[i] - 10000 : kubi_r_idx[i])].name); - if (kubi_r_idx[i] > 10000) + if (kubi_r_idx[i] <= 10000) + { + fprintf(fff,"%s\n", r_name + r_info[kubi_r_idx[i]].name); + + listed = TRUE; + } + } + + if (!listed) + { #ifdef JP - fprintf(fff, "ºÑ\n"); + fprintf(fff,"\n%s\n", "¾Þ¶â¼ó¤Ï¤â¤¦»Ä¤Ã¤Æ¤¤¤Þ¤»¤ó¡£"); #else - fprintf(fff, "done\n"); + fprintf(fff,"\n%s\n", "There is no more wanted monster."); #endif - else - fprintf(fff, "$%d\n", 300 * (r_info[kubi_r_idx[i]].level + 1)); } } @@ -8880,9 +8899,9 @@ void do_cmd_knowledge_quests_completed(FILE *fff, int quest_num[]) { sprintf(tmp_str, #ifdef JP - " %-40s (%2d³¬) - ÉÔÀᄀ\n", + " %-40s (%3d³¬) - ÉÔÀᄀ\n", #else - " %-40s (Dungeon level: %2d) - (Cancelled)\n", + " %-40s (Dungeon level: %3d) - (Cancelled)\n", #endif r_name+r_info[quest[q_idx].r_idx].name, quest[q_idx].level); @@ -8891,9 +8910,9 @@ void do_cmd_knowledge_quests_completed(FILE *fff, int quest_num[]) { sprintf(tmp_str, #ifdef JP - " %-40s (%2d³¬) - ¥ì¥Ù¥ë%2d\n", + " %-40s (%3d³¬) - ¥ì¥Ù¥ë%2d\n", #else - " %-40s (Dungeon level: %2d) - level %2d\n", + " %-40s (Dungeon level: %3d) - level %2d\n", #endif r_name+r_info[quest[q_idx].r_idx].name, quest[q_idx].level, @@ -8904,10 +8923,10 @@ void do_cmd_knowledge_quests_completed(FILE *fff, int quest_num[]) { /* Print the quest info */ #ifdef JP - sprintf(tmp_str, " %-40s (´í¸±ÅÙ:%2d³¬ÁêÅö) - ¥ì¥Ù¥ë%2d\n", + sprintf(tmp_str, " %-40s (´í¸±ÅÙ:%3d³¬ÁêÅö) - ¥ì¥Ù¥ë%2d\n", quest[q_idx].name, quest[q_idx].level, quest[q_idx].complev); #else - sprintf(tmp_str, " %-40s (Danger level: %2d) - level %2d\n", + sprintf(tmp_str, " %-40s (Danger level: %3d) - level %2d\n", quest[q_idx].name, quest[q_idx].level, quest[q_idx].complev); #endif } @@ -8968,10 +8987,10 @@ void do_cmd_knowledge_quests_failed(FILE *fff, int quest_num[]) { /* Print the quest info */ #ifdef JP - sprintf(tmp_str, " %-40s (%2d³¬) - ¥ì¥Ù¥ë%2d\n", + sprintf(tmp_str, " %-40s (%3d³¬) - ¥ì¥Ù¥ë%2d\n", r_name+r_info[quest[q_idx].r_idx].name, quest[q_idx].level, quest[q_idx].complev); #else - sprintf(tmp_str, " %-40s (Dungeon level: %2d) - level %2d\n", + sprintf(tmp_str, " %-40s (Dungeon level: %3d) - level %2d\n", r_name+r_info[quest[q_idx].r_idx].name, quest[q_idx].level, quest[q_idx].complev); #endif } @@ -8979,10 +8998,10 @@ void do_cmd_knowledge_quests_failed(FILE *fff, int quest_num[]) { /* Print the quest info */ #ifdef JP - sprintf(tmp_str, " %-40s (´í¸±ÅÙ:%2d³¬ÁêÅö) - ¥ì¥Ù¥ë%2d\n", + sprintf(tmp_str, " %-40s (´í¸±ÅÙ:%3d³¬ÁêÅö) - ¥ì¥Ù¥ë%2d\n", quest[q_idx].name, quest[q_idx].level, quest[q_idx].complev); #else - sprintf(tmp_str, " %-40s (Danger level: %2d) - level %2d\n", + sprintf(tmp_str, " %-40s (Danger level: %3d) - level %2d\n", quest[q_idx].name, quest[q_idx].level, quest[q_idx].complev); #endif } @@ -9179,7 +9198,7 @@ static void do_cmd_knowledge_home(void) { #ifdef JP if ((i % 12) == 0) fprintf(fff, "\n ( %d ¥Ú¡¼¥¸ )\n", x++); - object_desc(o_name, &st_ptr->stock[i], TRUE, 3); + object_desc(o_name, &st_ptr->stock[i], 0); if (strlen(o_name) <= 80-3) { fprintf(fff, "%c%s %s\n", I2A(i%12), paren, o_name); @@ -9196,7 +9215,7 @@ static void do_cmd_knowledge_home(void) fprintf(fff, " %.77s\n", o_name+n); } #else - object_desc(o_name, &st_ptr->stock[i], TRUE, 3); + object_desc(o_name, &st_ptr->stock[i], 0); fprintf(fff, "%c%s %s\n", I2A(i%12), paren, o_name); #endif @@ -9329,16 +9348,21 @@ static void do_cmd_knowledge_autopick(void) */ void do_cmd_knowledge(void) { - int i,p=0; + int i, p = 0; + bool need_redraw = FALSE; + /* File type is "TEXT" */ FILE_TYPE(FILE_TYPE_TEXT); + /* Save the screen */ screen_save(); + /* Interact until done */ while (1) { /* Clear screen */ Term_clear(); + /* Ask for a choice */ #ifdef JP prt(format("%d/2 ¥Ú¡¼¥¸", (p+1)), 2, 65); @@ -9350,18 +9374,21 @@ void do_cmd_knowledge(void) /* Give some choices */ #ifdef JP - if (p == 0) { + if (p == 0) + { prt("(1) ´ûÃΤÎÅÁÀâ¤Î¥¢¥¤¥Æ¥à ¤Î°ìÍ÷", 6, 5); prt("(2) ´ûÃΤΥ¢¥¤¥Æ¥à ¤Î°ìÍ÷", 7, 5); prt("(3) ´ûÃΤÎÀ¸¤­¤Æ¤¤¤ë¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼ ¤Î°ìÍ÷", 8, 5); prt("(4) ´ûÃΤΥâ¥ó¥¹¥¿¡¼ ¤Î°ìÍ÷", 9, 5); prt("(5) Åݤ·¤¿Å¨¤Î¿ô ¤Î°ìÍ÷", 10, 5); - prt("(6) ¾Þ¶â¼ó ¤Î°ìÍ÷", 11, 5); + if (!vanilla_town) prt("(6) ¾Þ¶â¼ó ¤Î°ìÍ÷", 11, 5); prt("(7) ¸½ºß¤Î¥Ú¥Ã¥È ¤Î°ìÍ÷", 12, 5); prt("(8) ²æ¤¬²È¤Î¥¢¥¤¥Æ¥à ¤Î°ìÍ÷", 13, 5); prt("(9) *´ÕÄê*ºÑ¤ßÁõÈ÷¤ÎÂÑÀ­ ¤Î°ìÍ÷", 14, 5); prt("(0) ÃÏ·Á¤Îɽ¼¨Ê¸»ú/¥¿¥¤¥ë ¤Î°ìÍ÷", 15, 5); - } else { + } + else + { prt("(a) ¼«Ê¬¤Ë´Ø¤¹¤ë¾ðÊó ¤Î°ìÍ÷", 6, 5); prt("(b) ÆÍÁ³ÊÑ°Û ¤Î°ìÍ÷", 7, 5); prt("(c) Éð´ï¤Î·Ð¸³ÃÍ ¤Î°ìÍ÷", 8, 5); @@ -9373,18 +9400,21 @@ void do_cmd_knowledge(void) prt("(i) ¸½ºß¤Î¼«Æ°½¦¤¤/Ç˲õÀßÄê ¤Î°ìÍ÷", 14, 5); } #else - if (p == 0) { + if (p == 0) + { prt("(1) Display known artifacts", 6, 5); prt("(2) Display known objects", 7, 5); prt("(3) Display remaining uniques", 8, 5); prt("(4) Display known monster", 9, 5); prt("(5) Display kill count", 10, 5); - prt("(6) Display wanted monsters", 11, 5); + if (!vanilla_town) prt("(6) Display wanted monsters", 11, 5); prt("(7) Display current pets", 12, 5); prt("(8) Display home inventory", 13, 5); prt("(9) Display *identified* equip.", 14, 5); prt("(0) Display terrain symbols.", 15, 5); - } else { + } + else + { prt("(a) Display about yourself", 6, 5); prt("(b) Display mutations", 7, 5); prt("(c) Display weapon proficiency", 8, 5); @@ -9413,6 +9443,7 @@ void do_cmd_knowledge(void) /* Prompt */ i = inkey(); + /* Done */ if (i == ESCAPE) break; switch (i) @@ -9425,19 +9456,19 @@ void do_cmd_knowledge(void) do_cmd_knowledge_artifacts(); break; case '2': /* Objects */ - do_cmd_knowledge_objects(); + do_cmd_knowledge_objects(&need_redraw); break; case '3': /* Uniques */ do_cmd_knowledge_uniques(); break; case '4': /* Monsters */ - do_cmd_knowledge_monsters(); + do_cmd_knowledge_monsters(&need_redraw); break; case '5': /* Kill count */ do_cmd_knowledge_kill_count(); break; case '6': /* wanted */ - do_cmd_knowledge_kubi(); + if (!vanilla_town) do_cmd_knowledge_kubi(); break; case '7': /* Pets */ do_cmd_knowledge_pets(); @@ -9449,7 +9480,7 @@ void do_cmd_knowledge(void) do_cmd_knowledge_inven(); break; case '0': /* Feature list */ - do_cmd_knowledge_features(); + do_cmd_knowledge_features(&need_redraw); break; /* Next page */ case 'a': /* Max stat */ @@ -9482,11 +9513,15 @@ void do_cmd_knowledge(void) default: /* Unknown option */ bell(); } + /* Flush messages */ msg_print(NULL); } + /* Restore the screen */ screen_load(); + + if (need_redraw) do_cmd_redraw(); }