OSDN Git Service

[Refactor] #1372 バージョン情報をAngbandWorld からAngbandSystem へ移した
authorHourier <66951241+Hourier@users.noreply.github.com>
Sun, 10 Dec 2023 01:44:01 +0000 (10:44 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 6 Apr 2024 12:16:22 +0000 (21:16 +0900)
src/load/angband-version-comparer.cpp
src/load/floor-loader.cpp
src/load/info-loader.cpp
src/load/load.cpp
src/system/angband-system.h
src/world/world.h

index d8771ba..fddf64d 100644 (file)
@@ -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;
     }
 
index 030e002..1e41027 100644 (file)
@@ -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;
     }
 
index 201693e..aa7a166 100644 (file)
@@ -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();
     }
index 5d13b94..103cbcc 100644 (file)
@@ -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;
     }
index 9ed668d..14a8595 100644 (file)
@@ -1,5 +1,7 @@
 #pragma once
 
+#include <stdint.h>
+
 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;
 
index 73fa029..81ac03a 100644 (file)
@@ -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