From 73fbfeef579d54c29d8a6f6cc0592acff2777925 Mon Sep 17 00:00:00 2001 From: Hourier Date: Thu, 23 Apr 2020 22:50:08 +0900 Subject: [PATCH] [Refactor] #40236 Separated knowledge-uniques.c/h from cmd-dump.c --- Hengband_vcs2017/Hengband/Hengband.vcxproj | 2 + Hengband_vcs2017/Hengband/Hengband.vcxproj.filters | 6 ++ src/Makefile.am | 1 + src/cmd/cmd-dump.c | 91 +-------------------- src/knowledge/knowledge-uniques.c | 94 ++++++++++++++++++++++ src/knowledge/knowledge-uniques.h | 3 + 6 files changed, 107 insertions(+), 90 deletions(-) create mode 100644 src/knowledge/knowledge-uniques.c create mode 100644 src/knowledge/knowledge-uniques.h diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj b/Hengband_vcs2017/Hengband/Hengband.vcxproj index 6b9a89180..74daa2c6a 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj @@ -155,6 +155,7 @@ + @@ -282,6 +283,7 @@ + diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters index e6f22b8ba..0925ad187 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters @@ -601,6 +601,9 @@ knowledge + + knowledge + @@ -1184,6 +1187,9 @@ knowledge + + knowledge + diff --git a/src/Makefile.am b/src/Makefile.am index b7b332c63..fb8480baf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -149,6 +149,7 @@ hengband_SOURCES = \ z-virt.c z-virt.h \ \ knowledge/knowledge-artifacts.c knowledge/knowledge-artifacts.h \ + knowledge/knowledge-uniques.c knowledge/knowledge-uniques.h \ \ cmd/dump-util.c cmd/dump-util.h cmd/feeling-table.c cmd/feeling-table.h \ cmd/monster-group-table.c cmd/monster-group-table.h \ diff --git a/src/cmd/cmd-dump.c b/src/cmd/cmd-dump.c index e6da88931..1e3b9bf74 100644 --- a/src/cmd/cmd-dump.c +++ b/src/cmd/cmd-dump.c @@ -44,6 +44,7 @@ #include "io/interpret-pref-file.h" #include "knowledge/knowledge-artifacts.h" +#include "knowledge/knowledge-uniques.h" #include "autopick.h" #include "birth.h" @@ -569,96 +570,6 @@ static FEAT_IDX collect_features(FEAT_IDX *feat_idx, BIT_FLAGS8 mode) /* - * Display known uniques - * With "XTRA HACK UNIQHIST" (Originally from XAngband) - */ -static void do_cmd_knowledge_uniques(player_type *creature_ptr) -{ - 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 max_lev = -1; - for (IDX i = 0; i < 10; i++) - n_alive[i] = 0; - - FILE *fff = NULL; - GAME_TEXT file_name[FILE_NAME_SIZE]; - if (!open_temporary_file(&fff, file_name)) return; - - C_MAKE(who, max_r_idx, MONRACE_IDX); - int n = 0; - for (IDX i = 1; i < max_r_idx; i++) - { - monster_race *r_ptr = &r_info[i]; - if (!r_ptr->name) continue; - if (!(r_ptr->flags1 & RF1_UNIQUE)) continue; - if (!cheat_know && !r_ptr->r_sights) continue; - if (!r_ptr->rarity || ((r_ptr->rarity > 100) && !(r_ptr->flags1 & RF1_QUESTOR))) continue; - if (r_ptr->max_num == 0) continue; - - if (r_ptr->level) - { - int lev = (r_ptr->level - 1) / 10; - if (lev < 10) - { - n_alive[lev]++; - if (max_lev < lev) max_lev = lev; - } - else - n_alive_over100++; - } - else - n_alive_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; - } - - 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]; - } - - if (n_alive_over100) - { - fprintf(fff, _("101- 階 生存: %3d体\n", "Level 101- alive: %3d\n"), n_alive_over100); - n_alive_total += n_alive_over100; - } - - if (n_alive_total) - { - fputs(_("--------- -----------\n", "------------- ----------\n"), fff); - fprintf(fff, _(" 合計 生存: %3d体\n\n", " Total alive: %3d\n\n"), n_alive_total); - } - else - { - fputs(_("現在は既知の生存ユニークはいません。\n", "No known uniques alive.\n"), fff); - } - - for (int k = 0; k < n; k++) - { - monster_race *r_ptr = &r_info[who[k]]; - fprintf(fff, _(" %s (レベル%d)\n", " %s (level %d)\n"), r_name + r_ptr->name, (int)r_ptr->level); - } - - C_KILL(who, max_r_idx, s16b); - my_fclose(fff); - (void)show_file(creature_ptr, TRUE, file_name, _("まだ生きているユニーク・モンスター", "Alive Uniques"), 0, 0); - fd_kill(file_name); -} - - -/* * Display weapon-exp */ static void do_cmd_knowledge_weapon_exp(player_type *creature_ptr) diff --git a/src/knowledge/knowledge-uniques.c b/src/knowledge/knowledge-uniques.c new file mode 100644 index 000000000..def8f636e --- /dev/null +++ b/src/knowledge/knowledge-uniques.c @@ -0,0 +1,94 @@ +#include "angband.h" +#include "knowledge-artifacts.h" +#include "cmd/dump-util.h" +#include "sort.h" +#include "core/show-file.h" + +/* + * Display known uniques + * With "XTRA HACK UNIQHIST" (Originally from XAngband) + */ +void do_cmd_knowledge_uniques(player_type *creature_ptr) +{ + 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 max_lev = -1; + for (IDX i = 0; i < 10; i++) + n_alive[i] = 0; + + FILE *fff = NULL; + GAME_TEXT file_name[FILE_NAME_SIZE]; + if (!open_temporary_file(&fff, file_name)) return; + + C_MAKE(who, max_r_idx, MONRACE_IDX); + int n = 0; + for (IDX i = 1; i < max_r_idx; i++) + { + monster_race *r_ptr = &r_info[i]; + if (!r_ptr->name) continue; + if (!(r_ptr->flags1 & RF1_UNIQUE)) continue; + if (!cheat_know && !r_ptr->r_sights) continue; + if (!r_ptr->rarity || ((r_ptr->rarity > 100) && !(r_ptr->flags1 & RF1_QUESTOR))) continue; + if (r_ptr->max_num == 0) continue; + + if (r_ptr->level) + { + int lev = (r_ptr->level - 1) / 10; + if (lev < 10) + { + n_alive[lev]++; + if (max_lev < lev) max_lev = lev; + } + else + n_alive_over100++; + } + else + n_alive_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; + } + + 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]; + } + + if (n_alive_over100) + { + fprintf(fff, _("101- 階 生存: %3d体\n", "Level 101- alive: %3d\n"), n_alive_over100); + n_alive_total += n_alive_over100; + } + + if (n_alive_total) + { + fputs(_("--------- -----------\n", "------------- ----------\n"), fff); + fprintf(fff, _(" 合計 生存: %3d体\n\n", " Total alive: %3d\n\n"), n_alive_total); + } + else + { + fputs(_("現在は既知の生存ユニークはいません。\n", "No known uniques alive.\n"), fff); + } + + for (int k = 0; k < n; k++) + { + monster_race *r_ptr = &r_info[who[k]]; + fprintf(fff, _(" %s (レベル%d)\n", " %s (level %d)\n"), r_name + r_ptr->name, (int)r_ptr->level); + } + + C_KILL(who, max_r_idx, s16b); + my_fclose(fff); + (void)show_file(creature_ptr, TRUE, file_name, _("まだ生きているユニーク・モンスター", "Alive Uniques"), 0, 0); + fd_kill(file_name); +} diff --git a/src/knowledge/knowledge-uniques.h b/src/knowledge/knowledge-uniques.h new file mode 100644 index 000000000..2cbf5a8f0 --- /dev/null +++ b/src/knowledge/knowledge-uniques.h @@ -0,0 +1,3 @@ +#pragma once + +void do_cmd_knowledge_uniques(player_type *creature_ptr); -- 2.11.0