#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"
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)) {
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();
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)