3 /* Purpose: Interface commands */
6 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
8 * This software may be copied and distributed for educational, research, and
9 * not for profit purposes provided that this copyright and statement are
10 * included in all such copies.
17 * mark strings for auto dump
19 static char auto_dump_header[] = "# vvvvvvv== %s ==vvvvvvv";
20 static char auto_dump_footer[] = "# ^^^^^^^== %s ==^^^^^^^";
23 * Remove old lines automatically generated before.
25 static void remove_auto_dump(cptr orig_file, cptr mark)
27 FILE *tmp_fff, *orig_fff;
31 bool between_mark = FALSE;
34 long header_location = 0;
35 char header_mark_str[80];
36 char footer_mark_str[80];
39 sprintf(header_mark_str, auto_dump_header, mark);
40 sprintf(footer_mark_str, auto_dump_footer, mark);
42 mark_len = strlen(footer_mark_str);
44 /* If original file is not exist, nothing to do */
45 orig_fff = my_fopen(orig_file, "r");
52 tmp_fff = my_fopen_temp(tmp_file, 1024);
55 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", tmp_file);
57 msg_format("Failed to create temporary file %s.", tmp_file);
65 if (my_fgets(orig_fff, buf, sizeof(buf)))
69 fseek(orig_fff, header_location, SEEK_SET);
81 if (!strcmp(buf, header_mark_str))
83 header_location = ftell(orig_fff);
90 fprintf(tmp_fff, "%s\n", buf);
95 if (!strncmp(buf, footer_mark_str, mark_len))
99 if (!sscanf(buf + mark_len, " (%d)", &tmp)
102 fseek(orig_fff, header_location, SEEK_SET);
105 between_mark = FALSE;
118 /* copy contents of temporally file */
120 tmp_fff = my_fopen(tmp_file, "r");
121 orig_fff = my_fopen(orig_file, "w");
123 while (!my_fgets(tmp_fff, buf, sizeof(buf)))
124 fprintf(orig_fff, "%s\n", buf);
135 * Open file to append auto dump.
137 static FILE *open_auto_dump(cptr buf, cptr mark, int *line)
141 char header_mark_str[80];
146 sprintf(header_mark_str, auto_dump_header, mark);
148 /* Remove old macro dumps */
149 remove_auto_dump(buf, mark);
151 /* Append to the file */
152 fff = my_fopen(buf, "a");
157 msg_format("%s ¤ò³«¤¯¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", buf);
159 msg_format("Failed to open %s.", buf);
170 fprintf(fff, "%s\n", header_mark_str);
173 fprintf(fff, "# *·Ù¹ð!!* °Ê¹ß¤Î¹Ô¤Ï¼«Æ°À¸À®¤µ¤ì¤¿¤â¤Î¤Ç¤¹¡£\n");
174 fprintf(fff, "# *·Ù¹ð!!* ¸å¤Ç¼«Æ°Åª¤Ëºï½ü¤µ¤ì¤ë¤Î¤ÇÊÔ½¸¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£\n");
176 fprintf(fff, "# *Warning!!* The lines below are automatic dump.\n");
177 fprintf(fff, "# *Warning!!* Don't edit these! These lines will be deleted automaticaly.\n");
185 * Append foot part and close auto dump.
187 static void close_auto_dump(FILE *fff, cptr mark, int line_num)
189 char footer_mark_str[80];
191 sprintf(footer_mark_str, auto_dump_footer, mark);
195 fprintf(fff, "# *·Ù¹ð!!* °Ê¾å¤Î¹Ô¤Ï¼«Æ°À¸À®¤µ¤ì¤¿¤â¤Î¤Ç¤¹¡£\n");
196 fprintf(fff, "# *·Ù¹ð!!* ¸å¤Ç¼«Æ°Åª¤Ëºï½ü¤µ¤ì¤ë¤Î¤ÇÊÔ½¸¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£\n");
198 fprintf(fff, "# *Warning!!* The lines above are automatic dump.\n");
199 fprintf(fff, "# *Warning!!* Don't edit these! These lines will be deleted automaticaly.\n");
203 fprintf(fff, "%s (%d)\n", footer_mark_str, line_num);
215 * Take note to the dialy.
218 errr do_cmd_write_nikki(int type, int num, cptr note)
224 cptr note_level = "";
225 bool do_level = TRUE;
227 static bool disable_nikki = FALSE;
229 extract_day_hour_min(&day, &hour, &min);
231 if (disable_nikki) return(-1);
233 if (type == NIKKI_FIX_QUEST_C ||
234 type == NIKKI_FIX_QUEST_F ||
235 type == NIKKI_RAND_QUEST_C ||
236 type == NIKKI_RAND_QUEST_F ||
237 type == NIKKI_TO_QUEST)
241 old_quest = p_ptr->inside_quest;
242 p_ptr->inside_quest = (quest[num].type == QUEST_TYPE_RANDOM) ? 0 : num;
244 /* Get the quest text */
245 init_flags = INIT_ASSIGN;
247 process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
249 /* Reset the old quest number */
250 p_ptr->inside_quest = old_quest;
254 sprintf(file_name,"playrecord-%s.txt",savefile_base);
256 /* different filne name to avoid mixing */
257 sprintf(file_name,"playrec-%s.txt",savefile_base);
260 /* Hack -- drop permissions */
263 /* Build the filename */
264 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, file_name);
266 /* File type is "TEXT" */
267 FILE_TYPE(FILE_TYPE_TEXT);
269 fff = my_fopen(buf, "a");
274 /* Hack -- grab permissions */
277 msg_format("%s ¤ò³«¤¯¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£¥×¥ì¥¤µÏ¿¤ò°ì»þÄä»ß¤·¤Þ¤¹¡£", buf);
279 msg_format("Failed to open %s. Play-Record is disabled temporally.", buf);
288 if (p_ptr->inside_arena)
290 note_level = "¥¢¥ê¡¼¥Ê:";
292 note_level = "Arane:";
296 note_level = "ÃϾå:";
298 note_level = "Surface:";
300 else if (quest_number(dun_level) && ((quest_number(dun_level) < MIN_RANDOM_QUEST) && !(quest_number(dun_level) == QUEST_OBERON || quest_number(dun_level) == QUEST_SERPENT)))
302 note_level = "¥¯¥¨¥¹¥È:";
304 note_level = "Quest:";
308 note_level = format("%d³¬(%s):", dun_level, d_name+d_info[dungeon_type].name);
310 note_level = format("%s L%d:", d_name+d_info[dungeon_type].name, dun_level);
319 fprintf(fff, "%dÆüÌÜ\n",day);
321 fprintf(fff, "Day %d\n",day);
330 fprintf(fff, "%s\n",note);
334 fprintf(fff, " %2d:%02d %20s %s\n",hour, min, note_level, note);
340 fprintf(fff, " %2d:%02d %20s %s¤òȯ¸«¤·¤¿¡£\n", hour, min, note_level, note);
342 fprintf(fff, " %2d:%02d %20s discover %s.\n", hour, min, note_level, note);
349 fprintf(fff, " %2d:%02d %20s %s¤òÅݤ·¤¿¡£\n", hour, min, note_level, note);
351 fprintf(fff, " %2d:%02d %20s defeated %s.\n", hour, min, note_level, note);
355 case NIKKI_FIX_QUEST_C:
357 if (quest[num].flags & QUEST_FLAG_SILENT) break;
359 fprintf(fff, " %2d:%02d %20s ¥¯¥¨¥¹¥È¡Ö%s¡×¤òãÀ®¤·¤¿¡£\n", hour, min, note_level, quest[num].name);
361 fprintf(fff, " %2d:%02d %20s completed quest '%s'.\n", hour, min, note_level, quest[num].name);
365 case NIKKI_FIX_QUEST_F:
367 if (quest[num].flags & QUEST_FLAG_SILENT) break;
369 fprintf(fff, " %2d:%02d %20s ¥¯¥¨¥¹¥È¡Ö%s¡×¤«¤éÌ¿¤«¤é¤¬¤éƨ¤²µ¢¤Ã¤¿¡£\n", hour, min, note_level, quest[num].name);
371 fprintf(fff, " %2d:%02d %20s run away from quest '%s'.\n", hour, min, note_level, quest[num].name);
375 case NIKKI_RAND_QUEST_C:
378 strcpy(name, r_name+r_info[quest[num].r_idx].name);
380 fprintf(fff, " %2d:%02d %20s ¥é¥ó¥À¥à¥¯¥¨¥¹¥È(%s)¤òãÀ®¤·¤¿¡£\n", hour, min, note_level, name);
382 fprintf(fff, " %2d:%02d %20s completed randome quest '%s'\n", hour, min, note_level, name);
386 case NIKKI_RAND_QUEST_F:
389 strcpy(name, r_name+r_info[quest[num].r_idx].name);
391 fprintf(fff, " %2d:%02d %20s ¥é¥ó¥À¥à¥¯¥¨¥¹¥È(%s)¤«¤éƨ¤²½Ð¤·¤¿¡£\n", hour, min, note_level, name);
393 fprintf(fff, " %2d:%02d %20s ran away from quest '%s'.\n", hour, min, note_level, name);
397 case NIKKI_MAXDEAPTH:
400 fprintf(fff, " %2d:%02d %20s %s¤ÎºÇ¿¼³¬%d³¬¤ËÅþ㤷¤¿¡£\n", hour, min, note_level, d_name+d_info[dungeon_type].name, num);
402 fprintf(fff, " %2d:%02d %20s reached level %d of %s for the first time.\n", hour, min, note_level, num, d_name+d_info[dungeon_type].name);
409 fprintf(fff, " %2d:%02d %20s %s%s¤ÎºÇ¿¼³¬¤ò%d³¬¤Ë¥»¥Ã¥È¤·¤¿¡£\n", hour, min, note_level, note, d_name + d_info[num].name, max_dlv[num]);
411 fprintf(fff, " %2d:%02d %20s reset recall level of %s to %d %s.\n", hour, min, note_level, d_name + d_info[num].name, max_dlv[num], note);
418 if (quest_number(dun_level) && ((quest_number(dun_level) < MIN_RANDOM_QUEST) && !(quest_number(dun_level) == QUEST_OBERON || quest_number(dun_level) == QUEST_SERPENT)))
429 if (!(dun_level+num)) to = "ÃϾå";
430 else to = format("%d³¬", dun_level+num);
432 if (!(dun_level+num)) to = "the surfice";
433 else to = format("level %d", dun_level+num);
438 fprintf(fff, " %2d:%02d %20s %s¤Ø%s¡£\n", hour, min, note_level, to, note);
440 fprintf(fff, " %2d:%02d %20s %s %s.\n", hour, min, note_level, note, to);
448 fprintf(fff, " %2d:%02d %20s µ¢´Ô¤ò»È¤Ã¤Æ%s¤Î%d³¬¤Ø²¼¤ê¤¿¡£\n", hour, min, note_level, d_name+d_info[dungeon_type].name, max_dlv[dungeon_type]);
450 fprintf(fff, " %2d:%02d %20s recall to dungeon level %d of %s.\n", hour, min, note_level, max_dlv[dungeon_type], d_name+d_info[dungeon_type].name);
454 fprintf(fff, " %2d:%02d %20s µ¢´Ô¤ò»È¤Ã¤ÆÃϾå¤Ø¤ÈÌá¤Ã¤¿¡£\n", hour, min, note_level);
456 fprintf(fff, " %2d:%02d %20s recall from dungeon to surface.\n", hour, min, note_level);
462 if (quest[num].flags & QUEST_FLAG_SILENT) break;
464 fprintf(fff, " %2d:%02d %20s ¥¯¥¨¥¹¥È¡Ö%s¡×¤Ø¤ÈÆÍÆþ¤·¤¿¡£\n", hour, min, note_level, quest[num].name);
466 fprintf(fff, " %2d:%02d %20s enter quest '%s'.\n", hour, min, note_level, quest[num].name);
481 else if (quest_number(dun_level) && ((quest_number(dun_level) < MIN_RANDOM_QUEST) && !(quest_number(dun_level) == QUEST_OBERON || quest_number(dun_level) == QUEST_SERPENT)))
492 if (!(dun_level+num)) to = "ÃϾå";
493 else to = format("%d³¬", dun_level+num);
495 if (!(dun_level+num)) to = "surface";
496 else to = format("level %d", dun_level+num);
501 fprintf(fff, " %2d:%02d %20s %s¤Ø¤È¥Æ¥ì¥Ý¡¼¥È¤Ç°ÜÆ°¤·¤¿¡£\n", hour, min, note_level, to);
503 fprintf(fff, " %2d:%02d %20s teleport level to %s.\n", hour, min, note_level, to);
510 fprintf(fff, " %2d:%02d %20s %s¤ò¹ØÆþ¤·¤¿¡£\n", hour, min, note_level, note);
512 fprintf(fff, " %2d:%02d %20s buy %s.\n", hour, min, note_level, note);
519 fprintf(fff, " %2d:%02d %20s %s¤òÇäµÑ¤·¤¿¡£\n", hour, min, note_level, note);
521 fprintf(fff, " %2d:%02d %20s sell %s.\n", hour, min, note_level, note);
531 fprintf(fff, " %2d:%02d %20s Æ®µ»¾ì¤Î%d²óÀï¤Ç¡¢%s¤ÎÁ°¤ËÇÔ¤ìµî¤Ã¤¿¡£\n", hour, min, note_level, p_ptr->arena_number + 1, note);
533 int n = p_ptr->arena_number + 1;
534 fprintf(fff, " %2d:%02d %20s beaten by %s in the %d%s fight.\n", hour, min, note_level, note, n, (n%10==1?"st":n%10==2?"nd":n%10==3?"rd":"th"));
539 fprintf(fff, " %2d:%02d %20s Æ®µ»¾ì¤Î%d²óÀï(%s)¤Ë¾¡Íø¤·¤¿¡£\n", hour, min, note_level, num, note);
541 fprintf(fff, " %2d:%02d %20s win the %d%s fight (%s).\n", hour, min, note_level, num, (num%10==1?"st":num%10==2?"nd":num%10==3?"rd":"th"), note);
543 if (num == MAX_ARENA_MONS)
546 fprintf(fff, " Æ®µ»¾ì¤Î¤¹¤Ù¤Æ¤ÎŨ¤Ë¾¡Íø¤·¡¢¥Á¥ã¥ó¥Ô¥ª¥ó¤È¤Ê¤Ã¤¿¡£\n");
548 fprintf(fff, " win all fight to become a Chanpion.\n");
557 fprintf(fff, " %2d:%02d %20s %s¤ò¼±Ê̤·¤¿¡£\n", hour, min, note_level, note);
559 fprintf(fff, " %2d:%02d %20s identify %s.\n", hour, min, note_level, note);
574 to = format("%d³¬(%s)", dun_level, d_name+d_info[dungeon_type].name);
576 to = format("level %d of %s", dun_level, d_name+d_info[dungeon_type].name);
580 fprintf(fff, " %2d:%02d %20s %s¤Ø¤È¥¦¥£¥¶¡¼¥É¡¦¥Æ¥ì¥Ý¡¼¥È¤Ç°ÜÆ°¤·¤¿¡£\n", hour, min, note_level, to);
582 fprintf(fff, " %2d:%02d %20s wizard-teleport to %s.\n", hour, min, note_level, to);
597 to = format("%d³¬(%s)", dun_level, d_name+d_info[dungeon_type].name);
599 to = format("level %d of %s", dun_level, d_name+d_info[dungeon_type].name);
603 fprintf(fff, " %2d:%02d %20s %s¤Ø¤È¥Ñ¥¿¡¼¥ó¤ÎÎϤǰÜÆ°¤·¤¿¡£\n", hour, min, note_level, to);
605 fprintf(fff, " %2d:%02d %20s use Pattern to teleport to %s.\n", hour, min, note_level, to);
612 fprintf(fff, " %2d:%02d %20s ¥ì¥Ù¥ë¤¬%d¤Ë¾å¤¬¤Ã¤¿¡£\n", hour, min, note_level, num);
614 fprintf(fff, " %2d:%02d %20s reach player level %d.\n", hour, min, note_level, num);
618 case NIKKI_GAMESTART:
620 time_t ct = time((time_t*)0);
624 fprintf(fff, "%s %s",note, ctime(&ct));
627 fprintf(fff, " %2d:%02d %20s %s %s",hour, min, note_level, note, ctime(&ct));
630 case NIKKI_NAMED_PET:
632 fprintf(fff, " %2d:%02d %20s ", hour, min, note_level);
637 fprintf(fff, "%s¤òι¤Îͧ¤Ë¤¹¤ë¤³¤È¤Ë·è¤á¤¿¡£\n", note);
639 fprintf(fff, "decide to travel together with %s.\n", note);
644 fprintf(fff, "%s¤Î̾Á°¤ò¾Ã¤·¤¿¡£\n", note);
646 fprintf(fff, "unname %s.\n", note);
651 fprintf(fff, "%s¤ò²òÊü¤·¤¿¡£\n", note);
653 fprintf(fff, "dismiss %s.\n", note);
658 fprintf(fff, "%s¤¬»à¤ó¤Ç¤·¤Þ¤Ã¤¿¡£\n", note);
660 fprintf(fff, "%s die.\n", note);
665 fprintf(fff, "%s¤ò¤ª¤¤¤ÆÊ̤ΥޥåפذÜÆ°¤·¤¿¡£\n", note);
667 fprintf(fff, "move to other map leaving %s behind.\n", note);
672 fprintf(fff, "%s¤È¤Ï¤°¤ì¤Æ¤·¤Þ¤Ã¤¿¡£\n", note);
674 fprintf(fff, "lose sight of %s.\n", note);
679 fprintf(fff, "%s¤¬*Ç˲õ*¤Ë¤è¤Ã¤Æ¾Ã¤¨µî¤Ã¤¿¡£\n", note);
681 fprintf(fff, "%s is made disappeared by *destruction*.\n", note);
686 fprintf(fff, "%s¤¬´äÀФ˲¡¤·ÄÙ¤µ¤ì¤¿¡£\n", note);
688 fprintf(fff, "%s is crushed by falling rocks.\n", note);
703 /* Hack -- grab permissions */
706 if (do_level) write_level = FALSE;
712 #define MAX_SUBTITLE (sizeof(subtitle)/sizeof(subtitle[0]))
714 static void do_cmd_disp_nikki(void)
716 char nikki_title[256];
721 static const char subtitle[][30] = {"ºÇ¶¯¤ÎÆùÂΤòµá¤á¤Æ",
722 "¿ÍÀ¸¤½¤ì¤Ï¤Ï¤«¤Ê¤¤",
733 "Åݤ¹¤Ù¤Å¨¤Ï¥²¡û¥Ä",
734 "¤ó¡Á¡©Ê¹¤³¤¨¤ó¤Ê¤¡",
735 "¥ª¥ì¤Î̾¤ò¸À¤Ã¤Æ¤ß¤í",
736 "Ƭ¤¬ÊѤˤʤäÁ¤ã¤Ã¤¿",
741 "¤³¤ó¤Ê¤â¤ó¤¸¤ã¤Ê¤¤",
750 "ºÇ¹â¤ÎƬǾ¤òµá¤á¤Æ"};
752 static const char subtitle[][51] ={"Quest of The World's Toughest Body",
753 "Attack is the best form of defence.",
755 "An unexpected windfall",
756 "A drowning man will catch at a straw",
757 "Don't count your chickens before they are hatched.",
758 "It is no use crying over spilt milk.",
759 "Seeing is believing.",
760 "Strike the iron while it is hot.",
761 "I don't care what follows.",
762 "To dig a well to put out a house on fire.",
763 "Tomorrow is another day.",
764 "Easy come, easy go.",
765 "The more haste, the less speed.",
766 "Where there is life, there is hope.",
767 "There is no royal road to *WINNER*.",
768 "Danger past, God forgotten.",
769 "The best thing to do now is to run away.",
770 "Life is but an empty dream.",
771 "Dead men tell no tales.",
772 "A book that remains shut is but a block.",
773 "Misfortunes never come singly.",
774 "A little knowledge is a dangerous thing.",
775 "History repeats itself.",
776 "*WINNER* was not built in a day.",
777 "Ignorance is bliss.",
778 "To lose is to win?",
779 "No medicine can cure folly.",
780 "All good things come to an end.",
781 "M$ Empire strikes back.",
782 "To see is to believe",
784 "Quest of The World's Greatest Brain"};
787 sprintf(file_name,"playrecord-%s.txt",savefile_base);
789 sprintf(file_name,"playrec-%s.txt",savefile_base);
792 /* Hack -- drop permissions */
795 /* Build the filename */
796 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, file_name);
798 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_MONK || p_ptr->pclass == CLASS_SAMURAI || p_ptr->pclass == CLASS_BERSERKER)
799 strcpy(tmp,subtitle[randint0(MAX_SUBTITLE-1)]);
800 else if (p_ptr->pclass == CLASS_MAGE || p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
801 strcpy(tmp,subtitle[randint0(MAX_SUBTITLE-1)+1]);
802 else strcpy(tmp,subtitle[randint0(MAX_SUBTITLE-2)+1]);
805 sprintf(nikki_title, "¡Ö%s%s%s¤ÎÅÁÀâ -%s-¡×",
806 ap_ptr->title, ap_ptr->no ? "¤Î" : "", player_name, tmp);
808 sprintf(nikki_title, "Legend of %s %s '%s'",
809 ap_ptr->title, player_name, tmp);
812 /* Display the file contents */
813 show_file(FALSE, buf, nikki_title, -1, 0);
815 /* Hack -- grab permissions */
819 static void do_cmd_bunshou(void)
822 char bunshou[80] = "\0";
825 if (get_string("ÆâÍÆ: ", tmp, 79))
827 if (get_string("diary note: ", tmp, 79))
830 strcpy(bunshou, tmp);
832 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, bunshou);
836 static void do_cmd_last_get(void)
841 if (record_o_name[0] == '\0') return;
844 sprintf(buf,"%s¤ÎÆþ¼ê¤òµÏ¿¤·¤Þ¤¹¡£",record_o_name);
846 sprintf(buf,"Do you really want to record getting %s? ",record_o_name);
848 if (!get_check(buf)) return;
853 sprintf(buf,"%s¤ò¼ê¤ËÆþ¤ì¤¿¡£", record_o_name);
855 sprintf(buf,"descover %s.", record_o_name);
857 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, buf);
861 static void do_cmd_erase_nikki(void)
868 if (!get_check("ËÜÅö¤ËµÏ¿¤ò¾Ãµî¤·¤Þ¤¹¤«¡©")) return;
870 if (!get_check("Do you really want to delete all your record? ")) return;
874 sprintf(file_name,"playrecord-%s.txt",savefile_base);
876 sprintf(file_name,"playrec-%s.txt",savefile_base);
879 /* Hack -- drop permissions */
882 /* Build the filename */
883 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, file_name);
885 /* Remove the file */
888 fff = my_fopen(buf, "w");
892 msg_format("µÏ¿¤ò¾Ãµî¤·¤Þ¤·¤¿¡£");
894 msg_format("deleted record.");
898 msg_format("%s ¤Î¾Ãµî¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£", buf);
900 msg_format("failed to delete %s.", buf);
905 /* Hack -- grab permissions */
912 msg_format("%d %d %d:%d",py,px, p_ptr->energy, p_ptr->skill_dis);
918 void do_cmd_nikki(void)
922 /* File type is "TEXT" */
923 FILE_TYPE(FILE_TYPE_TEXT);
925 /* Save the screen */
928 /* Interact until done */
934 /* Ask for a choice */
936 prt("[ µÏ¿¤ÎÀßÄê ]", 2, 0);
938 prt("[ Play Record ]", 2, 0);
942 /* Give some choices */
944 prt("(1) µÏ¿¤ò¸«¤ë", 4, 5);
945 prt("(2) ʸ¾Ï¤òµÏ¿¤¹¤ë", 5, 5);
946 prt("(3) ľÁ°¤ËÆþ¼êËô¤Ï´ÕÄꤷ¤¿¤â¤Î¤òµÏ¿¤¹¤ë", 6, 5);
947 prt("(4) µÏ¿¤ò¾Ãµî¤¹¤ë", 7, 5);
949 prt("(1) Display your record", 4, 5);
950 prt("(2) Add record", 5, 5);
951 prt("(3) Record item you last get/identify", 6, 5);
952 prt("(4) Delete your record", 7, 5);
958 prt("¥³¥Þ¥ó¥É:", 18, 0);
960 prt("Command: ", 18, 0);
968 if (i == ESCAPE) break;
982 do_cmd_erase_nikki();
989 default: /* Unknown option */
997 /* Restore the screen */
1002 * Hack -- redraw the screen
1004 * This command performs various low level updates, clears all the "extra"
1005 * windows, does a total redraw of the main window, and requests all of the
1006 * interesting updates and redraws that I can think of.
1008 * This command is also used to "instantiate" the results of the user
1009 * selecting various things, such as graphics mode, so it must call
1010 * the "TERM_XTRA_REACT" hook before redrawing the windows.
1012 void do_cmd_redraw(void)
1019 /* Hack -- react to changes */
1020 Term_xtra(TERM_XTRA_REACT, 0);
1023 /* Combine and Reorder the pack (later) */
1024 p_ptr->notice |= (PN_COMBINE | PN_REORDER);
1028 p_ptr->update |= (PU_TORCH);
1031 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
1033 /* Forget lite/view */
1034 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
1036 /* Update lite/view */
1037 p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
1039 /* Update monsters */
1040 p_ptr->update |= (PU_MONSTERS);
1042 /* Redraw everything */
1043 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
1046 p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER);
1049 p_ptr->window |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER | PW_OBJECT);
1053 /* Hack -- update */
1056 if (p_ptr->prace == RACE_ANDROID) calc_android_exp();
1059 /* Redraw every window */
1060 for (j = 0; j < 8; j++)
1063 if (!angband_term[j]) continue;
1066 Term_activate(angband_term[j]);
1081 * Hack -- change name
1083 void do_cmd_change_name(void)
1092 /* Save the screen */
1100 /* Display the player */
1101 display_player(mode);
1106 display_player(mode);
1111 Term_putstr(2, 23, -1, TERM_WHITE,
1112 "['c'¤Ç̾Á°Êѹ¹, 'f'¤Ç¥Õ¥¡¥¤¥ë¤Ø½ñ½Ð, 'h'¤Ç¥â¡¼¥ÉÊѹ¹, ESC¤Ç½ªÎ»]");
1114 Term_putstr(2, 23, -1, TERM_WHITE,
1115 "['c' to change name, 'f' to file, 'h' to change mode, or ESC]");
1123 if (c == ESCAPE) break;
1130 /* Process the player name */
1131 process_player_name(FALSE);
1137 sprintf(tmp, "%s.txt", player_base);
1139 if (get_string("¥Õ¥¡¥¤¥ë̾: ", tmp, 80))
1141 if (get_string("File name: ", tmp, 80))
1145 if (tmp[0] && (tmp[0] != ' '))
1147 file_character(tmp, TRUE);
1164 /* Flush messages */
1168 /* Restore the screen */
1171 /* Redraw everything */
1172 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
1179 * Recall the most recent message
1181 void do_cmd_message_one(void)
1183 /* Recall one message XXX XXX XXX */
1184 prt(format("> %s", message_str(0)), 0, 0);
1189 * Show previous messages to the user -BEN-
1191 * The screen format uses line 0 and 23 for headers and prompts,
1192 * skips line 1 and 22, and uses line 2 thru 21 for old messages.
1194 * This command shows you which commands you are viewing, and allows
1195 * you to "search" for strings in the recall.
1197 * Note that messages may be longer than 80 characters, but they are
1198 * displayed using "infinite" length, with a special sub-command to
1199 * "slide" the virtual display to the left or right.
1201 * Attempt to only hilite the matching portions of the string.
1203 void do_cmd_messages(int num_now)
1214 Term_get_size(&wid, &hgt);
1223 /* Total messages */
1226 /* Start on first message */
1229 /* Start at leftmost edge */
1232 /* Save the screen */
1235 /* Process requests until done */
1241 /* Dump up to 20 lines of messages */
1242 for (j = 0; (j < hgt - 4) && (i + j < n); j++)
1244 cptr msg = message_str(i+j);
1246 /* Apply horizontal scroll */
1247 msg = (strlen(msg) >= q) ? (msg + q) : "";
1249 /* Dump the messages, bottom to top */
1250 Term_putstr(0, hgt-j-3, -1, (bool)(i+j < num_now ? TERM_WHITE : TERM_SLATE), msg);
1252 /* Hilite "shower" */
1257 /* Display matches */
1258 while ((str = strstr(str, shower)) != NULL)
1260 int len = strlen(shower);
1262 /* Display the match */
1263 Term_putstr(str-msg, hgt-j-3, len, TERM_YELLOW, shower);
1271 /* Display header XXX XXX XXX */
1274 prt(format("°ÊÁ°¤Î¥á¥Ã¥»¡¼¥¸ %d-%d Á´Éô¤Ç(%d) ¥ª¥Õ¥»¥Ã¥È(%d)",
1275 i, i+j-1, n, q), 0, 0);
1277 prt(format("Message Recall (%d-%d of %d), Offset %d",
1278 i, i+j-1, n, q), 0, 0);
1282 /* Display prompt (not very informative) */
1284 prt("[ 'p' ¤Ç¹¹¤Ë¸Å¤¤¤â¤Î, 'n' ¤Ç¹¹¤Ë¿·¤·¤¤¤â¤Î, '/' ¤Ç¸¡º÷, ESC ¤ÇÃæÃÇ ]", hgt - 1, 0);
1286 prt("[Press 'p' for older, 'n' for newer, ..., or ESCAPE]", hgt - 1, 0);
1293 /* Exit on Escape */
1294 if (k == ESCAPE) break;
1296 /* Hack -- Save the old index */
1299 /* Horizontal scroll */
1303 q = (q >= 40) ? (q - 40) : 0;
1309 /* Horizontal scroll */
1319 /* Hack -- handle show */
1324 prt("¶¯Ä´: ", hgt - 1, 0);
1326 prt("Show: ", hgt - 1, 0);
1330 /* Get a "shower" string, or continue */
1331 if (!askfor_aux(shower, 80)) continue;
1337 /* Hack -- handle find */
1344 prt("¸¡º÷: ", hgt - 1, 0);
1346 prt("Find: ", hgt - 1, 0);
1350 /* Get a "finder" string, or continue */
1351 if (!askfor_aux(finder, 80)) continue;
1354 strcpy(shower, finder);
1357 for (z = i + 1; z < n; z++)
1359 cptr msg = message_str(z);
1362 if (strstr(msg, finder))
1373 /* Recall 1 older message */
1374 if ((k == '8') || (k == '\n') || (k == '\r'))
1376 /* Go newer if legal */
1377 if (i + 1 < n) i += 1;
1380 /* Recall 10 older messages */
1383 /* Go older if legal */
1384 if (i + 10 < n) i += 10;
1387 /* Recall 20 older messages */
1388 if ((k == 'p') || (k == KTRL('P')) || (k == ' '))
1390 /* Go older if legal */
1391 if (i + 20 < n) i += 20;
1394 /* Recall 20 newer messages */
1395 if ((k == 'n') || (k == KTRL('N')))
1397 /* Go newer (if able) */
1398 i = (i >= 20) ? (i - 20) : 0;
1401 /* Recall 10 newer messages */
1404 /* Go newer (if able) */
1405 i = (i >= 20) ? (i - 20) : 0;
1408 /* Recall 1 newer messages */
1411 /* Go newer (if able) */
1412 i = (i >= 1) ? (i - 1) : 0;
1415 /* Hack -- Error of some kind */
1419 /* Restore the screen */
1426 * Number of cheating options
1433 static option_type cheat_info[CHEAT_MAX] =
1435 { &cheat_peek, FALSE, 255, 0x01, 0x00,
1437 "cheat_peek", "¥¢¥¤¥Æ¥à¤ÎÀ¸À®¤ò¤Î¤¾¤¸«¤ë"
1439 "cheat_peek", "Peek into object creation"
1443 { &cheat_hear, FALSE, 255, 0x02, 0x00,
1445 "cheat_hear", "¥â¥ó¥¹¥¿¡¼¤ÎÀ¸À®¤ò¤Î¤¾¤¸«¤ë"
1447 "cheat_hear", "Peek into monster creation"
1451 { &cheat_room, FALSE, 255, 0x04, 0x00,
1453 "cheat_room", "¥À¥ó¥¸¥ç¥ó¤ÎÀ¸À®¤ò¤Î¤¾¤¸«¤ë"
1455 "cheat_room", "Peek into dungeon creation"
1459 { &cheat_xtra, FALSE, 255, 0x08, 0x00,
1461 "cheat_xtra", "¤½¤Î¾¤Î»ö¤ò¤Î¤¾¤¸«¤ë"
1463 "cheat_xtra", "Peek into something else"
1467 { &cheat_know, FALSE, 255, 0x10, 0x00,
1469 "cheat_know", "´°Á´¤Ê¥â¥ó¥¹¥¿¡¼¤Î»×¤¤½Ð¤òÃΤë"
1471 "cheat_know", "Know complete monster info"
1475 { &cheat_live, FALSE, 255, 0x20, 0x00,
1477 "cheat_live", "»à¤ò²óÈò¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë"
1479 "cheat_live", "Allow player to avoid death"
1483 { &cheat_save, FALSE, 255, 0x40, 0x00,
1485 "cheat_save", "»à¤ó¤À»þ¥»¡¼¥Ö¤¹¤ë¤«³Îǧ¤¹¤ë"
1487 "cheat_save", "Ask for saving death"
1493 * Interact with some options for cheating
1495 static void do_cmd_options_cheat(cptr info)
1499 int i, k = 0, n = CHEAT_MAX;
1507 /* Interact with the player */
1512 /* Prompt XXX XXX XXX */
1514 sprintf(buf, "%s ( ¥ê¥¿¡¼¥ó¤Ç¼¡¤Ø, y/n ¤Ç¥»¥Ã¥È, ESC ¤Ç·èÄê )", info);
1516 sprintf(buf, "%s (RET to advance, y/n to set, ESC to accept) ", info);
1522 /* º¾µ½¥ª¥×¥·¥ç¥ó¤ò¤¦¤Ã¤«¤ê¤¤¤¸¤Ã¤Æ¤·¤Þ¤¦¿Í¤¬¤¤¤ë¤è¤¦¤Ê¤Î¤ÇÃí°Õ */
1523 prt(" << Ãí°Õ >>", 11, 0);
1524 prt(" º¾µ½¥ª¥×¥·¥ç¥ó¤ò°ìÅ٤ǤâÀßÄꤹ¤ë¤È¡¢¥¹¥³¥¢µÏ¿¤¬»Ä¤é¤Ê¤¯¤Ê¤ê¤Þ¤¹¡ª", 12, 0);
1525 prt(" ¸å¤Ë²ò½ü¤·¤Æ¤â¥À¥á¤Ç¤¹¤Î¤Ç¡¢¾¡Íø¼Ô¤òÌܻؤ¹Êý¤Ï¤³¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¤¤", 13, 0);
1526 prt(" ¤¸¤é¤Ê¤¤¤è¤¦¤Ë¤·¤Æ²¼¤µ¤¤¡£", 14, 0);
1528 /* Display the options */
1529 for (i = 0; i < n; i++)
1531 byte a = TERM_WHITE;
1533 /* Color current option */
1534 if (i == k) a = TERM_L_BLUE;
1536 /* Display the option text */
1537 sprintf(buf, "%-48s: %s (%s)",
1538 cheat_info[i].o_desc,
1540 (*cheat_info[i].o_var ? "¤Ï¤¤ " : "¤¤¤¤¤¨"),
1542 (*cheat_info[i].o_var ? "yes" : "no "),
1545 cheat_info[i].o_text);
1546 c_prt(a, buf, i + 2, 0);
1549 /* Hilite current option */
1550 move_cursor(k + 2, 50);
1556 * HACK - Try to translate the key into a direction
1557 * to allow using the roguelike keys for navigation.
1559 dir = get_keymap_dir(ch);
1560 if ((dir == 2) || (dir == 4) || (dir == 6) || (dir == 8))
1574 k = (n + k - 1) % n;
1593 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "º¾µ½¥ª¥×¥·¥ç¥ó¤òON¤Ë¤·¤Æ¡¢¥¹¥³¥¢¤ò»Ä¤»¤Ê¤¯¤Ê¤Ã¤¿¡£");
1595 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "give up sending score to use cheating options.");
1597 p_ptr->noscore |= (cheat_info[k].o_set * 256 + cheat_info[k].o_bit);
1598 (*cheat_info[k].o_var) = TRUE;
1607 (*cheat_info[k].o_var) = FALSE;
1615 strnfmt(buf, sizeof(buf), "joption.txt#%s", cheat_info[k].o_text);
1617 strnfmt(buf, sizeof(buf), "option.txt#%s", cheat_info[k].o_text);
1619 /* Peruse the help file */
1620 (void)show_file(TRUE, buf, NULL, 0, 0);
1636 static option_type autosave_info[2] =
1638 { &autosave_l, FALSE, 255, 0x01, 0x00,
1640 "autosave_l", "¿·¤·¤¤³¬¤ËÆþ¤ëÅ٤˼«Æ°¥»¡¼¥Ö¤¹¤ë" },
1642 "autosave_l", "Autosave when entering new levels" },
1646 { &autosave_t, FALSE, 255, 0x02, 0x00,
1648 "autosave_t", "°ìÄ꥿¡¼¥óËè¤Ë¼«Æ°¥»¡¼¥Ö¤¹¤ë" },
1650 "autosave_t", "Timed autosave" },
1656 static s16b toggle_frequency(s16b current)
1658 if (current == 0) return 50;
1659 if (current == 50) return 100;
1660 if (current == 100) return 250;
1661 if (current == 250) return 500;
1662 if (current == 500) return 1000;
1663 if (current == 1000) return 2500;
1664 if (current == 2500) return 5000;
1665 if (current == 5000) return 10000;
1666 if (current == 10000) return 25000;
1673 * Interact with some options for cheating
1675 static void do_cmd_options_autosave(cptr info)
1679 int i, k = 0, n = 2;
1687 /* Interact with the player */
1690 /* Prompt XXX XXX XXX */
1692 sprintf(buf, "%s ( ¥ê¥¿¡¼¥ó¤Ç¼¡¤Ø, y/n ¤Ç¥»¥Ã¥È, F ¤ÇÉÑÅÙ¤òÆþÎÏ, ESC ¤Ç·èÄê ) ", info);
1694 sprintf(buf, "%s (RET to advance, y/n to set, 'F' for frequency, ESC to accept) ", info);
1699 /* Display the options */
1700 for (i = 0; i < n; i++)
1702 byte a = TERM_WHITE;
1704 /* Color current option */
1705 if (i == k) a = TERM_L_BLUE;
1707 /* Display the option text */
1708 sprintf(buf, "%-48s: %s (%s)",
1709 autosave_info[i].o_desc,
1711 (*autosave_info[i].o_var ? "¤Ï¤¤ " : "¤¤¤¤¤¨"),
1713 (*autosave_info[i].o_var ? "yes" : "no "),
1716 autosave_info[i].o_text);
1717 c_prt(a, buf, i + 2, 0);
1721 prt(format("¼«Æ°¥»¡¼¥Ö¤ÎÉÑÅÙ¡§ %d ¥¿¡¼¥óËè", autosave_freq), 5, 0);
1723 prt(format("Timed autosave frequency: every %d turns", autosave_freq), 5, 0);
1728 /* Hilite current option */
1729 move_cursor(k + 2, 50);
1745 k = (n + k - 1) % n;
1763 (*autosave_info[k].o_var) = TRUE;
1772 (*autosave_info[k].o_var) = FALSE;
1780 autosave_freq = toggle_frequency(autosave_freq);
1782 prt(format("¼«Æ°¥»¡¼¥Ö¤ÎÉÑÅÙ¡§ %d ¥¿¡¼¥óËè",
1783 autosave_freq), 5, 0);
1785 prt(format("Timed autosave frequency: every %d turns",
1786 autosave_freq), 5, 0);
1794 (void)show_file(TRUE, "joption.txt#Autosave", NULL, 0, 0);
1796 (void)show_file(TRUE, "option.txt#Autosave", NULL, 0, 0);
1814 #define PAGE_AUTODESTROY 7
1817 * Interact with some options
1819 void do_cmd_options_aux(int page, cptr info)
1822 int i, k = 0, n = 0, l;
1827 /* Lookup the options */
1828 for (i = 0; i < 24; i++) opt[i] = 0;
1830 /* Scan the options */
1831 for (i = 0; option_info[i].o_desc; i++)
1833 /* Notice options on this "page" */
1834 if (option_info[i].o_page == page) opt[n++] = i;
1841 /* Interact with the player */
1846 /* Prompt XXX XXX XXX */
1848 sprintf(buf, "%s (¥ê¥¿¡¼¥ó:¼¡, y/n:Êѹ¹, ESC:½ªÎ», ?:¥Ø¥ë¥×) ", info);
1850 sprintf(buf, "%s (RET:next, y/n:change, ESC:accept, ?:help) ", info);
1856 /* HACK -- description for easy-auto-destroy options */
1858 if (page == PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "°Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢´Ê°×¼«Æ°Ç˲õ¤ò»ÈÍѤ¹¤ë¤È¤¤Î¤ß͸ú", 6, 6);
1860 if (page == PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "Following options will protect items from easy auto-destroyer.", 6, 3);
1863 /* Display the options */
1864 for (i = 0; i < n; i++)
1866 byte a = TERM_WHITE;
1868 /* Color current option */
1869 if (i == k) a = TERM_L_BLUE;
1871 /* Display the option text */
1872 sprintf(buf, "%-48s: %s (%.19s)",
1873 option_info[opt[i]].o_desc,
1875 (*option_info[opt[i]].o_var ? "¤Ï¤¤ " : "¤¤¤¤¤¨"),
1877 (*option_info[opt[i]].o_var ? "yes" : "no "),
1880 option_info[opt[i]].o_text);
1881 if ((page == PAGE_AUTODESTROY) && i > 2) c_prt(a, buf, i + 5, 0);
1882 else c_prt(a, buf, i + 2, 0);
1885 if ((page == PAGE_AUTODESTROY) && (k > 2)) l = 3;
1888 /* Hilite current option */
1889 move_cursor(k + 2 + l, 50);
1895 * HACK - Try to translate the key into a direction
1896 * to allow using the roguelike keys for navigation.
1898 dir = get_keymap_dir(ch);
1899 if ((dir == 2) || (dir == 4) || (dir == 6) || (dir == 8))
1913 k = (n + k - 1) % n;
1930 (*option_info[opt[k]].o_var) = TRUE;
1939 (*option_info[opt[k]].o_var) = FALSE;
1947 (*option_info[opt[k]].o_var) = !(*option_info[opt[k]].o_var);
1954 strnfmt(buf, sizeof(buf), "joption.txt#%s", option_info[opt[k]].o_text);
1956 strnfmt(buf, sizeof(buf), "option.txt#%s", option_info[opt[k]].o_text);
1958 /* Peruse the help file */
1959 (void)show_file(TRUE, buf, NULL, 0, 0);
1976 * Modify the "window" options
1978 static void do_cmd_options_win(void)
1992 /* Memorize old flags */
1993 for (j = 0; j < 8; j++)
1995 /* Acquire current flags */
1996 old_flag[j] = window_flag[j];
2006 /* Prompt XXX XXX XXX */
2008 prt("¥¦¥£¥ó¥É¥¦¡¦¥Õ¥é¥° (<Êý¸þ>¤Ç°ÜÆ°, t¤Ç¥Á¥§¥ó¥¸, y/n ¤Ç¥»¥Ã¥È, ESC)", 0, 0);
2010 prt("Window Flags (<dir>, t, y, n, ESC) ", 0, 0);
2014 /* Display the windows */
2015 for (j = 0; j < 8; j++)
2017 byte a = TERM_WHITE;
2019 cptr s = angband_term_name[j];
2022 if (j == x) a = TERM_L_BLUE;
2024 /* Window name, staggered, centered */
2025 Term_putstr(35 + j * 5 - strlen(s) / 2, 2 + j % 2, -1, a, s);
2028 /* Display the options */
2029 for (i = 0; i < 16; i++)
2031 byte a = TERM_WHITE;
2033 cptr str = window_flag_desc[i];
2036 if (i == y) a = TERM_L_BLUE;
2040 if (!str) str = "(̤»ÈÍÑ)";
2042 if (!str) str = "(Unused option)";
2047 Term_putstr(0, i + 5, -1, a, str);
2049 /* Display the windows */
2050 for (j = 0; j < 8; j++)
2052 byte a = TERM_WHITE;
2057 if ((i == y) && (j == x)) a = TERM_L_BLUE;
2060 if (window_flag[j] & (1L << i)) c = 'X';
2063 Term_putch(35 + j * 5, i + 5, a, c);
2068 Term_gotoxy(35 + x * 5, y + 5);
2086 for (j = 0; j < 8; j++)
2088 window_flag[j] &= ~(1L << y);
2092 for (i = 0; i < 16; i++)
2094 window_flag[x] &= ~(1L << i);
2107 window_flag[x] |= (1L << y);
2115 window_flag[x] &= ~(1L << y);
2122 (void)show_file(TRUE, "joption.txt#Window", NULL, 0, 0);
2124 (void)show_file(TRUE, "option.txt#Window", NULL, 0, 0);
2134 d = get_keymap_dir(ch);
2136 x = (x + ddx[d] + 8) % 8;
2137 y = (y + ddy[d] + 16) % 16;
2144 /* Notice changes */
2145 for (j = 0; j < 8; j++)
2150 if (!angband_term[j]) continue;
2152 /* Ignore non-changes */
2153 if (window_flag[j] == old_flag[j]) continue;
2156 Term_activate(angband_term[j]);
2173 * Set or unset various options.
2175 * The user must use the "Ctrl-R" command to "adapt" to changes
2176 * in any options which control "visual" aspects of the game.
2178 void do_cmd_options(void)
2183 /* Save the screen */
2192 /* Why are we here */
2194 prt("[ ¥ª¥×¥·¥ç¥ó¤ÎÀßÄê ]", 2, 0);
2196 prt("Options", 2, 0);
2200 /* Give some choices */
2202 prt("(1) ¥¡¼ÆþÎÏ ¥ª¥×¥·¥ç¥ó", 4, 5);
2203 prt("(2) ²èÌ̽ÐÎÏ ¥ª¥×¥·¥ç¥ó", 5, 5);
2204 prt("(3) ¥²¡¼¥à¥×¥ì¥¤ ¥ª¥×¥·¥ç¥ó", 6, 5);
2205 prt("(4) ¹ÔÆ°Ãæ»ß´Ø·¸ ¥ª¥×¥·¥ç¥ó", 7, 5);
2206 prt("(5) ¸úΨ²½ ¥ª¥×¥·¥ç¥ó", 8, 5);
2207 prt("(6) ´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ ¥ª¥×¥·¥ç¥ó", 9, 5);
2208 prt("(R) ¥×¥ì¥¤µÏ¿ ¥ª¥×¥·¥ç¥ó", 10, 5);
2209 /* Special choices */
2210 prt("(D) ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 12, 5);
2211 prt("(H) Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 13, 5);
2212 prt("(A) ¼«Æ°¥»¡¼¥Ö ¥ª¥×¥·¥ç¥ó", 14, 5);
2214 prt("(W) ¥¦¥¤¥ó¥É¥¦¥Õ¥é¥°", 15, 5);
2216 prt("(1) Input Options", 4, 5);
2217 prt("(2) Output Options", 5, 5);
2218 prt("(3) Game-Play Options", 6, 5);
2219 prt("(4) Disturbance Options", 7, 5);
2220 prt("(5) Efficiency Options", 8, 5);
2221 prt("(6) Easy Auto-Destroyer Options", 9, 5);
2222 prt("(R) Play-record Options", 10, 5);
2224 /* Special choices */
2225 prt("(D) Base Delay Factor", 12, 5);
2226 prt("(H) Hitpoint Warning", 13, 5);
2227 prt("(A) Autosave Options", 14, 5);
2231 prt("(W) Window Flags", 15, 5);
2234 if (p_ptr->noscore || allow_debug_opts)
2238 prt("(C) º¾µ½ ¥ª¥×¥·¥ç¥ó", 16, 5);
2240 prt("(C) Cheating Options", 16, 5);
2247 prt("¥³¥Þ¥ó¥É:", 18, 0);
2249 prt("Command: ", 18, 0);
2257 if (k == ESCAPE) break;
2262 /* General Options */
2265 /* Process the general options */
2267 do_cmd_options_aux(1, "¥¡¼ÆþÎÏ¥ª¥×¥·¥ç¥ó");
2269 do_cmd_options_aux(1, "Input Options");
2275 /* General Options */
2278 /* Process the general options */
2280 do_cmd_options_aux(2, "²èÌ̽ÐÎÏ¥ª¥×¥·¥ç¥ó");
2282 do_cmd_options_aux(2, "Output Options");
2288 /* Inventory Options */
2293 do_cmd_options_aux(3, "¥²¡¼¥à¥×¥ì¥¤¡¦¥ª¥×¥·¥ç¥ó");
2295 do_cmd_options_aux(3, "Game-Play Options");
2301 /* Disturbance Options */
2306 do_cmd_options_aux(4, "¹ÔÆ°Ãæ»ß´Ø·¸¤Î¥ª¥×¥·¥ç¥ó");
2308 do_cmd_options_aux(4, "Disturbance Options");
2314 /* Efficiency Options */
2319 do_cmd_options_aux(5, "¸úΨ²½¥ª¥×¥·¥ç¥ó");
2321 do_cmd_options_aux(5, "Efficiency Options");
2327 /* Object auto-destruction Options */
2332 do_cmd_options_aux(7, "´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ¥ª¥×¥·¥ç¥ó");
2334 do_cmd_options_aux(7, "Easy Auto-Destroyer Options");
2339 /* Play-record Options */
2345 do_cmd_options_aux(10, "¥×¥ì¥¤µÏ¿¥ª¥×¥·¥ç¥ó");
2347 do_cmd_options_aux(10, "Play-record Option");
2352 /* Cheating Options */
2355 if (!p_ptr->noscore && !allow_debug_opts)
2357 /* Cheat options are not permitted */
2364 do_cmd_options_cheat("º¾µ½»Õ¤Ï·è¤·¤Æ¾¡Íø¤Ç¤¤Ê¤¤¡ª");
2366 do_cmd_options_cheat("Cheaters never win");
2376 do_cmd_options_autosave("¼«Æ°¥»¡¼¥Ö");
2378 do_cmd_options_autosave("Autosave");
2389 do_cmd_options_win();
2390 p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL |
2391 PW_PLAYER | PW_MESSAGE | PW_OVERHEAD |
2392 PW_MONSTER | PW_OBJECT | PW_SNAPSHOT |
2393 PW_BORG_1 | PW_BORG_2 | PW_DUNGEON);
2397 /* Hack -- Delay Speed */
2403 prt("¥³¥Þ¥ó¥É: ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 18, 0);
2405 prt("Command: Base Delay Factor", 18, 0);
2409 /* Get a new value */
2412 int msec = delay_factor * delay_factor * delay_factor;
2414 prt(format("¸½ºß¤Î¥¦¥§¥¤¥È: %d (%d¥ß¥êÉÃ)",
2415 delay_factor, msec), 22, 0);
2417 prt(format("Current base delay factor: %d (%d msec)",
2418 delay_factor, msec), 22, 0);
2422 prt("¥¦¥§¥¤¥È (0-9) ESC¤Ç·èÄê: ", 20, 0);
2424 prt("Delay Factor (0-9 or ESC to accept): ", 20, 0);
2428 if (k == ESCAPE) break;
2432 (void)show_file(TRUE, "joption.txt#BaseDelay", NULL, 0, 0);
2434 (void)show_file(TRUE, "option.txt#BaseDelay", NULL, 0, 0);
2438 else if (isdigit(k)) delay_factor = D2I(k);
2445 /* Hack -- hitpoint warning factor */
2451 prt("¥³¥Þ¥ó¥É: Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 18, 0);
2453 prt("Command: Hitpoint Warning", 18, 0);
2457 /* Get a new value */
2461 prt(format("¸½ºß¤ÎÄã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð: %d0%%",
2462 hitpoint_warn), 22, 0);
2464 prt(format("Current hitpoint warning: %d0%%",
2465 hitpoint_warn), 22, 0);
2469 prt("Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð (0-9) ESC¤Ç·èÄê: ", 20, 0);
2471 prt("Hitpoint Warning (0-9 or ESC to accept): ", 20, 0);
2475 if (k == ESCAPE) break;
2479 (void)show_file(TRUE, "joption.txt#Hitpoint", NULL, 0, 0);
2481 (void)show_file(TRUE, "option.txt#Hitpoint", NULL, 0, 0);
2485 else if (isdigit(k)) hitpoint_warn = D2I(k);
2494 (void)show_file(TRUE, "joption.txt", NULL, 0, 0);
2496 (void)show_file(TRUE, "option.txt", NULL, 0, 0);
2501 /* Unknown option */
2510 /* Flush messages */
2515 /* Restore the screen */
2518 /* Hack - Redraw equippy chars */
2519 p_ptr->redraw |= (PR_EQUIPPY);
2525 * Ask for a "user pref line" and process it
2527 * XXX XXX XXX Allow absolute file names?
2529 void do_cmd_pref(void)
2536 /* Ask for a "user pref command" */
2538 if (!get_string("ÀßÄêÊѹ¹¥³¥Þ¥ó¥É: ", buf, 80)) return;
2540 if (!get_string("Pref: ", buf, 80)) return;
2544 /* Process that pref command */
2545 (void)process_pref_file_command(buf);
2548 void do_cmd_pickpref(void)
2554 if(!get_check("¼«Æ°½¦¤¤ÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹¤«? ")) return;
2556 if(!get_check("Reload auto-pick preference file? ")) return;
2559 /* Free old entries */
2562 /* ¥¥ã¥éËè¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß */
2564 sprintf(buf, "picktype-%s.prf", player_name);
2566 sprintf(buf, "pickpref-%s.prf", player_name);
2568 err = process_pickpref_file(buf);
2573 msg_format("%s¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£", buf);
2575 msg_format("loaded '%s'.", buf);
2579 /* ¶¦Ä̤ÎÀßÄê¥Õ¥¡¥¤¥ëÆɤ߹þ¤ß */
2581 /* Process 'pick????.prf' if 'pick????-<name>.prf' doesn't exist */
2585 err = process_pickpref_file("picktype.prf");
2587 err = process_pickpref_file("pickpref.prf");
2593 msg_print("picktype.prf¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£");
2595 msg_print("loaded 'pickpref.prf'.");
2602 if(err) msg_print("¼«Æ°½¦¤¤ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
2604 if(err) msg_print("Failed to reload autopick preference.");
2611 * Hack -- append all current macros to the given file
2613 static errr macro_dump(cptr fname)
2615 static cptr mark = "Macro Dump";
2623 /* Build the filename */
2624 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname);
2626 /* File type is "TEXT" */
2627 FILE_TYPE(FILE_TYPE_TEXT);
2629 /* Append to the file */
2630 fff = open_auto_dump(buf, mark, &line_num);
2631 if (!fff) return (-1);
2635 fprintf(fff, "\n# ¼«Æ°¥Þ¥¯¥í¥»¡¼¥Ö\n\n");
2637 fprintf(fff, "\n# Automatic macro dump\n\n");
2642 for (i = 0; i < macro__num; i++)
2644 /* Extract the action */
2645 ascii_to_text(buf, macro__act[i]);
2647 /* Dump the macro */
2648 fprintf(fff, "A:%s\n", buf);
2650 /* Extract the action */
2651 ascii_to_text(buf, macro__pat[i]);
2653 /* Dump normal macros */
2654 fprintf(fff, "P:%s\n", buf);
2659 /* count number of lines */
2664 close_auto_dump(fff, mark, line_num);
2672 * Hack -- ask for a "trigger" (see below)
2674 * Note the complex use of the "inkey()" function from "util.c".
2676 * Note that both "flush()" calls are extremely important.
2678 static void do_cmd_macro_aux(char *buf)
2688 /* Do not process macros */
2694 /* Read the pattern */
2700 /* Do not process macros */
2703 /* Do not wait for keys */
2706 /* Attempt to read a key */
2717 /* Convert the trigger */
2718 ascii_to_text(tmp, buf);
2720 /* Hack -- display the trigger */
2721 Term_addstr(-1, TERM_WHITE, tmp);
2728 * Hack -- ask for a keymap "trigger" (see below)
2730 * Note that both "flush()" calls are extremely important. This may
2731 * no longer be true, since "util.c" is much simpler now. XXX XXX XXX
2733 static void do_cmd_macro_aux_keymap(char *buf)
2747 /* Convert to ascii */
2748 ascii_to_text(tmp, buf);
2750 /* Hack -- display the trigger */
2751 Term_addstr(-1, TERM_WHITE, tmp);
2760 * Hack -- append all keymaps to the given file
2762 static errr keymap_dump(cptr fname)
2764 static cptr mark = "Keymap Dump";
2776 if (rogue_like_commands)
2778 mode = KEYMAP_MODE_ROGUE;
2784 mode = KEYMAP_MODE_ORIG;
2788 /* Build the filename */
2789 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, fname);
2791 /* File type is "TEXT" */
2792 FILE_TYPE(FILE_TYPE_TEXT);
2794 /* Append to the file */
2795 fff = open_auto_dump(buf, mark, &line_num);
2796 if (!fff) return -1;
2800 fprintf(fff, "\n# ¼«Æ°¥¡¼ÇÛÃÖ¥»¡¼¥Ö\n\n");
2802 fprintf(fff, "\n# Automatic keymap dump\n\n");
2807 for (i = 0; i < 256; i++)
2811 /* Loop up the keymap */
2812 act = keymap_act[mode][i];
2814 /* Skip empty keymaps */
2817 /* Encode the key */
2820 ascii_to_text(key, buf);
2822 /* Encode the action */
2823 ascii_to_text(buf, act);
2825 /* Dump the macro */
2826 fprintf(fff, "A:%s\n", buf);
2827 fprintf(fff, "C:%d:%s\n", mode, key);
2832 close_auto_dump(fff, mark, line_num);
2841 * Interact with "macros"
2843 * Note that the macro "action" must be defined before the trigger.
2845 * Could use some helpful instructions on this page. XXX XXX XXX
2847 void do_cmd_macros(void)
2859 if (rogue_like_commands)
2861 mode = KEYMAP_MODE_ROGUE;
2867 mode = KEYMAP_MODE_ORIG;
2870 /* File type is "TEXT" */
2871 FILE_TYPE(FILE_TYPE_TEXT);
2878 /* Process requests until done */
2886 prt("[ ¥Þ¥¯¥í¤ÎÀßÄê ]", 2, 0);
2888 prt("Interact with Macros", 2, 0);
2893 /* Describe that action */
2895 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
2897 prt("Current action (if any) shown below:", 20, 0);
2901 /* Analyze the current action */
2902 ascii_to_text(buf, macro__buf);
2904 /* Display the current action */
2910 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
2912 prt("(1) Load a user pref file", 4, 5);
2917 prt("(2) ¥Õ¥¡¥¤¥ë¤Ë¥Þ¥¯¥í¤òÄɲÃ", 5, 5);
2918 prt("(3) ¥Þ¥¯¥í¤Î³Îǧ", 6, 5);
2919 prt("(4) ¥Þ¥¯¥í¤ÎºîÀ®", 7, 5);
2920 prt("(5) ¥Þ¥¯¥í¤Îºï½ü", 8, 5);
2921 prt("(6) ¥Õ¥¡¥¤¥ë¤Ë¥¡¼ÇÛÃÖ¤òÄɲÃ", 9, 5);
2922 prt("(7) ¥¡¼ÇÛÃ֤γÎǧ", 10, 5);
2923 prt("(8) ¥¡¼ÇÛÃ֤κîÀ®", 11, 5);
2924 prt("(9) ¥¡¼ÇÛÃ֤κï½ü", 12, 5);
2925 prt("(0) ¥Þ¥¯¥í¹ÔÆ°¤ÎÆþÎÏ", 13, 5);
2927 prt("(2) Append macros to a file", 5, 5);
2928 prt("(3) Query a macro", 6, 5);
2929 prt("(4) Create a macro", 7, 5);
2930 prt("(5) Remove a macro", 8, 5);
2931 prt("(6) Append keymaps to a file", 9, 5);
2932 prt("(7) Query a keymap", 10, 5);
2933 prt("(8) Create a keymap", 11, 5);
2934 prt("(9) Remove a keymap", 12, 5);
2935 prt("(0) Enter a new action", 13, 5);
2938 #endif /* ALLOW_MACROS */
2942 prt("¥³¥Þ¥ó¥É: ", 16, 0);
2944 prt("Command: ", 16, 0);
2952 if (i == ESCAPE) break;
2954 /* Load a 'macro' file */
2961 prt("¥³¥Þ¥ó¥É: ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 16, 0);
2963 prt("Command: Load a user pref file", 16, 0);
2969 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
2971 prt("File: ", 18, 0);
2975 /* Default filename */
2976 sprintf(tmp, "%s.prf", player_name);
2978 /* Ask for a file */
2979 if (!askfor_aux(tmp, 80)) continue;
2981 /* Process the given filename */
2982 err = process_pref_file(tmp);
2986 msg_format("ɸ½à¤ÎÀßÄê¥Õ¥¡¥¤¥ë'%s'¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£", tmp);
2988 msg_format("Loaded default '%s'.", tmp);
2995 msg_format("'%s'¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡ª", tmp);
2997 msg_format("Failed to load '%s'!");
3003 msg_format("'%s'¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£", tmp);
3005 msg_format("Loaded '%s'.", tmp);
3017 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤ò¥Õ¥¡¥¤¥ë¤ËÄɲ乤ë", 16, 0);
3019 prt("Command: Append macros to a file", 16, 0);
3025 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
3027 prt("File: ", 18, 0);
3031 /* Default filename */
3032 sprintf(tmp, "%s.prf", player_name);
3034 /* Ask for a file */
3035 if (!askfor_aux(tmp, 80)) continue;
3037 /* Dump the macros */
3038 (void)macro_dump(tmp);
3042 msg_print("¥Þ¥¯¥í¤òÄɲä·¤Þ¤·¤¿¡£");
3044 msg_print("Appended macros.");
3056 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤Î³Îǧ", 16, 0);
3058 prt("Command: Query a macro", 16, 0);
3064 prt("¥È¥ê¥¬¡¼¥¡¼: ", 18, 0);
3066 prt("Trigger: ", 18, 0);
3070 /* Get a macro trigger */
3071 do_cmd_macro_aux(buf);
3073 /* Acquire action */
3074 k = macro_find_exact(buf);
3081 msg_print("¤½¤Î¥¡¼¤Ë¤Ï¥Þ¥¯¥í¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
3083 msg_print("Found no macro.");
3091 /* Obtain the action */
3092 strcpy(macro__buf, macro__act[k]);
3094 /* Analyze the current action */
3095 ascii_to_text(buf, macro__buf);
3097 /* Display the current action */
3102 msg_print("¥Þ¥¯¥í¤ò³Îǧ¤·¤Þ¤·¤¿¡£");
3104 msg_print("Found a macro.");
3110 /* Create a macro */
3115 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤ÎºîÀ®", 16, 0);
3117 prt("Command: Create a macro", 16, 0);
3123 prt("¥È¥ê¥¬¡¼¥¡¼: ", 18, 0);
3125 prt("Trigger: ", 18, 0);
3129 /* Get a macro trigger */
3130 do_cmd_macro_aux(buf);
3137 prt("¥Þ¥¯¥í¹ÔÆ°: ", 20, 0);
3139 prt("Action: ", 20, 0);
3143 /* Convert to text */
3144 ascii_to_text(tmp, macro__buf);
3146 /* Get an encoded action */
3147 if (askfor_aux(tmp, 80))
3149 /* Convert to ascii */
3150 text_to_ascii(macro__buf, tmp);
3152 /* Link the macro */
3153 macro_add(buf, macro__buf);
3157 msg_print("¥Þ¥¯¥í¤òÄɲä·¤Þ¤·¤¿¡£");
3159 msg_print("Added a macro.");
3165 /* Remove a macro */
3170 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤Îºï½ü", 16, 0);
3172 prt("Command: Remove a macro", 16, 0);
3178 prt("¥È¥ê¥¬¡¼¥¡¼: ", 18, 0);
3180 prt("Trigger: ", 18, 0);
3184 /* Get a macro trigger */
3185 do_cmd_macro_aux(buf);
3187 /* Link the macro */
3188 macro_add(buf, buf);
3192 msg_print("¥Þ¥¯¥í¤òºï½ü¤·¤Þ¤·¤¿¡£");
3194 msg_print("Removed a macro.");
3204 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃÖ¤ò¥Õ¥¡¥¤¥ë¤ËÄɲ乤ë", 16, 0);
3206 prt("Command: Append keymaps to a file", 16, 0);
3212 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
3214 prt("File: ", 18, 0);
3218 /* Default filename */
3219 sprintf(tmp, "%s.prf", player_name);
3221 /* Ask for a file */
3222 if (!askfor_aux(tmp, 80)) continue;
3224 /* Dump the macros */
3225 (void)keymap_dump(tmp);
3229 msg_print("¥¡¼ÇÛÃÖ¤òÄɲä·¤Þ¤·¤¿¡£");
3231 msg_print("Appended keymaps.");
3236 /* Query a keymap */
3243 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃ֤γÎǧ", 16, 0);
3245 prt("Command: Query a keymap", 16, 0);
3251 prt("²¡¤¹¥¡¼: ", 18, 0);
3253 prt("Keypress: ", 18, 0);
3257 /* Get a keymap trigger */
3258 do_cmd_macro_aux_keymap(buf);
3260 /* Look up the keymap */
3261 act = keymap_act[mode][(byte)(buf[0])];
3268 msg_print("¥¡¼ÇÛÃÖ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
3270 msg_print("Found no keymap.");
3278 /* Obtain the action */
3279 strcpy(macro__buf, act);
3281 /* Analyze the current action */
3282 ascii_to_text(buf, macro__buf);
3284 /* Display the current action */
3289 msg_print("¥¡¼ÇÛÃÖ¤ò³Îǧ¤·¤Þ¤·¤¿¡£");
3291 msg_print("Found a keymap.");
3297 /* Create a keymap */
3302 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃ֤κîÀ®", 16, 0);
3304 prt("Command: Create a keymap", 16, 0);
3310 prt("²¡¤¹¥¡¼: ", 18, 0);
3312 prt("Keypress: ", 18, 0);
3316 /* Get a keymap trigger */
3317 do_cmd_macro_aux_keymap(buf);
3324 prt("¹ÔÆ°: ", 20, 0);
3326 prt("Action: ", 20, 0);
3330 /* Convert to text */
3331 ascii_to_text(tmp, macro__buf);
3333 /* Get an encoded action */
3334 if (askfor_aux(tmp, 80))
3336 /* Convert to ascii */
3337 text_to_ascii(macro__buf, tmp);
3339 /* Free old keymap */
3340 string_free(keymap_act[mode][(byte)(buf[0])]);
3342 /* Make new keymap */
3343 keymap_act[mode][(byte)(buf[0])] = string_make(macro__buf);
3347 msg_print("¥¡¼ÇÛÃÖ¤òÄɲä·¤Þ¤·¤¿¡£");
3349 msg_print("Added a keymap.");
3355 /* Remove a keymap */
3360 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃ֤κï½ü", 16, 0);
3362 prt("Command: Remove a keymap", 16, 0);
3368 prt("²¡¤¹¥¡¼: ", 18, 0);
3370 prt("Keypress: ", 18, 0);
3374 /* Get a keymap trigger */
3375 do_cmd_macro_aux_keymap(buf);
3377 /* Free old keymap */
3378 string_free(keymap_act[mode][(byte)(buf[0])]);
3380 /* Make new keymap */
3381 keymap_act[mode][(byte)(buf[0])] = NULL;
3385 msg_print("¥¡¼ÇÛÃÖ¤òºï½ü¤·¤Þ¤·¤¿¡£");
3387 msg_print("Removed a keymap.");
3392 /* Enter a new action */
3397 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¹ÔÆ°¤ÎÆþÎÏ", 16, 0);
3399 prt("Command: Enter a new action", 16, 0);
3403 /* Go to the correct location */
3406 /* Hack -- limit the value */
3409 /* Get an encoded action */
3410 if (!askfor_aux(buf, 80)) continue;
3412 /* Extract an action */
3413 text_to_ascii(macro__buf, buf);
3416 #endif /* ALLOW_MACROS */
3425 /* Flush messages */
3434 static void cmd_visuals_aux(int i, int *num, int max)
3441 sprintf(str, "%d", *num);
3443 if (!get_string(format("Input new number(0-%d): ", max-1), str, 4))
3446 tmp = strtol(str, NULL, 0);
3447 if (tmp >= 0 && tmp < max)
3451 else if (isupper(i))
3452 *num = (*num + max - 1) % max;
3454 *num = (*num + 1) % max;
3460 * Interact with "visuals"
3462 void do_cmd_visuals(void)
3473 /* File type is "TEXT" */
3474 FILE_TYPE(FILE_TYPE_TEXT);
3477 /* Save the screen */
3481 /* Interact until done */
3487 /* Ask for a choice */
3489 prt("²èÌÌɽ¼¨¤ÎÀßÄê", 2, 0);
3491 prt("Interact with Visuals", 2, 0);
3495 /* Give some choices */
3497 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
3499 prt("(1) Load a user pref file", 4, 5);
3502 #ifdef ALLOW_VISUALS
3504 prt("(2) ¥â¥ó¥¹¥¿¡¼¤Î ¿§/ʸ»ú ¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 5, 5);
3505 prt("(3) ¥¢¥¤¥Æ¥à¤Î ¿§/ʸ»ú ¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 6, 5);
3506 prt("(4) ÃÏ·Á¤Î ¿§/ʸ»ú ¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 7, 5);
3507 prt("(5) (̤»ÈÍÑ)", 8, 5);
3508 prt("(6) ¥â¥ó¥¹¥¿¡¼¤Î ¿§/ʸ»ú ¤òÊѹ¹¤¹¤ë", 9, 5);
3509 prt("(7) ¥¢¥¤¥Æ¥à¤Î ¿§/ʸ»ú ¤òÊѹ¹¤¹¤ë", 10, 5);
3510 prt("(8) ÃÏ·Á¤Î ¿§/ʸ»ú ¤òÊѹ¹¤¹¤ë", 11, 5);
3511 prt("(9) (̤»ÈÍÑ)", 12, 5);
3513 prt("(2) Dump monster attr/chars", 5, 5);
3514 prt("(3) Dump object attr/chars", 6, 5);
3515 prt("(4) Dump feature attr/chars", 7, 5);
3516 prt("(5) (unused)", 8, 5);
3517 prt("(6) Change monster attr/chars", 9, 5);
3518 prt("(7) Change object attr/chars", 10, 5);
3519 prt("(8) Change feature attr/chars", 11, 5);
3520 prt("(9) (unused)", 12, 5);
3525 prt("(0) ²èÌÌɽ¼¨ÊýË¡¤Î½é´ü²½", 13, 5);
3527 prt("(0) Reset visuals", 13, 5);
3533 prt("¥³¥Þ¥ó¥É:", 18, 0);
3535 prt("Command: ", 15, 0);
3543 if (i == ESCAPE) break;
3545 /* Load a 'pref' file */
3550 prt("¥³¥Þ¥ó¥É: ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 15, 0);
3552 prt("Command: Load a user pref file", 15, 0);
3558 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
3560 prt("File: ", 17, 0);
3564 /* Default filename */
3565 sprintf(tmp, "%s.prf", player_name);
3568 if (!askfor_aux(tmp, 70)) continue;
3570 /* Process the given filename */
3571 (void)process_pref_file(tmp);
3574 #ifdef ALLOW_VISUALS
3576 /* Dump monster attr/chars */
3579 static cptr mark = "Monster attr/chars";
3584 prt("¥³¥Þ¥ó¥É: ¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 15, 0);
3586 prt("Command: Dump monster attr/chars", 15, 0);
3592 prt("¥Õ¥¡¥¤¥ë: ", 17, 0);
3594 prt("File: ", 17, 0);
3598 /* Default filename */
3599 sprintf(tmp, "%s.prf", player_name);
3601 /* Get a filename */
3602 if (!askfor_aux(tmp, 70)) continue;
3604 /* Build the filename */
3605 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
3607 /* Append to the file */
3608 fff = open_auto_dump(buf, mark, &line_num);
3613 fprintf(fff, "\n# ¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤ÎÀßÄê\n\n");
3615 fprintf(fff, "\n# Monster attr/char definitions\n\n");
3620 for (i = 0; i < max_r_idx; i++)
3622 monster_race *r_ptr = &r_info[i];
3624 /* Skip non-entries */
3625 if (!r_ptr->name) continue;
3627 /* Dump a comment */
3628 fprintf(fff, "# %s\n", (r_name + r_ptr->name));
3631 /* Dump the monster attr/char info */
3632 fprintf(fff, "R:%d:0x%02X:0x%02X\n\n", i,
3633 (byte)(r_ptr->x_attr), (byte)(r_ptr->x_char));
3638 close_auto_dump(fff, mark, line_num);
3642 msg_print("¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
3644 msg_print("Dumped monster attr/chars.");
3649 /* Dump object attr/chars */
3652 static cptr mark = "Object attr/chars";
3657 prt("¥³¥Þ¥ó¥É: ¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 15, 0);
3659 prt("Command: Dump object attr/chars", 15, 0);
3665 prt("¥Õ¥¡¥¤¥ë: ", 17, 0);
3667 prt("File: ", 17, 0);
3671 /* Default filename */
3672 sprintf(tmp, "%s.prf", player_name);
3674 /* Get a filename */
3675 if (!askfor_aux(tmp, 70)) continue;
3677 /* Build the filename */
3678 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
3680 /* Append to the file */
3681 fff = open_auto_dump(buf, mark, &line_num);
3686 fprintf(fff, "\n# ¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤ÎÀßÄê\n\n");
3688 fprintf(fff, "\n# Object attr/char definitions\n\n");
3693 for (i = 0; i < max_k_idx; i++)
3695 object_kind *k_ptr = &k_info[i];
3697 /* Skip non-entries */
3698 if (!k_ptr->name) continue;
3700 /* Dump a comment */
3701 fprintf(fff, "# %s\n", (k_name + k_ptr->name));
3704 /* Dump the object attr/char info */
3705 fprintf(fff, "K:%d:0x%02X:0x%02X\n\n", i,
3706 (byte)(k_ptr->x_attr), (byte)(k_ptr->x_char));
3711 close_auto_dump(fff, mark, line_num);
3715 msg_print("¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
3717 msg_print("Dumped object attr/chars.");
3722 /* Dump feature attr/chars */
3725 static cptr mark = "Feature attr/chars";
3730 prt("¥³¥Þ¥ó¥É: ÃÏ·Á¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 15, 0);
3732 prt("Command: Dump feature attr/chars", 15, 0);
3738 prt("¥Õ¥¡¥¤¥ë: ", 17, 0);
3740 prt("File: ", 17, 0);
3744 /* Default filename */
3745 sprintf(tmp, "%s.prf", player_name);
3747 /* Get a filename */
3748 if (!askfor_aux(tmp, 70)) continue;
3750 /* Build the filename */
3751 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
3753 /* Append to the file */
3754 fff = open_auto_dump(buf, mark, &line_num);
3759 fprintf(fff, "\n# ÃÏ·Á¤Î[¿§/ʸ»ú]¤ÎÀßÄê\n\n");
3761 fprintf(fff, "\n# Feature attr/char definitions\n\n");
3766 for (i = 0; i < max_f_idx; i++)
3768 feature_type *f_ptr = &f_info[i];
3770 /* Skip non-entries */
3771 if (!f_ptr->name) continue;
3773 /* Dump a comment */
3774 fprintf(fff, "# %s\n", (f_name + f_ptr->name));
3777 /* Dump the feature attr/char info */
3778 fprintf(fff, "F:%d:0x%02X:0x%02X\n\n", i,
3779 (byte)(f_ptr->x_attr), (byte)(f_ptr->x_char));
3784 close_auto_dump(fff, mark, line_num);
3788 msg_print("ÃÏ·Á¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
3790 msg_print("Dumped feature attr/chars.");
3795 /* Modify monster attr/chars */
3802 prt("¥³¥Þ¥ó¥É: ¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤òÊѹ¹¤·¤Þ¤¹", 15, 0);
3804 prt("Command: Change monster attr/chars", 15, 0);
3808 /* Hack -- query until done */
3811 monster_race *r_ptr = &r_info[r];
3815 byte da = (r_ptr->d_attr);
3816 byte dc = (r_ptr->d_char);
3817 byte ca = (r_ptr->x_attr);
3818 byte cc = (r_ptr->x_char);
3820 /* Label the object */
3822 Term_putstr(5, 17, -1, TERM_WHITE,
3823 format("¥â¥ó¥¹¥¿¡¼ = %d, ̾Á° = %-40.40s",
3824 r, (r_name + r_ptr->name)));
3826 Term_putstr(5, 17, -1, TERM_WHITE,
3827 format("Monster = %d, Name = %-40.40s",
3828 r, (r_name + r_ptr->name)));
3832 /* Label the Default values */
3834 Term_putstr(10, 19, -1, TERM_WHITE,
3835 format("½é´üÃÍ ¿§ / ʸ»ú = %3u / %3u", da, dc));
3837 Term_putstr(10, 19, -1, TERM_WHITE,
3838 format("Default attr/char = %3u / %3u", da, dc));
3841 Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>");
3842 Term_putch(43, 19, da, dc);
3846 Term_putch(44, 19, 255, -1);
3848 Term_putch(44, 19, 0, ' ');
3851 /* Label the Current values */
3853 Term_putstr(10, 20, -1, TERM_WHITE,
3854 format("¸½ºßÃÍ ¿§ / ʸ»ú = %3u / %3u", ca, cc));
3856 Term_putstr(10, 20, -1, TERM_WHITE,
3857 format("Current attr/char = %3u / %3u", ca, cc));
3860 Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>");
3861 Term_putch(43, 20, ca, cc);
3865 Term_putch(44, 20, 255, -1);
3867 Term_putch(44, 20, 0, ' ');
3872 Term_putstr(0, 22, -1, TERM_WHITE,
3873 "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C): ");
3875 Term_putstr(0, 22, -1, TERM_WHITE,
3876 "Command (n/N/^N/a/A/^A/c/C/^C): ");
3883 if (i == ESCAPE) break;
3885 if (iscntrl(i)) c = 'a' + i - KTRL('A');
3886 else if (isupper(i)) c = 'a' + i - 'A';
3892 cmd_visuals_aux(i, &r, max_r_idx);
3895 t = (int)r_ptr->x_attr;
3896 cmd_visuals_aux(i, &t, 256);
3897 r_ptr->x_attr = (byte)t;
3900 t = (int)r_ptr->x_char;
3901 cmd_visuals_aux(i, &t, 256);
3902 r_ptr->x_char = (byte)t;
3908 /* Modify object attr/chars */
3915 prt("¥³¥Þ¥ó¥É: ¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤òÊѹ¹¤·¤Þ¤¹", 15, 0);
3917 prt("Command: Change object attr/chars", 15, 0);
3921 /* Hack -- query until done */
3924 object_kind *k_ptr = &k_info[k];
3928 byte da = (byte)k_ptr->d_attr;
3929 byte dc = (byte)k_ptr->d_char;
3930 byte ca = (byte)k_ptr->x_attr;
3931 byte cc = (byte)k_ptr->x_char;
3933 /* Label the object */
3935 Term_putstr(5, 17, -1, TERM_WHITE,
3936 format("¥¢¥¤¥Æ¥à = %d, ̾Á° = %-40.40s",
3937 k, (k_name + k_ptr->name)));
3939 Term_putstr(5, 17, -1, TERM_WHITE,
3940 format("Object = %d, Name = %-40.40s",
3941 k, (k_name + k_ptr->name)));
3945 /* Label the Default values */
3947 Term_putstr(10, 19, -1, TERM_WHITE,
3948 format("½é´üÃÍ ¿§ / ʸ»ú = %3d / %3d", da, dc));
3950 Term_putstr(10, 19, -1, TERM_WHITE,
3951 format("Default attr/char = %3d / %3d", da, dc));
3954 Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>");
3955 Term_putch(43, 19, da, dc);
3959 Term_putch(44, 19, 255, -1);
3961 Term_putch(44, 19, 0, ' ');
3964 /* Label the Current values */
3966 Term_putstr(10, 20, -1, TERM_WHITE,
3967 format("¸½ºßÃÍ ¿§ / ʸ»ú = %3d / %3d", ca, cc));
3969 Term_putstr(10, 20, -1, TERM_WHITE,
3970 format("Current attr/char = %3d / %3d", ca, cc));
3973 Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>");
3974 Term_putch(43, 20, ca, cc);
3978 Term_putch(44, 20, 255, -1);
3980 Term_putch(44, 20, 0, ' ');
3985 Term_putstr(0, 22, -1, TERM_WHITE,
3986 "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C): ");
3988 Term_putstr(0, 22, -1, TERM_WHITE,
3989 "Command (n/N/^N/a/A/^A/c/C/^C): ");
3996 if (i == ESCAPE) break;
3998 if (iscntrl(i)) c = 'a' + i - KTRL('A');
3999 else if (isupper(i)) c = 'a' + i - 'A';
4005 cmd_visuals_aux(i, &k, max_k_idx);
4008 t = (int)k_info[k].x_attr;
4009 cmd_visuals_aux(i, &t, 256);
4010 k_info[k].x_attr = (byte)t;
4013 t = (int)k_info[k].x_char;
4014 cmd_visuals_aux(i, &t, 256);
4015 k_info[k].x_char = (byte)t;
4021 /* Modify feature attr/chars */
4028 prt("¥³¥Þ¥ó¥É: ÃÏ·Á¤Î[¿§/ʸ»ú]¤òÊѹ¹¤·¤Þ¤¹", 15, 0);
4030 prt("Command: Change feature attr/chars", 15, 0);
4034 /* Hack -- query until done */
4037 feature_type *f_ptr = &f_info[f];
4041 byte da = (byte)f_ptr->d_attr;
4042 byte dc = (byte)f_ptr->d_char;
4043 byte ca = (byte)f_ptr->x_attr;
4044 byte cc = (byte)f_ptr->x_char;
4046 /* Label the object */
4048 Term_putstr(5, 17, -1, TERM_WHITE,
4049 format("ÃÏ·Á = %d, ̾Á° = %-40.40s",
4050 f, (f_name + f_ptr->name)));
4052 Term_putstr(5, 17, -1, TERM_WHITE,
4053 format("Terrain = %d, Name = %-40.40s",
4054 f, (f_name + f_ptr->name)));
4058 /* Label the Default values */
4060 Term_putstr(10, 19, -1, TERM_WHITE,
4061 format("½é´üÃÍ ¿§ / ʸ»ú = %3d / %3d", da, dc));
4063 Term_putstr(10, 19, -1, TERM_WHITE,
4064 format("Default attr/char = %3d / %3d", da, dc));
4067 Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>");
4068 Term_putch(43, 19, da, dc);
4072 Term_putch(44, 19, 255, -1);
4074 Term_putch(44, 19, 0, ' ');
4077 /* Label the Current values */
4079 Term_putstr(10, 20, -1, TERM_WHITE,
4080 format("¸½ºßÃÍ ¿§ / ʸ»ú = %3d / %3d", ca, cc));
4082 Term_putstr(10, 20, -1, TERM_WHITE,
4083 format("Current attr/char = %3d / %3d", ca, cc));
4086 Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>");
4087 Term_putch(43, 20, ca, cc);
4091 Term_putch(44, 20, 255, -1);
4093 Term_putch(44, 20, 0, ' ');
4098 Term_putstr(0, 22, -1, TERM_WHITE,
4099 "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C): ");
4101 Term_putstr(0, 22, -1, TERM_WHITE,
4102 "Command (n/N/^N/a/A/^A/c/C/^C): ");
4109 if (i == ESCAPE) break;
4111 if (iscntrl(i)) c = 'a' + i - KTRL('A');
4112 else if (isupper(i)) c = 'a' + i - 'A';
4118 cmd_visuals_aux(i, &f, max_f_idx);
4121 t = (int)f_info[f].x_attr;
4122 cmd_visuals_aux(i, &t, 256);
4123 f_info[f].x_attr = (byte)t;
4126 t = (int)f_info[f].x_char;
4127 cmd_visuals_aux(i, &t, 256);
4128 f_info[f].x_char = (byte)t;
4144 msg_print("²èÌ̾å¤Î[¿§/ʸ»ú]¤ò½é´üÃͤ˥ꥻ¥Ã¥È¤·¤Þ¤·¤¿¡£");
4146 msg_print("Visual attr/char tables reset.");
4151 /* Unknown option */
4157 /* Flush messages */
4162 /* Restore the screen */
4168 * Interact with "colors"
4170 void do_cmd_colors(void)
4181 /* File type is "TEXT" */
4182 FILE_TYPE(FILE_TYPE_TEXT);
4185 /* Save the screen */
4189 /* Interact until done */
4195 /* Ask for a choice */
4197 prt("[ ¥«¥é¡¼¤ÎÀßÄê ]", 2, 0);
4199 prt("Interact with Colors", 2, 0);
4203 /* Give some choices */
4205 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
4207 prt("(1) Load a user pref file", 4, 5);
4212 prt("(2) ¥«¥é¡¼¤ÎÀßÄê¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 5, 5);
4213 prt("(3) ¥«¥é¡¼¤ÎÀßÄê¤òÊѹ¹¤¹¤ë", 6, 5);
4215 prt("(2) Dump colors", 5, 5);
4216 prt("(3) Modify colors", 6, 5);
4223 prt("¥³¥Þ¥ó¥É: ", 8, 0);
4225 prt("Command: ", 8, 0);
4233 if (i == ESCAPE) break;
4235 /* Load a 'pref' file */
4240 prt("¥³¥Þ¥ó¥É: ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹", 8, 0);
4242 prt("Command: Load a user pref file", 8, 0);
4248 prt("¥Õ¥¡¥¤¥ë: ", 10, 0);
4250 prt("File: ", 10, 0);
4255 sprintf(tmp, "%s.prf", player_name);
4258 if (!askfor_aux(tmp, 70)) continue;
4260 /* Process the given filename */
4261 (void)process_pref_file(tmp);
4263 /* Mega-Hack -- react to changes */
4264 Term_xtra(TERM_XTRA_REACT, 0);
4266 /* Mega-Hack -- redraw */
4275 static cptr mark = "Colors";
4280 prt("¥³¥Þ¥ó¥É: ¥«¥é¡¼¤ÎÀßÄê¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 8, 0);
4282 prt("Command: Dump colors", 8, 0);
4288 prt("¥Õ¥¡¥¤¥ë: ", 10, 0);
4290 prt("File: ", 10, 0);
4294 /* Default filename */
4295 sprintf(tmp, "%s.prf", player_name);
4297 /* Get a filename */
4298 if (!askfor_aux(tmp, 70)) continue;
4300 /* Build the filename */
4301 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
4303 /* Append to the file */
4304 fff = open_auto_dump(buf, mark, &line_num);
4309 fprintf(fff, "\n# ¥«¥é¡¼¤ÎÀßÄê\n\n");
4311 fprintf(fff, "\n# Color redefinitions\n\n");
4316 for (i = 0; i < 256; i++)
4318 int kv = angband_color_table[i][0];
4319 int rv = angband_color_table[i][1];
4320 int gv = angband_color_table[i][2];
4321 int bv = angband_color_table[i][3];
4326 cptr name = "unknown";
4330 /* Skip non-entries */
4331 if (!kv && !rv && !gv && !bv) continue;
4333 /* Extract the color name */
4334 if (i < 16) name = color_names[i];
4336 /* Dump a comment */
4338 fprintf(fff, "# ¥«¥é¡¼ '%s'\n", name);
4340 fprintf(fff, "# Color '%s'\n", name);
4344 /* Dump the monster attr/char info */
4345 fprintf(fff, "V:%d:0x%02X:0x%02X:0x%02X:0x%02X\n\n",
4351 close_auto_dump(fff, mark, line_num);
4355 msg_print("¥«¥é¡¼¤ÎÀßÄê¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
4357 msg_print("Dumped color redefinitions.");
4369 prt("¥³¥Þ¥ó¥É: ¥«¥é¡¼¤ÎÀßÄê¤òÊѹ¹¤·¤Þ¤¹", 8, 0);
4371 prt("Command: Modify colors", 8, 0);
4375 /* Hack -- query until done */
4384 /* Exhibit the normal colors */
4385 for (j = 0; j < 16; j++)
4387 /* Exhibit this color */
4388 Term_putstr(j*4, 20, -1, a, "###");
4390 /* Exhibit all colors */
4391 Term_putstr(j*4, 22, -1, j, format("%3d", j));
4394 /* Describe the color */
4396 name = ((a < 16) ? color_names[a] : "̤ÄêµÁ");
4398 name = ((a < 16) ? color_names[a] : "undefined");
4402 /* Describe the color */
4404 Term_putstr(5, 10, -1, TERM_WHITE,
4405 format("¥«¥é¡¼ = %d, ̾Á° = %s", a, name));
4407 Term_putstr(5, 10, -1, TERM_WHITE,
4408 format("Color = %d, Name = %s", a, name));
4412 /* Label the Current values */
4413 Term_putstr(5, 12, -1, TERM_WHITE,
4414 format("K = 0x%02x / R,G,B = 0x%02x,0x%02x,0x%02x",
4415 angband_color_table[a][0],
4416 angband_color_table[a][1],
4417 angband_color_table[a][2],
4418 angband_color_table[a][3]));
4422 Term_putstr(0, 14, -1, TERM_WHITE,
4423 "¥³¥Þ¥ó¥É (n/N/k/K/r/R/g/G/b/B): ");
4425 Term_putstr(0, 14, -1, TERM_WHITE,
4426 "Command (n/N/k/K/r/R/g/G/b/B): ");
4434 if (i == ESCAPE) break;
4437 if (i == 'n') a = (byte)(a + 1);
4438 if (i == 'N') a = (byte)(a - 1);
4439 if (i == 'k') angband_color_table[a][0] = (byte)(angband_color_table[a][0] + 1);
4440 if (i == 'K') angband_color_table[a][0] = (byte)(angband_color_table[a][0] - 1);
4441 if (i == 'r') angband_color_table[a][1] = (byte)(angband_color_table[a][1] + 1);
4442 if (i == 'R') angband_color_table[a][1] = (byte)(angband_color_table[a][1] - 1);
4443 if (i == 'g') angband_color_table[a][2] = (byte)(angband_color_table[a][2] + 1);
4444 if (i == 'G') angband_color_table[a][2] = (byte)(angband_color_table[a][2] - 1);
4445 if (i == 'b') angband_color_table[a][3] = (byte)(angband_color_table[a][3] + 1);
4446 if (i == 'B') angband_color_table[a][3] = (byte)(angband_color_table[a][3] - 1);
4448 /* Hack -- react to changes */
4449 Term_xtra(TERM_XTRA_REACT, 0);
4451 /* Hack -- redraw */
4458 /* Unknown option */
4464 /* Flush messages */
4469 /* Restore the screen */
4475 * Note something in the message recall
4477 void do_cmd_note(void)
4486 if (!get_string("¥á¥â: ", buf, 60)) return;
4488 if (!get_string("Note: ", buf, 60)) return;
4492 /* Ignore empty notes */
4493 if (!buf[0] || (buf[0] == ' ')) return;
4495 /* Add the note to the message recall */
4497 msg_format("¥á¥â: %s", buf);
4499 msg_format("Note: %s", buf);
4506 * Mention the current version
4508 void do_cmd_version(void)
4513 msg_format("ÊѶòÈÚÅÜ(Hengband) %d.%d.%d",
4514 FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH);
4516 msg_format("You are playing Hengband %d.%d.%d.",
4517 FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH);
4524 * Array of feeling strings
4526 static cptr do_cmd_feeling_text[11] =
4529 "¤³¤Î³¬¤ÎÊ·°Ïµ¤¤ò´¶¤¸¤È¤ì¤Ê¤«¤Ã¤¿...",
4531 "Looks like any other level.",
4535 "¤³¤Î³¬¤Ë¤Ï²¿¤«ÆÃÊ̤ʤâ¤Î¤¬¤¢¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£",
4537 "You feel there is something special about this level.",
4541 "¶²¤í¤·¤¤»à¤Î¸¸¤¬ÌܤËÉ⤫¤Ó¡¢µ¤À䤷¤½¤¦¤Ë¤Ê¤Ã¤¿¡ª",
4543 "You nearly faint as horrible visions of death fill your mind!",
4547 "¤³¤Î³¬¤Ï¤È¤Æ¤â´í¸±¤Ê¤è¤¦¤À¡£",
4549 "This level looks very dangerous.",
4553 "¤È¤Æ¤â°¤¤Í½´¶¤¬¤¹¤ë...",
4555 "You have a very bad feeling...",
4559 "°¤¤Í½´¶¤¬¤¹¤ë...",
4561 "You have a bad feeling...",
4567 "You feel nervous.",
4571 "¾¯¤·ÉÔ±¿¤Êµ¤¤¬¤¹¤ë...",
4573 "You feel your luck is turning...",
4577 "¤³¤Î¾ì½ê¤Ï¹¥¤¤Ë¤Ê¤ì¤Ê¤¤¡£",
4579 "You don't like the look of this place.",
4583 "¤³¤Î³¬¤Ï¤½¤ì¤Ê¤ê¤Ë°ÂÁ´¤Ê¤è¤¦¤À¡£",
4585 "This level looks reasonably safe.",
4589 "¤Ê¤ó¤ÆÂà¶þ¤Ê¤È¤³¤í¤À..."
4591 "What a boring place..."
4596 static cptr do_cmd_feeling_text_combat[11] =
4599 "¤³¤Î³¬¤ÎÊ·°Ïµ¤¤ò´¶¤¸¤È¤ì¤Ê¤«¤Ã¤¿...",
4601 "Looks like any other level.",
4605 "¤³¤Î³¬¤Ë¤Ï²¿¤«ÆÃÊ̤ʤâ¤Î¤¬¤¢¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£",
4607 "You feel there is something special about this level.",
4611 "º£Ìë¤â¤Þ¤¿¡¢Ã¯¤«¤¬Ì¿¤òÍî¤È¤¹...",
4613 "You nearly faint as horrible visions of death fill your mind!",
4617 "¤³¤Î³¬¤Ï¤È¤Æ¤â´í¸±¤Ê¤è¤¦¤À¡£",
4619 "This level looks very dangerous.",
4623 "¤È¤Æ¤â°¤¤Í½´¶¤¬¤¹¤ë...",
4625 "You have a very bad feeling...",
4629 "°¤¤Í½´¶¤¬¤¹¤ë...",
4631 "You have a bad feeling...",
4637 "You feel nervous.",
4641 "¾¯¤·ÉÔ±¿¤Êµ¤¤¬¤¹¤ë...",
4643 "You feel your luck is turning...",
4647 "¤³¤Î¾ì½ê¤Ï¹¥¤¤Ë¤Ê¤ì¤Ê¤¤¡£",
4649 "You don't like the look of this place.",
4653 "¤³¤Î³¬¤Ï¤½¤ì¤Ê¤ê¤Ë°ÂÁ´¤Ê¤è¤¦¤À¡£",
4655 "This level looks reasonably safe.",
4659 "¤Ê¤ó¤ÆÂà¶þ¤Ê¤È¤³¤í¤À..."
4661 "What a boring place..."
4666 static cptr do_cmd_feeling_text_lucky[11] =
4669 "¤³¤Î³¬¤ÎÊ·°Ïµ¤¤ò´¶¤¸¤È¤ì¤Ê¤«¤Ã¤¿...",
4670 "¤³¤Î³¬¤Ë¤Ï²¿¤«ÆÃÊ̤ʤâ¤Î¤¬¤¢¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£",
4671 "¤³¤Î³¬¤Ï¤³¤Î¾å¤Ê¤¯ÁÇÀ²¤é¤·¤¤´¶¤¸¤¬¤¹¤ë¡£",
4672 "ÁÇÀ²¤é¤·¤¤´¶¤¸¤¬¤¹¤ë...",
4673 "¤È¤Æ¤âÎɤ¤´¶¤¸¤¬¤¹¤ë...",
4674 "Îɤ¤´¶¤¸¤¬¤¹¤ë...",
4675 "¤Á¤ç¤Ã¤È¹¬±¿¤Ê´¶¤¸¤¬¤¹¤ë...",
4676 "¿¾¯¤Ï±¿¤¬¸þ¤¤¤Æ¤¤¿¤«...",
4677 "¸«¤¿´¶¤¸°¤¯¤Ï¤Ê¤¤...",
4678 "Á´Á³ÂÌÌܤȤ¤¤¦¤³¤È¤Ï¤Ê¤¤¤¬...",
4679 "¤Ê¤ó¤ÆÂà¶þ¤Ê¤È¤³¤í¤À..."
4681 "Looks like any other level.",
4682 "You feel there is something special about this level.",
4683 "You have a superb feeling about this level.",
4684 "You have an excellent feeling...",
4685 "You have a very good feeling...",
4686 "You have a good feeling...",
4687 "You feel strangely lucky...",
4688 "You feel your luck is turning...",
4689 "You like the look of this place...",
4690 "This level can't be all bad...",
4691 "What a boring place..."
4697 * Note that "feeling" is set to zero unless some time has passed.
4698 * Note that this is done when the level is GENERATED, not entered.
4700 void do_cmd_feeling(void)
4702 /* Verify the feeling */
4703 if (feeling > 10) feeling = 10;
4705 /* No useful feeling in quests */
4706 if (p_ptr->inside_quest && !random_quest_number(dun_level))
4709 msg_print("ŵ·¿Åª¤Ê¥¯¥¨¥¹¥È¤Î¥À¥ó¥¸¥ç¥ó¤Î¤è¤¦¤À¡£");
4711 msg_print("Looks like a typical quest level.");
4717 /* No useful feeling in town */
4718 else if (p_ptr->town_num && !dun_level)
4721 if (!strcmp(town[p_ptr->town_num].name, "¹ÓÌî"))
4723 if (!strcmp(town[p_ptr->town_num].name, "wilderness"))
4727 msg_print("²¿¤«¤¢¤ê¤½¤¦¤Ê¹ÓÌî¤Î¤è¤¦¤À¡£");
4729 msg_print("Looks like a strange wilderness.");
4737 msg_print("ŵ·¿Åª¤ÊÄ®¤Î¤è¤¦¤À¡£");
4739 msg_print("Looks like a typical town.");
4746 /* No useful feeling in the wilderness */
4747 else if (!dun_level)
4750 msg_print("ŵ·¿Åª¤Ê¹ÓÌî¤Î¤è¤¦¤À¡£");
4752 msg_print("Looks like a typical wilderness.");
4758 /* Display the feeling */
4759 if (turn - old_turn >= (150 - dun_level)*TURNS_PER_TICK || cheat_xtra)
4761 if (p_ptr->muta3 & MUT3_GOOD_LUCK) msg_print(do_cmd_feeling_text_lucky[feeling]);
4763 if((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON)){
4764 msg_print(do_cmd_feeling_text_combat[feeling]);
4766 msg_print(do_cmd_feeling_text[feeling]);
4771 msg_print(do_cmd_feeling_text[0]);
4780 * Encode the screen colors
4782 static char hack[17] = "dwsorgbuDWvyRGBU";
4785 static errr photo_fgets(FILE *fff, char *buf, huge n)
4794 if (fgets(tmp, 1024, fff))
4796 /* Convert weirdness */
4797 for (s = tmp; *s; s++)
4799 /* Handle newline */
4810 else if (*s == '\t')
4812 /* Hack -- require room */
4813 if (i + 8 >= n) break;
4815 /* Append a space */
4818 /* Append some more spaces */
4819 while (!(i % 8)) buf[i++] = ' ';
4823 else if (iskanji(*s))
4830 /* Ⱦ³Ñ¤«¤Ê¤ËÂбþ */
4831 else if ((((int)*s & 0xff) > 0xa1) && (((int)*s & 0xff ) < 0xdf))
4838 /* Handle printables */
4859 * Hack -- load a screen dump from a file
4861 void do_cmd_load_screen(void)
4876 Term_get_size(&wid, &hgt);
4878 /* Hack -- drop permissions */
4881 /* Build the filename */
4882 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, "dump.txt");
4884 /* Append to the file */
4885 fff = my_fopen(buf, "r");
4890 msg_format("%s ¤ò³«¤¯¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", buf);
4892 msg_format("Failed to open %s.", buf);
4899 /* Save the screen */
4902 /* Clear the screen */
4906 /* Load the screen */
4907 for (y = 0; okay && (y < hgt); y++)
4909 /* Get a line of data */
4910 if (photo_fgets(fff, buf, 1024)) okay = FALSE;
4913 for (x = 0; x < wid - 1; x++)
4915 /* Put the attr/char */
4916 Term_draw(x, y, TERM_WHITE, buf[x]);
4920 /* Get the blank line */
4921 if (my_fgets(fff, buf, sizeof(buf))) okay = FALSE;
4924 /* Dump the screen */
4925 for (y = 0; okay && (y < hgt); y++)
4927 /* Get a line of data */
4928 if (photo_fgets(fff, buf, 1024)) okay = FALSE;
4931 for (x = 0; x < wid - 1; x++)
4933 /* Get the attr/char */
4934 (void)(Term_what(x, y, &a, &c));
4936 /* Look up the attr */
4937 for (i = 0; i < 16; i++)
4939 /* Use attr matches */
4940 if (hack[i] == buf[x]) a = i;
4943 /* Put the attr/char */
4944 Term_draw(x, y, a, c);
4949 /* Get the blank line */
4950 if (my_fgets(fff, buf, sizeof(buf))) okay = FALSE;
4956 /* Hack -- grab permissions */
4962 prt("¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤µ¤ì¤¿²èÌÌ(µÇ°»£±Æ)¤ò¥í¡¼¥É¤·¤Þ¤·¤¿¡£", 0, 0);
4964 msg_print("Screen dump loaded.");
4971 /* Restore the screen */
4978 cptr inven_res_label =
4980 " »ÀÅŲÐÎäÆǸ÷°ÇÇ˹ì¹ö°øÆÙÎô ÌÕÉÝÍðáãÆ©Ì¿´¶¾ÃÉüÉâ";
4982 " AcElFiCoPoLiDkShSoNtNxCaDi BlFeCfFaSeHlEpSdRgLv";
4985 /* XTRA HACK RESLIST */
4986 static void do_cmd_knowledge_inven_aux(FILE *fff, object_type *o_ptr,
4987 int *j, byte tval, char *where)
4989 char o_name[MAX_NLEN];
4990 u32b flgs[TR_FLAG_SIZE];
4992 if (!o_ptr->k_idx)return;
4993 if (o_ptr->tval != tval)return;
4996 * HACK:Ring of Lordly protection and Dragon shield/helm
4997 * have random resistances.
4999 if ( ((o_ptr->tval >= TV_BOW && o_ptr->tval<= TV_DRAG_ARMOR && o_ptr->name2)
5000 || (o_ptr->tval == TV_RING && o_ptr->sval == SV_RING_LORDLY)
5001 || (o_ptr->tval == TV_SHIELD && o_ptr->sval == SV_DRAGON_SHIELD)
5002 || (o_ptr->tval == TV_HELM && o_ptr->sval == SV_DRAGON_HELM)
5003 || (o_ptr->tval == TV_GLOVES && o_ptr->sval == SV_SET_OF_DRAGON_GLOVES)
5004 || (o_ptr->tval == TV_BOOTS && o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE)
5005 || o_ptr->art_name || o_ptr->name1) && object_known_p(o_ptr))
5008 object_desc(o_name, o_ptr, TRUE, 0);
5010 while ( o_name[i] && i < 26 ){
5012 if (iskanji(o_name[i])) i++;
5016 if(i<28) while(i<28){o_name[i]=' ';i++;}
5019 fprintf(fff,"%s %s", where, o_name);
5021 if (!(o_ptr->ident & (IDENT_MENTAL)))
5024 fprintf(fff, "-------ÉÔÌÀ--------------- -------ÉÔÌÀ---------\n");
5026 fprintf(fff, "-------unknown------------ -------unknown------\n");
5030 object_flags_known(o_ptr, flgs);
5033 if (have_flag(flgs, TR_IM_ACID)) fprintf(fff,"¡ö");
5034 else if (have_flag(flgs, TR_RES_ACID)) fprintf(fff,"¡Ü");
5035 else fprintf(fff,"¡¦");
5037 if (have_flag(flgs, TR_IM_ELEC)) fprintf(fff,"¡ö");
5038 else if (have_flag(flgs, TR_RES_ELEC)) fprintf(fff,"¡Ü");
5039 else fprintf(fff,"¡¦");
5041 if (have_flag(flgs, TR_IM_FIRE)) fprintf(fff,"¡ö");
5042 else if (have_flag(flgs, TR_RES_FIRE)) fprintf(fff,"¡Ü");
5043 else fprintf(fff,"¡¦");
5045 if (have_flag(flgs, TR_IM_COLD)) fprintf(fff,"¡ö");
5046 else if (have_flag(flgs, TR_RES_COLD)) fprintf(fff,"¡Ü");
5047 else fprintf(fff,"¡¦");
5049 if (have_flag(flgs, TR_RES_POIS)) fprintf(fff,"¡Ü");
5050 else fprintf(fff,"¡¦");
5052 if (have_flag(flgs, TR_RES_LITE)) fprintf(fff,"¡Ü");
5053 else fprintf(fff,"¡¦");
5055 if (have_flag(flgs, TR_RES_DARK)) fprintf(fff,"¡Ü");
5056 else fprintf(fff,"¡¦");
5058 if (have_flag(flgs, TR_RES_SHARDS)) fprintf(fff,"¡Ü");
5059 else fprintf(fff,"¡¦");
5061 if (have_flag(flgs, TR_RES_SOUND)) fprintf(fff,"¡Ü");
5062 else fprintf(fff,"¡¦");
5064 if (have_flag(flgs, TR_RES_NETHER)) fprintf(fff,"¡Ü");
5065 else fprintf(fff,"¡¦");
5067 if (have_flag(flgs, TR_RES_NEXUS)) fprintf(fff,"¡Ü");
5068 else fprintf(fff,"¡¦");
5070 if (have_flag(flgs, TR_RES_CHAOS)) fprintf(fff,"¡Ü");
5071 else fprintf(fff,"¡¦");
5073 if (have_flag(flgs, TR_RES_DISEN)) fprintf(fff,"¡Ü");
5074 else fprintf(fff,"¡¦");
5078 if (have_flag(flgs, TR_RES_BLIND)) fprintf(fff,"¡Ü");
5079 else fprintf(fff,"¡¦");
5081 if (have_flag(flgs, TR_RES_FEAR)) fprintf(fff,"¡Ü");
5082 else fprintf(fff,"¡¦");
5084 if (have_flag(flgs, TR_RES_CONF)) fprintf(fff,"¡Ü");
5085 else fprintf(fff,"¡¦");
5087 if (have_flag(flgs, TR_FREE_ACT)) fprintf(fff,"¡Ü");
5088 else fprintf(fff,"¡¦");
5090 if (have_flag(flgs, TR_SEE_INVIS)) fprintf(fff,"¡Ü");
5091 else fprintf(fff,"¡¦");
5093 if (have_flag(flgs, TR_HOLD_LIFE)) fprintf(fff,"¡Ü");
5094 else fprintf(fff,"¡¦");
5096 if (have_flag(flgs, TR_TELEPATHY)) fprintf(fff,"¡Ü");
5097 else fprintf(fff,"¡¦");
5099 if (have_flag(flgs, TR_SLOW_DIGEST)) fprintf(fff,"¡Ü");
5100 else fprintf(fff,"¡¦");
5103 if (have_flag(flgs, TR_REGEN)) fprintf(fff,"¡Ü");
5104 else fprintf(fff,"¡¦");
5106 if (have_flag(flgs, TR_FEATHER)) fprintf(fff,"¡Ü");
5107 else fprintf(fff,"¡¦");
5109 if (have_flag(flgs, TR_IM_ACID)) fprintf(fff,"* ");
5110 else if (have_flag(flgs, TR_RES_ACID)) fprintf(fff,"+ ");
5111 else fprintf(fff,". ");
5113 if (have_flag(flgs, TR_IM_ELEC)) fprintf(fff,"* ");
5114 else if (have_flag(flgs, TR_RES_ELEC)) fprintf(fff,"+ ");
5115 else fprintf(fff,". ");
5117 if (have_flag(flgs, TR_IM_FIRE)) fprintf(fff,"* ");
5118 else if (have_flag(flgs, TR_RES_FIRE)) fprintf(fff,"+ ");
5119 else fprintf(fff,". ");
5121 if (have_flag(flgs, TR_IM_COLD)) fprintf(fff,"* ");
5122 else if (have_flag(flgs, TR_RES_COLD)) fprintf(fff,"+ ");
5123 else fprintf(fff,". ");
5125 if (have_flag(flgs, TR_RES_POIS)) fprintf(fff,"+ ");
5126 else fprintf(fff,". ");
5128 if (have_flag(flgs, TR_RES_LITE)) fprintf(fff,"+ ");
5129 else fprintf(fff,". ");
5131 if (have_flag(flgs, TR_RES_DARK)) fprintf(fff,"+ ");
5132 else fprintf(fff,". ");
5134 if (have_flag(flgs, TR_RES_SHARDS)) fprintf(fff,"+ ");
5135 else fprintf(fff,". ");
5137 if (have_flag(flgs, TR_RES_SOUND)) fprintf(fff,"+ ");
5138 else fprintf(fff,". ");
5140 if (have_flag(flgs, TR_RES_NETHER)) fprintf(fff,"+ ");
5141 else fprintf(fff,". ");
5143 if (have_flag(flgs, TR_RES_NEXUS)) fprintf(fff,"+ ");
5144 else fprintf(fff,". ");
5146 if (have_flag(flgs, TR_RES_CHAOS)) fprintf(fff,"+ ");
5147 else fprintf(fff,". ");
5149 if (have_flag(flgs, TR_RES_DISEN)) fprintf(fff,"+ ");
5150 else fprintf(fff,". ");
5154 if (have_flag(flgs, TR_RES_BLIND)) fprintf(fff,"+ ");
5155 else fprintf(fff,". ");
5157 if (have_flag(flgs, TR_RES_FEAR)) fprintf(fff,"+ ");
5158 else fprintf(fff,". ");
5160 if (have_flag(flgs, TR_RES_CONF)) fprintf(fff,"+ ");
5161 else fprintf(fff,". ");
5163 if (have_flag(flgs, TR_FREE_ACT)) fprintf(fff,"+ ");
5164 else fprintf(fff,". ");
5166 if (have_flag(flgs, TR_SEE_INVIS)) fprintf(fff,"+ ");
5167 else fprintf(fff,". ");
5169 if (have_flag(flgs, TR_HOLD_LIFE)) fprintf(fff,"+ ");
5170 else fprintf(fff,". ");
5172 if (have_flag(flgs, TR_TELEPATHY)) fprintf(fff,"+ ");
5173 else fprintf(fff,". ");
5175 if (have_flag(flgs, TR_SLOW_DIGEST)) fprintf(fff,"+ ");
5176 else fprintf(fff,". ");
5179 if (have_flag(flgs, TR_REGEN)) fprintf(fff,"+ ");
5180 else fprintf(fff,". ");
5182 if (have_flag(flgs, TR_FEATHER)) fprintf(fff,"+ ");
5183 else fprintf(fff,". ");
5191 fprintf(fff,"%s\n", inven_res_label);
5197 * Display *ID* ed weapons/armors's resistances
5199 static void do_cmd_knowledge_inven(void)
5204 char file_name[1024];
5215 /* Open a new file */
5216 fff = my_fopen_temp(file_name, 1024);
5219 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5221 msg_format("Failed to create temporally file %s.", file_name);
5226 fprintf(fff,"%s\n",inven_res_label);
5228 for (tval=TV_BOW; tval <= TV_RING; tval++){
5231 for (;j<9;j++) fprintf(fff, "\n");
5233 fprintf(fff,"%s\n",inven_res_label);
5237 strcpy(where, "Áõ");
5239 strcpy(where, "E ");
5241 for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
5243 o_ptr = &inventory[i];
5244 do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where);
5248 strcpy(where, "»ý");
5250 strcpy(where, "I ");
5252 for (i = 0; i < INVEN_PACK; i++)
5254 o_ptr = &inventory[i];
5255 do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where);
5259 /* Print all homes in the different towns */
5260 st_ptr = &town[1].store[STORE_HOME];
5262 strcpy(where, "²È");
5264 strcpy(where, "H ");
5267 /* Dump all available items */
5268 for (i = 0; i < st_ptr->stock_num; i++)
5270 o_ptr = &st_ptr->stock[i];
5271 do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where);
5275 /* Close the file */
5278 /* Display the file contents */
5280 show_file(TRUE, file_name, "*´ÕÄê*ºÑ¤ßÉð´ï/Ëɶñ¤ÎÂÑÀ¥ê¥¹¥È", 0, 0);
5282 show_file(TRUE, file_name, "Resistances of *identified* equipment", 0, 0);
5285 /* Remove the file */
5290 void do_cmd_save_screen_html_aux(char *filename, int message)
5294 byte a = 0, old_a = 0;
5308 cptr html_head[] = {
5309 "<html>\n<body text=\"#ffffff\" bgcolor=\"#000000\">\n",
5313 cptr html_foot[] = {
5315 "</body>\n</html>\n",
5321 Term_get_size(&wid, &hgt);
5323 /* File type is "TEXT" */
5324 FILE_TYPE(FILE_TYPE_TEXT);
5326 /* Append to the file */
5327 fff = my_fopen(filename, "w");
5333 msg_format("¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£", filename);
5335 msg_format("Failed to open file %s.", filename);
5343 /* Save the screen */
5347 /* Build the filename */
5348 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, "htmldump.prf");
5349 tmpfff = my_fopen(buf, "r");
5351 for (i = 0; html_head[i]; i++)
5352 fprintf(fff, html_head[i]);
5356 while (!my_fgets(tmpfff, buf, sizeof(buf))) {
5358 if (strncmp(buf, tags[0], strlen(tags[0])) == 0)
5362 if (strncmp(buf, tags[1], strlen(tags[1])) == 0)
5364 fprintf(fff, "%s\n", buf);
5369 /* Dump the screen */
5370 for (y = 0; y < hgt; y++)
5377 for (x = 0; x < wid - 1; x++)
5381 /* Get the attr/char */
5382 (void)(Term_what(x, y, &a, &c));
5386 case '&': cc = "&"; break;
5387 case '<': cc = "<"; break;
5388 case '>': cc = ">"; break;
5390 case 0x1f: c = '.'; break;
5391 case 0x7f: c = (a == 0x09) ? '%' : '#'; break;
5396 if ((y == 0 && x == 0) || a != old_a) {
5397 rv = angband_color_table[a][1];
5398 gv = angband_color_table[a][2];
5399 bv = angband_color_table[a][3];
5400 fprintf(fff, "%s<font color=\"#%02x%02x%02x\">",
5401 ((y == 0 && x == 0) ? "" : "</font>"), rv, gv, bv);
5405 fprintf(fff, "%s", cc);
5407 fprintf(fff, "%c", c);
5410 fprintf(fff, "</font>");
5413 for (i = 0; html_foot[i]; i++)
5414 fprintf(fff, html_foot[i]);
5419 while (!my_fgets(tmpfff, buf, sizeof(buf))) {
5421 if (strncmp(buf, tags[2], strlen(tags[2])) == 0)
5425 if (strncmp(buf, tags[3], strlen(tags[3])) == 0)
5427 fprintf(fff, "%s\n", buf);
5442 msg_print("²èÌÌ(µÇ°»£±Æ)¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
5444 msg_print("Screen dump saved.");
5449 /* Restore the screen */
5455 * Hack -- save a screen dump to a file
5457 static void do_cmd_save_screen_html(void)
5459 char buf[1024], tmp[256] = "screen.html";
5462 if (!get_string("¥Õ¥¡¥¤¥ë̾: ", tmp, 80))
5464 if (!get_string("File name: ", tmp, 80))
5468 /* Build the filename */
5469 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
5473 /* Hack -- drop permissions */
5476 do_cmd_save_screen_html_aux(buf, 1);
5478 /* Hack -- grab permissions */
5484 * Redefinable "save_screen" action
5486 void (*screendump_aux)(void) = NULL;
5490 * Hack -- save a screen dump to a file
5492 void do_cmd_save_screen(void)
5494 bool old_use_graphics = use_graphics;
5495 bool html_dump = FALSE;
5500 prt("µÇ°»£±Æ¤·¤Þ¤¹¤«¡© [(y)es/(h)tml/(n)o] ", 0, 0);
5502 prt("Save screen dump? [(y)es/(h)tml/(n)o] ", 0, 0);
5507 if (c == 'Y' || c == 'y')
5509 else if (c == 'H' || c == 'h')
5521 Term_get_size(&wid, &hgt);
5523 if (old_use_graphics)
5525 use_graphics = FALSE;
5528 /* Redraw everything */
5529 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
5531 /* Hack -- update */
5537 do_cmd_save_screen_html();
5541 /* Do we use a special screendump function ? */
5542 else if (screendump_aux)
5544 /* Dump the screen to a graphics file */
5545 (*screendump_aux)();
5547 else /* Dump the screen as text */
5559 /* Hack -- drop permissions */
5562 /* Build the filename */
5563 path_build(buf, sizeof(buf), ANGBAND_DIR_USER, "dump.txt");
5565 /* File type is "TEXT" */
5566 FILE_TYPE(FILE_TYPE_TEXT);
5568 /* Append to the file */
5569 fff = my_fopen(buf, "w");
5574 /* Hack -- grab permissions */
5577 msg_format("¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£", buf);
5579 msg_format("Failed to open file %s.", buf);
5586 /* Save the screen */
5590 /* Dump the screen */
5591 for (y = 0; y < hgt; y++)
5594 for (x = 0; x < wid - 1; x++)
5596 /* Get the attr/char */
5597 (void)(Term_what(x, y, &a, &c));
5607 fprintf(fff, "%s\n", buf);
5614 /* Dump the screen */
5615 for (y = 0; y < hgt; y++)
5618 for (x = 0; x < wid - 1; x++)
5620 /* Get the attr/char */
5621 (void)(Term_what(x, y, &a, &c));
5624 buf[x] = hack[a&0x0F];
5631 fprintf(fff, "%s\n", buf);
5641 /* Hack -- grab permissions */
5646 msg_print("²èÌÌ(µÇ°»£±Æ)¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
5648 msg_print("Screen dump saved.");
5654 /* Restore the screen */
5658 if (old_use_graphics)
5660 use_graphics = TRUE;
5663 /* Redraw everything */
5664 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
5666 /* Hack -- update */
5673 * Sorting hook -- Comp function -- see below
5675 * We use "u" to point to array of monster indexes,
5676 * and "v" to select the type of sorting to perform on "u".
5678 static bool ang_sort_art_comp(vptr u, vptr v, int a, int b)
5680 u16b *who = (u16b*)(u);
5682 u16b *why = (u16b*)(v);
5690 /* Sort by total kills */
5693 /* Extract total kills */
5694 z1 = a_info[w1].tval;
5695 z2 = a_info[w2].tval;
5697 /* Compare total kills */
5698 if (z1 < z2) return (TRUE);
5699 if (z1 > z2) return (FALSE);
5703 /* Sort by monster level */
5706 /* Extract levels */
5707 z1 = a_info[w1].sval;
5708 z2 = a_info[w2].sval;
5710 /* Compare levels */
5711 if (z1 < z2) return (TRUE);
5712 if (z1 > z2) return (FALSE);
5716 /* Sort by monster experience */
5719 /* Extract experience */
5720 z1 = a_info[w1].level;
5721 z2 = a_info[w2].level;
5723 /* Compare experience */
5724 if (z1 < z2) return (TRUE);
5725 if (z1 > z2) return (FALSE);
5729 /* Compare indexes */
5735 * Sorting hook -- Swap function -- see below
5737 * We use "u" to point to array of monster indexes,
5738 * and "v" to select the type of sorting to perform.
5740 static void ang_sort_art_swap(vptr u, vptr v, int a, int b)
5742 u16b *who = (u16b*)(u);
5754 * Check the status of "artifacts"
5756 static void do_cmd_knowledge_artifacts(void)
5758 int i, k, z, x, y, n = 0;
5764 char file_name[1024];
5766 char base_name[MAX_NLEN];
5770 /* Open a new file */
5771 fff = my_fopen_temp(file_name, 1024);
5775 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5777 msg_format("Failed to create temporary file %s.", file_name);
5783 /* Allocate the "who" array */
5784 C_MAKE(who, max_a_idx, s16b);
5786 /* Allocate the "okay" array */
5787 C_MAKE(okay, max_a_idx, bool);
5789 /* Scan the artifacts */
5790 for (k = 0; k < max_a_idx; k++)
5792 artifact_type *a_ptr = &a_info[k];
5797 /* Skip "empty" artifacts */
5798 if (!a_ptr->name) continue;
5800 /* Skip "uncreated" artifacts */
5801 if (!a_ptr->cur_num) continue;
5807 /* Check the dungeon */
5808 for (y = 0; y < cur_hgt; y++)
5810 for (x = 0; x < cur_wid; x++)
5812 cave_type *c_ptr = &cave[y][x];
5814 s16b this_o_idx, next_o_idx = 0;
5816 /* Scan all objects in the grid */
5817 for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
5821 /* Acquire object */
5822 o_ptr = &o_list[this_o_idx];
5824 /* Acquire next object */
5825 next_o_idx = o_ptr->next_o_idx;
5827 /* Ignore non-artifacts */
5828 if (!artifact_p(o_ptr)) continue;
5830 /* Ignore known items */
5831 if (object_known_p(o_ptr)) continue;
5833 /* Note the artifact */
5834 okay[o_ptr->name1] = FALSE;
5839 /* Check the inventory and equipment */
5840 for (i = 0; i < INVEN_TOTAL; i++)
5842 object_type *o_ptr = &inventory[i];
5844 /* Ignore non-objects */
5845 if (!o_ptr->k_idx) continue;
5847 /* Ignore non-artifacts */
5848 if (!artifact_p(o_ptr)) continue;
5850 /* Ignore known items */
5851 if (object_known_p(o_ptr)) continue;
5853 /* Note the artifact */
5854 okay[o_ptr->name1] = FALSE;
5857 for (k = 0; k < max_a_idx; k++)
5859 if (okay[k]) who[n++] = k;
5862 /* Select the sort method */
5863 ang_sort_comp = ang_sort_art_comp;
5864 ang_sort_swap = ang_sort_art_swap;
5866 /* Sort the array by dungeon depth of monsters */
5867 ang_sort(who, &why, n);
5869 /* Scan the artifacts */
5870 for (k = 0; k < n; k++)
5872 artifact_type *a_ptr = &a_info[who[k]];
5876 strcpy(base_name, "̤ÃΤÎÅÁÀâ¤Î¥¢¥¤¥Æ¥à");
5878 strcpy(base_name, "Unknown Artifact");
5882 /* Obtain the base object type */
5883 z = lookup_kind(a_ptr->tval, a_ptr->sval);
5891 /* Get local object */
5894 /* Create fake object */
5895 object_prep(q_ptr, z);
5897 /* Make it an artifact */
5898 q_ptr->name1 = (byte)who[k];
5900 /* Describe the artifact */
5901 object_desc_store(base_name, q_ptr, FALSE, 0);
5904 /* Hack -- Build the artifact name */
5906 fprintf(fff, " %s\n", base_name);
5908 fprintf(fff, " The %s\n", base_name);
5913 /* Free the "who" array */
5914 C_KILL(who, max_a_idx, s16b);
5916 /* Free the "okay" array */
5917 C_KILL(okay, max_a_idx, bool);
5919 /* Close the file */
5922 /* Display the file contents */
5924 show_file(TRUE, file_name, "´ûÃΤÎÅÁÀâ¤Î¥¢¥¤¥Æ¥à", 0, 0);
5926 show_file(TRUE, file_name, "Artifacts Seen", 0, 0);
5930 /* Remove the file */
5936 * Display known uniques
5938 static void do_cmd_knowledge_uniques(void)
5946 char file_name[1024];
5948 /* Open a new file */
5949 fff = my_fopen_temp(file_name, 1024);
5953 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5955 msg_format("Failed to create temporary file %s.", file_name);
5961 /* Allocate the "who" array */
5962 C_MAKE(who, max_r_idx, s16b);
5964 /* Scan the monsters */
5965 for (i = 1; i < max_r_idx; i++)
5967 monster_race *r_ptr = &r_info[i];
5969 /* Use that monster */
5970 if (r_ptr->name) who[n++] = i;
5973 /* Select the sort method */
5974 ang_sort_comp = ang_sort_comp_hook;
5975 ang_sort_swap = ang_sort_swap_hook;
5977 /* Sort the array by dungeon depth of monsters */
5978 ang_sort(who, &why, n);
5980 /* Scan the monster races */
5981 for (k = 0; k < n; k++)
5983 monster_race *r_ptr = &r_info[who[k]];
5985 /* Only print Uniques */
5986 if (r_ptr->flags1 & (RF1_UNIQUE))
5988 bool dead = (r_ptr->max_num == 0);
5992 /* Only display "known" uniques */
5993 if (dead || cheat_know || r_ptr->r_sights)
5995 /* Print a message */
5997 fprintf(fff, " %s¤Ï¤Þ¤ÀÀ¸¤¤Æ¤¤¤ë¡£\n",
5998 (r_name + r_ptr->name));
6000 fprintf(fff, " %s is alive\n",
6001 (r_name + r_ptr->name));
6008 /* Free the "who" array */
6009 C_KILL(who, max_r_idx, s16b);
6011 /* Close the file */
6014 /* Display the file contents */
6016 show_file(TRUE, file_name, "¤Þ¤ÀÀ¸¤¤Æ¤¤¤ë¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼", 0, 0);
6018 show_file(TRUE, file_name, "Alive Uniques", 0, 0);
6022 /* Remove the file */
6028 * Display dead uniques
6030 static void do_cmd_knowledge_uniques_dead(void)
6038 char file_name[1024];
6040 /* Open a new file */
6041 fff = my_fopen_temp(file_name, 1024);
6045 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6047 msg_format("Failed to create temporary file %s.", file_name);
6053 /* Allocate the "who" array */
6054 C_MAKE(who, max_r_idx, s16b);
6056 /* Scan the monsters */
6057 for (i = 1; i < max_r_idx; i++)
6059 monster_race *r_ptr = &r_info[i];
6061 /* Use that monster */
6062 if (r_ptr->name) who[n++] = i;
6065 /* Select the sort method */
6066 ang_sort_comp = ang_sort_comp_hook;
6067 ang_sort_swap = ang_sort_swap_hook;
6069 /* Sort the array by dungeon depth of monsters */
6070 ang_sort(who, &why, n);
6072 /* Scan the monster races */
6073 for (k = 0; k < n; k++)
6075 monster_race *r_ptr = &r_info[who[k]];
6077 /* Only print Uniques */
6078 if (r_ptr->flags1 & (RF1_UNIQUE))
6080 bool dead = (r_ptr->max_num == 0);
6082 if (!dead) continue;
6084 /* Only display "known" uniques */
6085 if (dead || cheat_know || r_ptr->r_sights)
6087 /* Print a message */
6089 fprintf(fff, " %s¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡£\n",
6090 (r_name + r_ptr->name));
6092 fprintf(fff, " %s is dead\n",
6093 (r_name + r_ptr->name));
6100 /* Free the "who" array */
6101 C_KILL(who, max_r_idx, s16b);
6103 /* Close the file */
6106 /* Display the file contents */
6108 show_file(TRUE, file_name, "Åݤ·¤¿¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼", 0, 0);
6110 show_file(TRUE, file_name, "Dead Uniques", 0, 0);
6114 /* Remove the file */
6120 * Display weapon-exp
6122 static void do_cmd_knowledge_weapon_exp(void)
6124 int i,j, num, shougou;
6128 char file_name[1024];
6131 /* Open a new file */
6132 fff = my_fopen_temp(file_name, 1024);
6135 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6137 msg_format("Failed to create temporary file %s.", file_name);
6143 for(i = 0; i < 5; i++)
6145 for (num = 0; num < 64; num++)
6147 for (j = 0; j < max_k_idx; j++)
6149 object_kind *k_ptr = &k_info[j];
6151 if ((k_ptr->tval == TV_SWORD-i) && (k_ptr->sval == num))
6153 if((k_ptr->tval == TV_BOW) && (k_ptr->sval == SV_CRIMSON)) continue;
6155 if(p_ptr->weapon_exp[4-i][num]<4000) shougou=0;
6156 else if(p_ptr->weapon_exp[4-i][num]<6000) shougou=1;
6157 else if(p_ptr->weapon_exp[4-i][num]<7000) shougou=2;
6158 else if(p_ptr->weapon_exp[4-i][num]<8000) shougou=3;
6161 fprintf(fff,"%-25s ",tmp);
6162 if (p_ptr->weapon_exp[4-i][num] >= s_info[p_ptr->pclass].w_max[4-i][num]) fprintf(fff,"!");
6163 else fprintf(fff," ");
6164 fprintf(fff,"%s",shougou_moji[shougou]);
6165 if (cheat_xtra) fprintf(fff," %d",p_ptr->weapon_exp[4-i][num]);
6173 /* Close the file */
6176 /* Display the file contents */
6178 show_file(TRUE, file_name, "Éð´ï¤Î·Ð¸³ÃÍ", 0, 0);
6180 show_file(TRUE, file_name, "Weapon Proficiency", 0, 0);
6184 /* Remove the file */
6192 static void do_cmd_knowledge_spell_exp(void)
6199 char file_name[1024];
6201 /* Open a new file */
6202 fff = my_fopen_temp(file_name, 1024);
6205 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6207 msg_format("Failed to create temporary file %s.", file_name);
6213 if(p_ptr->realm1 != REALM_NONE)
6216 fprintf(fff,"%s¤ÎËâË¡½ñ\n",realm_names[p_ptr->realm1]);
6218 fprintf(fff,"%s Spellbook\n",realm_names[p_ptr->realm1]);
6220 for (i = 0; i < 32; i++)
6222 if (!is_magic(p_ptr->realm1))
6224 s_ptr = &technic_info[p_ptr->realm1 - MIN_TECHNIC][i];
6228 s_ptr = &mp_ptr->info[p_ptr->realm1 - 1][i];
6230 if(s_ptr->slevel == 99) continue;
6231 if(p_ptr->spell_exp[i]<900) shougou=0;
6232 else if(p_ptr->spell_exp[i]<1200) shougou=1;
6233 else if(p_ptr->spell_exp[i]<1400) shougou=2;
6234 else if(p_ptr->spell_exp[i]<1600) shougou=3;
6236 fprintf(fff,"%-25s ",spell_names[technic2magic(p_ptr->realm1)-1][i]);
6237 if (p_ptr->realm1 == REALM_HISSATSU)
6238 fprintf(fff,"[--]");
6241 if (shougou == 4) fprintf(fff,"!");
6242 else fprintf(fff," ");
6243 fprintf(fff,"%s",shougou_moji[shougou]);
6245 if (cheat_xtra) fprintf(fff," %d",p_ptr->spell_exp[i]);
6250 if(p_ptr->realm2 != REALM_NONE)
6252 fprintf(fff,"\n%s Spellbook\n",realm_names[p_ptr->realm2]);
6253 for (i = 0; i < 32; i++)
6255 if (!is_magic(p_ptr->realm1))
6257 s_ptr = &technic_info[p_ptr->realm2 - MIN_TECHNIC][i];
6261 s_ptr = &mp_ptr->info[p_ptr->realm2 - 1][i];
6263 if(s_ptr->slevel == 99) continue;
6265 if(p_ptr->spell_exp[i+32]<900) shougou=0;
6266 else if(p_ptr->spell_exp[i+32]<1200) shougou=1;
6267 else if(p_ptr->spell_exp[i+32]<1400) shougou=2;
6269 fprintf(fff,"%-25s ",spell_names[technic2magic(p_ptr->realm2)-1][i]);
6270 if (shougou == 3) fprintf(fff,"!");
6271 else fprintf(fff," ");
6272 fprintf(fff,"%s",shougou_moji[shougou]);
6273 if (cheat_xtra) fprintf(fff," %d",p_ptr->spell_exp[i+32]);
6278 /* Close the file */
6281 /* Display the file contents */
6283 show_file(TRUE, file_name, "ËâË¡¤Î·Ð¸³ÃÍ", 0, 0);
6285 show_file(TRUE, file_name, "Spell Proficiency", 0, 0);
6289 /* Remove the file */
6297 static void do_cmd_knowledge_skill_exp(void)
6303 char file_name[1024];
6305 char skill_name[3][17]={"¥Þ¡¼¥·¥ã¥ë¥¢¡¼¥Ä", "ÆóÅáή ", "¾èÇÏ "};
6307 char skill_name[3][20]={"Martial Arts ", "Dual Wielding ", "Riding "};
6310 /* Open a new file */
6311 fff = my_fopen_temp(file_name, 1024);
6314 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6316 msg_format("Failed to create temporary file %s.", file_name);
6322 for (i = 0; i < 3; i++)
6324 if(i == GINOU_RIDING)
6326 if(p_ptr->skill_exp[i]<500) shougou=0;
6327 else if(p_ptr->skill_exp[i]<2000) shougou=1;
6328 else if(p_ptr->skill_exp[i]<5000) shougou=2;
6329 else if(p_ptr->skill_exp[i]<8000) shougou=3;
6334 if(p_ptr->skill_exp[i]<4000) shougou=0;
6335 else if(p_ptr->skill_exp[i]<6000) shougou=1;
6336 else if(p_ptr->skill_exp[i]<7000) shougou=2;
6337 else if(p_ptr->skill_exp[i]<8000) shougou=3;
6340 fprintf(fff,"%-20s ",skill_name[i]);
6341 if (p_ptr->skill_exp[i] == s_info[p_ptr->pclass].s_max[i]) fprintf(fff,"!");
6342 else fprintf(fff," ");
6343 fprintf(fff,"%s",shougou_moji[shougou]);
6344 if (cheat_xtra) fprintf(fff," %d",p_ptr->skill_exp[i]);
6348 /* Close the file */
6351 /* Display the file contents */
6353 show_file(TRUE, file_name, "µ»Ç½¤Î·Ð¸³ÃÍ", 0, 0);
6355 show_file(TRUE, file_name, "Miscellaneous Proficiency", 0, 0);
6359 /* Remove the file */
6365 * Pluralize a monster name
6367 void plural_aux(char *Name)
6369 int NameLen = strlen(Name);
6371 if (strstr(Name, "Disembodied hand"))
6373 strcpy(Name, "Disembodied hands that strangled people");
6375 else if (strstr(Name, "Colour out of space"))
6377 strcpy(Name, "Colours out of space");
6379 else if (strstr(Name, "stairway to hell"))
6381 strcpy(Name, "stairways to hell");
6383 else if (strstr(Name, "Dweller on the threshold"))
6385 strcpy(Name, "Dwellers on the threshold");
6387 else if (strstr(Name, " of "))
6389 cptr aider = strstr(Name, " of ");
6400 if (dummy[i-1] == 's')
6402 strcpy(&(dummy[i]), "es");
6407 strcpy(&(dummy[i]), "s");
6410 strcpy(&(dummy[i+1]), aider);
6411 strcpy(Name, dummy);
6413 else if (strstr(Name, "coins"))
6416 strcpy(dummy, "piles of ");
6417 strcat(dummy, Name);
6418 strcpy(Name, dummy);
6421 else if (strstr(Name, "Manes"))
6425 else if (streq(&(Name[NameLen - 2]), "ey"))
6427 strcpy(&(Name[NameLen - 2]), "eys");
6429 else if (Name[NameLen - 1] == 'y')
6431 strcpy(&(Name[NameLen - 1]), "ies");
6433 else if (streq(&(Name[NameLen - 4]), "ouse"))
6435 strcpy(&(Name[NameLen - 4]), "ice");
6437 else if (streq(&(Name[NameLen - 2]), "us"))
6439 strcpy(&(Name[NameLen - 2]), "i");
6441 else if (streq(&(Name[NameLen - 6]), "kelman"))
6443 strcpy(&(Name[NameLen - 6]), "kelmen");
6445 else if (streq(&(Name[NameLen - 8]), "wordsman"))
6447 strcpy(&(Name[NameLen - 8]), "wordsmen");
6449 else if (streq(&(Name[NameLen - 7]), "oodsman"))
6451 strcpy(&(Name[NameLen - 7]), "oodsmen");
6453 else if (streq(&(Name[NameLen - 7]), "eastman"))
6455 strcpy(&(Name[NameLen - 7]), "eastmen");
6457 else if (streq(&(Name[NameLen - 8]), "izardman"))
6459 strcpy(&(Name[NameLen - 8]), "izardmen");
6461 else if (streq(&(Name[NameLen - 5]), "geist"))
6463 strcpy(&(Name[NameLen - 5]), "geister");
6465 else if (streq(&(Name[NameLen - 2]), "ex"))
6467 strcpy(&(Name[NameLen - 2]), "ices");
6469 else if (streq(&(Name[NameLen - 2]), "lf"))
6471 strcpy(&(Name[NameLen - 2]), "lves");
6473 else if (suffix(Name, "ch") ||
6474 suffix(Name, "sh") ||
6475 suffix(Name, "nx") ||
6476 suffix(Name, "s") ||
6479 strcpy(&(Name[NameLen]), "es");
6483 strcpy(&(Name[NameLen]), "s");
6488 * Display current pets
6490 static void do_cmd_knowledge_pets(void)
6494 monster_type *m_ptr;
6496 int show_upkeep = 0;
6497 char file_name[1024];
6500 /* Open a new file */
6501 fff = my_fopen_temp(file_name, 1024);
6504 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6506 msg_format("Failed to create temporary file %s.", file_name);
6512 /* Process the monsters (backwards) */
6513 for (i = m_max - 1; i >= 1; i--)
6515 monster_race *r_ptr;
6516 /* Access the monster */
6519 /* Ignore "dead" monsters */
6520 if (!m_ptr->r_idx) continue;
6521 r_ptr = &r_info[m_ptr->r_idx];
6523 /* Calculate "upkeep" for pets */
6528 monster_desc(pet_name, m_ptr, 0x88);
6529 fprintf(fff, "%s (%s)", pet_name, look_mon_desc(i));
6530 if (p_ptr->riding == i)
6532 fprintf(fff, " ¾èÇÏÃæ");
6534 fprintf(fff, " Riding");
6540 show_upkeep = calculate_upkeep();
6542 fprintf(fff, "----------------------------------------------\n");
6544 fprintf(fff, " ¹ç·×: %d ɤ¤Î¥Ú¥Ã¥È\n", t_friends);
6545 fprintf(fff, " °Ý»ý¥³¥¹¥È: %d%% MP\n", show_upkeep);
6547 fprintf(fff, " Total: %d pet%s.\n",
6548 t_friends, (t_friends == 1 ? "" : "s"));
6549 fprintf(fff, " Upkeep: %d%% mana.\n", show_upkeep);
6554 /* Close the file */
6557 /* Display the file contents */
6559 show_file(TRUE, file_name, "¸½ºß¤Î¥Ú¥Ã¥È", 0, 0);
6561 show_file(TRUE, file_name, "Current Pets", 0, 0);
6565 /* Remove the file */
6573 * Note that the player ghosts are ignored. XXX XXX XXX
6575 static void do_cmd_knowledge_kill_count(void)
6583 char file_name[1024];
6588 /* Open a new file */
6589 fff = my_fopen_temp(file_name, 1024);
6593 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6595 msg_format("Failed to create temporary file %s.", file_name);
6601 /* Allocate the "who" array */
6602 C_MAKE(who, max_r_idx, s16b);
6605 /* Monsters slain */
6608 for (kk = 1; kk < max_r_idx; kk++)
6610 monster_race *r_ptr = &r_info[kk];
6612 if (r_ptr->flags1 & (RF1_UNIQUE))
6614 bool dead = (r_ptr->max_num == 0);
6623 s16b This = r_ptr->r_pkills;
6634 fprintf(fff,"¤¢¤Ê¤¿¤Ï¤Þ¤ÀŨ¤òÅݤ·¤Æ¤¤¤Ê¤¤¡£\n\n");
6636 fprintf(fff,"You have defeated no enemies yet.\n\n");
6639 else if (Total == 1)
6641 fprintf(fff,"¤¢¤Ê¤¿¤Ï°ìɤ¤ÎŨ¤òÅݤ·¤Æ¤¤¤ë¡£\n\n");
6643 fprintf(fff,"You have defeated one enemy.\n\n");
6648 fprintf(fff,"¤¢¤Ê¤¿¤Ï %lu ɤ¤ÎŨ¤òÅݤ·¤Æ¤¤¤ë¡£\n\n", Total);
6650 fprintf(fff,"You have defeated %lu enemies.\n\n", Total);
6657 /* Scan the monsters */
6658 for (i = 1; i < max_r_idx; i++)
6660 monster_race *r_ptr = &r_info[i];
6662 /* Use that monster */
6663 if (r_ptr->name) who[n++] = i;
6666 /* Select the sort method */
6667 ang_sort_comp = ang_sort_comp_hook;
6668 ang_sort_swap = ang_sort_swap_hook;
6670 /* Sort the array by dungeon depth of monsters */
6671 ang_sort(who, &why, n);
6673 /* Scan the monster races */
6674 for (k = 0; k < n; k++)
6676 monster_race *r_ptr = &r_info[who[k]];
6678 if (r_ptr->flags1 & (RF1_UNIQUE))
6680 bool dead = (r_ptr->max_num == 0);
6684 /* Print a message */
6685 fprintf(fff, " %s\n",
6686 (r_name + r_ptr->name));
6692 s16b This = r_ptr->r_pkills;
6697 /* p,t¤Ï¿Í¤È¿ô¤¨¤ë by ita*/
6698 if(strchr("pt",r_ptr->d_char))
6699 fprintf(fff, " %3d ¿Í¤Î %s\n", This, r_name + r_ptr->name);
6701 fprintf(fff, " %3d ɤ¤Î %s\n", This, r_name + r_ptr->name);
6705 if (strstr(r_name + r_ptr->name, "coins"))
6707 fprintf(fff, " 1 pile of %s\n", (r_name + r_ptr->name));
6711 fprintf(fff, " 1 %s\n", (r_name + r_ptr->name));
6717 strcpy(ToPlural, (r_name + r_ptr->name));
6718 plural_aux(ToPlural);
6719 fprintf(fff, " %d %s\n", This, ToPlural);
6729 fprintf(fff,"----------------------------------------------\n");
6731 fprintf(fff," ¹ç·×: %lu ɤ¤òÅݤ·¤¿¡£\n", Total);
6733 fprintf(fff," Total: %lu creature%s killed.\n",
6734 Total, (Total == 1 ? "" : "s"));
6738 /* Free the "who" array */
6739 C_KILL(who, max_r_idx, s16b);
6741 /* Close the file */
6744 /* Display the file contents */
6746 show_file(TRUE, file_name, "Åݤ·¤¿Å¨¤Î¿ô", 0, 0);
6748 show_file(TRUE, file_name, "Kill Count", 0, 0);
6752 /* Remove the file */
6758 * Display known objects
6760 static void do_cmd_knowledge_objects(void)
6766 char o_name[MAX_NLEN];
6768 char file_name[1024];
6771 /* Open a new file */
6772 fff = my_fopen_temp(file_name, 1024);
6775 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6777 msg_format("Failed to create temporary file %s.", file_name);
6783 /* Scan the object kinds */
6784 for (k = 1; k < max_k_idx; k++)
6786 object_kind *k_ptr = &k_info[k];
6788 /* Hack -- skip artifacts */
6789 if (k_ptr->gen_flags & (TRG_INSTA_ART)) continue;
6791 /* List known flavored objects */
6792 if (k_ptr->flavor && k_ptr->aware)
6795 object_type object_type_body;
6797 /* Get local object */
6798 i_ptr = &object_type_body;
6800 /* Create fake object */
6801 object_prep(i_ptr, k);
6803 /* Describe the object */
6804 object_desc_store(o_name, i_ptr, FALSE, 0);
6806 /* Print a message */
6807 fprintf(fff, " %s\n", o_name);
6811 /* Close the file */
6814 /* Display the file contents */
6816 show_file(TRUE, file_name, "´ûÃΤΥ¢¥¤¥Æ¥à", 0, 0);
6818 show_file(TRUE, file_name, "Known Objects", 0, 0);
6822 /* Remove the file */
6828 * List virtues & status
6831 static void do_cmd_knowledge_kubi(void)
6836 char file_name[1024];
6839 /* Open a new file */
6840 fff = my_fopen_temp(file_name, 1024);
6843 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6845 msg_format("Failed to create temporary file %s.", file_name);
6854 fprintf(fff, "º£Æü¤Î¥¿¡¼¥²¥Ã¥È : %s\n", (p_ptr->today_mon ? r_name + r_info[p_ptr->today_mon].name : "ÉÔÌÀ"));
6856 fprintf(fff, "¾Þ¶â¼ó¥ê¥¹¥È\n");
6858 fprintf(fff, "Today target : %s\n", (p_ptr->today_mon ? r_name + r_info[p_ptr->today_mon].name : "unknown"));
6860 fprintf(fff, "List of wanted monsters\n");
6862 for (i = 0; i < MAX_KUBI; i++)
6864 fprintf(fff,"%-40s ---- ",r_name + r_info[(kubi_r_idx[i] > 10000 ? kubi_r_idx[i] - 10000 : kubi_r_idx[i])].name);
6865 if (kubi_r_idx[i] > 10000)
6867 fprintf(fff, "ºÑ\n");
6869 fprintf(fff, "done\n");
6872 fprintf(fff, "$%d\n", 300 * (r_info[kubi_r_idx[i]].level + 1));
6876 /* Close the file */
6879 /* Display the file contents */
6881 show_file(TRUE, file_name, "¾Þ¶â¼ó¤Î°ìÍ÷", 0, 0);
6883 show_file(TRUE, file_name, "Wanted monsters", 0, 0);
6887 /* Remove the file */
6892 * List virtues & status
6895 static void do_cmd_knowledge_virtues(void)
6899 char file_name[1024];
6902 /* Open a new file */
6903 fff = my_fopen_temp(file_name, 1024);
6906 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6908 msg_format("Failed to create temporary file %s.", file_name);
6917 fprintf(fff, "¸½ºß¤Î°À : %s\n\n", your_alignment());
6919 fprintf(fff, "Your alighnment : %s\n\n", your_alignment());
6924 /* Close the file */
6927 /* Display the file contents */
6929 show_file(TRUE, file_name, "Ȭ¤Ä¤ÎÆÁ", 0, 0);
6931 show_file(TRUE, file_name, "Virtues", 0, 0);
6935 /* Remove the file */
6943 static void do_cmd_knowledge_dungeon(void)
6947 char file_name[1024];
6951 /* Open a new file */
6952 fff = my_fopen_temp(file_name, 1024);
6955 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6957 msg_format("Failed to create temporary file %s.", file_name);
6965 for (i = 1; i < max_d_idx; i++)
6969 if (!d_info[i].maxdepth) continue;
6970 if (!max_dlv[i]) continue;
6971 if (d_info[i].final_guardian)
6973 if (!r_info[d_info[i].final_guardian].max_num) seiha = TRUE;
6975 else if (max_dlv[i] == d_info[i].maxdepth) seiha = TRUE;
6977 fprintf(fff,"%c%-12s : %3d ³¬\n", seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]);
6979 fprintf(fff,"%c%-16s : level %3d\n", seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]);
6984 /* Close the file */
6987 /* Display the file contents */
6989 show_file(TRUE, file_name, "º£¤Þ¤Ç¤ËÆþ¤Ã¤¿¥À¥ó¥¸¥ç¥ó", 0, 0);
6991 show_file(TRUE, file_name, "Dungeon", 0, 0);
6995 /* Remove the file */
7000 * List virtues & status
7003 static void do_cmd_knowledge_stat(void)
7007 char file_name[1024];
7010 /* Open a new file */
7011 fff = my_fopen_temp(file_name, 1024);
7014 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
7016 msg_format("Failed to create temporary file %s.", file_name);
7024 percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) /
7025 (2 * p_ptr->hitdie +
7026 ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1))));
7029 if (p_ptr->knowledge & KNOW_HPRATE) fprintf(fff, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : %d/100\n\n", percent);
7030 else fprintf(fff, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : ???\n\n");
7031 fprintf(fff, "ǽÎϤκÇÂçÃÍ\n\n");
7033 if (p_ptr->knowledge & KNOW_HPRATE) fprintf(fff, "Your current Life Rating is %d/100.\n\n", percent);
7034 else fprintf(fff, "Your current Life Rating is ???.\n\n");
7035 fprintf(fff, "Limits of maximum stats\n\n");
7037 for (v_nr = 0; v_nr < 6; v_nr++)
7039 if ((p_ptr->knowledge & KNOW_STAT) || p_ptr->stat_max[v_nr] == p_ptr->stat_max_max[v_nr]) fprintf(fff, "%s 18/%d\n", stat_names[v_nr], p_ptr->stat_max_max[v_nr]-18);
7040 else fprintf(fff, "%s ???\n", stat_names[v_nr]);
7046 /* Close the file */
7049 /* Display the file contents */
7051 show_file(TRUE, file_name, "¼«Ê¬¤Ë´Ø¤¹¤ë¾ðÊó", 0, 0);
7053 show_file(TRUE, file_name, "HP-rate & Max stat", 0, 0);
7057 /* Remove the file */
7062 * Print quest status of all active quests
7064 static void do_cmd_knowledge_quests(void)
7067 char file_name[1024];
7069 char rand_tmp_str[120] = "\0";
7071 monster_race *r_ptr;
7073 int rand_level = 100;
7076 /* Open a new file */
7077 fff = my_fopen_temp(file_name, 1024);
7080 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
7082 msg_format("Failed to create temporary file %s.", file_name);
7089 fprintf(fff, "¡Ô¿ë¹ÔÃæ¤Î¥¯¥¨¥¹¥È¡Õ\n");
7091 fprintf(fff, "< Current Quest >\n");
7094 for (i = 1; i < max_quests; i++)
7096 if (quest[i].status == QUEST_STATUS_TAKEN || quest[i].status == QUEST_STATUS_COMPLETED)
7101 /* Clear the text */
7102 for (j = 0; j < 10; j++)
7104 quest_text[j][0] = '\0';
7107 quest_text_line = 0;
7109 /* Set the quest number temporary */
7110 old_quest = p_ptr->inside_quest;
7111 p_ptr->inside_quest = i;
7113 /* Get the quest text */
7114 init_flags = INIT_SHOW_TEXT;
7116 process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
7118 /* Reset the old quest number */
7119 p_ptr->inside_quest = old_quest;
7121 /* No info from "silent" quests */
7122 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
7126 if (quest[i].type != QUEST_TYPE_RANDOM)
7128 char note[80] = "\0";
7130 if (quest[i].status == QUEST_STATUS_TAKEN)
7132 if (quest[i].type == QUEST_TYPE_KILL_LEVEL || quest[i].type == QUEST_TYPE_KILL_ANY_LEVEL)
7134 r_ptr = &r_info[quest[i].r_idx];
7135 strcpy(name, r_name + r_ptr->name);
7136 if (quest[i].max_num > 1)
7139 sprintf(note," - %d ÂΤÎ%s¤òÅݤ¹¡£(¤¢¤È %d ÂÎ)",quest[i].max_num, name, quest[i].max_num-quest[i].cur_num);
7142 sprintf(note," - kill %d %s, have killed %d.",quest[i].max_num, name, quest[i].cur_num);
7147 sprintf(note," - %s¤òÅݤ¹¡£",name);
7149 sprintf(note," - kill %s.",name);
7152 else if (quest[i].type == QUEST_TYPE_KILL_NUMBER)
7155 sprintf(note," - %d ÂΤΥâ¥ó¥¹¥¿¡¼¤òÅݤ¹¡£(¤¢¤È %d ÂÎ)",quest[i].max_num, quest[i].max_num-quest[i].cur_num);
7157 sprintf(note," - Kill %d monsters, have killed %d.",quest[i].max_num, quest[i].cur_num);
7160 else if (quest[i].type == QUEST_TYPE_FIND_ARTIFACT)
7162 strcpy(name, a_name + a_info[quest[i].k_idx].name);
7164 sprintf(note," - %s¤ò¸«¤Ä¤±½Ð¤¹¡£", name);
7166 sprintf(note," - Find out %s.", name);
7169 else if (quest[i].type == QUEST_TYPE_FIND_EXIT)
7171 sprintf(note," - õº÷¤¹¤ë¡£");
7173 sprintf(note," - Search.");
7175 else if (quest[i].type == QUEST_TYPE_KILL_ALL)
7177 sprintf(note," - Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ¹¡£");
7179 sprintf(note," - Kill all monsters.");
7183 /* Print the quest info */
7185 sprintf(tmp_str, "%s (´í¸±ÅÙ:%d³¬ÁêÅö)%s\n",
7187 sprintf(tmp_str, "%s (Danger level: %d)%s\n",
7190 quest[i].name, quest[i].level, note);
7192 fprintf(fff, tmp_str);
7194 if (quest[i].status == QUEST_STATUS_COMPLETED)
7197 sprintf(tmp_str, " ¥¯¥¨¥¹¥ÈãÀ® - ¤Þ¤ÀÊó½·¤ò¼õ¤±¤È¤Ã¤Æ¤Ê¤¤¡£\n");
7199 sprintf(tmp_str, " Quest Completed - Unrewarded\n");
7203 fprintf(fff, tmp_str);
7209 while (quest_text[j][0] && j < 10)
7211 fprintf(fff, " %s\n", quest_text[j]);
7216 else if ((quest[i].type == QUEST_TYPE_RANDOM) &&
7217 (quest[i].level < rand_level))
7220 rand_level = quest[i].level;
7222 if (max_dlv[DUNGEON_ANGBAND] >= rand_level)
7224 /* Print the quest info */
7225 r_ptr = &r_info[quest[i].r_idx];
7226 strcpy(name, r_name + r_ptr->name);
7228 if (quest[i].max_num > 1)
7231 sprintf(rand_tmp_str,"%s (%d ³¬) - %d ÂΤÎ%s¤òÅݤ¹¡£(¤¢¤È %d ÂÎ)\n",
7232 quest[i].name, quest[i].level,
7233 quest[i].max_num, name, quest[i].max_num-quest[i].cur_num);
7237 sprintf(rand_tmp_str,"%s (Dungeon level: %d)\n Kill %d %s, have killed %d.\n",
7238 quest[i].name, quest[i].level,
7239 quest[i].max_num, name, quest[i].cur_num);
7246 sprintf(rand_tmp_str,"%s (%d ³¬) - %s¤òÅݤ¹¡£\n",
7248 sprintf(rand_tmp_str,"%s (Dungeon level: %d)\n Kill %s.\n",
7251 quest[i].name, quest[i].level, name);
7258 /* Print the current random quest */
7259 if (rand_tmp_str[0]) fprintf(fff, rand_tmp_str);
7262 if (!total) fprintf(fff, "¤Ê¤·\n");
7264 if (!total) fprintf(fff, "Nothing.\n");
7268 fprintf(fff, "\n¡ÔãÀ®¤·¤¿¥¯¥¨¥¹¥È¡Õ\n");
7270 fprintf(fff, "\n< Completed Quest >\n");
7273 for (i = 1; i < max_quests; i++)
7275 if (quest[i].status == QUEST_STATUS_FINISHED)
7277 if (i < MIN_RANDOM_QUEST)
7281 /* Set the quest number temporary */
7282 old_quest = p_ptr->inside_quest;
7283 p_ptr->inside_quest = i;
7286 init_flags = INIT_ASSIGN;
7288 process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
7290 /* Reset the old quest number */
7291 p_ptr->inside_quest = old_quest;
7293 /* No info from "silent" quests */
7294 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
7299 if ((i >= MIN_RANDOM_QUEST) && quest[i].r_idx)
7301 /* Print the quest info */
7303 if (quest[i].complev == 0)
7307 "%s (%d³¬) - ÉÔÀᄀ\n",
7309 "%s (Dungeon level: %d) - (Cancelled)\n",
7311 r_name+r_info[quest[i].r_idx].name,
7318 "%s (%d³¬) - ¥ì¥Ù¥ë%d\n",
7320 "%s (Dungeon level: %d) - level %d\n",
7322 r_name+r_info[quest[i].r_idx].name,
7329 /* Print the quest info */
7331 sprintf(tmp_str, "%s (´í¸±ÅÙ:%d³¬ÁêÅö) - ¥ì¥Ù¥ë%d\n",
7333 sprintf(tmp_str, "%s (Danger level: %d) - level %d\n",
7336 quest[i].name, quest[i].level, quest[i].complev);
7339 fprintf(fff, tmp_str);
7343 if (!total) fprintf(fff, "¤Ê¤·\n");
7345 if (!total) fprintf(fff, "Nothing.\n");
7349 fprintf(fff, "\n¡Ô¼ºÇÔ¤·¤¿¥¯¥¨¥¹¥È¡Õ\n");
7351 fprintf(fff, "\n< Failed Quest >\n");
7354 for (i = 1; i < max_quests; i++)
7356 if ((quest[i].status == QUEST_STATUS_FAILED_DONE) || (quest[i].status == QUEST_STATUS_FAILED))
7358 if (i < MIN_RANDOM_QUEST)
7362 /* Set the quest number temporary */
7363 old_quest = p_ptr->inside_quest;
7364 p_ptr->inside_quest = i;
7366 /* Get the quest text */
7367 init_flags = INIT_ASSIGN;
7369 process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
7371 /* Reset the old quest number */
7372 p_ptr->inside_quest = old_quest;
7374 /* No info from "silent" quests */
7375 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
7380 if ((i >= MIN_RANDOM_QUEST) && quest[i].r_idx)
7382 /* Print the quest info */
7384 sprintf(tmp_str, "%s (%d³¬) - ¥ì¥Ù¥ë%d\n",
7386 sprintf(tmp_str, "%s (Dungeon level: %d) - level %d\n",
7389 r_name+r_info[quest[i].r_idx].name, quest[i].level, quest[i].complev);
7393 /* Print the quest info */
7395 sprintf(tmp_str, "%s (´í¸±ÅÙ:%d³¬ÁêÅö) - ¥ì¥Ù¥ë%d\n",
7397 sprintf(tmp_str, "%s (Danger level: %d) - level %d\n",
7400 quest[i].name, quest[i].level, quest[i].complev);
7402 fprintf(fff, tmp_str);
7406 if (!total) fprintf(fff, "¤Ê¤·\n");
7408 if (!total) fprintf(fff, "Nothing.\n");
7411 if (p_ptr->wizard) {
7413 fprintf(fff, "\n¡Ô»Ä¤ê¤Î¥é¥ó¥À¥à¥¯¥¨¥¹¥È¡Õ\n");
7415 fprintf(fff, "\n< Remaining Random Quest >\n");
7418 for (i = 1; i < max_quests; i++)
7420 /* No info from "silent" quests */
7421 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
7423 if ((quest[i].type == QUEST_TYPE_RANDOM) && (quest[i].status == QUEST_STATUS_TAKEN))
7427 /* Print the quest info */
7429 sprintf(tmp_str, "%s (%d³¬, %s)\n",
7431 sprintf(tmp_str, "%s (%d, %s)\n",
7434 quest[i].name, quest[i].level, r_name+r_info[quest[i].r_idx].name);
7435 fprintf(fff, tmp_str);
7439 if (!total) fprintf(fff, "¤Ê¤·\n");
7441 if (!total) fprintf(fff, "Nothing.\n");
7445 /* Close the file */
7448 /* Display the file contents */
7450 show_file(TRUE, file_name, "¥¯¥¨¥¹¥ÈãÀ®¾õ¶·", 0, 0);
7452 show_file(TRUE, file_name, "Quest status", 0, 0);
7456 /* Remove the file */
7466 static void do_cmd_knowledge_home(void)
7471 char file_name[1024];
7473 char o_name[MAX_NLEN];
7476 process_dungeon_file("w_info_j.txt", 0, 0, max_wild_y, max_wild_x);
7478 /* Open a new file */
7479 fff = my_fopen_temp(file_name, 1024);
7482 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
7484 msg_format("Failed to create temporary file %s.", file_name);
7492 /* Print all homes in the different towns */
7493 st_ptr = &town[1].store[STORE_HOME];
7495 /* Home -- if anything there */
7496 if (st_ptr->stock_num)
7498 /* Header with name of the town */
7500 fprintf(fff, " [ ²æ¤¬²È¤Î¥¢¥¤¥Æ¥à ]\n");
7502 fprintf(fff, " [Home Inventory]\n");
7506 /* Dump all available items */
7507 for (i = 0; i < st_ptr->stock_num; i++)
7510 if ((i % 12) == 0) fprintf(fff, "\n ( %d ¥Ú¡¼¥¸ )\n", x++);
7511 object_desc(o_name, &st_ptr->stock[i], TRUE, 3);
7512 if (strlen(o_name) <= 80-3)
7514 fprintf(fff, "%c%s %s\n", I2A(i%12), paren, o_name);
7520 for (n = 0, t = o_name; n < 80-3; n++, t++)
7521 if(iskanji(*t)) {t++; n++;}
7522 if (n == 81-3) n = 79-3; /* ºÇ¸å¤¬´Á»úȾʬ */
7524 fprintf(fff, "%c%s %.*s\n", I2A(i%12), paren, n, o_name);
7525 fprintf(fff, " %.77s\n", o_name+n);
7528 object_desc(o_name, &st_ptr->stock[i], TRUE, 3);
7529 fprintf(fff, "%c%s %s\n", I2A(i%12), paren, o_name);
7534 /* Add an empty line */
7535 fprintf(fff, "\n\n");
7539 /* Close the file */
7542 /* Display the file contents */
7544 show_file(TRUE, file_name, "²æ¤¬²È¤Î¥¢¥¤¥Æ¥à", 0, 0);
7546 show_file(TRUE, file_name, "Home Inventory", 0, 0);
7550 /* Remove the file */
7556 * Check the status of "autopick"
7558 static void do_cmd_knowledge_autopick(void)
7562 char file_name[1024];
7564 /* Open a new file */
7565 fff = my_fopen_temp(file_name, 1024);
7570 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
7572 msg_format("Failed to create temporary file %s.", file_name);
7581 fprintf(fff, "¼«Æ°Ç˲õ/½¦¤¤¤Ë¤Ï²¿¤âÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
7583 fprintf(fff, "No preference for auto picker/destroyer.");
7589 fprintf(fff, " ¼«Æ°½¦¤¤/Ç˲õ¤Ë¤Ï¸½ºß %d¹ÔÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n\n", max_autopick);
7591 fprintf(fff, " There are %d registered lines for auto picker/destroyer.\n\n", max_autopick);
7595 for (k = 0; k < max_autopick; k++)
7598 byte act = autopick_list[k].action;
7599 if (act & DONT_AUTOPICK)
7607 else if (act & DO_AUTODESTROY)
7615 else if (act & DO_AUTOPICK)
7623 else if (act & DO_QUERY_AUTOPICK)
7632 if (act & DO_DISPLAY)
7633 fprintf(fff, "%11s", format("[%s]", tmp));
7635 fprintf(fff, "%11s", format("(%s)", tmp));
7637 tmp = autopick_line_from_entry(&autopick_list[k]);
7638 fprintf(fff, " %s", tmp);
7642 /* Close the file */
7644 /* Display the file contents */
7646 show_file(TRUE, file_name, "¼«Æ°½¦¤¤/Ç˲õ ÀßÄê¥ê¥¹¥È", 0, 0);
7648 show_file(TRUE, file_name, "Auto-picker/Destroyer", 0, 0);
7651 /* Remove the file */
7657 * Interact with "knowledge"
7659 void do_cmd_knowledge(void)
7662 /* File type is "TEXT" */
7663 FILE_TYPE(FILE_TYPE_TEXT);
7664 /* Save the screen */
7666 /* Interact until done */
7671 /* Ask for a choice */
7673 prt(format("%d/2 ¥Ú¡¼¥¸", (p+1)), 2, 65);
7674 prt("¸½ºß¤ÎÃ챤ò³Îǧ¤¹¤ë", 3, 0);
7676 prt(format("page %d/2", (p+1)), 2, 65);
7677 prt("Display current knowledge", 3, 0);
7680 /* Give some choices */
7683 prt("(1) ´ûÃΤÎÅÁÀâ¤Î¥¢¥¤¥Æ¥à ¤Î°ìÍ÷", 6, 5);
7684 prt("(2) ´ûÃΤΥ¢¥¤¥Æ¥à ¤Î°ìÍ÷", 7, 5);
7685 prt("(3) ´ûÃΤÎÀ¸¤¤Æ¤¤¤ë¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼ ¤Î°ìÍ÷", 8, 5);
7686 prt("(4) Åݤ·¤¿¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼ ¤Î°ìÍ÷", 9, 5);
7687 prt("(5) Åݤ·¤¿Å¨¤Î¿ô ¤Î°ìÍ÷", 10, 5);
7688 prt("(6) ¾Þ¶â¼ó ¤Î°ìÍ÷", 11, 5);
7689 prt("(7) ¸½ºß¤Î¥Ú¥Ã¥È ¤Î°ìÍ÷", 12, 5);
7690 prt("(8) ²æ¤¬²È¤Î¥¢¥¤¥Æ¥à ¤Î°ìÍ÷", 13, 5);
7691 prt("(9) *´ÕÄê*ºÑ¤ßÁõÈ÷¤ÎÂÑÀ ¤Î°ìÍ÷", 14, 5);
7693 prt("(a) ¼«Ê¬¤Ë´Ø¤¹¤ë¾ðÊó ¤Î°ìÍ÷", 6, 5);
7694 prt("(b) ÆÍÁ³ÊÑ°Û ¤Î°ìÍ÷", 7, 5);
7695 prt("(c) Éð´ï¤Î·Ð¸³ÃÍ ¤Î°ìÍ÷", 8, 5);
7696 prt("(d) ËâË¡¤Î·Ð¸³ÃÍ ¤Î°ìÍ÷", 9, 5);
7697 prt("(e) µ»Ç½¤Î·Ð¸³ÃÍ ¤Î°ìÍ÷", 10, 5);
7698 prt("(f) ¥×¥ì¥¤¥ä¡¼¤ÎÆÁ ¤Î°ìÍ÷", 11, 5);
7699 prt("(g) Æþ¤Ã¤¿¥À¥ó¥¸¥ç¥ó ¤Î°ìÍ÷", 12, 5);
7700 prt("(h) ¼Â¹ÔÃæ¤Î¥¯¥¨¥¹¥È ¤Î°ìÍ÷", 13, 5);
7701 prt("(i) ¸½ºß¤Î¼«Æ°½¦¤¤/Ç˲õÀßÄê ¤Î°ìÍ÷", 14, 5);
7705 prt("(1) Display known artifacts", 6, 5);
7706 prt("(2) Display known objects", 7, 5);
7707 prt("(3) Display remaining uniques", 8, 5);
7708 prt("(4) Display dead uniques", 9, 5);
7709 prt("(5) Display kill count", 10, 5);
7710 prt("(6) Display wanted monsters", 11, 5);
7711 prt("(7) Display current pets", 12, 5);
7712 prt("(8) Display home inventory", 13, 5);
7713 prt("(9) Display *identified* equip.", 14, 5);
7715 prt("(a) Display about yourself", 6, 5);
7716 prt("(b) Display mutations", 7, 5);
7717 prt("(c) Display weapon proficiency", 8, 5);
7718 prt("(d) Display spell proficiency", 9, 5);
7719 prt("(e) Display misc. proficiency", 10, 5);
7720 prt("(f) Display virtues", 11, 5);
7721 prt("(g) Display dungeons", 12, 5);
7722 prt("(h) Display current quests", 13, 5);
7723 prt("(i) Display auto pick/destroy", 14, 5);
7728 prt("-³¤¯-", 16, 8);
7729 prt("ESC) È´¤±¤ë", 21, 1);
7730 prt("SPACE) ¼¡¥Ú¡¼¥¸", 21, 30);
7731 /*prt("-) Á°¥Ú¡¼¥¸", 21, 60);*/
7732 prt("¥³¥Þ¥ó¥É:", 20, 0);
7734 prt("-more-", 16, 8);
7735 prt("ESC) Exit menu", 21, 1);
7736 prt("SPACE) Next page", 21, 30);
7737 /*prt("-) Previous page", 21, 60);*/
7738 prt("Command: ", 20, 0);
7744 if (i == ESCAPE) break;
7747 case ' ': /* Page change */
7751 case '1': /* Artifacts */
7752 do_cmd_knowledge_artifacts();
7754 case '2': /* Objects */
7755 do_cmd_knowledge_objects();
7757 case '3': /* Uniques */
7758 do_cmd_knowledge_uniques();
7760 case '4': /* Uniques */
7761 do_cmd_knowledge_uniques_dead();
7763 case '5': /* Kill count */
7764 do_cmd_knowledge_kill_count();
7766 case '6': /* wanted */
7767 do_cmd_knowledge_kubi();
7769 case '7': /* Pets */
7770 do_cmd_knowledge_pets();
7772 case '8': /* Home */
7773 do_cmd_knowledge_home();
7775 case '9': /* Resist list */
7776 do_cmd_knowledge_inven();
7779 case 'a': /* Max stat */
7780 do_cmd_knowledge_stat();
7782 case 'b': /* Mutations */
7783 do_cmd_knowledge_mutations();
7785 case 'c': /* weapon-exp */
7786 do_cmd_knowledge_weapon_exp();
7788 case 'd': /* spell-exp */
7789 do_cmd_knowledge_spell_exp();
7791 case 'e': /* skill-exp */
7792 do_cmd_knowledge_skill_exp();
7794 case 'f': /* Virtues */
7795 do_cmd_knowledge_virtues();
7797 case 'g': /* Dungeon */
7798 do_cmd_knowledge_dungeon();
7800 case 'h': /* Quests */
7801 do_cmd_knowledge_quests();
7803 case 'i': /* Autopick */
7804 do_cmd_knowledge_autopick();
7806 default: /* Unknown option */
7809 /* Flush messages */
7812 /* Restore the screen */
7818 * Check on the status of an active quest
7820 void do_cmd_checkquest(void)
7822 /* File type is "TEXT" */
7823 FILE_TYPE(FILE_TYPE_TEXT);
7825 /* Save the screen */
7829 do_cmd_knowledge_quests();
7831 /* Restore the screen */
7837 * Display the time and date
7839 void do_cmd_time(void)
7841 int day, hour, min, full, start, end, num;
7848 extract_day_hour_min(&day, &hour, &min);
7850 full = hour * 100 + min;
7858 strcpy(desc, "ÊѤʻþ¹ï¤À¡£");
7860 strcpy(desc, "It is a strange time.");
7866 msg_format("%d ÆüÌÜ,»þ¹ï¤Ï%d:%02d %s¤Ç¤¹¡£",
7868 msg_format("This is day %d. The time is %d:%02d %s.",
7871 day, (hour % 12 == 0) ? 12 : (hour % 12),
7872 min, (hour < 12) ? "AM" : "PM");
7875 if (!randint0(10) || p_ptr->image)
7878 path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "timefun_j.txt");
7880 path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "timefun.txt");
7887 path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "timenorm_j.txt");
7889 path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, "timenorm.txt");
7894 /* Open this file */
7895 fff = my_fopen(buf, "rt");
7900 /* Find this time */
7901 while (!my_fgets(fff, buf, sizeof(buf)))
7903 /* Ignore comments */
7904 if (!buf[0] || (buf[0] == '#')) continue;
7906 /* Ignore invalid lines */
7907 if (buf[1] != ':') continue;
7909 /* Process 'Start' */
7912 /* Extract the starting time */
7913 start = atoi(buf + 2);
7915 /* Assume valid for an hour */
7925 /* Extract the ending time */
7926 end = atoi(buf + 2);
7932 /* Ignore incorrect range */
7933 if ((start > full) || (full > end)) continue;
7935 /* Process 'Description' */
7940 /* Apply the randomizer */
7941 if (!randint0(num)) strcpy(desc, buf + 2);
7951 /* Close the file */