From: Slimebreath6078 Date: Sun, 3 Apr 2022 14:16:51 +0000 (+0900) Subject: [Refactor] セーブデータのバージョンを19に X-Git-Tag: 3.0.0Alpha58^2~3^2 X-Git-Url: http://git.osdn.net/view?p=hengbandforosx%2Fhengbandosx.git;a=commitdiff_plain;h=cfe28c7c068876244a93d97b6d90da0a75d8cb9d [Refactor] セーブデータのバージョンを19に --- diff --git a/src/load/lore-loader.cpp b/src/load/lore-loader.cpp index 935def896..10c97a1c3 100644 --- a/src/load/lore-loader.cpp +++ b/src/load/lore-loader.cpp @@ -14,20 +14,28 @@ #include "util/bit-flags-calculator.h" #include "util/enum-converter.h" +static void migrate_old_feature_flags(monster_race *r_ptr, BIT_FLAGS old_flags) +{ + if (any_bits(old_flags, enum2i(SavedataLoreOlderThan19FlagType::RF2_PASS_WALL))) { + r_ptr->r_feature_flags.set(MonsterFeatureType::PASS_WALL); + } + if (any_bits(old_flags, enum2i(SavedataLoreOlderThan19FlagType::RF2_KILL_WALL))) { + r_ptr->r_feature_flags.set(MonsterFeatureType::KILL_WALL); + } +} + static void migrate_old_aura_flags(monster_race *r_ptr) { - if (loading_savefile_version_is_older_than(10)) { - if (any_bits(r_ptr->r_flags2, SavedataLoreOlderThan10FlagType::AURA_FIRE_OLD)) { - r_ptr->r_aura_flags.set(MonsterAuraType::FIRE); - } + if (any_bits(r_ptr->r_flags2, SavedataLoreOlderThan10FlagType::AURA_FIRE_OLD)) { + r_ptr->r_aura_flags.set(MonsterAuraType::FIRE); + } - if (any_bits(r_ptr->r_flags3, SavedataLoreOlderThan10FlagType::AURA_COLD_OLD)) { - r_ptr->r_aura_flags.set(MonsterAuraType::COLD); - } + if (any_bits(r_ptr->r_flags3, SavedataLoreOlderThan10FlagType::AURA_COLD_OLD)) { + r_ptr->r_aura_flags.set(MonsterAuraType::COLD); + } - if (any_bits(r_ptr->r_flags2, SavedataLoreOlderThan10FlagType::AURA_ELEC_OLD)) { - r_ptr->r_aura_flags.set(MonsterAuraType::ELEC); - } + if (any_bits(r_ptr->r_flags2, SavedataLoreOlderThan10FlagType::AURA_ELEC_OLD)) { + r_ptr->r_aura_flags.set(MonsterAuraType::ELEC); } } @@ -248,6 +256,15 @@ static void rd_r_behavior_flags(monster_race *r_ptr) rd_FlagGroup(r_ptr->r_behavior_flags, rd_byte); } +static void rd_r_feature_flags(monster_race *r_ptr) +{ + if (loading_savefile_version_is_older_than(19)) { + migrate_old_feature_flags(r_ptr, r_ptr->r_flags2); + return; + } + rd_FlagGroup(r_ptr->r_feature_flags, rd_byte); +} + /*! * @brief モンスターの思い出を読み込む / Read the monster lore * @param r_ptr 読み込み先モンスター種族情報へのポインタ @@ -296,6 +313,7 @@ static void rd_lore(monster_race *r_ptr, const MonsterRaceId r_idx) rd_r_behavior_flags(r_ptr); rd_r_kind_flags(r_ptr); rd_r_drop_flags(r_ptr); + rd_r_feature_flags(r_ptr); r_ptr->max_num = rd_byte(); r_ptr->floor_id = rd_s16b(); @@ -315,6 +333,7 @@ static void rd_lore(monster_race *r_ptr, const MonsterRaceId r_idx) r_ptr->r_behavior_flags &= r_ptr->behavior_flags; r_ptr->r_drop_flags &= r_ptr->drop_flags; r_ptr->r_kind_flags &= r_ptr->kind_flags; + r_ptr->r_feature_flags &= r_ptr->feature_flags; } void load_lore(void) diff --git a/src/load/savedata-old-flag-types.h b/src/load/savedata-old-flag-types.h index 747b97775..76951b843 100644 --- a/src/load/savedata-old-flag-types.h +++ b/src/load/savedata-old-flag-types.h @@ -66,6 +66,11 @@ enum class SavedataLoreOlderThan18FlagType { RF1_DROP_GREAT = 0x20000000, /*!< モンスター特性: 必ず高級品をドロップする / Drop great items */ }; +enum class SavedataLoreOlderThan19FlagType { + RF2_PASS_WALL = 0x00040000, /*!< モンスター特性: 壁を抜けることができる / Monster can pass walls */ + RF2_KILL_WALL = 0x00080000, /*!< モンスター特性: 壁を破壊して進む / Monster can destroy walls */ +}; + enum class OldQuestId15 { CITY_SEA = 17, }; diff --git a/src/save/monster-writer.cpp b/src/save/monster-writer.cpp index d34809564..70cae2c86 100644 --- a/src/save/monster-writer.cpp +++ b/src/save/monster-writer.cpp @@ -214,6 +214,7 @@ void wr_lore(MonsterRaceId r_idx) 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_byte((byte)r_ptr->max_num); wr_s16b(r_ptr->floor_id); diff --git a/src/system/angband-version.h b/src/system/angband-version.h index 0ad76591e..a219d3397 100644 --- a/src/system/angband-version.h +++ b/src/system/angband-version.h @@ -28,7 +28,7 @@ constexpr std::string_view ROOT_VARIANT_NAME("Hengband"); /*! * @brief セーブファイルのバージョン(3.0.0から導入) */ -constexpr uint32_t SAVEFILE_VERSION = 18; +constexpr uint32_t SAVEFILE_VERSION = 19; /*! * @brief バージョンが開発版が安定版かを返す(廃止予定)