OSDN Git Service

Merge pull request #3848 from Slimebreath6078/feature/Add_Damage_Cap
[hengbandforosx/hengbandosx.git] / src / save / monster-writer.cpp
index 7c3d6a0..4e84e3a 100644 (file)
@@ -1,68 +1,84 @@
-#include "save/monster-writer.h"
+#include "save/monster-writer.h"
 #include "load/old/monster-flag-types-savefile50.h"
 #include "monster-race/monster-race.h"
 #include "monster/monster-info.h"
 #include "monster/monster-status.h"
 #include "save/save-util.h"
-#include "system/monster-race-definition.h"
-#include "system/monster-type-definition.h"
+#include "system/monster-entity.h"
+#include "system/monster-race-info.h"
 #include "util/bit-flags-calculator.h"
-#include "util/quarks.h"
+#include "util/enum-converter.h"
 
-static void write_monster_flags(monster_type *m_ptr, BIT_FLAGS *flags)
+static void write_monster_flags(MonsterEntity *m_ptr, BIT_FLAGS *flags)
 {
-    if (!is_original_ap(m_ptr))
+    if (!m_ptr->is_original_ap()) {
         set_bits(*flags, SaveDataMonsterFlagType::AP_R_IDX);
+    }
 
-    if (m_ptr->sub_align)
+    if (m_ptr->sub_align) {
         set_bits(*flags, SaveDataMonsterFlagType::SUB_ALIGN);
+    }
 
-    if (monster_csleep_remaining(m_ptr))
+    if (m_ptr->is_asleep()) {
         set_bits(*flags, SaveDataMonsterFlagType::CSLEEP);
+    }
 
-    if (monster_fast_remaining(m_ptr))
+    if (m_ptr->is_accelerated()) {
         set_bits(*flags, SaveDataMonsterFlagType::FAST);
+    }
 
-    if (monster_slow_remaining(m_ptr))
+    if (m_ptr->is_decelerated()) {
         set_bits(*flags, SaveDataMonsterFlagType::SLOW);
+    }
 
-    if (monster_stunned_remaining(m_ptr))
+    if (m_ptr->is_stunned()) {
         set_bits(*flags, SaveDataMonsterFlagType::STUNNED);
+    }
 
-    if (monster_confused_remaining(m_ptr))
+    if (m_ptr->is_confused()) {
         set_bits(*flags, SaveDataMonsterFlagType::CONFUSED);
+    }
 
-    if (monster_fear_remaining(m_ptr))
+    if (m_ptr->is_fearful()) {
         set_bits(*flags, SaveDataMonsterFlagType::MONFEAR);
+    }
 
-    if (m_ptr->target_y)
+    if (m_ptr->target_y) {
         set_bits(*flags, SaveDataMonsterFlagType::TARGET_Y);
+    }
 
-    if (m_ptr->target_x)
+    if (m_ptr->target_x) {
         set_bits(*flags, SaveDataMonsterFlagType::TARGET_X);
+    }
 
-    if (monster_invulner_remaining(m_ptr))
+    if (m_ptr->is_invulnerable()) {
         set_bits(*flags, SaveDataMonsterFlagType::INVULNER);
+    }
 
-    if (m_ptr->smart.any())
+    if (m_ptr->smart.any()) {
         set_bits(*flags, SaveDataMonsterFlagType::SMART);
+    }
 
-    if (m_ptr->exp)
+    if (m_ptr->exp) {
         set_bits(*flags, SaveDataMonsterFlagType::EXP);
+    }
 
-    if (m_ptr->mflag2.any())
+    if (m_ptr->mflag2.any()) {
         set_bits(*flags, SaveDataMonsterFlagType::MFLAG2);
+    }
 
-    if (m_ptr->nickname)
+    if (m_ptr->is_named()) {
         set_bits(*flags, SaveDataMonsterFlagType::NICKNAME);
+    }
 
-    if (m_ptr->parent_m_idx)
+    if (m_ptr->parent_m_idx) {
         set_bits(*flags, SaveDataMonsterFlagType::PARENT);
+    }
 
     wr_u32b(*flags);
 }
 
-static void write_monster_info(monster_type *m_ptr, const BIT_FLAGS flags)
+static void write_monster_info(MonsterEntity *m_ptr, const BIT_FLAGS flags)
 {
     byte tmp8u;
     if (any_bits(flags, SaveDataMonsterFlagType::FAST)) {
@@ -90,43 +106,50 @@ static void write_monster_info(monster_type *m_ptr, const BIT_FLAGS flags)
         wr_byte(tmp8u);
     }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::TARGET_Y))
+    if (any_bits(flags, SaveDataMonsterFlagType::TARGET_Y)) {
         wr_s16b((int16_t)m_ptr->target_y);
+    }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::TARGET_X))
+    if (any_bits(flags, SaveDataMonsterFlagType::TARGET_X)) {
         wr_s16b((int16_t)m_ptr->target_x);
+    }
 
     if (any_bits(flags, SaveDataMonsterFlagType::INVULNER)) {
         tmp8u = (byte)m_ptr->mtimed[MTIMED_INVULNER];
         wr_byte(tmp8u);
     }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::SMART))
+    if (any_bits(flags, SaveDataMonsterFlagType::SMART)) {
         wr_FlagGroup(m_ptr->smart, wr_byte);
+    }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::EXP))
+    if (any_bits(flags, SaveDataMonsterFlagType::EXP)) {
         wr_u32b(m_ptr->exp);
+    }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::MFLAG2))
+    if (any_bits(flags, SaveDataMonsterFlagType::MFLAG2)) {
         wr_FlagGroup(m_ptr->mflag2, wr_byte);
+    }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::NICKNAME))
-        wr_string(quark_str(m_ptr->nickname));
+    if (any_bits(flags, SaveDataMonsterFlagType::NICKNAME)) {
+        wr_string(m_ptr->nickname);
+    }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::PARENT))
+    if (any_bits(flags, SaveDataMonsterFlagType::PARENT)) {
         wr_s16b(m_ptr->parent_m_idx);
+    }
 }
 
 /*!
  * @brief モンスター情報を書き込む / Write a "monster" record
  * @param m_ptr モンスター情報保存元ポインタ
  */
-void wr_monster(monster_type *m_ptr)
+void wr_monster(MonsterEntity *m_ptr)
 {
     BIT_FLAGS flags = 0x00000000;
     write_monster_flags(m_ptr, &flags);
 
-    wr_s16b(m_ptr->r_idx);
+    wr_s16b(enum2i(m_ptr->r_idx));
     wr_byte((byte)m_ptr->fy);
     wr_byte((byte)m_ptr->fx);
     wr_s16b((int16_t)m_ptr->hp);
@@ -134,14 +157,17 @@ void wr_monster(monster_type *m_ptr)
     wr_s16b((int16_t)m_ptr->max_maxhp);
     wr_u32b(m_ptr->dealt_damage);
 
-    if (any_bits(flags, SaveDataMonsterFlagType::AP_R_IDX))
-        wr_s16b(m_ptr->ap_r_idx);
+    if (any_bits(flags, SaveDataMonsterFlagType::AP_R_IDX)) {
+        wr_s16b(enum2i(m_ptr->ap_r_idx));
+    }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::SUB_ALIGN))
+    if (any_bits(flags, SaveDataMonsterFlagType::SUB_ALIGN)) {
         wr_byte(m_ptr->sub_align);
+    }
 
-    if (any_bits(flags, SaveDataMonsterFlagType::CSLEEP))
+    if (any_bits(flags, SaveDataMonsterFlagType::CSLEEP)) {
         wr_s16b(m_ptr->mtimed[MTIMED_CSLEEP]);
+    }
 
     wr_byte((byte)m_ptr->mspeed);
     wr_s16b(m_ptr->energy_need);
@@ -152,9 +178,9 @@ void wr_monster(monster_type *m_ptr)
  * @brief モンスターの思い出を書き込む / Write a "lore" record
  * @param r_idx モンスター種族ID
  */
-void wr_lore(MONRACE_IDX r_idx)
+void wr_lore(MonsterRaceId r_idx)
 {
-    monster_race *r_ptr = &r_info[r_idx];
+    auto *r_ptr = &monraces_info[r_idx];
     wr_s16b((int16_t)r_ptr->r_sights);
     wr_s16b((int16_t)r_ptr->r_deaths);
     wr_s16b((int16_t)r_ptr->r_pkills);
@@ -181,10 +207,14 @@ void wr_lore(MONRACE_IDX r_idx)
     wr_u32b(r_ptr->r_flags1);
     wr_u32b(r_ptr->r_flags2);
     wr_u32b(r_ptr->r_flags3);
-    wr_u32b(r_ptr->r_flagsr);
+    wr_FlagGroup(r_ptr->r_resistance_flags, wr_byte);
     wr_FlagGroup(r_ptr->r_ability_flags, wr_byte);
     wr_FlagGroup(r_ptr->r_aura_flags, wr_byte);
     wr_FlagGroup(r_ptr->r_behavior_flags, wr_byte);
+    wr_FlagGroup(r_ptr->r_kind_flags, wr_byte);
+    wr_FlagGroup(r_ptr->r_drop_flags, wr_byte);
+    wr_FlagGroup(r_ptr->r_feature_flags, wr_byte);
+    wr_FlagGroup(r_ptr->r_special_flags, wr_byte);
 
     wr_byte((byte)r_ptr->max_num);
     wr_s16b(r_ptr->floor_id);