* the existing "number of turns to protect for", and where each hit
* by a monster will reduce the shield by that amount.
*
- * XXX XXX XXX
+ *
*/
#include "angband.h"
+#include "generate.h"
+#include "trap.h"
/*
*/
static void note(cptr msg)
{
- static int y = 2;
+ static TERM_LEN y = 2;
/* Draw the message */
prt(msg, y, 0);
static void rd_item_old(object_type *o_ptr)
{
char buf[128];
+ byte_hack tmp8u;
+ s16b tmp16s;
/* Kind */
rd_s16b(&o_ptr->k_idx);
- /* Location */
- rd_byte(&o_ptr->iy);
- rd_byte(&o_ptr->ix);
+ rd_byte(&tmp8u);
+ o_ptr->iy = (POSITION)tmp8u;
+ rd_byte(&tmp8u);
+ o_ptr->ix = (POSITION)tmp8u;
/* Type/Subtype */
- rd_byte(&o_ptr->tval);
- rd_byte(&o_ptr->sval);
+ rd_byte(&tmp8u);
+ o_ptr->tval = tmp8u;
+ rd_byte(&tmp8u);
+ o_ptr->sval = tmp8u;
if (z_older_than(10, 4, 4))
{
rd_s16b(&o_ptr->pval);
rd_byte(&o_ptr->discount);
- rd_byte(&o_ptr->number);
- rd_s16b(&o_ptr->weight);
+ rd_byte(&tmp8u);
+ o_ptr->number = (ITEM_NUMBER)tmp8u;
+
+ rd_s16b(&tmp16s);
+ o_ptr->weight = tmp16s;
+
+ rd_byte(&tmp8u);
+ o_ptr->name1 = tmp8u;
+
+ rd_byte(&tmp8u);
+ o_ptr->name2 = tmp8u;
- rd_byte(&o_ptr->name1);
- rd_byte(&o_ptr->name2);
rd_s16b(&o_ptr->timeout);
rd_s16b(&o_ptr->to_h);
- rd_s16b(&o_ptr->to_d);
+
+ rd_s16b(&tmp16s);
+ o_ptr->to_d = tmp16s;
rd_s16b(&o_ptr->to_a);
rd_s16b(&o_ptr->ac);
- rd_byte(&o_ptr->dd);
- rd_byte(&o_ptr->ds);
+ rd_byte(&tmp8u);
+ o_ptr->dd = tmp8u;
+ rd_byte(&tmp8u);
+ o_ptr->ds = tmp8u;
rd_byte(&o_ptr->ident);
static void rd_item(object_type *o_ptr)
{
object_kind *k_ptr;
- u32b flags;
+ BIT_FLAGS flags;
char buf[128];
+ byte_hack tmp8u;
+ s16b tmp16s;
if (h_older_than(1, 5, 0, 0))
{
/* Kind */
rd_s16b(&o_ptr->k_idx);
- /* Location */
- rd_byte(&o_ptr->iy);
- rd_byte(&o_ptr->ix);
+ rd_byte(&tmp8u);
+ o_ptr->iy = (POSITION)tmp8u;
+ rd_byte(&tmp8u);
+ o_ptr->ix = (POSITION)tmp8u;
/* Type/Subtype */
k_ptr = &k_info[o_ptr->k_idx];
if (flags & SAVE_ITEM_DISCOUNT) rd_byte(&o_ptr->discount);
else o_ptr->discount = 0;
- if (flags & SAVE_ITEM_NUMBER) rd_byte(&o_ptr->number);
+ if (flags & SAVE_ITEM_NUMBER) {
+ rd_byte(&tmp8u);
+ o_ptr->number = tmp8u;
+ }
else o_ptr->number = 1;
- rd_s16b(&o_ptr->weight);
+ rd_s16b(&tmp16s);
+ o_ptr->weight = tmp16s;
- if (flags & SAVE_ITEM_NAME1) rd_byte(&o_ptr->name1);
+ if (flags & SAVE_ITEM_NAME1)
+ {
+ rd_byte(&tmp8u);
+ o_ptr->name1 = tmp8u;
+ }
else o_ptr->name1 = 0;
- if (flags & SAVE_ITEM_NAME2) rd_byte(&o_ptr->name2);
+ if (flags & SAVE_ITEM_NAME2)
+ {
+ rd_byte(&tmp8u);
+ o_ptr->name2 = tmp8u;
+ }
else o_ptr->name2 = 0;
if (flags & SAVE_ITEM_TIMEOUT) rd_s16b(&o_ptr->timeout);
else o_ptr->timeout = 0;
if (flags & SAVE_ITEM_TO_H) rd_s16b(&o_ptr->to_h);
else o_ptr->to_h = 0;
- if (flags & SAVE_ITEM_TO_D) rd_s16b(&o_ptr->to_d);
+ if (flags & SAVE_ITEM_TO_D)
+ {
+ rd_s16b(&tmp16s);
+ o_ptr->to_d = tmp16s;
+ }
else o_ptr->to_d = 0;
if (flags & SAVE_ITEM_TO_A) rd_s16b(&o_ptr->to_a);
else o_ptr->to_a = 0;
if (flags & SAVE_ITEM_AC) rd_s16b(&o_ptr->ac);
else o_ptr->ac = 0;
- if (flags & SAVE_ITEM_DD) rd_byte(&o_ptr->dd);
+ if (flags & SAVE_ITEM_DD)
+ {
+ rd_byte(&tmp8u);
+ o_ptr->dd = tmp8u;
+ }
else o_ptr->dd = 0;
- if (flags & SAVE_ITEM_DS) rd_byte(&o_ptr->ds);
+ if (flags & SAVE_ITEM_DS)
+ {
+ rd_byte(&tmp8u);
+ o_ptr->ds = tmp8u;
+ }
else o_ptr->ds = 0;
if (flags & SAVE_ITEM_IDENT) rd_byte(&o_ptr->ident);
if(h_older_than(2,1,2,4))
{
- u32b flgs[TR_FLAG_SIZE];
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
object_flags(o_ptr, flgs);
if ((o_ptr->name2 == EGO_DARK) || (o_ptr->name2 == EGO_ANCIENT_CURSE) || (o_ptr->name1 == ART_NIGHT))
static void rd_monster_old(monster_type *m_ptr)
{
byte tmp8u;
+ s16b tmp16s;
+ u32b tmp32u;
char buf[128];
/* Read the monster race */
rd_byte(&m_ptr->sub_align);
/* Read the other information */
- rd_byte(&m_ptr->fy);
- rd_byte(&m_ptr->fx);
- rd_s16b(&m_ptr->hp);
- rd_s16b(&m_ptr->maxhp);
+ rd_byte(&tmp8u);
+ m_ptr->fy = (POSITION)tmp8u;
+ rd_byte(&tmp8u);
+ m_ptr->fx = (POSITION)tmp8u;
+
+ rd_s16b(&tmp16s);
+ m_ptr->hp = tmp16s;
+ rd_s16b(&tmp16s);
+ m_ptr->maxhp = tmp16s;
+
if (z_older_than(11, 0, 5))
{
m_ptr->max_maxhp = m_ptr->maxhp;
}
else
{
- rd_s16b(&m_ptr->max_maxhp);
+ rd_s16b(&tmp16s);
+ m_ptr->max_maxhp = (HIT_POINT)tmp16s;
}
if(h_older_than(2, 1, 2, 1))
{
}
else
{
- rd_u32b(&m_ptr->dealt_damage);
+ rd_s32b(&m_ptr->dealt_damage);
}
rd_s16b(&m_ptr->mtimed[MTIMED_CSLEEP]);
}
else if (z_older_than(10,0,11))
{
- s16b tmp16s;
rd_s16b(&tmp16s);
reset_target(m_ptr);
}
else
{
- rd_s16b(&m_ptr->target_y);
- rd_s16b(&m_ptr->target_x);
+ rd_s16b(&tmp16s);
+ m_ptr->target_y = (POSITION)tmp16s;
+ rd_s16b(&tmp16s);
+ m_ptr->target_x = (POSITION)tmp16s;
}
rd_byte(&tmp8u);
else
m_ptr->smart = 0;
- if (z_older_than(10, 4, 5))
+ if (z_older_than(10, 4, 5)) {
m_ptr->exp = 0;
- else
- rd_u32b(&m_ptr->exp);
+ } else {
+ rd_u32b(&tmp32u);
+ m_ptr->exp = tmp32u;
+ }
if (z_older_than(10, 2, 2))
{
*/
static void rd_monster(monster_type *m_ptr)
{
- u32b flags;
+ BIT_FLAGS flags;
char buf[128];
byte tmp8u;
+ s16b tmp16s;
+ u32b tmp32u;
if (h_older_than(1, 5, 0, 0))
{
rd_s16b(&m_ptr->r_idx);
/* Read the other information */
- rd_byte(&m_ptr->fy);
- rd_byte(&m_ptr->fx);
- rd_s16b(&m_ptr->hp);
- rd_s16b(&m_ptr->maxhp);
- rd_s16b(&m_ptr->max_maxhp);
+ rd_byte(&tmp8u);
+ m_ptr->fy = (POSITION)tmp8u;
+ rd_byte(&tmp8u);
+ m_ptr->fx = (POSITION)tmp8u;
+
+ rd_s16b(&tmp16s);
+ m_ptr->hp = (HIT_POINT)tmp16s;
+ rd_s16b(&tmp16s);
+ m_ptr->maxhp = (HIT_POINT)tmp16s;
+ rd_s16b(&tmp16s);
+ m_ptr->max_maxhp = (HIT_POINT)tmp16s;
+
if(h_older_than(2, 1, 2, 1))
{
m_ptr->dealt_damage = 0;
}
else
{
- rd_u32b(&m_ptr->dealt_damage);
+ rd_s32b(&m_ptr->dealt_damage);
}
/* Monster race index of its appearance */
}
else m_ptr->mtimed[MTIMED_MONFEAR] = 0;
- if (flags & SAVE_MON_TARGET_Y) rd_s16b(&m_ptr->target_y);
+ if (flags & SAVE_MON_TARGET_Y)
+ {
+ rd_s16b(&tmp16s);
+ m_ptr->target_y = (POSITION)tmp16s;
+ }
else m_ptr->target_y = 0;
- if (flags & SAVE_MON_TARGET_X) rd_s16b(&m_ptr->target_x);
+ if (flags & SAVE_MON_TARGET_X)
+ {
+ rd_s16b(&tmp16s);
+ m_ptr->target_x = (POSITION)tmp16s;
+ }
else m_ptr->target_x = 0;
if (flags & SAVE_MON_INVULNER)
if (flags & SAVE_MON_SMART) rd_u32b(&m_ptr->smart);
else m_ptr->smart = 0;
- if (flags & SAVE_MON_EXP) rd_u32b(&m_ptr->exp);
+ if (flags & SAVE_MON_EXP)
+ {
+ rd_u32b(&tmp32u);
+ m_ptr->exp = (EXP)tmp32u;
+ }
else m_ptr->exp = 0;
m_ptr->mflag = 0; /* Not saved */
* @param r_idx 読み込み先モンスターID
* @return なし
*/
-static void rd_lore(int r_idx)
+static void rd_lore(MONRACE_IDX r_idx)
{
byte tmp8u;
+ s16b tmp16s;
monster_race *r_ptr = &r_info[r_idx];
/* Count sights/deaths/kills */
- rd_s16b(&r_ptr->r_sights);
- rd_s16b(&r_ptr->r_deaths);
- rd_s16b(&r_ptr->r_pkills);
+ rd_s16b(&tmp16s);
+ r_ptr->r_sights = (MONSTER_NUMBER)tmp16s;
+ rd_s16b(&tmp16s);
+ r_ptr->r_deaths = (MONSTER_NUMBER)tmp16s;
+ rd_s16b(&tmp16s);
+ r_ptr->r_pkills = (MONSTER_NUMBER)tmp16s;
if (h_older_than(1, 7, 0, 5))
{
r_ptr->r_akills = r_ptr->r_pkills;
}
else
{
- rd_s16b(&r_ptr->r_akills);
+ rd_s16b(&tmp16s);
+ r_ptr->r_akills = (MONSTER_NUMBER)tmp16s;
}
- rd_s16b(&r_ptr->r_tkills);
+ rd_s16b(&tmp16s);
+ r_ptr->r_tkills = (MONSTER_NUMBER)tmp16s;
/* Count wakes and ignores */
rd_byte(&r_ptr->r_wake);
rd_byte(&r_ptr->r_xtra2);
/* Count drops */
- rd_byte(&r_ptr->r_drop_gold);
- rd_byte(&r_ptr->r_drop_item);
+ rd_byte(&tmp8u);
+ r_ptr->r_drop_gold = (ITEM_NUMBER)tmp8u;
+ rd_byte(&tmp8u);
+ r_ptr->r_drop_item = (ITEM_NUMBER)tmp8u;
/* Count spells */
rd_byte(&tmp8u);
}
/* Read the "Racial" monster limit per level */
- rd_byte(&r_ptr->max_num);
+ rd_byte(&tmp8u);
+ r_ptr->max_num = (MONSTER_NUMBER)tmp8u;
/* Location in saved floor */
rd_s16b(&r_ptr->floor_id);
{
object_type forge;
object_type *q_ptr;
-
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Read the item */
static void rd_options(void)
{
int i, n;
-
byte b;
-
u16b c;
- u32b flag[8];
- u32b mask[8];
-
-
- /*** Oops ***/
+ BIT_FLAGS flag[8];
+ BIT_FLAGS mask[8];
/* Ignore old options */
strip_bytes(16);
-
/*** Special info */
/* Read "delay_factor" */
mana_warn = b;
}
-
/*** Cheating options ***/
rd_u16b(&c);
cheat_know = (c & 0x1000) ? TRUE : FALSE;
cheat_live = (c & 0x2000) ? TRUE : FALSE;
cheat_save = (c & 0x4000) ? TRUE : FALSE;
+ cheat_diary_output = (c & 0x8000) ? TRUE : FALSE;
+ cheat_turn = (c & 0x0080) ? TRUE : FALSE;
+ cheat_sight = (c & 0x0040) ? TRUE : FALSE;
rd_byte((byte *)&autosave_l);
rd_byte((byte *)&autosave_t);
* @brief ダミー情報スキップ / Hack -- strip the "ghost" info
* @return なし
* @details
- * XXX XXX XXX This is such a nasty hack it hurts.
+ * This is such a nasty hack it hurts.
*/
static void rd_ghost(void)
{
static void load_quick_start(void)
{
byte tmp8u;
+ s16b tmp16s;
int i;
if (z_older_than(11, 0, 13))
}
rd_byte(&previous_char.psex);
- rd_byte(&previous_char.prace);
- rd_byte(&previous_char.pclass);
- rd_byte(&previous_char.pseikaku);
- rd_byte(&previous_char.realm1);
- rd_byte(&previous_char.realm2);
+ rd_byte(&tmp8u);
+ previous_char.prace = (RACE_IDX)tmp8u;
+ rd_byte(&tmp8u);
+ previous_char.pclass = (CLASS_IDX)tmp8u;
+ rd_byte(&tmp8u);
+ previous_char.pseikaku = (CHARACTER_IDX)tmp8u;
+ rd_byte(&tmp8u);
+ previous_char.realm1 = (REALM_IDX)tmp8u;
+ rd_byte(&tmp8u);
+ previous_char.realm2 = (REALM_IDX)tmp8u;
rd_s16b(&previous_char.age);
rd_s16b(&previous_char.ht);
for (i = 0; i < 6; i++) rd_s16b(&previous_char.stat_max[i]);
for (i = 0; i < 6; i++) rd_s16b(&previous_char.stat_max_max[i]);
- for (i = 0; i < PY_MAX_LEVEL; i++) rd_s16b(&previous_char.player_hp[i]);
+ for (i = 0; i < PY_MAX_LEVEL; i++)
+ {
+ rd_s16b(&tmp16s);
+ previous_char.player_hp[i] = (HIT_POINT)tmp16s;
+ }
rd_s16b(&previous_char.chaos_patron);
byte tmp8u;
s16b tmp16s;
+ s32b tmp32s;
u16b tmp16u;
rd_string(p_ptr->name, sizeof(p_ptr->name));
}
/* Class/Race/Seikaku/Gender/Spells */
- rd_byte(&p_ptr->prace);
- rd_byte(&p_ptr->pclass);
- rd_byte(&p_ptr->pseikaku);
+ rd_byte(&tmp8u);
+ p_ptr->prace = (RACE_IDX)tmp8u;
+ rd_byte(&tmp8u);
+ p_ptr->pclass = (CLASS_IDX)tmp8u;
+ rd_byte(&tmp8u);
+ p_ptr->pseikaku = (CHARACTER_IDX)tmp8u;
rd_byte(&p_ptr->psex);
- rd_byte(&p_ptr->realm1);
- rd_byte(&p_ptr->realm2);
- rd_byte(&tmp8u); /* oops */
+ rd_byte(&tmp8u);
+ p_ptr->realm1 = (REALM_IDX)tmp8u;
+ rd_byte(&tmp8u);
+ p_ptr->realm2 = (REALM_IDX)tmp8u;
+ rd_byte(&tmp8u);
if (z_older_than(10, 4, 4))
{
}
/* Special Race/Class info */
- rd_byte(&p_ptr->hitdie);
+ rd_byte(&tmp8u);
+ p_ptr->hitdie = tmp8u;
rd_u16b(&p_ptr->expfact);
/* Age/Height/Weight */
for (i = 0; i < 6; i++) rd_s16b(&p_ptr->stat_max_max[i]);
for (i = 0; i < 6; i++) rd_s16b(&p_ptr->stat_cur[i]);
- strip_bytes(24); /* oops */
-
+ strip_bytes(24);
rd_s32b(&p_ptr->au);
rd_s32b(&p_ptr->max_exp);
for (i = 0; i < 5; i++) for (j = 0; j < 60; j++) rd_s16b(&p_ptr->weapon_exp[i][j]);
else
for (i = 0; i < 5; i++) for (j = 0; j < 64; j++) rd_s16b(&p_ptr->weapon_exp[i][j]);
- for (i = 0; i < 10; i++) rd_s16b(&p_ptr->skill_exp[i]);
+ for (i = 0; i < GINOU_MAX; i++) rd_s16b(&p_ptr->skill_exp[i]);
if (z_older_than(10, 4, 1))
{
if (p_ptr->pclass != CLASS_BEASTMASTER) p_ptr->skill_exp[GINOU_RIDING] /= 2;
}
else
{
- rd_byte(&p_ptr->start_race);
- rd_s32b(&p_ptr->old_race1);
- rd_s32b(&p_ptr->old_race2);
+ rd_byte(&tmp8u);
+ p_ptr->start_race = (RACE_IDX)tmp8u;
+ rd_s32b(&tmp32s);
+ p_ptr->old_race1 = (BIT_FLAGS)tmp32s;
+ rd_s32b(&tmp32s);
+ p_ptr->old_race2 = (BIT_FLAGS)tmp32s;
rd_s16b(&p_ptr->old_realm);
}
{
for (i = 0; i < MAX_MANE; i++)
{
- rd_s16b(&p_ptr->mane_spell[i]);
- rd_s16b(&p_ptr->mane_dam[i]);
+ rd_s16b(&tmp16s);
+ p_ptr->mane_spell[i] = (SPELL_IDX)tmp16s;
+ rd_s16b(&tmp16s);
+ p_ptr->mane_dam[i] = (SPELL_IDX)tmp16s;
}
rd_s16b(&p_ptr->mane_num);
}
rd_byte(&p_ptr->exit_bldg);
rd_byte(&tmp8u);
- rd_s16b(&p_ptr->oldpx);
- rd_s16b(&p_ptr->oldpy);
+ rd_s16b(&tmp16s);
+ p_ptr->oldpx = (POSITION)tmp16s;
+ rd_s16b(&tmp16s);
+ p_ptr->oldpy = (POSITION)tmp16s;
+
if (z_older_than(10, 3, 13) && !dun_level && !p_ptr->inside_arena) {p_ptr->oldpy = 33;p_ptr->oldpx = 131;}
/* Was p_ptr->rewards[MAX_BACT] */
rd_s16b(&p_ptr->max_plv);
if (z_older_than(10, 3, 8))
{
- rd_s16b(&max_dlv[DUNGEON_ANGBAND]);
+ rd_s16b(&tmp16s);
+ max_dlv[DUNGEON_ANGBAND] = tmp16s;
}
else
{
for(i = 0; i < max; i++)
{
- rd_s16b(&max_dlv[i]);
+ rd_s16b(&tmp16s);
+ max_dlv[i] = tmp16s;
if (max_dlv[i] > d_info[i].maxdepth) max_dlv[i] = d_info[i].maxdepth;
}
}
- /* Repair maximum player level XXX XXX XXX */
+ /* Repair maximum player level */
if (p_ptr->max_plv < p_ptr->lev) p_ptr->max_plv = p_ptr->lev;
/* More info */
else
{
rd_s16b(&p_ptr->tim_res_time);
- rd_byte(&p_ptr->mimic_form);
+ rd_byte(&tmp8u);
+ p_ptr->mimic_form = (IDX)tmp8u;
rd_s16b(&p_ptr->tim_mimic);
rd_s16b(&p_ptr->tim_sh_fire);
}
rd_byte(&tmp8u);
p_ptr->autopick_autoregister = tmp8u ? TRUE : FALSE;
- rd_byte(&tmp8u); /* oops */
- rd_byte(&p_ptr->action);
+ rd_byte(&tmp8u);
+ rd_byte(&tmp8u);
+ p_ptr->action = (ACTION_IDX)tmp8u;
if (!z_older_than(10, 4, 3))
{
rd_byte(&tmp8u);
}
else if (z_older_than(10, 3, 10))
{
- s32b tmp32s;
rd_s32b(&tmp32s);
p_ptr->visit = 1L;
}
else
{
- rd_s32b(&p_ptr->visit);
+ rd_s32b(&tmp32s);
+ p_ptr->visit = (BIT_FLAGS)tmp32s;
}
if (!z_older_than(11, 0, 5))
{
/* Nope, we reached the end */
if (n == 0xFFFF) break;
-
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Read the item */
/* Warning -- backpack is full */
else if (inven_cnt == INVEN_PACK)
{
- /* Oops */
note(_("持ち物の中のアイテムが多すぎる!", "Too many items in the inventory!"));
/* Fail */
{
int i;
char buf[128];
+ int message_max;
- s16b num;
- /* Total */
- rd_s16b(&num);
+ if (h_older_than(2, 2, 0, 75))
+ {
+ u16b num;
+ /* Total */
+ rd_u16b(&num);
+ message_max = (int)num;
+
+ /* Read the messages */
+ for (i = 0; i < message_max; i++)
+ {
+ /* Read the message */
+ rd_string(buf, sizeof(buf));
- /* Read the messages */
- for (i = 0; i < num; i++)
+ /* Save the message */
+ message_add(buf);
+ }
+ }
+ else
{
- /* Read the message */
- rd_string(buf, sizeof(buf));
+ u32b num;
+ /* Total */
+ rd_u32b(&num);
+ message_max = (int)num;
- /* Save the message */
- message_add(buf);
+ /* Read the messages */
+ for (i = 0; i < message_max; i++)
+ {
+ /* Read the message */
+ rd_string(buf, sizeof(buf));
+
+ /* Save the message */
+ message_add(buf);
+ }
}
+
}
/*** Basic info ***/
/* Header info */
- rd_s16b(&dun_level);
+ rd_s16b(&tmp16s);
+ dun_level = (DEPTH)tmp16s;
if (z_older_than(10, 3, 8)) dungeon_type = DUNGEON_ANGBAND;
- else rd_byte(&dungeon_type);
+ else
+ {
+ rd_byte(&tmp8u);
+ dungeon_type = (IDX)tmp8u;
+ }
/* Set the base level for old versions */
base_level = dun_level;
- rd_s16b(&base_level);
+ rd_s16b(&tmp16s);
+ base_level = (DEPTH)tmp16s;
- rd_s16b(&num_repro);
rd_s16b(&tmp16s);
- p_ptr->y = (int)tmp16s;
+ num_repro = (MONSTER_NUMBER)tmp16s;
rd_s16b(&tmp16s);
- p_ptr->x = (int)tmp16s;
+ p_ptr->y = (POSITION)tmp16s;
+ rd_s16b(&tmp16s);
+ p_ptr->x = (POSITION)tmp16s;
if (z_older_than(10, 3, 13) && !dun_level && !p_ptr->inside_arena) {p_ptr->y = 33;p_ptr->x = 131;}
- rd_s16b(&cur_hgt);
- rd_s16b(&cur_wid);
+ rd_s16b(&tmp16s);
+ cur_hgt = (POSITION)tmp16s;
+ rd_s16b(&tmp16s);
+ cur_wid = (POSITION)tmp16s;
rd_s16b(&tmp16s); /* max_panel_rows */
rd_s16b(&tmp16s); /* max_panel_cols */
/* Read the dungeon items */
for (i = 1; i < limit; i++)
{
- int o_idx;
+ OBJECT_IDX o_idx;
object_type *o_ptr;
/* Get a new record */
o_idx = o_pop();
- /* Oops */
if (i != o_idx)
{
note(format(_("アイテム配置エラー (%d <> %d)", "Object allocation error (%d <> %d)"), i, o_idx));
rd_item(o_ptr);
- /* XXX XXX XXX XXX XXX */
+ /* XXX XXX */
/* Monster */
if (o_ptr->held_m_idx)
/* Read the monsters */
for (i = 1; i < limit; i++)
{
- int m_idx;
+ MONSTER_IDX m_idx;
monster_type *m_ptr;
/* Get a new record */
m_idx = m_pop();
- /* Oops */
if (i != m_idx)
{
note(format(_("モンスター配置エラー (%d <> %d)", "Monster allocation error (%d <> %d)"), i, m_idx));
/*!
* @brief 保存されたフロアを読み込む / Read the saved floor
- * @return なし
+ * @return info読み込みエラーコード
* @details
+ * この関数は、セーブデータの互換性を保つために多くのデータ改変処理を備えている。
+ * 現在確認している処理は以下の通り、
+ * <ul>
+ * <li>1.7.0.2で8bitだったcave_typeのfeat,mimicのID値を16bitに拡張する処理。</li>
+ * <li>1.7.0.8までに廃止、IDなどを差し替えたクエスト番号を置換する処理。</li>
+ * </ul>
* The monsters/objects must be loaded in the same order
* that they were stored, since the actual indexes matter.
*/
static errr rd_saved_floor(saved_floor_type *sf_ptr)
{
- int ymax, xmax;
- int i, y, x;
+ POSITION ymax, xmax;
+ POSITION y, x;
+ int i;
byte count;
byte tmp8u;
s16b tmp16s;
{
/*** Not a saved floor ***/
- rd_s16b(&dun_level);
+ rd_s16b(&tmp16s);
+ dun_level = (DEPTH)tmp16s;
base_level = dun_level;
}
else
if (tmp16s != sf_ptr->lower_floor_id) return 171;
}
- rd_s16b(&base_level);
- rd_s16b(&num_repro);
+ rd_s16b(&tmp16s);
+ base_level = (DEPTH)tmp16s;
+ rd_s16b(&tmp16s);
+ num_repro = (MONSTER_NUMBER)tmp16s;
rd_u16b(&tmp16u);
- p_ptr->y = (int)tmp16u;
+ p_ptr->y = (POSITION)tmp16u;
rd_u16b(&tmp16u);
- p_ptr->x = (int)tmp16u;
+ p_ptr->x = (POSITION)tmp16u;
- rd_s16b(&cur_hgt);
- rd_s16b(&cur_wid);
+ rd_s16b(&tmp16s);
+ cur_hgt = (POSITION)tmp16s;
+ rd_s16b(&tmp16s);
+ cur_wid = (POSITION)tmp16s;
rd_byte(&p_ptr->feeling);
cave_template_type *ct_ptr = &templates[i];
/* Read it */
- rd_u16b(&ct_ptr->info);
+ rd_u16b(&tmp16u);
+ ct_ptr->info = (BIT_FLAGS)tmp16u;
if (h_older_than(1, 7, 0, 2))
{
rd_byte(&tmp8u);
}
}
else if ((c_ptr->feat == OLD_FEAT_QUEST_EXIT) &&
- (p_ptr->inside_quest == OLD_QUEST_WATER_CAVE))
+ (p_ptr->inside_quest == OLD_QUEST_WATER_CAVE))
{
c_ptr->feat = feat_up_stair;
c_ptr->special = 0;
/* Read the dungeon items */
for (i = 1; i < limit; i++)
{
- int o_idx;
+ OBJECT_IDX o_idx;
object_type *o_ptr;
/* Get a new record */
o_idx = o_pop();
- /* Oops */
if (i != o_idx) return 152;
/* Acquire place */
for (i = 1; i < limit; i++)
{
cave_type *c_ptr;
- int m_idx;
+ MONSTER_IDX m_idx;
monster_type *m_ptr;
/* Get a new record */
m_idx = m_pop();
- /* Oops */
if (i != m_idx) return 162;
static errr rd_dungeon(void)
{
errr err = 0;
+ s16b tmp16s;
+ byte_hack tmp8u;
byte num;
int i;
rd_s16b(&max_floor_id);
/* Current dungeon type */
- rd_byte(&dungeon_type);
-
+ rd_byte(&tmp8u);
+ dungeon_type = (DUNGEON_IDX)tmp8u;
/* Number of the saved_floors array elements */
rd_byte(&num);
saved_floor_type *sf_ptr = &saved_floors[i];
rd_s16b(&sf_ptr->floor_id);
- rd_byte(&sf_ptr->savefile_id);
- rd_s16b(&sf_ptr->dun_level);
+ rd_byte(&tmp8u);
+ sf_ptr->savefile_id = (s16b)tmp8u;
+
+ rd_s16b(&tmp16s);
+ sf_ptr->dun_level = (DEPTH)tmp16s;
+
rd_s32b(&sf_ptr->last_visit);
rd_u32b(&sf_ptr->visit_mark);
rd_s16b(&sf_ptr->upper_floor_id);
for (i = 0; i < num; i++)
{
saved_floor_type *sf_ptr = &saved_floors[i];
- byte tmp8u;
/* Unused element */
if (!sf_ptr->floor_id) continue;
byte tmp8u;
u16b tmp16u;
+ s16b tmp16s;
u32b tmp32u;
#ifdef VERIFY_CHECKSUMS
#endif
- /* Mention the savefile version */
- note(format(
- _("バージョン %d.%d.%d のセーブ・ファイルをロード中...", "Loading a %d.%d.%d savefile..."),
- (z_major > 9) ? z_major - 10 : z_major, z_minor, z_patch));
-
-
/* Strip the version bytes */
strip_bytes(4);
rd_byte(&h_ver_minor);
rd_byte(&h_ver_major);
+ /* Mention the savefile version */
+ note(format(
+ _("バージョン %d.%d.%d.%d のセーブ・ファイルをロード中...", "Loading a %d.%d.%d.%d savefile..."),
+ (h_ver_major > 9) ? h_ver_major - 10 : h_ver_major, h_ver_minor, h_ver_patch, h_ver_extra));
+
+
/* Operating system info */
rd_u32b(&sf_system);
for (i = 0; i < tmp16u; i++)
{
/* Read the lore */
- rd_lore(i);
+ rd_lore((MONRACE_IDX)i);
}
if (arg_fiddle) note(_("モンスターの思い出をロードしました", "Loaded Monster Memory"));
}
/* Incompatible save files */
- if (max_quests_load > max_quests)
+ if (max_quests_load > max_q_idx)
{
note(format(_("クエストが多すぎる(%u)!", "Too many (%u) quests!"), max_quests_load));
return (23);
for (i = 0; i < max_quests_load; i++)
{
- if (i < max_quests)
+ if (i < max_q_idx)
{
quest_type* const q_ptr = &quest[i];
rd_s16b(&q_ptr->status);
- rd_s16b(&q_ptr->level);
+ rd_s16b(&tmp16s);
+ q_ptr->level = tmp16s;
if (z_older_than(11, 0, 6))
{
}
else
{
- rd_byte(&q_ptr->complev);
+ rd_byte(&tmp8u);
+ q_ptr->complev = tmp8u;
}
if(h_older_than(2, 1, 2, 2))
{
(!z_older_than(10, 3, 14) && (q_ptr->status == QUEST_STATUS_COMPLETED)) ||
(!z_older_than(11, 0, 7) && (i >= MIN_RANDOM_QUEST) && (i <= (MIN_RANDOM_QUEST + max_rquests_load))))
{
- rd_s16b(&q_ptr->cur_num);
- rd_s16b(&q_ptr->max_num);
+ rd_s16b(&tmp16s);
+ q_ptr->cur_num = (MONSTER_NUMBER)tmp16s;
+ rd_s16b(&tmp16s);
+ q_ptr->max_num = (MONSTER_NUMBER)tmp16s;
rd_s16b(&q_ptr->type);
/* Load quest monster index */
if (q_ptr->k_idx)
a_info[q_ptr->k_idx].gen_flags |= TRG_QUESTITEM;
- rd_byte(&q_ptr->flags);
+ rd_byte(&tmp8u);
+ q_ptr->flags = tmp8u;
if (z_older_than(10, 3, 11))
{
else
{
init_flags = INIT_ASSIGN;
- p_ptr->inside_quest = i;
+ p_ptr->inside_quest = (QUEST_IDX)i;
process_dungeon_file("q_info.txt", 0, 0, 0, 0);
p_ptr->inside_quest = old_inside_quest;
}
else
{
- rd_byte(&q_ptr->dungeon);
+ rd_byte(&tmp8u);
+ q_ptr->dungeon = tmp8u;
}
/* Mark uniques */
if (q_ptr->status == QUEST_STATUS_TAKEN || q_ptr->status == QUEST_STATUS_UNTAKEN)
/* Read the player_hp array */
for (i = 0; i < tmp16u; i++)
{
- rd_s16b(&p_ptr->player_hp[i]);
+ rd_s16b(&tmp16s);
+ p_ptr->player_hp[i] = (HIT_POINT)tmp16s;
}
/* Important -- Initialize the sex */
for (i = 0; i < 64; i++)
{
- rd_byte(&p_ptr->spell_order[i]);
+ rd_byte(&tmp8u);
+ p_ptr->spell_order[i] = (SPELL_IDX)tmp8u;
}
if (!z_older_than(11, 0, 9))
{
- char buf[SCREEN_BUF_SIZE];
+ char buf[SCREEN_BUF_MAX_SIZE];
rd_string(buf, sizeof(buf));
if (buf[0]) screen_dump = string_make(buf);
}
/* Check for errors */
if (ferror(fff)) err = -1;
-
- /* Close the file */
my_fclose(fff);
-
- /* Result */
return (err);
}
* @param mode オプション
* @return 成功したらtrue
*/
-bool load_floor(saved_floor_type *sf_ptr, u32b mode)
+bool load_floor(saved_floor_type *sf_ptr, BIT_FLAGS mode)
{
FILE *old_fff = NULL;
byte old_xor_byte = 0;
/* Check for errors */
if (ferror(fff)) ok = FALSE;
-
- /* Close the file */
my_fclose(fff);
/* Grab permissions */
/* Restore old knowledge */
kanji_code = old_kanji_code;
-
- /* Result */
return ok;
}