From: Hourier Date: Thu, 4 Jun 2020 14:27:53 +0000 (+0900) Subject: [Implement] #40465 撃破したユニークモンスターリストを出力するようにした/ Added output the list of having defeat... X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a426db52bcf554b8ce2c961e17aeac426edaec5c;p=hengband%2Fhengband.git [Implement] #40465 撃破したユニークモンスターリストを出力するようにした/ Added output the list of having defeated unique monsters --- diff --git a/src/cmd-io/cmd-knowledge.c b/src/cmd-io/cmd-knowledge.c index fde289d73..abeca5190 100644 --- a/src/cmd-io/cmd-knowledge.c +++ b/src/cmd-io/cmd-knowledge.c @@ -6,8 +6,8 @@ #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" @@ -17,121 +17,124 @@ */ 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); } diff --git a/src/knowledge/knowledge-uniques.c b/src/knowledge/knowledge-uniques.c index ea0b816b3..cacada5b5 100644 --- a/src/knowledge/knowledge-uniques.c +++ b/src/knowledge/knowledge-uniques.c @@ -10,21 +10,20 @@ #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]; @@ -43,44 +42,59 @@ void do_cmd_knowledge_uniques(player_type *creature_ptr) 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++) { @@ -90,6 +104,7 @@ void do_cmd_knowledge_uniques(player_type *creature_ptr) 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); } diff --git a/src/knowledge/knowledge-uniques.h b/src/knowledge/knowledge-uniques.h index 2cbf5a8f0..0693657de 100644 --- a/src/knowledge/knowledge-uniques.h +++ b/src/knowledge/knowledge-uniques.h @@ -1,3 +1,3 @@ #pragma once -void do_cmd_knowledge_uniques(player_type *creature_ptr); +void do_cmd_knowledge_uniques(player_type *creature_ptr, bool is_alive);