1 #include "load/info-loader.h"
2 #include "game-option/runtime-arguments.h"
3 #include "load/angband-version-comparer.h"
4 #include "load/load-util.h"
5 #include "load/option-loader.h"
6 #include "system/angband-version.h"
7 #include "system/angband.h"
8 #include "view/display-messages.h"
9 #include "world/world.h"
12 * @brief セーブファイルからバージョン情報及びセーブ情報を取得する
14 * バージョン0.x.x時代のバージョン情報である場合、サポート対象外
15 * (FAKE_VERもH_VERも10台の数字のはず)
17 void rd_version_info(void)
19 auto tmp_major = rd_byte();
20 auto is_old_ver = (10 <= tmp_major) && (tmp_major <= 13);
21 constexpr auto variant_length = VARIANT_NAME.length();
22 if (tmp_major == variant_length) {
23 strip_bytes(variant_length);
25 w_ptr->h_ver_major = rd_byte();
26 w_ptr->h_ver_minor = rd_byte();
27 w_ptr->h_ver_patch = rd_byte();
28 w_ptr->h_ver_extra = rd_byte();
30 } else if (is_old_ver) {
33 throw("Invalid version is detected!");
36 load_xor_byte = w_ptr->sf_extra;
41 /* Old savefile will be version 0.0.0.3 */
42 w_ptr->h_ver_extra = rd_byte();
43 w_ptr->h_ver_patch = rd_byte();
44 w_ptr->h_ver_minor = rd_byte();
45 w_ptr->h_ver_major = rd_byte();
48 w_ptr->sf_system = rd_u32b();
49 w_ptr->sf_when = rd_u32b();
50 w_ptr->sf_lives = rd_u16b();
51 w_ptr->sf_saves = rd_u16b();
53 loading_savefile_version = rd_u32b();
55 /* h_ver_majorがfake_ver_majorと同じだったころへの対策 */
56 if (loading_savefile_version_is_older_than(10)) {
57 constexpr auto fake_ver_plus = 10;
58 if (tmp_major - w_ptr->h_ver_major < fake_ver_plus) {
59 w_ptr->h_ver_major -= fake_ver_plus;
63 load_note(format(_("バージョン %d.%d.%d のセーブデータ(SAVE%lu形式)をロード中...", "Loading a Verison %d.%d.%d savefile (SAVE%lu format)..."),
64 w_ptr->h_ver_major, w_ptr->h_ver_minor, w_ptr->h_ver_patch,
65 loading_savefile_version));
69 * @brief 乱数状態を読み込む / Read RNG state (added in 2.8.0)
71 void rd_randomizer(void)
75 Xoshiro128StarStar::state_type state;
76 for (auto &s : state) {
79 w_ptr->rng.set_state(state);
81 strip_bytes(4 * (RAND_DEG - state.size()));
85 * @brief メッセージログを読み込む / Read the saved messages
87 void rd_messages(void)
89 if (h_older_than(2, 2, 0, 75)) {
92 message_max = (int)num;
94 for (int i = 0; i < message_max; i++) {
96 rd_string(buf, sizeof(buf));
101 auto num = rd_u32b();
102 int message_max = (int)num;
103 for (int i = 0; i < message_max; i++) {
105 rd_string(buf, sizeof(buf));
110 void rd_system_info(void)
112 kanji_code = rd_byte();
114 load_note(_("乱数情報をロードしました", "Loaded Randomizer Info"));
116 load_note(_("オプションをロードしました", "Loaded Option Flags"));
118 load_note(_("メッセージをロードしました", "Loaded Messages"));