OSDN Git Service

[Implement] カオス効果(混沌を呼び起こす)の打撃を追加した
[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-table.h"
4 #include "monster-race/race-ability-flags.h"
5 #include "monster-race/race-brightness-flags.h"
6 #include "monster-race/race-drop-flags.h"
7 #include "monster-race/race-feature-flags.h"
8 #include "monster-race/race-kind-flags.h"
9 #include "monster-race/race-population-flags.h"
10 #include "monster-race/race-speak-flags.h"
11 #include "monster-race/race-visual-flags.h"
12 #include "monster-race/race-wilderness-flags.h"
13
14 /*!
15  * モンスターの打撃手段トークンの定義 /
16  * Monster Blow Methods
17  */
18 const std::unordered_map<std::string_view, RaceBlowMethodType> r_info_blow_method = {
19     { "HIT", RaceBlowMethodType::HIT },
20     { "TOUCH", RaceBlowMethodType::TOUCH },
21     { "PUNCH", RaceBlowMethodType::PUNCH },
22     { "KICK", RaceBlowMethodType::KICK },
23     { "CLAW", RaceBlowMethodType::CLAW },
24     { "BITE", RaceBlowMethodType::BITE },
25     { "STING", RaceBlowMethodType::STING },
26     { "SLASH", RaceBlowMethodType::SLASH },
27     { "BUTT", RaceBlowMethodType::BUTT },
28     { "CRUSH", RaceBlowMethodType::CRUSH },
29     { "ENGULF", RaceBlowMethodType::ENGULF },
30     { "CHARGE", RaceBlowMethodType::CHARGE },
31     { "CRAWL", RaceBlowMethodType::CRAWL },
32     { "DROOL", RaceBlowMethodType::DROOL },
33     { "SPIT", RaceBlowMethodType::SPIT },
34     { "EXPLODE", RaceBlowMethodType::EXPLODE },
35     { "GAZE", RaceBlowMethodType::GAZE },
36     { "WAIL", RaceBlowMethodType::WAIL },
37     { "SPORE", RaceBlowMethodType::SPORE },
38     { "XXX4", RaceBlowMethodType::XXX4 },
39     { "BEG", RaceBlowMethodType::BEG },
40     { "INSULT", RaceBlowMethodType::INSULT },
41     { "MOAN", RaceBlowMethodType::MOAN },
42     { "SHOW", RaceBlowMethodType::SHOW },
43     { "SHOOT", RaceBlowMethodType::SHOOT },
44 };
45
46 /*!
47  * モンスターの打撃属性トークンの定義 /
48  * Monster Blow Effects
49  */
50 const std::unordered_map<std::string_view, RaceBlowEffectType> r_info_blow_effect = {
51     { "HURT", RaceBlowEffectType::HURT },
52     { "POISON", RaceBlowEffectType::POISON },
53     { "UN_BONUS", RaceBlowEffectType::UN_BONUS },
54     { "UN_POWER", RaceBlowEffectType::UN_POWER },
55     { "EAT_GOLD", RaceBlowEffectType::EAT_GOLD },
56     { "EAT_ITEM", RaceBlowEffectType::EAT_ITEM },
57     { "EAT_FOOD", RaceBlowEffectType::EAT_FOOD },
58     { "EAT_LITE", RaceBlowEffectType::EAT_LITE },
59     { "ACID", RaceBlowEffectType::ACID },
60     { "ELEC", RaceBlowEffectType::ELEC },
61     { "FIRE", RaceBlowEffectType::FIRE },
62     { "COLD", RaceBlowEffectType::COLD },
63     { "BLIND", RaceBlowEffectType::BLIND },
64     { "CONFUSE", RaceBlowEffectType::CONFUSE },
65     { "TERRIFY", RaceBlowEffectType::TERRIFY },
66     { "PARALYZE", RaceBlowEffectType::PARALYZE },
67     { "LOSE_STR", RaceBlowEffectType::LOSE_STR },
68     { "LOSE_INT", RaceBlowEffectType::LOSE_INT },
69     { "LOSE_WIS", RaceBlowEffectType::LOSE_WIS },
70     { "LOSE_DEX", RaceBlowEffectType::LOSE_DEX },
71     { "LOSE_CON", RaceBlowEffectType::LOSE_CON },
72     { "LOSE_CHR", RaceBlowEffectType::LOSE_CHR },
73     { "LOSE_ALL", RaceBlowEffectType::LOSE_ALL },
74     { "SHATTER", RaceBlowEffectType::SHATTER },
75     { "EXP_10", RaceBlowEffectType::EXP_10 },
76     { "EXP_20", RaceBlowEffectType::EXP_20 },
77     { "EXP_40", RaceBlowEffectType::EXP_40 },
78     { "EXP_80", RaceBlowEffectType::EXP_80 },
79     { "DISEASE", RaceBlowEffectType::DISEASE },
80     { "TIME", RaceBlowEffectType::TIME },
81     { "EXP_VAMP", RaceBlowEffectType::DR_LIFE },
82     { "DR_MANA", RaceBlowEffectType::DR_MANA },
83     { "SUPERHURT", RaceBlowEffectType::SUPERHURT },
84     { "INERTIA", RaceBlowEffectType::INERTIA },
85     { "STUN", RaceBlowEffectType::STUN },
86     { "HUNGRY", RaceBlowEffectType::HUNGRY },
87     { "CHAOS", RaceBlowEffectType::CHAOS },
88     { "FLAVOR", RaceBlowEffectType::FLAVOR },
89 };
90
91 /*!
92  * モンスター特性トークンの定義1 /
93  * Monster race flags
94  */
95 const std::unordered_map<std::string_view, race_flags1> r_info_flags1 = {
96     { "QUESTOR", RF1_QUESTOR },
97     { "MALE", RF1_MALE },
98     { "FEMALE", RF1_FEMALE },
99     { "FORCE_DEPTH", RF1_FORCE_DEPTH },
100     { "FORCE_MAXHP", RF1_FORCE_MAXHP },
101     { "FORCE_EXTRA", RF1_FORCE_EXTRA },
102     { "FRIENDS", RF1_FRIENDS },
103     { "ESCORT", RF1_ESCORT },
104     { "ESCORTS", RF1_ESCORTS },
105 };
106
107 /*!
108  * モンスター特性トークンの定義2 /
109  * Monster race flags
110  */
111 const std::unordered_map<std::string_view, race_flags2> r_info_flags2 = {
112     { "REFLECTING", RF2_REFLECTING },
113     { "INVISIBLE", RF2_INVISIBLE },
114     { "COLD_BLOOD", RF2_COLD_BLOOD },
115     { "EMPTY_MIND", RF2_EMPTY_MIND },
116     { "WEIRD_MIND", RF2_WEIRD_MIND },
117     { "MULTIPLY", RF2_MULTIPLY },
118     { "REGENERATE", RF2_REGENERATE },
119     { "CHAR_MULTI", RF2_CHAR_MULTI },
120     { "POWERFUL", RF2_POWERFUL },
121     { "ELDRITCH_HORROR", RF2_ELDRITCH_HORROR },
122     { "FLAGS2_XX14", RF2_XX14 },
123     { "FLAGS2_XX15", RF2_XX15 },
124 };
125
126 /*!
127  * モンスター特性トークン (発動型能力) /
128  * Monster race flags
129  */
130 /* clang-format off */
131 const std::unordered_map<std::string_view, MonsterAbilityType> r_info_ability_flags = {
132         {"SHRIEK", MonsterAbilityType::SHRIEK },
133         {"XXX1", MonsterAbilityType::XXX1 },
134         {"DISPEL", MonsterAbilityType::DISPEL },
135         {"ROCKET", MonsterAbilityType::ROCKET },
136         {"SHOOT", MonsterAbilityType::SHOOT },
137         {"XXX2", MonsterAbilityType::XXX2 },
138         {"XXX3", MonsterAbilityType::XXX3 },
139         {"XXX4", MonsterAbilityType::XXX4 },
140         {"BR_ACID", MonsterAbilityType::BR_ACID },
141         {"BR_ELEC", MonsterAbilityType::BR_ELEC },
142         {"BR_FIRE", MonsterAbilityType::BR_FIRE },
143         {"BR_COLD", MonsterAbilityType::BR_COLD },
144         {"BR_POIS", MonsterAbilityType::BR_POIS },
145         {"BR_NETH", MonsterAbilityType::BR_NETH },
146         {"BR_LITE", MonsterAbilityType::BR_LITE },
147         {"BR_DARK", MonsterAbilityType::BR_DARK },
148         {"BR_CONF", MonsterAbilityType::BR_CONF },
149         {"BR_SOUN", MonsterAbilityType::BR_SOUN },
150         {"BR_CHAO", MonsterAbilityType::BR_CHAO },
151         {"BR_DISE", MonsterAbilityType::BR_DISE },
152         {"BR_NEXU", MonsterAbilityType::BR_NEXU },
153         {"BR_TIME", MonsterAbilityType::BR_TIME },
154         {"BR_INER", MonsterAbilityType::BR_INER },
155         {"BR_GRAV", MonsterAbilityType::BR_GRAV },
156         {"BR_SHAR", MonsterAbilityType::BR_SHAR },
157         {"BR_PLAS", MonsterAbilityType::BR_PLAS },
158         {"BR_FORC", MonsterAbilityType::BR_FORC },
159         {"BR_MANA", MonsterAbilityType::BR_MANA },
160         {"BA_NUKE", MonsterAbilityType::BA_NUKE },
161         {"BR_NUKE", MonsterAbilityType::BR_NUKE },
162         {"BA_CHAO", MonsterAbilityType::BA_CHAO },
163         {"BR_DISI", MonsterAbilityType::BR_DISI },
164         {"BR_VOID", MonsterAbilityType::BR_VOID },
165         {"BR_ABYSS", MonsterAbilityType::BR_ABYSS },
166
167         {"BA_ACID", MonsterAbilityType::BA_ACID },
168         {"BA_ELEC", MonsterAbilityType::BA_ELEC },
169         {"BA_FIRE", MonsterAbilityType::BA_FIRE },
170         {"BA_COLD", MonsterAbilityType::BA_COLD },
171         {"BA_POIS", MonsterAbilityType::BA_POIS },
172         {"BA_NETH", MonsterAbilityType::BA_NETH },
173         {"BA_WATE", MonsterAbilityType::BA_WATE },
174         {"BA_MANA", MonsterAbilityType::BA_MANA },
175         {"BA_DARK", MonsterAbilityType::BA_DARK },
176         {"BA_VOID", MonsterAbilityType::BA_VOID },
177         {"BA_ABYSS", MonsterAbilityType::BA_ABYSS },
178         {"BA_METEOR", MonsterAbilityType::BA_METEOR },
179         {"DRAIN_MANA", MonsterAbilityType::DRAIN_MANA },
180         {"MIND_BLAST", MonsterAbilityType::MIND_BLAST },
181         {"BRAIN_SMASH", MonsterAbilityType::BRAIN_SMASH },
182         {"CAUSE_1", MonsterAbilityType::CAUSE_1 },
183         {"CAUSE_2", MonsterAbilityType::CAUSE_2 },
184         {"CAUSE_3", MonsterAbilityType::CAUSE_3 },
185         {"CAUSE_4", MonsterAbilityType::CAUSE_4 },
186         {"BO_ACID", MonsterAbilityType::BO_ACID },
187         {"BO_ELEC", MonsterAbilityType::BO_ELEC },
188         {"BO_FIRE", MonsterAbilityType::BO_FIRE },
189         {"BO_COLD", MonsterAbilityType::BO_COLD },
190         {"BA_LITE", MonsterAbilityType::BA_LITE },
191         {"BO_NETH", MonsterAbilityType::BO_NETH },
192         {"BO_WATE", MonsterAbilityType::BO_WATE },
193         {"BO_MANA", MonsterAbilityType::BO_MANA },
194         {"BO_PLAS", MonsterAbilityType::BO_PLAS },
195         {"BO_ICEE", MonsterAbilityType::BO_ICEE },
196         {"BO_VOID", MonsterAbilityType::BO_VOID },
197         {"BO_ABYSS", MonsterAbilityType::BO_ABYSS },
198         {"BO_METEOR", MonsterAbilityType::BO_METEOR },
199         {"MISSILE", MonsterAbilityType::MISSILE },
200         {"SCARE", MonsterAbilityType::SCARE },
201         {"BLIND", MonsterAbilityType::BLIND },
202         {"CONF", MonsterAbilityType::CONF },
203         {"SLOW", MonsterAbilityType::SLOW },
204         {"HOLD", MonsterAbilityType::HOLD },
205
206         {"HASTE", MonsterAbilityType::HASTE },
207         {"HAND_DOOM", MonsterAbilityType::HAND_DOOM },
208         {"HEAL", MonsterAbilityType::HEAL },
209         {"INVULNER", MonsterAbilityType::INVULNER },
210         {"BLINK", MonsterAbilityType::BLINK },
211         {"TPORT", MonsterAbilityType::TPORT },
212         {"WORLD", MonsterAbilityType::WORLD },
213         {"SPECIAL", MonsterAbilityType::SPECIAL },
214         {"TELE_TO", MonsterAbilityType::TELE_TO },
215         {"TELE_AWAY", MonsterAbilityType::TELE_AWAY },
216         {"TELE_LEVEL", MonsterAbilityType::TELE_LEVEL },
217         {"PSY_SPEAR", MonsterAbilityType::PSY_SPEAR },
218         {"DARKNESS", MonsterAbilityType::DARKNESS },
219         {"TRAPS", MonsterAbilityType::TRAPS },
220         {"FORGET", MonsterAbilityType::FORGET },
221         {"ANIM_DEAD", MonsterAbilityType::RAISE_DEAD /* ToDo: Implement ANIM_DEAD */ },
222         {"S_KIN", MonsterAbilityType::S_KIN },
223         {"S_CYBER", MonsterAbilityType::S_CYBER },
224         {"S_MONSTER", MonsterAbilityType::S_MONSTER },
225         {"S_MONSTERS", MonsterAbilityType::S_MONSTERS },
226         {"S_ANT", MonsterAbilityType::S_ANT },
227         {"S_SPIDER", MonsterAbilityType::S_SPIDER },
228         {"S_HOUND", MonsterAbilityType::S_HOUND },
229         {"S_HYDRA", MonsterAbilityType::S_HYDRA },
230         {"S_ANGEL", MonsterAbilityType::S_ANGEL },
231         {"S_DEMON", MonsterAbilityType::S_DEMON },
232         {"S_UNDEAD", MonsterAbilityType::S_UNDEAD },
233         {"S_DRAGON", MonsterAbilityType::S_DRAGON },
234         {"S_HI_UNDEAD", MonsterAbilityType::S_HI_UNDEAD },
235         {"S_HI_DRAGON", MonsterAbilityType::S_HI_DRAGON },
236         {"S_AMBERITES", MonsterAbilityType::S_AMBERITES },
237         {"S_UNIQUE", MonsterAbilityType::S_UNIQUE },
238         {"S_DEAD_UNIQUE", MonsterAbilityType::S_DEAD_UNIQUE },
239 };
240 /* clang-format on */
241
242 /*!
243  * @brief モンスター特性トークンの定義7
244  * @details ダンジョンの主は、DungeonDefinitions の FINAL_GUARDIAN_HOGE にて自動指定
245  * HOGE は、MonsterRaceDefinitions で定義したモンスター種族ID
246  */
247 const std::unordered_map<std::string_view, race_flags7> r_info_flags7 = {
248     { "UNIQUE2", RF7_UNIQUE2 },
249     { "RIDING", RF7_RIDING },
250     { "KAGE", RF7_KAGE },
251     { "CHAMELEON", RF7_CHAMELEON },
252     { "TANUKI", RF7_TANUKI },
253 };
254
255 /*!
256  * モンスター特性トークンの定義8 /
257  * Monster race flags
258  */
259 const std::unordered_map<std::string_view, race_flags8> r_info_flags8 = {
260     { "NO_QUEST", RF8_NO_QUEST },
261 };
262
263 /*!
264  * モンスター特性トークンの定義R(耐性) /
265  * Monster race flags
266  */
267 const std::unordered_map<std::string_view, MonsterResistanceType> r_info_flagsr = {
268     { "RES_ALL", MonsterResistanceType::RESIST_ALL },
269     { "HURT_ACID", MonsterResistanceType::HURT_ACID },
270     { "RES_ACID", MonsterResistanceType::RESIST_ACID },
271     { "IM_ACID", MonsterResistanceType::IMMUNE_ACID },
272     { "HURT_ELEC", MonsterResistanceType::HURT_ELEC },
273     { "RES_ELEC", MonsterResistanceType::RESIST_ELEC },
274     { "IM_ELEC", MonsterResistanceType::IMMUNE_ELEC },
275     { "HURT_FIRE", MonsterResistanceType::HURT_FIRE },
276     { "RES_FIRE", MonsterResistanceType::RESIST_FIRE },
277     { "IM_FIRE", MonsterResistanceType::IMMUNE_FIRE },
278     { "HURT_COLD", MonsterResistanceType::HURT_COLD },
279     { "RES_COLD", MonsterResistanceType::RESIST_FIRE },
280     { "IM_COLD", MonsterResistanceType::IMMUNE_COLD },
281     { "HURT_POIS", MonsterResistanceType::HURT_POISON },
282     { "RES_POIS", MonsterResistanceType::RESIST_POISON },
283     { "IM_POIS", MonsterResistanceType::IMMUNE_POISON },
284     { "HURT_LITE", MonsterResistanceType::HURT_LITE },
285     { "RES_LITE", MonsterResistanceType::RESIST_LITE },
286     { "HURT_DARK", MonsterResistanceType::HURT_DARK },
287     { "RES_DARK", MonsterResistanceType::RESIST_DARK },
288     { "HURT_NETH", MonsterResistanceType::HURT_NETHER },
289     { "RES_NETH", MonsterResistanceType::RESIST_NETHER },
290     { "HURT_WATE", MonsterResistanceType::HURT_WATER },
291     { "RES_WATE", MonsterResistanceType::RESIST_WATER },
292     { "HURT_PLAS", MonsterResistanceType::HURT_PLASMA },
293     { "RES_PLAS", MonsterResistanceType::RESIST_PLASMA },
294     { "HURT_SHAR", MonsterResistanceType::HURT_SHARDS },
295     { "RES_SHAR", MonsterResistanceType::RESIST_SHARDS },
296     { "HURT_SOUN", MonsterResistanceType::HURT_SOUND },
297     { "RES_SOUN", MonsterResistanceType::RESIST_SOUND },
298     { "HURT_CHAO", MonsterResistanceType::HURT_CHAOS },
299     { "RES_CHAO", MonsterResistanceType::RESIST_CHAOS },
300     { "HURT_NEXU", MonsterResistanceType::HURT_NEXUS },
301     { "RES_NEXU", MonsterResistanceType::RESIST_NEXUS },
302     { "HURT_DISE", MonsterResistanceType::HURT_DISENCHANT },
303     { "RES_DISE", MonsterResistanceType::RESIST_DISENCHANT },
304     { "HURT_WALL", MonsterResistanceType::HURT_FORCE },
305     { "RES_WALL", MonsterResistanceType::RESIST_FORCE },
306     { "HURT_INER", MonsterResistanceType::HURT_INERTIA },
307     { "RES_INER", MonsterResistanceType::RESIST_INERTIA },
308     { "HURT_TIME", MonsterResistanceType::HURT_TIME },
309     { "RES_TIME", MonsterResistanceType::RESIST_TIME },
310     { "HURT_GRAV", MonsterResistanceType::HURT_GRAVITY },
311     { "RES_GRAV", MonsterResistanceType::RESIST_GRAVITY },
312     { "RES_TELE", MonsterResistanceType::RESIST_TELEPORT },
313     { "HURT_ROCK", MonsterResistanceType::HURT_ROCK },
314     { "RES_ROCK", MonsterResistanceType::RESIST_ROCK },
315     { "HURT_ABYSS", MonsterResistanceType::HURT_ABYSS },
316     { "RES_ABYSS", MonsterResistanceType::RESIST_ABYSS },
317     { "HURT_VOID", MonsterResistanceType::HURT_VOID_MAGIC },
318     { "RES_VOID", MonsterResistanceType::RESIST_VOID_MAGIC },
319     { "HURT_METEOR", MonsterResistanceType::HURT_METEOR },
320     { "RES_METEOR", MonsterResistanceType::RESIST_METEOR },
321     { "NO_FEAR", MonsterResistanceType::NO_FEAR },
322     { "NO_STUN", MonsterResistanceType::NO_STUN },
323     { "NO_CONF", MonsterResistanceType::NO_CONF },
324     { "NO_SLEEP", MonsterResistanceType::NO_SLEEP }
325 };
326
327 const std::unordered_map<std::string_view, MonsterAuraType> r_info_aura_flags = {
328     { "AURA_FIRE", MonsterAuraType::FIRE },
329     { "AURA_COLD", MonsterAuraType::COLD },
330     { "AURA_ELEC", MonsterAuraType::ELEC },
331     { "AURA_ACID", MonsterAuraType::ACID },
332     { "AURA_POISON", MonsterAuraType::POISON },
333     { "AURA_NUKE", MonsterAuraType::NUKE },
334     { "AURA_PLASMA", MonsterAuraType::PLASMA },
335     { "AURA_WATER", MonsterAuraType::WATER },
336     { "AURA_ICEE", MonsterAuraType::ICEE },
337     { "AURA_LITE", MonsterAuraType::LITE },
338     { "AURA_DARK", MonsterAuraType::DARK },
339     { "AURA_SHARDS", MonsterAuraType::SHARDS },
340     { "AURA_FORCE", MonsterAuraType::FORCE },
341     { "AURA_MANA", MonsterAuraType::MANA },
342     { "AURA_METEOR", MonsterAuraType::METEOR },
343     { "AURA_CHAOS", MonsterAuraType::CHAOS },
344     { "AURA_HOLINESS", MonsterAuraType::HOLINESS },
345     { "AURA_NETHER", MonsterAuraType::NETHER },
346     { "AURA_DISENCHANT", MonsterAuraType::DISENCHANT },
347     { "AURA_NEXUS", MonsterAuraType::NEXUS },
348     { "AURA_TIME", MonsterAuraType::TIME },
349     { "AURA_GRAVITY", MonsterAuraType::GRAVITY },
350     { "AURA_VOIDS", MonsterAuraType::VOIDS },
351     { "AURA_ABYSS", MonsterAuraType::ABYSS },
352 };
353
354 const std::unordered_map<std::string_view, MonsterBehaviorType> r_info_behavior_flags = {
355     { "NEVER_BLOW", MonsterBehaviorType::NEVER_BLOW },
356     { "NEVER_MOVE", MonsterBehaviorType::NEVER_MOVE },
357     { "OPEN_DOOR", MonsterBehaviorType::OPEN_DOOR },
358     { "BASH_DOOR", MonsterBehaviorType::BASH_DOOR },
359     { "MOVE_BODY", MonsterBehaviorType::MOVE_BODY },
360     { "KILL_BODY", MonsterBehaviorType::KILL_BODY },
361     { "TAKE_ITEM", MonsterBehaviorType::TAKE_ITEM },
362     { "KILL_ITEM", MonsterBehaviorType::KILL_ITEM },
363     { "RAND_25", MonsterBehaviorType::RAND_MOVE_25 },
364     { "RAND_50", MonsterBehaviorType::RAND_MOVE_50 },
365     { "STUPID", MonsterBehaviorType::STUPID },
366     { "SMART", MonsterBehaviorType::SMART },
367     { "FRIENDLY", MonsterBehaviorType::FRIENDLY },
368     { "PREVENT_SUDDEN_MAGIC", MonsterBehaviorType::PREVENT_SUDDEN_MAGIC },
369 };
370
371 const std::unordered_map<std::string_view, MonsterVisualType> r_info_visual_flags = {
372     { "CHAR_CLEAR", MonsterVisualType::CLEAR },
373     { "SHAPECHANGER", MonsterVisualType::SHAPECHANGER },
374     { "ATTR_CLEAR", MonsterVisualType::CLEAR_COLOR },
375     { "ATTR_MULTI", MonsterVisualType::MULTI_COLOR },
376     { "ATTR_SEMIRAND", MonsterVisualType::RANDOM_COLOR },
377     { "ATTR_ANY", MonsterVisualType::ANY_COLOR },
378 };
379
380 const std::unordered_map<std::string_view, MonsterKindType> r_info_kind_flags = {
381     { "UNIQUE", MonsterKindType::UNIQUE },
382     { "HUMAN", MonsterKindType::HUMAN },
383     { "QUANTUM", MonsterKindType::QUANTUM },
384     { "ORC", MonsterKindType::ORC },
385     { "TROLL", MonsterKindType::TROLL },
386     { "GIANT", MonsterKindType::GIANT },
387     { "DRAGON", MonsterKindType::DRAGON },
388     { "DEMON", MonsterKindType::DEMON },
389     { "UNDEAD", MonsterKindType::UNDEAD },
390     { "EVIL", MonsterKindType::EVIL },
391     { "ANIMAL", MonsterKindType::ANIMAL },
392     { "AMBERITE", MonsterKindType::AMBERITE },
393     { "GOOD", MonsterKindType::GOOD },
394     { "NONLIVING", MonsterKindType::NONLIVING },
395     { "ANGEL", MonsterKindType::ANGEL },
396 };
397
398 const std::unordered_map<std::string_view, MonsterDropType> r_info_drop_flags = {
399     { "ONLY_GOLD", MonsterDropType::ONLY_GOLD },
400     { "ONLY_ITEM", MonsterDropType::ONLY_ITEM },
401     { "DROP_GOOD", MonsterDropType::DROP_GOOD },
402     { "DROP_GREAT", MonsterDropType::DROP_GREAT },
403     { "DROP_CORPSE", MonsterDropType::DROP_CORPSE },
404     { "DROP_SKELETON", MonsterDropType::DROP_SKELETON },
405     { "DROP_60", MonsterDropType::DROP_60 },
406     { "DROP_90", MonsterDropType::DROP_90 },
407     { "DROP_1D2", MonsterDropType::DROP_1D2 },
408     { "DROP_2D2", MonsterDropType::DROP_2D2 },
409     { "DROP_3D2", MonsterDropType::DROP_3D2 },
410     { "DROP_4D2", MonsterDropType::DROP_4D2 },
411 };
412
413 const std::unordered_map<std::string_view, MonsterWildernessType> r_info_wilderness_flags = {
414     { "WILD_ONLY", MonsterWildernessType::WILD_ONLY },
415     { "WILD_TOWN", MonsterWildernessType::WILD_TOWN },
416     { "WILD_SHORE", MonsterWildernessType::WILD_SHORE },
417     { "WILD_OCEAN", MonsterWildernessType::WILD_OCEAN },
418     { "WILD_WASTE", MonsterWildernessType::WILD_WASTE },
419     { "WILD_WOOD", MonsterWildernessType::WILD_WOOD },
420     { "WILD_VOLCANO", MonsterWildernessType::WILD_VOLCANO },
421     { "WILD_MOUNTAIN", MonsterWildernessType::WILD_MOUNTAIN },
422     { "WILD_GRASS", MonsterWildernessType::WILD_GRASS },
423     { "WILD_SWAMP", MonsterWildernessType::WILD_SWAMP },
424     { "WILD_ALL", MonsterWildernessType::WILD_ALL },
425 };
426
427 const std::unordered_map<std::string_view, MonsterFeatureType> r_info_feature_flags = {
428     { "PASS_WALL", MonsterFeatureType::PASS_WALL },
429     { "KILL_WALL", MonsterFeatureType::KILL_WALL },
430     { "AQUATIC", MonsterFeatureType::AQUATIC },
431     { "CAN_SWIM", MonsterFeatureType::CAN_SWIM },
432     { "CAN_FLY", MonsterFeatureType::CAN_FLY },
433 };
434
435 const std::unordered_map<std::string_view, MonsterPopulationType> r_info_population_flags = {
436     { "NAZGUL", MonsterPopulationType::NAZGUL },
437 };
438
439 const std::unordered_map<std::string_view, MonsterSpeakType> r_info_speak_flags = {
440     { "SPEAK_ALL", MonsterSpeakType::SPEAK_ALL },
441     { "SPEAK_BATTLE", MonsterSpeakType::SPEAK_BATTLE },
442     { "SPEAK_FEAR", MonsterSpeakType::SPEAK_FEAR },
443     { "SPEAK_FRIEND", MonsterSpeakType::SPEAK_FRIEND },
444     { "SPEAK_DEATH", MonsterSpeakType::SPEAK_DEATH },
445     { "SPEAK_SPAWN", MonsterSpeakType::SPEAK_SPAWN },
446 };
447
448 const std::unordered_map<std::string_view, MonsterBrightnessType> r_info_brightness_flags = {
449     { "HAS_LITE_1", MonsterBrightnessType::HAS_LITE_1 },
450     { "SELF_LITE_1", MonsterBrightnessType::SELF_LITE_1 },
451     { "HAS_LITE_2", MonsterBrightnessType::HAS_LITE_2 },
452     { "SELF_LITE_2", MonsterBrightnessType::SELF_LITE_2 },
453     { "HAS_DARK_1", MonsterBrightnessType::HAS_DARK_1 },
454     { "SELF_DARK_1", MonsterBrightnessType::SELF_DARK_1 },
455     { "HAS_DARK_2", MonsterBrightnessType::HAS_DARK_2 },
456     { "SELF_DARK_2", MonsterBrightnessType::SELF_DARK_2 },
457 };