OSDN Git Service

[Refactor]トークン定義を合わせる
authorSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Fri, 4 Feb 2022 16:15:18 +0000 (01:15 +0900)
committerSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Sat, 5 Feb 2022 11:43:03 +0000 (20:43 +0900)
src/info-reader/dungeon-reader.cpp
src/info-reader/race-info-tokens-table.cpp
src/info-reader/race-info-tokens-table.h
src/info-reader/race-reader.cpp
src/monster/monster-util.cpp

index 95842e9..10045d5 100644 (file)
@@ -57,6 +57,9 @@ static bool grab_one_basic_monster_flag(dungeon_type *d_ptr, std::string_view wh
     if (info_grab_one_flag(d_ptr->mflagsr, r_info_flagsr, what))
         return true;
 
+    if (EnumClassFlagGroup<MonsterBehaviorType>::grab_one_flag(d_ptr->mon_behavior_flags, r_info_behavior_flags, what))
+        return true;
+
     msg_format(_("未知のモンスター・フラグ '%s'。", "Unknown monster flag '%s'."), what.data());
     return false;
 }
@@ -70,7 +73,7 @@ static bool grab_one_basic_monster_flag(dungeon_type *d_ptr, std::string_view wh
  */
 static bool grab_one_spell_monster_flag(dungeon_type *d_ptr, std::string_view what)
 {
-    if (EnumClassFlagGroup<MonsterAbilityType>::grab_one_flag(d_ptr->m_ability_flags, r_info_ability_flags, what))
+    if (EnumClassFlagGroup<MonsterAbilityType>::grab_one_flag(d_ptr->mon_ability_flags, r_info_ability_flags, what))
         return true;
 
     msg_format(_("未知のモンスター・フラグ '%s'。", "Unknown monster flag '%s'."), what.data());
@@ -280,8 +283,7 @@ errr parse_d_info(std::string_view buf, angband_header *)
             if (!grab_one_spell_monster_flag(d_ptr, f))
                 return PARSE_ERROR_INVALID_FLAG;
         }
-    }
-    else
+    } else
         return PARSE_ERROR_UNDEFINED_DIRECTIVE;
 
     return 0;
index 5371ea8..6ea9027 100644 (file)
@@ -1,4 +1,4 @@
-#include "info-reader/race-info-tokens-table.h"
+#include "info-reader/race-info-tokens-table.h"
 #include "monster-attack/monster-attack-effect.h"
 #include "monster-attack/monster-attack-types.h"
 #include "monster-race/race-ability-flags.h"
@@ -84,36 +84,31 @@ const std::unordered_map<std::string_view, RaceBlowEffectType> r_info_blow_effec
  * Monster race flags
  */
 const std::unordered_map<std::string_view, race_flags1> r_info_flags1 = {
-       { "UNIQUE", RF1_UNIQUE },
-       { "QUESTOR", RF1_QUESTOR },
-       { "MALE", RF1_MALE },
-       { "FEMALE", RF1_FEMALE },
-       { "CHAR_CLEAR", RF1_CHAR_CLEAR },
-       { "SHAPECHANGER", RF1_SHAPECHANGER },
-       { "ATTR_CLEAR", RF1_ATTR_CLEAR },
-       { "ATTR_MULTI", RF1_ATTR_MULTI },
-       { "FORCE_DEPTH", RF1_FORCE_DEPTH },
-       { "FORCE_MAXHP", RF1_FORCE_MAXHP },
-       { "PREVENT_SUDDEN_MAGIC", RF1_PREVENT_SUDDEN_MAGIC },
-       { "FORCE_EXTRA", RF1_FORCE_EXTRA },
-       { "ATTR_SEMIRAND", RF1_ATTR_SEMIRAND },
-       { "FRIENDS", RF1_FRIENDS },
-       { "ESCORT", RF1_ESCORT },
-       { "ESCORTS", RF1_ESCORTS },
-       { "NEVER_BLOW", RF1_NEVER_BLOW },
-       { "NEVER_MOVE", RF1_NEVER_MOVE },
-       { "RAND_25", RF1_RAND_25 },
-       { "RAND_50", RF1_RAND_50 },
-       { "ONLY_GOLD", RF1_ONLY_GOLD },
-       { "ONLY_ITEM", RF1_ONLY_ITEM },
-       { "DROP_60", RF1_DROP_60 },
-       { "DROP_90", RF1_DROP_90 },
-       { "DROP_1D2", RF1_DROP_1D2 },
-       { "DROP_2D2", RF1_DROP_2D2 },
-       { "DROP_3D2", RF1_DROP_3D2 },
-       { "DROP_4D2", RF1_DROP_4D2 },
-       { "DROP_GOOD", RF1_DROP_GOOD },
-       { "DROP_GREAT", RF1_DROP_GREAT },
+    { "UNIQUE", RF1_UNIQUE },
+    { "QUESTOR", RF1_QUESTOR },
+    { "MALE", RF1_MALE },
+    { "FEMALE", RF1_FEMALE },
+    { "CHAR_CLEAR", RF1_CHAR_CLEAR },
+    { "SHAPECHANGER", RF1_SHAPECHANGER },
+    { "ATTR_CLEAR", RF1_ATTR_CLEAR },
+    { "ATTR_MULTI", RF1_ATTR_MULTI },
+    { "FORCE_DEPTH", RF1_FORCE_DEPTH },
+    { "FORCE_MAXHP", RF1_FORCE_MAXHP },
+    { "FORCE_EXTRA", RF1_FORCE_EXTRA },
+    { "ATTR_SEMIRAND", RF1_ATTR_SEMIRAND },
+    { "FRIENDS", RF1_FRIENDS },
+    { "ESCORT", RF1_ESCORT },
+    { "ESCORTS", RF1_ESCORTS },
+    { "ONLY_GOLD", RF1_ONLY_GOLD },
+    { "ONLY_ITEM", RF1_ONLY_ITEM },
+    { "DROP_60", RF1_DROP_60 },
+    { "DROP_90", RF1_DROP_90 },
+    { "DROP_1D2", RF1_DROP_1D2 },
+    { "DROP_2D2", RF1_DROP_2D2 },
+    { "DROP_3D2", RF1_DROP_3D2 },
+    { "DROP_4D2", RF1_DROP_4D2 },
+    { "DROP_GOOD", RF1_DROP_GOOD },
+    { "DROP_GREAT", RF1_DROP_GREAT },
 };
 
 /*!
@@ -121,32 +116,24 @@ const std::unordered_map<std::string_view, race_flags1> r_info_flags1 = {
  * Monster race flags
  */
 const std::unordered_map<std::string_view, race_flags2> r_info_flags2 = {
-       { "STUPID", RF2_STUPID },
-       { "SMART", RF2_SMART },
-       { "CAN_SPEAK", RF2_CAN_SPEAK },
-       { "REFLECTING", RF2_REFLECTING },
-       { "INVISIBLE", RF2_INVISIBLE },
-       { "COLD_BLOOD", RF2_COLD_BLOOD },
-       { "EMPTY_MIND", RF2_EMPTY_MIND },
-       { "WEIRD_MIND", RF2_WEIRD_MIND },
-       { "MULTIPLY", RF2_MULTIPLY },
-       { "REGENERATE", RF2_REGENERATE },
-       { "CHAR_MULTI", RF2_CHAR_MULTI },
-       { "ATTR_ANY", RF2_ATTR_ANY },
-       { "POWERFUL", RF2_POWERFUL },
-       { "ELDRITCH_HORROR", RF2_ELDRITCH_HORROR },
-       { "FLAGS2_XX14", RF2_XX14 },
-       { "FLAGS2_XX15", RF2_XX15 },
-       { "OPEN_DOOR", RF2_OPEN_DOOR },
-       { "BASH_DOOR", RF2_BASH_DOOR },
-       { "PASS_WALL", RF2_PASS_WALL },
-       { "KILL_WALL", RF2_KILL_WALL },
-       { "MOVE_BODY", RF2_MOVE_BODY },
-       { "KILL_BODY", RF2_KILL_BODY },
-       { "TAKE_ITEM", RF2_TAKE_ITEM },
-       { "KILL_ITEM", RF2_KILL_ITEM },
-       { "HUMAN", RF2_HUMAN },
-       { "QUANTUM", RF2_QUANTUM }
+    { "CAN_SPEAK", RF2_CAN_SPEAK },
+    { "REFLECTING", RF2_REFLECTING },
+    { "INVISIBLE", RF2_INVISIBLE },
+    { "COLD_BLOOD", RF2_COLD_BLOOD },
+    { "EMPTY_MIND", RF2_EMPTY_MIND },
+    { "WEIRD_MIND", RF2_WEIRD_MIND },
+    { "MULTIPLY", RF2_MULTIPLY },
+    { "REGENERATE", RF2_REGENERATE },
+    { "CHAR_MULTI", RF2_CHAR_MULTI },
+    { "ATTR_ANY", RF2_ATTR_ANY },
+    { "POWERFUL", RF2_POWERFUL },
+    { "ELDRITCH_HORROR", RF2_ELDRITCH_HORROR },
+    { "FLAGS2_XX14", RF2_XX14 },
+    { "FLAGS2_XX15", RF2_XX15 },
+    { "PASS_WALL", RF2_PASS_WALL },
+    { "KILL_WALL", RF2_KILL_WALL },
+    { "HUMAN", RF2_HUMAN },
+    { "QUANTUM", RF2_QUANTUM }
 };
 
 /*!
@@ -290,24 +277,23 @@ const std::unordered_map<std::string_view, MonsterAbilityType> r_info_ability_fl
  * "GUARDIAN" ... init.c d_infoの FINAL_GUARDIAN_* にて自動指定
  */
 const std::unordered_map<std::string_view, race_flags7> r_info_flags7 = {
-       { "AQUATIC", RF7_AQUATIC },
-       { "CAN_SWIM", RF7_CAN_SWIM },
-       { "CAN_FLY", RF7_CAN_FLY },
-       { "FRIENDLY", RF7_FRIENDLY },
-       { "NAZGUL", RF7_NAZGUL },
-       { "UNIQUE2", RF7_UNIQUE2 },
-       { "RIDING", RF7_RIDING },
-       { "KAGE", RF7_KAGE },
-       { "HAS_LITE_1", RF7_HAS_LITE_1 },
-       { "SELF_LITE_1", RF7_SELF_LITE_1 },
-       { "HAS_LITE_2", RF7_HAS_LITE_2 },
-       { "SELF_LITE_2", RF7_SELF_LITE_2 },
-       { "CHAMELEON", RF7_CHAMELEON },
-       { "TANUKI", RF7_TANUKI },
-       { "HAS_DARK_1", RF7_HAS_DARK_1 },
-       { "SELF_DARK_1", RF7_SELF_DARK_1 },
-       { "HAS_DARK_2", RF7_HAS_DARK_2 },
-       { "SELF_DARK_2", RF7_SELF_DARK_2 },
+    { "AQUATIC", RF7_AQUATIC },
+    { "CAN_SWIM", RF7_CAN_SWIM },
+    { "CAN_FLY", RF7_CAN_FLY },
+    { "NAZGUL", RF7_NAZGUL },
+    { "UNIQUE2", RF7_UNIQUE2 },
+    { "RIDING", RF7_RIDING },
+    { "KAGE", RF7_KAGE },
+    { "HAS_LITE_1", RF7_HAS_LITE_1 },
+    { "SELF_LITE_1", RF7_SELF_LITE_1 },
+    { "HAS_LITE_2", RF7_HAS_LITE_2 },
+    { "SELF_LITE_2", RF7_SELF_LITE_2 },
+    { "CHAMELEON", RF7_CHAMELEON },
+    { "TANUKI", RF7_TANUKI },
+    { "HAS_DARK_1", RF7_HAS_DARK_1 },
+    { "SELF_DARK_1", RF7_SELF_DARK_1 },
+    { "HAS_DARK_2", RF7_HAS_DARK_2 },
+    { "SELF_DARK_2", RF7_SELF_DARK_2 },
 };
 
 /*!
@@ -423,3 +409,20 @@ const std::unordered_map<std::string_view, MonsterAuraType> r_info_aura_flags =
     { "AURA_VOIDS", MonsterAuraType::VOIDS },
     { "AURA_ABYSS", MonsterAuraType::ABYSS },
 };
+
+const std::unordered_map<std::string_view, MonsterBehaviorType> r_info_behavior_flags = {
+    { "NEVER_BLOW", MonsterBehaviorType::NEVER_BLOW },
+    { "NEVER_MOVE", MonsterBehaviorType::NEVER_MOVE },
+    { "OPEN_DOOR", MonsterBehaviorType::OPEN_DOOR },
+    { "BASH_DOOR", MonsterBehaviorType::BASH_DOOR },
+    { "MOVE_BODY", MonsterBehaviorType::MOVE_BODY },
+    { "KILL_BODY", MonsterBehaviorType::KILL_BODY },
+    { "TAKE_ITEM", MonsterBehaviorType::TAKE_ITEM },
+    { "KILL_ITEM", MonsterBehaviorType::KILL_ITEM },
+    { "RAND_25", MonsterBehaviorType::RAND_MOVE_25 },
+    { "RAND_50", MonsterBehaviorType::RAND_MOVE_50 },
+    { "STUPID", MonsterBehaviorType::STUPID },
+    { "SMART", MonsterBehaviorType::SMART },
+    { "FRIENDLY", MonsterBehaviorType::FRIENDLY },
+    { "PREVENT_SUDDEN_MAGIC", MonsterBehaviorType::PREVENT_SUDDEN_MAGIC },
+};
index fa3b576..2dde349 100644 (file)
@@ -4,13 +4,14 @@
 #include "monster-attack/monster-attack-types.h"
 #include "monster-race/monster-aura-types.h"
 #include "monster-race/race-ability-flags.h"
+#include "monster-race/race-behavior-flags.h"
+#include "monster-race/race-flags-resistance.h"
 #include "monster-race/race-flags1.h"
 #include "monster-race/race-flags2.h"
 #include "monster-race/race-flags3.h"
 #include "monster-race/race-flags7.h"
 #include "monster-race/race-flags8.h"
 #include "monster-race/race-flags9.h"
-#include "monster-race/race-flags-resistance.h"
 #include "system/angband.h"
 
 #include <string_view>
@@ -29,4 +30,4 @@ extern const std::unordered_map<std::string_view, race_flags8> r_info_flags8;
 extern const std::unordered_map<std::string_view, race_flags9> r_info_flags9;
 extern const std::unordered_map<std::string_view, race_flags_resistance> r_info_flagsr;
 extern const std::unordered_map<std::string_view, MonsterAuraType> r_info_aura_flags;
-
+extern const std::unordered_map<std::string_view, MonsterBehaviorType> r_info_behavior_flags;
index 9936c7b..d4216b3 100644 (file)
@@ -44,6 +44,10 @@ static bool grab_one_basic_flag(monster_race *r_ptr, std::string_view what)
         return true;
     }
 
+    if (EnumClassFlagGroup<MonsterBehaviorType>::grab_one_flag(r_ptr->behavior_flags, r_info_behavior_flags, what)) {
+        return true;
+    }
+
     msg_format(_("未知のモンスター・フラグ '%s'。", "Unknown monster flag '%s'."), what.data());
     return false;
 }
index 48837ed..cd5c191 100644 (file)
@@ -1,4 +1,4 @@
-#include "monster/monster-util.h"
+#include "monster/monster-util.h"
 #include "dungeon/dungeon-flag-types.h"
 #include "dungeon/dungeon.h"
 #include "dungeon/quest.h"
@@ -105,8 +105,13 @@ static bool restrict_monster_to_dungeon(PlayerType *player_ptr, MONRACE_IDX r_id
                 return false;
         }
 
-        if (d_ptr->m_ability_flags.any()) {
-            if (!r_ptr->ability_flags.has_all_of(d_ptr->m_ability_flags))
+        if (d_ptr->mon_ability_flags.any()) {
+            if (!r_ptr->ability_flags.has_all_of(d_ptr->mon_ability_flags))
+                return false;
+        }
+
+        if (d_ptr->mon_behavior_flags.any()) {
+            if (!r_ptr->behavior_flags.has_all_of(d_ptr->mon_behavior_flags))
                 return false;
         }
 
@@ -152,8 +157,13 @@ static bool restrict_monster_to_dungeon(PlayerType *player_ptr, MONRACE_IDX r_id
                 return true;
         }
 
-        if (d_ptr->m_ability_flags.any()) {
-            if (!r_ptr->ability_flags.has_all_of(d_ptr->m_ability_flags))
+        if (d_ptr->mon_ability_flags.any()) {
+            if (!r_ptr->ability_flags.has_all_of(d_ptr->mon_ability_flags))
+                return true;
+        }
+
+        if (d_ptr->mon_behavior_flags.any()) {
+            if (!r_ptr->behavior_flags.has_all_of(d_ptr->mon_behavior_flags))
                 return true;
         }
 
@@ -190,7 +200,9 @@ static bool restrict_monster_to_dungeon(PlayerType *player_ptr, MONRACE_IDX r_id
             return true;
         if (r_ptr->flags3 & d_ptr->mflags3)
             return true;
-        if (r_ptr->ability_flags.has_any_of(d_ptr->m_ability_flags))
+        if (r_ptr->ability_flags.has_any_of(d_ptr->mon_ability_flags))
+            return true;
+        if (r_ptr->behavior_flags.has_any_of(d_ptr->mon_behavior_flags))
             return true;
         if (r_ptr->flags7 & d_ptr->mflags7)
             return true;
@@ -213,7 +225,9 @@ static bool restrict_monster_to_dungeon(PlayerType *player_ptr, MONRACE_IDX r_id
             return false;
         if (r_ptr->flags3 & d_ptr->mflags3)
             return false;
-        if (r_ptr->ability_flags.has_any_of(d_ptr->m_ability_flags))
+        if (r_ptr->ability_flags.has_any_of(d_ptr->mon_ability_flags))
+            return false;
+        if (r_ptr->behavior_flags.has_any_of(d_ptr->mon_behavior_flags))
             return false;
         if (r_ptr->flags7 & d_ptr->mflags7)
             return false;