OSDN Git Service

[Refactor] #1951 セーブデータをver12にする
authorSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Sat, 12 Feb 2022 18:27:23 +0000 (03:27 +0900)
committerSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Tue, 15 Feb 2022 14:29:03 +0000 (23:29 +0900)
src/load/lore-loader.cpp
src/save/monster-writer.cpp

index 3a2ce50..561e9d1 100644 (file)
@@ -7,6 +7,7 @@
 #include "monster-race/monster-race.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 "system/angband.h"
 #include "system/monster-race-definition.h"
@@ -58,6 +59,57 @@ static void rd_r_aura_flags(monster_race *r_ptr)
     rd_FlagGroup(r_ptr->r_aura_flags, rd_byte);
 }
 
+static void rd_r_kind_flags(monster_race *r_ptr)
+{
+    if (loading_savefile_version_is_older_than(12)) {
+        struct flag_list_ver12 {
+            BIT_FLAGS check_flag;
+            MonsterKindType flag;
+        };
+
+        const std::vector<flag_list_ver12> flag1 = {
+            { RF1_UNIQUE, MonsterKindType::UNIQUE },
+        };
+
+        const std::vector<flag_list_ver12> flag2 = {
+            { static_cast<BIT_FLAGS>(RF2_HUMAN), MonsterKindType::HUMAN },
+            { static_cast<BIT_FLAGS>(RF2_QUANTUM), MonsterKindType::QUANTUM },
+        };
+
+        const std::vector<flag_list_ver12> flag3 = {
+            { RF3_ORC, MonsterKindType::ORC },
+            { RF3_TROLL, MonsterKindType::TROLL },
+            { RF3_GIANT, MonsterKindType::GIANT },
+            { RF3_DRAGON, MonsterKindType::DRAGON },
+            { RF3_DEMON, MonsterKindType::DEMON },
+            { RF3_AMBERITE, MonsterKindType::AMBERITE },
+            { RF3_ANGEL, MonsterKindType::ANGEL },
+            { RF3_DRAGON, MonsterKindType::DRAGON },
+            { RF3_EVIL, MonsterKindType::EVIL },
+            { RF3_GOOD, MonsterKindType::GOOD },
+            { RF3_ANIMAL, MonsterKindType::ANIMAL },
+            { RF3_UNDEAD, MonsterKindType::UNDEAD },
+
+        };
+
+        for (const auto &f : flag1)
+            if (any_bits(r_ptr->r_flags1, f.check_flag))
+                r_ptr->r_kind_flags.set(f.flag);
+
+        for (const auto &f : flag2)
+            if (any_bits(r_ptr->r_flags2, f.check_flag))
+                r_ptr->r_kind_flags.set(f.flag);
+
+        for (const auto &f : flag3)
+            if (any_bits(r_ptr->r_flags3, f.check_flag))
+                r_ptr->r_kind_flags.set(f.flag);
+
+        return;
+    }
+
+    rd_FlagGroup(r_ptr->r_kind_flags, rd_byte);
+}
+
 static void rd_r_behavior_flags(monster_race *r_ptr)
 {
     if (loading_savefile_version_is_older_than(11)) {
@@ -144,6 +196,7 @@ static void rd_lore(monster_race *r_ptr, const MONRACE_IDX r_idx)
     rd_r_ability_flags(r_ptr, r_idx);
     rd_r_aura_flags(r_ptr);
     rd_r_behavior_flags(r_ptr);
+    rd_r_kind_flags(r_ptr);
     r_ptr->max_num = rd_byte();
     r_ptr->floor_id = rd_s16b();
 
@@ -161,6 +214,7 @@ static void rd_lore(monster_race *r_ptr, const MONRACE_IDX r_idx)
     r_ptr->r_ability_flags &= r_ptr->ability_flags;
     r_ptr->r_aura_flags &= r_ptr->aura_flags;
     r_ptr->r_behavior_flags &= r_ptr->r_behavior_flags;
+    r_ptr->r_kind_flags &= r_ptr->r_kind_flags;
 }
 
 void load_lore(void)
index 7188737..f1e4734 100644 (file)
@@ -185,6 +185,7 @@ void wr_lore(MONRACE_IDX r_idx)
     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_byte((byte)r_ptr->max_num);
     wr_s16b(r_ptr->floor_id);