OSDN Git Service

[Refactor] #40532 Separated monster-writer.c/h from save.c
authorHourier <hourier@users.sourceforge.jp>
Sat, 18 Jul 2020 06:19:38 +0000 (15:19 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sat, 18 Jul 2020 06:19:42 +0000 (15:19 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/save/monster-writer.c [new file with mode: 0644]
src/save/monster-writer.h [new file with mode: 0644]
src/save/save.c

index d55a7f7..232168a 100644 (file)
     <ClCompile Include="..\..\src\load\store-loader.c" />\r
     <ClCompile Include="..\..\src\load\world-loader.c" />\r
     <ClCompile Include="..\..\src\save\item-writer.c" />\r
+    <ClCompile Include="..\..\src\save\monster-writer.c" />\r
     <ClCompile Include="..\..\src\save\save-util.c" />\r
     <ClCompile Include="..\..\src\specific-object\death-crimson.c" />\r
     <ClCompile Include="..\..\src\spell-kind\blood-curse.c" />\r
     <ClInclude Include="..\..\src\load\store-loader.h" />\r
     <ClInclude Include="..\..\src\load\world-loader.h" />\r
     <ClInclude Include="..\..\src\save\item-writer.h" />\r
+    <ClInclude Include="..\..\src\save\monster-writer.h" />\r
     <ClInclude Include="..\..\src\save\save-util.h" />\r
     <ClInclude Include="..\..\src\specific-object\death-crimson.h" />\r
     <ClInclude Include="..\..\src\spell-kind\blood-curse.h" />\r
index 179921a..9c284ee 100644 (file)
     <ClCompile Include="..\..\src\save\item-writer.c">
       <Filter>save</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\save\monster-writer.c">
+      <Filter>save</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\combat\shoot.h">
     <ClInclude Include="..\..\src\save\item-writer.h">
       <Filter>save</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\save\monster-writer.h">
+      <Filter>save</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index db251ba..ebeb9fd 100644 (file)
@@ -587,6 +587,7 @@ hengband_SOURCES = \
        room/pit-nest-kinds-table.c room/pit-nest-kinds-table.h \
        \
        save/item-writer.c save/item-writer.h \
+       save/monster-writer.c save/monster-writer.h \
        save/save.c save/save.h \
        save/save-util.c save/save-util.h \
        \
diff --git a/src/save/monster-writer.c b/src/save/monster-writer.c
new file mode 100644 (file)
index 0000000..f6f71f3
--- /dev/null
@@ -0,0 +1,185 @@
+#include "save/monster-writer.h"
+#include "load/savedata-flag-types.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-type-definition.h"
+#include "util/quarks.h"
+
+/*!
+ * @brief モンスター情報を書き込む / Write a "monster" record
+ * @param m_ptr モンスター情報保存元ポインタ
+ * @return なし
+ */
+void wr_monster(monster_type *m_ptr)
+{
+    BIT_FLAGS flags = 0x00000000;
+    if (!is_original_ap(m_ptr))
+        flags |= SAVE_MON_AP_R_IDX;
+
+    if (m_ptr->sub_align)
+        flags |= SAVE_MON_SUB_ALIGN;
+
+    if (monster_csleep_remaining(m_ptr))
+        flags |= SAVE_MON_CSLEEP;
+
+    if (monster_fast_remaining(m_ptr))
+        flags |= SAVE_MON_FAST;
+
+    if (monster_slow_remaining(m_ptr))
+        flags |= SAVE_MON_SLOW;
+
+    if (monster_stunned_remaining(m_ptr))
+        flags |= SAVE_MON_STUNNED;
+
+    if (monster_confused_remaining(m_ptr))
+        flags |= SAVE_MON_CONFUSED;
+
+    if (monster_fear_remaining(m_ptr))
+        flags |= SAVE_MON_MONFEAR;
+
+    if (m_ptr->target_y)
+        flags |= SAVE_MON_TARGET_Y;
+
+    if (m_ptr->target_x)
+        flags |= SAVE_MON_TARGET_X;
+
+    if (monster_invulner_remaining(m_ptr))
+        flags |= SAVE_MON_INVULNER;
+
+    if (m_ptr->smart)
+        flags |= SAVE_MON_SMART;
+
+    if (m_ptr->exp)
+        flags |= SAVE_MON_EXP;
+
+    if (m_ptr->mflag2)
+        flags |= SAVE_MON_MFLAG2;
+
+    if (m_ptr->nickname)
+        flags |= SAVE_MON_NICKNAME;
+
+    if (m_ptr->parent_m_idx)
+        flags |= SAVE_MON_PARENT;
+
+    /*** Monster save flags ***/
+    wr_u32b(flags);
+
+    /*** Write only un-obvious elements ***/
+    wr_s16b(m_ptr->r_idx);
+    wr_byte((byte)m_ptr->fy);
+    wr_byte((byte)m_ptr->fx);
+    wr_s16b((s16b)m_ptr->hp);
+    wr_s16b((s16b)m_ptr->maxhp);
+    wr_s16b((s16b)m_ptr->max_maxhp);
+    wr_u32b(m_ptr->dealt_damage);
+
+    /* Monster race index of its appearance */
+    if (flags & SAVE_MON_AP_R_IDX)
+        wr_s16b(m_ptr->ap_r_idx);
+
+    if (flags & SAVE_MON_SUB_ALIGN)
+        wr_byte(m_ptr->sub_align);
+    if (flags & SAVE_MON_CSLEEP)
+        wr_s16b(m_ptr->mtimed[MTIMED_CSLEEP]);
+
+    wr_byte((byte)m_ptr->mspeed);
+    wr_s16b(m_ptr->energy_need);
+
+    byte tmp8u;
+    if (flags & SAVE_MON_FAST) {
+        tmp8u = (byte)m_ptr->mtimed[MTIMED_FAST];
+        wr_byte(tmp8u);
+    }
+
+    if (flags & SAVE_MON_SLOW) {
+        tmp8u = (byte)m_ptr->mtimed[MTIMED_SLOW];
+        wr_byte(tmp8u);
+    }
+
+    if (flags & SAVE_MON_STUNNED) {
+        tmp8u = (byte)m_ptr->mtimed[MTIMED_STUNNED];
+        wr_byte(tmp8u);
+    }
+
+    if (flags & SAVE_MON_CONFUSED) {
+        tmp8u = (byte)m_ptr->mtimed[MTIMED_CONFUSED];
+        wr_byte(tmp8u);
+    }
+
+    if (flags & SAVE_MON_MONFEAR) {
+        tmp8u = (byte)m_ptr->mtimed[MTIMED_MONFEAR];
+        wr_byte(tmp8u);
+    }
+
+    if (flags & SAVE_MON_TARGET_Y)
+        wr_s16b((s16b)m_ptr->target_y);
+
+    if (flags & SAVE_MON_TARGET_X)
+        wr_s16b((s16b)m_ptr->target_x);
+
+    if (flags & SAVE_MON_INVULNER) {
+        tmp8u = (byte)m_ptr->mtimed[MTIMED_INVULNER];
+        wr_byte(tmp8u);
+    }
+
+    if (flags & SAVE_MON_SMART)
+        wr_u32b(m_ptr->smart);
+
+    if (flags & SAVE_MON_EXP)
+        wr_u32b(m_ptr->exp);
+
+    if (flags & SAVE_MON_MFLAG2)
+        wr_byte(m_ptr->mflag2);
+
+    if (flags & SAVE_MON_NICKNAME)
+        wr_string(quark_str(m_ptr->nickname));
+
+    if (flags & SAVE_MON_PARENT)
+        wr_s16b(m_ptr->parent_m_idx);
+}
+
+/*!
+ * @brief モンスターの思い出を書き込む / Write a "lore" record
+ * @param r_idx モンスター種族ID
+ * @return なし
+ */
+void wr_lore(MONRACE_IDX r_idx)
+{
+    monster_race *r_ptr = &r_info[r_idx];
+    wr_s16b((s16b)r_ptr->r_sights);
+    wr_s16b((s16b)r_ptr->r_deaths);
+    wr_s16b((s16b)r_ptr->r_pkills);
+    wr_s16b((s16b)r_ptr->r_akills);
+    wr_s16b((s16b)r_ptr->r_tkills);
+
+    wr_byte(r_ptr->r_wake);
+    wr_byte(r_ptr->r_ignore);
+
+    wr_byte(r_ptr->r_xtra1);
+    wr_byte(r_ptr->r_xtra2);
+
+    wr_byte((byte)r_ptr->r_drop_gold);
+    wr_byte((byte)r_ptr->r_drop_item);
+
+    wr_byte(0); /* unused now */
+    wr_byte(r_ptr->r_cast_spell);
+
+    wr_byte(r_ptr->r_blows[0]);
+    wr_byte(r_ptr->r_blows[1]);
+    wr_byte(r_ptr->r_blows[2]);
+    wr_byte(r_ptr->r_blows[3]);
+
+    wr_u32b(r_ptr->r_flags1);
+    wr_u32b(r_ptr->r_flags2);
+    wr_u32b(r_ptr->r_flags3);
+    wr_u32b(r_ptr->r_flags4);
+    wr_u32b(r_ptr->r_flags5);
+    wr_u32b(r_ptr->r_flags6);
+    wr_u32b(r_ptr->r_flagsr);
+
+    wr_byte((byte)r_ptr->max_num);
+    wr_s16b(r_ptr->floor_id);
+    wr_byte(0);
+}
diff --git a/src/save/monster-writer.h b/src/save/monster-writer.h
new file mode 100644 (file)
index 0000000..05303f1
--- /dev/null
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "system/angband.h"
+
+typedef struct monster_type monster_type;
+void wr_monster(monster_type *m_ptr);
+void wr_lore(MONRACE_IDX r_idx);
index c42f635..05e05c4 100644 (file)
@@ -41,6 +41,7 @@
 #include "monster/monster-status.h"
 #include "object/object-kind.h"
 #include "save/item-writer.h"
+#include "save/monster-writer.h"
 #include "save/save-util.h"
 #include "store/store-util.h"
 #include "store/store.h"
 #include "world/world.h"
 
 /*!
- * @brief モンスター情報を書き込む / Write a "monster" record
- * @param m_ptr モンスター情報保存元ポインタ
- * @return なし
- */
-static void wr_monster(monster_type *m_ptr)
-{
-    BIT_FLAGS flags = 0x00000000;
-    if (!is_original_ap(m_ptr))
-        flags |= SAVE_MON_AP_R_IDX;
-    if (m_ptr->sub_align)
-        flags |= SAVE_MON_SUB_ALIGN;
-    if (monster_csleep_remaining(m_ptr))
-        flags |= SAVE_MON_CSLEEP;
-    if (monster_fast_remaining(m_ptr))
-        flags |= SAVE_MON_FAST;
-    if (monster_slow_remaining(m_ptr))
-        flags |= SAVE_MON_SLOW;
-    if (monster_stunned_remaining(m_ptr))
-        flags |= SAVE_MON_STUNNED;
-    if (monster_confused_remaining(m_ptr))
-        flags |= SAVE_MON_CONFUSED;
-    if (monster_fear_remaining(m_ptr))
-        flags |= SAVE_MON_MONFEAR;
-    if (m_ptr->target_y)
-        flags |= SAVE_MON_TARGET_Y;
-    if (m_ptr->target_x)
-        flags |= SAVE_MON_TARGET_X;
-    if (monster_invulner_remaining(m_ptr))
-        flags |= SAVE_MON_INVULNER;
-    if (m_ptr->smart)
-        flags |= SAVE_MON_SMART;
-    if (m_ptr->exp)
-        flags |= SAVE_MON_EXP;
-    if (m_ptr->mflag2)
-        flags |= SAVE_MON_MFLAG2;
-    if (m_ptr->nickname)
-        flags |= SAVE_MON_NICKNAME;
-    if (m_ptr->parent_m_idx)
-        flags |= SAVE_MON_PARENT;
-
-    /*** Monster save flags ***/
-    wr_u32b(flags);
-
-    /*** Write only un-obvious elements ***/
-    wr_s16b(m_ptr->r_idx);
-    wr_byte((byte)m_ptr->fy);
-    wr_byte((byte)m_ptr->fx);
-    wr_s16b((s16b)m_ptr->hp);
-    wr_s16b((s16b)m_ptr->maxhp);
-    wr_s16b((s16b)m_ptr->max_maxhp);
-    wr_u32b(m_ptr->dealt_damage);
-
-    /* Monster race index of its appearance */
-    if (flags & SAVE_MON_AP_R_IDX)
-        wr_s16b(m_ptr->ap_r_idx);
-
-    if (flags & SAVE_MON_SUB_ALIGN)
-        wr_byte(m_ptr->sub_align);
-    if (flags & SAVE_MON_CSLEEP)
-        wr_s16b(m_ptr->mtimed[MTIMED_CSLEEP]);
-
-    wr_byte((byte)m_ptr->mspeed);
-    wr_s16b(m_ptr->energy_need);
-
-    byte tmp8u;
-    if (flags & SAVE_MON_FAST) {
-        tmp8u = (byte)m_ptr->mtimed[MTIMED_FAST];
-        wr_byte(tmp8u);
-    }
-    if (flags & SAVE_MON_SLOW) {
-        tmp8u = (byte)m_ptr->mtimed[MTIMED_SLOW];
-        wr_byte(tmp8u);
-    }
-    if (flags & SAVE_MON_STUNNED) {
-        tmp8u = (byte)m_ptr->mtimed[MTIMED_STUNNED];
-        wr_byte(tmp8u);
-    }
-    if (flags & SAVE_MON_CONFUSED) {
-        tmp8u = (byte)m_ptr->mtimed[MTIMED_CONFUSED];
-        wr_byte(tmp8u);
-    }
-    if (flags & SAVE_MON_MONFEAR) {
-        tmp8u = (byte)m_ptr->mtimed[MTIMED_MONFEAR];
-        wr_byte(tmp8u);
-    }
-    if (flags & SAVE_MON_TARGET_Y)
-        wr_s16b((s16b)m_ptr->target_y);
-    if (flags & SAVE_MON_TARGET_X)
-        wr_s16b((s16b)m_ptr->target_x);
-    if (flags & SAVE_MON_INVULNER) {
-        tmp8u = (byte)m_ptr->mtimed[MTIMED_INVULNER];
-        wr_byte(tmp8u);
-    }
-    if (flags & SAVE_MON_SMART)
-        wr_u32b(m_ptr->smart);
-    if (flags & SAVE_MON_EXP)
-        wr_u32b(m_ptr->exp);
-    if (flags & SAVE_MON_MFLAG2)
-        wr_byte(m_ptr->mflag2);
-    if (flags & SAVE_MON_NICKNAME)
-        wr_string(quark_str(m_ptr->nickname));
-    if (flags & SAVE_MON_PARENT)
-        wr_s16b(m_ptr->parent_m_idx);
-}
-
-/*!
- * @brief モンスターの思い出を書き込む / Write a "lore" record
- * @param r_idx モンスター種族ID
- * @return なし
- */
-static void wr_lore(MONRACE_IDX r_idx)
-{
-    /* Count sights/deaths/kills */
-    monster_race *r_ptr = &r_info[r_idx];
-    wr_s16b((s16b)r_ptr->r_sights);
-    wr_s16b((s16b)r_ptr->r_deaths);
-    wr_s16b((s16b)r_ptr->r_pkills);
-    wr_s16b((s16b)r_ptr->r_akills);
-    wr_s16b((s16b)r_ptr->r_tkills);
-
-    /* Count wakes and ignores */
-    wr_byte(r_ptr->r_wake);
-    wr_byte(r_ptr->r_ignore);
-
-    /* Extra stuff */
-    wr_byte(r_ptr->r_xtra1);
-    wr_byte(r_ptr->r_xtra2);
-
-    /* Count drops */
-    wr_byte((byte)r_ptr->r_drop_gold);
-    wr_byte((byte)r_ptr->r_drop_item);
-
-    /* Count spells */
-    wr_byte(0); /* unused now */
-    wr_byte(r_ptr->r_cast_spell);
-
-    /* Count blows of each type */
-    wr_byte(r_ptr->r_blows[0]);
-    wr_byte(r_ptr->r_blows[1]);
-    wr_byte(r_ptr->r_blows[2]);
-    wr_byte(r_ptr->r_blows[3]);
-
-    /* Memorize flags */
-    wr_u32b(r_ptr->r_flags1);
-    wr_u32b(r_ptr->r_flags2);
-    wr_u32b(r_ptr->r_flags3);
-    wr_u32b(r_ptr->r_flags4);
-    wr_u32b(r_ptr->r_flags5);
-    wr_u32b(r_ptr->r_flags6);
-    wr_u32b(r_ptr->r_flagsr);
-
-    /* Monster limit per level */
-    wr_byte((byte)r_ptr->max_num);
-
-    /* Location in saved floor */
-    wr_s16b(r_ptr->floor_id);
-
-    wr_byte(0);
-}
-
-/*!
  * @brief その他のゲーム情報を書き込む(実質はアイテムの鑑定情報のみ) / Write an "xtra" record
  * @param k_idx ベースアイテムのID
  * @return なし