OSDN Git Service

[Refactor] #37287 #37353 コメント追加 / Add comments.
[hengband/hengband.git] / src / monster-hook.c
1 #include "angband.h"
2 #include "monster-hook.h"
3
4
5 /*!
6 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
7 * @param r_idx モンスターID
8 * @return 討伐対象にできるならTRUEを返す。
9 */
10 bool mon_hook_quest(MONRACE_IDX r_idx)
11 {
12         monster_race *r_ptr = &r_info[r_idx];
13
14         /* Random quests are in the dungeon */
15         if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
16
17         /* No random quests for aquatic monsters */
18         if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
19
20         /* No random quests for multiplying monsters */
21         if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
22
23         /* No quests to kill friendly monsters */
24         if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
25
26         return TRUE;
27 }
28
29
30 /*!
31 * @brief モンスターがダンジョンに出現するかどうかを返す
32 * @param r_idx 判定するモンスターの種族ID
33 * @return ダンジョンに出現するならばTRUEを返す
34 */
35 bool mon_hook_dungeon(MONRACE_IDX r_idx)
36 {
37         monster_race *r_ptr = &r_info[r_idx];
38
39         if (!(r_ptr->flags8 & RF8_WILD_ONLY))
40                 return TRUE;
41         else
42         {
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;
46                 return FALSE;
47         }
48 }
49
50
51 /*!
52 * @brief モンスターが海洋に出現するかどうかを返す
53 * @param r_idx 判定するモンスターの種族ID
54 * @return 海洋に出現するならばTRUEを返す
55 */
56 bool mon_hook_ocean(MONRACE_IDX r_idx)
57 {
58         monster_race *r_ptr = &r_info[r_idx];
59
60         if (r_ptr->flags8 & RF8_WILD_OCEAN)
61                 return TRUE;
62         else
63                 return FALSE;
64 }
65
66
67 /*!
68 * @brief モンスターが海岸に出現するかどうかを返す
69 * @param r_idx 判定するモンスターの種族ID
70 * @return 海岸に出現するならばTRUEを返す
71 */
72 bool mon_hook_shore(MONRACE_IDX r_idx)
73 {
74         monster_race *r_ptr = &r_info[r_idx];
75
76         if (r_ptr->flags8 & RF8_WILD_SHORE)
77                 return TRUE;
78         else
79                 return FALSE;
80 }
81
82
83 /*!
84 * @brief モンスターが荒地に出現するかどうかを返す
85 * @param r_idx 判定するモンスターの種族ID
86 * @return 荒地に出現するならばTRUEを返す
87 */
88 bool mon_hook_waste(MONRACE_IDX r_idx)
89 {
90         monster_race *r_ptr = &r_info[r_idx];
91
92         if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
93                 return TRUE;
94         else
95                 return FALSE;
96 }
97
98
99 /*!
100 * @brief モンスターが町に出現するかどうかを返す
101 * @param r_idx 判定するモンスターの種族ID
102 * @return 荒地に出現するならばTRUEを返す
103 */
104 bool mon_hook_town(MONRACE_IDX r_idx)
105 {
106         monster_race *r_ptr = &r_info[r_idx];
107
108         if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
109                 return TRUE;
110         else
111                 return FALSE;
112 }
113
114
115 /*!
116 * @brief モンスターが森林に出現するかどうかを返す
117 * @param r_idx 判定するモンスターの種族ID
118 * @return 森林に出現するならばTRUEを返す
119 */
120 bool mon_hook_wood(MONRACE_IDX r_idx)
121 {
122         monster_race *r_ptr = &r_info[r_idx];
123
124         if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
125                 return TRUE;
126         else
127                 return FALSE;
128 }
129
130
131 /*!
132 * @brief モンスターが火山に出現するかどうかを返す
133 * @param r_idx 判定するモンスターの種族ID
134 * @return 火山に出現するならばTRUEを返す
135 */
136 bool mon_hook_volcano(MONRACE_IDX r_idx)
137 {
138         monster_race *r_ptr = &r_info[r_idx];
139
140         if (r_ptr->flags8 & RF8_WILD_VOLCANO)
141                 return TRUE;
142         else
143                 return FALSE;
144 }
145
146 /*!
147 * @brief モンスターが山地に出現するかどうかを返す
148 * @param r_idx 判定するモンスターの種族ID
149 * @return 山地に出現するならばTRUEを返す
150 */
151 bool mon_hook_mountain(MONRACE_IDX r_idx)
152 {
153         monster_race *r_ptr = &r_info[r_idx];
154
155         if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
156                 return TRUE;
157         else
158                 return FALSE;
159 }
160
161
162 /*!
163 * @brief モンスターが草原に出現するかどうかを返す
164 * @param r_idx 判定するモンスターの種族ID
165 * @return 森林に出現するならばTRUEを返す
166 */
167 bool mon_hook_grass(MONRACE_IDX r_idx)
168 {
169         monster_race *r_ptr = &r_info[r_idx];
170
171         if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
172                 return TRUE;
173         else
174                 return FALSE;
175 }
176
177 /*!
178 * @brief モンスターが深い水地形に出現するかどうかを返す
179 * @param r_idx 判定するモンスターの種族ID
180 * @return 深い水地形に出現するならばTRUEを返す
181 */
182 bool mon_hook_deep_water(MONRACE_IDX r_idx)
183 {
184         monster_race *r_ptr = &r_info[r_idx];
185
186         if (!mon_hook_dungeon(r_idx)) return FALSE;
187
188         if (r_ptr->flags7 & RF7_AQUATIC)
189                 return TRUE;
190         else
191                 return FALSE;
192 }
193
194
195 /*!
196 * @brief モンスターが浅い水地形に出現するかどうかを返す
197 * @param r_idx 判定するモンスターの種族ID
198 * @return 浅い水地形に出現するならばTRUEを返す
199 */
200 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
201 {
202         monster_race *r_ptr = &r_info[r_idx];
203
204         if (!mon_hook_dungeon(r_idx)) return FALSE;
205
206         if (r_ptr->flags2 & RF2_AURA_FIRE)
207                 return FALSE;
208         else
209                 return TRUE;
210 }
211
212
213 /*!
214 * @brief モンスターが溶岩地形に出現するかどうかを返す
215 * @param r_idx 判定するモンスターの種族ID
216 * @return 溶岩地形に出現するならばTRUEを返す
217 */
218 bool mon_hook_lava(MONRACE_IDX r_idx)
219 {
220         monster_race *r_ptr = &r_info[r_idx];
221
222         if (!mon_hook_dungeon(r_idx)) return FALSE;
223
224         if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
225                 (r_ptr->flags7 & RF7_CAN_FLY)) &&
226                 !(r_ptr->flags3 & RF3_AURA_COLD))
227                 return TRUE;
228         else
229                 return FALSE;
230 }
231
232
233 /*!
234 * @brief モンスターが通常の床地形に出現するかどうかを返す
235 * @param r_idx 判定するモンスターの種族ID
236 * @return 通常の床地形に出現するならばTRUEを返す
237 */
238 bool mon_hook_floor(MONRACE_IDX r_idx)
239 {
240         monster_race *r_ptr = &r_info[r_idx];
241
242         if (!(r_ptr->flags7 & RF7_AQUATIC) ||
243                 (r_ptr->flags7 & RF7_CAN_FLY))
244                 return TRUE;
245         else
246                 return FALSE;
247 }