1 #include "load/monster-loader.h"
2 #include "load/angband-version-comparer.h"
3 #include "load/load-v1-5-0.h"
4 #include "load/load-util.h"
5 #include "load/savedata-flag-types.h"
6 #include "util/quarks.h"
9 * @brief モンスターを読み込む(現版) / Read a monster (New method)
10 * @param player_ptr プレーヤーへの参照ポインタ
11 * @param m_ptr モンスター保存先ポインタ
14 void rd_monster(player_type *player_ptr, monster_type *m_ptr)
16 if (h_older_than(1, 5, 0, 0)) {
17 rd_monster_old(player_ptr, m_ptr);
23 rd_s16b(&m_ptr->r_idx);
26 m_ptr->fy = (POSITION)tmp8u;
28 m_ptr->fx = (POSITION)tmp8u;
32 m_ptr->hp = (HIT_POINT)tmp16s;
34 m_ptr->maxhp = (HIT_POINT)tmp16s;
36 m_ptr->max_maxhp = (HIT_POINT)tmp16s;
38 if (h_older_than(2, 1, 2, 1)) {
39 m_ptr->dealt_damage = 0;
41 rd_s32b(&m_ptr->dealt_damage);
44 if (flags & SAVE_MON_AP_R_IDX)
45 rd_s16b(&m_ptr->ap_r_idx);
47 m_ptr->ap_r_idx = m_ptr->r_idx;
49 if (flags & SAVE_MON_SUB_ALIGN)
50 rd_byte(&m_ptr->sub_align);
54 if (flags & SAVE_MON_CSLEEP)
55 rd_s16b(&m_ptr->mtimed[MTIMED_CSLEEP]);
57 m_ptr->mtimed[MTIMED_CSLEEP] = 0;
60 m_ptr->mspeed = tmp8u;
62 rd_s16b(&m_ptr->energy_need);
64 if (flags & SAVE_MON_FAST) {
66 m_ptr->mtimed[MTIMED_FAST] = (s16b)tmp8u;
68 m_ptr->mtimed[MTIMED_FAST] = 0;
70 if (flags & SAVE_MON_SLOW) {
72 m_ptr->mtimed[MTIMED_SLOW] = (s16b)tmp8u;
74 m_ptr->mtimed[MTIMED_SLOW] = 0;
76 if (flags & SAVE_MON_STUNNED) {
78 m_ptr->mtimed[MTIMED_STUNNED] = (s16b)tmp8u;
80 m_ptr->mtimed[MTIMED_STUNNED] = 0;
82 if (flags & SAVE_MON_CONFUSED) {
84 m_ptr->mtimed[MTIMED_CONFUSED] = (s16b)tmp8u;
86 m_ptr->mtimed[MTIMED_CONFUSED] = 0;
88 if (flags & SAVE_MON_MONFEAR) {
90 m_ptr->mtimed[MTIMED_MONFEAR] = (s16b)tmp8u;
92 m_ptr->mtimed[MTIMED_MONFEAR] = 0;
94 if (flags & SAVE_MON_TARGET_Y) {
96 m_ptr->target_y = (POSITION)tmp16s;
100 if (flags & SAVE_MON_TARGET_X) {
102 m_ptr->target_x = (POSITION)tmp16s;
106 if (flags & SAVE_MON_INVULNER) {
108 m_ptr->mtimed[MTIMED_INVULNER] = (s16b)tmp8u;
110 m_ptr->mtimed[MTIMED_INVULNER] = 0;
112 if (flags & SAVE_MON_SMART)
113 rd_u32b(&m_ptr->smart);
117 if (flags & SAVE_MON_EXP) {
120 m_ptr->exp = (EXP)tmp32u;
124 m_ptr->mflag = 0; /* Not saved */
126 if (flags & SAVE_MON_MFLAG2)
127 rd_byte(&m_ptr->mflag2);
131 if (flags & SAVE_MON_NICKNAME) {
133 rd_string(buf, sizeof(buf));
134 m_ptr->nickname = quark_add(buf);
138 if (flags & SAVE_MON_PARENT)
139 rd_s16b(&m_ptr->parent_m_idx);
141 m_ptr->parent_m_idx = 0;