OSDN Git Service

Merge pull request #2122 from sikabane-works/release/3.0.0Alpha52
[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 #include "monster-race/race-visual-flags.h"
6
7 /*!
8  * モンスターの打撃手段トークンの定義 /
9  * Monster Blow Methods
10  */
11 const std::unordered_map<std::string_view, RaceBlowMethodType> r_info_blow_method = {
12     { "HIT", RaceBlowMethodType::HIT },
13     { "TOUCH", RaceBlowMethodType::TOUCH },
14     { "PUNCH", RaceBlowMethodType::PUNCH },
15     { "KICK", RaceBlowMethodType::KICK },
16     { "CLAW", RaceBlowMethodType::CLAW },
17     { "BITE", RaceBlowMethodType::BITE },
18     { "STING", RaceBlowMethodType::STING },
19     { "SLASH", RaceBlowMethodType::SLASH },
20     { "BUTT", RaceBlowMethodType::BUTT },
21     { "CRUSH", RaceBlowMethodType::CRUSH },
22     { "ENGULF", RaceBlowMethodType::ENGULF },
23     { "CHARGE", RaceBlowMethodType::CHARGE },
24     { "CRAWL", RaceBlowMethodType::CRAWL },
25     { "DROOL", RaceBlowMethodType::DROOL },
26     { "SPIT", RaceBlowMethodType::SPIT },
27     { "EXPLODE", RaceBlowMethodType::EXPLODE },
28     { "GAZE", RaceBlowMethodType::GAZE },
29     { "WAIL", RaceBlowMethodType::WAIL },
30     { "SPORE", RaceBlowMethodType::SPORE },
31     { "XXX4", RaceBlowMethodType::XXX4 },
32     { "BEG", RaceBlowMethodType::BEG },
33     { "INSULT", RaceBlowMethodType::INSULT },
34     { "MOAN", RaceBlowMethodType::MOAN },
35     { "SHOW", RaceBlowMethodType::SHOW },
36     { "SHOOT", RaceBlowMethodType::SHOOT },
37 };
38
39 /*!
40  * モンスターの打撃属性トークンの定義 /
41  * Monster Blow Effects
42  */
43 const std::unordered_map<std::string_view, RaceBlowEffectType> r_info_blow_effect = {
44     { "HURT", RaceBlowEffectType::HURT },
45     { "POISON", RaceBlowEffectType::POISON },
46     { "UN_BONUS", RaceBlowEffectType::UN_BONUS },
47     { "UN_POWER", RaceBlowEffectType::UN_POWER },
48     { "EAT_GOLD", RaceBlowEffectType::EAT_GOLD },
49     { "EAT_ITEM", RaceBlowEffectType::EAT_ITEM },
50     { "EAT_FOOD", RaceBlowEffectType::EAT_FOOD },
51     { "EAT_LITE", RaceBlowEffectType::EAT_LITE },
52     { "ACID", RaceBlowEffectType::ACID },
53     { "ELEC", RaceBlowEffectType::ELEC },
54     { "FIRE", RaceBlowEffectType::FIRE },
55     { "COLD", RaceBlowEffectType::COLD },
56     { "BLIND", RaceBlowEffectType::BLIND },
57     { "CONFUSE", RaceBlowEffectType::CONFUSE },
58     { "TERRIFY", RaceBlowEffectType::TERRIFY },
59     { "PARALYZE", RaceBlowEffectType::PARALYZE },
60     { "LOSE_STR", RaceBlowEffectType::LOSE_STR },
61     { "LOSE_INT", RaceBlowEffectType::LOSE_INT },
62     { "LOSE_WIS", RaceBlowEffectType::LOSE_WIS },
63     { "LOSE_DEX", RaceBlowEffectType::LOSE_DEX },
64     { "LOSE_CON", RaceBlowEffectType::LOSE_CON },
65     { "LOSE_CHR", RaceBlowEffectType::LOSE_CHR },
66     { "LOSE_ALL", RaceBlowEffectType::LOSE_ALL },
67     { "SHATTER", RaceBlowEffectType::SHATTER },
68     { "EXP_10", RaceBlowEffectType::EXP_10 },
69     { "EXP_20", RaceBlowEffectType::EXP_20 },
70     { "EXP_40", RaceBlowEffectType::EXP_40 },
71     { "EXP_80", RaceBlowEffectType::EXP_80 },
72     { "DISEASE", RaceBlowEffectType::DISEASE },
73     { "TIME", RaceBlowEffectType::TIME },
74     { "EXP_VAMP", RaceBlowEffectType::DR_LIFE },
75     { "DR_MANA", RaceBlowEffectType::DR_MANA },
76     { "SUPERHURT", RaceBlowEffectType::SUPERHURT },
77     { "INERTIA", RaceBlowEffectType::INERTIA },
78     { "STUN", RaceBlowEffectType::STUN },
79     { "HUNGRY", RaceBlowEffectType::HUNGRY },
80     { "FLAVOR", RaceBlowEffectType::FLAVOR },
81 };
82
83 /*!
84  * モンスター特性トークンの定義1 /
85  * Monster race flags
86  */
87 const std::unordered_map<std::string_view, race_flags1> r_info_flags1 = {
88     { "UNIQUE", RF1_UNIQUE },
89     { "QUESTOR", RF1_QUESTOR },
90     { "MALE", RF1_MALE },
91     { "FEMALE", RF1_FEMALE },
92     { "FORCE_DEPTH", RF1_FORCE_DEPTH },
93     { "FORCE_MAXHP", RF1_FORCE_MAXHP },
94     { "FORCE_EXTRA", RF1_FORCE_EXTRA },
95     { "FRIENDS", RF1_FRIENDS },
96     { "ESCORT", RF1_ESCORT },
97     { "ESCORTS", RF1_ESCORTS },
98     { "ONLY_GOLD", RF1_ONLY_GOLD },
99     { "ONLY_ITEM", RF1_ONLY_ITEM },
100     { "DROP_60", RF1_DROP_60 },
101     { "DROP_90", RF1_DROP_90 },
102     { "DROP_1D2", RF1_DROP_1D2 },
103     { "DROP_2D2", RF1_DROP_2D2 },
104     { "DROP_3D2", RF1_DROP_3D2 },
105     { "DROP_4D2", RF1_DROP_4D2 },
106     { "DROP_GOOD", RF1_DROP_GOOD },
107     { "DROP_GREAT", RF1_DROP_GREAT },
108 };
109
110 /*!
111  * モンスター特性トークンの定義2 /
112  * Monster race flags
113  */
114 const std::unordered_map<std::string_view, race_flags2> r_info_flags2 = {
115     { "CAN_SPEAK", RF2_CAN_SPEAK },
116     { "REFLECTING", RF2_REFLECTING },
117     { "INVISIBLE", RF2_INVISIBLE },
118     { "COLD_BLOOD", RF2_COLD_BLOOD },
119     { "EMPTY_MIND", RF2_EMPTY_MIND },
120     { "WEIRD_MIND", RF2_WEIRD_MIND },
121     { "MULTIPLY", RF2_MULTIPLY },
122     { "REGENERATE", RF2_REGENERATE },
123     { "CHAR_MULTI", RF2_CHAR_MULTI },
124     { "POWERFUL", RF2_POWERFUL },
125     { "ELDRITCH_HORROR", RF2_ELDRITCH_HORROR },
126     { "FLAGS2_XX14", RF2_XX14 },
127     { "FLAGS2_XX15", RF2_XX15 },
128     { "PASS_WALL", RF2_PASS_WALL },
129     { "KILL_WALL", RF2_KILL_WALL },
130     { "HUMAN", RF2_HUMAN },
131     { "QUANTUM", RF2_QUANTUM }
132 };
133
134 /*!
135  * モンスター特性トークンの定義3 /
136  * Monster race flags
137  */
138 const std::unordered_map<std::string_view, race_flags3> r_info_flags3 = {
139     { "ORC", RF3_ORC },
140     { "TROLL", RF3_TROLL },
141     { "GIANT", RF3_GIANT },
142     { "DRAGON", RF3_DRAGON },
143     { "DEMON", RF3_DEMON },
144     { "UNDEAD", RF3_UNDEAD },
145     { "EVIL", RF3_EVIL },
146     { "ANIMAL", RF3_ANIMAL },
147     { "AMBERITE", RF3_AMBERITE },
148     { "GOOD", RF3_GOOD },
149     { "FLAGS3_XX10", RF3_XX10 },
150     { "NONLIVING", RF3_NONLIVING },
151     { "HURT_LITE", RF3_HURT_LITE },
152     { "HURT_ROCK", RF3_HURT_ROCK },
153     { "HURT_FIRE", RF3_HURT_FIRE },
154     { "HURT_COLD", RF3_HURT_COLD },
155     { "ANGEL", RF3_ANGEL },
156     { "NO_FEAR", RF3_NO_FEAR },
157     { "NO_STUN", RF3_NO_STUN },
158     { "NO_CONF", RF3_NO_CONF },
159     { "NO_SLEEP", RF3_NO_SLEEP }
160 };
161
162 /*!
163  * モンスター特性トークン (発動型能力) /
164  * Monster race flags
165  */
166 /* clang-format off */
167 const std::unordered_map<std::string_view, MonsterAbilityType> r_info_ability_flags = {
168         {"SHRIEK", MonsterAbilityType::SHRIEK },
169         {"XXX1", MonsterAbilityType::XXX1 },
170         {"DISPEL", MonsterAbilityType::DISPEL },
171         {"ROCKET", MonsterAbilityType::ROCKET },
172         {"SHOOT", MonsterAbilityType::SHOOT },
173         {"XXX2", MonsterAbilityType::XXX2 },
174         {"XXX3", MonsterAbilityType::XXX3 },
175         {"XXX4", MonsterAbilityType::XXX4 },
176         {"BR_ACID", MonsterAbilityType::BR_ACID },
177         {"BR_ELEC", MonsterAbilityType::BR_ELEC },
178         {"BR_FIRE", MonsterAbilityType::BR_FIRE },
179         {"BR_COLD", MonsterAbilityType::BR_COLD },
180         {"BR_POIS", MonsterAbilityType::BR_POIS },
181         {"BR_NETH", MonsterAbilityType::BR_NETH },
182         {"BR_LITE", MonsterAbilityType::BR_LITE },
183         {"BR_DARK", MonsterAbilityType::BR_DARK },
184         {"BR_CONF", MonsterAbilityType::BR_CONF },
185         {"BR_SOUN", MonsterAbilityType::BR_SOUN },
186         {"BR_CHAO", MonsterAbilityType::BR_CHAO },
187         {"BR_DISE", MonsterAbilityType::BR_DISE },
188         {"BR_NEXU", MonsterAbilityType::BR_NEXU },
189         {"BR_TIME", MonsterAbilityType::BR_TIME },
190         {"BR_INER", MonsterAbilityType::BR_INER },
191         {"BR_GRAV", MonsterAbilityType::BR_GRAV },
192         {"BR_SHAR", MonsterAbilityType::BR_SHAR },
193         {"BR_PLAS", MonsterAbilityType::BR_PLAS },
194         {"BR_FORC", MonsterAbilityType::BR_FORC },
195         {"BR_MANA", MonsterAbilityType::BR_MANA },
196         {"BA_NUKE", MonsterAbilityType::BA_NUKE },
197         {"BR_NUKE", MonsterAbilityType::BR_NUKE },
198         {"BA_CHAO", MonsterAbilityType::BA_CHAO },
199         {"BR_DISI", MonsterAbilityType::BR_DISI },
200         {"BR_VOID", MonsterAbilityType::BR_VOID },
201         {"BR_ABYSS", MonsterAbilityType::BR_ABYSS },
202
203         {"BA_ACID", MonsterAbilityType::BA_ACID },
204         {"BA_ELEC", MonsterAbilityType::BA_ELEC },
205         {"BA_FIRE", MonsterAbilityType::BA_FIRE },
206         {"BA_COLD", MonsterAbilityType::BA_COLD },
207         {"BA_POIS", MonsterAbilityType::BA_POIS },
208         {"BA_NETH", MonsterAbilityType::BA_NETH },
209         {"BA_WATE", MonsterAbilityType::BA_WATE },
210         {"BA_MANA", MonsterAbilityType::BA_MANA },
211         {"BA_DARK", MonsterAbilityType::BA_DARK },
212         {"BA_VOID", MonsterAbilityType::BA_VOID },
213         {"BA_ABYSS", MonsterAbilityType::BA_ABYSS },
214         {"DRAIN_MANA", MonsterAbilityType::DRAIN_MANA },
215         {"MIND_BLAST", MonsterAbilityType::MIND_BLAST },
216         {"BRAIN_SMASH", MonsterAbilityType::BRAIN_SMASH },
217         {"CAUSE_1", MonsterAbilityType::CAUSE_1 },
218         {"CAUSE_2", MonsterAbilityType::CAUSE_2 },
219         {"CAUSE_3", MonsterAbilityType::CAUSE_3 },
220         {"CAUSE_4", MonsterAbilityType::CAUSE_4 },
221         {"BO_ACID", MonsterAbilityType::BO_ACID },
222         {"BO_ELEC", MonsterAbilityType::BO_ELEC },
223         {"BO_FIRE", MonsterAbilityType::BO_FIRE },
224         {"BO_COLD", MonsterAbilityType::BO_COLD },
225         {"BA_LITE", MonsterAbilityType::BA_LITE },
226         {"BO_NETH", MonsterAbilityType::BO_NETH },
227         {"BO_WATE", MonsterAbilityType::BO_WATE },
228         {"BO_MANA", MonsterAbilityType::BO_MANA },
229         {"BO_PLAS", MonsterAbilityType::BO_PLAS },
230         {"BO_ICEE", MonsterAbilityType::BO_ICEE },
231         {"BO_VOID", MonsterAbilityType::BO_VOID },
232         {"BO_ABYSS", MonsterAbilityType::BO_ABYSS },
233         {"MISSILE", MonsterAbilityType::MISSILE },
234         {"SCARE", MonsterAbilityType::SCARE },
235         {"BLIND", MonsterAbilityType::BLIND },
236         {"CONF", MonsterAbilityType::CONF },
237         {"SLOW", MonsterAbilityType::SLOW },
238         {"HOLD", MonsterAbilityType::HOLD },
239
240         {"HASTE", MonsterAbilityType::HASTE },
241         {"HAND_DOOM", MonsterAbilityType::HAND_DOOM },
242         {"HEAL", MonsterAbilityType::HEAL },
243         {"INVULNER", MonsterAbilityType::INVULNER },
244         {"BLINK", MonsterAbilityType::BLINK },
245         {"TPORT", MonsterAbilityType::TPORT },
246         {"WORLD", MonsterAbilityType::WORLD },
247         {"SPECIAL", MonsterAbilityType::SPECIAL },
248         {"TELE_TO", MonsterAbilityType::TELE_TO },
249         {"TELE_AWAY", MonsterAbilityType::TELE_AWAY },
250         {"TELE_LEVEL", MonsterAbilityType::TELE_LEVEL },
251         {"PSY_SPEAR", MonsterAbilityType::PSY_SPEAR },
252         {"DARKNESS", MonsterAbilityType::DARKNESS },
253         {"TRAPS", MonsterAbilityType::TRAPS },
254         {"FORGET", MonsterAbilityType::FORGET },
255         {"ANIM_DEAD", MonsterAbilityType::RAISE_DEAD /* ToDo: Implement ANIM_DEAD */ },
256         {"S_KIN", MonsterAbilityType::S_KIN },
257         {"S_CYBER", MonsterAbilityType::S_CYBER },
258         {"S_MONSTER", MonsterAbilityType::S_MONSTER },
259         {"S_MONSTERS", MonsterAbilityType::S_MONSTERS },
260         {"S_ANT", MonsterAbilityType::S_ANT },
261         {"S_SPIDER", MonsterAbilityType::S_SPIDER },
262         {"S_HOUND", MonsterAbilityType::S_HOUND },
263         {"S_HYDRA", MonsterAbilityType::S_HYDRA },
264         {"S_ANGEL", MonsterAbilityType::S_ANGEL },
265         {"S_DEMON", MonsterAbilityType::S_DEMON },
266         {"S_UNDEAD", MonsterAbilityType::S_UNDEAD },
267         {"S_DRAGON", MonsterAbilityType::S_DRAGON },
268         {"S_HI_UNDEAD", MonsterAbilityType::S_HI_UNDEAD },
269         {"S_HI_DRAGON", MonsterAbilityType::S_HI_DRAGON },
270         {"S_AMBERITES", MonsterAbilityType::S_AMBERITES },
271         {"S_UNIQUE", MonsterAbilityType::S_UNIQUE },
272 };
273 /* clang-format on */
274
275 /*!
276  * モンスター特性トークンの定義7 /
277  * Monster race flags
278  * "GUARDIAN" ... init.c d_infoの FINAL_GUARDIAN_* にて自動指定
279  */
280 const std::unordered_map<std::string_view, race_flags7> r_info_flags7 = {
281     { "AQUATIC", RF7_AQUATIC },
282     { "CAN_SWIM", RF7_CAN_SWIM },
283     { "CAN_FLY", RF7_CAN_FLY },
284     { "NAZGUL", RF7_NAZGUL },
285     { "UNIQUE2", RF7_UNIQUE2 },
286     { "RIDING", RF7_RIDING },
287     { "KAGE", RF7_KAGE },
288     { "HAS_LITE_1", RF7_HAS_LITE_1 },
289     { "SELF_LITE_1", RF7_SELF_LITE_1 },
290     { "HAS_LITE_2", RF7_HAS_LITE_2 },
291     { "SELF_LITE_2", RF7_SELF_LITE_2 },
292     { "CHAMELEON", RF7_CHAMELEON },
293     { "TANUKI", RF7_TANUKI },
294     { "HAS_DARK_1", RF7_HAS_DARK_1 },
295     { "SELF_DARK_1", RF7_SELF_DARK_1 },
296     { "HAS_DARK_2", RF7_HAS_DARK_2 },
297     { "SELF_DARK_2", RF7_SELF_DARK_2 },
298 };
299
300 /*!
301  * モンスター特性トークンの定義8 /
302  * Monster race flags
303  */
304 const std::unordered_map<std::string_view, race_flags8> r_info_flags8 = {
305     { "WILD_ONLY", RF8_WILD_ONLY },
306     { "WILD_TOWN", RF8_WILD_TOWN },
307     { "NO_QUEST", RF8_NO_QUEST },
308     { "WILD_SHORE", RF8_WILD_SHORE },
309     { "WILD_OCEAN", RF8_WILD_OCEAN },
310     { "WILD_WASTE", RF8_WILD_WASTE },
311     { "WILD_WOOD", RF8_WILD_WOOD },
312     { "WILD_VOLCANO", RF8_WILD_VOLCANO },
313     { "WILD_MOUNTAIN", RF8_WILD_MOUNTAIN },
314     { "WILD_GRASS", RF8_WILD_GRASS },
315     { "WILD_SWAMP", RF8_WILD_SWAMP },
316     { "WILD_ALL", RF8_WILD_ALL },
317 };
318
319 /*!
320  * モンスター特性トークンの定義9 /
321  * Monster race flags
322  */
323 const std::unordered_map<std::string_view, race_flags9> r_info_flags9 = {
324     { "DROP_CORPSE", RF9_DROP_CORPSE },
325     { "DROP_SKELETON", RF9_DROP_SKELETON },
326     { "EAT_BLIND", RF9_EAT_BLIND },
327     { "EAT_CONF", RF9_EAT_CONF },
328     { "EAT_MANA", RF9_EAT_MANA },
329     { "EAT_NEXUS", RF9_EAT_NEXUS },
330     // { "EAT_BLINK", RF9_EAT_BLINK }, //<! @note フラグ未定義
331     { "EAT_SLEEP", RF9_EAT_SLEEP },
332     { "EAT_BERSERKER", RF9_EAT_BERSERKER },
333     { "EAT_ACIDIC", RF9_EAT_ACIDIC },
334     { "EAT_SPEED", RF9_EAT_SPEED },
335     { "EAT_CURE", RF9_EAT_CURE },
336     { "EAT_FIRE_RES", RF9_EAT_FIRE_RES },
337     { "EAT_COLD_RES", RF9_EAT_COLD_RES },
338     { "EAT_ACID_RES", RF9_EAT_ACID_RES },
339     { "EAT_ELEC_RES", RF9_EAT_ELEC_RES },
340     { "EAT_POIS_RES", RF9_EAT_POIS_RES },
341     { "EAT_INSANITY", RF9_EAT_INSANITY },
342     { "EAT_DRAIN_EXP", RF9_EAT_DRAIN_EXP },
343     { "EAT_POISONOUS", RF9_EAT_POISONOUS },
344     { "EAT_GIVE_STR", RF9_EAT_GIVE_STR },
345     { "EAT_GIVE_INT", RF9_EAT_GIVE_INT },
346     { "EAT_GIVE_WIS", RF9_EAT_GIVE_WIS },
347     { "EAT_GIVE_DEX", RF9_EAT_GIVE_DEX },
348     { "EAT_GIVE_CON", RF9_EAT_GIVE_CON },
349     { "EAT_GIVE_CHR", RF9_EAT_GIVE_CHR },
350     { "EAT_LOSE_STR", RF9_EAT_LOSE_STR },
351     { "EAT_LOSE_INT", RF9_EAT_LOSE_INT },
352     { "EAT_LOSE_WIS", RF9_EAT_LOSE_WIS },
353     { "EAT_LOSE_DEX", RF9_EAT_LOSE_DEX },
354     { "EAT_LOSE_CON", RF9_EAT_LOSE_CON },
355     { "EAT_LOSE_CHR", RF9_EAT_LOSE_CHR },
356     { "EAT_DRAIN_MANA", RF9_EAT_DRAIN_MANA },
357 };
358
359 /*!
360  * モンスター特性トークンの定義R(耐性) /
361  * Monster race flags
362  */
363 const std::unordered_map<std::string_view, race_flags_resistance> r_info_flagsr = {
364     { "IM_ACID", RFR_IM_ACID },
365     { "IM_ELEC", RFR_IM_ELEC },
366     { "IM_FIRE", RFR_IM_FIRE },
367     { "IM_COLD", RFR_IM_COLD },
368     { "IM_POIS", RFR_IM_POIS },
369     { "RES_LITE", RFR_RES_LITE },
370     { "RES_DARK", RFR_RES_DARK },
371     { "RES_NETH", RFR_RES_NETH },
372     { "RES_WATE", RFR_RES_WATE },
373     { "RES_PLAS", RFR_RES_PLAS },
374     { "RES_SHAR", RFR_RES_SHAR },
375     { "RES_SOUN", RFR_RES_SOUN },
376     { "RES_CHAO", RFR_RES_CHAO },
377     { "RES_NEXU", RFR_RES_NEXU },
378     { "RES_DISE", RFR_RES_DISE },
379     { "RES_WALL", RFR_RES_WALL },
380     { "RES_INER", RFR_RES_INER },
381     { "RES_TIME", RFR_RES_TIME },
382     { "RES_GRAV", RFR_RES_GRAV },
383     { "RES_ALL", RFR_RES_ALL },
384     { "RES_TELE", RFR_RES_TELE },
385 };
386
387 const std::unordered_map<std::string_view, MonsterAuraType> r_info_aura_flags = {
388     { "AURA_FIRE", MonsterAuraType::FIRE },
389     { "AURA_COLD", MonsterAuraType::COLD },
390     { "AURA_ELEC", MonsterAuraType::ELEC },
391     { "AURA_ACID", MonsterAuraType::ACID },
392     { "AURA_POISON", MonsterAuraType::POISON },
393     { "AURA_NUKE", MonsterAuraType::NUKE },
394     { "AURA_PLASMA", MonsterAuraType::PLASMA },
395     { "AURA_WATER", MonsterAuraType::WATER },
396     { "AURA_ICEE", MonsterAuraType::ICEE },
397     { "AURA_LITE", MonsterAuraType::LITE },
398     { "AURA_DARK", MonsterAuraType::DARK },
399     { "AURA_SHARDS", MonsterAuraType::SHARDS },
400     { "AURA_FORCE", MonsterAuraType::FORCE },
401     { "AURA_MANA", MonsterAuraType::MANA },
402     { "AURA_METEOR", MonsterAuraType::METEOR },
403     { "AURA_CHAOS", MonsterAuraType::CHAOS },
404     { "AURA_HOLINESS", MonsterAuraType::HOLINESS },
405     { "AURA_NETHER", MonsterAuraType::NETHER },
406     { "AURA_DISENCHANT", MonsterAuraType::DISENCHANT },
407     { "AURA_NEXUS", MonsterAuraType::NEXUS },
408     { "AURA_TIME", MonsterAuraType::TIME },
409     { "AURA_GRAVITY", MonsterAuraType::GRAVITY },
410     { "AURA_VOIDS", MonsterAuraType::VOIDS },
411     { "AURA_ABYSS", MonsterAuraType::ABYSS },
412 };
413
414 const std::unordered_map<std::string_view, MonsterBehaviorType> r_info_behavior_flags = {
415     { "NEVER_BLOW", MonsterBehaviorType::NEVER_BLOW },
416     { "NEVER_MOVE", MonsterBehaviorType::NEVER_MOVE },
417     { "OPEN_DOOR", MonsterBehaviorType::OPEN_DOOR },
418     { "BASH_DOOR", MonsterBehaviorType::BASH_DOOR },
419     { "MOVE_BODY", MonsterBehaviorType::MOVE_BODY },
420     { "KILL_BODY", MonsterBehaviorType::KILL_BODY },
421     { "TAKE_ITEM", MonsterBehaviorType::TAKE_ITEM },
422     { "KILL_ITEM", MonsterBehaviorType::KILL_ITEM },
423     { "RAND_25", MonsterBehaviorType::RAND_MOVE_25 },
424     { "RAND_50", MonsterBehaviorType::RAND_MOVE_50 },
425     { "STUPID", MonsterBehaviorType::STUPID },
426     { "SMART", MonsterBehaviorType::SMART },
427     { "FRIENDLY", MonsterBehaviorType::FRIENDLY },
428     { "PREVENT_SUDDEN_MAGIC", MonsterBehaviorType::PREVENT_SUDDEN_MAGIC },
429 };
430
431 const std::unordered_map<std::string_view, MonsterVisualType> r_info_visual_flags = {
432     { "CHAR_CLEAR", MonsterVisualType::CLEAR },
433     { "SHAPECHANGER", MonsterVisualType::SHAPECHANGER },
434     { "ATTR_CLEAR", MonsterVisualType::CLEAR_COLOR },
435     { "ATTR_MULTI", MonsterVisualType::MULTI_COLOR },
436     { "ATTR_SEMIRAND", MonsterVisualType::RANDOM_COLOR },
437     { "ATTR_ANY", MonsterVisualType::ANY_COLOR },
438 };