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, 1024))
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, 1024))
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, 1024, 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);
589 fprintf(fff, " %2d:%02d %20s ¥ì¥Ù¥ë¤¬%d¤Ë¾å¤¬¤Ã¤¿¡£\n", hour, min, note_level, num);
591 fprintf(fff, " %2d:%02d %20s reach player level %d.\n", hour, min, note_level, num);
595 case NIKKI_GAMESTART:
597 time_t ct = time((time_t*)0);
601 fprintf(fff, "%s %s",note, ctime(&ct));
604 fprintf(fff, " %2d:%02d %20s %s %s",hour, min, note_level, note, ctime(&ct));
607 case NIKKI_NAMED_PET:
609 fprintf(fff, " %2d:%02d %20s ", hour, min, note_level);
614 fprintf(fff, "%s¤òι¤Îͧ¤Ë¤¹¤ë¤³¤È¤Ë·è¤á¤¿¡£\n", note);
616 fprintf(fff, "decide to travel together with %s.\n", note);
621 fprintf(fff, "%s¤Î̾Á°¤ò¾Ã¤·¤¿¡£\n", note);
623 fprintf(fff, "unname %s.\n", note);
628 fprintf(fff, "%s¤ò²òÊü¤·¤¿¡£\n", note);
630 fprintf(fff, "dismiss %s.\n", note);
635 fprintf(fff, "%s¤¬»à¤ó¤Ç¤·¤Þ¤Ã¤¿¡£\n", note);
637 fprintf(fff, "%s die.\n", note);
642 fprintf(fff, "%s¤ò¤ª¤¤¤ÆÊ̤ΥޥåפذÜÆ°¤·¤¿¡£\n", note);
644 fprintf(fff, "move to other map leaving %s behind.\n", note);
649 fprintf(fff, "%s¤È¤Ï¤°¤ì¤Æ¤·¤Þ¤Ã¤¿¡£\n", note);
651 fprintf(fff, "lose sight of %s.\n", note);
656 fprintf(fff, "%s¤¬*Ç˲õ*¤Ë¤è¤Ã¤Æ¾Ã¤¨µî¤Ã¤¿¡£\n", note);
658 fprintf(fff, "%s is made disappeared by *destruction*.\n", note);
663 fprintf(fff, "%s¤¬´äÀФ˲¡¤·ÄÙ¤µ¤ì¤¿¡£\n", note);
665 fprintf(fff, "%s is crushed by falling rocks.\n", note);
680 /* Hack -- grab permissions */
683 if (do_level) write_level = FALSE;
689 #define MAX_SUBTITLE (sizeof(subtitle)/sizeof(subtitle[0]))
691 static void do_cmd_disp_nikki(void)
693 char nikki_title[256];
698 static const char subtitle[][30] = {"ºÇ¶¯¤ÎÆùÂΤòµá¤á¤Æ",
699 "¿ÍÀ¸¤½¤ì¤Ï¤Ï¤«¤Ê¤¤",
710 "Åݤ¹¤Ù¤Å¨¤Ï¥²¡û¥Ä",
711 "¤ó¡Á¡©Ê¹¤³¤¨¤ó¤Ê¤¡",
712 "¥ª¥ì¤Î̾¤ò¸À¤Ã¤Æ¤ß¤í",
713 "Ƭ¤¬ÊѤˤʤäÁ¤ã¤Ã¤¿",
718 "¤³¤ó¤Ê¤â¤ó¤¸¤ã¤Ê¤¤",
727 "ºÇ¹â¤ÎƬǾ¤òµá¤á¤Æ"};
729 static const char subtitle[][51] ={"Quest of The World's Toughest Body",
730 "Attack is the best form of defence.",
732 "An unexpected windfall",
733 "A drowning man will catch at a straw",
734 "Don't count your chickens before they are hatched.",
735 "It is no use crying over spilt milk.",
736 "Seeing is believing.",
737 "Strike the iron while it is hot.",
738 "I don't care what follows.",
739 "To dig a well to put out a house on fire.",
740 "Tomorrow is another day.",
741 "Easy come, easy go.",
742 "The more haste, the less speed.",
743 "Where there is life, there is hope.",
744 "There is no royal road to *WINNER*.",
745 "Danger past, God forgotten.",
746 "The best thing to do now is to run away.",
747 "Life is but an empty dream.",
748 "Dead men tell no tales.",
749 "A book that remains shut is but a block.",
750 "Misfortunes never come singly.",
751 "A little knowledge is a dangerous thing.",
752 "History repeats itself.",
753 "*WINNER* was not built in a day.",
754 "Ignorance is bliss.",
755 "To lose is to win?",
756 "No medicine can cure folly.",
757 "All good things come to an end.",
758 "M$ Empire strikes back.",
759 "To see is to believe",
761 "Quest of The World's Greatest Brain"};
764 sprintf(file_name,"playrecord-%s.txt",savefile_base);
766 sprintf(file_name,"playrec-%s.txt",savefile_base);
769 /* Hack -- drop permissions */
772 /* Build the filename */
773 path_build(buf, 1024, ANGBAND_DIR_USER, file_name);
775 if (p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_MONK || p_ptr->pclass == CLASS_SAMURAI || p_ptr->pclass == CLASS_BERSERKER)
776 strcpy(tmp,subtitle[randint0(MAX_SUBTITLE-1)]);
777 else if (p_ptr->pclass == CLASS_MAGE || p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
778 strcpy(tmp,subtitle[randint0(MAX_SUBTITLE-1)+1]);
779 else strcpy(tmp,subtitle[randint0(MAX_SUBTITLE-2)+1]);
782 sprintf(nikki_title, "¡Ö%s%s%s¤ÎÅÁÀâ -%s-¡×",
783 ap_ptr->title, ap_ptr->no ? "¤Î" : "", player_name, tmp);
785 sprintf(nikki_title, "Legend of %s %s '%s'",
786 ap_ptr->title, player_name, tmp);
789 /* Display the file contents */
790 show_file(FALSE, buf, nikki_title, -1, 0);
792 /* Hack -- grab permissions */
796 static void do_cmd_bunshou(void)
799 char bunshou[80] = "\0";
802 if (get_string("ÆâÍÆ: ", tmp, 79))
804 if (get_string("diary note: ", tmp, 79))
807 strcpy(bunshou, tmp);
809 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, bunshou);
813 static void do_cmd_last_get(void)
818 if (record_o_name[0] == '\0') return;
821 sprintf(buf,"%s¤ÎÆþ¼ê¤òµÏ¿¤·¤Þ¤¹¡£",record_o_name);
823 sprintf(buf,"Do you really want to record getting %s? ",record_o_name);
825 if (!get_check(buf)) return;
830 sprintf(buf,"%s¤ò¼ê¤ËÆþ¤ì¤¿¡£", record_o_name);
832 sprintf(buf,"descover %s.", record_o_name);
834 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, buf);
838 static void do_cmd_erase_nikki(void)
845 if (!get_check("ËÜÅö¤ËµÏ¿¤ò¾Ãµî¤·¤Þ¤¹¤«¡©")) return;
847 if (!get_check("Do you really want to delete all your record? ")) return;
851 sprintf(file_name,"playrecord-%s.txt",savefile_base);
853 sprintf(file_name,"playrec-%s.txt",savefile_base);
856 /* Hack -- drop permissions */
859 /* Build the filename */
860 path_build(buf, 1024, ANGBAND_DIR_USER, file_name);
862 /* Remove the file */
865 fff = my_fopen(buf, "w");
869 msg_format("µÏ¿¤ò¾Ãµî¤·¤Þ¤·¤¿¡£");
871 msg_format("deleted record.");
875 msg_format("%s ¤Î¾Ãµî¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£", buf);
877 msg_format("failed to delete %s.", buf);
882 /* Hack -- grab permissions */
889 msg_format("%d %d %d:%d",py,px, p_ptr->energy, p_ptr->skill_dis);
895 void do_cmd_nikki(void)
899 /* File type is "TEXT" */
900 FILE_TYPE(FILE_TYPE_TEXT);
902 /* Save the screen */
905 /* Interact until done */
911 /* Ask for a choice */
913 prt("[ µÏ¿¤ÎÀßÄê ]", 2, 0);
915 prt("[ Play Record ]", 2, 0);
919 /* Give some choices */
921 prt("(1) µÏ¿¤ò¸«¤ë", 4, 5);
922 prt("(2) ʸ¾Ï¤òµÏ¿¤¹¤ë", 5, 5);
923 prt("(3) ľÁ°¤ËÆþ¼êËô¤Ï´ÕÄꤷ¤¿¤â¤Î¤òµÏ¿¤¹¤ë", 6, 5);
924 prt("(4) µÏ¿¤ò¾Ãµî¤¹¤ë", 7, 5);
926 prt("(1) Display your record", 4, 5);
927 prt("(2) Add record", 5, 5);
928 prt("(3) Record item you last get/identify", 6, 5);
929 prt("(4) Delete your record", 7, 5);
935 prt("¥³¥Þ¥ó¥É:", 18, 0);
937 prt("Command: ", 18, 0);
945 if (i == ESCAPE) break;
959 do_cmd_erase_nikki();
966 default: /* Unknown option */
974 /* Restore the screen */
979 * Hack -- redraw the screen
981 * This command performs various low level updates, clears all the "extra"
982 * windows, does a total redraw of the main window, and requests all of the
983 * interesting updates and redraws that I can think of.
985 * This command is also used to "instantiate" the results of the user
986 * selecting various things, such as graphics mode, so it must call
987 * the "TERM_XTRA_REACT" hook before redrawing the windows.
989 void do_cmd_redraw(void)
996 /* Hack -- react to changes */
997 Term_xtra(TERM_XTRA_REACT, 0);
1000 /* Combine and Reorder the pack (later) */
1001 p_ptr->notice |= (PN_COMBINE | PN_REORDER);
1005 p_ptr->update |= (PU_TORCH);
1008 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
1010 /* Forget lite/view */
1011 p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
1013 /* Update lite/view */
1014 p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
1016 /* Update monsters */
1017 p_ptr->update |= (PU_MONSTERS);
1019 /* Redraw everything */
1020 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
1023 p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER);
1026 p_ptr->window |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER | PW_OBJECT);
1030 /* Hack -- update */
1033 if (p_ptr->prace == RACE_ANDROID) calc_android_exp();
1036 /* Redraw every window */
1037 for (j = 0; j < 8; j++)
1040 if (!angband_term[j]) continue;
1043 Term_activate(angband_term[j]);
1058 * Hack -- change name
1060 void do_cmd_change_name(void)
1069 /* Save the screen */
1077 /* Display the player */
1078 display_player(mode);
1083 display_player(mode);
1088 Term_putstr(2, 23, -1, TERM_WHITE,
1089 "['c'¤Ç̾Á°Êѹ¹, 'f'¤Ç¥Õ¥¡¥¤¥ë¤Ø½ñ½Ð, 'h'¤Ç¥â¡¼¥ÉÊѹ¹, ESC¤Ç½ªÎ»]");
1091 Term_putstr(2, 23, -1, TERM_WHITE,
1092 "['c' to change name, 'f' to file, 'h' to change mode, or ESC]");
1100 if (c == ESCAPE) break;
1111 sprintf(tmp, "%s.txt", player_base);
1113 if (get_string("¥Õ¥¡¥¤¥ë̾: ", tmp, 80))
1115 if (get_string("File name: ", tmp, 80))
1119 if (tmp[0] && (tmp[0] != ' '))
1121 file_character(tmp, TRUE);
1138 /* Flush messages */
1142 /* Restore the screen */
1145 /* Redraw everything */
1146 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
1153 * Recall the most recent message
1155 void do_cmd_message_one(void)
1157 /* Recall one message XXX XXX XXX */
1158 prt(format("> %s", message_str(0)), 0, 0);
1163 * Show previous messages to the user -BEN-
1165 * The screen format uses line 0 and 23 for headers and prompts,
1166 * skips line 1 and 22, and uses line 2 thru 21 for old messages.
1168 * This command shows you which commands you are viewing, and allows
1169 * you to "search" for strings in the recall.
1171 * Note that messages may be longer than 80 characters, but they are
1172 * displayed using "infinite" length, with a special sub-command to
1173 * "slide" the virtual display to the left or right.
1175 * Attempt to only hilite the matching portions of the string.
1177 void do_cmd_messages(int num_now)
1188 Term_get_size(&wid, &hgt);
1197 /* Total messages */
1200 /* Start on first message */
1203 /* Start at leftmost edge */
1206 /* Save the screen */
1209 /* Process requests until done */
1215 /* Dump up to 20 lines of messages */
1216 for (j = 0; (j < hgt - 4) && (i + j < n); j++)
1218 cptr msg = message_str(i+j);
1220 /* Apply horizontal scroll */
1221 msg = (strlen(msg) >= q) ? (msg + q) : "";
1223 /* Dump the messages, bottom to top */
1224 Term_putstr(0, hgt-j-3, -1, (bool)(i+j < num_now ? TERM_WHITE : TERM_SLATE), msg);
1226 /* Hilite "shower" */
1231 /* Display matches */
1232 while ((str = strstr(str, shower)) != NULL)
1234 int len = strlen(shower);
1236 /* Display the match */
1237 Term_putstr(str-msg, hgt-j-3, len, TERM_YELLOW, shower);
1245 /* Display header XXX XXX XXX */
1248 prt(format("°ÊÁ°¤Î¥á¥Ã¥»¡¼¥¸ %d-%d Á´Éô¤Ç(%d) ¥ª¥Õ¥»¥Ã¥È(%d)",
1249 i, i+j-1, n, q), 0, 0);
1251 prt(format("Message Recall (%d-%d of %d), Offset %d",
1252 i, i+j-1, n, q), 0, 0);
1256 /* Display prompt (not very informative) */
1258 prt("[ 'p' ¤Ç¹¹¤Ë¸Å¤¤¤â¤Î, 'n' ¤Ç¹¹¤Ë¿·¤·¤¤¤â¤Î, '/' ¤Ç¸¡º÷, ESC ¤ÇÃæÃÇ ]", hgt - 1, 0);
1260 prt("[Press 'p' for older, 'n' for newer, ..., or ESCAPE]", hgt - 1, 0);
1267 /* Exit on Escape */
1268 if (k == ESCAPE) break;
1270 /* Hack -- Save the old index */
1273 /* Horizontal scroll */
1277 q = (q >= 40) ? (q - 40) : 0;
1283 /* Horizontal scroll */
1293 /* Hack -- handle show */
1298 prt("¶¯Ä´: ", hgt - 1, 0);
1300 prt("Show: ", hgt - 1, 0);
1304 /* Get a "shower" string, or continue */
1305 if (!askfor_aux(shower, 80)) continue;
1311 /* Hack -- handle find */
1318 prt("¸¡º÷: ", hgt - 1, 0);
1320 prt("Find: ", hgt - 1, 0);
1324 /* Get a "finder" string, or continue */
1325 if (!askfor_aux(finder, 80)) continue;
1328 strcpy(shower, finder);
1331 for (z = i + 1; z < n; z++)
1333 cptr msg = message_str(z);
1336 if (strstr(msg, finder))
1347 /* Recall 1 older message */
1348 if ((k == '8') || (k == '\n') || (k == '\r'))
1350 /* Go newer if legal */
1351 if (i + 1 < n) i += 1;
1354 /* Recall 10 older messages */
1357 /* Go older if legal */
1358 if (i + 10 < n) i += 10;
1361 /* Recall 20 older messages */
1362 if ((k == 'p') || (k == KTRL('P')) || (k == ' '))
1364 /* Go older if legal */
1365 if (i + 20 < n) i += 20;
1368 /* Recall 20 newer messages */
1369 if ((k == 'n') || (k == KTRL('N')))
1371 /* Go newer (if able) */
1372 i = (i >= 20) ? (i - 20) : 0;
1375 /* Recall 10 newer messages */
1378 /* Go newer (if able) */
1379 i = (i >= 20) ? (i - 20) : 0;
1382 /* Recall 1 newer messages */
1385 /* Go newer (if able) */
1386 i = (i >= 1) ? (i - 1) : 0;
1389 /* Hack -- Error of some kind */
1393 /* Restore the screen */
1400 * Number of cheating options
1407 static option_type cheat_info[CHEAT_MAX] =
1409 { &cheat_peek, FALSE, 255, 0x01, 0x00,
1411 "cheat_peek", "¥¢¥¤¥Æ¥à¤ÎÀ¸À®¤ò¤Î¤¾¤¸«¤ë" },
1413 "cheat_peek", "Peek into object creation" },
1417 { &cheat_hear, FALSE, 255, 0x02, 0x00,
1419 "cheat_hear", "¥â¥ó¥¹¥¿¡¼¤ÎÀ¸À®¤ò¤Î¤¾¤¸«¤ë" },
1421 "cheat_hear", "Peek into monster creation" },
1425 { &cheat_room, FALSE, 255, 0x04, 0x00,
1427 "cheat_room", "¥À¥ó¥¸¥ç¥ó¤ÎÀ¸À®¤ò¤Î¤¾¤¸«¤ë" },
1429 "cheat_room", "Peek into dungeon creation" },
1433 { &cheat_xtra, FALSE, 255, 0x08, 0x00,
1435 "cheat_xtra", "¤½¤Î¾¤Î»ö¤ò¤Î¤¾¤¸«¤ë" },
1437 "cheat_xtra", "Peek into something else" },
1441 { &cheat_know, FALSE, 255, 0x10, 0x00,
1443 "cheat_know", "´°Á´¤Ê¥â¥ó¥¹¥¿¡¼¤Î»×¤¤½Ð¤òÃΤë" },
1445 "cheat_know", "Know complete monster info" },
1449 { &cheat_live, FALSE, 255, 0x20, 0x00,
1451 "cheat_live", "»à¤ò²óÈò¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë" }
1453 "cheat_live", "Allow player to avoid death" }
1459 * Interact with some options for cheating
1461 static void do_cmd_options_cheat(cptr info)
1465 int i, k = 0, n = CHEAT_MAX;
1473 /* Interact with the player */
1476 /* Prompt XXX XXX XXX */
1478 sprintf(buf, "%s ( ¥ê¥¿¡¼¥ó¤Ç¼¡¤Ø, y/n ¤Ç¥»¥Ã¥È, ESC ¤Ç·èÄê )", info);
1480 sprintf(buf, "%s (RET to advance, y/n to set, ESC to accept) ", info);
1486 /* º¾µ½¥ª¥×¥·¥ç¥ó¤ò¤¦¤Ã¤«¤ê¤¤¤¸¤Ã¤Æ¤·¤Þ¤¦¿Í¤¬¤¤¤ë¤è¤¦¤Ê¤Î¤ÇÃí°Õ */
1487 prt(" << Ãí°Õ >>", 11, 0);
1488 prt(" º¾µ½¥ª¥×¥·¥ç¥ó¤ò°ìÅ٤ǤâÀßÄꤹ¤ë¤È¡¢¥¹¥³¥¢µÏ¿¤¬»Ä¤é¤Ê¤¯¤Ê¤ê¤Þ¤¹¡ª", 12, 0);
1489 prt(" ¸å¤Ë²ò½ü¤·¤Æ¤â¥À¥á¤Ç¤¹¤Î¤Ç¡¢¾¡Íø¼Ô¤òÌܻؤ¹Êý¤Ï¤³¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¤¤", 13, 0);
1490 prt(" ¤¸¤é¤Ê¤¤¤è¤¦¤Ë¤·¤Æ²¼¤µ¤¤¡£", 14, 0);
1492 /* Display the options */
1493 for (i = 0; i < n; i++)
1495 byte a = TERM_WHITE;
1497 /* Color current option */
1498 if (i == k) a = TERM_L_BLUE;
1500 /* Display the option text */
1501 sprintf(buf, "%-48s: %s (%s)",
1502 cheat_info[i].o_desc,
1504 (*cheat_info[i].o_var ? "¤Ï¤¤ " : "¤¤¤¤¤¨"),
1506 (*cheat_info[i].o_var ? "yes" : "no "),
1509 cheat_info[i].o_text);
1510 c_prt(a, buf, i + 2, 0);
1513 /* Hilite current option */
1514 move_cursor(k + 2, 50);
1530 k = (n + k - 1) % n;
1549 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "º¾µ½¥ª¥×¥·¥ç¥ó¤òON¤Ë¤·¤Æ¡¢¥¹¥³¥¢¤ò»Ä¤»¤Ê¤¯¤Ê¤Ã¤¿¡£");
1551 do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "give up sending score to use cheating options.");
1553 noscore |= (cheat_info[k].o_set * 256 + cheat_info[k].o_bit);
1554 (*cheat_info[k].o_var) = TRUE;
1563 (*cheat_info[k].o_var) = FALSE;
1578 static option_type autosave_info[2] =
1580 { &autosave_l, FALSE, 255, 0x01, 0x00,
1582 "autosave_l", "¿·¤·¤¤³¬¤ËÆþ¤ëÅ٤˼«Æ°¥»¡¼¥Ö¤¹¤ë" },
1584 "autosave_l", "Autosave when entering new levels" },
1588 { &autosave_t, FALSE, 255, 0x02, 0x00,
1590 "autosave_t", "°ìÄ꥿¡¼¥óËè¤Ë¼«Æ°¥»¡¼¥Ö¤¹¤ë" },
1592 "autosave_t", "Timed autosave" },
1598 static s16b toggle_frequency(s16b current)
1600 if (current == 0) return 50;
1601 if (current == 50) return 100;
1602 if (current == 100) return 250;
1603 if (current == 250) return 500;
1604 if (current == 500) return 1000;
1605 if (current == 1000) return 2500;
1606 if (current == 2500) return 5000;
1607 if (current == 5000) return 10000;
1608 if (current == 10000) return 25000;
1615 * Interact with some options for cheating
1617 static void do_cmd_options_autosave(cptr info)
1621 int i, k = 0, n = 2;
1629 /* Interact with the player */
1632 /* Prompt XXX XXX XXX */
1634 sprintf(buf, "%s ( ¥ê¥¿¡¼¥ó¤Ç¼¡¤Ø, y/n ¤Ç¥»¥Ã¥È, F ¤ÇÉÑÅÙ¤òÆþÎÏ, ESC ¤Ç·èÄê ) ", info);
1636 sprintf(buf, "%s (RET to advance, y/n to set, 'F' for frequency, ESC to accept) ", info);
1641 /* Display the options */
1642 for (i = 0; i < n; i++)
1644 byte a = TERM_WHITE;
1646 /* Color current option */
1647 if (i == k) a = TERM_L_BLUE;
1649 /* Display the option text */
1650 sprintf(buf, "%-48s: %s (%s)",
1651 autosave_info[i].o_desc,
1653 (*autosave_info[i].o_var ? "¤Ï¤¤ " : "¤¤¤¤¤¨"),
1655 (*autosave_info[i].o_var ? "yes" : "no "),
1658 autosave_info[i].o_text);
1659 c_prt(a, buf, i + 2, 0);
1663 prt(format("¼«Æ°¥»¡¼¥Ö¤ÎÉÑÅÙ¡§ %d ¥¿¡¼¥óËè", autosave_freq), 5, 0);
1665 prt(format("Timed autosave frequency: every %d turns", autosave_freq), 5, 0);
1670 /* Hilite current option */
1671 move_cursor(k + 2, 50);
1687 k = (n + k - 1) % n;
1705 (*autosave_info[k].o_var) = TRUE;
1714 (*autosave_info[k].o_var) = FALSE;
1722 autosave_freq = toggle_frequency(autosave_freq);
1724 prt(format("¼«Æ°¥»¡¼¥Ö¤ÎÉÑÅÙ¡§ %d ¥¿¡¼¥óËè",
1726 prt(format("Timed autosave frequency: every %d turns",
1729 autosave_freq), 5, 0);
1742 #define PAGE_AUTODESTROY 7
1745 * Interact with some options
1747 void do_cmd_options_aux(int page, cptr info)
1750 int i, k = 0, n = 0, l;
1755 /* Lookup the options */
1756 for (i = 0; i < 24; i++) opt[i] = 0;
1758 /* Scan the options */
1759 for (i = 0; option_info[i].o_desc; i++)
1761 /* Notice options on this "page" */
1762 if (option_info[i].o_page == page) opt[n++] = i;
1770 if (page == PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "°Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢´Ê°×¼«Æ°Ç˲õ¤ò»ÈÍѤ¹¤ë¤È¤¤Î¤ß͸ú", 4, 6);
1772 if (page == PAGE_AUTODESTROY) c_prt(TERM_YELLOW, "Following options will protect items from easy auto-destroyer.", 4, 3);
1775 /* Interact with the player */
1778 /* Prompt XXX XXX XXX */
1780 sprintf(buf, "%s ( ¥ê¥¿¡¼¥ó¤Ç¼¡¤Ø, y/n ¤Ç¥»¥Ã¥È, ESC ¤Ç·èÄê ) ", info);
1782 sprintf(buf, "%s (RET to advance, y/n to set, ESC to accept) ", info);
1787 /* Display the options */
1788 for (i = 0; i < n; i++)
1790 byte a = TERM_WHITE;
1792 /* Color current option */
1793 if (i == k) a = TERM_L_BLUE;
1795 /* Display the option text */
1796 sprintf(buf, "%-48s: %s (%.19s)",
1797 option_info[opt[i]].o_desc,
1799 (*option_info[opt[i]].o_var ? "¤Ï¤¤ " : "¤¤¤¤¤¨"),
1801 (*option_info[opt[i]].o_var ? "yes" : "no "),
1804 option_info[opt[i]].o_text);
1805 if ((page == PAGE_AUTODESTROY) && i > 0) c_prt(a, buf, i + 5, 0);
1806 else c_prt(a, buf, i + 2, 0);
1809 if ((page == PAGE_AUTODESTROY) && (k > 0)) l = 3;
1811 /* Hilite current option */
1812 move_cursor(k + 2 + l, 50);
1830 k = (n + k - 1) % n;
1851 (*option_info[opt[k]].o_var) = TRUE;
1862 (*option_info[opt[k]].o_var) = FALSE;
1870 (*option_info[opt[k]].o_var) = !(*option_info[opt[k]].o_var);
1885 * Modify the "window" options
1887 static void do_cmd_options_win(void)
1901 /* Memorize old flags */
1902 for (j = 0; j < 8; j++)
1904 /* Acquire current flags */
1905 old_flag[j] = window_flag[j];
1915 /* Prompt XXX XXX XXX */
1917 prt("¥¦¥£¥ó¥É¥¦¡¦¥Õ¥é¥° (<Êý¸þ>¤Ç°ÜÆ°, t¤Ç¥Á¥§¥ó¥¸, y/n ¤Ç¥»¥Ã¥È, ESC)", 0, 0);
1919 prt("Window Flags (<dir>, t, y, n, ESC) ", 0, 0);
1923 /* Display the windows */
1924 for (j = 0; j < 8; j++)
1926 byte a = TERM_WHITE;
1928 cptr s = angband_term_name[j];
1931 if (j == x) a = TERM_L_BLUE;
1933 /* Window name, staggered, centered */
1934 Term_putstr(35 + j * 5 - strlen(s) / 2, 2 + j % 2, -1, a, s);
1937 /* Display the options */
1938 for (i = 0; i < 16; i++)
1940 byte a = TERM_WHITE;
1942 cptr str = window_flag_desc[i];
1945 if (i == y) a = TERM_L_BLUE;
1949 if (!str) str = "(̤»ÈÍÑ)";
1951 if (!str) str = "(Unused option)";
1956 Term_putstr(0, i + 5, -1, a, str);
1958 /* Display the windows */
1959 for (j = 0; j < 8; j++)
1961 byte a = TERM_WHITE;
1966 if ((i == y) && (j == x)) a = TERM_L_BLUE;
1969 if (window_flag[j] & (1L << i)) c = 'X';
1972 Term_putch(35 + j * 5, i + 5, a, c);
1977 Term_gotoxy(35 + x * 5, y + 5);
1995 for (j = 0; j < 8; j++)
1997 window_flag[j] &= ~(1L << y);
2001 for (i = 0; i < 16; i++)
2003 window_flag[x] &= ~(1L << i);
2016 window_flag[x] |= (1L << y);
2024 window_flag[x] &= ~(1L << y);
2030 d = get_keymap_dir(ch);
2032 x = (x + ddx[d] + 8) % 8;
2033 y = (y + ddy[d] + 16) % 16;
2040 /* Notice changes */
2041 for (j = 0; j < 8; j++)
2046 if (!angband_term[j]) continue;
2048 /* Ignore non-changes */
2049 if (window_flag[j] == old_flag[j]) continue;
2052 Term_activate(angband_term[j]);
2069 * Set or unset various options.
2071 * The user must use the "Ctrl-R" command to "adapt" to changes
2072 * in any options which control "visual" aspects of the game.
2074 void do_cmd_options(void)
2079 /* Save the screen */
2089 /* Why are we here */
2091 prt("[ ¥ª¥×¥·¥ç¥ó¤ÎÀßÄê ]", 2, 0);
2093 prt("Options", 2, 0);
2097 /* Give some choices */
2099 prt("(1) ¥¡¼ÆþÎÏ ¥ª¥×¥·¥ç¥ó", 4, 5);
2100 prt("(2) ²èÌ̽ÐÎÏ ¥ª¥×¥·¥ç¥ó", 5, 5);
2101 prt("(3) ¥²¡¼¥à¥×¥ì¥¤ ¥ª¥×¥·¥ç¥ó", 6, 5);
2102 prt("(4) ¹ÔÆ°Ãæ»ß´Ø·¸ ¥ª¥×¥·¥ç¥ó", 7, 5);
2103 prt("(5) ¸úΨ²½ ¥ª¥×¥·¥ç¥ó", 8, 5);
2104 prt("(6) ´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ ¥ª¥×¥·¥ç¥ó", 9, 5);
2105 prt("(R) ¥×¥ì¥¤µÏ¿ ¥ª¥×¥·¥ç¥ó", 10, 5);
2106 /* Special choices */
2107 prt("(D) ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 12, 5);
2108 prt("(H) Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 13, 5);
2109 prt("(A) ¼«Æ°¥»¡¼¥Ö ¥ª¥×¥·¥ç¥ó", 14, 5);
2111 prt("(W) ¥¦¥¤¥ó¥É¥¦¥Õ¥é¥°", 15, 5);
2113 prt("(C) º¾µ½ ¥ª¥×¥·¥ç¥ó", 16, 5);
2115 prt("(1) Input Options", 4, 5);
2116 prt("(2) Output Options", 5, 5);
2117 prt("(3) Game-Play Options", 6, 5);
2118 prt("(4) Disturbance Options", 7, 5);
2119 prt("(5) Efficiency Options", 8, 5);
2120 prt("(6) Easy Auto-Destroyer Options", 9, 5);
2121 prt("(R) Play-record Options", 10, 5);
2123 /* Special choices */
2124 prt("(D) Base Delay Factor", 12, 5);
2125 prt("(H) Hitpoint Warning", 13, 5);
2126 prt("(A) Autosave Options", 14, 5);
2130 prt("(W) Window Flags", 15, 5);
2133 prt("(C) Cheating Options", 16, 5);
2139 prt("¥³¥Þ¥ó¥É:", 18, 0);
2141 prt("Command: ", 18, 0);
2149 if (k == ESCAPE) break;
2154 /* General Options */
2157 /* Process the general options */
2159 do_cmd_options_aux(1, "¥¡¼ÆþÎÏ¥ª¥×¥·¥ç¥ó");
2161 do_cmd_options_aux(1, "Input Options");
2167 /* General Options */
2170 /* Process the general options */
2172 do_cmd_options_aux(2, "²èÌ̽ÐÎÏ¥ª¥×¥·¥ç¥ó");
2174 do_cmd_options_aux(2, "Output Options");
2180 /* Inventory Options */
2185 do_cmd_options_aux(3, "¥²¡¼¥à¥×¥ì¥¤¡¦¥ª¥×¥·¥ç¥ó");
2187 do_cmd_options_aux(3, "Game-Play Options");
2193 /* Disturbance Options */
2198 do_cmd_options_aux(4, "¹ÔÆ°Ãæ»ß´Ø·¸¤Î¥ª¥×¥·¥ç¥ó");
2200 do_cmd_options_aux(4, "Disturbance Options");
2206 /* Efficiency Options */
2211 do_cmd_options_aux(5, "¸úΨ²½¥ª¥×¥·¥ç¥ó");
2213 do_cmd_options_aux(5, "Efficiency Options");
2219 /* Object auto-destruction Options */
2224 do_cmd_options_aux(7, "´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ¥ª¥×¥·¥ç¥ó");
2226 do_cmd_options_aux(7, "Easy Auto-Destroyer Options");
2231 /* Play-record Options */
2237 do_cmd_options_aux(10, "¥×¥ì¥¤µÏ¿¥ª¥×¥·¥ç¥ó");
2239 do_cmd_options_aux(10, "Play-record Option");
2244 /* Cheating Options */
2249 do_cmd_options_cheat("º¾µ½»Õ¤Ï·è¤·¤Æ¾¡Íø¤Ç¤¤Ê¤¤¡ª");
2251 do_cmd_options_cheat("Cheaters never win");
2261 do_cmd_options_autosave("¼«Æ°¥»¡¼¥Ö");
2263 do_cmd_options_autosave("Autosave");
2274 do_cmd_options_win();
2275 p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL |
2276 PW_PLAYER | PW_MESSAGE | PW_OVERHEAD |
2277 PW_MONSTER | PW_OBJECT | PW_SNAPSHOT |
2278 PW_BORG_1 | PW_BORG_2 | PW_DUNGEON);
2282 /* Hack -- Delay Speed */
2288 prt("¥³¥Þ¥ó¥É: ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 18, 0);
2290 prt("Command: Base Delay Factor", 18, 0);
2294 /* Get a new value */
2297 int msec = delay_factor * delay_factor * delay_factor;
2299 prt(format("¸½ºß¤Î¥¦¥§¥¤¥È: %d (%d¥ß¥êÉÃ)",
2301 prt(format("Current base delay factor: %d (%d msec)",
2304 delay_factor, msec), 22, 0);
2306 prt("¥¦¥§¥¤¥È (0-9) ESC¤Ç·èÄê: ", 20, 0);
2308 prt("Delay Factor (0-9 or ESC to accept): ", 20, 0);
2312 if (k == ESCAPE) break;
2313 if (isdigit(k)) delay_factor = D2I(k);
2320 /* Hack -- hitpoint warning factor */
2326 prt("¥³¥Þ¥ó¥É: Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 18, 0);
2328 prt("Command: Hitpoint Warning", 18, 0);
2332 /* Get a new value */
2336 prt(format("¸½ºß¤ÎÄã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð: %d0%%",
2337 hitpoint_warn), 22, 0);
2339 prt(format("Current hitpoint warning: %d0%%",
2340 hitpoint_warn), 22, 0);
2344 prt("Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð (0-9) ESC¤Ç·èÄê: ", 20, 0);
2346 prt("Hitpoint Warning (0-9 or ESC to accept): ", 20, 0);
2350 if (k == ESCAPE) break;
2351 if (isdigit(k)) hitpoint_warn = D2I(k);
2358 /* Unknown option */
2367 /* Flush messages */
2372 /* Restore the screen */
2375 /* Hack - Redraw equippy chars */
2376 p_ptr->redraw |= (PR_EQUIPPY);
2382 * Ask for a "user pref line" and process it
2384 * XXX XXX XXX Allow absolute file names?
2386 void do_cmd_pref(void)
2393 /* Ask for a "user pref command" */
2395 if (!get_string("ÀßÄêÊѹ¹¥³¥Þ¥ó¥É: ", buf, 80)) return;
2397 if (!get_string("Pref: ", buf, 80)) return;
2401 /* Process that pref command */
2402 (void)process_pref_file_command(buf);
2405 void do_cmd_pickpref(void)
2412 if(!get_check("¼«Æ°½¦¤¤ÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹¤«? ")) return;
2414 if(!get_check("Reload auto-pick preference file? ")) return;
2417 /* Free old entries */
2420 /* ¥¥ã¥éËè¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß */
2422 sprintf(buf, "picktype-%s.prf", player_name);
2424 sprintf(buf, "pickpref-%s.prf", player_name);
2426 err = process_pickpref_file(buf);
2431 msg_format("%s¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£", buf);
2433 msg_format("loaded '%s'.", buf);
2437 /* ¶¦Ä̤ÎÀßÄê¥Õ¥¡¥¤¥ëÆɤ߹þ¤ß */
2439 /* Process 'pick????.prf' if 'pick????-<name>.prf' doesn't exist */
2443 err = process_pickpref_file("picktype.prf");
2445 err = process_pickpref_file("pickpref.prf");
2451 msg_print("picktype.prf¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£");
2453 msg_print("loaded 'pickpref.prf'.");
2460 if(err) msg_print("¼«Æ°½¦¤¤ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
2462 if(err) msg_print("Failed to reload autopick preference.");
2469 * Hack -- append all current macros to the given file
2471 static errr macro_dump(cptr fname)
2473 static cptr mark = "Macro Dump";
2481 /* Build the filename */
2482 path_build(buf, 1024, ANGBAND_DIR_USER, fname);
2484 /* File type is "TEXT" */
2485 FILE_TYPE(FILE_TYPE_TEXT);
2487 /* Append to the file */
2488 fff = open_auto_dump(buf, mark, &line_num);
2489 if (!fff) return (-1);
2493 fprintf(fff, "\n# ¼«Æ°¥Þ¥¯¥í¥»¡¼¥Ö\n\n");
2495 fprintf(fff, "\n# Automatic macro dump\n\n");
2500 for (i = 0; i < macro__num; i++)
2502 /* Extract the action */
2503 ascii_to_text(buf, macro__act[i]);
2505 /* Dump the macro */
2506 fprintf(fff, "A:%s\n", buf);
2508 /* Extract the action */
2509 ascii_to_text(buf, macro__pat[i]);
2511 /* Dump normal macros */
2512 fprintf(fff, "P:%s\n", buf);
2517 /* count number of lines */
2522 close_auto_dump(fff, mark, line_num);
2530 * Hack -- ask for a "trigger" (see below)
2532 * Note the complex use of the "inkey()" function from "util.c".
2534 * Note that both "flush()" calls are extremely important.
2536 static void do_cmd_macro_aux(char *buf)
2546 /* Do not process macros */
2552 /* Read the pattern */
2558 /* Do not process macros */
2561 /* Do not wait for keys */
2564 /* Attempt to read a key */
2575 /* Convert the trigger */
2576 ascii_to_text(tmp, buf);
2578 /* Hack -- display the trigger */
2579 Term_addstr(-1, TERM_WHITE, tmp);
2586 * Hack -- ask for a keymap "trigger" (see below)
2588 * Note that both "flush()" calls are extremely important. This may
2589 * no longer be true, since "util.c" is much simpler now. XXX XXX XXX
2591 static void do_cmd_macro_aux_keymap(char *buf)
2605 /* Convert to ascii */
2606 ascii_to_text(tmp, buf);
2608 /* Hack -- display the trigger */
2609 Term_addstr(-1, TERM_WHITE, tmp);
2618 * Hack -- append all keymaps to the given file
2620 static errr keymap_dump(cptr fname)
2622 static cptr mark = "Keymap Dump";
2634 if (rogue_like_commands)
2636 mode = KEYMAP_MODE_ROGUE;
2642 mode = KEYMAP_MODE_ORIG;
2646 /* Build the filename */
2647 path_build(buf, 1024, ANGBAND_DIR_USER, fname);
2649 /* File type is "TEXT" */
2650 FILE_TYPE(FILE_TYPE_TEXT);
2652 /* Append to the file */
2653 fff = open_auto_dump(buf, mark, &line_num);
2654 if (!fff) return -1;
2658 fprintf(fff, "\n# ¼«Æ°¥¡¼ÇÛÃÖ¥»¡¼¥Ö\n\n");
2660 fprintf(fff, "\n# Automatic keymap dump\n\n");
2665 for (i = 0; i < 256; i++)
2669 /* Loop up the keymap */
2670 act = keymap_act[mode][i];
2672 /* Skip empty keymaps */
2675 /* Encode the key */
2678 ascii_to_text(key, buf);
2680 /* Encode the action */
2681 ascii_to_text(buf, act);
2683 /* Dump the macro */
2684 fprintf(fff, "A:%s\n", buf);
2685 fprintf(fff, "C:%d:%s\n", mode, key);
2690 close_auto_dump(fff, mark, line_num);
2699 * Interact with "macros"
2701 * Note that the macro "action" must be defined before the trigger.
2703 * Could use some helpful instructions on this page. XXX XXX XXX
2705 void do_cmd_macros(void)
2717 if (rogue_like_commands)
2719 mode = KEYMAP_MODE_ROGUE;
2725 mode = KEYMAP_MODE_ORIG;
2728 /* File type is "TEXT" */
2729 FILE_TYPE(FILE_TYPE_TEXT);
2736 /* Process requests until done */
2744 prt("[ ¥Þ¥¯¥í¤ÎÀßÄê ]", 2, 0);
2746 prt("Interact with Macros", 2, 0);
2751 /* Describe that action */
2753 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
2755 prt("Current action (if any) shown below:", 20, 0);
2759 /* Analyze the current action */
2760 ascii_to_text(buf, macro__buf);
2762 /* Display the current action */
2768 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
2770 prt("(1) Load a user pref file", 4, 5);
2775 prt("(2) ¥Õ¥¡¥¤¥ë¤Ë¥Þ¥¯¥í¤òÄɲÃ", 5, 5);
2776 prt("(3) ¥Þ¥¯¥í¤Î³Îǧ", 6, 5);
2777 prt("(4) ¥Þ¥¯¥í¤ÎºîÀ®", 7, 5);
2778 prt("(5) ¥Þ¥¯¥í¤Îºï½ü", 8, 5);
2779 prt("(6) ¥Õ¥¡¥¤¥ë¤Ë¥¡¼ÇÛÃÖ¤òÄɲÃ", 9, 5);
2780 prt("(7) ¥¡¼ÇÛÃ֤γÎǧ", 10, 5);
2781 prt("(8) ¥¡¼ÇÛÃ֤κîÀ®", 11, 5);
2782 prt("(9) ¥¡¼ÇÛÃ֤κï½ü", 12, 5);
2783 prt("(0) ¥Þ¥¯¥í¹ÔÆ°¤ÎÆþÎÏ", 13, 5);
2785 prt("(2) Append macros to a file", 5, 5);
2786 prt("(3) Query a macro", 6, 5);
2787 prt("(4) Create a macro", 7, 5);
2788 prt("(5) Remove a macro", 8, 5);
2789 prt("(6) Append keymaps to a file", 9, 5);
2790 prt("(7) Query a keymap", 10, 5);
2791 prt("(8) Create a keymap", 11, 5);
2792 prt("(9) Remove a keymap", 12, 5);
2793 prt("(0) Enter a new action", 13, 5);
2796 #endif /* ALLOW_MACROS */
2800 prt("¥³¥Þ¥ó¥É: ", 16, 0);
2802 prt("Command: ", 16, 0);
2810 if (i == ESCAPE) break;
2812 /* Load a 'macro' file */
2819 prt("¥³¥Þ¥ó¥É: ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 16, 0);
2821 prt("Command: Load a user pref file", 16, 0);
2827 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
2829 prt("File: ", 18, 0);
2833 /* Default filename */
2834 sprintf(tmp, "%s.prf", player_name);
2836 /* Ask for a file */
2837 if (!askfor_aux(tmp, 80)) continue;
2839 /* Process the given filename */
2840 err = process_pref_file(tmp);
2844 msg_format("ɸ½à¤ÎÀßÄê¥Õ¥¡¥¤¥ë'%s'¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£", tmp);
2846 msg_format("Loaded default '%s'.", tmp);
2853 msg_format("'%s'¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡ª", tmp);
2855 msg_format("Failed to load '%s'!");
2861 msg_format("'%s'¤òÆɤ߹þ¤ß¤Þ¤·¤¿¡£", tmp);
2863 msg_format("Loaded '%s'.", tmp);
2875 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤ò¥Õ¥¡¥¤¥ë¤ËÄɲ乤ë", 16, 0);
2877 prt("Command: Append macros to a file", 16, 0);
2883 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
2885 prt("File: ", 18, 0);
2889 /* Default filename */
2890 sprintf(tmp, "%s.prf", player_name);
2892 /* Ask for a file */
2893 if (!askfor_aux(tmp, 80)) continue;
2895 /* Dump the macros */
2896 (void)macro_dump(tmp);
2900 msg_print("¥Þ¥¯¥í¤òÄɲä·¤Þ¤·¤¿¡£");
2902 msg_print("Appended macros.");
2914 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤Î³Îǧ", 16, 0);
2916 prt("Command: Query a macro", 16, 0);
2922 prt("¥È¥ê¥¬¡¼¥¡¼: ", 18, 0);
2924 prt("Trigger: ", 18, 0);
2928 /* Get a macro trigger */
2929 do_cmd_macro_aux(buf);
2931 /* Acquire action */
2932 k = macro_find_exact(buf);
2939 msg_print("¤½¤Î¥¡¼¤Ë¤Ï¥Þ¥¯¥í¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
2941 msg_print("Found no macro.");
2949 /* Obtain the action */
2950 strcpy(macro__buf, macro__act[k]);
2952 /* Analyze the current action */
2953 ascii_to_text(buf, macro__buf);
2955 /* Display the current action */
2960 msg_print("¥Þ¥¯¥í¤ò³Îǧ¤·¤Þ¤·¤¿¡£");
2962 msg_print("Found a macro.");
2968 /* Create a macro */
2973 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤ÎºîÀ®", 16, 0);
2975 prt("Command: Create a macro", 16, 0);
2981 prt("¥È¥ê¥¬¡¼¥¡¼: ", 18, 0);
2983 prt("Trigger: ", 18, 0);
2987 /* Get a macro trigger */
2988 do_cmd_macro_aux(buf);
2995 prt("¥Þ¥¯¥í¹ÔÆ°: ", 20, 0);
2997 prt("Action: ", 20, 0);
3001 /* Convert to text */
3002 ascii_to_text(tmp, macro__buf);
3004 /* Get an encoded action */
3005 if (askfor_aux(tmp, 80))
3007 /* Convert to ascii */
3008 text_to_ascii(macro__buf, tmp);
3010 /* Link the macro */
3011 macro_add(buf, macro__buf);
3015 msg_print("¥Þ¥¯¥í¤òÄɲä·¤Þ¤·¤¿¡£");
3017 msg_print("Added a macro.");
3023 /* Remove a macro */
3028 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¤Îºï½ü", 16, 0);
3030 prt("Command: Remove a macro", 16, 0);
3036 prt("¥È¥ê¥¬¡¼¥¡¼: ", 18, 0);
3038 prt("Trigger: ", 18, 0);
3042 /* Get a macro trigger */
3043 do_cmd_macro_aux(buf);
3045 /* Link the macro */
3046 macro_add(buf, buf);
3050 msg_print("¥Þ¥¯¥í¤òºï½ü¤·¤Þ¤·¤¿¡£");
3052 msg_print("Removed a macro.");
3062 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃÖ¤ò¥Õ¥¡¥¤¥ë¤ËÄɲ乤ë", 16, 0);
3064 prt("Command: Append keymaps to a file", 16, 0);
3070 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
3072 prt("File: ", 18, 0);
3076 /* Default filename */
3077 sprintf(tmp, "%s.prf", player_name);
3079 /* Ask for a file */
3080 if (!askfor_aux(tmp, 80)) continue;
3082 /* Dump the macros */
3083 (void)keymap_dump(tmp);
3087 msg_print("¥¡¼ÇÛÃÖ¤òÄɲä·¤Þ¤·¤¿¡£");
3089 msg_print("Appended keymaps.");
3094 /* Query a keymap */
3101 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃ֤γÎǧ", 16, 0);
3103 prt("Command: Query a keymap", 16, 0);
3109 prt("²¡¤¹¥¡¼: ", 18, 0);
3111 prt("Keypress: ", 18, 0);
3115 /* Get a keymap trigger */
3116 do_cmd_macro_aux_keymap(buf);
3118 /* Look up the keymap */
3119 act = keymap_act[mode][(byte)(buf[0])];
3126 msg_print("¥¡¼ÇÛÃÖ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
3128 msg_print("Found no keymap.");
3136 /* Obtain the action */
3137 strcpy(macro__buf, act);
3139 /* Analyze the current action */
3140 ascii_to_text(buf, macro__buf);
3142 /* Display the current action */
3147 msg_print("¥¡¼ÇÛÃÖ¤ò³Îǧ¤·¤Þ¤·¤¿¡£");
3149 msg_print("Found a keymap.");
3155 /* Create a keymap */
3160 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃ֤κîÀ®", 16, 0);
3162 prt("Command: Create a keymap", 16, 0);
3168 prt("²¡¤¹¥¡¼: ", 18, 0);
3170 prt("Keypress: ", 18, 0);
3174 /* Get a keymap trigger */
3175 do_cmd_macro_aux_keymap(buf);
3182 prt("¹ÔÆ°: ", 20, 0);
3184 prt("Action: ", 20, 0);
3188 /* Convert to text */
3189 ascii_to_text(tmp, macro__buf);
3191 /* Get an encoded action */
3192 if (askfor_aux(tmp, 80))
3194 /* Convert to ascii */
3195 text_to_ascii(macro__buf, tmp);
3197 /* Free old keymap */
3198 string_free(keymap_act[mode][(byte)(buf[0])]);
3200 /* Make new keymap */
3201 keymap_act[mode][(byte)(buf[0])] = string_make(macro__buf);
3205 msg_print("¥¡¼ÇÛÃÖ¤òÄɲä·¤Þ¤·¤¿¡£");
3207 msg_print("Added a keymap.");
3213 /* Remove a keymap */
3218 prt("¥³¥Þ¥ó¥É: ¥¡¼ÇÛÃ֤κï½ü", 16, 0);
3220 prt("Command: Remove a keymap", 16, 0);
3226 prt("²¡¤¹¥¡¼: ", 18, 0);
3228 prt("Keypress: ", 18, 0);
3232 /* Get a keymap trigger */
3233 do_cmd_macro_aux_keymap(buf);
3235 /* Free old keymap */
3236 string_free(keymap_act[mode][(byte)(buf[0])]);
3238 /* Make new keymap */
3239 keymap_act[mode][(byte)(buf[0])] = NULL;
3243 msg_print("¥¡¼ÇÛÃÖ¤òºï½ü¤·¤Þ¤·¤¿¡£");
3245 msg_print("Removed a keymap.");
3250 /* Enter a new action */
3255 prt("¥³¥Þ¥ó¥É: ¥Þ¥¯¥í¹ÔÆ°¤ÎÆþÎÏ", 16, 0);
3257 prt("Command: Enter a new action", 16, 0);
3261 /* Go to the correct location */
3264 /* Hack -- limit the value */
3267 /* Get an encoded action */
3268 if (!askfor_aux(buf, 80)) continue;
3270 /* Extract an action */
3271 text_to_ascii(macro__buf, buf);
3274 #endif /* ALLOW_MACROS */
3283 /* Flush messages */
3292 static void cmd_visuals_aux(char i, int *num, int max)
3299 sprintf(str, "%d", *num);
3301 if (!get_string(format("Input new number(0-%d): ", max-1), str, 4))
3304 tmp = strtol(str, NULL, 0);
3305 if (tmp >= 0 && tmp < max)
3309 else if (isupper(i))
3310 *num = (*num + max - 1) % max;
3312 *num = (*num + 1) % max;
3318 * Interact with "visuals"
3320 void do_cmd_visuals(void)
3331 /* File type is "TEXT" */
3332 FILE_TYPE(FILE_TYPE_TEXT);
3335 /* Save the screen */
3339 /* Interact until done */
3345 /* Ask for a choice */
3347 prt("²èÌÌɽ¼¨¤ÎÀßÄê", 2, 0);
3349 prt("Interact with Visuals", 2, 0);
3353 /* Give some choices */
3355 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
3357 prt("(1) Load a user pref file", 4, 5);
3360 #ifdef ALLOW_VISUALS
3362 prt("(2) ¥â¥ó¥¹¥¿¡¼¤Î ¿§/ʸ»ú ¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 5, 5);
3363 prt("(3) ¥¢¥¤¥Æ¥à¤Î ¿§/ʸ»ú ¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 6, 5);
3364 prt("(4) ÃÏ·Á¤Î ¿§/ʸ»ú ¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 7, 5);
3365 prt("(5) (̤»ÈÍÑ)", 8, 5);
3366 prt("(6) ¥â¥ó¥¹¥¿¡¼¤Î ¿§/ʸ»ú ¤òÊѹ¹¤¹¤ë", 9, 5);
3367 prt("(7) ¥¢¥¤¥Æ¥à¤Î ¿§/ʸ»ú ¤òÊѹ¹¤¹¤ë", 10, 5);
3368 prt("(8) ÃÏ·Á¤Î ¿§/ʸ»ú ¤òÊѹ¹¤¹¤ë", 11, 5);
3369 prt("(9) (̤»ÈÍÑ)", 12, 5);
3371 prt("(2) Dump monster attr/chars", 5, 5);
3372 prt("(3) Dump object attr/chars", 6, 5);
3373 prt("(4) Dump feature attr/chars", 7, 5);
3374 prt("(5) (unused)", 8, 5);
3375 prt("(6) Change monster attr/chars", 9, 5);
3376 prt("(7) Change object attr/chars", 10, 5);
3377 prt("(8) Change feature attr/chars", 11, 5);
3378 prt("(9) (unused)", 12, 5);
3383 prt("(0) ²èÌÌɽ¼¨ÊýË¡¤Î½é´ü²½", 13, 5);
3385 prt("(0) Reset visuals", 13, 5);
3391 prt("¥³¥Þ¥ó¥É:", 18, 0);
3393 prt("Command: ", 15, 0);
3401 if (i == ESCAPE) break;
3403 /* Load a 'pref' file */
3408 prt("¥³¥Þ¥ó¥É: ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 15, 0);
3410 prt("Command: Load a user pref file", 15, 0);
3416 prt("¥Õ¥¡¥¤¥ë: ", 18, 0);
3418 prt("File: ", 17, 0);
3422 /* Default filename */
3423 sprintf(tmp, "%s.prf", player_name);
3426 if (!askfor_aux(tmp, 70)) continue;
3428 /* Process the given filename */
3429 (void)process_pref_file(tmp);
3432 #ifdef ALLOW_VISUALS
3434 /* Dump monster attr/chars */
3437 static cptr mark = "Monster attr/chars";
3442 prt("¥³¥Þ¥ó¥É: ¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 15, 0);
3444 prt("Command: Dump monster attr/chars", 15, 0);
3450 prt("¥Õ¥¡¥¤¥ë: ", 17, 0);
3452 prt("File: ", 17, 0);
3456 /* Default filename */
3457 sprintf(tmp, "%s.prf", player_name);
3459 /* Get a filename */
3460 if (!askfor_aux(tmp, 70)) continue;
3462 /* Build the filename */
3463 path_build(buf, 1024, ANGBAND_DIR_USER, tmp);
3465 /* Append to the file */
3466 fff = open_auto_dump(buf, mark, &line_num);
3471 fprintf(fff, "\n# ¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤ÎÀßÄê\n\n");
3473 fprintf(fff, "\n# Monster attr/char definitions\n\n");
3478 for (i = 0; i < max_r_idx; i++)
3480 monster_race *r_ptr = &r_info[i];
3482 /* Skip non-entries */
3483 if (!r_ptr->name) continue;
3485 /* Dump a comment */
3486 fprintf(fff, "# %s\n", (r_name + r_ptr->name));
3489 /* Dump the monster attr/char info */
3490 fprintf(fff, "R:%d:0x%02X:0x%02X\n\n", i,
3491 (byte)(r_ptr->x_attr), (byte)(r_ptr->x_char));
3496 close_auto_dump(fff, mark, line_num);
3500 msg_print("¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
3502 msg_print("Dumped monster attr/chars.");
3507 /* Dump object attr/chars */
3510 static cptr mark = "Object attr/chars";
3515 prt("¥³¥Þ¥ó¥É: ¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 15, 0);
3517 prt("Command: Dump object attr/chars", 15, 0);
3523 prt("¥Õ¥¡¥¤¥ë: ", 17, 0);
3525 prt("File: ", 17, 0);
3529 /* Default filename */
3530 sprintf(tmp, "%s.prf", player_name);
3532 /* Get a filename */
3533 if (!askfor_aux(tmp, 70)) continue;
3535 /* Build the filename */
3536 path_build(buf, 1024, ANGBAND_DIR_USER, tmp);
3538 /* Append to the file */
3539 fff = open_auto_dump(buf, mark, &line_num);
3544 fprintf(fff, "\n# ¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤ÎÀßÄê\n\n");
3546 fprintf(fff, "\n# Object attr/char definitions\n\n");
3551 for (i = 0; i < max_k_idx; i++)
3553 object_kind *k_ptr = &k_info[i];
3555 /* Skip non-entries */
3556 if (!k_ptr->name) continue;
3558 /* Dump a comment */
3559 fprintf(fff, "# %s\n", (k_name + k_ptr->name));
3562 /* Dump the object attr/char info */
3563 fprintf(fff, "K:%d:0x%02X:0x%02X\n\n", i,
3564 (byte)(k_ptr->x_attr), (byte)(k_ptr->x_char));
3569 close_auto_dump(fff, mark, line_num);
3573 msg_print("¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
3575 msg_print("Dumped object attr/chars.");
3580 /* Dump feature attr/chars */
3583 static cptr mark = "Feature attr/chars";
3588 prt("¥³¥Þ¥ó¥É: ÃÏ·Á¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 15, 0);
3590 prt("Command: Dump feature attr/chars", 15, 0);
3596 prt("¥Õ¥¡¥¤¥ë: ", 17, 0);
3598 prt("File: ", 17, 0);
3602 /* Default filename */
3603 sprintf(tmp, "%s.prf", player_name);
3605 /* Get a filename */
3606 if (!askfor_aux(tmp, 70)) continue;
3608 /* Build the filename */
3609 path_build(buf, 1024, ANGBAND_DIR_USER, tmp);
3611 /* Append to the file */
3612 fff = open_auto_dump(buf, mark, &line_num);
3617 fprintf(fff, "\n# ÃÏ·Á¤Î[¿§/ʸ»ú]¤ÎÀßÄê\n\n");
3619 fprintf(fff, "\n# Feature attr/char definitions\n\n");
3624 for (i = 0; i < max_f_idx; i++)
3626 feature_type *f_ptr = &f_info[i];
3628 /* Skip non-entries */
3629 if (!f_ptr->name) continue;
3631 /* Dump a comment */
3632 fprintf(fff, "# %s\n", (f_name + f_ptr->name));
3635 /* Dump the feature attr/char info */
3636 fprintf(fff, "F:%d:0x%02X:0x%02X\n\n", i,
3637 (byte)(f_ptr->x_attr), (byte)(f_ptr->x_char));
3642 close_auto_dump(fff, mark, line_num);
3646 msg_print("ÃÏ·Á¤Î[¿§/ʸ»ú]¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
3648 msg_print("Dumped feature attr/chars.");
3653 /* Modify monster attr/chars */
3660 prt("¥³¥Þ¥ó¥É: ¥â¥ó¥¹¥¿¡¼¤Î[¿§/ʸ»ú]¤òÊѹ¹¤·¤Þ¤¹", 15, 0);
3662 prt("Command: Change monster attr/chars", 15, 0);
3666 /* Hack -- query until done */
3669 monster_race *r_ptr = &r_info[r];
3673 byte da = (r_ptr->d_attr);
3674 byte dc = (r_ptr->d_char);
3675 byte ca = (r_ptr->x_attr);
3676 byte cc = (r_ptr->x_char);
3678 /* Label the object */
3680 Term_putstr(5, 17, -1, TERM_WHITE,
3681 format("¥â¥ó¥¹¥¿¡¼ = %d, ̾Á° = %-40.40s",
3682 r, (r_name + r_ptr->name)));
3684 Term_putstr(5, 17, -1, TERM_WHITE,
3685 format("Monster = %d, Name = %-40.40s",
3686 r, (r_name + r_ptr->name)));
3690 /* Label the Default values */
3692 Term_putstr(10, 19, -1, TERM_WHITE,
3693 format("½é´üÃÍ ¿§ / ʸ»ú = %3u / %3u", da, dc));
3695 Term_putstr(10, 19, -1, TERM_WHITE,
3696 format("Default attr/char = %3u / %3u", da, dc));
3699 Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>");
3700 Term_putch(43, 19, da, dc);
3704 Term_putch(44, 19, 255, -1);
3706 Term_putch(44, 19, 0, ' ');
3709 /* Label the Current values */
3711 Term_putstr(10, 20, -1, TERM_WHITE,
3712 format("¸½ºßÃÍ ¿§ / ʸ»ú = %3u / %3u", ca, cc));
3714 Term_putstr(10, 20, -1, TERM_WHITE,
3715 format("Current attr/char = %3u / %3u", ca, cc));
3718 Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>");
3719 Term_putch(43, 20, ca, cc);
3723 Term_putch(44, 20, 255, -1);
3725 Term_putch(44, 20, 0, ' ');
3730 Term_putstr(0, 22, -1, TERM_WHITE,
3731 "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C): ");
3733 Term_putstr(0, 22, -1, TERM_WHITE,
3734 "Command (n/N/^N/a/A/^A/c/C/^C): ");
3741 if (i == ESCAPE) break;
3743 if (iscntrl(i)) c = 'a' + i - KTRL('A');
3744 else if (isupper(i)) c = 'a' + i - 'A';
3750 cmd_visuals_aux(i, &r, max_r_idx);
3753 t = (int)r_ptr->x_attr;
3754 cmd_visuals_aux(i, &t, 256);
3755 r_ptr->x_attr = (byte)t;
3758 t = (int)r_ptr->x_char;
3759 cmd_visuals_aux(i, &t, 256);
3760 r_ptr->x_char = (byte)t;
3766 /* Modify object attr/chars */
3773 prt("¥³¥Þ¥ó¥É: ¥¢¥¤¥Æ¥à¤Î[¿§/ʸ»ú]¤òÊѹ¹¤·¤Þ¤¹", 15, 0);
3775 prt("Command: Change object attr/chars", 15, 0);
3779 /* Hack -- query until done */
3782 object_kind *k_ptr = &k_info[k];
3786 byte da = (byte)k_ptr->d_attr;
3787 byte dc = (byte)k_ptr->d_char;
3788 byte ca = (byte)k_ptr->x_attr;
3789 byte cc = (byte)k_ptr->x_char;
3791 /* Label the object */
3793 Term_putstr(5, 17, -1, TERM_WHITE,
3794 format("¥¢¥¤¥Æ¥à = %d, ̾Á° = %-40.40s",
3795 k, (k_name + k_ptr->name)));
3797 Term_putstr(5, 17, -1, TERM_WHITE,
3798 format("Object = %d, Name = %-40.40s",
3799 k, (k_name + k_ptr->name)));
3803 /* Label the Default values */
3805 Term_putstr(10, 19, -1, TERM_WHITE,
3806 format("½é´üÃÍ ¿§ / ʸ»ú = %3d / %3d", da, dc));
3808 Term_putstr(10, 19, -1, TERM_WHITE,
3809 format("Default attr/char = %3d / %3d", da, dc));
3812 Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>");
3813 Term_putch(43, 19, da, dc);
3817 Term_putch(44, 19, 255, -1);
3819 Term_putch(44, 19, 0, ' ');
3822 /* Label the Current values */
3824 Term_putstr(10, 20, -1, TERM_WHITE,
3825 format("¸½ºßÃÍ ¿§ / ʸ»ú = %3d / %3d", ca, cc));
3827 Term_putstr(10, 20, -1, TERM_WHITE,
3828 format("Current attr/char = %3d / %3d", ca, cc));
3831 Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>");
3832 Term_putch(43, 20, ca, cc);
3836 Term_putch(44, 20, 255, -1);
3838 Term_putch(44, 20, 0, ' ');
3843 Term_putstr(0, 22, -1, TERM_WHITE,
3844 "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C): ");
3846 Term_putstr(0, 22, -1, TERM_WHITE,
3847 "Command (n/N/^N/a/A/^A/c/C/^C): ");
3854 if (i == ESCAPE) break;
3856 if (iscntrl(i)) c = 'a' + i - KTRL('A');
3857 else if (isupper(i)) c = 'a' + i - 'A';
3863 cmd_visuals_aux(i, &k, max_k_idx);
3866 t = (int)k_info[k].x_attr;
3867 cmd_visuals_aux(i, &t, 256);
3868 k_info[k].x_attr = (byte)t;
3871 t = (int)k_info[k].x_char;
3872 cmd_visuals_aux(i, &t, 256);
3873 k_info[k].x_char = (byte)t;
3879 /* Modify feature attr/chars */
3886 prt("¥³¥Þ¥ó¥É: ÃÏ·Á¤Î[¿§/ʸ»ú]¤òÊѹ¹¤·¤Þ¤¹", 15, 0);
3888 prt("Command: Change feature attr/chars", 15, 0);
3892 /* Hack -- query until done */
3895 feature_type *f_ptr = &f_info[f];
3899 byte da = (byte)f_ptr->d_attr;
3900 byte dc = (byte)f_ptr->d_char;
3901 byte ca = (byte)f_ptr->x_attr;
3902 byte cc = (byte)f_ptr->x_char;
3904 /* Label the object */
3906 Term_putstr(5, 17, -1, TERM_WHITE,
3907 format("ÃÏ·Á = %d, ̾Á° = %-40.40s",
3908 f, (f_name + f_ptr->name)));
3910 Term_putstr(5, 17, -1, TERM_WHITE,
3911 format("Terrain = %d, Name = %-40.40s",
3912 f, (f_name + f_ptr->name)));
3916 /* Label the Default values */
3918 Term_putstr(10, 19, -1, TERM_WHITE,
3919 format("½é´üÃÍ ¿§ / ʸ»ú = %3d / %3d", da, dc));
3921 Term_putstr(10, 19, -1, TERM_WHITE,
3922 format("Default attr/char = %3d / %3d", da, dc));
3925 Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>");
3926 Term_putch(43, 19, da, dc);
3930 Term_putch(44, 19, 255, -1);
3932 Term_putch(44, 19, 0, ' ');
3935 /* Label the Current values */
3937 Term_putstr(10, 20, -1, TERM_WHITE,
3938 format("¸½ºßÃÍ ¿§ / ʸ»ú = %3d / %3d", ca, cc));
3940 Term_putstr(10, 20, -1, TERM_WHITE,
3941 format("Current attr/char = %3d / %3d", ca, cc));
3944 Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>");
3945 Term_putch(43, 20, ca, cc);
3949 Term_putch(44, 20, 255, -1);
3951 Term_putch(44, 20, 0, ' ');
3956 Term_putstr(0, 22, -1, TERM_WHITE,
3957 "¥³¥Þ¥ó¥É (n/N/^N/a/A/^A/c/C/^C): ");
3959 Term_putstr(0, 22, -1, TERM_WHITE,
3960 "Command (n/N/^N/a/A/^A/c/C/^C): ");
3967 if (i == ESCAPE) break;
3969 if (iscntrl(i)) c = 'a' + i - KTRL('A');
3970 else if (isupper(i)) c = 'a' + i - 'A';
3976 cmd_visuals_aux(i, &f, max_f_idx);
3979 t = (int)f_info[f].x_attr;
3980 cmd_visuals_aux(i, &t, 256);
3981 f_info[f].x_attr = (byte)t;
3984 t = (int)f_info[f].x_char;
3985 cmd_visuals_aux(i, &t, 256);
3986 f_info[f].x_char = (byte)t;
4002 msg_print("²èÌ̾å¤Î[¿§/ʸ»ú]¤ò½é´üÃͤ˥ꥻ¥Ã¥È¤·¤Þ¤·¤¿¡£");
4004 msg_print("Visual attr/char tables reset.");
4009 /* Unknown option */
4015 /* Flush messages */
4020 /* Restore the screen */
4026 * Interact with "colors"
4028 void do_cmd_colors(void)
4039 /* File type is "TEXT" */
4040 FILE_TYPE(FILE_TYPE_TEXT);
4043 /* Save the screen */
4047 /* Interact until done */
4053 /* Ask for a choice */
4055 prt("[ ¥«¥é¡¼¤ÎÀßÄê ]", 2, 0);
4057 prt("Interact with Colors", 2, 0);
4061 /* Give some choices */
4063 prt("(1) ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É", 4, 5);
4065 prt("(1) Load a user pref file", 4, 5);
4070 prt("(2) ¥«¥é¡¼¤ÎÀßÄê¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤¹", 5, 5);
4071 prt("(3) ¥«¥é¡¼¤ÎÀßÄê¤òÊѹ¹¤¹¤ë", 6, 5);
4073 prt("(2) Dump colors", 5, 5);
4074 prt("(3) Modify colors", 6, 5);
4081 prt("¥³¥Þ¥ó¥É: ", 8, 0);
4083 prt("Command: ", 8, 0);
4091 if (i == ESCAPE) break;
4093 /* Load a 'pref' file */
4098 prt("¥³¥Þ¥ó¥É: ¥æ¡¼¥¶¡¼ÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹", 8, 0);
4100 prt("Command: Load a user pref file", 8, 0);
4106 prt("¥Õ¥¡¥¤¥ë: ", 10, 0);
4108 prt("File: ", 10, 0);
4113 sprintf(tmp, "%s.prf", player_name);
4116 if (!askfor_aux(tmp, 70)) continue;
4118 /* Process the given filename */
4119 (void)process_pref_file(tmp);
4121 /* Mega-Hack -- react to changes */
4122 Term_xtra(TERM_XTRA_REACT, 0);
4124 /* Mega-Hack -- redraw */
4133 static cptr mark = "Colors";
4138 prt("¥³¥Þ¥ó¥É: ¥«¥é¡¼¤ÎÀßÄê¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤¹", 8, 0);
4140 prt("Command: Dump colors", 8, 0);
4146 prt("¥Õ¥¡¥¤¥ë: ", 10, 0);
4148 prt("File: ", 10, 0);
4152 /* Default filename */
4153 sprintf(tmp, "%s.prf", player_name);
4155 /* Get a filename */
4156 if (!askfor_aux(tmp, 70)) continue;
4158 /* Build the filename */
4159 path_build(buf, 1024, ANGBAND_DIR_USER, tmp);
4161 /* Append to the file */
4162 fff = open_auto_dump(buf, mark, &line_num);
4167 fprintf(fff, "\n# ¥«¥é¡¼¤ÎÀßÄê\n\n");
4169 fprintf(fff, "\n# Color redefinitions\n\n");
4174 for (i = 0; i < 256; i++)
4176 int kv = angband_color_table[i][0];
4177 int rv = angband_color_table[i][1];
4178 int gv = angband_color_table[i][2];
4179 int bv = angband_color_table[i][3];
4184 cptr name = "unknown";
4188 /* Skip non-entries */
4189 if (!kv && !rv && !gv && !bv) continue;
4191 /* Extract the color name */
4192 if (i < 16) name = color_names[i];
4194 /* Dump a comment */
4196 fprintf(fff, "# ¥«¥é¡¼ '%s'\n", name);
4198 fprintf(fff, "# Color '%s'\n", name);
4202 /* Dump the monster attr/char info */
4203 fprintf(fff, "V:%d:0x%02X:0x%02X:0x%02X:0x%02X\n\n",
4209 close_auto_dump(fff, mark, line_num);
4213 msg_print("¥«¥é¡¼¤ÎÀßÄê¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
4215 msg_print("Dumped color redefinitions.");
4227 prt("¥³¥Þ¥ó¥É: ¥«¥é¡¼¤ÎÀßÄê¤òÊѹ¹¤·¤Þ¤¹", 8, 0);
4229 prt("Command: Modify colors", 8, 0);
4233 /* Hack -- query until done */
4242 /* Exhibit the normal colors */
4243 for (j = 0; j < 16; j++)
4245 /* Exhibit this color */
4246 Term_putstr(j*4, 20, -1, a, "###");
4248 /* Exhibit all colors */
4249 Term_putstr(j*4, 22, -1, j, format("%3d", j));
4252 /* Describe the color */
4254 name = ((a < 16) ? color_names[a] : "̤ÄêµÁ");
4256 name = ((a < 16) ? color_names[a] : "undefined");
4260 /* Describe the color */
4262 Term_putstr(5, 10, -1, TERM_WHITE,
4263 format("¥«¥é¡¼ = %d, ̾Á° = %s", a, name));
4265 Term_putstr(5, 10, -1, TERM_WHITE,
4266 format("Color = %d, Name = %s", a, name));
4270 /* Label the Current values */
4271 Term_putstr(5, 12, -1, TERM_WHITE,
4272 format("K = 0x%02x / R,G,B = 0x%02x,0x%02x,0x%02x",
4273 angband_color_table[a][0],
4274 angband_color_table[a][1],
4275 angband_color_table[a][2],
4276 angband_color_table[a][3]));
4280 Term_putstr(0, 14, -1, TERM_WHITE,
4281 "¥³¥Þ¥ó¥É (n/N/k/K/r/R/g/G/b/B): ");
4283 Term_putstr(0, 14, -1, TERM_WHITE,
4284 "Command (n/N/k/K/r/R/g/G/b/B): ");
4292 if (i == ESCAPE) break;
4295 if (i == 'n') a = (byte)(a + 1);
4296 if (i == 'N') a = (byte)(a - 1);
4297 if (i == 'k') angband_color_table[a][0] = (byte)(angband_color_table[a][0] + 1);
4298 if (i == 'K') angband_color_table[a][0] = (byte)(angband_color_table[a][0] - 1);
4299 if (i == 'r') angband_color_table[a][1] = (byte)(angband_color_table[a][1] + 1);
4300 if (i == 'R') angband_color_table[a][1] = (byte)(angband_color_table[a][1] - 1);
4301 if (i == 'g') angband_color_table[a][2] = (byte)(angband_color_table[a][2] + 1);
4302 if (i == 'G') angband_color_table[a][2] = (byte)(angband_color_table[a][2] - 1);
4303 if (i == 'b') angband_color_table[a][3] = (byte)(angband_color_table[a][3] + 1);
4304 if (i == 'B') angband_color_table[a][3] = (byte)(angband_color_table[a][3] - 1);
4306 /* Hack -- react to changes */
4307 Term_xtra(TERM_XTRA_REACT, 0);
4309 /* Hack -- redraw */
4316 /* Unknown option */
4322 /* Flush messages */
4327 /* Restore the screen */
4333 * Note something in the message recall
4335 void do_cmd_note(void)
4344 if (!get_string("¥á¥â: ", buf, 60)) return;
4346 if (!get_string("Note: ", buf, 60)) return;
4350 /* Ignore empty notes */
4351 if (!buf[0] || (buf[0] == ' ')) return;
4353 /* Add the note to the message recall */
4355 msg_format("¥á¥â: %s", buf);
4357 msg_format("Note: %s", buf);
4364 * Mention the current version
4366 void do_cmd_version(void)
4370 #ifndef FAKE_VERSION
4371 msg_format("You are playing Angband %d.%d.%d.",
4372 VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
4375 msg_format("ÊѶòÈÚÅÜ(Hengband) %d.%d.%d",
4376 FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH);
4378 msg_format("You are playing Hengband %d.%d.%d.",
4379 FAKE_VER_MAJOR-10, FAKE_VER_MINOR, FAKE_VER_PATCH);
4389 * Array of feeling strings
4391 static cptr do_cmd_feeling_text[11] =
4394 "¤³¤Î³¬¤ÎÊ·°Ïµ¤¤ò´¶¤¸¤È¤ì¤Ê¤«¤Ã¤¿...",
4396 "Looks like any other level.",
4400 "¤³¤Î³¬¤Ë¤Ï²¿¤«ÆÃÊ̤ʤâ¤Î¤¬¤¢¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£",
4402 "You feel there is something special about this level.",
4406 "¶²¤í¤·¤¤»à¤Î¸¸¤¬ÌܤËÉ⤫¤Ó¡¢µ¤À䤷¤½¤¦¤Ë¤Ê¤Ã¤¿¡ª",
4408 "You nearly faint as horrible visions of death fill your mind!",
4412 "¤³¤Î³¬¤Ï¤È¤Æ¤â´í¸±¤Ê¤è¤¦¤À¡£",
4414 "This level looks very dangerous.",
4418 "¤È¤Æ¤â°¤¤Í½´¶¤¬¤¹¤ë...",
4420 "You have a very bad feeling...",
4424 "°¤¤Í½´¶¤¬¤¹¤ë...",
4426 "You have a bad feeling...",
4432 "You feel nervous.",
4436 "¾¯¤·ÉÔ±¿¤Êµ¤¤¬¤¹¤ë...",
4438 "You feel your luck is turning...",
4442 "¤³¤Î¾ì½ê¤Ï¹¥¤¤Ë¤Ê¤ì¤Ê¤¤¡£",
4444 "You don't like the look of this place.",
4448 "¤³¤Î³¬¤Ï¤½¤ì¤Ê¤ê¤Ë°ÂÁ´¤Ê¤è¤¦¤À¡£",
4450 "This level looks reasonably safe.",
4454 "¤Ê¤ó¤ÆÂà¶þ¤Ê¤È¤³¤í¤À..."
4456 "What a boring place..."
4461 static cptr do_cmd_feeling_text_combat[11] =
4464 "¤³¤Î³¬¤ÎÊ·°Ïµ¤¤ò´¶¤¸¤È¤ì¤Ê¤«¤Ã¤¿...",
4466 "Looks like any other level.",
4470 "¤³¤Î³¬¤Ë¤Ï²¿¤«ÆÃÊ̤ʤâ¤Î¤¬¤¢¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£",
4472 "You feel there is something special about this level.",
4476 "º£Ìë¤â¤Þ¤¿¡¢Ã¯¤«¤¬Ì¿¤òÍî¤È¤¹...",
4478 "You nearly faint as horrible visions of death fill your mind!",
4482 "¤³¤Î³¬¤Ï¤È¤Æ¤â´í¸±¤Ê¤è¤¦¤À¡£",
4484 "This level looks very dangerous.",
4488 "¤È¤Æ¤â°¤¤Í½´¶¤¬¤¹¤ë...",
4490 "You have a very bad feeling...",
4494 "°¤¤Í½´¶¤¬¤¹¤ë...",
4496 "You have a bad feeling...",
4502 "You feel nervous.",
4506 "¾¯¤·ÉÔ±¿¤Êµ¤¤¬¤¹¤ë...",
4508 "You feel your luck is turning...",
4512 "¤³¤Î¾ì½ê¤Ï¹¥¤¤Ë¤Ê¤ì¤Ê¤¤¡£",
4514 "You don't like the look of this place.",
4518 "¤³¤Î³¬¤Ï¤½¤ì¤Ê¤ê¤Ë°ÂÁ´¤Ê¤è¤¦¤À¡£",
4520 "This level looks reasonably safe.",
4524 "¤Ê¤ó¤ÆÂà¶þ¤Ê¤È¤³¤í¤À..."
4526 "What a boring place..."
4531 static cptr do_cmd_feeling_text_lucky[11] =
4534 "¤³¤Î³¬¤ÎÊ·°Ïµ¤¤ò´¶¤¸¤È¤ì¤Ê¤«¤Ã¤¿...",
4535 "¤³¤Î³¬¤Ë¤Ï²¿¤«ÆÃÊ̤ʤâ¤Î¤¬¤¢¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£",
4536 "¤³¤Î³¬¤Ï¤³¤Î¾å¤Ê¤¯ÁÇÀ²¤é¤·¤¤´¶¤¸¤¬¤¹¤ë¡£",
4537 "ÁÇÀ²¤é¤·¤¤´¶¤¸¤¬¤¹¤ë...",
4538 "¤È¤Æ¤âÎɤ¤´¶¤¸¤¬¤¹¤ë...",
4539 "Îɤ¤´¶¤¸¤¬¤¹¤ë...",
4540 "¤Á¤ç¤Ã¤È¹¬±¿¤Ê´¶¤¸¤¬¤¹¤ë...",
4541 "¿¾¯¤Ï±¿¤¬¸þ¤¤¤Æ¤¤¿¤«...",
4542 "¸«¤¿´¶¤¸°¤¯¤Ï¤Ê¤¤...",
4543 "Á´Á³ÂÌÌܤȤ¤¤¦¤³¤È¤Ï¤Ê¤¤¤¬...",
4544 "¤Ê¤ó¤ÆÂà¶þ¤Ê¤È¤³¤í¤À..."
4546 "Looks like any other level.",
4547 "You feel there is something special about this level.",
4548 "You have a superb feeling about this level.",
4549 "You have an excellent feeling...",
4550 "You have a very good feeling...",
4551 "You have a good feeling...",
4552 "You feel strangely lucky...",
4553 "You feel your luck is turning...",
4554 "You like the look of this place...",
4555 "This level can't be all bad...",
4556 "What a boring place..."
4562 * Note that "feeling" is set to zero unless some time has passed.
4563 * Note that this is done when the level is GENERATED, not entered.
4565 void do_cmd_feeling(void)
4567 /* Verify the feeling */
4568 if (feeling > 10) feeling = 10;
4570 /* No useful feeling in quests */
4571 if (p_ptr->inside_quest && !random_quest_number(dun_level))
4574 msg_print("ŵ·¿Åª¤Ê¥¯¥¨¥¹¥È¤Î¥À¥ó¥¸¥ç¥ó¤Î¤è¤¦¤À¡£");
4576 msg_print("Looks like a typical quest level.");
4582 /* No useful feeling in town */
4583 else if (p_ptr->town_num && !dun_level)
4586 if (!strcmp(town[p_ptr->town_num].name, "¹ÓÌî"))
4588 if (!strcmp(town[p_ptr->town_num].name, "wilderness"))
4592 msg_print("²¿¤«¤¢¤ê¤½¤¦¤Ê¹ÓÌî¤Î¤è¤¦¤À¡£");
4594 msg_print("Looks like a strange wilderness.");
4602 msg_print("ŵ·¿Åª¤ÊÄ®¤Î¤è¤¦¤À¡£");
4604 msg_print("Looks like a typical town.");
4611 /* No useful feeling in the wilderness */
4612 else if (!dun_level)
4615 msg_print("ŵ·¿Åª¤Ê¹ÓÌî¤Î¤è¤¦¤À¡£");
4617 msg_print("Looks like a typical wilderness.");
4623 /* Display the feeling */
4624 if (turn - old_turn >= (150 - dun_level)*TURNS_PER_TICK || cheat_xtra)
4626 if (p_ptr->muta3 & MUT3_GOOD_LUCK) msg_print(do_cmd_feeling_text_lucky[feeling]);
4628 if((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON)){
4629 msg_print(do_cmd_feeling_text_combat[feeling]);
4631 msg_print(do_cmd_feeling_text[feeling]);
4636 msg_print(do_cmd_feeling_text[0]);
4645 * Encode the screen colors
4647 static char hack[17] = "dwsorgbuDWvyRGBU";
4650 static errr photo_fgets(FILE *fff, char *buf, huge n)
4659 if (fgets(tmp, 1024, fff))
4661 /* Convert weirdness */
4662 for (s = tmp; *s; s++)
4664 /* Handle newline */
4675 else if (*s == '\t')
4677 /* Hack -- require room */
4678 if (i + 8 >= n) break;
4680 /* Append a space */
4683 /* Append some more spaces */
4684 while (!(i % 8)) buf[i++] = ' ';
4688 else if (iskanji(*s))
4695 /* Ⱦ³Ñ¤«¤Ê¤ËÂбþ */
4696 else if ((((int)*s & 0xff) > 0xa1) && (((int)*s & 0xff ) < 0xdf))
4703 /* Handle printables */
4724 * Hack -- load a screen dump from a file
4726 void do_cmd_load_screen(void)
4741 Term_get_size(&wid, &hgt);
4743 /* Hack -- drop permissions */
4746 /* Build the filename */
4747 path_build(buf, 1024, ANGBAND_DIR_USER, "dump.txt");
4749 /* Append to the file */
4750 fff = my_fopen(buf, "r");
4755 msg_format("%s ¤ò³«¤¯¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", buf);
4757 msg_format("Failed to open %s.", buf);
4764 /* Save the screen */
4767 /* Clear the screen */
4771 /* Load the screen */
4772 for (y = 0; okay && (y < hgt); y++)
4774 /* Get a line of data */
4775 if (photo_fgets(fff, buf, 1024)) okay = FALSE;
4778 for (x = 0; x < wid - 1; x++)
4780 /* Put the attr/char */
4781 Term_draw(x, y, TERM_WHITE, buf[x]);
4785 /* Get the blank line */
4786 if (my_fgets(fff, buf, 1024)) okay = FALSE;
4789 /* Dump the screen */
4790 for (y = 0; okay && (y < hgt); y++)
4792 /* Get a line of data */
4793 if (photo_fgets(fff, buf, 1024)) okay = FALSE;
4796 for (x = 0; x < wid - 1; x++)
4798 /* Get the attr/char */
4799 (void)(Term_what(x, y, &a, &c));
4801 /* Look up the attr */
4802 for (i = 0; i < 16; i++)
4804 /* Use attr matches */
4805 if (hack[i] == buf[x]) a = i;
4808 /* Put the attr/char */
4809 Term_draw(x, y, a, c);
4814 /* Get the blank line */
4815 if (my_fgets(fff, buf, 1024)) okay = FALSE;
4821 /* Hack -- grab permissions */
4827 prt("¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤µ¤ì¤¿²èÌÌ(µÇ°»£±Æ)¤ò¥í¡¼¥É¤·¤Þ¤·¤¿¡£", 0, 0);
4829 msg_print("Screen dump loaded.");
4836 /* Restore the screen */
4843 cptr inven_res_label =
4845 " »ÀÅŲÐÎäÆǸ÷°ÇÇ˹ì¹ö°øÆÙÎô ÌÕÉÝÍðáãÆ©Ì¿´¶¾ÃÉüÉâ";
4847 " AcElFiCoPoLiDkShSoNtNxCaDi BlFeCfFaSeHlEpSdRgLv";
4850 /* XTRA HACK RESLIST */
4851 static void do_cmd_knowledge_inven_aux(FILE *fff, object_type *o_ptr,
4852 int *j, byte tval, char *where)
4854 char o_name[MAX_NLEN];
4857 if (!o_ptr->k_idx)return;
4858 if (o_ptr->tval != tval)return;
4861 * HACK:Ring of Lordly protection and Dragon shield/helm
4862 * have random resistances.
4864 if ( ((o_ptr->tval >= TV_BOW && o_ptr->tval<= TV_DRAG_ARMOR && o_ptr->name2)
4865 || (o_ptr->tval == TV_RING && o_ptr->sval == SV_RING_LORDLY)
4866 || (o_ptr->tval == TV_SHIELD && o_ptr->sval == SV_DRAGON_SHIELD)
4867 || (o_ptr->tval == TV_HELM && o_ptr->sval == SV_DRAGON_HELM)
4868 || (o_ptr->tval == TV_GLOVES && o_ptr->sval == SV_SET_OF_DRAGON_GLOVES)
4869 || (o_ptr->tval == TV_BOOTS && o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE)
4870 || o_ptr->art_name || o_ptr->name1) && object_known_p(o_ptr))
4873 object_desc(o_name, o_ptr, TRUE, 0);
4875 while ( o_name[i] && i < 26 ){
4877 if (iskanji(o_name[i])) i++;
4881 if(i<28) while(i<28){o_name[i]=' ';i++;}
4884 fprintf(fff,"%s %s", where, o_name);
4886 if (!(o_ptr->ident & (IDENT_MENTAL)))
4889 fprintf(fff, "-------ÉÔÌÀ--------------- -------ÉÔÌÀ---------\n");
4891 fprintf(fff, "-------unknown------------ -------unknown------\n");
4895 object_flags_known(o_ptr, &f[0], &f[1], &f[2]);
4898 if (f[1] & TR2_IM_ACID) fprintf(fff,"¡ö");
4899 else if (f[1] & TR2_RES_ACID) fprintf(fff,"¡Ü");
4900 else fprintf(fff,"¡¦");
4902 if (f[1] & TR2_IM_ELEC) fprintf(fff,"¡ö");
4903 else if (f[1] & TR2_RES_ELEC) fprintf(fff,"¡Ü");
4904 else fprintf(fff,"¡¦");
4906 if (f[1] & TR2_IM_FIRE) fprintf(fff,"¡ö");
4907 else if (f[1] & TR2_RES_FIRE) fprintf(fff,"¡Ü");
4908 else fprintf(fff,"¡¦");
4910 if (f[1] & TR2_IM_COLD) fprintf(fff,"¡ö");
4911 else if (f[1] & TR2_RES_COLD) fprintf(fff,"¡Ü");
4912 else fprintf(fff,"¡¦");
4914 if (f[1] & TR2_RES_POIS) fprintf(fff,"¡Ü");
4915 else fprintf(fff,"¡¦");
4917 if (f[1] & TR2_RES_LITE) fprintf(fff,"¡Ü");
4918 else fprintf(fff,"¡¦");
4920 if (f[1] & TR2_RES_DARK) fprintf(fff,"¡Ü");
4921 else fprintf(fff,"¡¦");
4923 if (f[1] & TR2_RES_SHARDS) fprintf(fff,"¡Ü");
4924 else fprintf(fff,"¡¦");
4926 if (f[1] & TR2_RES_SOUND) fprintf(fff,"¡Ü");
4927 else fprintf(fff,"¡¦");
4929 if (f[1] & TR2_RES_NETHER) fprintf(fff,"¡Ü");
4930 else fprintf(fff,"¡¦");
4932 if (f[1] & TR2_RES_NEXUS) fprintf(fff,"¡Ü");
4933 else fprintf(fff,"¡¦");
4935 if (f[1] & TR2_RES_CHAOS) fprintf(fff,"¡Ü");
4936 else fprintf(fff,"¡¦");
4938 if (f[1] & TR2_RES_DISEN) fprintf(fff,"¡Ü");
4939 else fprintf(fff,"¡¦");
4943 if (f[1] & TR2_RES_BLIND) fprintf(fff,"¡Ü");
4944 else fprintf(fff,"¡¦");
4946 if (f[1] & TR2_RES_FEAR) fprintf(fff,"¡Ü");
4947 else fprintf(fff,"¡¦");
4949 if (f[1] & TR2_RES_CONF) fprintf(fff,"¡Ü");
4950 else fprintf(fff,"¡¦");
4952 if (f[1] & TR2_FREE_ACT) fprintf(fff,"¡Ü");
4953 else fprintf(fff,"¡¦");
4955 if (f[2] & TR3_SEE_INVIS) fprintf(fff,"¡Ü");
4956 else fprintf(fff,"¡¦");
4958 if (f[1] & TR2_HOLD_LIFE) fprintf(fff,"¡Ü");
4959 else fprintf(fff,"¡¦");
4961 if (f[2] & TR3_TELEPATHY) fprintf(fff,"¡Ü");
4962 else fprintf(fff,"¡¦");
4964 if (f[2] & TR3_SLOW_DIGEST) fprintf(fff,"¡Ü");
4965 else fprintf(fff,"¡¦");
4968 if (f[2] & TR3_REGEN) fprintf(fff,"¡Ü");
4969 else fprintf(fff,"¡¦");
4971 if (f[2] & TR3_FEATHER) fprintf(fff,"¡Ü");
4972 else fprintf(fff,"¡¦");
4974 if (f[1] & TR2_IM_ACID) fprintf(fff,"* ");
4975 else if (f[1] & TR2_RES_ACID) fprintf(fff,"+ ");
4976 else fprintf(fff,". ");
4978 if (f[1] & TR2_IM_ELEC) fprintf(fff,"* ");
4979 else if (f[1] & TR2_RES_ELEC) fprintf(fff,"+ ");
4980 else fprintf(fff,". ");
4982 if (f[1] & TR2_IM_FIRE) fprintf(fff,"* ");
4983 else if (f[1] & TR2_RES_FIRE) fprintf(fff,"+ ");
4984 else fprintf(fff,". ");
4986 if (f[1] & TR2_IM_COLD) fprintf(fff,"* ");
4987 else if (f[1] & TR2_RES_COLD) fprintf(fff,"+ ");
4988 else fprintf(fff,". ");
4990 if (f[1] & TR2_RES_POIS) fprintf(fff,"+ ");
4991 else fprintf(fff,". ");
4993 if (f[1] & TR2_RES_LITE) fprintf(fff,"+ ");
4994 else fprintf(fff,". ");
4996 if (f[1] & TR2_RES_DARK) fprintf(fff,"+ ");
4997 else fprintf(fff,". ");
4999 if (f[1] & TR2_RES_SHARDS) fprintf(fff,"+ ");
5000 else fprintf(fff,". ");
5002 if (f[1] & TR2_RES_SOUND) fprintf(fff,"+ ");
5003 else fprintf(fff,". ");
5005 if (f[1] & TR2_RES_NETHER) fprintf(fff,"+ ");
5006 else fprintf(fff,". ");
5008 if (f[1] & TR2_RES_NEXUS) fprintf(fff,"+ ");
5009 else fprintf(fff,". ");
5011 if (f[1] & TR2_RES_CHAOS) fprintf(fff,"+ ");
5012 else fprintf(fff,". ");
5014 if (f[1] & TR2_RES_DISEN) fprintf(fff,"+ ");
5015 else fprintf(fff,". ");
5019 if (f[1] & TR2_RES_BLIND) fprintf(fff,"+ ");
5020 else fprintf(fff,". ");
5022 if (f[1] & TR2_RES_FEAR) fprintf(fff,"+ ");
5023 else fprintf(fff,". ");
5025 if (f[1] & TR2_RES_CONF) fprintf(fff,"+ ");
5026 else fprintf(fff,". ");
5028 if (f[1] & TR2_FREE_ACT) fprintf(fff,"+ ");
5029 else fprintf(fff,". ");
5031 if (f[2] & TR3_SEE_INVIS) fprintf(fff,"+ ");
5032 else fprintf(fff,". ");
5034 if (f[1] & TR2_HOLD_LIFE) fprintf(fff,"+ ");
5035 else fprintf(fff,". ");
5037 if (f[2] & TR3_TELEPATHY) fprintf(fff,"+ ");
5038 else fprintf(fff,". ");
5040 if (f[2] & TR3_SLOW_DIGEST) fprintf(fff,"+ ");
5041 else fprintf(fff,". ");
5044 if (f[2] & TR3_REGEN) fprintf(fff,"+ ");
5045 else fprintf(fff,". ");
5047 if (f[2] & TR3_FEATHER) fprintf(fff,"+ ");
5048 else fprintf(fff,". ");
5056 fprintf(fff,"%s\n", inven_res_label);
5062 * Display *ID* ed weapons/armors's resistances
5064 static void do_cmd_knowledge_inven(void)
5069 char file_name[1024];
5080 /* Open a new file */
5081 fff = my_fopen_temp(file_name, 1024);
5084 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5086 msg_format("Failed to create temporally file %s.", file_name);
5091 fprintf(fff,"%s\n",inven_res_label);
5093 for (tval=TV_BOW; tval <= TV_RING; tval++){
5096 for (;j<9;j++) fprintf(fff, "\n");
5098 fprintf(fff,"%s\n",inven_res_label);
5102 strcpy(where, "Áõ");
5104 strcpy(where, "E ");
5106 for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
5108 o_ptr = &inventory[i];
5109 do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where);
5113 strcpy(where, "»ý");
5115 strcpy(where, "I ");
5117 for (i = 0; i < INVEN_PACK; i++)
5119 o_ptr = &inventory[i];
5120 do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where);
5124 /* Print all homes in the different towns */
5125 st_ptr = &town[1].store[STORE_HOME];
5127 strcpy(where, "²È");
5129 strcpy(where, "H ");/*nanka*/
5132 /* Dump all available items */
5133 for (i = 0; i < st_ptr->stock_num; i++)
5135 o_ptr = &st_ptr->stock[i];
5136 do_cmd_knowledge_inven_aux(fff, o_ptr, &j, tval, where);
5140 /* Close the file */
5143 /* Display the file contents */
5145 show_file(TRUE, file_name, "*´ÕÄê*ºÑ¤ßÉð´ï/Ëɶñ¤ÎÂÑÀ¥ê¥¹¥È", 0, 0);
5147 show_file(TRUE, file_name, "Resistances of *identified* equipment", 0, 0);
5150 /* Remove the file */
5155 void do_cmd_save_screen_html_aux(char *filename, int message)
5159 byte a = 0, old_a = 0;
5173 char *html_head[] = {
5174 "<html>\n<body text=\"#ffffff\" bgcolor=\"#000000\">\n",
5178 char *html_foot[] = {
5180 "</body>\n</html>\n",
5186 Term_get_size(&wid, &hgt);
5188 /* File type is "TEXT" */
5189 FILE_TYPE(FILE_TYPE_TEXT);
5191 /* Append to the file */
5192 fff = my_fopen(filename, "w");
5198 msg_format("¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£", filename);
5200 msg_format("Failed to open file %s.", filename);
5208 /* Save the screen */
5212 /* Build the filename */
5213 path_build(buf, 1024, ANGBAND_DIR_USER, "htmldump.prf");
5214 tmpfff = my_fopen(buf, "r");
5216 for (i = 0; html_head[i]; i++)
5217 fprintf(fff, html_head[i]);
5221 while (!my_fgets(tmpfff, buf, 1024)) {
5223 if (strncmp(buf, tags[0], strlen(tags[0])) == 0)
5227 if (strncmp(buf, tags[1], strlen(tags[1])) == 0)
5229 fprintf(fff, "%s\n", buf);
5234 /* Dump the screen */
5235 for (y = 0; y < hgt; y++)
5242 for (x = 0; x < wid - 1; x++)
5246 /* Get the attr/char */
5247 (void)(Term_what(x, y, &a, &c));
5251 case '&': cc = "&"; break;
5252 case '<': cc = "<"; break;
5253 case '>': cc = ">"; break;
5255 case 0x1f: c = '.'; break;
5256 case 0x7f: c = (a == 0x09) ? '%' : '#'; break;
5261 if ((y == 0 && x == 0) || a != old_a) {
5262 rv = angband_color_table[a][1];
5263 gv = angband_color_table[a][2];
5264 bv = angband_color_table[a][3];
5265 fprintf(fff, "%s<font color=\"#%02x%02x%02x\">",
5266 ((y == 0 && x == 0) ? "" : "</font>"), rv, gv, bv);
5270 fprintf(fff, "%s", cc);
5272 fprintf(fff, "%c", c);
5275 fprintf(fff, "</font>");
5278 for (i = 0; html_foot[i]; i++)
5279 fprintf(fff, html_foot[i]);
5284 while (!my_fgets(tmpfff, buf, 1024)) {
5286 if (strncmp(buf, tags[2], strlen(tags[2])) == 0)
5290 if (strncmp(buf, tags[3], strlen(tags[3])) == 0)
5292 fprintf(fff, "%s\n", buf);
5307 msg_print("²èÌÌ(µÇ°»£±Æ)¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
5309 msg_print("Screen dump saved.");
5314 /* Restore the screen */
5320 * Hack -- save a screen dump to a file
5322 void do_cmd_save_screen_html(void)
5324 char buf[1024], tmp[256] = "screen.html";
5327 if (!get_string("¥Õ¥¡¥¤¥ë̾: ", tmp, 80))
5329 if (!get_string("File name: ", tmp, 80))
5333 /* Build the filename */
5334 path_build(buf, 1024, ANGBAND_DIR_USER, tmp);
5338 /* Hack -- drop permissions */
5341 do_cmd_save_screen_html_aux(buf, 1);
5343 /* Hack -- grab permissions */
5349 * Redefinable "save_screen" action
5351 void (*screendump_aux)(void) = NULL;
5355 * Hack -- save a screen dump to a file
5357 void do_cmd_save_screen(void)
5359 bool old_use_graphics = use_graphics;
5363 Term_get_size(&wid, &hgt);
5365 if (old_use_graphics)
5367 use_graphics = FALSE;
5370 /* Redraw everything */
5371 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
5373 /* Hack -- update */
5378 if (get_check_strict("HTML¤Ç½ÐÎϤ·¤Þ¤¹¤«¡©", CHECK_NO_HISTORY))
5380 if (get_check_strict("Save screen dump as HTML? ", CHECK_NO_HISTORY))
5383 do_cmd_save_screen_html();
5387 /* Do we use a special screendump function ? */
5388 else if (screendump_aux)
5390 /* Dump the screen to a graphics file */
5391 (*screendump_aux)();
5393 else /* Dump the screen as text */
5405 /* Hack -- drop permissions */
5408 /* Build the filename */
5409 path_build(buf, 1024, ANGBAND_DIR_USER, "dump.txt");
5411 /* File type is "TEXT" */
5412 FILE_TYPE(FILE_TYPE_TEXT);
5414 /* Append to the file */
5415 fff = my_fopen(buf, "w");
5420 /* Hack -- grab permissions */
5423 msg_format("¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£", buf);
5425 msg_format("Failed to open file %s.", buf);
5432 /* Save the screen */
5436 /* Dump the screen */
5437 for (y = 0; y < hgt; y++)
5440 for (x = 0; x < wid - 1; x++)
5442 /* Get the attr/char */
5443 (void)(Term_what(x, y, &a, &c));
5453 fprintf(fff, "%s\n", buf);
5460 /* Dump the screen */
5461 for (y = 0; y < hgt; y++)
5464 for (x = 0; x < wid - 1; x++)
5466 /* Get the attr/char */
5467 (void)(Term_what(x, y, &a, &c));
5470 buf[x] = hack[a&0x0F];
5477 fprintf(fff, "%s\n", buf);
5487 /* Hack -- grab permissions */
5492 msg_print("²èÌÌ(µÇ°»£±Æ)¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤½Ð¤·¤Þ¤·¤¿¡£");
5494 msg_print("Screen dump saved.");
5500 /* Restore the screen */
5504 if (old_use_graphics)
5506 use_graphics = TRUE;
5509 /* Redraw everything */
5510 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
5512 /* Hack -- update */
5519 * Sorting hook -- Comp function -- see below
5521 * We use "u" to point to array of monster indexes,
5522 * and "v" to select the type of sorting to perform on "u".
5524 static bool ang_sort_art_comp(vptr u, vptr v, int a, int b)
5526 u16b *who = (u16b*)(u);
5528 u16b *why = (u16b*)(v);
5536 /* Sort by total kills */
5539 /* Extract total kills */
5540 z1 = a_info[w1].tval;
5541 z2 = a_info[w2].tval;
5543 /* Compare total kills */
5544 if (z1 < z2) return (TRUE);
5545 if (z1 > z2) return (FALSE);
5549 /* Sort by monster level */
5552 /* Extract levels */
5553 z1 = a_info[w1].sval;
5554 z2 = a_info[w2].sval;
5556 /* Compare levels */
5557 if (z1 < z2) return (TRUE);
5558 if (z1 > z2) return (FALSE);
5562 /* Sort by monster experience */
5565 /* Extract experience */
5566 z1 = a_info[w1].level;
5567 z2 = a_info[w2].level;
5569 /* Compare experience */
5570 if (z1 < z2) return (TRUE);
5571 if (z1 > z2) return (FALSE);
5575 /* Compare indexes */
5581 * Sorting hook -- Swap function -- see below
5583 * We use "u" to point to array of monster indexes,
5584 * and "v" to select the type of sorting to perform.
5586 static void ang_sort_art_swap(vptr u, vptr v, int a, int b)
5588 u16b *who = (u16b*)(u);
5600 * Check the status of "artifacts"
5602 void do_cmd_knowledge_artifacts(void)
5604 int i, k, z, x, y, n = 0;
5610 char file_name[1024];
5612 char base_name[MAX_NLEN];
5616 /* Open a new file */
5617 fff = my_fopen_temp(file_name, 1024);
5621 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5623 msg_format("Failed to create temporary file %s.", file_name);
5629 /* Allocate the "who" array */
5630 C_MAKE(who, max_r_idx, s16b);
5632 /* Allocate the "okay" array */
5633 C_MAKE(okay, max_a_idx, bool);
5635 /* Scan the artifacts */
5636 for (k = 0; k < max_a_idx; k++)
5638 artifact_type *a_ptr = &a_info[k];
5643 /* Skip "empty" artifacts */
5644 if (!a_ptr->name) continue;
5646 /* Skip "uncreated" artifacts */
5647 if (!a_ptr->cur_num) continue;
5653 /* Check the dungeon */
5654 for (y = 0; y < cur_hgt; y++)
5656 for (x = 0; x < cur_wid; x++)
5658 cave_type *c_ptr = &cave[y][x];
5660 s16b this_o_idx, next_o_idx = 0;
5662 /* Scan all objects in the grid */
5663 for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
5667 /* Acquire object */
5668 o_ptr = &o_list[this_o_idx];
5670 /* Acquire next object */
5671 next_o_idx = o_ptr->next_o_idx;
5673 /* Ignore non-artifacts */
5674 if (!artifact_p(o_ptr)) continue;
5676 /* Ignore known items */
5677 if (object_known_p(o_ptr)) continue;
5679 /* Note the artifact */
5680 okay[o_ptr->name1] = FALSE;
5685 /* Check the inventory and equipment */
5686 for (i = 0; i < INVEN_TOTAL; i++)
5688 object_type *o_ptr = &inventory[i];
5690 /* Ignore non-objects */
5691 if (!o_ptr->k_idx) continue;
5693 /* Ignore non-artifacts */
5694 if (!artifact_p(o_ptr)) continue;
5696 /* Ignore known items */
5697 if (object_known_p(o_ptr)) continue;
5699 /* Note the artifact */
5700 okay[o_ptr->name1] = FALSE;
5703 for (k = 0; k < max_a_idx; k++)
5705 if (okay[k]) who[n++] = k;
5708 /* Select the sort method */
5709 ang_sort_comp = ang_sort_art_comp;
5710 ang_sort_swap = ang_sort_art_swap;
5712 /* Sort the array by dungeon depth of monsters */
5713 ang_sort(who, &why, n);
5715 /* Scan the artifacts */
5716 for (k = 0; k < n; k++)
5718 artifact_type *a_ptr = &a_info[who[k]];
5722 strcpy(base_name, "̤ÃΤÎÅÁÀâ¤Î¥¢¥¤¥Æ¥à");
5724 strcpy(base_name, "Unknown Artifact");
5728 /* Obtain the base object type */
5729 z = lookup_kind(a_ptr->tval, a_ptr->sval);
5737 /* Get local object */
5740 /* Create fake object */
5741 object_prep(q_ptr, z);
5743 /* Make it an artifact */
5744 q_ptr->name1 = (byte)who[k];
5746 /* Describe the artifact */
5747 object_desc_store(base_name, q_ptr, FALSE, 0);
5750 /* Hack -- Build the artifact name */
5752 fprintf(fff, " %s\n", base_name);
5754 fprintf(fff, " The %s\n", base_name);
5759 /* Free the "who" array */
5760 C_KILL(who, max_r_idx, s16b);
5762 /* Free the "okay" array */
5763 C_KILL(okay, max_a_idx, bool);
5765 /* Close the file */
5768 /* Display the file contents */
5770 show_file(TRUE, file_name, "´ûÃΤÎÅÁÀâ¤Î¥¢¥¤¥Æ¥à", 0, 0);
5772 show_file(TRUE, file_name, "Artifacts Seen", 0, 0);
5776 /* Remove the file */
5782 * Display known uniques
5784 static void do_cmd_knowledge_uniques(void)
5792 char file_name[1024];
5794 /* Open a new file */
5795 fff = my_fopen_temp(file_name, 1024);
5799 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5801 msg_format("Failed to create temporary file %s.", file_name);
5807 /* Allocate the "who" array */
5808 C_MAKE(who, max_r_idx, s16b);
5810 /* Scan the monsters */
5811 for (i = 1; i < max_r_idx; i++)
5813 monster_race *r_ptr = &r_info[i];
5815 /* Use that monster */
5816 if (r_ptr->name) who[n++] = i;
5819 /* Select the sort method */
5820 ang_sort_comp = ang_sort_comp_hook;
5821 ang_sort_swap = ang_sort_swap_hook;
5823 /* Sort the array by dungeon depth of monsters */
5824 ang_sort(who, &why, n);
5826 /* Scan the monster races */
5827 for (k = 0; k < n; k++)
5829 monster_race *r_ptr = &r_info[who[k]];
5831 /* Only print Uniques */
5832 if (r_ptr->flags1 & (RF1_UNIQUE))
5834 bool dead = (r_ptr->max_num == 0);
5838 /* Only display "known" uniques */
5839 if (dead || cheat_know || r_ptr->r_sights)
5841 /* Print a message */
5843 fprintf(fff, " %s¤Ï¤Þ¤ÀÀ¸¤¤Æ¤¤¤ë¡£\n",
5844 (r_name + r_ptr->name));
5846 fprintf(fff, " %s is alive\n",
5847 (r_name + r_ptr->name));
5854 /* Free the "who" array */
5855 C_KILL(who, max_r_idx, s16b);
5857 /* Close the file */
5860 /* Display the file contents */
5862 show_file(TRUE, file_name, "¤Þ¤ÀÀ¸¤¤Æ¤¤¤ë¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼", 0, 0);
5864 show_file(TRUE, file_name, "Alive Uniques", 0, 0);
5868 /* Remove the file */
5874 * Display dead uniques
5876 static void do_cmd_knowledge_uniques_dead(void)
5884 char file_name[1024];
5886 /* Open a new file */
5887 fff = my_fopen_temp(file_name, 1024);
5891 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5893 msg_format("Failed to create temporary file %s.", file_name);
5899 /* Allocate the "who" array */
5900 C_MAKE(who, max_r_idx, s16b);
5902 /* Scan the monsters */
5903 for (i = 1; i < max_r_idx; i++)
5905 monster_race *r_ptr = &r_info[i];
5907 /* Use that monster */
5908 if (r_ptr->name) who[n++] = i;
5911 /* Select the sort method */
5912 ang_sort_comp = ang_sort_comp_hook;
5913 ang_sort_swap = ang_sort_swap_hook;
5915 /* Sort the array by dungeon depth of monsters */
5916 ang_sort(who, &why, n);
5918 /* Scan the monster races */
5919 for (k = 0; k < n; k++)
5921 monster_race *r_ptr = &r_info[who[k]];
5923 /* Only print Uniques */
5924 if (r_ptr->flags1 & (RF1_UNIQUE))
5926 bool dead = (r_ptr->max_num == 0);
5928 if (!dead) continue;
5930 /* Only display "known" uniques */
5931 if (dead || cheat_know || r_ptr->r_sights)
5933 /* Print a message */
5935 fprintf(fff, " %s¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡£\n",
5936 (r_name + r_ptr->name));
5938 fprintf(fff, " %s is dead\n",
5939 (r_name + r_ptr->name));
5946 /* Free the "who" array */
5947 C_KILL(who, max_r_idx, s16b);
5949 /* Close the file */
5952 /* Display the file contents */
5954 show_file(TRUE, file_name, "Åݤ·¤¿¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼", 0, 0);
5956 show_file(TRUE, file_name, "Dead Uniques", 0, 0);
5960 /* Remove the file */
5966 * Display weapon-exp
5968 static void do_cmd_knowledge_weapon_exp(void)
5970 int i,j, num, shougou;
5974 char file_name[1024];
5977 /* Open a new file */
5978 fff = my_fopen_temp(file_name, 1024);
5981 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
5983 msg_format("Failed to create temporary file %s.", file_name);
5989 for(i = 0; i < 5; i++)
5991 for (num = 0; num < 64; num++)
5993 for (j = 0; j < max_k_idx; j++)
5995 object_kind *k_ptr = &k_info[j];
5997 if ((k_ptr->tval == TV_SWORD-i) && (k_ptr->sval == num))
5999 if((k_ptr->tval == TV_BOW) && (k_ptr->sval == SV_CRIMSON)) continue;
6001 if(weapon_exp[4-i][num]<4000) shougou=0;
6002 else if(weapon_exp[4-i][num]<6000) shougou=1;
6003 else if(weapon_exp[4-i][num]<7000) shougou=2;
6004 else if(weapon_exp[4-i][num]<8000) shougou=3;
6007 fprintf(fff,"%-25s ",tmp);
6008 if (weapon_exp[4-i][num] >= s_info[p_ptr->pclass].w_max[4-i][num]) fprintf(fff,"!");
6009 else fprintf(fff," ");
6010 fprintf(fff,"%s",shougou_moji[shougou]);
6011 if (cheat_xtra) fprintf(fff," %d",weapon_exp[4-i][num]);
6019 /* Close the file */
6022 /* Display the file contents */
6024 show_file(TRUE, file_name, "Éð´ï¤Î·Ð¸³ÃÍ", 0, 0);
6026 show_file(TRUE, file_name, "Weapon Proficiency", 0, 0);
6030 /* Remove the file */
6038 static void do_cmd_knowledge_spell_exp(void)
6045 char file_name[1024];
6047 /* Open a new file */
6048 fff = my_fopen_temp(file_name, 1024);
6051 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6053 msg_format("Failed to create temporary file %s.", file_name);
6059 if(p_ptr->realm1 != REALM_NONE)
6062 fprintf(fff,"%s¤ÎËâË¡½ñ\n",realm_names[p_ptr->realm1]);
6064 fprintf(fff,"%s Spellbook\n",realm_names[p_ptr->realm1]);
6066 for (i = 0; i < 32; i++)
6068 if (!is_magic(p_ptr->realm1))
6070 s_ptr = &technic_info[p_ptr->realm1 - MIN_TECHNIC - 1][i];
6074 s_ptr = &mp_ptr->info[p_ptr->realm1 - 1][i];
6076 if(s_ptr->slevel == 99) continue;
6077 if(spell_exp[i]<900) shougou=0;
6078 else if(spell_exp[i]<1200) shougou=1;
6079 else if(spell_exp[i]<1400) shougou=2;
6080 else if(spell_exp[i]<1600) shougou=3;
6082 fprintf(fff,"%-25s ",spell_names[technic2magic(p_ptr->realm1)-1][i]);
6083 if (p_ptr->realm1 == REALM_HISSATSU)
6084 fprintf(fff,"[--]");
6087 if (shougou == 4) fprintf(fff,"!");
6088 else fprintf(fff," ");
6089 fprintf(fff,"%s",shougou_moji[shougou]);
6091 if (cheat_xtra) fprintf(fff," %d",spell_exp[i]);
6096 if(p_ptr->realm2 != REALM_NONE)
6098 fprintf(fff,"\n%s Spellbook\n",realm_names[p_ptr->realm2]);
6099 for (i = 0; i < 32; i++)
6101 if (!is_magic(p_ptr->realm1))
6103 s_ptr = &technic_info[p_ptr->realm2 - MIN_TECHNIC - 1][i];
6107 s_ptr = &mp_ptr->info[p_ptr->realm2 - 1][i];
6109 if(s_ptr->slevel == 99) continue;
6111 if(spell_exp[i+32]<900) shougou=0;
6112 else if(spell_exp[i+32]<1200) shougou=1;
6113 else if(spell_exp[i+32]<1400) shougou=2;
6115 fprintf(fff,"%-25s ",spell_names[technic2magic(p_ptr->realm2)-1][i]);
6116 if (shougou == 3) fprintf(fff,"!");
6117 else fprintf(fff," ");
6118 fprintf(fff,"%s",shougou_moji[shougou]);
6119 if (cheat_xtra) fprintf(fff," %d",spell_exp[i+32]);
6124 /* Close the file */
6127 /* Display the file contents */
6129 show_file(TRUE, file_name, "ËâË¡¤Î·Ð¸³ÃÍ", 0, 0);
6131 show_file(TRUE, file_name, "Spell Proficiency", 0, 0);
6135 /* Remove the file */
6143 static void do_cmd_knowledge_skill_exp(void)
6149 char file_name[1024];
6151 char skill_name[3][17]={"¥Þ¡¼¥·¥ã¥ë¥¢¡¼¥Ä", "ÆóÅáή ", "¾èÇÏ "};
6153 char skill_name[3][20]={"Martial Arts ", "Dual Wielding ", "Riding "};
6156 /* Open a new file */
6157 fff = my_fopen_temp(file_name, 1024);
6160 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6162 msg_format("Failed to create temporary file %s.", file_name);
6168 for (i = 0; i < 3; i++)
6170 if(i == GINOU_RIDING)
6172 if(skill_exp[i]<500) shougou=0;
6173 else if(skill_exp[i]<2000) shougou=1;
6174 else if(skill_exp[i]<5000) shougou=2;
6175 else if(skill_exp[i]<8000) shougou=3;
6180 if(skill_exp[i]<4000) shougou=0;
6181 else if(skill_exp[i]<6000) shougou=1;
6182 else if(skill_exp[i]<7000) shougou=2;
6183 else if(skill_exp[i]<8000) shougou=3;
6186 fprintf(fff,"%-20s ",skill_name[i]);
6187 if (skill_exp[i] == s_info[p_ptr->pclass].s_max[i]) fprintf(fff,"!");
6188 else fprintf(fff," ");
6189 fprintf(fff,"%s",shougou_moji[shougou]);
6190 if (cheat_xtra) fprintf(fff," %d",skill_exp[i]);
6194 /* Close the file */
6197 /* Display the file contents */
6199 show_file(TRUE, file_name, "µ»Ç½¤Î·Ð¸³ÃÍ", 0, 0);
6201 show_file(TRUE, file_name, "Miscellaneous Proficiency", 0, 0);
6205 /* Remove the file */
6211 * Pluralize a monster name
6213 void plural_aux(char *Name)
6215 int NameLen = strlen(Name);
6217 if (strstr(Name, "Disembodied hand"))
6219 strcpy(Name, "Disembodied hands that strangled people");
6221 else if (strstr(Name, "Colour out of space"))
6223 strcpy(Name, "Colours out of space");
6225 else if (strstr(Name, "stairway to hell"))
6227 strcpy(Name, "stairways to hell");
6229 else if (strstr(Name, "Dweller on the threshold"))
6231 strcpy(Name, "Dwellers on the threshold");
6233 else if (strstr(Name, " of "))
6235 cptr aider = strstr(Name, " of ");
6246 if (dummy[i-1] == 's')
6248 strcpy(&(dummy[i]), "es");
6253 strcpy(&(dummy[i]), "s");
6256 strcpy(&(dummy[i+1]), aider);
6257 strcpy(Name, dummy);
6259 else if (strstr(Name, "coins"))
6262 strcpy(dummy, "piles of ");
6263 strcat(dummy, Name);
6264 strcpy(Name, dummy);
6267 else if (strstr(Name, "Manes"))
6271 else if (streq(&(Name[NameLen - 2]), "ey"))
6273 strcpy(&(Name[NameLen - 2]), "eys");
6275 else if (Name[NameLen - 1] == 'y')
6277 strcpy(&(Name[NameLen - 1]), "ies");
6279 else if (streq(&(Name[NameLen - 4]), "ouse"))
6281 strcpy(&(Name[NameLen - 4]), "ice");
6283 else if (streq(&(Name[NameLen - 2]), "us"))
6285 strcpy(&(Name[NameLen - 2]), "i");
6287 else if (streq(&(Name[NameLen - 6]), "kelman"))
6289 strcpy(&(Name[NameLen - 6]), "kelmen");
6291 else if (streq(&(Name[NameLen - 8]), "wordsman"))
6293 strcpy(&(Name[NameLen - 8]), "wordsmen");
6295 else if (streq(&(Name[NameLen - 7]), "oodsman"))
6297 strcpy(&(Name[NameLen - 7]), "oodsmen");
6299 else if (streq(&(Name[NameLen - 7]), "eastman"))
6301 strcpy(&(Name[NameLen - 7]), "eastmen");
6303 else if (streq(&(Name[NameLen - 8]), "izardman"))
6305 strcpy(&(Name[NameLen - 8]), "izardmen");
6307 else if (streq(&(Name[NameLen - 5]), "geist"))
6309 strcpy(&(Name[NameLen - 5]), "geister");
6311 else if (streq(&(Name[NameLen - 2]), "ex"))
6313 strcpy(&(Name[NameLen - 2]), "ices");
6315 else if (streq(&(Name[NameLen - 2]), "lf"))
6317 strcpy(&(Name[NameLen - 2]), "lves");
6319 else if (suffix(Name, "ch") ||
6320 suffix(Name, "sh") ||
6321 suffix(Name, "nx") ||
6322 suffix(Name, "s") ||
6325 strcpy(&(Name[NameLen]), "es");
6329 strcpy(&(Name[NameLen]), "s");
6334 * Display current pets
6336 static void do_cmd_knowledge_pets(void)
6340 monster_type *m_ptr;
6342 int show_upkeep = 0;
6343 char file_name[1024];
6346 /* Open a new file */
6347 fff = my_fopen_temp(file_name, 1024);
6350 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6352 msg_format("Failed to create temporary file %s.", file_name);
6358 /* Process the monsters (backwards) */
6359 for (i = m_max - 1; i >= 1; i--)
6361 monster_race *r_ptr;
6362 /* Access the monster */
6365 /* Ignore "dead" monsters */
6366 if (!m_ptr->r_idx) continue;
6367 r_ptr = &r_info[m_ptr->r_idx];
6369 /* Calculate "upkeep" for pets */
6374 monster_desc(pet_name, m_ptr, 0x88);
6375 fprintf(fff, "%s (%s)", pet_name, look_mon_desc(i));
6376 if (p_ptr->riding == i)
6378 fprintf(fff, " ¾èÇÏÃæ");
6380 fprintf(fff, " Riding");
6386 show_upkeep = calculate_upkeep();
6388 fprintf(fff, "----------------------------------------------\n");
6390 fprintf(fff, " ¹ç·×: %d ɤ¤Î¥Ú¥Ã¥È\n", t_friends);
6391 fprintf(fff, " °Ý»ý¥³¥¹¥È: %d%% MP\n", show_upkeep);
6393 fprintf(fff, " Total: %d pet%s.\n",
6394 t_friends, (t_friends == 1 ? "" : "s"));
6395 fprintf(fff, " Upkeep: %d%% mana.\n", show_upkeep);
6400 /* Close the file */
6403 /* Display the file contents */
6405 show_file(TRUE, file_name, "¸½ºß¤Î¥Ú¥Ã¥È", 0, 0);
6407 show_file(TRUE, file_name, "Current Pets", 0, 0);
6411 /* Remove the file */
6419 * Note that the player ghosts are ignored. XXX XXX XXX
6421 static void do_cmd_knowledge_kill_count(void)
6429 char file_name[1024];
6434 /* Open a new file */
6435 fff = my_fopen_temp(file_name, 1024);
6439 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6441 msg_format("Failed to create temporary file %s.", file_name);
6447 /* Allocate the "who" array */
6448 C_MAKE(who, max_r_idx, s16b);
6451 /* Monsters slain */
6454 for (kk = 1; kk < max_r_idx; kk++)
6456 monster_race *r_ptr = &r_info[kk];
6458 if (r_ptr->flags1 & (RF1_UNIQUE))
6460 bool dead = (r_ptr->max_num == 0);
6469 s16b This = r_ptr->r_pkills;
6480 fprintf(fff,"¤¢¤Ê¤¿¤Ï¤Þ¤ÀŨ¤òÅݤ·¤Æ¤¤¤Ê¤¤¡£\n\n");
6482 fprintf(fff,"You have defeated no enemies yet.\n\n");
6485 else if (Total == 1)
6487 fprintf(fff,"¤¢¤Ê¤¿¤Ï°ìɤ¤ÎŨ¤òÅݤ·¤Æ¤¤¤ë¡£\n\n");
6489 fprintf(fff,"You have defeated one enemy.\n\n");
6494 fprintf(fff,"¤¢¤Ê¤¿¤Ï %lu ɤ¤ÎŨ¤òÅݤ·¤Æ¤¤¤ë¡£\n\n", Total);
6496 fprintf(fff,"You have defeated %lu enemies.\n\n", Total);
6503 /* Scan the monsters */
6504 for (i = 1; i < max_r_idx; i++)
6506 monster_race *r_ptr = &r_info[i];
6508 /* Use that monster */
6509 if (r_ptr->name) who[n++] = i;
6512 /* Select the sort method */
6513 ang_sort_comp = ang_sort_comp_hook;
6514 ang_sort_swap = ang_sort_swap_hook;
6516 /* Sort the array by dungeon depth of monsters */
6517 ang_sort(who, &why, n);
6519 /* Scan the monster races */
6520 for (k = 0; k < n; k++)
6522 monster_race *r_ptr = &r_info[who[k]];
6524 if (r_ptr->flags1 & (RF1_UNIQUE))
6526 bool dead = (r_ptr->max_num == 0);
6530 /* Print a message */
6531 fprintf(fff, " %s\n",
6532 (r_name + r_ptr->name));
6538 s16b This = r_ptr->r_pkills;
6543 /* p,t¤Ï¿Í¤È¿ô¤¨¤ë by ita*/
6544 if(strchr("pt",r_ptr->d_char))
6545 fprintf(fff, " %3d ¿Í¤Î %s\n", This, r_name + r_ptr->name);
6547 fprintf(fff, " %3d ɤ¤Î %s\n", This, r_name + r_ptr->name);
6551 if (strstr(r_name + r_ptr->name, "coins"))
6553 fprintf(fff, " 1 pile of %s\n", (r_name + r_ptr->name));
6557 fprintf(fff, " 1 %s\n", (r_name + r_ptr->name));
6563 strcpy(ToPlural, (r_name + r_ptr->name));
6564 plural_aux(ToPlural);
6565 fprintf(fff, " %d %s\n", This, ToPlural);
6575 fprintf(fff,"----------------------------------------------\n");
6577 fprintf(fff," ¹ç·×: %lu ɤ¤òÅݤ·¤¿¡£\n", Total);
6579 fprintf(fff," Total: %lu creature%s killed.\n",
6580 Total, (Total == 1 ? "" : "s"));
6584 /* Free the "who" array */
6585 C_KILL(who, max_r_idx, s16b);
6587 /* Close the file */
6590 /* Display the file contents */
6592 show_file(TRUE, file_name, "Åݤ·¤¿Å¨¤Î¿ô", 0, 0);
6594 show_file(TRUE, file_name, "Kill Count", 0, 0);
6598 /* Remove the file */
6604 * Display known objects
6606 static void do_cmd_knowledge_objects(void)
6612 char o_name[MAX_NLEN];
6614 char file_name[1024];
6617 /* Open a new file */
6618 fff = my_fopen_temp(file_name, 1024);
6621 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6623 msg_format("Failed to create temporary file %s.", file_name);
6629 /* Scan the object kinds */
6630 for (k = 1; k < max_k_idx; k++)
6632 object_kind *k_ptr = &k_info[k];
6634 /* Hack -- skip artifacts */
6635 if (k_ptr->gen_flags & (TRG_INSTA_ART)) continue;
6637 /* List known flavored objects */
6638 if (k_ptr->flavor && k_ptr->aware)
6641 object_type object_type_body;
6643 /* Get local object */
6644 i_ptr = &object_type_body;
6646 /* Create fake object */
6647 object_prep(i_ptr, k);
6649 /* Describe the object */
6650 object_desc_store(o_name, i_ptr, FALSE, 0);
6652 /* Print a message */
6653 fprintf(fff, " %s\n", o_name);
6657 /* Close the file */
6660 /* Display the file contents */
6662 show_file(TRUE, file_name, "´ûÃΤΥ¢¥¤¥Æ¥à", 0, 0);
6664 show_file(TRUE, file_name, "Known Objects", 0, 0);
6668 /* Remove the file */
6674 * List virtues & status
6677 void do_cmd_knowledge_kubi(void)
6682 char file_name[1024];
6685 /* Open a new file */
6686 fff = my_fopen_temp(file_name, 1024);
6689 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6691 msg_format("Failed to create temporary file %s.", file_name);
6700 fprintf(fff, "º£Æü¤Î¥¿¡¼¥²¥Ã¥È : %s\n", (p_ptr->today_mon ? r_name + r_info[p_ptr->today_mon].name : "ÉÔÌÀ"));
6702 fprintf(fff, "¾Þ¶â¼ó¥ê¥¹¥È\n");
6704 fprintf(fff, "Today target : %s\n", (p_ptr->today_mon ? r_name + r_info[p_ptr->today_mon].name : "unknown"));
6706 fprintf(fff, "List of wanted monsters\n");
6708 for (i = 0; i < MAX_KUBI; i++)
6710 fprintf(fff,"%-40s ---- ",r_name + r_info[(kubi_r_idx[i] > 10000 ? kubi_r_idx[i] - 10000 : kubi_r_idx[i])].name);
6711 if (kubi_r_idx[i] > 10000)
6713 fprintf(fff, "ºÑ\n");
6715 fprintf(fff, "done\n");
6718 fprintf(fff, "$%d\n", 300 * (r_info[kubi_r_idx[i]].level + 1));
6722 /* Close the file */
6725 /* Display the file contents */
6727 show_file(TRUE, file_name, "¾Þ¶â¼ó¤Î°ìÍ÷", 0, 0);
6729 show_file(TRUE, file_name, "Wanted monsters", 0, 0);
6733 /* Remove the file */
6738 * List virtues & status
6741 void do_cmd_knowledge_virtues(void)
6745 char file_name[1024];
6748 /* Open a new file */
6749 fff = my_fopen_temp(file_name, 1024);
6752 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6754 msg_format("Failed to create temporary file %s.", file_name);
6763 fprintf(fff, "¸½ºß¤Î°À : %s\n\n", your_alignment());
6765 fprintf(fff, "Your alighnment : %s\n\n", your_alignment());
6770 /* Close the file */
6773 /* Display the file contents */
6775 show_file(TRUE, file_name, "Ȭ¤Ä¤ÎÆÁ", 0, 0);
6777 show_file(TRUE, file_name, "Virtues", 0, 0);
6781 /* Remove the file */
6789 void do_cmd_knowledge_dungeon(void)
6793 char file_name[1024];
6797 /* Open a new file */
6798 fff = my_fopen_temp(file_name, 1024);
6801 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6803 msg_format("Failed to create temporary file %s.", file_name);
6811 for (i = 1; i < max_d_idx; i++)
6815 if (!d_info[i].maxdepth) continue;
6816 if (!max_dlv[i]) continue;
6817 if (d_info[i].final_guardian)
6819 if (!r_info[d_info[i].final_guardian].max_num) seiha = TRUE;
6821 else if (max_dlv[i] == d_info[i].maxdepth) seiha = TRUE;
6823 fprintf(fff,"%c%-12s : %3d ³¬\n", seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]);
6825 fprintf(fff,"%c%-16s : level %3d\n", seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]);
6830 /* Close the file */
6833 /* Display the file contents */
6835 show_file(TRUE, file_name, "º£¤Þ¤Ç¤ËÆþ¤Ã¤¿¥À¥ó¥¸¥ç¥ó", 0, 0);
6837 show_file(TRUE, file_name, "Dungeon", 0, 0);
6841 /* Remove the file */
6846 * List virtues & status
6849 static void do_cmd_knowledge_stat(void)
6853 char file_name[1024];
6856 /* Open a new file */
6857 fff = my_fopen_temp(file_name, 1024);
6860 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6862 msg_format("Failed to create temporary file %s.", file_name);
6870 percent = (int)(((long)player_hp[PY_MAX_LEVEL - 1] * 200L) /
6871 (2 * p_ptr->hitdie +
6872 ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1))));
6875 if (p_ptr->knowledge & KNOW_HPRATE) fprintf(fff, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : %d/100\n\n", percent);
6876 else fprintf(fff, "¸½ºß¤ÎÂÎÎÏ¥é¥ó¥¯ : ???\n\n");
6877 fprintf(fff, "ǽÎϤκÇÂçÃÍ\n\n");
6879 if (p_ptr->knowledge & KNOW_HPRATE) fprintf(fff, "Your current Life Rating is %d/100.\n\n", percent);
6880 else fprintf(fff, "Your current Life Rating is ???.\n\n");
6881 fprintf(fff, "Limits of maximum stats\n\n");
6883 for (v_nr = 0; v_nr < 6; v_nr++)
6885 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);
6886 else fprintf(fff, "%s ???\n", stat_names[v_nr]);
6892 /* Close the file */
6895 /* Display the file contents */
6897 show_file(TRUE, file_name, "¼«Ê¬¤Ë´Ø¤¹¤ë¾ðÊó", 0, 0);
6899 show_file(TRUE, file_name, "HP-rate & Max stat", 0, 0);
6903 /* Remove the file */
6908 * Print quest status of all active quests
6910 static void do_cmd_knowledge_quests(void)
6913 char file_name[1024];
6915 char rand_tmp_str[120] = "\0";
6917 monster_race *r_ptr;
6919 int rand_level = 100;
6922 /* Open a new file */
6923 fff = my_fopen_temp(file_name, 1024);
6926 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
6928 msg_format("Failed to create temporary file %s.", file_name);
6935 fprintf(fff, "¡Ô¿ë¹ÔÃæ¤Î¥¯¥¨¥¹¥È¡Õ\n");
6937 fprintf(fff, "< Current Quest >\n");
6940 for (i = 1; i < max_quests; i++)
6942 /* No info from "silent" quests */
6943 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
6945 if (quest[i].status == QUEST_STATUS_TAKEN || quest[i].status == QUEST_STATUS_COMPLETED)
6950 /* Clear the text */
6951 for (j = 0; j < 10; j++)
6953 quest_text[j][0] = '\0';
6956 quest_text_line = 0;
6960 /* Set the quest number temporary */
6961 old_quest = p_ptr->inside_quest;
6962 p_ptr->inside_quest = i;
6964 /* Get the quest text */
6965 init_flags = INIT_SHOW_TEXT;
6967 process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
6969 /* Reset the old quest number */
6970 p_ptr->inside_quest = old_quest;
6972 if (quest[i].type != QUEST_TYPE_RANDOM)
6974 char note[80] = "\0";
6976 if (quest[i].status == QUEST_STATUS_TAKEN)
6978 if (quest[i].type == QUEST_TYPE_KILL_LEVEL || quest[i].type == QUEST_TYPE_KILL_ANY_LEVEL)
6980 r_ptr = &r_info[quest[i].r_idx];
6981 strcpy(name, r_name + r_ptr->name);
6982 if (quest[i].max_num > 1)
6985 sprintf(note," - %d ÂΤÎ%s¤òÅݤ¹¡£(¤¢¤È %d ÂÎ)",quest[i].max_num, name, quest[i].max_num-quest[i].cur_num);
6988 sprintf(note," - kill %d %s, have killed %d.",quest[i].max_num, name, quest[i].cur_num);
6993 sprintf(note," - %s¤òÅݤ¹¡£",name);
6995 sprintf(note," - kill %s.",name);
6998 else if (quest[i].type == QUEST_TYPE_KILL_NUMBER)
7001 sprintf(note," - %d ÂΤΥâ¥ó¥¹¥¿¡¼¤òÅݤ¹¡£(¤¢¤È %d ÂÎ)",quest[i].max_num, quest[i].max_num-quest[i].cur_num);
7003 sprintf(note," - Kill %d monsters, have killed %d.",quest[i].max_num, quest[i].cur_num);
7006 else if (quest[i].type == QUEST_TYPE_FIND_ARTIFACT)
7008 strcpy(name, a_name + a_info[quest[i].k_idx].name);
7010 sprintf(note," - %s¤ò¸«¤Ä¤±½Ð¤¹¡£", name);
7012 sprintf(note," - Find out %s.", name);
7015 else if (quest[i].type == QUEST_TYPE_FIND_EXIT)
7017 sprintf(note," - õº÷¤¹¤ë¡£");
7019 sprintf(note," - Search.");
7021 else if (quest[i].type == QUEST_TYPE_KILL_ALL)
7023 sprintf(note," - Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òÅݤ¹¡£");
7025 sprintf(note," - Kill all monsters.");
7029 /* Print the quest info */
7031 sprintf(tmp_str, "%s (´í¸±ÅÙ:%d³¬ÁêÅö)%s\n",
7033 sprintf(tmp_str, "%s (Danger level: %d)%s\n",
7036 quest[i].name, quest[i].level, note);
7038 fprintf(fff, tmp_str);
7040 if (quest[i].status == QUEST_STATUS_COMPLETED)
7043 sprintf(tmp_str, " ¥¯¥¨¥¹¥ÈãÀ® - ¤Þ¤ÀÊó½·¤ò¼õ¤±¤È¤Ã¤Æ¤Ê¤¤¡£\n");
7045 sprintf(tmp_str, " Quest Completed - Unrewarded\n");
7049 fprintf(fff, tmp_str);
7055 while (quest_text[j][0] && j < 10)
7057 fprintf(fff, " %s\n", quest_text[j]);
7062 else if ((quest[i].type == QUEST_TYPE_RANDOM) &&
7063 (quest[i].level < rand_level))
7066 rand_level = quest[i].level;
7068 if (max_dlv[DUNGEON_ANGBAND] >= rand_level)
7070 /* Print the quest info */
7071 r_ptr = &r_info[quest[i].r_idx];
7072 strcpy(name, r_name + r_ptr->name);
7074 if (quest[i].max_num > 1)
7077 sprintf(rand_tmp_str,"%s (%d ³¬) - %d ÂΤÎ%s¤òÅݤ¹¡£(¤¢¤È %d ÂÎ)\n",
7078 quest[i].name, quest[i].level,
7079 quest[i].max_num, name, quest[i].max_num-quest[i].cur_num);
7083 sprintf(rand_tmp_str,"%s (Dungeon level: %d)\n Kill %d %s, have killed %d.\n",
7084 quest[i].name, quest[i].level,
7085 quest[i].max_num, name, quest[i].cur_num);
7092 sprintf(rand_tmp_str,"%s (%d ³¬) - %s¤òÅݤ¹¡£\n",
7094 sprintf(rand_tmp_str,"%s (Dungeon level: %d)\n Kill %s.\n",
7097 quest[i].name, quest[i].level, name);
7104 /* Print the current random quest */
7105 if (rand_tmp_str[0]) fprintf(fff, rand_tmp_str);
7108 if (!total) fprintf(fff, "¤Ê¤·\n");
7110 if (!total) fprintf(fff, "Nothing.\n");
7114 fprintf(fff, "\n¡ÔãÀ®¤·¤¿¥¯¥¨¥¹¥È¡Õ\n");
7116 fprintf(fff, "\n< Completed Quest >\n");
7119 for (i = 1; i < max_quests; i++)
7121 /* No info from "silent" quests */
7122 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
7124 if (quest[i].status == QUEST_STATUS_FINISHED)
7130 if (i < MIN_RANDOM_QUEST)
7132 /* Set the quest number temporary */
7133 old_quest = p_ptr->inside_quest;
7134 p_ptr->inside_quest = i;
7137 init_flags = INIT_ASSIGN;
7139 process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
7141 /* Reset the old quest number */
7142 p_ptr->inside_quest = old_quest;
7145 if ((i >= MIN_RANDOM_QUEST) && quest[i].r_idx)
7147 /* Print the quest info */
7149 sprintf(tmp_str, "%s (%d³¬) - ¥ì¥Ù¥ë%d\n",
7151 sprintf(tmp_str, "%s (Dungeon level: %d) - level %d\n",
7154 r_name+r_info[quest[i].r_idx].name, quest[i].level, quest[i].complev);
7158 /* Print the quest info */
7160 sprintf(tmp_str, "%s (´í¸±ÅÙ:%d³¬ÁêÅö) - ¥ì¥Ù¥ë%d\n",
7162 sprintf(tmp_str, "%s (Danger level: %d) - level %d\n",
7165 quest[i].name, quest[i].level, quest[i].complev);
7168 fprintf(fff, tmp_str);
7172 if (!total) fprintf(fff, "¤Ê¤·\n");
7174 if (!total) fprintf(fff, "Nothing.\n");
7178 fprintf(fff, "\n¡Ô¼ºÇÔ¤·¤¿¥¯¥¨¥¹¥È¡Õ\n");
7180 fprintf(fff, "\n< Failed Quest >\n");
7183 for (i = 1; i < max_quests; i++)
7185 /* No info from "silent" quests */
7186 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
7188 if ((quest[i].status == QUEST_STATUS_FAILED_DONE) || (quest[i].status == QUEST_STATUS_FAILED))
7194 if (i < MIN_RANDOM_QUEST)
7196 /* Set the quest number temporary */
7197 old_quest = p_ptr->inside_quest;
7198 p_ptr->inside_quest = i;
7200 /* Get the quest text */
7201 init_flags = INIT_ASSIGN;
7203 process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
7205 /* Reset the old quest number */
7206 p_ptr->inside_quest = old_quest;
7209 if ((i >= MIN_RANDOM_QUEST) && quest[i].r_idx)
7211 /* Print the quest info */
7213 sprintf(tmp_str, "%s (%d³¬) - ¥ì¥Ù¥ë%d\n",
7215 sprintf(tmp_str, "%s (Dungeon level: %d) - level %d\n",
7218 r_name+r_info[quest[i].r_idx].name, quest[i].level, quest[i].complev);
7222 /* Print the quest info */
7224 sprintf(tmp_str, "%s (´í¸±ÅÙ:%d³¬ÁêÅö) - ¥ì¥Ù¥ë%d\n",
7226 sprintf(tmp_str, "%s (Danger level: %d) - level %d\n",
7229 quest[i].name, quest[i].level, quest[i].complev);
7231 fprintf(fff, tmp_str);
7235 if (!total) fprintf(fff, "¤Ê¤·\n");
7237 if (!total) fprintf(fff, "Nothing.\n");
7242 fprintf(fff, "\n¡Ô»Ä¤ê¤Î¥é¥ó¥À¥à¥¯¥¨¥¹¥È¡Õ\n");
7244 fprintf(fff, "\n< Remaining Random Quest >\n");
7247 for (i = 1; i < max_quests; i++)
7249 /* No info from "silent" quests */
7250 if (quest[i].flags & QUEST_FLAG_SILENT) continue;
7252 if ((quest[i].type == QUEST_TYPE_RANDOM) && (quest[i].status == QUEST_STATUS_TAKEN))
7256 /* Print the quest info */
7258 sprintf(tmp_str, "%s (%d³¬, %s)\n",
7260 sprintf(tmp_str, "%s (%d, %s)\n",
7263 quest[i].name, quest[i].level, r_name+r_info[quest[i].r_idx].name);
7264 fprintf(fff, tmp_str);
7268 if (!total) fprintf(fff, "¤Ê¤·\n");
7270 if (!total) fprintf(fff, "Nothing.\n");
7274 /* Close the file */
7277 /* Display the file contents */
7279 show_file(TRUE, file_name, "¥¯¥¨¥¹¥ÈãÀ®¾õ¶·", 0, 0);
7281 show_file(TRUE, file_name, "Quest status", 0, 0);
7285 /* Remove the file */
7295 void do_cmd_knowledge_home(void)
7300 char file_name[1024];
7302 char o_name[MAX_NLEN];
7305 process_dungeon_file("w_info_j.txt", 0, 0, max_wild_y, max_wild_x);
7307 /* Open a new file */
7308 fff = my_fopen_temp(file_name, 1024);
7311 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
7313 msg_format("Failed to create temporary file %s.", file_name);
7321 /* Print all homes in the different towns */
7322 st_ptr = &town[1].store[STORE_HOME];
7324 /* Home -- if anything there */
7325 if (st_ptr->stock_num)
7327 /* Header with name of the town */
7329 fprintf(fff, " [ ²æ¤¬²È¤Î¥¢¥¤¥Æ¥à ]\n");
7331 fprintf(fff, " [Home Inventory]\n");
7335 /* Dump all available items */
7336 for (i = 0; i < st_ptr->stock_num; i++)
7339 if ((i % 12) == 0) fprintf(fff, "\n ( %d ¥Ú¡¼¥¸ )\n", x++);
7340 object_desc(o_name, &st_ptr->stock[i], TRUE, 3);
7341 if (strlen(o_name) <= 80-3)
7343 fprintf(fff, "%c%s %s\n", I2A(i%12), paren, o_name);
7349 for (n = 0, t = o_name; n < 80-3; n++, t++)
7350 if(iskanji(*t)) {t++; n++;}
7351 if (n == 81-3) n = 79-3; /* ºÇ¸å¤¬´Á»úȾʬ */
7353 fprintf(fff, "%c%s %.*s\n", I2A(i%12), paren, n, o_name);
7354 fprintf(fff, " %.77s\n", o_name+n);
7357 object_desc(o_name, &st_ptr->stock[i], TRUE, 3);
7358 fprintf(fff, "%c%s %s\n", I2A(i%12), paren, o_name);
7363 /* Add an empty line */
7364 fprintf(fff, "\n\n");
7368 /* Close the file */
7371 /* Display the file contents */
7373 show_file(TRUE, file_name, "²æ¤¬²È¤Î¥¢¥¤¥Æ¥à", 0, 0);
7375 show_file(TRUE, file_name, "Home Inventory", 0, 0);
7379 /* Remove the file */
7385 * Check the status of "autopick"
7387 static void do_cmd_knowledge_autopick(void)
7391 char file_name[1024];
7393 /* Open a new file */
7394 fff = my_fopen_temp(file_name, 1024);
7399 msg_format("°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿¡£", file_name);
7401 msg_format("Failed to create temporary file %s.", file_name);
7410 fprintf(fff, "¼«Æ°Ç˲õ/½¦¤¤¤Ë¤Ï²¿¤âÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
7412 fprintf(fff, "No preference for auto picker/destroyer.");
7418 fprintf(fff, " ¼«Æ°½¦¤¤/Ç˲õ¤Ë¤Ï¸½ºß %d¹ÔÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n\n", max_autopick);
7420 fprintf(fff, " There are %d registered lines for auto picker/destroyer.\n\n", max_autopick);
7424 for (k = 0; k < max_autopick; k++)
7427 byte act = autopick_list[k].action;
7428 if (act & DONT_AUTOPICK)
7436 else if (act & DO_AUTODESTROY)
7453 if (act & DO_DISPLAY)
7454 fprintf(fff, "%11s", format("[%s]", tmp));
7456 fprintf(fff, "%11s", format("(%s)", tmp));
7458 tmp = autopick_line_from_entry(&autopick_list[k]);
7459 fprintf(fff, " %s", tmp);
7463 /* Close the file */
7465 /* Display the file contents */
7467 show_file(TRUE, file_name, "¼«Æ°½¦¤¤/Ç˲õ ÀßÄê¥ê¥¹¥È", 0, 0);
7469 show_file(TRUE, file_name, "Auto-picker/Destroyer", 0, 0);
7472 /* Remove the file */
7478 * Interact with "knowledge"
7480 void do_cmd_knowledge(void)
7483 /* File type is "TEXT" */
7484 FILE_TYPE(FILE_TYPE_TEXT);
7485 /* Save the screen */
7487 /* Interact until done */
7492 /* Ask for a choice */
7494 prt(format("%d/2 ¥Ú¡¼¥¸", (p+1)), 2, 65);
7495 prt("¸½ºß¤ÎÃ챤ò³Îǧ¤¹¤ë", 3, 0);
7497 prt(format("page %d/2", (p+1)), 2, 65);
7498 prt("Display current knowledge", 3, 0);
7501 /* Give some choices */
7504 prt("(1) ´ûÃΤÎÅÁÀâ¤Î¥¢¥¤¥Æ¥à ¤Î°ìÍ÷", 6, 5);
7505 prt("(2) ´ûÃΤΥ¢¥¤¥Æ¥à ¤Î°ìÍ÷", 7, 5);
7506 prt("(3) ´ûÃΤÎÀ¸¤¤Æ¤¤¤ë¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼ ¤Î°ìÍ÷", 8, 5);
7507 prt("(4) Åݤ·¤¿¥æ¥Ë¡¼¥¯¡¦¥â¥ó¥¹¥¿¡¼ ¤Î°ìÍ÷", 9, 5);
7508 prt("(5) Åݤ·¤¿Å¨¤Î¿ô ¤Î°ìÍ÷", 10, 5);
7509 prt("(6) ¾Þ¶â¼ó ¤Î°ìÍ÷", 11, 5);
7510 prt("(7) ¸½ºß¤Î¥Ú¥Ã¥È ¤Î°ìÍ÷", 12, 5);
7511 prt("(8) ²æ¤¬²È¤Î¥¢¥¤¥Æ¥à ¤Î°ìÍ÷", 13, 5);
7512 prt("(9) *´ÕÄê*ºÑ¤ßÁõÈ÷¤ÎÂÑÀ ¤Î°ìÍ÷", 14, 5);
7514 prt("(a) ¼«Ê¬¤Ë´Ø¤¹¤ë¾ðÊó ¤Î°ìÍ÷", 6, 5);
7515 prt("(b) ÆÍÁ³ÊÑ°Û ¤Î°ìÍ÷", 7, 5);
7516 prt("(c) Éð´ï¤Î·Ð¸³ÃÍ ¤Î°ìÍ÷", 8, 5);
7517 prt("(d) ËâË¡¤Î·Ð¸³ÃÍ ¤Î°ìÍ÷", 9, 5);
7518 prt("(e) µ»Ç½¤Î·Ð¸³ÃÍ ¤Î°ìÍ÷", 10, 5);
7519 prt("(f) ¥×¥ì¥¤¥ä¡¼¤ÎÆÁ ¤Î°ìÍ÷", 11, 5);
7520 prt("(g) Æþ¤Ã¤¿¥À¥ó¥¸¥ç¥ó ¤Î°ìÍ÷", 12, 5);
7521 prt("(h) ¼Â¹ÔÃæ¤Î¥¯¥¨¥¹¥È ¤Î°ìÍ÷", 13, 5);
7522 prt("(i) ¸½ºß¤Î¼«Æ°½¦¤¤/Ç˲õÀßÄê ¤Î°ìÍ÷", 14, 5);
7526 prt("(1) Display known artifacts", 6, 5);
7527 prt("(2) Display known objects", 7, 5);
7528 prt("(3) Display remaining uniques", 8, 5);
7529 prt("(4) Display dead uniques", 9, 5);
7530 prt("(5) Display kill count", 10, 5);
7531 prt("(6) Display wanted monsters", 11, 5);
7532 prt("(7) Display current pets", 12, 5);
7533 prt("(8) Display home inventory", 13, 5);
7534 prt("(9) Display *identified* equip.", 14, 5);
7536 prt("(a) Display about yourself", 6, 5);
7537 prt("(b) Display mutations", 7, 5);
7538 prt("(c) Display weapon proficiency", 8, 5);
7539 prt("(d) Display spell proficiency", 9, 5);
7540 prt("(e) Display misc. proficiency", 10, 5);
7541 prt("(f) Display virtues", 11, 5);
7542 prt("(g) Display dungeons", 12, 5);
7543 prt("(h) Display current quests", 13, 5);
7544 prt("(i) Display auto pick/destroy", 14, 5);
7549 prt("-³¤¯-", 16, 8);
7550 prt("ESC) È´¤±¤ë", 21, 1);
7551 prt("SPACE) ¼¡¥Ú¡¼¥¸", 21, 30);
7552 /*prt("-) Á°¥Ú¡¼¥¸", 21, 60);*/
7553 prt("¥³¥Þ¥ó¥É:", 20, 0);
7555 prt("-more-", 16, 8);
7556 prt("ESC) Exit menu", 21, 1);
7557 prt("SPACE) Next page", 21, 30);
7558 /*prt("-) Previous page", 21, 60);*/
7559 prt("Command: ", 20, 0);
7565 if (i == ESCAPE) break;
7568 case ' ': /* Page change */
7572 case '1': /* Artifacts */
7573 do_cmd_knowledge_artifacts();
7575 case '2': /* Objects */
7576 do_cmd_knowledge_objects();
7578 case '3': /* Uniques */
7579 do_cmd_knowledge_uniques();
7581 case '4': /* Uniques */
7582 do_cmd_knowledge_uniques_dead();
7584 case '5': /* Kill count */
7585 do_cmd_knowledge_kill_count();
7587 case '6': /* wanted */
7588 do_cmd_knowledge_kubi();
7590 case '7': /* Pets */
7591 do_cmd_knowledge_pets();
7593 case '8': /* Home */
7594 do_cmd_knowledge_home();
7596 case '9': /* Resist list */
7597 do_cmd_knowledge_inven();
7600 case 'a': /* Max stat */
7601 do_cmd_knowledge_stat();
7603 case 'b': /* Mutations */
7604 do_cmd_knowledge_mutations();
7606 case 'c': /* weapon-exp */
7607 do_cmd_knowledge_weapon_exp();
7609 case 'd': /* spell-exp */
7610 do_cmd_knowledge_spell_exp();
7612 case 'e': /* skill-exp */
7613 do_cmd_knowledge_skill_exp();
7615 case 'f': /* Virtues */
7616 do_cmd_knowledge_virtues();
7618 case 'g': /* Dungeon */
7619 do_cmd_knowledge_dungeon();
7621 case 'h': /* Quests */
7622 do_cmd_knowledge_quests();
7624 case 'i': /* Autopick */
7625 do_cmd_knowledge_autopick();
7627 default: /* Unknown option */
7630 /* Flush messages */
7633 /* Restore the screen */
7639 * Check on the status of an active quest
7641 void do_cmd_checkquest(void)
7643 /* File type is "TEXT" */
7644 FILE_TYPE(FILE_TYPE_TEXT);
7646 /* Save the screen */
7650 do_cmd_knowledge_quests();
7652 /* Restore the screen */
7658 * Display the time and date
7660 void do_cmd_time(void)
7662 int day, hour, min, full, start, end, num;
7669 extract_day_hour_min(&day, &hour, &min);
7671 full = hour * 100 + min;
7679 strcpy(desc, "ÊѤʻþ¹ï¤À¡£");
7681 strcpy(desc, "It is a strange time.");
7687 msg_format("%d ÆüÌÜ,»þ¹ï¤Ï%d:%02d %s¤Ç¤¹¡£",
7689 msg_format("This is day %d. The time is %d:%02d %s.",
7692 day, (hour % 12 == 0) ? 12 : (hour % 12),
7693 min, (hour < 12) ? "AM" : "PM");
7696 if (!randint0(10) || p_ptr->image)
7699 path_build(buf, 1024, ANGBAND_DIR_FILE, "timefun_j.txt");
7701 path_build(buf, 1024, ANGBAND_DIR_FILE, "timefun.txt");
7708 path_build(buf, 1024, ANGBAND_DIR_FILE, "timenorm_j.txt");
7710 path_build(buf, 1024, ANGBAND_DIR_FILE, "timenorm.txt");
7715 /* Open this file */
7716 fff = my_fopen(buf, "rt");
7721 /* Find this time */
7722 while (!my_fgets(fff, buf, 1024))
7724 /* Ignore comments */
7725 if (!buf[0] || (buf[0] == '#')) continue;
7727 /* Ignore invalid lines */
7728 if (buf[1] != ':') continue;
7730 /* Process 'Start' */
7733 /* Extract the starting time */
7734 start = atoi(buf + 2);
7736 /* Assume valid for an hour */
7746 /* Extract the ending time */
7747 end = atoi(buf + 2);
7753 /* Ignore incorrect range */
7754 if ((start > full) || (full > end)) continue;
7756 /* Process 'Description' */
7761 /* Apply the randomizer */
7762 if (!randint0(num)) strcpy(desc, buf + 2);
7772 /* Close the file */