#include "knowledge/knowledge-features.h"
#include "knowledge/knowledge-inventory.h"
#include "knowledge/knowledge-items.h"
-#include "knowledge/knowledge-mutations.h"
#include "knowledge/knowledge-monsters.h"
+#include "knowledge/knowledge-mutations.h"
#include "knowledge/knowledge-quests.h"
#include "knowledge/knowledge-self.h"
#include "knowledge/knowledge-uniques.h"
*/
void do_cmd_knowledge(player_type *creature_ptr)
{
- int i, p = 0;
- bool need_redraw = FALSE;
- screen_save();
- while (TRUE)
- {
- Term_clear();
- prt(format(_("%d/2 ページ", "page %d/2"), (p + 1)), 2, 65);
- prt(_("現在の知識を確認する", "Display current knowledge"), 3, 0);
- if (p == 0)
- {
- prt(_("(1) 既知の伝説のアイテム の一覧", "(1) Display known artifacts"), 6, 5);
- prt(_("(2) 既知のアイテム の一覧", "(2) Display known objects"), 7, 5);
- prt(_("(3) 既知の生きているユニーク・モンスター の一覧", "(3) Display remaining uniques"), 8, 5);
- prt(_("(4) 既知のモンスター の一覧", "(4) Display known monster"), 9, 5);
- prt(_("(5) 倒した敵の数 の一覧", "(5) Display kill count"), 10, 5);
- if (!vanilla_town) prt(_("(6) 賞金首 の一覧", "(6) Display wanted monsters"), 11, 5);
- prt(_("(7) 現在のペット の一覧", "(7) Display current pets"), 12, 5);
- prt(_("(8) 我が家のアイテム の一覧", "(8) Display home inventory"), 13, 5);
- prt(_("(9) *鑑定*済み装備の耐性 の一覧", "(9) Display *identified* equip."), 14, 5);
- prt(_("(0) 地形の表示文字/タイル の一覧", "(0) Display terrain symbols."), 15, 5);
- }
- else
- {
- prt(_("(a) 自分に関する情報 の一覧", "(a) Display about yourself"), 6, 5);
- prt(_("(b) 突然変異 の一覧", "(b) Display mutations"), 7, 5);
- prt(_("(c) 武器の経験値 の一覧", "(c) Display weapon proficiency"), 8, 5);
- prt(_("(d) 魔法の経験値 の一覧", "(d) Display spell proficiency"), 9, 5);
- prt(_("(e) 技能の経験値 の一覧", "(e) Display misc. proficiency"), 10, 5);
- prt(_("(f) プレイヤーの徳 の一覧", "(f) Display virtues"), 11, 5);
- prt(_("(g) 入ったダンジョン の一覧", "(g) Display dungeons"), 12, 5);
- prt(_("(h) 実行中のクエスト の一覧", "(h) Display current quests"), 13, 5);
- prt(_("(i) 現在の自動拾い/破壊設定 の一覧", "(i) Display auto pick/destroy"), 14, 5);
- }
+ int i, p = 0;
+ bool need_redraw = FALSE;
+ screen_save();
+ while (TRUE) {
+ Term_clear();
+ prt(format(_("%d/2 ページ", "page %d/2"), (p + 1)), 2, 65);
+ prt(_("現在の知識を確認する", "Display current knowledge"), 3, 0);
+ if (p == 0) {
+ prt(_("(1) 既知の伝説のアイテム の一覧", "(1) Display known artifacts"), 6, 5);
+ prt(_("(2) 既知のアイテム の一覧", "(2) Display known objects"), 7, 5);
+ prt(_("(3) 既知の生きているユニーク・モンスター の一覧", "(3) Display remaining uniques"), 8, 5);
+ prt(_("(4) 既知の撃破したユニーク・モンスター の一覧", "(3) Display having defeated uniques"), 9, 5);
+ prt(_("(5) 既知のモンスター の一覧", "(4) Display known monster"), 10, 5);
+ prt(_("(6) 倒した敵の数 の一覧", "(5) Display kill count"), 11, 5);
+ if (!vanilla_town)
+ prt(_("(7) 賞金首 の一覧", "(6) Display wanted monsters"), 12, 5);
+ prt(_("(8) 現在のペット の一覧", "(7) Display current pets"), 13, 5);
+ prt(_("(9) 我が家のアイテム の一覧", "(8) Display home inventory"), 14, 5);
+ prt(_("(0) *鑑定*済み装備の耐性 の一覧", "(9) Display *identified* equip."), 15, 5);
+ } else {
+ prt(_("(a) 地形の表示文字/タイル の一覧", "(0) Display terrain symbols."), 6, 5);
+ prt(_("(b) 自分に関する情報 の一覧", "(a) Display about yourself"), 7, 5);
+ prt(_("(c) 突然変異 の一覧", "(b) Display mutations"), 8, 5);
+ prt(_("(d) 武器の経験値 の一覧", "(c) Display weapon proficiency"), 9, 5);
+ prt(_("(e) 魔法の経験値 の一覧", "(d) Display spell proficiency"), 10, 5);
+ prt(_("(f) 技能の経験値 の一覧", "(e) Display misc. proficiency"), 11, 5);
+ prt(_("(g) プレイヤーの徳 の一覧", "(f) Display virtues"), 12, 5);
+ prt(_("(h) 入ったダンジョン の一覧", "(g) Display dungeons"), 13, 5);
+ prt(_("(i) 実行中のクエスト の一覧", "(h) Display current quests"), 14, 5);
+ prt(_("(k) 現在の自動拾い/破壊設定 の一覧", "(i) Display auto pick/destroy"), 15, 5);
+ }
- prt(_("-続く-", "-more-"), 17, 8);
- prt(_("ESC) 抜ける", "ESC) Exit menu"), 21, 1);
- prt(_("SPACE) 次ページ", "SPACE) Next page"), 21, 30);
- prt(_("コマンド:", "Command: "), 20, 0);
- i = inkey();
+ prt(_("-続く-", "-more-"), 17, 8);
+ prt(_("ESC) 抜ける", "ESC) Exit menu"), 21, 1);
+ prt(_("SPACE) 次ページ", "SPACE) Next page"), 21, 30);
+ prt(_("コマンド:", "Command: "), 20, 0);
+ i = inkey();
- if (i == ESCAPE) break;
- switch (i)
- {
- case ' ': /* Page change */
- case '-':
- p = 1 - p;
- break;
- case '1': /* Artifacts */
- do_cmd_knowledge_artifacts(creature_ptr);
- break;
- case '2': /* Objects */
- do_cmd_knowledge_objects(creature_ptr, &need_redraw, FALSE, -1);
- break;
- case '3': /* Uniques */
- do_cmd_knowledge_uniques(creature_ptr);
- break;
- case '4': /* Monsters */
- do_cmd_knowledge_monsters(creature_ptr, &need_redraw, FALSE, -1);
- break;
- case '5': /* Kill count */
- do_cmd_knowledge_kill_count(creature_ptr);
- break;
- case '6': /* wanted */
- if (!vanilla_town) do_cmd_knowledge_bounty(creature_ptr);
- break;
- case '7': /* Pets */
- do_cmd_knowledge_pets(creature_ptr);
- break;
- case '8': /* Home */
- do_cmd_knowledge_home(creature_ptr);
- break;
- case '9': /* Resist list */
- do_cmd_knowledge_inventory(creature_ptr);
- break;
- case '0': /* Feature list */
- {
- IDX lighting_level = F_LIT_STANDARD;
- do_cmd_knowledge_features(&need_redraw, FALSE, -1, &lighting_level);
- }
- break;
- /* Next page */
- case 'a': /* Max stat */
- do_cmd_knowledge_stat(creature_ptr);
- break;
- case 'b': /* Mutations */
- do_cmd_knowledge_mutations(creature_ptr);
- break;
- case 'c': /* weapon-exp */
- do_cmd_knowledge_weapon_exp(creature_ptr);
- break;
- case 'd': /* spell-exp */
- do_cmd_knowledge_spell_exp(creature_ptr);
- break;
- case 'e': /* skill-exp */
- do_cmd_knowledge_skill_exp(creature_ptr);
- break;
- case 'f': /* Virtues */
- do_cmd_knowledge_virtues(creature_ptr);
- break;
- case 'g': /* Dungeon */
- do_cmd_knowledge_dungeon(creature_ptr);
- break;
- case 'h': /* Quests */
- do_cmd_knowledge_quests(creature_ptr);
- break;
- case 'i': /* Autopick */
- do_cmd_knowledge_autopick(creature_ptr);
- break;
- default: /* Unknown option */
- bell();
- }
+ if (i == ESCAPE)
+ break;
+ switch (i) {
+ case ' ': /* Page change */
+ case '-':
+ p = 1 - p;
+ break;
+ case '1': /* Artifacts */
+ do_cmd_knowledge_artifacts(creature_ptr);
+ break;
+ case '2': /* Objects */
+ do_cmd_knowledge_objects(creature_ptr, &need_redraw, FALSE, -1);
+ break;
+ case '3': /* Uniques */
+ do_cmd_knowledge_uniques(creature_ptr, TRUE);
+ break;
+ case '4': /* Uniques */
+ do_cmd_knowledge_uniques(creature_ptr, FALSE);
+ break;
+ case '5': /* Monsters */
+ do_cmd_knowledge_monsters(creature_ptr, &need_redraw, FALSE, -1);
+ break;
+ case '6': /* Kill count */
+ do_cmd_knowledge_kill_count(creature_ptr);
+ break;
+ case '7': /* wanted */
+ if (!vanilla_town)
+ do_cmd_knowledge_bounty(creature_ptr);
+ break;
+ case '8': /* Pets */
+ do_cmd_knowledge_pets(creature_ptr);
+ break;
+ case '9': /* Home */
+ do_cmd_knowledge_home(creature_ptr);
+ break;
+ case '0': /* Resist list */
+ do_cmd_knowledge_inventory(creature_ptr);
+ break;
+ /* Next page */
+ case 'a': /* Feature list */
+ {
+ IDX lighting_level = F_LIT_STANDARD;
+ do_cmd_knowledge_features(&need_redraw, FALSE, -1, &lighting_level);
+ break;
+ }
+ case 'b': /* Max stat */
+ do_cmd_knowledge_stat(creature_ptr);
+ break;
+ case 'c': /* Mutations */
+ do_cmd_knowledge_mutations(creature_ptr);
+ break;
+ case 'd': /* weapon-exp */
+ do_cmd_knowledge_weapon_exp(creature_ptr);
+ break;
+ case 'e': /* spell-exp */
+ do_cmd_knowledge_spell_exp(creature_ptr);
+ break;
+ case 'f': /* skill-exp */
+ do_cmd_knowledge_skill_exp(creature_ptr);
+ break;
+ case 'g': /* Virtues */
+ do_cmd_knowledge_virtues(creature_ptr);
+ break;
+ case 'h': /* Dungeon */
+ do_cmd_knowledge_dungeon(creature_ptr);
+ break;
+ case 'i': /* Quests */
+ do_cmd_knowledge_quests(creature_ptr);
+ break;
+ case 'k': /* Autopick */
+ do_cmd_knowledge_autopick(creature_ptr);
+ break;
+ default: /* Unknown option */
+ bell();
+ }
- msg_erase();
- }
+ msg_erase();
+ }
- screen_load();
- if (need_redraw) do_cmd_redraw(creature_ptr);
+ screen_load();
+ if (need_redraw)
+ do_cmd_redraw(creature_ptr);
}
#include "knowledge-items.h"
#include "system/angband.h"
-/*
- * Display known uniques
- * With "XTRA HACK UNIQHIST" (Originally from XAngband)
+/*!
+ * @param is_alive 生きているユニークのリストならばTRUE、撃破したユニークのリストならばFALSE
*/
-void do_cmd_knowledge_uniques(player_type *creature_ptr)
+void do_cmd_knowledge_uniques(player_type *creature_ptr, bool is_alive)
{
u16b why = 2;
IDX *who;
- int n_alive[10];
- int n_alive_surface = 0;
- int n_alive_over100 = 0;
- int n_alive_total = 0;
+ int num_uniques[10];
+ int num_uniques_surface = 0;
+ int num_uniques_over100 = 0;
+ int num_uniques_total = 0;
int max_lev = -1;
for (IDX i = 0; i < 10; i++)
- n_alive[i] = 0;
+ num_uniques[i] = 0;
FILE *fff = NULL;
GAME_TEXT file_name[FILE_NAME_SIZE];
continue;
if (!r_ptr->rarity || ((r_ptr->rarity > 100) && !(r_ptr->flags1 & RF1_QUESTOR)))
continue;
- if (r_ptr->max_num == 0)
- continue;
+ if (is_alive) {
+ if (r_ptr->max_num == 0)
+ continue;
+ } else {
+ if (r_ptr->max_num > 0)
+ continue;
+ }
if (r_ptr->level) {
int lev = (r_ptr->level - 1) / 10;
if (lev < 10) {
- n_alive[lev]++;
+ num_uniques[lev]++;
if (max_lev < lev)
max_lev = lev;
} else
- n_alive_over100++;
+ num_uniques_over100++;
} else
- n_alive_surface++;
+ num_uniques_surface++;
who[n++] = i;
}
ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
- if (n_alive_surface) {
- fprintf(fff, _(" 地上 生存: %3d体\n", " Surface alive: %3d\n"), n_alive_surface);
- n_alive_total += n_alive_surface;
+ if (num_uniques_surface) {
+ concptr surface_desc
+ = is_alive ? _(" 地上 生存: %3d体\n", " Surface alive: %3d\n") : _(" 地上 死亡: %3d体\n", " Surface dead: %3d\n");
+ fprintf(fff, surface_desc, num_uniques_surface);
+ num_uniques_total += num_uniques_surface;
}
for (IDX i = 0; i <= max_lev; i++) {
- fprintf(fff, _("%3d-%3d階 生存: %3d体\n", "Level %3d-%3d alive: %3d\n"), 1 + i * 10, 10 + i * 10, n_alive[i]);
- n_alive_total += n_alive[i];
+ concptr dungeon_desc
+ = is_alive ? _("%3d-%3d階 生存: %3d体\n", "Level %3d-%3d alive: %3d\n") : _("%3d-%3d階 死亡: %3d体\n", "Level %3d-%3d dead: %3d\n");
+ fprintf(fff, dungeon_desc, 1 + i * 10, 10 + i * 10, num_uniques[i]);
+ num_uniques_total += num_uniques[i];
}
- if (n_alive_over100) {
- fprintf(fff, _("101- 階 生存: %3d体\n", "Level 101- alive: %3d\n"), n_alive_over100);
- n_alive_total += n_alive_over100;
+ if (num_uniques_over100) {
+ concptr deep_desc
+ = is_alive ? _("101- 階 生存: %3d体\n", "Level 101- alive: %3d\n") : _("101- 階 死亡: %3d体\n", "Level 101- dead: %3d\n");
+ fprintf(fff, deep_desc, num_uniques_over100);
+ num_uniques_total += num_uniques_over100;
}
- if (n_alive_total) {
+ if (num_uniques_total) {
fputs(_("--------- -----------\n", "------------- ----------\n"), fff);
- fprintf(fff, _(" 合計 生存: %3d体\n\n", " Total alive: %3d\n\n"), n_alive_total);
+ concptr total_desc
+ = is_alive ? _(" 合計 生存: %3d体\n\n", " Total alive: %3d\n\n") : _(" 合計 死亡: %3d体\n\n", " Total dead: %3d\n\n");
+ fprintf(fff, total_desc, num_uniques_total);
} else {
- fputs(_("現在は既知の生存ユニークはいません。\n", "No known uniques alive.\n"), fff);
+ concptr no_unique_desc = is_alive ? _("現在は既知の生存ユニークはいません。\n", "No known uniques alive.\n")
+ : _("現在は既知の撃破ユニークはいません。\n", "No known uniques dead.\n");
+ fputs(no_unique_desc, fff);
}
for (int k = 0; k < n; k++) {
C_KILL(who, max_r_idx, s16b);
my_fclose(fff);
- (void)show_file(creature_ptr, TRUE, file_name, _("まだ生きているユニーク・モンスター", "Alive Uniques"), 0, 0);
+ concptr title_desc = is_alive ? _("まだ生きているユニーク・モンスター", "Alive Uniques") : _("もう撃破したユニーク・モンスター", "Dead Uniques");
+ (void)show_file(creature_ptr, TRUE, file_name, title_desc, 0, 0);
fd_kill(file_name);
}