OSDN Git Service

[Refactor] #2647 is_original_ap() をmonster_type のオブジェクトメソッドとして再定義した
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 17 Sep 2022 02:56:41 +0000 (11:56 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sun, 18 Sep 2022 11:06:53 +0000 (20:06 +0900)
src/lore/lore-store.cpp
src/monster-floor/one-monster-placer.cpp
src/monster/monster-describer.cpp
src/monster/monster-info.cpp
src/monster/monster-info.h
src/monster/monster-update.cpp
src/save/monster-writer.cpp
src/spell-kind/spells-detection.cpp
src/spell-kind/spells-sight.cpp
src/system/monster-type-definition.cpp
src/system/monster-type-definition.h

index 1841f01..2127f0a 100644 (file)
@@ -123,7 +123,7 @@ void lore_treasure(PlayerType *player_ptr, MONSTER_IDX m_idx, ITEM_NUMBER num_it
     auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
     auto *r_ptr = &r_info[m_ptr->r_idx];
 
-    if (!is_original_ap(m_ptr)) {
+    if (!m_ptr->is_original_ap()) {
         return;
     }
 
index b2da739..231f1ad 100644 (file)
@@ -306,7 +306,7 @@ bool place_monster_one(PlayerType *player_ptr, MONSTER_IDX who, POSITION y, POSI
 
     m_ptr->mflag.clear();
     m_ptr->mflag2.clear();
-    if (any_bits(mode, PM_MULTIPLY) && (who > 0) && !is_original_ap(&floor_ptr->m_list[who])) {
+    if (any_bits(mode, PM_MULTIPLY) && (who > 0) && !floor_ptr->m_list[who].is_original_ap()) {
         m_ptr->ap_r_idx = floor_ptr->m_list[who].ap_r_idx;
         if (floor_ptr->m_list[who].mflag2.has(MonsterConstantFlagType::KAGE)) {
             m_ptr->mflag2.set(MonsterConstantFlagType::KAGE);
index 83529de..c952947 100644 (file)
@@ -163,7 +163,7 @@ void monster_desc(PlayerType *player_ptr, char *desc, monster_type *m_ptr, BIT_F
 
     /* Handle all other visible monster requests */
     /* Tanuki? */
-    if (m_ptr->is_pet() && !is_original_ap(m_ptr)) {
+    if (m_ptr->is_pet() && !m_ptr->is_original_ap()) {
 #ifdef JP
         char *t;
         char buf[128];
@@ -242,7 +242,7 @@ void monster_desc(PlayerType *player_ptr, char *desc, monster_type *m_ptr, BIT_F
         }
     }
 
-    if ((mode & MD_IGNORE_HALLU) && !is_original_ap(m_ptr)) {
+    if ((mode & MD_IGNORE_HALLU) && !m_ptr->is_original_ap()) {
         strcat(desc, format("(%s)", r_info[m_ptr->r_idx].name.c_str()));
     }
 
index 20d2b71..1cb6b67 100644 (file)
@@ -266,12 +266,6 @@ bool is_original_ap_and_seen(PlayerType *player_ptr, monster_type *m_ptr)
     return m_ptr->ml && !player_ptr->effects()->hallucination()->is_hallucinated() && (m_ptr->ap_r_idx == m_ptr->r_idx);
 }
 
-/*  Determine monster race appearance index is same as race index */
-bool is_original_ap(const monster_type *m_ptr)
-{
-    return m_ptr->ap_r_idx == m_ptr->r_idx;
-}
-
 /*!
  * @brief モンスターがアイテム類に擬態しているかどうかを返す
  *
index bf716e3..ff510aa 100644 (file)
@@ -17,7 +17,6 @@ bool are_enemies(PlayerType *player_ptr, monster_type *m_ptr1, monster_type *m_p
 bool monster_has_hostile_align(PlayerType *player_ptr, monster_type *m_ptr, int pa_good, int pa_evil, monster_race *r_ptr);
 bool is_original_ap_and_seen(PlayerType *player_ptr, monster_type *m_ptr);
 
-bool is_original_ap(const monster_type *m_ptr);
 bool is_mimicry(monster_type *m_ptr);
 
 monster_race *real_r_ptr(monster_type *m_ptr);
index 96863b7..02038a2 100644 (file)
@@ -230,7 +230,8 @@ static void update_smart_stupid_flags(monster_race *r_ptr)
  */
 static bool update_weird_telepathy(PlayerType *player_ptr, um_type *um_ptr, MONSTER_IDX m_idx)
 {
-    auto *r_ptr = &r_info[um_ptr->m_ptr->r_idx];
+    auto *m_ptr = um_ptr->m_ptr;
+    auto *r_ptr = &r_info[m_ptr->r_idx];
     if ((r_ptr->flags2 & RF2_WEIRD_MIND) == 0) {
         return false;
     }
@@ -240,8 +241,8 @@ static bool update_weird_telepathy(PlayerType *player_ptr, um_type *um_ptr, MONS
     }
 
     um_ptr->flag = true;
-    um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-    if (is_original_ap(um_ptr->m_ptr) && !player_ptr->effects()->hallucination()->is_hallucinated()) {
+    m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+    if (m_ptr->is_original_ap() && !player_ptr->effects()->hallucination()->is_hallucinated()) {
         r_ptr->r_flags2 |= RF2_WEIRD_MIND;
         update_smart_stupid_flags(r_ptr);
     }
@@ -251,11 +252,12 @@ static bool update_weird_telepathy(PlayerType *player_ptr, um_type *um_ptr, MONS
 
 static void update_telepathy_sight(PlayerType *player_ptr, um_type *um_ptr, MONSTER_IDX m_idx)
 {
-    auto *r_ptr = &r_info[um_ptr->m_ptr->r_idx];
+    auto *m_ptr = um_ptr->m_ptr;
+    auto *r_ptr = &r_info[m_ptr->r_idx];
     if (PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU)) {
         um_ptr->flag = true;
         um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !player_ptr->effects()->hallucination()->is_hallucinated()) {
+        if (um_ptr->m_ptr->is_original_ap() && !player_ptr->effects()->hallucination()->is_hallucinated()) {
             update_smart_stupid_flags(r_ptr);
         }
 
@@ -268,7 +270,7 @@ static void update_telepathy_sight(PlayerType *player_ptr, um_type *um_ptr, MONS
 
     auto is_hallucinated = player_ptr->effects()->hallucination()->is_hallucinated();
     if (r_ptr->flags2 & RF2_EMPTY_MIND) {
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_flags2 |= RF2_EMPTY_MIND;
         }
 
@@ -280,108 +282,109 @@ static void update_telepathy_sight(PlayerType *player_ptr, um_type *um_ptr, MONS
     }
 
     um_ptr->flag = true;
-    um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-    if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+    m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+    if (m_ptr->is_original_ap() && !is_hallucinated) {
         update_smart_stupid_flags(r_ptr);
     }
 }
 
 static void update_specific_race_telepathy(PlayerType *player_ptr, um_type *um_ptr)
 {
-    auto *r_ptr = &r_info[um_ptr->m_ptr->r_idx];
+    auto *m_ptr = um_ptr->m_ptr;
+    auto *r_ptr = &r_info[m_ptr->r_idx];
     auto is_hallucinated = player_ptr->effects()->hallucination()->is_hallucinated();
     if ((player_ptr->esp_animal) && r_ptr->kind_flags.has(MonsterKindType::ANIMAL)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::ANIMAL);
         }
     }
 
     if ((player_ptr->esp_undead) && r_ptr->kind_flags.has(MonsterKindType::UNDEAD)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::UNDEAD);
         }
     }
 
     if ((player_ptr->esp_demon) && r_ptr->kind_flags.has(MonsterKindType::DEMON)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::DEMON);
         }
     }
 
     if ((player_ptr->esp_orc) && r_ptr->kind_flags.has(MonsterKindType::ORC)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::ORC);
         }
     }
 
     if ((player_ptr->esp_troll) && r_ptr->kind_flags.has(MonsterKindType::TROLL)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::TROLL);
         }
     }
 
     if ((player_ptr->esp_giant) && r_ptr->kind_flags.has(MonsterKindType::GIANT)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::GIANT);
         }
     }
 
     if ((player_ptr->esp_dragon) && r_ptr->kind_flags.has(MonsterKindType::DRAGON)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::DRAGON);
         }
     }
 
     if ((player_ptr->esp_human) && r_ptr->kind_flags.has(MonsterKindType::HUMAN)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::HUMAN);
         }
     }
 
     if ((player_ptr->esp_evil) && r_ptr->kind_flags.has(MonsterKindType::EVIL)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::EVIL);
         }
     }
 
     if ((player_ptr->esp_good) && r_ptr->kind_flags.has(MonsterKindType::GOOD)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::GOOD);
         }
     }
 
     if ((player_ptr->esp_nonliving) && (r_ptr->kind_flags.has(MonsterKindType::NONLIVING) && r_ptr->kind_flags.has_none_of({ MonsterKindType::DEMON, MonsterKindType::UNDEAD }))) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::NONLIVING);
         }
     }
 
     if ((player_ptr->esp_unique) && r_ptr->kind_flags.has(MonsterKindType::UNIQUE)) {
         um_ptr->flag = true;
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
-        if (is_original_ap(um_ptr->m_ptr) && !is_hallucinated) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::ESP);
+        if (m_ptr->is_original_ap() && !is_hallucinated) {
             r_ptr->r_kind_flags.set(MonsterKindType::UNIQUE);
         }
     }
@@ -431,9 +434,10 @@ static bool check_invisible(PlayerType *player_ptr, um_type *um_ptr)
 static void decide_sight_invisible_monster(PlayerType *player_ptr, um_type *um_ptr, MONSTER_IDX m_idx)
 {
     POSITION distance = decide_updated_distance(player_ptr, um_ptr);
-    auto *r_ptr = &r_info[um_ptr->m_ptr->r_idx];
+    auto *m_ptr = um_ptr->m_ptr;
+    auto *r_ptr = &r_info[m_ptr->r_idx];
 
-    um_ptr->m_ptr->mflag.reset(MonsterTemporaryFlagType::ESP);
+    m_ptr->mflag.reset(MonsterTemporaryFlagType::ESP);
 
     if (distance > (um_ptr->in_darkness ? MAX_SIGHT / 2 : MAX_SIGHT)) {
         return;
@@ -456,7 +460,7 @@ static void decide_sight_invisible_monster(PlayerType *player_ptr, um_type *um_p
 
     bool do_cold_blood = check_cold_blood(player_ptr, um_ptr, distance);
     bool do_invisible = check_invisible(player_ptr, um_ptr);
-    if (!um_ptr->flag || !is_original_ap(um_ptr->m_ptr) || player_ptr->effects()->hallucination()->is_hallucinated()) {
+    if (!um_ptr->flag || !m_ptr->is_original_ap() || player_ptr->effects()->hallucination()->is_hallucinated()) {
         return;
     }
 
@@ -479,11 +483,12 @@ static void decide_sight_invisible_monster(PlayerType *player_ptr, um_type *um_p
  */
 static void update_invisible_monster(PlayerType *player_ptr, um_type *um_ptr, MONSTER_IDX m_idx)
 {
-    if (um_ptr->m_ptr->ml) {
+    auto *m_ptr = um_ptr->m_ptr;
+    if (m_ptr->ml) {
         return;
     }
 
-    um_ptr->m_ptr->ml = true;
+    m_ptr->ml = true;
     lite_spot(player_ptr, um_ptr->fy, um_ptr->fx);
 
     if (player_ptr->health_who == m_idx) {
@@ -495,23 +500,22 @@ static void update_invisible_monster(PlayerType *player_ptr, um_type *um_ptr, MO
     }
 
     if (!player_ptr->effects()->hallucination()->is_hallucinated()) {
-        auto *r_ptr = &r_info[um_ptr->m_ptr->r_idx];
-        if ((um_ptr->m_ptr->ap_r_idx == MonsterRaceId::KAGE) && (r_info[MonsterRaceId::KAGE].r_sights < MAX_SHORT)) {
+        auto *r_ptr = &r_info[m_ptr->r_idx];
+        if ((m_ptr->ap_r_idx == MonsterRaceId::KAGE) && (r_info[MonsterRaceId::KAGE].r_sights < MAX_SHORT)) {
             r_info[MonsterRaceId::KAGE].r_sights++;
-        } else if (is_original_ap(um_ptr->m_ptr) && (r_ptr->r_sights < MAX_SHORT)) {
+        } else if (m_ptr->is_original_ap() && (r_ptr->r_sights < MAX_SHORT)) {
             r_ptr->r_sights++;
         }
     }
 
-    if (w_ptr->is_loading_now && w_ptr->character_dungeon && !player_ptr->phase_out && r_info[um_ptr->m_ptr->ap_r_idx].flags2 & RF2_ELDRITCH_HORROR) {
-        um_ptr->m_ptr->mflag.set(MonsterTemporaryFlagType::SANITY_BLAST);
+    if (w_ptr->is_loading_now && w_ptr->character_dungeon && !player_ptr->phase_out && r_info[m_ptr->ap_r_idx].flags2 & RF2_ELDRITCH_HORROR) {
+        m_ptr->mflag.set(MonsterTemporaryFlagType::SANITY_BLAST);
     }
 
-    const auto &m_ref = *um_ptr->m_ptr;
-    const auto projectable_from_monster = projectable(player_ptr, m_ref.fy, m_ref.fx, player_ptr->y, player_ptr->x);
-    const auto projectable_from_player = projectable(player_ptr, player_ptr->y, player_ptr->x, m_ref.fy, m_ref.fx);
+    const auto projectable_from_monster = projectable(player_ptr, m_ptr->fy, m_ptr->fx, player_ptr->y, player_ptr->x);
+    const auto projectable_from_player = projectable(player_ptr, player_ptr->y, player_ptr->x, m_ptr->fy, m_ptr->fx);
     if (disturb_near && projectable_from_monster && projectable_from_player) {
-        if (disturb_pets || m_ref.is_hostile()) {
+        if (disturb_pets || m_ptr->is_hostile()) {
             disturb(player_ptr, true, true);
         }
     }
index 70cae2c..b0f4fa9 100644 (file)
@@ -12,7 +12,7 @@
 
 static void write_monster_flags(monster_type *m_ptr, BIT_FLAGS *flags)
 {
-    if (!is_original_ap(m_ptr)) {
+    if (!m_ptr->is_original_ap()) {
         set_bits(*flags, SaveDataMonsterFlagType::AP_R_IDX);
     }
 
index 8ed46b9..22f5ade 100644 (file)
@@ -446,7 +446,7 @@ bool detect_monsters_evil(PlayerType *player_ptr, POSITION range)
         }
 
         if (r_ptr->kind_flags.has(MonsterKindType::EVIL)) {
-            if (is_original_ap(m_ptr)) {
+            if (m_ptr->is_original_ap()) {
                 r_ptr->r_kind_flags.set(MonsterKindType::EVIL);
                 if (player_ptr->monster_race_idx == m_ptr->r_idx) {
                     player_ptr->window_flags |= (PW_MONSTER);
index 4d3f611..1c32595 100644 (file)
@@ -373,7 +373,7 @@ bool deathray_monsters(PlayerType *player_ptr)
  */
 void probed_monster_info(char *buf, PlayerType *player_ptr, monster_type *m_ptr, monster_race *r_ptr)
 {
-    if (!is_original_ap(m_ptr)) {
+    if (!m_ptr->is_original_ap()) {
         if (m_ptr->mflag2.has(MonsterConstantFlagType::KAGE)) {
             m_ptr->mflag2.reset(MonsterConstantFlagType::KAGE);
         }
index 1707a05..73624e1 100644 (file)
@@ -14,3 +14,8 @@ bool monster_type::is_hostile() const
 {
     return !this->is_friendly() && !this->is_pet();
 }
+
+bool monster_type::is_original_ap() const
+{
+    return this->ap_r_idx == this->r_idx;
+}
index 8b01bee..95764c4 100644 (file)
@@ -55,4 +55,5 @@ struct monster_type {
     bool is_friendly() const;
     bool is_pet() const;
     bool is_hostile() const;
+    bool is_original_ap() const;
 };