2 * @brief 既知/存命のユニークを表示する
7 #include "system/angband.h"
8 #include "knowledge-items.h"
9 #include "cmd/dump-util.h"
11 #include "core/show-file.h"
14 * Display known uniques
15 * With "XTRA HACK UNIQHIST" (Originally from XAngband)
17 void do_cmd_knowledge_uniques(player_type *creature_ptr)
22 int n_alive_surface = 0;
23 int n_alive_over100 = 0;
24 int n_alive_total = 0;
26 for (IDX i = 0; i < 10; i++)
30 GAME_TEXT file_name[FILE_NAME_SIZE];
31 if (!open_temporary_file(&fff, file_name)) return;
33 C_MAKE(who, max_r_idx, MONRACE_IDX);
35 for (IDX i = 1; i < max_r_idx; i++)
37 monster_race *r_ptr = &r_info[i];
38 if (!r_ptr->name) continue;
39 if (!(r_ptr->flags1 & RF1_UNIQUE)) continue;
40 if (!cheat_know && !r_ptr->r_sights) continue;
41 if (!r_ptr->rarity || ((r_ptr->rarity > 100) && !(r_ptr->flags1 & RF1_QUESTOR))) continue;
42 if (r_ptr->max_num == 0) continue;
46 int lev = (r_ptr->level - 1) / 10;
50 if (max_lev < lev) max_lev = lev;
61 ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
64 fprintf(fff, _(" 地上 生存: %3d体\n", " Surface alive: %3d\n"), n_alive_surface);
65 n_alive_total += n_alive_surface;
68 for (IDX i = 0; i <= max_lev; i++)
70 fprintf(fff, _("%3d-%3d階 生存: %3d体\n", "Level %3d-%3d alive: %3d\n"), 1 + i * 10, 10 + i * 10, n_alive[i]);
71 n_alive_total += n_alive[i];
76 fprintf(fff, _("101- 階 生存: %3d体\n", "Level 101- alive: %3d\n"), n_alive_over100);
77 n_alive_total += n_alive_over100;
82 fputs(_("--------- -----------\n", "------------- ----------\n"), fff);
83 fprintf(fff, _(" 合計 生存: %3d体\n\n", " Total alive: %3d\n\n"), n_alive_total);
87 fputs(_("現在は既知の生存ユニークはいません。\n", "No known uniques alive.\n"), fff);
90 for (int k = 0; k < n; k++)
92 monster_race *r_ptr = &r_info[who[k]];
93 fprintf(fff, _(" %s (レベル%d)\n", " %s (level %d)\n"), r_name + r_ptr->name, (int)r_ptr->level);
96 C_KILL(who, max_r_idx, s16b);
98 (void)show_file(creature_ptr, TRUE, file_name, _("まだ生きているユニーク・モンスター", "Alive Uniques"), 0, 0);