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"
16 * Monster Blow Methods
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 },
48 * Monster Blow Effects
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 { "FLAVOR", RaceBlowEffectType::FLAVOR },
94 const std::unordered_map<std::string_view, race_flags1> r_info_flags1 = {
95 { "QUESTOR", RF1_QUESTOR },
97 { "FEMALE", RF1_FEMALE },
98 { "FORCE_DEPTH", RF1_FORCE_DEPTH },
99 { "FORCE_MAXHP", RF1_FORCE_MAXHP },
100 { "FORCE_EXTRA", RF1_FORCE_EXTRA },
101 { "FRIENDS", RF1_FRIENDS },
102 { "ESCORT", RF1_ESCORT },
103 { "ESCORTS", RF1_ESCORTS },
110 const std::unordered_map<std::string_view, race_flags2> r_info_flags2 = {
111 { "REFLECTING", RF2_REFLECTING },
112 { "INVISIBLE", RF2_INVISIBLE },
113 { "COLD_BLOOD", RF2_COLD_BLOOD },
114 { "EMPTY_MIND", RF2_EMPTY_MIND },
115 { "WEIRD_MIND", RF2_WEIRD_MIND },
116 { "MULTIPLY", RF2_MULTIPLY },
117 { "REGENERATE", RF2_REGENERATE },
118 { "CHAR_MULTI", RF2_CHAR_MULTI },
119 { "POWERFUL", RF2_POWERFUL },
120 { "ELDRITCH_HORROR", RF2_ELDRITCH_HORROR },
121 { "FLAGS2_XX14", RF2_XX14 },
122 { "FLAGS2_XX15", RF2_XX15 },
129 const std::unordered_map<std::string_view, race_flags3> r_info_flags3 = {
130 { "FLAGS3_XX10", RF3_XX10 },
131 { "NO_FEAR", RF3_NO_FEAR },
132 { "NO_STUN", RF3_NO_STUN },
133 { "NO_CONF", RF3_NO_CONF },
134 { "NO_SLEEP", RF3_NO_SLEEP }
138 * モンスター特性トークン (発動型能力) /
141 /* clang-format off */
142 const std::unordered_map<std::string_view, MonsterAbilityType> r_info_ability_flags = {
143 {"SHRIEK", MonsterAbilityType::SHRIEK },
144 {"XXX1", MonsterAbilityType::XXX1 },
145 {"DISPEL", MonsterAbilityType::DISPEL },
146 {"ROCKET", MonsterAbilityType::ROCKET },
147 {"SHOOT", MonsterAbilityType::SHOOT },
148 {"XXX2", MonsterAbilityType::XXX2 },
149 {"XXX3", MonsterAbilityType::XXX3 },
150 {"XXX4", MonsterAbilityType::XXX4 },
151 {"BR_ACID", MonsterAbilityType::BR_ACID },
152 {"BR_ELEC", MonsterAbilityType::BR_ELEC },
153 {"BR_FIRE", MonsterAbilityType::BR_FIRE },
154 {"BR_COLD", MonsterAbilityType::BR_COLD },
155 {"BR_POIS", MonsterAbilityType::BR_POIS },
156 {"BR_NETH", MonsterAbilityType::BR_NETH },
157 {"BR_LITE", MonsterAbilityType::BR_LITE },
158 {"BR_DARK", MonsterAbilityType::BR_DARK },
159 {"BR_CONF", MonsterAbilityType::BR_CONF },
160 {"BR_SOUN", MonsterAbilityType::BR_SOUN },
161 {"BR_CHAO", MonsterAbilityType::BR_CHAO },
162 {"BR_DISE", MonsterAbilityType::BR_DISE },
163 {"BR_NEXU", MonsterAbilityType::BR_NEXU },
164 {"BR_TIME", MonsterAbilityType::BR_TIME },
165 {"BR_INER", MonsterAbilityType::BR_INER },
166 {"BR_GRAV", MonsterAbilityType::BR_GRAV },
167 {"BR_SHAR", MonsterAbilityType::BR_SHAR },
168 {"BR_PLAS", MonsterAbilityType::BR_PLAS },
169 {"BR_FORC", MonsterAbilityType::BR_FORC },
170 {"BR_MANA", MonsterAbilityType::BR_MANA },
171 {"BA_NUKE", MonsterAbilityType::BA_NUKE },
172 {"BR_NUKE", MonsterAbilityType::BR_NUKE },
173 {"BA_CHAO", MonsterAbilityType::BA_CHAO },
174 {"BR_DISI", MonsterAbilityType::BR_DISI },
175 {"BR_VOID", MonsterAbilityType::BR_VOID },
176 {"BR_ABYSS", MonsterAbilityType::BR_ABYSS },
178 {"BA_ACID", MonsterAbilityType::BA_ACID },
179 {"BA_ELEC", MonsterAbilityType::BA_ELEC },
180 {"BA_FIRE", MonsterAbilityType::BA_FIRE },
181 {"BA_COLD", MonsterAbilityType::BA_COLD },
182 {"BA_POIS", MonsterAbilityType::BA_POIS },
183 {"BA_NETH", MonsterAbilityType::BA_NETH },
184 {"BA_WATE", MonsterAbilityType::BA_WATE },
185 {"BA_MANA", MonsterAbilityType::BA_MANA },
186 {"BA_DARK", MonsterAbilityType::BA_DARK },
187 {"BA_VOID", MonsterAbilityType::BA_VOID },
188 {"BA_ABYSS", MonsterAbilityType::BA_ABYSS },
189 {"DRAIN_MANA", MonsterAbilityType::DRAIN_MANA },
190 {"MIND_BLAST", MonsterAbilityType::MIND_BLAST },
191 {"BRAIN_SMASH", MonsterAbilityType::BRAIN_SMASH },
192 {"CAUSE_1", MonsterAbilityType::CAUSE_1 },
193 {"CAUSE_2", MonsterAbilityType::CAUSE_2 },
194 {"CAUSE_3", MonsterAbilityType::CAUSE_3 },
195 {"CAUSE_4", MonsterAbilityType::CAUSE_4 },
196 {"BO_ACID", MonsterAbilityType::BO_ACID },
197 {"BO_ELEC", MonsterAbilityType::BO_ELEC },
198 {"BO_FIRE", MonsterAbilityType::BO_FIRE },
199 {"BO_COLD", MonsterAbilityType::BO_COLD },
200 {"BA_LITE", MonsterAbilityType::BA_LITE },
201 {"BO_NETH", MonsterAbilityType::BO_NETH },
202 {"BO_WATE", MonsterAbilityType::BO_WATE },
203 {"BO_MANA", MonsterAbilityType::BO_MANA },
204 {"BO_PLAS", MonsterAbilityType::BO_PLAS },
205 {"BO_ICEE", MonsterAbilityType::BO_ICEE },
206 {"BO_VOID", MonsterAbilityType::BO_VOID },
207 {"BO_ABYSS", MonsterAbilityType::BO_ABYSS },
208 {"MISSILE", MonsterAbilityType::MISSILE },
209 {"SCARE", MonsterAbilityType::SCARE },
210 {"BLIND", MonsterAbilityType::BLIND },
211 {"CONF", MonsterAbilityType::CONF },
212 {"SLOW", MonsterAbilityType::SLOW },
213 {"HOLD", MonsterAbilityType::HOLD },
215 {"HASTE", MonsterAbilityType::HASTE },
216 {"HAND_DOOM", MonsterAbilityType::HAND_DOOM },
217 {"HEAL", MonsterAbilityType::HEAL },
218 {"INVULNER", MonsterAbilityType::INVULNER },
219 {"BLINK", MonsterAbilityType::BLINK },
220 {"TPORT", MonsterAbilityType::TPORT },
221 {"WORLD", MonsterAbilityType::WORLD },
222 {"SPECIAL", MonsterAbilityType::SPECIAL },
223 {"TELE_TO", MonsterAbilityType::TELE_TO },
224 {"TELE_AWAY", MonsterAbilityType::TELE_AWAY },
225 {"TELE_LEVEL", MonsterAbilityType::TELE_LEVEL },
226 {"PSY_SPEAR", MonsterAbilityType::PSY_SPEAR },
227 {"DARKNESS", MonsterAbilityType::DARKNESS },
228 {"TRAPS", MonsterAbilityType::TRAPS },
229 {"FORGET", MonsterAbilityType::FORGET },
230 {"ANIM_DEAD", MonsterAbilityType::RAISE_DEAD /* ToDo: Implement ANIM_DEAD */ },
231 {"S_KIN", MonsterAbilityType::S_KIN },
232 {"S_CYBER", MonsterAbilityType::S_CYBER },
233 {"S_MONSTER", MonsterAbilityType::S_MONSTER },
234 {"S_MONSTERS", MonsterAbilityType::S_MONSTERS },
235 {"S_ANT", MonsterAbilityType::S_ANT },
236 {"S_SPIDER", MonsterAbilityType::S_SPIDER },
237 {"S_HOUND", MonsterAbilityType::S_HOUND },
238 {"S_HYDRA", MonsterAbilityType::S_HYDRA },
239 {"S_ANGEL", MonsterAbilityType::S_ANGEL },
240 {"S_DEMON", MonsterAbilityType::S_DEMON },
241 {"S_UNDEAD", MonsterAbilityType::S_UNDEAD },
242 {"S_DRAGON", MonsterAbilityType::S_DRAGON },
243 {"S_HI_UNDEAD", MonsterAbilityType::S_HI_UNDEAD },
244 {"S_HI_DRAGON", MonsterAbilityType::S_HI_DRAGON },
245 {"S_AMBERITES", MonsterAbilityType::S_AMBERITES },
246 {"S_UNIQUE", MonsterAbilityType::S_UNIQUE },
247 {"S_DEAD_UNIQUE", MonsterAbilityType::S_DEAD_UNIQUE },
249 /* clang-format on */
252 * @brief モンスター特性トークンの定義7
253 * @details ダンジョンの主は、DungeonDefinitions の FINAL_GUARDIAN_HOGE にて自動指定
254 * HOGE は、MonsterRaceDefinitions で定義したモンスター種族ID
256 const std::unordered_map<std::string_view, race_flags7> r_info_flags7 = {
257 { "UNIQUE2", RF7_UNIQUE2 },
258 { "RIDING", RF7_RIDING },
259 { "KAGE", RF7_KAGE },
260 { "CHAMELEON", RF7_CHAMELEON },
261 { "TANUKI", RF7_TANUKI },
268 const std::unordered_map<std::string_view, race_flags8> r_info_flags8 = {
269 { "NO_QUEST", RF8_NO_QUEST },
273 * モンスター特性トークンの定義R(耐性) /
276 const std::unordered_map<std::string_view, MonsterResistanceType> r_info_flagsr = {
277 { "RES_ALL", MonsterResistanceType::RESIST_ALL },
278 { "HURT_ACID", MonsterResistanceType::HURT_ACID },
279 { "RES_ACID", MonsterResistanceType::RESIST_ACID },
280 { "IM_ACID", MonsterResistanceType::IMMUNE_ACID },
281 { "HURT_ELEC", MonsterResistanceType::HURT_ELEC },
282 { "RES_ELEC", MonsterResistanceType::RESIST_ELEC },
283 { "IM_ELEC", MonsterResistanceType::IMMUNE_ELEC },
284 { "HURT_FIRE", MonsterResistanceType::HURT_FIRE },
285 { "RES_FIRE", MonsterResistanceType::RESIST_FIRE },
286 { "IM_FIRE", MonsterResistanceType::IMMUNE_FIRE },
287 { "HURT_COLD", MonsterResistanceType::HURT_COLD },
288 { "RES_COLD", MonsterResistanceType::RESIST_FIRE },
289 { "IM_COLD", MonsterResistanceType::IMMUNE_COLD },
290 { "HURT_POIS", MonsterResistanceType::HURT_POISON },
291 { "RES_POIS", MonsterResistanceType::RESIST_POISON },
292 { "IM_POIS", MonsterResistanceType::IMMUNE_POISON },
293 { "HURT_LITE", MonsterResistanceType::HURT_LITE },
294 { "RES_LITE", MonsterResistanceType::RESIST_LITE },
295 { "HURT_DARK", MonsterResistanceType::HURT_DARK },
296 { "RES_DARK", MonsterResistanceType::RESIST_DARK },
297 { "HURT_NETH", MonsterResistanceType::HURT_NETHER },
298 { "RES_NETH", MonsterResistanceType::RESIST_NETHER },
299 { "HURT_WATE", MonsterResistanceType::HURT_WATER },
300 { "RES_WATE", MonsterResistanceType::RESIST_WATER },
301 { "HURT_PLAS", MonsterResistanceType::HURT_PLASMA },
302 { "RES_PLAS", MonsterResistanceType::RESIST_PLASMA },
303 { "HURT_SHAR", MonsterResistanceType::HURT_SHARDS },
304 { "RES_SHAR", MonsterResistanceType::RESIST_SHARDS },
305 { "HURT_SOUN", MonsterResistanceType::HURT_SOUND },
306 { "RES_SOUN", MonsterResistanceType::RESIST_SOUND },
307 { "HURT_CHAO", MonsterResistanceType::HURT_CHAOS },
308 { "RES_CHAO", MonsterResistanceType::RESIST_CHAOS },
309 { "HURT_NEXU", MonsterResistanceType::HURT_NEXUS },
310 { "RES_NEXU", MonsterResistanceType::RESIST_NEXUS },
311 { "HURT_DISE", MonsterResistanceType::HURT_DISENCHANT },
312 { "RES_DISE", MonsterResistanceType::RESIST_DISENCHANT },
313 { "HURT_WALL", MonsterResistanceType::HURT_FORCE },
314 { "RES_WALL", MonsterResistanceType::RESIST_FORCE },
315 { "HURT_INER", MonsterResistanceType::HURT_INERTIA },
316 { "RES_INER", MonsterResistanceType::RESIST_INERTIA },
317 { "HURT_TIME", MonsterResistanceType::HURT_TIME },
318 { "RES_TIME", MonsterResistanceType::RESIST_TIME },
319 { "HURT_GRAV", MonsterResistanceType::HURT_GRAVITY },
320 { "RES_GRAV", MonsterResistanceType::RESIST_GRAVITY },
321 { "RES_TELE", MonsterResistanceType::RESIST_TELEPORT },
322 { "HURT_ROCK", MonsterResistanceType::HURT_ROCK },
323 { "RES_ROCK", MonsterResistanceType::RESIST_ROCK },
324 { "HURT_ABYSS", MonsterResistanceType::HURT_ABYSS },
325 { "RES_ABYSS", MonsterResistanceType::RESIST_ABYSS },
326 { "HURT_VOID", MonsterResistanceType::HURT_VOID_MAGIC },
327 { "RES_VOID", MonsterResistanceType::RESIST_VOID_MAGIC },
330 const std::unordered_map<std::string_view, MonsterAuraType> r_info_aura_flags = {
331 { "AURA_FIRE", MonsterAuraType::FIRE },
332 { "AURA_COLD", MonsterAuraType::COLD },
333 { "AURA_ELEC", MonsterAuraType::ELEC },
334 { "AURA_ACID", MonsterAuraType::ACID },
335 { "AURA_POISON", MonsterAuraType::POISON },
336 { "AURA_NUKE", MonsterAuraType::NUKE },
337 { "AURA_PLASMA", MonsterAuraType::PLASMA },
338 { "AURA_WATER", MonsterAuraType::WATER },
339 { "AURA_ICEE", MonsterAuraType::ICEE },
340 { "AURA_LITE", MonsterAuraType::LITE },
341 { "AURA_DARK", MonsterAuraType::DARK },
342 { "AURA_SHARDS", MonsterAuraType::SHARDS },
343 { "AURA_FORCE", MonsterAuraType::FORCE },
344 { "AURA_MANA", MonsterAuraType::MANA },
345 { "AURA_METEOR", MonsterAuraType::METEOR },
346 { "AURA_CHAOS", MonsterAuraType::CHAOS },
347 { "AURA_HOLINESS", MonsterAuraType::HOLINESS },
348 { "AURA_NETHER", MonsterAuraType::NETHER },
349 { "AURA_DISENCHANT", MonsterAuraType::DISENCHANT },
350 { "AURA_NEXUS", MonsterAuraType::NEXUS },
351 { "AURA_TIME", MonsterAuraType::TIME },
352 { "AURA_GRAVITY", MonsterAuraType::GRAVITY },
353 { "AURA_VOIDS", MonsterAuraType::VOIDS },
354 { "AURA_ABYSS", MonsterAuraType::ABYSS },
357 const std::unordered_map<std::string_view, MonsterBehaviorType> r_info_behavior_flags = {
358 { "NEVER_BLOW", MonsterBehaviorType::NEVER_BLOW },
359 { "NEVER_MOVE", MonsterBehaviorType::NEVER_MOVE },
360 { "OPEN_DOOR", MonsterBehaviorType::OPEN_DOOR },
361 { "BASH_DOOR", MonsterBehaviorType::BASH_DOOR },
362 { "MOVE_BODY", MonsterBehaviorType::MOVE_BODY },
363 { "KILL_BODY", MonsterBehaviorType::KILL_BODY },
364 { "TAKE_ITEM", MonsterBehaviorType::TAKE_ITEM },
365 { "KILL_ITEM", MonsterBehaviorType::KILL_ITEM },
366 { "RAND_25", MonsterBehaviorType::RAND_MOVE_25 },
367 { "RAND_50", MonsterBehaviorType::RAND_MOVE_50 },
368 { "STUPID", MonsterBehaviorType::STUPID },
369 { "SMART", MonsterBehaviorType::SMART },
370 { "FRIENDLY", MonsterBehaviorType::FRIENDLY },
371 { "PREVENT_SUDDEN_MAGIC", MonsterBehaviorType::PREVENT_SUDDEN_MAGIC },
374 const std::unordered_map<std::string_view, MonsterVisualType> r_info_visual_flags = {
375 { "CHAR_CLEAR", MonsterVisualType::CLEAR },
376 { "SHAPECHANGER", MonsterVisualType::SHAPECHANGER },
377 { "ATTR_CLEAR", MonsterVisualType::CLEAR_COLOR },
378 { "ATTR_MULTI", MonsterVisualType::MULTI_COLOR },
379 { "ATTR_SEMIRAND", MonsterVisualType::RANDOM_COLOR },
380 { "ATTR_ANY", MonsterVisualType::ANY_COLOR },
383 const std::unordered_map<std::string_view, MonsterKindType> r_info_kind_flags = {
384 { "UNIQUE", MonsterKindType::UNIQUE },
385 { "HUMAN", MonsterKindType::HUMAN },
386 { "QUANTUM", MonsterKindType::QUANTUM },
387 { "ORC", MonsterKindType::ORC },
388 { "TROLL", MonsterKindType::TROLL },
389 { "GIANT", MonsterKindType::GIANT },
390 { "DRAGON", MonsterKindType::DRAGON },
391 { "DEMON", MonsterKindType::DEMON },
392 { "UNDEAD", MonsterKindType::UNDEAD },
393 { "EVIL", MonsterKindType::EVIL },
394 { "ANIMAL", MonsterKindType::ANIMAL },
395 { "AMBERITE", MonsterKindType::AMBERITE },
396 { "GOOD", MonsterKindType::GOOD },
397 { "NONLIVING", MonsterKindType::NONLIVING },
398 { "ANGEL", MonsterKindType::ANGEL },
401 const std::unordered_map<std::string_view, MonsterDropType> r_info_drop_flags = {
402 { "ONLY_GOLD", MonsterDropType::ONLY_GOLD },
403 { "ONLY_ITEM", MonsterDropType::ONLY_ITEM },
404 { "DROP_GOOD", MonsterDropType::DROP_GOOD },
405 { "DROP_GREAT", MonsterDropType::DROP_GREAT },
406 { "DROP_CORPSE", MonsterDropType::DROP_CORPSE },
407 { "DROP_SKELETON", MonsterDropType::DROP_SKELETON },
408 { "DROP_60", MonsterDropType::DROP_60 },
409 { "DROP_90", MonsterDropType::DROP_90 },
410 { "DROP_1D2", MonsterDropType::DROP_1D2 },
411 { "DROP_2D2", MonsterDropType::DROP_2D2 },
412 { "DROP_3D2", MonsterDropType::DROP_3D2 },
413 { "DROP_4D2", MonsterDropType::DROP_4D2 },
416 const std::unordered_map<std::string_view, MonsterWildernessType> r_info_wilderness_flags = {
417 { "WILD_ONLY", MonsterWildernessType::WILD_ONLY },
418 { "WILD_TOWN", MonsterWildernessType::WILD_TOWN },
419 { "WILD_SHORE", MonsterWildernessType::WILD_SHORE },
420 { "WILD_OCEAN", MonsterWildernessType::WILD_OCEAN },
421 { "WILD_WASTE", MonsterWildernessType::WILD_WASTE },
422 { "WILD_WOOD", MonsterWildernessType::WILD_WOOD },
423 { "WILD_VOLCANO", MonsterWildernessType::WILD_VOLCANO },
424 { "WILD_MOUNTAIN", MonsterWildernessType::WILD_MOUNTAIN },
425 { "WILD_GRASS", MonsterWildernessType::WILD_GRASS },
426 { "WILD_SWAMP", MonsterWildernessType::WILD_SWAMP },
427 { "WILD_ALL", MonsterWildernessType::WILD_ALL },
430 const std::unordered_map<std::string_view, MonsterFeatureType> r_info_feature_flags = {
431 { "PASS_WALL", MonsterFeatureType::PASS_WALL },
432 { "KILL_WALL", MonsterFeatureType::KILL_WALL },
433 { "AQUATIC", MonsterFeatureType::AQUATIC },
434 { "CAN_SWIM", MonsterFeatureType::CAN_SWIM },
435 { "CAN_FLY", MonsterFeatureType::CAN_FLY },
438 const std::unordered_map<std::string_view, MonsterPopulationType> r_info_population_flags = {
439 { "NAZGUL", MonsterPopulationType::NAZGUL },
442 const std::unordered_map<std::string_view, MonsterSpeakType> r_info_speak_flags = {
443 { "SPEAK_ALL", MonsterSpeakType::SPEAK_ALL },
444 { "SPEAK_BATTLE", MonsterSpeakType::SPEAK_BATTLE },
445 { "SPEAK_FEAR", MonsterSpeakType::SPEAK_FEAR },
446 { "SPEAK_FRIEND", MonsterSpeakType::SPEAK_FRIEND },
447 { "SPEAK_DEATH", MonsterSpeakType::SPEAK_DEATH },
448 { "SPEAK_SPAWN", MonsterSpeakType::SPEAK_SPAWN },
451 const std::unordered_map<std::string_view, MonsterBrightnessType> r_info_brightness_flags = {
452 { "HAS_LITE_1", MonsterBrightnessType::HAS_LITE_1 },
453 { "SELF_LITE_1", MonsterBrightnessType::SELF_LITE_1 },
454 { "HAS_LITE_2", MonsterBrightnessType::HAS_LITE_2 },
455 { "SELF_LITE_2", MonsterBrightnessType::SELF_LITE_2 },
456 { "HAS_DARK_1", MonsterBrightnessType::HAS_DARK_1 },
457 { "SELF_DARK_1", MonsterBrightnessType::SELF_DARK_1 },
458 { "HAS_DARK_2", MonsterBrightnessType::HAS_DARK_2 },
459 { "SELF_DARK_2", MonsterBrightnessType::SELF_DARK_2 },