2 * @brief モンスターの思い出表示に必要なフラグ類の処理
7 #include "lore/monster-lore.h"
8 #include "game-option/cheat-options.h"
9 #include "lore/lore-calculator.h"
10 #include "lore/lore-util.h"
11 #include "lore/magic-types-setter.h"
12 #include "monster-race/monster-race.h"
13 #include "monster-race/race-flags-ability2.h"
14 #include "monster-race/race-flags1.h"
15 #include "monster-race/race-flags2.h"
16 #include "monster-race/race-flags3.h"
17 #include "monster-race/race-flags4.h"
18 #include "monster-race/race-indice-types.h"
19 #include "term/term-color-types.h"
20 #include "view/display-lore-attacks.h"
21 #include "view/display-lore-drops.h"
22 #include "view/display-lore-magics.h"
23 #include "view/display-lore-status.h"
24 #include "view/display-lore.h"
26 static void set_msex_flags(lore_type *lore_ptr)
28 lore_ptr->msex = MSEX_NONE;
29 if (lore_ptr->r_ptr->flags1 & RF1_FEMALE) {
30 lore_ptr->msex = MSEX_FEMALE;
34 if (lore_ptr->r_ptr->flags1 & RF1_MALE)
35 lore_ptr->msex = MSEX_MALE;
38 static void set_flags1(lore_type *lore_ptr)
40 if (lore_ptr->r_ptr->flags1 & RF1_UNIQUE)
41 lore_ptr->flags1 |= (RF1_UNIQUE);
43 if (lore_ptr->r_ptr->flags1 & RF1_QUESTOR)
44 lore_ptr->flags1 |= (RF1_QUESTOR);
46 if (lore_ptr->r_ptr->flags1 & RF1_MALE)
47 lore_ptr->flags1 |= (RF1_MALE);
49 if (lore_ptr->r_ptr->flags1 & RF1_FEMALE)
50 lore_ptr->flags1 |= (RF1_FEMALE);
52 if (lore_ptr->r_ptr->flags1 & RF1_FRIENDS)
53 lore_ptr->flags1 |= (RF1_FRIENDS);
55 if (lore_ptr->r_ptr->flags1 & RF1_ESCORT)
56 lore_ptr->flags1 |= (RF1_ESCORT);
58 if (lore_ptr->r_ptr->flags1 & RF1_ESCORTS)
59 lore_ptr->flags1 |= (RF1_ESCORTS);
62 static void set_race_flags(lore_type *lore_ptr)
64 if (!lore_ptr->r_ptr->r_tkills && !lore_ptr->know_everything)
67 if (lore_ptr->r_ptr->flags3 & RF3_ORC)
68 lore_ptr->flags3 |= (RF3_ORC);
70 if (lore_ptr->r_ptr->flags3 & RF3_TROLL)
71 lore_ptr->flags3 |= (RF3_TROLL);
73 if (lore_ptr->r_ptr->flags3 & RF3_GIANT)
74 lore_ptr->flags3 |= (RF3_GIANT);
76 if (lore_ptr->r_ptr->flags3 & RF3_DRAGON)
77 lore_ptr->flags3 |= (RF3_DRAGON);
79 if (lore_ptr->r_ptr->flags3 & RF3_DEMON)
80 lore_ptr->flags3 |= (RF3_DEMON);
82 if (lore_ptr->r_ptr->flags3 & RF3_UNDEAD)
83 lore_ptr->flags3 |= (RF3_UNDEAD);
85 if (lore_ptr->r_ptr->flags3 & RF3_EVIL)
86 lore_ptr->flags3 |= (RF3_EVIL);
88 if (lore_ptr->r_ptr->flags3 & RF3_GOOD)
89 lore_ptr->flags3 |= (RF3_GOOD);
91 if (lore_ptr->r_ptr->flags3 & RF3_ANIMAL)
92 lore_ptr->flags3 |= (RF3_ANIMAL);
94 if (lore_ptr->r_ptr->flags3 & RF3_AMBERITE)
95 lore_ptr->flags3 |= (RF3_AMBERITE);
97 if (lore_ptr->r_ptr->flags2 & RF2_HUMAN)
98 lore_ptr->flags2 |= (RF2_HUMAN);
100 if (lore_ptr->r_ptr->flags2 & RF2_QUANTUM)
101 lore_ptr->flags2 |= (RF2_QUANTUM);
103 if (lore_ptr->r_ptr->flags1 & RF1_FORCE_DEPTH)
104 lore_ptr->flags1 |= (RF1_FORCE_DEPTH);
106 if (lore_ptr->r_ptr->flags1 & RF1_FORCE_MAXHP)
107 lore_ptr->flags1 |= (RF1_FORCE_MAXHP);
111 * @brief モンスターの思い出情報を表示するメインルーチン
112 * Hack -- display monster information using "hooked_roff()"
113 * @param r_idx モンスターの種族ID
114 * @param mode 表示オプション
117 * This function should only be called with the cursor placed at the
118 * left edge of the screen, on a cleared line, in which the recall is
119 * to take place. One extra blank line is left after the recall.
121 void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, monster_lore_mode mode)
124 lore_type *lore_ptr = initialize_lore_type(&tmp_lore, r_idx, mode);
125 for (int n = 0; n < A_MAX; n++) {
126 if (lore_ptr->r_ptr->reinforce_id[n] > 0)
127 lore_ptr->reinforce = TRUE;
130 if (cheat_know || (mode == MONSTER_LORE_RESEARCH) || (mode == MONSTER_LORE_DEBUG))
131 lore_ptr->know_everything = TRUE;
133 set_drop_flags(lore_ptr);
134 set_msex_flags(lore_ptr);
135 set_flags1(lore_ptr);
136 set_race_flags(lore_ptr);
137 display_kill_numbers(lore_ptr);
138 concptr tmp = r_text + lore_ptr->r_ptr->text;
144 if (r_idx == MON_KAGE) {
149 if (!display_where_to_appear(lore_ptr))
152 display_monster_move(lore_ptr);
153 display_monster_never_move(lore_ptr);
155 hooked_roff(_("。", ". "));
156 lore_ptr->old = FALSE;
159 display_lore_this(player_ptr, lore_ptr);
160 display_monster_aura(lore_ptr);
161 if (lore_ptr->flags2 & RF2_REFLECTING)
162 hooked_roff(format(_("%^sは矢の呪文を跳ね返す。", "%^s reflects bolt spells. "), wd_he[lore_ptr->msex]));
164 display_monster_collective(lore_ptr);
166 if (lore_ptr->flags4 & RF4_SHRIEK) {
167 lore_ptr->vp[lore_ptr->vn] = _("悲鳴で助けを求める", "shriek for help");
168 lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
171 display_monster_launching(player_ptr, lore_ptr);
172 if (lore_ptr->a_ability_flags2 & (RF6_SPECIAL)) {
173 lore_ptr->vp[lore_ptr->vn] = _("特別な行動をする", "do something");
174 lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
177 display_monster_sometimes(lore_ptr);
178 set_breath_types(player_ptr, lore_ptr);
179 display_monster_breath(lore_ptr);
182 set_ball_types(player_ptr, lore_ptr);
183 set_particular_types(player_ptr, lore_ptr);
184 set_bolt_types(player_ptr, lore_ptr);
185 set_status_types(lore_ptr);
186 set_teleport_types(lore_ptr);
187 set_floor_types(player_ptr, lore_ptr);
188 set_summon_types(lore_ptr);
189 display_monster_magic_types(lore_ptr);
190 display_mosnter_magic_possibility(lore_ptr);
191 display_monster_hp_ac(lore_ptr);
194 display_monster_concrete_abilities(lore_ptr);
195 display_monster_abilities(lore_ptr);
196 display_monster_constitutions(lore_ptr);
199 display_monster_concrete_weakness(lore_ptr);
200 display_monster_weakness(lore_ptr);
203 display_monster_concrete_resistances(lore_ptr);
204 display_monster_resistances(lore_ptr);
205 display_monster_evolution(lore_ptr);
208 display_monster_concrete_immunities(lore_ptr);
209 display_monster_immunities(lore_ptr);
210 display_monster_alert(lore_ptr);
211 display_monster_drops(lore_ptr);
212 display_monster_attacks(lore_ptr);
213 display_monster_guardian(lore_ptr);