OSDN Git Service

[Refactor/Implement] #1787 予約領域も含めてモンスターのオーラフラグを再定義した
[hengbandforosx/hengbandosx.git] / src / info-reader / race-info-tokens-table.cpp
1 #include "info-reader/race-info-tokens-table.h"
2 #include "monster-attack/monster-attack-effect.h"
3 #include "monster-attack/monster-attack-types.h"
4 #include "monster-race/race-ability-flags.h"
5
6 /*!
7   * モンスターの打撃手段トークンの定義 /
8   * Monster Blow Methods
9   */
10 const std::unordered_map<std::string_view, rbm_type> r_info_blow_method = {
11         { "HIT", RBM_HIT },
12         { "TOUCH", RBM_TOUCH },
13         { "PUNCH", RBM_PUNCH },
14         { "KICK", RBM_KICK },
15         { "CLAW", RBM_CLAW },
16         { "BITE", RBM_BITE },
17         { "STING", RBM_STING },
18         { "SLASH", RBM_SLASH },
19         { "BUTT", RBM_BUTT },
20         { "CRUSH", RBM_CRUSH },
21         { "ENGULF", RBM_ENGULF },
22         { "CHARGE", RBM_CHARGE },
23         { "CRAWL", RBM_CRAWL },
24         { "DROOL", RBM_DROOL },
25         { "SPIT", RBM_SPIT },
26         { "EXPLODE", RBM_EXPLODE },
27         { "GAZE", RBM_GAZE },
28         { "WAIL", RBM_WAIL },
29         { "SPORE", RBM_SPORE },
30         { "XXX4", RBM_XXX4 },
31         { "BEG", RBM_BEG },
32         { "INSULT", RBM_INSULT },
33         { "MOAN", RBM_MOAN },
34         { "SHOW", RBM_SHOW },
35         { "SHOOT", RBM_SHOOT },
36 };
37
38 /*!
39  * モンスターの打撃属性トークンの定義 /
40  * Monster Blow Effects
41  */
42 const std::unordered_map<std::string_view, rbe_type> r_info_blow_effect = {
43         { "HURT", RBE_HURT },
44         { "POISON", RBE_POISON },
45         { "UN_BONUS", RBE_UN_BONUS },
46         { "UN_POWER", RBE_UN_POWER },
47         { "EAT_GOLD", RBE_EAT_GOLD },
48         { "EAT_ITEM", RBE_EAT_ITEM },
49         { "EAT_FOOD", RBE_EAT_FOOD },
50         { "EAT_LITE", RBE_EAT_LITE },
51         { "ACID", RBE_ACID },
52         { "ELEC", RBE_ELEC },
53         { "FIRE", RBE_FIRE },
54         { "COLD", RBE_COLD },
55         { "BLIND", RBE_BLIND },
56         { "CONFUSE", RBE_CONFUSE },
57         { "TERRIFY", RBE_TERRIFY },
58         { "PARALYZE", RBE_PARALYZE },
59         { "LOSE_STR", RBE_LOSE_STR },
60         { "LOSE_INT", RBE_LOSE_INT },
61         { "LOSE_WIS", RBE_LOSE_WIS },
62         { "LOSE_DEX", RBE_LOSE_DEX },
63         { "LOSE_CON", RBE_LOSE_CON },
64         { "LOSE_CHR", RBE_LOSE_CHR },
65         { "LOSE_ALL", RBE_LOSE_ALL },
66         { "SHATTER", RBE_SHATTER },
67         { "EXP_10", RBE_EXP_10 },
68         { "EXP_20", RBE_EXP_20 },
69         { "EXP_40", RBE_EXP_40 },
70         { "EXP_80", RBE_EXP_80 },
71         { "DISEASE", RBE_DISEASE },
72         { "TIME", RBE_TIME },
73         { "EXP_VAMP", RBE_DR_LIFE },
74         { "DR_MANA", RBE_DR_MANA },
75         { "SUPERHURT", RBE_SUPERHURT },
76         { "INERTIA", RBE_INERTIA },
77     { "STUN", RBE_STUN },
78     { "HUNGRY", RBE_HUNGRY },
79     { "FLAVOR", RBE_FLAVOR },
80 };
81
82 /*!
83  * モンスター特性トークンの定義1 /
84  * Monster race flags
85  */
86 const std::unordered_map<std::string_view, race_flags1> r_info_flags1 = {
87         { "UNIQUE", RF1_UNIQUE },
88         { "QUESTOR", RF1_QUESTOR },
89         { "MALE", RF1_MALE },
90         { "FEMALE", RF1_FEMALE },
91         { "CHAR_CLEAR", RF1_CHAR_CLEAR },
92         { "SHAPECHANGER", RF1_SHAPECHANGER },
93         { "ATTR_CLEAR", RF1_ATTR_CLEAR },
94         { "ATTR_MULTI", RF1_ATTR_MULTI },
95         { "FORCE_DEPTH", RF1_FORCE_DEPTH },
96         { "FORCE_MAXHP", RF1_FORCE_MAXHP },
97         { "PREVENT_SUDDEN_MAGIC", RF1_PREVENT_SUDDEN_MAGIC },
98         { "FORCE_EXTRA", RF1_FORCE_EXTRA },
99         { "ATTR_SEMIRAND", RF1_ATTR_SEMIRAND },
100         { "FRIENDS", RF1_FRIENDS },
101         { "ESCORT", RF1_ESCORT },
102         { "ESCORTS", RF1_ESCORTS },
103         { "NEVER_BLOW", RF1_NEVER_BLOW },
104         { "NEVER_MOVE", RF1_NEVER_MOVE },
105         { "RAND_25", RF1_RAND_25 },
106         { "RAND_50", RF1_RAND_50 },
107         { "ONLY_GOLD", RF1_ONLY_GOLD },
108         { "ONLY_ITEM", RF1_ONLY_ITEM },
109         { "DROP_60", RF1_DROP_60 },
110         { "DROP_90", RF1_DROP_90 },
111         { "DROP_1D2", RF1_DROP_1D2 },
112         { "DROP_2D2", RF1_DROP_2D2 },
113         { "DROP_3D2", RF1_DROP_3D2 },
114         { "DROP_4D2", RF1_DROP_4D2 },
115         { "DROP_GOOD", RF1_DROP_GOOD },
116         { "DROP_GREAT", RF1_DROP_GREAT },
117 };
118
119 /*!
120  * モンスター特性トークンの定義2 /
121  * Monster race flags
122  */
123 const std::unordered_map<std::string_view, race_flags2> r_info_flags2 = {
124         { "STUPID", RF2_STUPID },
125         { "SMART", RF2_SMART },
126         { "CAN_SPEAK", RF2_CAN_SPEAK },
127         { "REFLECTING", RF2_REFLECTING },
128         { "INVISIBLE", RF2_INVISIBLE },
129         { "COLD_BLOOD", RF2_COLD_BLOOD },
130         { "EMPTY_MIND", RF2_EMPTY_MIND },
131         { "WEIRD_MIND", RF2_WEIRD_MIND },
132         { "MULTIPLY", RF2_MULTIPLY },
133         { "REGENERATE", RF2_REGENERATE },
134         { "CHAR_MULTI", RF2_CHAR_MULTI },
135         { "ATTR_ANY", RF2_ATTR_ANY },
136         { "POWERFUL", RF2_POWERFUL },
137         { "ELDRITCH_HORROR", RF2_ELDRITCH_HORROR },
138         { "AURA_FIRE", RF2_AURA_FIRE },
139         { "AURA_ELEC", RF2_AURA_ELEC },
140         { "OPEN_DOOR", RF2_OPEN_DOOR },
141         { "BASH_DOOR", RF2_BASH_DOOR },
142         { "PASS_WALL", RF2_PASS_WALL },
143         { "KILL_WALL", RF2_KILL_WALL },
144         { "MOVE_BODY", RF2_MOVE_BODY },
145         { "KILL_BODY", RF2_KILL_BODY },
146         { "TAKE_ITEM", RF2_TAKE_ITEM },
147         { "KILL_ITEM", RF2_KILL_ITEM },
148         { "HUMAN", RF2_HUMAN },
149         { "QUANTUM", RF2_QUANTUM }
150 };
151
152 /*!
153  * モンスター特性トークンの定義3 /
154  * Monster race flags
155  */
156 const std::unordered_map<std::string_view, race_flags3> r_info_flags3 = {
157         { "ORC", RF3_ORC },
158         { "TROLL", RF3_TROLL },
159         { "GIANT", RF3_GIANT },
160         { "DRAGON", RF3_DRAGON },
161         { "DEMON", RF3_DEMON },
162         { "UNDEAD", RF3_UNDEAD },
163         { "EVIL", RF3_EVIL },
164         { "ANIMAL", RF3_ANIMAL },
165         { "AMBERITE", RF3_AMBERITE },
166         { "GOOD", RF3_GOOD },
167         { "AURA_COLD", RF3_AURA_COLD },
168         { "NONLIVING", RF3_NONLIVING },
169         { "HURT_LITE", RF3_HURT_LITE },
170         { "HURT_ROCK", RF3_HURT_ROCK },
171         { "HURT_FIRE", RF3_HURT_FIRE },
172         { "HURT_COLD", RF3_HURT_COLD },
173         { "ANGEL", RF3_ANGEL },
174         { "NO_FEAR", RF3_NO_FEAR },
175         { "NO_STUN", RF3_NO_STUN },
176         { "NO_CONF", RF3_NO_CONF },
177         { "NO_SLEEP", RF3_NO_SLEEP }
178 };
179
180 /*!
181  * モンスター特性トークン (発動型能力) /
182  * Monster race flags
183  */
184 /* clang-format off */
185 const std::unordered_map<std::string_view, RF_ABILITY> r_info_ability_flags = {
186         {"SHRIEK", RF_ABILITY::SHRIEK },
187         {"XXX1", RF_ABILITY::XXX1 },
188         {"DISPEL", RF_ABILITY::DISPEL },
189         {"ROCKET", RF_ABILITY::ROCKET },
190         {"SHOOT", RF_ABILITY::SHOOT },
191         {"XXX2", RF_ABILITY::XXX2 },
192         {"XXX3", RF_ABILITY::XXX3 },
193         {"XXX4", RF_ABILITY::XXX4 },
194         {"BR_ACID", RF_ABILITY::BR_ACID },
195         {"BR_ELEC", RF_ABILITY::BR_ELEC },
196         {"BR_FIRE", RF_ABILITY::BR_FIRE },
197         {"BR_COLD", RF_ABILITY::BR_COLD },
198         {"BR_POIS", RF_ABILITY::BR_POIS },
199         {"BR_NETH", RF_ABILITY::BR_NETH },
200         {"BR_LITE", RF_ABILITY::BR_LITE },
201         {"BR_DARK", RF_ABILITY::BR_DARK },
202         {"BR_CONF", RF_ABILITY::BR_CONF },
203         {"BR_SOUN", RF_ABILITY::BR_SOUN },
204         {"BR_CHAO", RF_ABILITY::BR_CHAO },
205         {"BR_DISE", RF_ABILITY::BR_DISE },
206         {"BR_NEXU", RF_ABILITY::BR_NEXU },
207         {"BR_TIME", RF_ABILITY::BR_TIME },
208         {"BR_INER", RF_ABILITY::BR_INER },
209         {"BR_GRAV", RF_ABILITY::BR_GRAV },
210         {"BR_SHAR", RF_ABILITY::BR_SHAR },
211         {"BR_PLAS", RF_ABILITY::BR_PLAS },
212         {"BR_FORC", RF_ABILITY::BR_FORC },
213         {"BR_MANA", RF_ABILITY::BR_MANA },
214         {"BA_NUKE", RF_ABILITY::BA_NUKE },
215         {"BR_NUKE", RF_ABILITY::BR_NUKE },
216         {"BA_CHAO", RF_ABILITY::BA_CHAO },
217         {"BR_DISI", RF_ABILITY::BR_DISI },
218
219         {"BA_ACID", RF_ABILITY::BA_ACID },
220         {"BA_ELEC", RF_ABILITY::BA_ELEC },
221         {"BA_FIRE", RF_ABILITY::BA_FIRE },
222         {"BA_COLD", RF_ABILITY::BA_COLD },
223         {"BA_POIS", RF_ABILITY::BA_POIS },
224         {"BA_NETH", RF_ABILITY::BA_NETH },
225         {"BA_WATE", RF_ABILITY::BA_WATE },
226         {"BA_MANA", RF_ABILITY::BA_MANA },
227         {"BA_DARK", RF_ABILITY::BA_DARK },
228         {"DRAIN_MANA", RF_ABILITY::DRAIN_MANA },
229         {"MIND_BLAST", RF_ABILITY::MIND_BLAST },
230         {"BRAIN_SMASH", RF_ABILITY::BRAIN_SMASH },
231         {"CAUSE_1", RF_ABILITY::CAUSE_1 },
232         {"CAUSE_2", RF_ABILITY::CAUSE_2 },
233         {"CAUSE_3", RF_ABILITY::CAUSE_3 },
234         {"CAUSE_4", RF_ABILITY::CAUSE_4 },
235         {"BO_ACID", RF_ABILITY::BO_ACID },
236         {"BO_ELEC", RF_ABILITY::BO_ELEC },
237         {"BO_FIRE", RF_ABILITY::BO_FIRE },
238         {"BO_COLD", RF_ABILITY::BO_COLD },
239         {"BA_LITE", RF_ABILITY::BA_LITE },
240         {"BO_NETH", RF_ABILITY::BO_NETH },
241         {"BO_WATE", RF_ABILITY::BO_WATE },
242         {"BO_MANA", RF_ABILITY::BO_MANA },
243         {"BO_PLAS", RF_ABILITY::BO_PLAS },
244         {"BO_ICEE", RF_ABILITY::BO_ICEE },
245         {"MISSILE", RF_ABILITY::MISSILE },
246         {"SCARE", RF_ABILITY::SCARE },
247         {"BLIND", RF_ABILITY::BLIND },
248         {"CONF", RF_ABILITY::CONF },
249         {"SLOW", RF_ABILITY::SLOW },
250         {"HOLD", RF_ABILITY::HOLD },
251
252         {"HASTE", RF_ABILITY::HASTE },
253         {"HAND_DOOM", RF_ABILITY::HAND_DOOM },
254         {"HEAL", RF_ABILITY::HEAL },
255         {"INVULNER", RF_ABILITY::INVULNER },
256         {"BLINK", RF_ABILITY::BLINK },
257         {"TPORT", RF_ABILITY::TPORT },
258         {"WORLD", RF_ABILITY::WORLD },
259         {"SPECIAL", RF_ABILITY::SPECIAL },
260         {"TELE_TO", RF_ABILITY::TELE_TO },
261         {"TELE_AWAY", RF_ABILITY::TELE_AWAY },
262         {"TELE_LEVEL", RF_ABILITY::TELE_LEVEL },
263         {"PSY_SPEAR", RF_ABILITY::PSY_SPEAR },
264         {"DARKNESS", RF_ABILITY::DARKNESS },
265         {"TRAPS", RF_ABILITY::TRAPS },
266         {"FORGET", RF_ABILITY::FORGET },
267         {"ANIM_DEAD", RF_ABILITY::RAISE_DEAD /* ToDo: Implement ANIM_DEAD */ },
268         {"S_KIN", RF_ABILITY::S_KIN },
269         {"S_CYBER", RF_ABILITY::S_CYBER },
270         {"S_MONSTER", RF_ABILITY::S_MONSTER },
271         {"S_MONSTERS", RF_ABILITY::S_MONSTERS },
272         {"S_ANT", RF_ABILITY::S_ANT },
273         {"S_SPIDER", RF_ABILITY::S_SPIDER },
274         {"S_HOUND", RF_ABILITY::S_HOUND },
275         {"S_HYDRA", RF_ABILITY::S_HYDRA },
276         {"S_ANGEL", RF_ABILITY::S_ANGEL },
277         {"S_DEMON", RF_ABILITY::S_DEMON },
278         {"S_UNDEAD", RF_ABILITY::S_UNDEAD },
279         {"S_DRAGON", RF_ABILITY::S_DRAGON },
280         {"S_HI_UNDEAD", RF_ABILITY::S_HI_UNDEAD },
281         {"S_HI_DRAGON", RF_ABILITY::S_HI_DRAGON },
282         {"S_AMBERITES", RF_ABILITY::S_AMBERITES },
283         {"S_UNIQUE", RF_ABILITY::S_UNIQUE },
284 };
285 /* clang-format on */
286
287 /*!
288  * モンスター特性トークンの定義7 /
289  * Monster race flags
290  * "GUARDIAN" ... init.c d_infoの FINAL_GUARDIAN_* にて自動指定
291  */
292 const std::unordered_map<std::string_view, race_flags7> r_info_flags7 = {
293         { "AQUATIC", RF7_AQUATIC },
294         { "CAN_SWIM", RF7_CAN_SWIM },
295         { "CAN_FLY", RF7_CAN_FLY },
296         { "FRIENDLY", RF7_FRIENDLY },
297         { "NAZGUL", RF7_NAZGUL },
298         { "UNIQUE2", RF7_UNIQUE2 },
299         { "RIDING", RF7_RIDING },
300         { "KAGE", RF7_KAGE },
301         { "HAS_LITE_1", RF7_HAS_LITE_1 },
302         { "SELF_LITE_1", RF7_SELF_LITE_1 },
303         { "HAS_LITE_2", RF7_HAS_LITE_2 },
304         { "SELF_LITE_2", RF7_SELF_LITE_2 },
305         { "CHAMELEON", RF7_CHAMELEON },
306         { "TANUKI", RF7_TANUKI },
307         { "HAS_DARK_1", RF7_HAS_DARK_1 },
308         { "SELF_DARK_1", RF7_SELF_DARK_1 },
309         { "HAS_DARK_2", RF7_HAS_DARK_2 },
310         { "SELF_DARK_2", RF7_SELF_DARK_2 },
311 };
312
313 /*!
314  * モンスター特性トークンの定義8 /
315  * Monster race flags
316  */
317 const std::unordered_map<std::string_view, race_flags8> r_info_flags8 = {
318         { "WILD_ONLY", RF8_WILD_ONLY },
319         { "WILD_TOWN", RF8_WILD_TOWN },
320     { "NO_QUEST", RF8_NO_QUEST },
321     { "WILD_SHORE", RF8_WILD_SHORE },
322         { "WILD_OCEAN", RF8_WILD_OCEAN },
323         { "WILD_WASTE", RF8_WILD_WASTE },
324         { "WILD_WOOD", RF8_WILD_WOOD },
325         { "WILD_VOLCANO", RF8_WILD_VOLCANO },
326         { "WILD_MOUNTAIN", RF8_WILD_MOUNTAIN },
327         { "WILD_GRASS", RF8_WILD_GRASS },
328         { "WILD_SWAMP", RF8_WILD_SWAMP },
329         { "WILD_ALL", RF8_WILD_ALL },
330 };
331
332 /*!
333  * モンスター特性トークンの定義9 /
334  * Monster race flags
335  */
336 const std::unordered_map<std::string_view, race_flags9> r_info_flags9 = {
337         { "DROP_CORPSE", RF9_DROP_CORPSE },
338         { "DROP_SKELETON", RF9_DROP_SKELETON },
339         { "EAT_BLIND", RF9_EAT_BLIND },
340         { "EAT_CONF", RF9_EAT_CONF },
341         { "EAT_MANA", RF9_EAT_MANA },
342         { "EAT_NEXUS", RF9_EAT_NEXUS },
343         // { "EAT_BLINK", RF9_EAT_BLINK }, //<! @note フラグ未定義
344         { "EAT_SLEEP", RF9_EAT_SLEEP },
345         { "EAT_BERSERKER", RF9_EAT_BERSERKER },
346         { "EAT_ACIDIC", RF9_EAT_ACIDIC },
347         { "EAT_SPEED", RF9_EAT_SPEED },
348         { "EAT_CURE", RF9_EAT_CURE },
349         { "EAT_FIRE_RES", RF9_EAT_FIRE_RES },
350         { "EAT_COLD_RES", RF9_EAT_COLD_RES },
351         { "EAT_ACID_RES", RF9_EAT_ACID_RES },
352         { "EAT_ELEC_RES", RF9_EAT_ELEC_RES },
353         { "EAT_POIS_RES", RF9_EAT_POIS_RES },
354         { "EAT_INSANITY", RF9_EAT_INSANITY },
355         { "EAT_DRAIN_EXP", RF9_EAT_DRAIN_EXP },
356         { "EAT_POISONOUS", RF9_EAT_POISONOUS },
357         { "EAT_GIVE_STR", RF9_EAT_GIVE_STR },
358         { "EAT_GIVE_INT", RF9_EAT_GIVE_INT },
359         { "EAT_GIVE_WIS", RF9_EAT_GIVE_WIS },
360         { "EAT_GIVE_DEX", RF9_EAT_GIVE_DEX },
361         { "EAT_GIVE_CON", RF9_EAT_GIVE_CON },
362         { "EAT_GIVE_CHR", RF9_EAT_GIVE_CHR },
363         { "EAT_LOSE_STR", RF9_EAT_LOSE_STR },
364         { "EAT_LOSE_INT", RF9_EAT_LOSE_INT },
365         { "EAT_LOSE_WIS", RF9_EAT_LOSE_WIS },
366         { "EAT_LOSE_DEX", RF9_EAT_LOSE_DEX },
367         { "EAT_LOSE_CON", RF9_EAT_LOSE_CON },
368         { "EAT_LOSE_CHR", RF9_EAT_LOSE_CHR },
369         { "EAT_DRAIN_MANA", RF9_EAT_DRAIN_MANA },
370 };
371
372 /*!
373  * モンスター特性トークンの定義R(耐性) /
374  * Monster race flags
375  */
376 const std::unordered_map<std::string_view, race_flags_resistance> r_info_flagsr = {
377         { "IM_ACID", RFR_IM_ACID },
378         { "IM_ELEC", RFR_IM_ELEC },
379         { "IM_FIRE", RFR_IM_FIRE },
380         { "IM_COLD", RFR_IM_COLD },
381         { "IM_POIS", RFR_IM_POIS },
382         { "RES_LITE", RFR_RES_LITE },
383         { "RES_DARK", RFR_RES_DARK },
384         { "RES_NETH", RFR_RES_NETH },
385         { "RES_WATE", RFR_RES_WATE },
386         { "RES_PLAS", RFR_RES_PLAS },
387         { "RES_SHAR", RFR_RES_SHAR },
388         { "RES_SOUN", RFR_RES_SOUN },
389         { "RES_CHAO", RFR_RES_CHAO },
390         { "RES_NEXU", RFR_RES_NEXU },
391         { "RES_DISE", RFR_RES_DISE },
392         { "RES_WALL", RFR_RES_WALL },
393         { "RES_INER", RFR_RES_INER },
394         { "RES_TIME", RFR_RES_TIME },
395         { "RES_GRAV", RFR_RES_GRAV },
396         { "RES_ALL", RFR_RES_ALL },
397         { "RES_TELE", RFR_RES_TELE },
398 };