#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);
}
}
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 読み込み先モンスター種族情報へのポインタ
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();
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)