X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fsave.c;h=67ef9fe2333ee49b4cc19d7caa60802189fbdf4d;hb=e70ba712cf4b753e7d3876f60980c87cfeec09e3;hp=a5b7022901d9c3e4fc42131d0559d356fb7aa80f;hpb=a24978428fb26508d1f931f0fde27cf141071f5c;p=hengband%2Fhengband.git diff --git a/src/save.c b/src/save.c index a5b702290..67ef9fe23 100644 --- a/src/save.c +++ b/src/save.c @@ -5,7 +5,6 @@ * @author *
  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
- *
  * This software may be copied and distributed for educational, research,
  * and not for profit purposes provided that this copyright and statement
  * are included in all such copies.  Other copyrights may also apply.
@@ -20,12 +19,10 @@
  * Some "local" parameters, used to help write savefiles
  */
 
-static FILE     *fff;           /* Current save "file" */
-
-static byte     xor_byte;       /* Simple encryption */
-
-static u32b     v_stamp = 0L;   /* A simple "checksum" on the actual values */
-static u32b     x_stamp = 0L;   /* A simple "checksum" on the encoded bytes */
+static FILE *fff;           /* Current save "file" */
+static byte xor_byte;       /* Simple encryption */
+static u32b v_stamp = 0L;   /* A simple "checksum" on the actual values */
+static u32b x_stamp = 0L;   /* A simple "checksum" on the encoded bytes */
 
 
 
@@ -127,7 +124,7 @@ static void wr_string(cptr str)
  */
 static void wr_item(object_type *o_ptr)
 {
-	u32b flags = 0x00000000;
+	BIT_FLAGS flags = 0x00000000;
 
 	if (o_ptr->pval) flags |= SAVE_ITEM_PVAL;
 	if (o_ptr->discount) flags |= SAVE_ITEM_DISCOUNT;
@@ -165,27 +162,26 @@ static void wr_item(object_type *o_ptr)
 	/*** Write only un-obvious elements ***/
 	wr_s16b(o_ptr->k_idx);
 
-	/* Location */
-	wr_byte(o_ptr->iy);
-	wr_byte(o_ptr->ix);
+	wr_byte((byte_hack)o_ptr->iy);
+	wr_byte((byte_hack)o_ptr->ix);
 
 	if (flags & SAVE_ITEM_PVAL) wr_s16b(o_ptr->pval);
 
 	if (flags & SAVE_ITEM_DISCOUNT) wr_byte(o_ptr->discount);
-	if (flags & SAVE_ITEM_NUMBER) wr_byte(o_ptr->number);
+	if (flags & SAVE_ITEM_NUMBER) wr_byte((byte_hack)o_ptr->number);
 
-	wr_s16b(o_ptr->weight);
+	wr_s16b((s16b)o_ptr->weight);
 
-	if (flags & SAVE_ITEM_NAME1) wr_byte(o_ptr->name1);
-	if (flags & SAVE_ITEM_NAME2) wr_byte(o_ptr->name2);
+	if (flags & SAVE_ITEM_NAME1) wr_byte((byte_hack)o_ptr->name1);
+	if (flags & SAVE_ITEM_NAME2) wr_byte((byte_hack)o_ptr->name2);
 	if (flags & SAVE_ITEM_TIMEOUT) wr_s16b(o_ptr->timeout);
 
 	if (flags & SAVE_ITEM_TO_H) wr_s16b(o_ptr->to_h);
-	if (flags & SAVE_ITEM_TO_D) wr_s16b(o_ptr->to_d);
+	if (flags & SAVE_ITEM_TO_D) wr_s16b((s16b)o_ptr->to_d);
 	if (flags & SAVE_ITEM_TO_A) wr_s16b(o_ptr->to_a);
 	if (flags & SAVE_ITEM_AC) wr_s16b(o_ptr->ac);
-	if (flags & SAVE_ITEM_DD) wr_byte(o_ptr->dd);
-	if (flags & SAVE_ITEM_DS) wr_byte(o_ptr->ds);
+	if (flags & SAVE_ITEM_DD) wr_byte((byte_hack)o_ptr->dd);
+	if (flags & SAVE_ITEM_DS) wr_byte((byte_hack)o_ptr->ds);
 
 	if (flags & SAVE_ITEM_IDENT) wr_byte(o_ptr->ident);
 
@@ -224,7 +220,7 @@ static void wr_item(object_type *o_ptr)
  */
 static void wr_monster(monster_type *m_ptr)
 {
-	u32b flags = 0x00000000;
+	BIT_FLAGS flags = 0x00000000;
 	byte tmp8u;
 
 	if (!is_original_ap(m_ptr)) flags |= SAVE_MON_AP_R_IDX;
@@ -249,11 +245,11 @@ static void wr_monster(monster_type *m_ptr)
 
 	/*** Write only un-obvious elements ***/
 	wr_s16b(m_ptr->r_idx);
-	wr_byte(m_ptr->fy);
-	wr_byte(m_ptr->fx);
-	wr_s16b(m_ptr->hp);
-	wr_s16b(m_ptr->maxhp);
-	wr_s16b(m_ptr->max_maxhp);
+	wr_byte((byte_hack)m_ptr->fy);
+	wr_byte((byte_hack)m_ptr->fx);
+	wr_s16b((s16b)m_ptr->hp);
+	wr_s16b((s16b)m_ptr->maxhp);
+	wr_s16b((s16b)m_ptr->max_maxhp);
 	wr_u32b(m_ptr->dealt_damage);
 	
 
@@ -263,7 +259,7 @@ static void wr_monster(monster_type *m_ptr)
 	if (flags & SAVE_MON_SUB_ALIGN) wr_byte(m_ptr->sub_align);
 	if (flags & SAVE_MON_CSLEEP) wr_s16b(m_ptr->mtimed[MTIMED_CSLEEP]);
 
-	wr_byte(m_ptr->mspeed);
+	wr_byte((byte)m_ptr->mspeed);
 	wr_s16b(m_ptr->energy_need);
 
 	if (flags & SAVE_MON_FAST)
@@ -291,8 +287,8 @@ static void wr_monster(monster_type *m_ptr)
 		tmp8u = (byte)m_ptr->mtimed[MTIMED_MONFEAR];
 		wr_byte(tmp8u);
 	}
-	if (flags & SAVE_MON_TARGET_Y) wr_s16b(m_ptr->target_y);
-	if (flags & SAVE_MON_TARGET_X) wr_s16b(m_ptr->target_x);
+	if (flags & SAVE_MON_TARGET_Y) wr_s16b((s16b)m_ptr->target_y);
+	if (flags & SAVE_MON_TARGET_X) wr_s16b((s16b)m_ptr->target_x);
 	if (flags & SAVE_MON_INVULNER)
 	{
 		tmp8u = (byte)m_ptr->mtimed[MTIMED_INVULNER];
@@ -311,16 +307,16 @@ static void wr_monster(monster_type *m_ptr)
  * @param r_idx モンスター種族ID
  * @return なし
  */
-static void wr_lore(int r_idx)
+static void wr_lore(MONRACE_IDX r_idx)
 {
 	monster_race *r_ptr = &r_info[r_idx];
 
 	/* Count sights/deaths/kills */
-	wr_s16b(r_ptr->r_sights);
-	wr_s16b(r_ptr->r_deaths);
-	wr_s16b(r_ptr->r_pkills);
-	wr_s16b(r_ptr->r_akills);
-	wr_s16b(r_ptr->r_tkills);
+	wr_s16b((s16b)r_ptr->r_sights);
+	wr_s16b((s16b)r_ptr->r_deaths);
+	wr_s16b((s16b)r_ptr->r_pkills);
+	wr_s16b((s16b)r_ptr->r_akills);
+	wr_s16b((s16b)r_ptr->r_tkills);
 
 	/* Count wakes and ignores */
 	wr_byte(r_ptr->r_wake);
@@ -331,8 +327,8 @@ static void wr_lore(int r_idx)
 	wr_byte(r_ptr->r_xtra2);
 
 	/* Count drops */
-	wr_byte(r_ptr->r_drop_gold);
-	wr_byte(r_ptr->r_drop_item);
+	wr_byte((byte_hack)r_ptr->r_drop_gold);
+	wr_byte((byte_hack)r_ptr->r_drop_item);
 
 	/* Count spells */
 	wr_byte(0); /* unused now */
@@ -353,9 +349,8 @@ static void wr_lore(int r_idx)
 	wr_u32b(r_ptr->r_flags6);
 	wr_u32b(r_ptr->r_flagsr);
 
-
 	/* Monster limit per level */
-	wr_byte(r_ptr->max_num);
+	wr_byte((byte_hack)r_ptr->max_num);
 
 	/* Location in saved floor */
 	wr_s16b(r_ptr->floor_id);
@@ -369,7 +364,7 @@ static void wr_lore(int r_idx)
  * @param k_idx ベースアイテムのID
  * @return なし
  */
-static void wr_xtra(int k_idx)
+static void wr_xtra(KIND_OBJECT_IDX k_idx)
 {
 	byte tmp8u = 0;
 
@@ -383,8 +378,8 @@ static void wr_xtra(int k_idx)
 
 
 /*!
- * @brief 店舗情報を書き込む / Write a "store" record
- * @param k_idx 店舗情報の参照ポインタ
+ * @brief セーブデータに店舗情報を書き込む / Write a "store" record
+ * @param st_ptr 店舗情報の参照ポインタ
  * @return なし
  */
 static void wr_store(store_type *st_ptr)
@@ -419,26 +414,20 @@ static void wr_store(store_type *st_ptr)
 
 
 /*!
- * @brief 乱数情報を書き込む / Write RNG state
- * @return なし
+ * @brief セーブデータに乱数情報を書き込む / Write RNG state
+ * @return 常に0(成功を返す) 
  */
 static errr wr_randomizer(void)
 {
 	int i;
-
-	/* Zero */
 	wr_u16b(0);
-
-	/* Place */
 	wr_u16b(Rand_place);
 
-	/* State */
 	for (i = 0; i < RAND_DEG; i++)
 	{
 		wr_u32b(Rand_state[i]);
 	}
 
-	/* Success */
 	return (0);
 }
 
@@ -456,7 +445,6 @@ static void wr_options(void)
 
 	/*** Oops ***/
 
-	/* Oops */
 	for (i = 0; i < 4; i++) wr_u32b(0L);
 
 
@@ -477,6 +465,9 @@ static void wr_options(void)
 
 	if (p_ptr->wizard) c |= 0x0002;
 
+	if (cheat_sight) c |= 0x0040;
+	if (cheat_turn) c |= 0x0080;
+
 	if (cheat_peek) c |= 0x0100;
 	if (cheat_hear) c |= 0x0200;
 	if (cheat_room) c |= 0x0400;
@@ -484,6 +475,7 @@ static void wr_options(void)
 	if (cheat_know) c |= 0x1000;
 	if (cheat_live) c |= 0x2000;
 	if (cheat_save) c |= 0x4000;
+	if (cheat_diary_output) c |= 0x8000;
 
 	wr_u16b(c);
 
@@ -564,11 +556,11 @@ static void save_quick_start(void)
 	int i;
 
 	wr_byte(previous_char.psex);
-	wr_byte(previous_char.prace);
-	wr_byte(previous_char.pclass);
-	wr_byte(previous_char.pseikaku);
-	wr_byte(previous_char.realm1);
-	wr_byte(previous_char.realm2);
+	wr_byte((byte_hack)previous_char.prace);
+	wr_byte((byte_hack)previous_char.pclass);
+	wr_byte((byte_hack)previous_char.pseikaku);
+	wr_byte((byte_hack)previous_char.realm1);
+	wr_byte((byte_hack)previous_char.realm2);
 
 	wr_s16b(previous_char.age);
 	wr_s16b(previous_char.ht);
@@ -576,10 +568,10 @@ static void save_quick_start(void)
 	wr_s16b(previous_char.sc);
 	wr_s32b(previous_char.au);
 
-	for (i = 0; i < 6; i++) wr_s16b(previous_char.stat_max[i]);
-	for (i = 0; i < 6; i++) wr_s16b(previous_char.stat_max_max[i]);
+	for (i = 0; i < A_MAX; i++) wr_s16b(previous_char.stat_max[i]);
+	for (i = 0; i < A_MAX; i++) wr_s16b(previous_char.stat_max_max[i]);
 
-	for (i = 0; i < PY_MAX_LEVEL; i++) wr_s16b(previous_char.player_hp[i]);
+	for (i = 0; i < PY_MAX_LEVEL; i++) wr_s16b((s16b)previous_char.player_hp[i]);
 
 	wr_s16b(previous_char.chaos_patron);
 
@@ -606,10 +598,8 @@ static void wr_extra(void)
 	int i,j;
 	byte tmp8u;
 
-	wr_string(player_name);
-
+	wr_string(p_ptr->name);
 	wr_string(p_ptr->died_from);
-
 	wr_string(p_ptr->last_message ? p_ptr->last_message : "");
 
 	save_quick_start();
@@ -620,15 +610,15 @@ static void wr_extra(void)
 	}
 
 	/* Race/Class/Gender/Spells */
-	wr_byte(p_ptr->prace);
-	wr_byte(p_ptr->pclass);
-	wr_byte(p_ptr->pseikaku);
-	wr_byte(p_ptr->psex);
-	wr_byte(p_ptr->realm1);
-	wr_byte(p_ptr->realm2);
-	wr_byte(0);	/* oops */
-
-	wr_byte(p_ptr->hitdie);
+	wr_byte((byte_hack)p_ptr->prace);
+	wr_byte((byte_hack)p_ptr->pclass);
+	wr_byte((byte_hack)p_ptr->pseikaku);
+	wr_byte((byte_hack)p_ptr->psex);
+	wr_byte((byte_hack)p_ptr->realm1);
+	wr_byte((byte_hack)p_ptr->realm2);
+	wr_byte(0);
+
+	wr_byte((byte)p_ptr->hitdie);
 	wr_u16b(p_ptr->expfact);
 
 	wr_s16b(p_ptr->age);
@@ -636,9 +626,9 @@ static void wr_extra(void)
 	wr_s16b(p_ptr->wt);
 
 	/* Dump the stats (maximum and current) */
-	for (i = 0; i < 6; ++i) wr_s16b(p_ptr->stat_max[i]);
-	for (i = 0; i < 6; ++i) wr_s16b(p_ptr->stat_max_max[i]);
-	for (i = 0; i < 6; ++i) wr_s16b(p_ptr->stat_cur[i]);
+	for (i = 0; i < A_MAX; ++i) wr_s16b(p_ptr->stat_max[i]);
+	for (i = 0; i < A_MAX; ++i) wr_s16b(p_ptr->stat_max_max[i]);
+	for (i = 0; i < A_MAX; ++i) wr_s16b(p_ptr->stat_cur[i]);
 
 	/* Ignore the transient stats */
 	for (i = 0; i < 12; ++i) wr_s16b(0);
@@ -653,19 +643,19 @@ static void wr_extra(void)
 
 	for (i = 0; i < 64; i++) wr_s16b(p_ptr->spell_exp[i]);
 	for (i = 0; i < 5; i++) for (j = 0; j < 64; j++) wr_s16b(p_ptr->weapon_exp[i][j]);
-	for (i = 0; i < 10; i++) wr_s16b(p_ptr->skill_exp[i]);
+	for (i = 0; i < GINOU_MAX; i++) wr_s16b(p_ptr->skill_exp[i]);
 	for (i = 0; i < 108; i++) wr_s32b(p_ptr->magic_num1[i]);
 	for (i = 0; i < 108; i++) wr_byte(p_ptr->magic_num2[i]);
 
-	wr_byte(p_ptr->start_race);
+	wr_byte((byte_hack)p_ptr->start_race);
 	wr_s32b(p_ptr->old_race1);
 	wr_s32b(p_ptr->old_race2);
 	wr_s16b(p_ptr->old_realm);
 
 	for (i = 0; i < MAX_MANE; i++)
 	{
-		wr_s16b(p_ptr->mane_spell[i]);
-		wr_s16b(p_ptr->mane_dam[i]);
+		wr_s16b((s16b)p_ptr->mane_spell[i]);
+		wr_s16b((s16b)p_ptr->mane_dam[i]);
 	}
 	wr_s16b(p_ptr->mane_num);
 
@@ -690,8 +680,8 @@ static void wr_extra(void)
 	wr_byte(p_ptr->exit_bldg);
 	wr_byte(0); /* Unused */
 
-	wr_s16b(p_ptr->oldpx);
-	wr_s16b(p_ptr->oldpy);
+	wr_s16b((s16b)p_ptr->oldpx);
+	wr_s16b((s16b)p_ptr->oldpy);
 
 	/* Was number of p_ptr->rewards[] */
 	wr_s16b(0);
@@ -709,13 +699,13 @@ static void wr_extra(void)
 	tmp8u = (byte)max_d_idx;
 	wr_byte(tmp8u);
 	for (i = 0; i < tmp8u; i++)
-		wr_s16b(max_dlv[i]);
+		wr_s16b((s16b)max_dlv[i]);
 
 	/* More info */
-	wr_s16b(0);     /* oops */
-	wr_s16b(0);     /* oops */
-	wr_s16b(0);     /* oops */
-	wr_s16b(0);     /* oops */
+	wr_s16b(0);
+	wr_s16b(0);
+	wr_s16b(0);
+	wr_s16b(0);
 	wr_s16b(p_ptr->sc);
 	wr_s16b(p_ptr->concent);
 
@@ -767,7 +757,7 @@ static void wr_extra(void)
 	wr_s16b(p_ptr->magicdef);
 	wr_s16b(p_ptr->tim_res_nether);
 	wr_s16b(p_ptr->tim_res_time);
-	wr_byte(p_ptr->mimic_form);
+	wr_byte((byte)p_ptr->mimic_form);
 	wr_s16b(p_ptr->tim_mimic);
 	wr_s16b(p_ptr->tim_sh_fire);
 	wr_s16b(p_ptr->tim_sh_holy);
@@ -794,8 +784,8 @@ static void wr_extra(void)
 	wr_u32b(p_ptr->special_defense);
 	wr_byte(p_ptr->knowledge);
 	wr_byte(p_ptr->autopick_autoregister);
-	wr_byte(0);     /* oops */
-	wr_byte(p_ptr->action);
+	wr_byte(0);
+	wr_byte((byte_hack)p_ptr->action);
 	wr_byte(0);
 	wr_byte(preserve_mode);
 	wr_byte(p_ptr->wait_report_score);
@@ -804,9 +794,9 @@ static void wr_extra(void)
 	for (i = 0; i < 12; i++) wr_u32b(0L);
 
 	/* Ignore some flags */
-	wr_u32b(0L);    /* oops */
-	wr_u32b(0L);    /* oops */
-	wr_u32b(0L);    /* oops */
+	wr_u32b(0L);
+	wr_u32b(0L);
+	wr_u32b(0L);
 
 
 	/* Write the "object seeds" */
@@ -931,27 +921,27 @@ static void wr_saved_floor(saved_floor_type *sf_ptr)
 	{
 		/*** Not a saved floor ***/
 
-		wr_s16b(dun_level);
+		wr_s16b((s16b)dun_level);
 	}
 	else
 	{
 		/*** The saved floor ***/
 
 		wr_s16b(sf_ptr->floor_id);
-		wr_byte(sf_ptr->savefile_id);
-		wr_s16b(sf_ptr->dun_level);
+		wr_byte((byte_hack)sf_ptr->savefile_id);
+		wr_s16b((s16b)sf_ptr->dun_level);
 		wr_s32b(sf_ptr->last_visit);
 		wr_u32b(sf_ptr->visit_mark);
 		wr_s16b(sf_ptr->upper_floor_id);
 		wr_s16b(sf_ptr->lower_floor_id);
 	}
 
-	wr_u16b(base_level);
-	wr_u16b(num_repro);
-	wr_u16b((u16b)py);
-	wr_u16b((u16b)px);
-	wr_u16b(cur_hgt);
-	wr_u16b(cur_wid);
+	wr_u16b((u16b)base_level);
+	wr_u16b((s16b)num_repro);
+	wr_u16b((u16b)p_ptr->y);
+	wr_u16b((u16b)p_ptr->x);
+	wr_u16b((u16b)cur_hgt);
+	wr_u16b((u16b)cur_wid);
 	wr_byte(p_ptr->feeling);
 
 
@@ -1041,7 +1031,7 @@ static void wr_saved_floor(saved_floor_type *sf_ptr)
 		cave_template_type *ct_ptr = &templates[i];
 
 		/* Dump it */
-		wr_u16b(ct_ptr->info);
+		wr_u16b((u16b)ct_ptr->info);
 		wr_s16b(ct_ptr->feat);
 		wr_s16b(ct_ptr->mimic);
 		wr_s16b(ct_ptr->special);
@@ -1072,7 +1062,7 @@ static void wr_saved_floor(saved_floor_type *sf_ptr)
 			}
 
 			/* Extract an ID */
-			tmp16u = i;
+			tmp16u = (u16b)i;
 
 			/* If the run is broken, or too full, flush it */
 			if ((tmp16u != prev_u16b) || (count == MAX_UCHAR))
@@ -1159,29 +1149,21 @@ static bool wr_dungeon(void)
 	saved_floor_type *cur_sf_ptr;
 	int i;
 
-	/* Forget the lite */
 	forget_lite();
-
-	/* Forget the view */
 	forget_view();
-
-	/* Forget the view */
 	clear_mon_lite();
 
 	/* Update lite/view */
 	p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
-
-	/* Update monsters */
 	p_ptr->update |= (PU_MONSTERS | PU_DISTANCE | PU_FLOW);
 
-
 	/*** Meta info ***/
 
 	/* Number of floor_id used from birth */
 	wr_s16b(max_floor_id);
 
 	/* Current dungeon type */
-	wr_byte(dungeon_type);
+	wr_byte((byte_hack)dungeon_type);
 
 
 	/*** No saved floor (On the surface etc.) ***/
@@ -1209,8 +1191,8 @@ static bool wr_dungeon(void)
 		saved_floor_type *sf_ptr = &saved_floors[i];
 
 		wr_s16b(sf_ptr->floor_id);
-		wr_byte(sf_ptr->savefile_id);
-		wr_s16b(sf_ptr->dun_level);
+		wr_byte((byte_hack)sf_ptr->savefile_id);
+		wr_s16b((s16b)sf_ptr->dun_level);
 		wr_s32b(sf_ptr->last_visit);
 		wr_u32b(sf_ptr->visit_mark);
 		wr_s16b(sf_ptr->upper_floor_id);
@@ -1268,7 +1250,10 @@ static bool wr_savefile_new(void)
 
 	byte            tmp8u;
 	u16b            tmp16u;
+	u32b            tmp32u;
 
+	MONRACE_IDX r_idx;
+	KIND_OBJECT_IDX k_idx;
 
 	/* Compact the objects */
 	compact_objects(0);
@@ -1276,7 +1261,7 @@ static bool wr_savefile_new(void)
 	compact_monsters(0);
 
 	/* Guess at the current time */
-	now = time((time_t *)0);
+	now = (u32b)time((time_t *)0);
 
 
 	/* Note the operating system */
@@ -1357,41 +1342,39 @@ static bool wr_savefile_new(void)
 
 
 	/* Dump the number of "messages" */
-	tmp16u = message_num();
-	if (compress_savefile && (tmp16u > 40)) tmp16u = 40;
-	wr_u16b(tmp16u);
+	tmp32u = message_num();
+	if (compress_savefile && (tmp32u > 40)) tmp32u = 40;
+	wr_u32b(tmp32u);
 
 	/* Dump the messages (oldest first!) */
-	for (i = tmp16u - 1; i >= 0; i--)
+	for (i = tmp32u - 1; i >= 0; i--)
 	{
 		wr_string(message_str((s16b)i));
 	}
 
-
 	/* Dump the monster lore */
 	tmp16u = max_r_idx;
 	wr_u16b(tmp16u);
-	for (i = 0; i < tmp16u; i++) wr_lore(i);
-
+	for (r_idx = 0; r_idx < tmp16u; r_idx++) wr_lore(r_idx);
 
 	/* Dump the object memory */
 	tmp16u = max_k_idx;
 	wr_u16b(tmp16u);
-	for (i = 0; i < tmp16u; i++) wr_xtra(i);
+	for (k_idx = 0; k_idx < tmp16u; k_idx++) wr_xtra(k_idx);
 
 	/* Dump the towns */
 	tmp16u = max_towns;
 	wr_u16b(tmp16u);
 
 	/* Dump the quests */
-	tmp16u = max_quests;
+	tmp16u = max_q_idx;
 	wr_u16b(tmp16u);
 
 	/* Dump the quests */
 	tmp8u = MAX_RANDOM_QUEST-MIN_RANDOM_QUEST;
 	wr_byte(tmp8u);
 
-	for (i = 0; i < max_quests; i++)
+	for (i = 0; i < max_q_idx; i++)
 	{
 		quest_type* const q_ptr = &quest[i];
 
@@ -1400,21 +1383,21 @@ static bool wr_savefile_new(void)
 
 		/* And the dungeon level too */
 		/* (prevents problems with multi-level quests) */
-		wr_s16b(q_ptr->level);
+		wr_s16b((s16b)q_ptr->level);
 
-		wr_byte(q_ptr->complev);
+		wr_byte((byte_hack)q_ptr->complev);
 		wr_u32b(q_ptr->comptime);
 
 		/* Save quest status if quest is running */
 		if (q_ptr->status == QUEST_STATUS_TAKEN || q_ptr->status == QUEST_STATUS_COMPLETED || !is_fixed_quest_idx(i))
 		{
-			wr_s16b(q_ptr->cur_num);
-			wr_s16b(q_ptr->max_num);
+			wr_s16b((s16b)q_ptr->cur_num);
+			wr_s16b((s16b)q_ptr->max_num);
 			wr_s16b(q_ptr->type);
 			wr_s16b(q_ptr->r_idx);
 			wr_s16b(q_ptr->k_idx);
-			wr_byte(q_ptr->flags);
-			wr_byte(q_ptr->dungeon);
+			wr_byte((byte_hack)q_ptr->flags);
+			wr_byte((byte_hack)q_ptr->dungeon);
 		}
 	}
 
@@ -1457,7 +1440,7 @@ static bool wr_savefile_new(void)
 	wr_u16b(tmp16u);
 	for (i = 0; i < tmp16u; i++)
 	{
-		wr_s16b(p_ptr->player_hp[i]);
+		wr_s16b((s16b)p_ptr->player_hp[i]);
 	}
 
 
@@ -1475,7 +1458,7 @@ static bool wr_savefile_new(void)
 	/* Dump the ordered spells */
 	for (i = 0; i < 64; i++)
 	{
-		wr_byte(p_ptr->spell_order[i]);
+		wr_byte((byte_hack)p_ptr->spell_order[i]);
 	}
 
 
@@ -1562,25 +1545,20 @@ static bool wr_savefile_new(void)
  * Medium level player saver
  * @return 成功すればtrue
  * @details
- * XXX XXX XXX Angband 2.8.0 will use "fd" instead of "fff" if possible
+ * Angband 2.8.0 will use "fd" instead of "fff" if possible
  */
 static bool save_player_aux(char *name)
 {
-	bool    ok = FALSE;
-
-	int             fd = -1;
-
-	int             mode = 0644;
-
+	bool ok = FALSE;
+	int fd = -1;
+	int mode = 0644;
 
 	/* No file yet */
 	fff = NULL;
 
-
 	/* File type is "SAVE" */
 	FILE_TYPE(FILE_TYPE_SAVE);
 
-
 	/* Grab permissions */
 	safe_setuid_grab();
 
@@ -1647,9 +1625,9 @@ static bool save_player_aux(char *name)
  */
 bool save_player(void)
 {
-	int             result = FALSE;
+	bool result = FALSE;
 
-	char    safe[1024];
+	char safe[1024];
 
 
 #ifdef SET_UID
@@ -1668,12 +1646,6 @@ bool save_player(void)
 	strcpy(safe, savefile);
 	strcat(safe, ".new");
 
-#ifdef VM
-	/* Hack -- support "flat directory" usage on VM/ESA */
-	strcpy(safe, savefile);
-	strcat(safe, "n");
-#endif /* VM */
-
 	/* Grab permissions */
 	safe_setuid_grab();
 
@@ -1694,12 +1666,6 @@ bool save_player(void)
 		strcpy(temp, savefile);
 		strcat(temp, ".old");
 
-#ifdef VM
-		/* Hack -- support "flat directory" usage on VM/ESA */
-		strcpy(temp, savefile);
-		strcat(temp, "o");
-#endif /* VM */
-
 		/* Grab permissions */
 		safe_setuid_grab();
 
@@ -1812,9 +1778,9 @@ bool load_player(void)
 	if (!savefile[0]) return (TRUE);
 
 
-#if !defined(MACINTOSH) && !defined(WINDOWS) && !defined(VM)
+#if !defined(MACINTOSH) && !defined(WINDOWS)
 
-	/* XXX XXX XXX Fix this */
+	/* Fix this */
 
 	/* Verify the existance of the savefile */
 	if (access(savefile, 0) < 0)
@@ -1850,14 +1816,11 @@ bool load_player(void)
 		/* Oops, lock exists */
 		if (fkk)
 		{
-			/* Close the file */
 			my_fclose(fkk);
 
-			/* Message */
 			msg_print(_("セーブファイルは現在使用中です。", "Savefile is currently in use."));
 			msg_print(NULL);
 
-			/* Oops */
 			return (FALSE);
 		}
 
@@ -1874,7 +1837,6 @@ bool load_player(void)
 #endif
 
 
-	/* Okay */
 	if (!err)
 	{
 		/* Open the savefile */
@@ -1901,8 +1863,6 @@ bool load_player(void)
 
 		/* What */
 		if (err) what = _("セーブファイルを読めません。", "Cannot read savefile");
-
-		/* Close the file */
 		(void)fd_close(fd);
 	}
 
@@ -1916,8 +1876,6 @@ bool load_player(void)
 		z_patch = vvv[2];
 		sf_extra = vvv[3];
 
-
-		/* Clear screen */
 		Term_clear();
 
 		/* Attempt to load */
@@ -1945,17 +1903,14 @@ bool load_player(void)
 		if (sf_when > (statbuf.st_ctime + 100) ||
 		    sf_when < (statbuf.st_ctime - 100))
 		{
-			/* Message */
 			what = _("無効なタイム・スタンプです", "Invalid timestamp");
 
-			/* Oops */
 			err = -1;
 		}
 	}
 #endif
 
 
-	/* Okay */
 	if (!err)
 	{
 		/* Give a conversion warning */
@@ -1969,14 +1924,8 @@ bool load_player(void)
 			}
 			else
 			{
-				/* Message */
-#ifdef JP
-				msg_format("バージョン %d.%d.%d 用のセーブ・ファイルを変換しました。",
-				    (z_major > 9) ? z_major-10 : z_major , z_minor, z_patch);
-#else
-				msg_format("Converted a %d.%d.%d savefile.",
+				msg_format(_("バージョン %d.%d.%d 用のセーブ・ファイルを変換しました。", "Converted a %d.%d.%d savefile."),
 				    (z_major > 9) ? z_major-10 : z_major , z_minor, z_patch);
-#endif
 			}
 			msg_print(NULL);
 		}
@@ -1989,8 +1938,6 @@ bool load_player(void)
 			{
 				/* A character was loaded */
 				character_loaded = TRUE;
-
-				/* Done */
 				return (TRUE);
 			}
 
@@ -2000,7 +1947,6 @@ bool load_player(void)
 			/* Count lives */
 			sf_lives++;
 
-			/* Done */
 			return (TRUE);
 		}
 
@@ -2038,22 +1984,18 @@ bool load_player(void)
 
 #endif
 
+	msg_format(_("エラー(%s)がバージョン%d.%d.%d 用セーブファイル読み込み中に発生。", "Error (%s) reading %d.%d.%d savefile."),
+		what, (z_major>9) ? z_major - 10 : z_major, z_minor, z_patch);
 
-	/* Message */
-#ifdef JP
-	msg_format("エラー(%s)がバージョン%d.%d.%d 用セーブファイル読み込中に発生。",
-		   what, (z_major>9) ? z_major - 10 : z_major, z_minor, z_patch);
-#else
-	msg_format("Error (%s) reading %d.%d.%d savefile.",
-		   what, (z_major>9) ? z_major - 10 : z_major, z_minor, z_patch);
-#endif
 	msg_print(NULL);
 
-	/* Oops */
 	return (FALSE);
 }
 
-
+/*!
+ * @brief ファイルロック処理
+ * @return なし
+ */
 void remove_loc(void)
 {
 #ifdef VERIFY_SAVEFILE
@@ -2092,8 +2034,10 @@ void remove_loc(void)
 }
 
 
-/*
- * Actually write a temporal saved floor file
+/*!
+ * @brief ゲームプレイ中のフロア一時保存出力処理サブルーチン / Actually write a temporal saved floor file
+ * @param sf_ptr 保存フロア参照ポインタ
+ * @return なし
  */
 static bool save_floor_aux(saved_floor_type *sf_ptr)
 {
@@ -2139,10 +2083,13 @@ static bool save_floor_aux(saved_floor_type *sf_ptr)
 }
 
 
-/*
- * Attempt to save the temporally saved-floor data
+/*!
+ * @brief ゲームプレイ中のフロア一時保存出力処理メインルーチン / Attempt to save the temporally saved-floor data
+ * @param sf_ptr 保存フロア参照ポインタ
+ * @param mode 保存オプション
+ * @return なし
  */
-bool save_floor(saved_floor_type *sf_ptr, u32b mode)
+bool save_floor(saved_floor_type *sf_ptr, BIT_FLAGS mode)
 {
 	FILE *old_fff = NULL;
 	byte old_xor_byte = 0;