2 #include "monster-hook.h"
6 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
8 * @return 討伐対象にできるならTRUEを返す。
10 bool mon_hook_quest(MONRACE_IDX r_idx)
12 monster_race *r_ptr = &r_info[r_idx];
14 /* Random quests are in the dungeon */
15 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
17 /* No random quests for aquatic monsters */
18 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
20 /* No random quests for multiplying monsters */
21 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
23 /* No quests to kill friendly monsters */
24 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
31 * @brief モンスターがダンジョンに出現するかどうかを返す
32 * @param r_idx 判定するモンスターの種族ID
33 * @return ダンジョンに出現するならばTRUEを返す
35 bool mon_hook_dungeon(MONRACE_IDX r_idx)
37 monster_race *r_ptr = &r_info[r_idx];
39 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
43 dungeon_info_type *d_ptr = &d_info[dungeon_type];
44 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
45 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
52 * @brief モンスターが海洋に出現するかどうかを返す
53 * @param r_idx 判定するモンスターの種族ID
54 * @return 海洋に出現するならばTRUEを返す
56 bool mon_hook_ocean(MONRACE_IDX r_idx)
58 monster_race *r_ptr = &r_info[r_idx];
60 if (r_ptr->flags8 & RF8_WILD_OCEAN)
68 * @brief モンスターが海岸に出現するかどうかを返す
69 * @param r_idx 判定するモンスターの種族ID
70 * @return 海岸に出現するならばTRUEを返す
72 bool mon_hook_shore(MONRACE_IDX r_idx)
74 monster_race *r_ptr = &r_info[r_idx];
76 if (r_ptr->flags8 & RF8_WILD_SHORE)
84 * @brief モンスターが荒地に出現するかどうかを返す
85 * @param r_idx 判定するモンスターの種族ID
86 * @return 荒地に出現するならばTRUEを返す
88 bool mon_hook_waste(MONRACE_IDX r_idx)
90 monster_race *r_ptr = &r_info[r_idx];
92 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
100 * @brief モンスターが町に出現するかどうかを返す
101 * @param r_idx 判定するモンスターの種族ID
102 * @return 荒地に出現するならばTRUEを返す
104 bool mon_hook_town(MONRACE_IDX r_idx)
106 monster_race *r_ptr = &r_info[r_idx];
108 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
116 * @brief モンスターが森林に出現するかどうかを返す
117 * @param r_idx 判定するモンスターの種族ID
118 * @return 森林に出現するならばTRUEを返す
120 bool mon_hook_wood(MONRACE_IDX r_idx)
122 monster_race *r_ptr = &r_info[r_idx];
124 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
132 * @brief モンスターが火山に出現するかどうかを返す
133 * @param r_idx 判定するモンスターの種族ID
134 * @return 火山に出現するならばTRUEを返す
136 bool mon_hook_volcano(MONRACE_IDX r_idx)
138 monster_race *r_ptr = &r_info[r_idx];
140 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
147 * @brief モンスターが山地に出現するかどうかを返す
148 * @param r_idx 判定するモンスターの種族ID
149 * @return 山地に出現するならばTRUEを返す
151 bool mon_hook_mountain(MONRACE_IDX r_idx)
153 monster_race *r_ptr = &r_info[r_idx];
155 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
163 * @brief モンスターが草原に出現するかどうかを返す
164 * @param r_idx 判定するモンスターの種族ID
165 * @return 森林に出現するならばTRUEを返す
167 bool mon_hook_grass(MONRACE_IDX r_idx)
169 monster_race *r_ptr = &r_info[r_idx];
171 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
178 * @brief モンスターが深い水地形に出現するかどうかを返す
179 * @param r_idx 判定するモンスターの種族ID
180 * @return 深い水地形に出現するならばTRUEを返す
182 bool mon_hook_deep_water(MONRACE_IDX r_idx)
184 monster_race *r_ptr = &r_info[r_idx];
186 if (!mon_hook_dungeon(r_idx)) return FALSE;
188 if (r_ptr->flags7 & RF7_AQUATIC)
196 * @brief モンスターが浅い水地形に出現するかどうかを返す
197 * @param r_idx 判定するモンスターの種族ID
198 * @return 浅い水地形に出現するならばTRUEを返す
200 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
202 monster_race *r_ptr = &r_info[r_idx];
204 if (!mon_hook_dungeon(r_idx)) return FALSE;
206 if (r_ptr->flags2 & RF2_AURA_FIRE)
214 * @brief モンスターが溶岩地形に出現するかどうかを返す
215 * @param r_idx 判定するモンスターの種族ID
216 * @return 溶岩地形に出現するならばTRUEを返す
218 bool mon_hook_lava(MONRACE_IDX r_idx)
220 monster_race *r_ptr = &r_info[r_idx];
222 if (!mon_hook_dungeon(r_idx)) return FALSE;
224 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
225 (r_ptr->flags7 & RF7_CAN_FLY)) &&
226 !(r_ptr->flags3 & RF3_AURA_COLD))
234 * @brief モンスターが通常の床地形に出現するかどうかを返す
235 * @param r_idx 判定するモンスターの種族ID
236 * @return 通常の床地形に出現するならばTRUEを返す
238 bool mon_hook_floor(MONRACE_IDX r_idx)
240 monster_race *r_ptr = &r_info[r_idx];
242 if (!(r_ptr->flags7 & RF7_AQUATIC) ||
243 (r_ptr->flags7 & RF7_CAN_FLY))