From 10ce32654e765e8662da21dde8cfc3d1ea96f5c0 Mon Sep 17 00:00:00 2001 From: Hourier <66951241+Hourier@users.noreply.github.com> Date: Sun, 10 Dec 2023 10:44:01 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#1372=20=E3=83=90=E3=83=BC=E3=82=B8?= =?utf8?q?=E3=83=A7=E3=83=B3=E6=83=85=E5=A0=B1=E3=82=92AngbandWorld=20?= =?utf8?q?=E3=81=8B=E3=82=89AngbandSystem=20=E3=81=B8=E7=A7=BB=E3=81=97?= =?utf8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/load/angband-version-comparer.cpp | 39 +++++++++++++++++++++-------------- src/load/floor-loader.cpp | 28 +++++++++++++------------ src/load/info-loader.cpp | 29 +++++++++++++------------- src/load/load.cpp | 6 ++++-- src/system/angband-system.h | 7 +++++++ src/world/world.h | 5 ----- 6 files changed, 65 insertions(+), 49 deletions(-) diff --git a/src/load/angband-version-comparer.cpp b/src/load/angband-version-comparer.cpp index d8771bac3..fddf64d5c 100644 --- a/src/load/angband-version-comparer.cpp +++ b/src/load/angband-version-comparer.cpp @@ -1,6 +1,6 @@ #include "load/angband-version-comparer.h" +#include "system/angband-system.h" #include "system/angband-version.h" -#include "world/world.h" /*! * @brief 変愚蛮怒のバージョン比較処理 / This function determines if the version of the savefile currently being read is older than version @@ -17,31 +17,36 @@ bool h_older_than(byte major, byte minor, byte patch, byte extra) return false; } - if (w_ptr->h_ver_major < major) { + const auto &system = AngbandSystem::get_instance(); + if (system.h_ver_major < major) { return true; } - if (w_ptr->h_ver_major > major) { + + if (system.h_ver_major > major) { return false; } - if (w_ptr->h_ver_minor < minor) { + if (system.h_ver_minor < minor) { return true; } - if (w_ptr->h_ver_minor > minor) { + + if (system.h_ver_minor > minor) { return false; } - if (w_ptr->h_ver_patch < patch) { + if (system.h_ver_patch < patch) { return true; } - if (w_ptr->h_ver_patch > patch) { + + if (system.h_ver_patch > patch) { return false; } - if (w_ptr->h_ver_extra < extra) { + if (system.h_ver_extra < extra) { return true; } - if (w_ptr->h_ver_extra > extra) { + + if (system.h_ver_extra > extra) { return false; } @@ -63,24 +68,28 @@ bool h_older_than(byte major, byte minor, byte patch) return false; } - if (w_ptr->h_ver_major < major) { + const auto &system = AngbandSystem::get_instance(); + if (system.h_ver_major < major) { return true; } - if (w_ptr->h_ver_major > major) { + + if (system.h_ver_major > major) { return false; } - if (w_ptr->h_ver_minor < minor) { + if (system.h_ver_minor < minor) { return true; } - if (w_ptr->h_ver_minor > minor) { + + if (system.h_ver_minor > minor) { return false; } - if (w_ptr->h_ver_patch < patch) { + if (system.h_ver_patch < patch) { return true; } - if (w_ptr->h_ver_patch > patch) { + + if (system.h_ver_patch > patch) { return false; } diff --git a/src/load/floor-loader.cpp b/src/load/floor-loader.cpp index 030e0020b..1e4102743 100644 --- a/src/load/floor-loader.cpp +++ b/src/load/floor-loader.cpp @@ -19,6 +19,7 @@ #include "monster/monster-info.h" #include "monster/monster-list.h" #include "save/floor-writer.h" +#include "system/angband-system.h" #include "system/angband-version.h" #include "system/floor-type-definition.h" #include "system/grid-type-definition.h" @@ -28,7 +29,6 @@ #include "term/z-form.h" #include "util/angband-files.h" #include "world/world-object.h" -#include "world/world.h" /*! * @brief 保存されたフロアを読み込む / Read the saved floor @@ -216,10 +216,11 @@ static bool load_floor_aux(PlayerType *player_ptr, saved_floor_type *sf_ptr) v_check = 0L; x_check = 0L; - w_ptr->h_ver_extra = H_VER_EXTRA; - w_ptr->h_ver_patch = H_VER_PATCH; - w_ptr->h_ver_minor = H_VER_MINOR; - w_ptr->h_ver_major = H_VER_MAJOR; + auto &system = AngbandSystem::get_instance(); + system.h_ver_extra = H_VER_EXTRA; + system.h_ver_patch = H_VER_PATCH; + system.h_ver_minor = H_VER_MINOR; + system.h_ver_major = H_VER_MAJOR; loading_savefile_version = SAVEFILE_VERSION; if (saved_floor_file_sign != rd_u32b()) { @@ -272,15 +273,16 @@ bool load_floor(PlayerType *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode byte old_h_ver_patch = 0; byte old_h_ver_extra = 0; uint32_t old_loading_savefile_version = 0; + auto &system = AngbandSystem::get_instance(); 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 = w_ptr->h_ver_major; - old_h_ver_minor = w_ptr->h_ver_minor; - old_h_ver_patch = w_ptr->h_ver_patch; - old_h_ver_extra = w_ptr->h_ver_extra; + old_h_ver_major = system.h_ver_major; + old_h_ver_minor = system.h_ver_minor; + old_h_ver_patch = system.h_ver_patch; + old_h_ver_extra = system.h_ver_extra; old_loading_savefile_version = loading_savefile_version; } @@ -318,10 +320,10 @@ bool load_floor(PlayerType *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode load_xor_byte = old_xor_byte; v_check = old_v_check; x_check = old_x_check; - w_ptr->h_ver_major = old_h_ver_major; - w_ptr->h_ver_minor = old_h_ver_minor; - w_ptr->h_ver_patch = old_h_ver_patch; - w_ptr->h_ver_extra = old_h_ver_extra; + system.h_ver_major = old_h_ver_major; + system.h_ver_minor = old_h_ver_minor; + system.h_ver_patch = old_h_ver_patch; + system.h_ver_extra = old_h_ver_extra; loading_savefile_version = old_loading_savefile_version; } diff --git a/src/load/info-loader.cpp b/src/load/info-loader.cpp index 201693ebb..aa7a16673 100644 --- a/src/load/info-loader.cpp +++ b/src/load/info-loader.cpp @@ -3,6 +3,7 @@ #include "load/angband-version-comparer.h" #include "load/load-util.h" #include "load/option-loader.h" +#include "system/angband-system.h" #include "system/angband-version.h" #include "system/angband.h" #include "view/display-messages.h" @@ -19,13 +20,14 @@ void rd_version_info(void) auto tmp_major = rd_byte(); auto is_old_ver = (10 <= tmp_major) && (tmp_major <= 13); constexpr auto variant_length = VARIANT_NAME.length(); + auto &system = AngbandSystem::get_instance(); if (tmp_major == variant_length) { strip_bytes(variant_length); load_xor_byte = 0; - w_ptr->h_ver_major = rd_byte(); - w_ptr->h_ver_minor = rd_byte(); - w_ptr->h_ver_patch = rd_byte(); - w_ptr->h_ver_extra = rd_byte(); + system.h_ver_major = rd_byte(); + system.h_ver_minor = rd_byte(); + system.h_ver_patch = rd_byte(); + system.h_ver_extra = rd_byte(); strip_bytes(1); } else if (is_old_ver) { strip_bytes(3); @@ -39,10 +41,10 @@ void rd_version_info(void) if (is_old_ver) { /* Old savefile will be version 0.0.0.3 */ - w_ptr->h_ver_extra = rd_byte(); - w_ptr->h_ver_patch = rd_byte(); - w_ptr->h_ver_minor = rd_byte(); - w_ptr->h_ver_major = rd_byte(); + system.h_ver_extra = rd_byte(); + system.h_ver_patch = rd_byte(); + system.h_ver_minor = rd_byte(); + system.h_ver_major = rd_byte(); } w_ptr->sf_system = rd_u32b(); @@ -55,14 +57,13 @@ void rd_version_info(void) /* h_ver_majorがfake_ver_majorと同じだったころへの対策 */ if (loading_savefile_version_is_older_than(10)) { constexpr auto fake_ver_plus = 10; - if (tmp_major - w_ptr->h_ver_major < fake_ver_plus) { - w_ptr->h_ver_major -= fake_ver_plus; + if (tmp_major - system.h_ver_major < fake_ver_plus) { + system.h_ver_major -= fake_ver_plus; } } - load_note(format(_("バージョン %d.%d.%d のセーブデータ(SAVE%u形式)をロード中...", "Loading a version %d.%d.%d savefile (SAVE%u format)..."), - w_ptr->h_ver_major, w_ptr->h_ver_minor, w_ptr->h_ver_patch, - loading_savefile_version)); + constexpr auto fmt = _("バージョン %d.%d.%d のセーブデータ(SAVE%u形式)をロード中...", "Loading a version %d.%d.%d savefile (SAVE%u format)..."); + load_note(format(fmt, system.h_ver_major, system.h_ver_minor, system.h_ver_patch, loading_savefile_version)); } /*! @@ -72,7 +73,7 @@ void rd_randomizer(void) { strip_bytes(4); - Xoshiro128StarStar::state_type state; + Xoshiro128StarStar::state_type state{}; for (auto &s : state) { s = rd_u32b(); } diff --git a/src/load/load.cpp b/src/load/load.cpp index 5d13b9423..103cbcc16 100644 --- a/src/load/load.cpp +++ b/src/load/load.cpp @@ -41,6 +41,7 @@ #include "player/player-sex.h" #include "player/race-info-table.h" #include "system/angband-exceptions.h" +#include "system/angband-system.h" #include "system/angband-version.h" #include "system/player-type-definition.h" #include "system/system-variables.h" @@ -441,8 +442,9 @@ bool load_savedata(PlayerType *player_ptr, bool *new_game) } if (err) { - msg_format(_("エラー(%s)がバージョン %d.%d.%d.%d 用セーブファイル読み込み中に発生。", "Error (%s) reading %d.%d.%d.%d savefile."), what, - w_ptr->h_ver_major, w_ptr->h_ver_minor, w_ptr->h_ver_patch, w_ptr->h_ver_extra); + auto &system = AngbandSystem::get_instance(); + constexpr auto fmt = _("エラー(%s)がバージョン %d.%d.%d.%d 用セーブファイル読み込み中に発生。", "Error (%s) reading %d.%d.%d.%d savefile."); + msg_format(fmt, what, system.h_ver_major, system.h_ver_minor, system.h_ver_patch, system.h_ver_extra); msg_print(nullptr); return false; } diff --git a/src/system/angband-system.h b/src/system/angband-system.h index 9ed668dc6..14a8595f6 100644 --- a/src/system/angband-system.h +++ b/src/system/angband-system.h @@ -1,5 +1,7 @@ #pragma once +#include + class AngbandSystem { public: AngbandSystem(const AngbandSystem &) = delete; @@ -12,6 +14,11 @@ public: bool is_phase_out() const; int get_max_range() const; + uint8_t h_ver_major{}; //!< 変愚蛮怒バージョン(メジャー番号) / Hengband version (major ver.) + uint8_t h_ver_minor{}; //!< 変愚蛮怒バージョン(マイナー番号) / Hengband version (minor ver.) + uint8_t h_ver_patch{}; //!< 変愚蛮怒バージョン(パッチ番号) / Hengband version (patch ver.) + uint8_t h_ver_extra{}; //!< 変愚蛮怒バージョン(エクストラ番号) / Hengband version (extra ver.) + private: AngbandSystem() = default; diff --git a/src/world/world.h b/src/world/world.h index 73fa029e2..81ac03ab2 100644 --- a/src/world/world.h +++ b/src/world/world.h @@ -43,11 +43,6 @@ public: bool is_loading_now{}; /*!< ロード処理中フラグ...ロード直後にcalc_bonus()時の徳変化、及びsanity_blast()による異常を抑止する */ - byte h_ver_major{}; //!< 変愚蛮怒バージョン(メジャー番号) / Hengband version (major ver.) - byte h_ver_minor{}; //!< 変愚蛮怒バージョン(マイナー番号) / Hengband version (minor ver.) - byte h_ver_patch{}; //!< 変愚蛮怒バージョン(パッチ番号) / Hengband version (patch ver.) - byte h_ver_extra{}; //!< 変愚蛮怒バージョン(エクストラ番号) / Hengband version (extra ver.) - byte sf_extra{}; //!< セーブファイルエンコードキー(XOR) uint32_t sf_system{}; //!< OS情報 / OS information -- 2.11.0