#include "player/player-class.h"
#include "player/player-personalities-types.h"
#include "player/special-defense-types.h"
-#include "savedata/load.h"
+#include "savedata/floor-loader.h"
#include "savedata/save.h"
#include "spell-kind/spells-floor.h"
#include "system/system-variables.h"
#include "savedata/floor-loader.h"
#include "savedata/load-util.h"
#include "savedata/load-v1-5-0.h"
-#include "savedata/load.h" // 暫定、load_floor().
#include "savedata/save.h"
#include "world/world.h"
#include "game-option/birth-options.h"
#include "grid/feature.h"
#include "grid/grid.h"
+#include "io/files-util.h"
+#include "io/uid-checker.h"
#include "monster-race/monster-race.h"
#include "monster/monster-info.h"
#include "monster/monster-list.h"
#include "savedata/load-util.h"
#include "savedata/load-v1-5-0.h"
#include "savedata/old-feature-types.h"
+#include "savedata/save.h"
+#include "system/angband-version.h"
#include "system/object-type-definition.h"
+#include "util/angband-files.h"
#include "world/world-object.h"
#include "world/world.h"
return 0;
}
+
+/*!
+ * @brief 保存フロア読み込みのサブ関数 / Actually load and verify a floor save data
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @param sf_ptr 保存フロア読み込み先
+ * @return 成功したらtrue
+ */
+static bool load_floor_aux(player_type *player_ptr, saved_floor_type *sf_ptr)
+{
+ u32b n_x_check, n_v_check;
+ u32b o_x_check, o_v_check;
+
+ load_xor_byte = 0;
+ byte tmp8u;
+ rd_byte(&tmp8u);
+
+ v_check = 0L;
+ x_check = 0L;
+
+ current_world_ptr->h_ver_extra = H_VER_EXTRA;
+ current_world_ptr->h_ver_patch = H_VER_PATCH;
+ current_world_ptr->h_ver_minor = H_VER_MINOR;
+ current_world_ptr->h_ver_major = H_VER_MAJOR;
+
+ u32b tmp32u;
+ rd_u32b(&tmp32u);
+ if (saved_floor_file_sign != tmp32u)
+ return FALSE;
+
+ if (rd_saved_floor(player_ptr, sf_ptr))
+ return FALSE;
+
+ n_v_check = v_check;
+ rd_u32b(&o_v_check);
+
+ if (o_v_check != n_v_check)
+ return FALSE;
+
+ n_x_check = x_check;
+ rd_u32b(&o_x_check);
+
+ if (o_x_check != n_x_check)
+ return FALSE;
+ return TRUE;
+}
+
+/*!
+ * @brief 一時保存フロア情報を読み込む / Attempt to load the temporarily saved-floor data
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @param sf_ptr 保存フロア読み込み先
+ * @param mode オプション
+ * @return 成功したらtrue
+ */
+bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode)
+{
+ /*
+ * Temporary files are always written in system depended kanji
+ * code.
+ */
+#ifdef JP
+#ifdef EUC
+ kanji_code = 2;
+#endif
+#ifdef SJIS
+ kanji_code = 3;
+#endif
+#else
+ kanji_code = 1;
+#endif
+
+ FILE *old_fff = NULL;
+ byte old_xor_byte = 0;
+ u32b old_v_check = 0;
+ u32b old_x_check = 0;
+ byte old_h_ver_major = 0;
+ byte old_h_ver_minor = 0;
+ byte old_h_ver_patch = 0;
+ byte old_h_ver_extra = 0;
+ if (mode & SLF_SECOND) {
+ old_fff = loading_savefile;
+ old_xor_byte = load_xor_byte;
+ old_v_check = v_check;
+ old_x_check = x_check;
+ old_h_ver_major = current_world_ptr->h_ver_major;
+ old_h_ver_minor = current_world_ptr->h_ver_minor;
+ old_h_ver_patch = current_world_ptr->h_ver_patch;
+ old_h_ver_extra = current_world_ptr->h_ver_extra;
+ }
+
+ char floor_savefile[1024];
+ sprintf(floor_savefile, "%s.F%02d", savefile, (int)sf_ptr->savefile_id);
+
+ safe_setuid_grab(player_ptr);
+ loading_savefile = angband_fopen(floor_savefile, "rb");
+ safe_setuid_drop();
+
+ bool is_save_successful = TRUE;
+ if (!loading_savefile)
+ is_save_successful = FALSE;
+
+ if (is_save_successful) {
+ is_save_successful = load_floor_aux(player_ptr, sf_ptr);
+ if (ferror(loading_savefile))
+ is_save_successful = FALSE;
+
+ angband_fclose(loading_savefile);
+ safe_setuid_grab(player_ptr);
+ if (!(mode & SLF_NO_KILL))
+ (void)fd_kill(floor_savefile);
+
+ safe_setuid_drop();
+ }
+
+ if (mode & SLF_SECOND) {
+ loading_savefile = old_fff;
+ load_xor_byte = old_xor_byte;
+ v_check = old_v_check;
+ x_check = old_x_check;
+ current_world_ptr->h_ver_major = old_h_ver_major;
+ current_world_ptr->h_ver_minor = old_h_ver_minor;
+ current_world_ptr->h_ver_patch = old_h_ver_patch;
+ current_world_ptr->h_ver_extra = old_h_ver_extra;
+ }
+
+ byte old_kanji_code = kanji_code;
+ kanji_code = old_kanji_code;
+ return is_save_successful;
+}
#include "floor/floor-save.h"
errr rd_saved_floor(player_type *player_ptr, saved_floor_type *sf_ptr);
+bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode);
safe_setuid_drop();
if (!loading_savefile)
return -1;
- errr err = rd_savefile_new_aux(player_ptr);
+ errr err = rd_savefile_new_aux(player_ptr);
if (ferror(loading_savefile))
err = -1;
+
angband_fclose(loading_savefile);
return err;
}
-
-/*!
- * @brief 保存フロア読み込みのサブ関数 / Actually load and verify a floor save data
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param sf_ptr 保存フロア読み込み先
- * @return 成功したらtrue
- */
-static bool load_floor_aux(player_type *player_ptr, saved_floor_type *sf_ptr)
-{
- u32b n_x_check, n_v_check;
- u32b o_x_check, o_v_check;
-
- load_xor_byte = 0;
- byte tmp8u;
- rd_byte(&tmp8u);
-
- v_check = 0L;
- x_check = 0L;
-
- current_world_ptr->h_ver_extra = H_VER_EXTRA;
- current_world_ptr->h_ver_patch = H_VER_PATCH;
- current_world_ptr->h_ver_minor = H_VER_MINOR;
- current_world_ptr->h_ver_major = H_VER_MAJOR;
-
- u32b tmp32u;
- rd_u32b(&tmp32u);
- if (saved_floor_file_sign != tmp32u)
- return FALSE;
-
- if (rd_saved_floor(player_ptr, sf_ptr))
- return FALSE;
-
- n_v_check = v_check;
- rd_u32b(&o_v_check);
-
- if (o_v_check != n_v_check)
- return FALSE;
-
- n_x_check = x_check;
- rd_u32b(&o_x_check);
-
- if (o_x_check != n_x_check)
- return FALSE;
- return TRUE;
-}
-
-/*!
- * @brief 一時保存フロア情報を読み込む / Attempt to load the temporarily saved-floor data
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param sf_ptr 保存フロア読み込み先
- * @param mode オプション
- * @return 成功したらtrue
- */
-bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode)
-{
- /*
- * Temporary files are always written in system depended kanji
- * code.
- */
-#ifdef JP
-#ifdef EUC
- kanji_code = 2;
-#endif
-#ifdef SJIS
- kanji_code = 3;
-#endif
-#else
- kanji_code = 1;
-#endif
-
- FILE *old_fff = NULL;
- byte old_xor_byte = 0;
- u32b old_v_check = 0;
- u32b old_x_check = 0;
- byte old_h_ver_major = 0;
- byte old_h_ver_minor = 0;
- byte old_h_ver_patch = 0;
- byte old_h_ver_extra = 0;
- if (mode & SLF_SECOND) {
- old_fff = loading_savefile;
- old_xor_byte = load_xor_byte;
- old_v_check = v_check;
- old_x_check = x_check;
- old_h_ver_major = current_world_ptr->h_ver_major;
- old_h_ver_minor = current_world_ptr->h_ver_minor;
- old_h_ver_patch = current_world_ptr->h_ver_patch;
- old_h_ver_extra = current_world_ptr->h_ver_extra;
- }
-
- char floor_savefile[1024];
- sprintf(floor_savefile, "%s.F%02d", savefile, (int)sf_ptr->savefile_id);
-
- safe_setuid_grab(player_ptr);
- loading_savefile = angband_fopen(floor_savefile, "rb");
- safe_setuid_drop();
-
- bool is_save_successful = TRUE;
- if (!loading_savefile)
- is_save_successful = FALSE;
-
- if (is_save_successful) {
- is_save_successful = load_floor_aux(player_ptr, sf_ptr);
- if (ferror(loading_savefile))
- is_save_successful = FALSE;
- angband_fclose(loading_savefile);
-
- safe_setuid_grab(player_ptr);
- if (!(mode & SLF_NO_KILL))
- (void)fd_kill(floor_savefile);
-
- safe_setuid_drop();
- }
-
- if (mode & SLF_SECOND) {
- loading_savefile = old_fff;
- load_xor_byte = old_xor_byte;
- v_check = old_v_check;
- x_check = old_x_check;
- current_world_ptr->h_ver_major = old_h_ver_major;
- current_world_ptr->h_ver_minor = old_h_ver_minor;
- current_world_ptr->h_ver_patch = old_h_ver_patch;
- current_world_ptr->h_ver_extra = old_h_ver_extra;
- }
-
- byte old_kanji_code = kanji_code;
- kanji_code = old_kanji_code;
- return is_save_successful;
-}
#include "system/angband.h"
errr rd_savefile_new(player_type *player_ptr);
-bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode);
#include "monster/monster-status.h"
#include "object-enchant/artifact.h"
#include "object/object-kind.h"
+#include "savedata/floor-loader.h"
#include "savedata/load.h"
#include "savedata/savedata-flag-types.h"
#include "store/store-util.h"