OSDN Git Service

[Refactor] #37287 #37353 型の置換。 / Type replacement.
[hengband/hengband.git] / src / monster-hook.c
1 #include "angband.h"\r
2 #include "monster-hook.h"\r
3 \r
4 \r
5 /*!\r
6 * @brief \83\82\83\93\83X\83^\81[\82ª\83N\83G\83X\83g\82Ì\93¢\94°\91Î\8fÛ\82É\90¬\82è\93¾\82é\82©\82ð\95Ô\82· / Hook function for quest monsters\r
7 * @param r_idx \83\82\83\93\83X\83^\81[\82h\82c\r
8 * @return \93¢\94°\91Î\8fÛ\82É\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
9 */\r
10 bool mon_hook_quest(MONRACE_IDX r_idx)\r
11 {\r
12         monster_race *r_ptr = &r_info[r_idx];\r
13 \r
14         /* Random quests are in the dungeon */\r
15         if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;\r
16 \r
17         /* No random quests for aquatic monsters */\r
18         if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;\r
19 \r
20         /* No random quests for multiplying monsters */\r
21         if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;\r
22 \r
23         /* No quests to kill friendly monsters */\r
24         if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;\r
25 \r
26         return TRUE;\r
27 }\r
28 \r
29 \r
30 /*!\r
31 * @brief \83\82\83\93\83X\83^\81[\82ª\83_\83\93\83W\83\87\83\93\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
32 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
33 * @return \83_\83\93\83W\83\87\83\93\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
34 */\r
35 bool mon_hook_dungeon(MONRACE_IDX r_idx)\r
36 {\r
37         monster_race *r_ptr = &r_info[r_idx];\r
38 \r
39         if (!(r_ptr->flags8 & RF8_WILD_ONLY))\r
40                 return TRUE;\r
41         else\r
42         {\r
43                 dungeon_info_type *d_ptr = &d_info[dungeon_type];\r
44                 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&\r
45                         (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;\r
46                 return FALSE;\r
47         }\r
48 }\r
49 \r
50 \r
51 /*!\r
52 * @brief \83\82\83\93\83X\83^\81[\82ª\8aC\97m\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
53 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
54 * @return \8aC\97m\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
55 */\r
56 bool mon_hook_ocean(MONRACE_IDX r_idx)\r
57 {\r
58         monster_race *r_ptr = &r_info[r_idx];\r
59 \r
60         if (r_ptr->flags8 & RF8_WILD_OCEAN)\r
61                 return TRUE;\r
62         else\r
63                 return FALSE;\r
64 }\r
65 \r
66 \r
67 /*!\r
68 * @brief \83\82\83\93\83X\83^\81[\82ª\8aC\8aÝ\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
69 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
70 * @return \8aC\8aÝ\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
71 */\r
72 bool mon_hook_shore(MONRACE_IDX r_idx)\r
73 {\r
74         monster_race *r_ptr = &r_info[r_idx];\r
75 \r
76         if (r_ptr->flags8 & RF8_WILD_SHORE)\r
77                 return TRUE;\r
78         else\r
79                 return FALSE;\r
80 }\r
81 \r
82 \r
83 /*!\r
84 * @brief \83\82\83\93\83X\83^\81[\82ª\8dr\92n\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
85 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
86 * @return \8dr\92n\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
87 */\r
88 bool mon_hook_waste(MONRACE_IDX r_idx)\r
89 {\r
90         monster_race *r_ptr = &r_info[r_idx];\r
91 \r
92         if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))\r
93                 return TRUE;\r
94         else\r
95                 return FALSE;\r
96 }\r
97 \r
98 \r
99 /*!\r
100 * @brief \83\82\83\93\83X\83^\81[\82ª\92¬\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
101 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
102 * @return \8dr\92n\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
103 */\r
104 bool mon_hook_town(MONRACE_IDX r_idx)\r
105 {\r
106         monster_race *r_ptr = &r_info[r_idx];\r
107 \r
108         if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))\r
109                 return TRUE;\r
110         else\r
111                 return FALSE;\r
112 }\r
113 \r
114 \r
115 /*!\r
116 * @brief \83\82\83\93\83X\83^\81[\82ª\90X\97Ñ\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
117 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
118 * @return \90X\97Ñ\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
119 */\r
120 bool mon_hook_wood(MONRACE_IDX r_idx)\r
121 {\r
122         monster_race *r_ptr = &r_info[r_idx];\r
123 \r
124         if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))\r
125                 return TRUE;\r
126         else\r
127                 return FALSE;\r
128 }\r
129 \r
130 \r
131 /*!\r
132 * @brief \83\82\83\93\83X\83^\81[\82ª\89Î\8eR\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
133 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
134 * @return \89Î\8eR\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
135 */\r
136 bool mon_hook_volcano(MONRACE_IDX r_idx)\r
137 {\r
138         monster_race *r_ptr = &r_info[r_idx];\r
139 \r
140         if (r_ptr->flags8 & RF8_WILD_VOLCANO)\r
141                 return TRUE;\r
142         else\r
143                 return FALSE;\r
144 }\r
145 \r
146 /*!\r
147 * @brief \83\82\83\93\83X\83^\81[\82ª\8eR\92n\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
148 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
149 * @return \8eR\92n\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
150 */\r
151 bool mon_hook_mountain(MONRACE_IDX r_idx)\r
152 {\r
153         monster_race *r_ptr = &r_info[r_idx];\r
154 \r
155         if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)\r
156                 return TRUE;\r
157         else\r
158                 return FALSE;\r
159 }\r
160 \r
161 \r
162 /*!\r
163 * @brief \83\82\83\93\83X\83^\81[\82ª\91\90\8c´\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
164 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
165 * @return \90X\97Ñ\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
166 */\r
167 bool mon_hook_grass(MONRACE_IDX r_idx)\r
168 {\r
169         monster_race *r_ptr = &r_info[r_idx];\r
170 \r
171         if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))\r
172                 return TRUE;\r
173         else\r
174                 return FALSE;\r
175 }\r
176 \r
177 /*!\r
178 * @brief \83\82\83\93\83X\83^\81[\82ª\90[\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
179 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
180 * @return \90[\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
181 */\r
182 bool mon_hook_deep_water(MONRACE_IDX r_idx)\r
183 {\r
184         monster_race *r_ptr = &r_info[r_idx];\r
185 \r
186         if (!mon_hook_dungeon(r_idx)) return FALSE;\r
187 \r
188         if (r_ptr->flags7 & RF7_AQUATIC)\r
189                 return TRUE;\r
190         else\r
191                 return FALSE;\r
192 }\r
193 \r
194 \r
195 /*!\r
196 * @brief \83\82\83\93\83X\83^\81[\82ª\90ó\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
197 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
198 * @return \90ó\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
199 */\r
200 bool mon_hook_shallow_water(MONRACE_IDX r_idx)\r
201 {\r
202         monster_race *r_ptr = &r_info[r_idx];\r
203 \r
204         if (!mon_hook_dungeon(r_idx)) return FALSE;\r
205 \r
206         if (r_ptr->flags2 & RF2_AURA_FIRE)\r
207                 return FALSE;\r
208         else\r
209                 return TRUE;\r
210 }\r
211 \r
212 \r
213 /*!\r
214 * @brief \83\82\83\93\83X\83^\81[\82ª\97n\8aâ\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
215 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
216 * @return \97n\8aâ\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
217 */\r
218 bool mon_hook_lava(MONRACE_IDX r_idx)\r
219 {\r
220         monster_race *r_ptr = &r_info[r_idx];\r
221 \r
222         if (!mon_hook_dungeon(r_idx)) return FALSE;\r
223 \r
224         if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||\r
225                 (r_ptr->flags7 & RF7_CAN_FLY)) &&\r
226                 !(r_ptr->flags3 & RF3_AURA_COLD))\r
227                 return TRUE;\r
228         else\r
229                 return FALSE;\r
230 }\r
231 \r
232 \r
233 /*!\r
234 * @brief \83\82\83\93\83X\83^\81[\82ª\92Ê\8fí\82Ì\8f°\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
235 * @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
236 * @return \92Ê\8fí\82Ì\8f°\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
237 */\r
238 bool mon_hook_floor(MONRACE_IDX r_idx)\r
239 {\r
240         monster_race *r_ptr = &r_info[r_idx];\r
241 \r
242         if (!(r_ptr->flags7 & RF7_AQUATIC) ||\r
243                 (r_ptr->flags7 & RF7_CAN_FLY))\r
244                 return TRUE;\r
245         else\r
246                 return FALSE;\r
247 }\r