OSDN Git Service

[Refactor] enum classの型名変更 DF -> DungeonFeatureType
[hengbandforosx/hengbandosx.git] / src / monster / monster-util.cpp
index adbe913..e52ff23 100644 (file)
@@ -5,7 +5,6 @@
 #include "floor/wild.h"
 #include "game-option/cheat-options.h"
 #include "grid/feature.h"
-#include "grid/grid.h"
 #include "monster-race/monster-race-hook.h"
 #include "monster-race/monster-race.h"
 #include "monster-race/race-ability-mask.h"
@@ -16,6 +15,7 @@
 #include "spell/summon-types.h"
 #include "system/alloc-entries.h"
 #include "system/floor-type-definition.h"
+#include "system/grid-type-definition.h"
 #include "system/monster-race-definition.h"
 #include "system/player-type-definition.h"
 #include "util/bit-flags-calculator.h"
@@ -47,7 +47,7 @@ summon_type summon_specific_type = SUMMON_NONE;
 
 /*!
  * @brief 指定されたモンスター種族がダンジョンの制限にかかるかどうかをチェックする / Some dungeon types restrict the possible monsters.
- * @param player_ptr ã\83\97ã\83¬ã\83¼ヤーへの参照ポインタ
+ * @param player_ptr ã\83\97ã\83¬ã\82¤ヤーへの参照ポインタ
  * @param r_idx チェックするモンスター種族ID
  * @return 召喚条件が一致するならtrue / Return TRUE is the monster is OK and FALSE otherwise
  */
@@ -57,186 +57,186 @@ static bool restrict_monster_to_dungeon(player_type *player_ptr, MONRACE_IDX r_i
     dungeon_type *d_ptr = &d_info[d_idx];
     monster_race *r_ptr = &r_info[r_idx];
 
-    if (d_ptr->flags.has(DF::CHAMELEON)) {
+    if (d_ptr->flags.has(DungeonFeatureType::CHAMELEON)) {
         if (chameleon_change_m_idx)
-            return TRUE;
+            return true;
     }
 
-    if (d_ptr->flags.has(DF::NO_MAGIC)) {
+    if (d_ptr->flags.has(DungeonFeatureType::NO_MAGIC)) {
         if (r_idx != MON_CHAMELEON && r_ptr->freq_spell && r_ptr->ability_flags.has_none_of(RF_ABILITY_NOMAGIC_MASK))
-            return FALSE;
+            return false;
     }
 
-    if (d_ptr->flags.has(DF::NO_MELEE)) {
+    if (d_ptr->flags.has(DungeonFeatureType::NO_MELEE)) {
         if (r_idx == MON_CHAMELEON)
-            return TRUE;
+            return true;
         if (r_ptr->ability_flags.has_none_of(RF_ABILITY_BOLT_MASK | RF_ABILITY_BEAM_MASK | RF_ABILITY_BALL_MASK)
             && r_ptr->ability_flags.has_none_of(
-                { RF_ABILITY::CAUSE_1, RF_ABILITY::CAUSE_2, RF_ABILITY::CAUSE_3, RF_ABILITY::CAUSE_4, RF_ABILITY::MIND_BLAST, RF_ABILITY::BRAIN_SMASH }))
-            return FALSE;
+                { MonsterAbilityType::CAUSE_1, MonsterAbilityType::CAUSE_2, MonsterAbilityType::CAUSE_3, MonsterAbilityType::CAUSE_4, MonsterAbilityType::MIND_BLAST, MonsterAbilityType::BRAIN_SMASH }))
+            return false;
     }
 
     floor_type *floor_ptr = player_ptr->current_floor_ptr;
-    if (d_ptr->flags.has(DF::BEGINNER)) {
+    if (d_ptr->flags.has(DungeonFeatureType::BEGINNER)) {
         if (r_ptr->level > floor_ptr->dun_level)
-            return FALSE;
+            return false;
     }
 
     if (d_ptr->special_div >= 64)
-        return TRUE;
-    if (summon_specific_type && d_ptr->flags.has_not(DF::CHAMELEON))
-        return TRUE;
+        return true;
+    if (summon_specific_type && d_ptr->flags.has_not(DungeonFeatureType::CHAMELEON))
+        return true;
 
     byte a;
     switch (d_ptr->mode) {
     case DUNGEON_MODE_AND: {
         if (d_ptr->mflags1) {
             if ((d_ptr->mflags1 & r_ptr->flags1) != d_ptr->mflags1)
-                return FALSE;
+                return false;
         }
 
         if (d_ptr->mflags2) {
             if ((d_ptr->mflags2 & r_ptr->flags2) != d_ptr->mflags2)
-                return FALSE;
+                return false;
         }
 
         if (d_ptr->mflags3) {
             if ((d_ptr->mflags3 & r_ptr->flags3) != d_ptr->mflags3)
-                return FALSE;
+                return false;
         }
 
         if (d_ptr->m_ability_flags.any()) {
             if (!r_ptr->ability_flags.has_all_of(d_ptr->m_ability_flags))
-                return FALSE;
+                return false;
         }
 
         if (d_ptr->mflags7) {
             if ((d_ptr->mflags7 & r_ptr->flags7) != d_ptr->mflags7)
-                return FALSE;
+                return false;
         }
 
         if (d_ptr->mflags8) {
             if ((d_ptr->mflags8 & r_ptr->flags8) != d_ptr->mflags8)
-                return FALSE;
+                return false;
         }
 
         if (d_ptr->mflags9) {
             if ((d_ptr->mflags9 & r_ptr->flags9) != d_ptr->mflags9)
-                return FALSE;
+                return false;
         }
 
         if (d_ptr->mflagsr) {
             if ((d_ptr->mflagsr & r_ptr->flagsr) != d_ptr->mflagsr)
-                return FALSE;
+                return false;
         }
 
         for (a = 0; a < 5; a++)
             if (d_ptr->r_char[a] && (d_ptr->r_char[a] != r_ptr->d_char))
-                return FALSE;
+                return false;
 
-        return TRUE;
+        return true;
     }
     case DUNGEON_MODE_NAND: {
         if (d_ptr->mflags1) {
             if ((d_ptr->mflags1 & r_ptr->flags1) != d_ptr->mflags1)
-                return TRUE;
+                return true;
         }
 
         if (d_ptr->mflags2) {
             if ((d_ptr->mflags2 & r_ptr->flags2) != d_ptr->mflags2)
-                return TRUE;
+                return true;
         }
 
         if (d_ptr->mflags3) {
             if ((d_ptr->mflags3 & r_ptr->flags3) != d_ptr->mflags3)
-                return TRUE;
+                return true;
         }
 
         if (d_ptr->m_ability_flags.any()) {
             if (!r_ptr->ability_flags.has_all_of(d_ptr->m_ability_flags))
-                return TRUE;
+                return true;
         }
 
         if (d_ptr->mflags7) {
             if ((d_ptr->mflags7 & r_ptr->flags7) != d_ptr->mflags7)
-                return TRUE;
+                return true;
         }
 
         if (d_ptr->mflags8) {
             if ((d_ptr->mflags8 & r_ptr->flags8) != d_ptr->mflags8)
-                return TRUE;
+                return true;
         }
 
         if (d_ptr->mflags9) {
             if ((d_ptr->mflags9 & r_ptr->flags9) != d_ptr->mflags9)
-                return TRUE;
+                return true;
         }
 
         if (d_ptr->mflagsr) {
             if ((d_ptr->mflagsr & r_ptr->flagsr) != d_ptr->mflagsr)
-                return TRUE;
+                return true;
         }
 
         for (a = 0; a < 5; a++)
             if (d_ptr->r_char[a] && (d_ptr->r_char[a] != r_ptr->d_char))
-                return TRUE;
+                return true;
 
-        return FALSE;
+        return false;
     }
     case DUNGEON_MODE_OR: {
         if (r_ptr->flags1 & d_ptr->mflags1)
-            return TRUE;
+            return true;
         if (r_ptr->flags2 & d_ptr->mflags2)
-            return TRUE;
+            return true;
         if (r_ptr->flags3 & d_ptr->mflags3)
-            return TRUE;
+            return true;
         if (r_ptr->ability_flags.has_any_of(d_ptr->m_ability_flags))
-            return TRUE;
+            return true;
         if (r_ptr->flags7 & d_ptr->mflags7)
-            return TRUE;
+            return true;
         if (r_ptr->flags8 & d_ptr->mflags8)
-            return TRUE;
+            return true;
         if (r_ptr->flags9 & d_ptr->mflags9)
-            return TRUE;
+            return true;
         if (r_ptr->flagsr & d_ptr->mflagsr)
-            return TRUE;
+            return true;
         for (a = 0; a < 5; a++)
             if (d_ptr->r_char[a] == r_ptr->d_char)
-                return TRUE;
+                return true;
 
-        return FALSE;
+        return false;
     }
     case DUNGEON_MODE_NOR: {
         if (r_ptr->flags1 & d_ptr->mflags1)
-            return FALSE;
+            return false;
         if (r_ptr->flags2 & d_ptr->mflags2)
-            return FALSE;
+            return false;
         if (r_ptr->flags3 & d_ptr->mflags3)
-            return FALSE;
+            return false;
         if (r_ptr->ability_flags.has_any_of(d_ptr->m_ability_flags))
-            return FALSE;
+            return false;
         if (r_ptr->flags7 & d_ptr->mflags7)
-            return FALSE;
+            return false;
         if (r_ptr->flags8 & d_ptr->mflags8)
-            return FALSE;
+            return false;
         if (r_ptr->flags9 & d_ptr->mflags9)
-            return FALSE;
+            return false;
         if (r_ptr->flagsr & d_ptr->mflagsr)
-            return FALSE;
+            return false;
         for (a = 0; a < 5; a++)
             if (d_ptr->r_char[a] == r_ptr->d_char)
-                return FALSE;
+                return false;
 
-        return TRUE;
+        return true;
     }
     }
 
-    return TRUE;
+    return true;
 }
 
 /*!
  * @brief プレイヤーの現在の広域マップ座標から得た地勢を元にモンスターの生成条件関数を返す
- * @param player_ptr ã\83\97ã\83¬ã\83¼ヤーへの参照ポインタ
+ * @param player_ptr ã\83\97ã\83¬ã\82¤ヤーへの参照ポインタ
  * @return 地勢にあったモンスターの生成条件関数
  */
 monsterrace_hook_type get_monster_hook(player_type *player_ptr)
@@ -276,10 +276,10 @@ monsterrace_hook_type get_monster_hook(player_type *player_ptr)
 monsterrace_hook_type get_monster_hook2(player_type *player_ptr, POSITION y, POSITION x)
 {
     feature_type *f_ptr = &f_info[player_ptr->current_floor_ptr->grid_array[y][x].feat];
-    if (has_flag(f_ptr->flags, FF_WATER))
-        return has_flag(f_ptr->flags, FF_DEEP) ? (monsterrace_hook_type)mon_hook_deep_water : (monsterrace_hook_type)mon_hook_shallow_water;
+    if (f_ptr->flags.has(FF::WATER))
+        return f_ptr->flags.has(FF::DEEP) ? (monsterrace_hook_type)mon_hook_deep_water : (monsterrace_hook_type)mon_hook_shallow_water;
 
-    if (has_flag(f_ptr->flags, FF_LAVA))
+    if (f_ptr->flags.has(FF::LAVA))
         return (monsterrace_hook_type)mon_hook_lava;
 
     return (monsterrace_hook_type)mon_hook_floor;
@@ -288,8 +288,8 @@ monsterrace_hook_type get_monster_hook2(player_type *player_ptr, POSITION y, POS
 /*!
  * @brief モンスター生成テーブルの重みを指定条件に従って変更する。
  * @param player_ptr
- * @param hook1 生成制約関数1 (NULL の場合、制約なし)
- * @param hook2 生成制約関数2 (NULL の場合、制約なし)
+ * @param hook1 生成制約関数1 (nullptr の場合、制約なし)
+ * @param hook2 生成制約関数2 (nullptr の場合、制約なし)
  * @param restrict_to_dungeon 現在プレイヤーのいるダンジョンの制約を適用するか
  * @return 常に 0
  *
@@ -307,7 +307,7 @@ static errr do_get_mon_num_prep(player_type *player_ptr, const monsterrace_hook_
     int prob2_total = 0; // 重みの総和
 
     // モンスター生成テーブルの各要素について重みを修正する。
-    for (int i = 0; i < alloc_race_size; i++) {
+    for (auto i = 0U; i < alloc_race_table.size(); i++) {
         alloc_entry *const entry = &alloc_race_table[i];
         const monster_race *const r_ptr = &r_info[entry->index];
 
@@ -352,7 +352,7 @@ static errr do_get_mon_num_prep(player_type *player_ptr, const monsterrace_hook_
             //   * フェイズアウト状態でない
             //   * 1階かそれより深いところにいる
             //   * ランダムクエスト中でない
-            const bool in_random_quest = floor_ptr->inside_quest && !is_fixed_quest_idx(floor_ptr->inside_quest);
+            const bool in_random_quest = floor_ptr->inside_quest && !quest_type::is_fixed(floor_ptr->inside_quest);
             const bool cond = !player_ptr->phase_out && floor_ptr->dun_level > 0 && !in_random_quest;
 
             if (cond && !restrict_monster_to_dungeon(player_ptr, entry->index)) {
@@ -386,15 +386,15 @@ static errr do_get_mon_num_prep(player_type *player_ptr, const monsterrace_hook_
 /*!
  * @brief モンスター生成テーブルの重み修正
  * @param player_ptr
- * @param hook1 生成制約関数1 (NULL の場合、制約なし)
- * @param hook2 生成制約関数2 (NULL の場合、制約なし)
+ * @param hook1 生成制約関数1 (nullptr の場合、制約なし)
+ * @param hook2 生成制約関数2 (nullptr の場合、制約なし)
  * @return 常に 0
  *
  * get_mon_num() を呼ぶ前に get_mon_num_prep() 系関数のいずれかを呼ぶこと。
  */
 errr get_mon_num_prep(player_type *player_ptr, const monsterrace_hook_type hook1, const monsterrace_hook_type hook2)
 {
-    return do_get_mon_num_prep(player_ptr, hook1, hook2, TRUE);
+    return do_get_mon_num_prep(player_ptr, hook1, hook2, true);
 }
 
 /*!
@@ -405,5 +405,5 @@ errr get_mon_num_prep(player_type *player_ptr, const monsterrace_hook_type hook1
  */
 errr get_mon_num_prep_bounty(player_type *player_ptr)
 {
-    return do_get_mon_num_prep(player_ptr, NULL, NULL, FALSE);
+    return do_get_mon_num_prep(player_ptr, nullptr, nullptr, false);
 }