OSDN Git Service

b20cee30d84461f4d123ccdbd1804bf37a8306c0
[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         { "FLAVOR", RBE_FLAVOR },
79 };
80
81 /*!
82  * モンスター特性トークンの定義1 /
83  * Monster race flags
84  */
85 const std::unordered_map<std::string_view, race_flags1> r_info_flags1 = {
86         { "UNIQUE", RF1_UNIQUE },
87         { "QUESTOR", RF1_QUESTOR },
88         { "MALE", RF1_MALE },
89         { "FEMALE", RF1_FEMALE },
90         { "CHAR_CLEAR", RF1_CHAR_CLEAR },
91         { "SHAPECHANGER", RF1_SHAPECHANGER },
92         { "ATTR_CLEAR", RF1_ATTR_CLEAR },
93         { "ATTR_MULTI", RF1_ATTR_MULTI },
94         { "FORCE_DEPTH", RF1_FORCE_DEPTH },
95         { "FORCE_MAXHP", RF1_FORCE_MAXHP },
96         { "PREVENT_SUDDEN_MAGIC", RF1_PREVENT_SUDDEN_MAGIC },
97         { "FORCE_EXTRA", RF1_FORCE_EXTRA },
98         { "ATTR_SEMIRAND", RF1_ATTR_SEMIRAND },
99         { "FRIENDS", RF1_FRIENDS },
100         { "ESCORT", RF1_ESCORT },
101         { "ESCORTS", RF1_ESCORTS },
102         { "NEVER_BLOW", RF1_NEVER_BLOW },
103         { "NEVER_MOVE", RF1_NEVER_MOVE },
104         { "RAND_25", RF1_RAND_25 },
105         { "RAND_50", RF1_RAND_50 },
106         { "ONLY_GOLD", RF1_ONLY_GOLD },
107         { "ONLY_ITEM", RF1_ONLY_ITEM },
108         { "DROP_60", RF1_DROP_60 },
109         { "DROP_90", RF1_DROP_90 },
110         { "DROP_1D2", RF1_DROP_1D2 },
111         { "DROP_2D2", RF1_DROP_2D2 },
112         { "DROP_3D2", RF1_DROP_3D2 },
113         { "DROP_4D2", RF1_DROP_4D2 },
114         { "DROP_GOOD", RF1_DROP_GOOD },
115         { "DROP_GREAT", RF1_DROP_GREAT },
116 };
117
118 /*!
119  * モンスター特性トークンの定義2 /
120  * Monster race flags
121  */
122 const std::unordered_map<std::string_view, race_flags2> r_info_flags2 = {
123         { "STUPID", RF2_STUPID },
124         { "SMART", RF2_SMART },
125         { "CAN_SPEAK", RF2_CAN_SPEAK },
126         { "REFLECTING", RF2_REFLECTING },
127         { "INVISIBLE", RF2_INVISIBLE },
128         { "COLD_BLOOD", RF2_COLD_BLOOD },
129         { "EMPTY_MIND", RF2_EMPTY_MIND },
130         { "WEIRD_MIND", RF2_WEIRD_MIND },
131         { "MULTIPLY", RF2_MULTIPLY },
132         { "REGENERATE", RF2_REGENERATE },
133         { "CHAR_MULTI", RF2_CHAR_MULTI },
134         { "ATTR_ANY", RF2_ATTR_ANY },
135         { "POWERFUL", RF2_POWERFUL },
136         { "ELDRITCH_HORROR", RF2_ELDRITCH_HORROR },
137         { "AURA_FIRE", RF2_AURA_FIRE },
138         { "AURA_ELEC", RF2_AURA_ELEC },
139         { "OPEN_DOOR", RF2_OPEN_DOOR },
140         { "BASH_DOOR", RF2_BASH_DOOR },
141         { "PASS_WALL", RF2_PASS_WALL },
142         { "KILL_WALL", RF2_KILL_WALL },
143         { "MOVE_BODY", RF2_MOVE_BODY },
144         { "KILL_BODY", RF2_KILL_BODY },
145         { "TAKE_ITEM", RF2_TAKE_ITEM },
146         { "KILL_ITEM", RF2_KILL_ITEM },
147         { "HUMAN", RF2_HUMAN },
148         { "QUANTUM", RF2_QUANTUM }
149 };
150
151 /*!
152  * モンスター特性トークンの定義3 /
153  * Monster race flags
154  */
155 const std::unordered_map<std::string_view, race_flags3> r_info_flags3 = {
156         { "ORC", RF3_ORC },
157         { "TROLL", RF3_TROLL },
158         { "GIANT", RF3_GIANT },
159         { "DRAGON", RF3_DRAGON },
160         { "DEMON", RF3_DEMON },
161         { "UNDEAD", RF3_UNDEAD },
162         { "EVIL", RF3_EVIL },
163         { "ANIMAL", RF3_ANIMAL },
164         { "AMBERITE", RF3_AMBERITE },
165         { "GOOD", RF3_GOOD },
166         { "AURA_COLD", RF3_AURA_COLD },
167         { "NONLIVING", RF3_NONLIVING },
168         { "HURT_LITE", RF3_HURT_LITE },
169         { "HURT_ROCK", RF3_HURT_ROCK },
170         { "HURT_FIRE", RF3_HURT_FIRE },
171         { "HURT_COLD", RF3_HURT_COLD },
172         { "ANGEL", RF3_ANGEL },
173         { "NO_FEAR", RF3_NO_FEAR },
174         { "NO_STUN", RF3_NO_STUN },
175         { "NO_CONF", RF3_NO_CONF },
176         { "NO_SLEEP", RF3_NO_SLEEP }
177 };
178
179 /*!
180  * モンスター特性トークン (発動型能力) /
181  * Monster race flags
182  */
183 /* clang-format off */
184 const std::unordered_map<std::string_view, RF_ABILITY> r_info_ability_flags = {
185         {"SHRIEK", RF_ABILITY::SHRIEK },
186         {"XXX1", RF_ABILITY::XXX1 },
187         {"DISPEL", RF_ABILITY::DISPEL },
188         {"ROCKET", RF_ABILITY::ROCKET },
189         {"SHOOT", RF_ABILITY::SHOOT },
190         {"XXX2", RF_ABILITY::XXX2 },
191         {"XXX3", RF_ABILITY::XXX3 },
192         {"XXX4", RF_ABILITY::XXX4 },
193         {"BR_ACID", RF_ABILITY::BR_ACID },
194         {"BR_ELEC", RF_ABILITY::BR_ELEC },
195         {"BR_FIRE", RF_ABILITY::BR_FIRE },
196         {"BR_COLD", RF_ABILITY::BR_COLD },
197         {"BR_POIS", RF_ABILITY::BR_POIS },
198         {"BR_NETH", RF_ABILITY::BR_NETH },
199         {"BR_LITE", RF_ABILITY::BR_LITE },
200         {"BR_DARK", RF_ABILITY::BR_DARK },
201         {"BR_CONF", RF_ABILITY::BR_CONF },
202         {"BR_SOUN", RF_ABILITY::BR_SOUN },
203         {"BR_CHAO", RF_ABILITY::BR_CHAO },
204         {"BR_DISE", RF_ABILITY::BR_DISE },
205         {"BR_NEXU", RF_ABILITY::BR_NEXU },
206         {"BR_TIME", RF_ABILITY::BR_TIME },
207         {"BR_INER", RF_ABILITY::BR_INER },
208         {"BR_GRAV", RF_ABILITY::BR_GRAV },
209         {"BR_SHAR", RF_ABILITY::BR_SHAR },
210         {"BR_PLAS", RF_ABILITY::BR_PLAS },
211         {"BR_FORC", RF_ABILITY::BR_FORC },
212         {"BR_MANA", RF_ABILITY::BR_MANA },
213         {"BA_NUKE", RF_ABILITY::BA_NUKE },
214         {"BR_NUKE", RF_ABILITY::BR_NUKE },
215         {"BA_CHAO", RF_ABILITY::BA_CHAO },
216         {"BR_DISI", RF_ABILITY::BR_DISI },
217
218         {"BA_ACID", RF_ABILITY::BA_ACID },
219         {"BA_ELEC", RF_ABILITY::BA_ELEC },
220         {"BA_FIRE", RF_ABILITY::BA_FIRE },
221         {"BA_COLD", RF_ABILITY::BA_COLD },
222         {"BA_POIS", RF_ABILITY::BA_POIS },
223         {"BA_NETH", RF_ABILITY::BA_NETH },
224         {"BA_WATE", RF_ABILITY::BA_WATE },
225         {"BA_MANA", RF_ABILITY::BA_MANA },
226         {"BA_DARK", RF_ABILITY::BA_DARK },
227         {"DRAIN_MANA", RF_ABILITY::DRAIN_MANA },
228         {"MIND_BLAST", RF_ABILITY::MIND_BLAST },
229         {"BRAIN_SMASH", RF_ABILITY::BRAIN_SMASH },
230         {"CAUSE_1", RF_ABILITY::CAUSE_1 },
231         {"CAUSE_2", RF_ABILITY::CAUSE_2 },
232         {"CAUSE_3", RF_ABILITY::CAUSE_3 },
233         {"CAUSE_4", RF_ABILITY::CAUSE_4 },
234         {"BO_ACID", RF_ABILITY::BO_ACID },
235         {"BO_ELEC", RF_ABILITY::BO_ELEC },
236         {"BO_FIRE", RF_ABILITY::BO_FIRE },
237         {"BO_COLD", RF_ABILITY::BO_COLD },
238         {"BA_LITE", RF_ABILITY::BA_LITE },
239         {"BO_NETH", RF_ABILITY::BO_NETH },
240         {"BO_WATE", RF_ABILITY::BO_WATE },
241         {"BO_MANA", RF_ABILITY::BO_MANA },
242         {"BO_PLAS", RF_ABILITY::BO_PLAS },
243         {"BO_ICEE", RF_ABILITY::BO_ICEE },
244         {"MISSILE", RF_ABILITY::MISSILE },
245         {"SCARE", RF_ABILITY::SCARE },
246         {"BLIND", RF_ABILITY::BLIND },
247         {"CONF", RF_ABILITY::CONF },
248         {"SLOW", RF_ABILITY::SLOW },
249         {"HOLD", RF_ABILITY::HOLD },
250
251         {"HASTE", RF_ABILITY::HASTE },
252         {"HAND_DOOM", RF_ABILITY::HAND_DOOM },
253         {"HEAL", RF_ABILITY::HEAL },
254         {"INVULNER", RF_ABILITY::INVULNER },
255         {"BLINK", RF_ABILITY::BLINK },
256         {"TPORT", RF_ABILITY::TPORT },
257         {"WORLD", RF_ABILITY::WORLD },
258         {"SPECIAL", RF_ABILITY::SPECIAL },
259         {"TELE_TO", RF_ABILITY::TELE_TO },
260         {"TELE_AWAY", RF_ABILITY::TELE_AWAY },
261         {"TELE_LEVEL", RF_ABILITY::TELE_LEVEL },
262         {"PSY_SPEAR", RF_ABILITY::PSY_SPEAR },
263         {"DARKNESS", RF_ABILITY::DARKNESS },
264         {"TRAPS", RF_ABILITY::TRAPS },
265         {"FORGET", RF_ABILITY::FORGET },
266         {"ANIM_DEAD", RF_ABILITY::RAISE_DEAD /* ToDo: Implement ANIM_DEAD */ },
267         {"S_KIN", RF_ABILITY::S_KIN },
268         {"S_CYBER", RF_ABILITY::S_CYBER },
269         {"S_MONSTER", RF_ABILITY::S_MONSTER },
270         {"S_MONSTERS", RF_ABILITY::S_MONSTERS },
271         {"S_ANT", RF_ABILITY::S_ANT },
272         {"S_SPIDER", RF_ABILITY::S_SPIDER },
273         {"S_HOUND", RF_ABILITY::S_HOUND },
274         {"S_HYDRA", RF_ABILITY::S_HYDRA },
275         {"S_ANGEL", RF_ABILITY::S_ANGEL },
276         {"S_DEMON", RF_ABILITY::S_DEMON },
277         {"S_UNDEAD", RF_ABILITY::S_UNDEAD },
278         {"S_DRAGON", RF_ABILITY::S_DRAGON },
279         {"S_HI_UNDEAD", RF_ABILITY::S_HI_UNDEAD },
280         {"S_HI_DRAGON", RF_ABILITY::S_HI_DRAGON },
281         {"S_AMBERITES", RF_ABILITY::S_AMBERITES },
282         {"S_UNIQUE", RF_ABILITY::S_UNIQUE },
283 };
284 /* clang-format on */
285
286 /*!
287  * モンスター特性トークンの定義7 /
288  * Monster race flags
289  * "GUARDIAN" ... init.c d_infoの FINAL_GUARDIAN_* にて自動指定
290  */
291 const std::unordered_map<std::string_view, race_flags7> r_info_flags7 = {
292         { "AQUATIC", RF7_AQUATIC },
293         { "CAN_SWIM", RF7_CAN_SWIM },
294         { "CAN_FLY", RF7_CAN_FLY },
295         { "FRIENDLY", RF7_FRIENDLY },
296         { "NAZGUL", RF7_NAZGUL },
297         { "UNIQUE2", RF7_UNIQUE2 },
298         { "RIDING", RF7_RIDING },
299         { "KAGE", RF7_KAGE },
300         { "HAS_LITE_1", RF7_HAS_LITE_1 },
301         { "SELF_LITE_1", RF7_SELF_LITE_1 },
302         { "HAS_LITE_2", RF7_HAS_LITE_2 },
303         { "SELF_LITE_2", RF7_SELF_LITE_2 },
304         { "CHAMELEON", RF7_CHAMELEON },
305         { "TANUKI", RF7_TANUKI },
306         { "HAS_DARK_1", RF7_HAS_DARK_1 },
307         { "SELF_DARK_1", RF7_SELF_DARK_1 },
308         { "HAS_DARK_2", RF7_HAS_DARK_2 },
309         { "SELF_DARK_2", RF7_SELF_DARK_2 },
310 };
311
312 /*!
313  * モンスター特性トークンの定義8 /
314  * Monster race flags
315  */
316 const std::unordered_map<std::string_view, race_flags8> r_info_flags8 = {
317         { "WILD_ONLY", RF8_WILD_ONLY },
318         { "WILD_TOWN", RF8_WILD_TOWN },
319         { "WILD_SHORE", RF8_WILD_SHORE },
320         { "WILD_OCEAN", RF8_WILD_OCEAN },
321         { "WILD_WASTE", RF8_WILD_WASTE },
322         { "WILD_WOOD", RF8_WILD_WOOD },
323         { "WILD_VOLCANO", RF8_WILD_VOLCANO },
324         { "WILD_MOUNTAIN", RF8_WILD_MOUNTAIN },
325         { "WILD_GRASS", RF8_WILD_GRASS },
326         { "WILD_SWAMP", RF8_WILD_SWAMP },
327         { "WILD_ALL", RF8_WILD_ALL },
328 };
329
330 /*!
331  * モンスター特性トークンの定義9 /
332  * Monster race flags
333  */
334 const std::unordered_map<std::string_view, race_flags9> r_info_flags9 = {
335         { "DROP_CORPSE", RF9_DROP_CORPSE },
336         { "DROP_SKELETON", RF9_DROP_SKELETON },
337         { "EAT_BLIND", RF9_EAT_BLIND },
338         { "EAT_CONF", RF9_EAT_CONF },
339         { "EAT_MANA", RF9_EAT_MANA },
340         { "EAT_NEXUS", RF9_EAT_NEXUS },
341         // { "EAT_BLINK", RF9_EAT_BLINK }, //<! @note フラグ未定義
342         { "EAT_SLEEP", RF9_EAT_SLEEP },
343         { "EAT_BERSERKER", RF9_EAT_BERSERKER },
344         { "EAT_ACIDIC", RF9_EAT_ACIDIC },
345         { "EAT_SPEED", RF9_EAT_SPEED },
346         { "EAT_CURE", RF9_EAT_CURE },
347         { "EAT_FIRE_RES", RF9_EAT_FIRE_RES },
348         { "EAT_COLD_RES", RF9_EAT_COLD_RES },
349         { "EAT_ACID_RES", RF9_EAT_ACID_RES },
350         { "EAT_ELEC_RES", RF9_EAT_ELEC_RES },
351         { "EAT_POIS_RES", RF9_EAT_POIS_RES },
352         { "EAT_INSANITY", RF9_EAT_INSANITY },
353         { "EAT_DRAIN_EXP", RF9_EAT_DRAIN_EXP },
354         { "EAT_POISONOUS", RF9_EAT_POISONOUS },
355         { "EAT_GIVE_STR", RF9_EAT_GIVE_STR },
356         { "EAT_GIVE_INT", RF9_EAT_GIVE_INT },
357         { "EAT_GIVE_WIS", RF9_EAT_GIVE_WIS },
358         { "EAT_GIVE_DEX", RF9_EAT_GIVE_DEX },
359         { "EAT_GIVE_CON", RF9_EAT_GIVE_CON },
360         { "EAT_GIVE_CHR", RF9_EAT_GIVE_CHR },
361         { "EAT_LOSE_STR", RF9_EAT_LOSE_STR },
362         { "EAT_LOSE_INT", RF9_EAT_LOSE_INT },
363         { "EAT_LOSE_WIS", RF9_EAT_LOSE_WIS },
364         { "EAT_LOSE_DEX", RF9_EAT_LOSE_DEX },
365         { "EAT_LOSE_CON", RF9_EAT_LOSE_CON },
366         { "EAT_LOSE_CHR", RF9_EAT_LOSE_CHR },
367         { "EAT_DRAIN_MANA", RF9_EAT_DRAIN_MANA },
368 };
369
370 /*!
371  * モンスター特性トークンの定義R(耐性) /
372  * Monster race flags
373  */
374 const std::unordered_map<std::string_view, race_flags_resistance> r_info_flagsr = {
375         { "IM_ACID", RFR_IM_ACID },
376         { "IM_ELEC", RFR_IM_ELEC },
377         { "IM_FIRE", RFR_IM_FIRE },
378         { "IM_COLD", RFR_IM_COLD },
379         { "IM_POIS", RFR_IM_POIS },
380         { "RES_LITE", RFR_RES_LITE },
381         { "RES_DARK", RFR_RES_DARK },
382         { "RES_NETH", RFR_RES_NETH },
383         { "RES_WATE", RFR_RES_WATE },
384         { "RES_PLAS", RFR_RES_PLAS },
385         { "RES_SHAR", RFR_RES_SHAR },
386         { "RES_SOUN", RFR_RES_SOUN },
387         { "RES_CHAO", RFR_RES_CHAO },
388         { "RES_NEXU", RFR_RES_NEXU },
389         { "RES_DISE", RFR_RES_DISE },
390         { "RES_WALL", RFR_RES_WALL },
391         { "RES_INER", RFR_RES_INER },
392         { "RES_TIME", RFR_RES_TIME },
393         { "RES_GRAV", RFR_RES_GRAV },
394         { "RES_ALL", RFR_RES_ALL },
395         { "RES_TELE", RFR_RES_TELE },
396 };