-#include "save/monster-writer.h"
+#include "save/monster-writer.h"
#include "load/old/monster-flag-types-savefile50.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-race-definition.h"
-#include "system/monster-type-definition.h"
+#include "system/monster-entity.h"
+#include "system/monster-race-info.h"
#include "util/bit-flags-calculator.h"
-#include "util/quarks.h"
+#include "util/enum-converter.h"
-static void write_monster_flags(monster_type *m_ptr, BIT_FLAGS *flags)
+static void write_monster_flags(MonsterEntity *m_ptr, BIT_FLAGS *flags)
{
- if (!is_original_ap(m_ptr))
+ if (!m_ptr->is_original_ap()) {
set_bits(*flags, SaveDataMonsterFlagType::AP_R_IDX);
+ }
- if (m_ptr->sub_align)
+ if (m_ptr->sub_align) {
set_bits(*flags, SaveDataMonsterFlagType::SUB_ALIGN);
+ }
- if (monster_csleep_remaining(m_ptr))
+ if (m_ptr->is_asleep()) {
set_bits(*flags, SaveDataMonsterFlagType::CSLEEP);
+ }
- if (monster_fast_remaining(m_ptr))
+ if (m_ptr->is_accelerated()) {
set_bits(*flags, SaveDataMonsterFlagType::FAST);
+ }
- if (monster_slow_remaining(m_ptr))
+ if (m_ptr->is_decelerated()) {
set_bits(*flags, SaveDataMonsterFlagType::SLOW);
+ }
- if (monster_stunned_remaining(m_ptr))
+ if (m_ptr->is_stunned()) {
set_bits(*flags, SaveDataMonsterFlagType::STUNNED);
+ }
- if (monster_confused_remaining(m_ptr))
+ if (m_ptr->is_confused()) {
set_bits(*flags, SaveDataMonsterFlagType::CONFUSED);
+ }
- if (monster_fear_remaining(m_ptr))
+ if (m_ptr->is_fearful()) {
set_bits(*flags, SaveDataMonsterFlagType::MONFEAR);
+ }
- if (m_ptr->target_y)
+ if (m_ptr->target_y) {
set_bits(*flags, SaveDataMonsterFlagType::TARGET_Y);
+ }
- if (m_ptr->target_x)
+ if (m_ptr->target_x) {
set_bits(*flags, SaveDataMonsterFlagType::TARGET_X);
+ }
- if (monster_invulner_remaining(m_ptr))
+ if (m_ptr->is_invulnerable()) {
set_bits(*flags, SaveDataMonsterFlagType::INVULNER);
+ }
- if (m_ptr->smart.any())
+ if (m_ptr->smart.any()) {
set_bits(*flags, SaveDataMonsterFlagType::SMART);
+ }
- if (m_ptr->exp)
+ if (m_ptr->exp) {
set_bits(*flags, SaveDataMonsterFlagType::EXP);
+ }
- if (m_ptr->mflag2.any())
+ if (m_ptr->mflag2.any()) {
set_bits(*flags, SaveDataMonsterFlagType::MFLAG2);
+ }
- if (m_ptr->nickname)
+ if (m_ptr->is_named()) {
set_bits(*flags, SaveDataMonsterFlagType::NICKNAME);
+ }
- if (m_ptr->parent_m_idx)
+ if (m_ptr->parent_m_idx) {
set_bits(*flags, SaveDataMonsterFlagType::PARENT);
+ }
wr_u32b(*flags);
}
-static void write_monster_info(monster_type *m_ptr, const BIT_FLAGS flags)
+static void write_monster_info(MonsterEntity *m_ptr, const BIT_FLAGS flags)
{
byte tmp8u;
if (any_bits(flags, SaveDataMonsterFlagType::FAST)) {
wr_byte(tmp8u);
}
- if (any_bits(flags, SaveDataMonsterFlagType::TARGET_Y))
+ if (any_bits(flags, SaveDataMonsterFlagType::TARGET_Y)) {
wr_s16b((int16_t)m_ptr->target_y);
+ }
- if (any_bits(flags, SaveDataMonsterFlagType::TARGET_X))
+ if (any_bits(flags, SaveDataMonsterFlagType::TARGET_X)) {
wr_s16b((int16_t)m_ptr->target_x);
+ }
if (any_bits(flags, SaveDataMonsterFlagType::INVULNER)) {
tmp8u = (byte)m_ptr->mtimed[MTIMED_INVULNER];
wr_byte(tmp8u);
}
- if (any_bits(flags, SaveDataMonsterFlagType::SMART))
+ if (any_bits(flags, SaveDataMonsterFlagType::SMART)) {
wr_FlagGroup(m_ptr->smart, wr_byte);
+ }
- if (any_bits(flags, SaveDataMonsterFlagType::EXP))
+ if (any_bits(flags, SaveDataMonsterFlagType::EXP)) {
wr_u32b(m_ptr->exp);
+ }
- if (any_bits(flags, SaveDataMonsterFlagType::MFLAG2))
+ if (any_bits(flags, SaveDataMonsterFlagType::MFLAG2)) {
wr_FlagGroup(m_ptr->mflag2, wr_byte);
+ }
- if (any_bits(flags, SaveDataMonsterFlagType::NICKNAME))
- wr_string(quark_str(m_ptr->nickname));
+ if (any_bits(flags, SaveDataMonsterFlagType::NICKNAME)) {
+ wr_string(m_ptr->nickname);
+ }
- if (any_bits(flags, SaveDataMonsterFlagType::PARENT))
+ if (any_bits(flags, SaveDataMonsterFlagType::PARENT)) {
wr_s16b(m_ptr->parent_m_idx);
+ }
}
/*!
* @brief モンスター情報を書き込む / Write a "monster" record
* @param m_ptr モンスター情報保存元ポインタ
*/
-void wr_monster(monster_type *m_ptr)
+void wr_monster(MonsterEntity *m_ptr)
{
BIT_FLAGS flags = 0x00000000;
write_monster_flags(m_ptr, &flags);
- wr_s16b(m_ptr->r_idx);
+ wr_s16b(enum2i(m_ptr->r_idx));
wr_byte((byte)m_ptr->fy);
wr_byte((byte)m_ptr->fx);
wr_s16b((int16_t)m_ptr->hp);
wr_s16b((int16_t)m_ptr->max_maxhp);
wr_u32b(m_ptr->dealt_damage);
- if (any_bits(flags, SaveDataMonsterFlagType::AP_R_IDX))
- wr_s16b(m_ptr->ap_r_idx);
+ if (any_bits(flags, SaveDataMonsterFlagType::AP_R_IDX)) {
+ wr_s16b(enum2i(m_ptr->ap_r_idx));
+ }
- if (any_bits(flags, SaveDataMonsterFlagType::SUB_ALIGN))
+ if (any_bits(flags, SaveDataMonsterFlagType::SUB_ALIGN)) {
wr_byte(m_ptr->sub_align);
+ }
- if (any_bits(flags, SaveDataMonsterFlagType::CSLEEP))
+ if (any_bits(flags, SaveDataMonsterFlagType::CSLEEP)) {
wr_s16b(m_ptr->mtimed[MTIMED_CSLEEP]);
+ }
wr_byte((byte)m_ptr->mspeed);
wr_s16b(m_ptr->energy_need);
* @brief モンスターの思い出を書き込む / Write a "lore" record
* @param r_idx モンスター種族ID
*/
-void wr_lore(MONRACE_IDX r_idx)
+void wr_lore(MonsterRaceId r_idx)
{
- monster_race *r_ptr = &r_info[r_idx];
+ auto *r_ptr = &monraces_info[r_idx];
wr_s16b((int16_t)r_ptr->r_sights);
wr_s16b((int16_t)r_ptr->r_deaths);
wr_s16b((int16_t)r_ptr->r_pkills);
wr_u32b(r_ptr->r_flags1);
wr_u32b(r_ptr->r_flags2);
wr_u32b(r_ptr->r_flags3);
- wr_u32b(r_ptr->r_flagsr);
+ wr_FlagGroup(r_ptr->r_resistance_flags, wr_byte);
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_FlagGroup(r_ptr->r_drop_flags, wr_byte);
+ wr_FlagGroup(r_ptr->r_feature_flags, wr_byte);
+ wr_FlagGroup(r_ptr->r_special_flags, wr_byte);
wr_byte((byte)r_ptr->max_num);
wr_s16b(r_ptr->floor_id);