1 #include "load/option-loader.h"
2 #include "cmd-io/cmd-gameoption.h"
3 #include "game-option/cheat-options.h"
4 #include "game-option/option-flags.h"
5 #include "game-option/special-options.h"
6 #include "load/angband-version-comparer.h"
7 #include "load/load-util.h"
8 #include "load/load-zangband.h"
9 #include "system/angband.h"
10 #include "util/bit-flags-calculator.h"
11 #include "world/world.h"
14 * @brief ゲームオプションを読み込む / Read options (ignore most pre-2.8.0 options)
16 * Note that the normal options are now stored as a set of 256 bit flags,
17 * plus a set of 256 bit masks to indicate which bit flags were defined
18 * at the time the savefile was created. This will allow new options
19 * to be added, and old options to be removed, at any time, without
20 * hurting old savefiles.
22 * The window options are stored in the same way, but note that each
23 * window gets 32 options, and their order is fixed by certain defines.
29 if (loading_savefile_version_is_older_than(9)) {
31 delay_factor = b * b * b;
33 delay_factor = rd_s32b();
36 hitpoint_warn = rd_byte();
38 if (h_older_than(1, 7, 0, 0)) {
41 mana_warn = rd_byte();
50 cheat_peek = any_bits(c, 0x0100);
51 cheat_hear = any_bits(c, 0x0200);
52 cheat_room = any_bits(c, 0x0400);
53 cheat_xtra = any_bits(c, 0x0800);
54 cheat_know = any_bits(c, 0x1000);
55 cheat_live = any_bits(c, 0x2000);
56 cheat_save = any_bits(c, 0x4000);
57 cheat_diary_output = any_bits(c, 0x8000);
58 cheat_turn = any_bits(c, 0x0080);
59 cheat_sight = any_bits(c, 0x0040);
60 cheat_immortal = any_bits(c, 0x0020);
62 autosave_l = rd_byte() != 0;
63 autosave_t = rd_byte() != 0;
64 autosave_freq = rd_s16b();
67 for (int n = 0; n < 8; n++) {
72 for (int n = 0; n < 8; n++) {
76 for (auto n = 0; n < 8; n++) {
77 for (auto i = 0; i < 32; i++) {
78 if (none_bits(mask[n], 1U << i) || none_bits(option_mask[n], 1U << i)) {
82 if (flag[n] & (1UL << i)) {
83 option_flag[n] |= (1UL << i);
85 option_flag[n] &= ~(1UL << i);
90 if (h_older_than(0, 4, 5)) {
91 load_zangband_options();
94 extract_option_vars();
95 for (int n = 0; n < 8; n++) {
99 for (int n = 0; n < 8; n++) {
103 for (int n = 0; n < 8; n++) {
104 for (int i = 0; i < 32; i++) {
105 if (!(mask[n] & (1UL << i))) {
108 if (!(window_mask[n] & (1UL << i))) {
112 if (flag[n] & (1UL << i)) {
113 window_flag[n] |= (1UL << i);
115 window_flag[n] &= ~(1UL << i);