1 #include "market/building-monster.h"
3 #include "core/stuff-handler.h"
4 #include "game-option/game-play-options.h"
5 #include "monster-race/race-flags1.h"
6 #include "lore/lore-store.h"
7 #include "term/gameterm.h"
8 #include "term/term-color-types.h"
9 #include "view/display-main-window.h"
10 #include "view/display-lore.h"
13 * @brief 施設でモンスターの情報を知るメインルーチン / research_mon -KMW-
14 * @param player_ptr プレーヤーへの参照ポインタ
16 * @todo 返り値が意味不明なので直した方が良いかもしれない。
18 bool research_mon(player_type *player_ptr)
31 static int old_sym = '\0';
37 _("モンスターの文字を入力して下さい(記号 or ^A全,^Uユ,^N非ユ,^M名前):", "Enter character to be identified(^A:All,^U:Uniqs,^N:Non uniqs,^M:Name): "),
46 for (i = 0; ident_info[i]; ++i) {
47 if (sym == ident_info[i][0])
51 /* XTRA HACK WHATSEARCH */
52 if (sym == KTRL('A')) {
54 strcpy(buf, _("全モンスターのリスト", "Full monster list."));
55 } else if (sym == KTRL('U')) {
57 strcpy(buf, _("ユニーク・モンスターのリスト", "Unique monster list."));
58 } else if (sym == KTRL('N')) {
60 strcpy(buf, _("ユニーク外モンスターのリスト", "Non-unique monster list."));
61 } else if (sym == KTRL('M')) {
63 if (!get_string(_("名前(英語の場合小文字で可)", "Enter name:"), temp, 70)) {
70 sprintf(buf, _("名前:%sにマッチ", "Monsters with a name \"%s\""), temp);
71 } else if (ident_info[i]) {
72 sprintf(buf, "%c - %s.", sym, ident_info[i] + 2);
74 sprintf(buf, "%c - %s", sym, _("無効な文字", "Unknown Symbol"));
77 /* Display the result */
80 /* Allocate the "who" array */
81 C_MAKE(who, max_r_idx, MONRACE_IDX);
83 /* Collect matching monsters */
85 for (i = 1; i < max_r_idx; i++) {
86 monster_race *r_ptr = &r_info[i];
92 /* XTRA HACK WHATSEARCH */
93 /* Require non-unique monsters if needed */
94 if (norm && (r_ptr->flags1 & (RF1_UNIQUE)))
97 /* Require unique monsters if needed */
98 if (uniq && !(r_ptr->flags1 & (RF1_UNIQUE)))
103 for (int xx = 0; temp[xx] && xx < 80; xx++) {
105 if (iskanji(temp[xx])) {
110 if (isupper(temp[xx]))
111 temp[xx] = (char)tolower(temp[xx]);
116 strcpy(temp2, r_name + r_ptr->E_name);
118 strcpy(temp2, r_name + r_ptr->name);
120 for (int xx = 0; temp2[xx] && xx < 80; xx++) {
121 if (isupper(temp2[xx]))
122 temp2[xx] = (char)tolower(temp2[xx]);
126 if (angband_strstr(temp2, temp) || angband_strstr(r_name + r_ptr->name, temp))
128 if (angband_strstr(temp2, temp))
131 } else if (all || (r_ptr->d_char == sym)) {
137 C_KILL(who, max_r_idx, MONRACE_IDX);
147 ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
150 if (old_sym == sym && old_i < n)
160 Term_addstr(-1, TERM_WHITE, _(" ['r'思い出, ' 'で続行, ESC]", " [(r)ecall, ESC, space to continue]"));
163 lore_do_probe(player_ptr, r_idx);
164 monster_race_track(player_ptr, r_idx);
165 handle_stuff(player_ptr);
166 screen_roff(player_ptr, r_idx, 0x01);
199 C_KILL(who, max_r_idx, MONRACE_IDX);