OSDN Git Service

d6ed3d0523024fe193f2541e5bf01de03a0a9f26
[hengband/hengband.git] / src / save / player-writer.c
1 #include "save/player-writer.h"
2 #include "cmd-building/cmd-building.h"
3 #include "dungeon/dungeon.h"
4 #include "game-option/birth-options.h"
5 #include "save/info-writer.h"
6 #include "save/save-util.h"
7 #include "system/floor-type-definition.h"
8 #include "world/world.h"
9
10 /*!
11  * @brief セーブデータにプレーヤー情報を書き込む / Write some "player" info
12  * @param creature_ptr プレーヤーへの参照ポインタ
13  * @return なし
14  */
15 void wr_player(player_type *creature_ptr)
16 {
17     wr_string(creature_ptr->name);
18     wr_string(creature_ptr->died_from);
19     wr_string(creature_ptr->last_message ? creature_ptr->last_message : "");
20
21     save_quick_start();
22     for (int i = 0; i < 4; i++)
23         wr_string(creature_ptr->history[i]);
24
25     wr_byte((byte)creature_ptr->prace);
26     wr_byte((byte)creature_ptr->pclass);
27     wr_byte((byte)creature_ptr->pseikaku);
28     wr_byte((byte)creature_ptr->psex);
29     wr_byte((byte)creature_ptr->realm1);
30     wr_byte((byte)creature_ptr->realm2);
31     wr_byte(0);
32
33     wr_byte((byte)creature_ptr->hitdie);
34     wr_u16b(creature_ptr->expfact);
35
36     wr_s16b(creature_ptr->age);
37     wr_s16b(creature_ptr->ht);
38     wr_s16b(creature_ptr->wt);
39
40     for (int i = 0; i < A_MAX; ++i)
41         wr_s16b(creature_ptr->stat_max[i]);
42
43     for (int i = 0; i < A_MAX; ++i)
44         wr_s16b(creature_ptr->stat_max_max[i]);
45
46     for (int i = 0; i < A_MAX; ++i)
47         wr_s16b(creature_ptr->stat_cur[i]);
48
49     for (int i = 0; i < 12; ++i)
50         wr_s16b(0);
51
52     wr_u32b(creature_ptr->au);
53     wr_u32b(creature_ptr->max_exp);
54     wr_u32b(creature_ptr->max_max_exp);
55     wr_u32b(creature_ptr->exp);
56     wr_u32b(creature_ptr->exp_frac);
57     wr_s16b(creature_ptr->lev);
58
59     for (int i = 0; i < 64; i++)
60         wr_s16b(creature_ptr->spell_exp[i]);
61
62     for (int i = 0; i < 5; i++)
63         for (int j = 0; j < 64; j++)
64             wr_s16b(creature_ptr->weapon_exp[i][j]);
65
66     for (int i = 0; i < GINOU_MAX; i++)
67         wr_s16b(creature_ptr->skill_exp[i]);
68
69     for (int i = 0; i < MAX_SPELLS; i++)
70         wr_s32b(creature_ptr->magic_num1[i]);
71
72     for (int i = 0; i < MAX_SPELLS; i++)
73         wr_byte(creature_ptr->magic_num2[i]);
74
75     wr_byte((byte)creature_ptr->start_race);
76     wr_s32b(creature_ptr->old_race1);
77     wr_s32b(creature_ptr->old_race2);
78     wr_s16b(creature_ptr->old_realm);
79     for (int i = 0; i < MAX_MANE; i++) {
80         wr_s16b((s16b)creature_ptr->mane_spell[i]);
81         wr_s16b((s16b)creature_ptr->mane_dam[i]);
82     }
83
84     wr_s16b(creature_ptr->mane_num);
85     for (int i = 0; i < MAX_BOUNTY; i++)
86         wr_s16b(current_world_ptr->bounty_r_idx[i]);
87
88     for (int i = 0; i < 4; i++) {
89         wr_s16b(battle_mon[i]);
90         wr_u32b(mon_odds[i]);
91     }
92
93     wr_s16b(creature_ptr->town_num);
94
95     wr_s16b(creature_ptr->arena_number);
96     wr_s16b(creature_ptr->current_floor_ptr->inside_arena);
97     wr_s16b(creature_ptr->current_floor_ptr->inside_quest);
98     wr_s16b(creature_ptr->phase_out);
99     wr_byte(creature_ptr->exit_bldg);
100     wr_byte(0); /* Unused */
101
102     wr_s16b((s16b)creature_ptr->oldpx);
103     wr_s16b((s16b)creature_ptr->oldpy);
104
105     wr_s16b(0);
106     wr_s32b(creature_ptr->mhp);
107     wr_s32b(creature_ptr->chp);
108     wr_u32b(creature_ptr->chp_frac);
109     wr_s32b(creature_ptr->msp);
110     wr_s32b(creature_ptr->csp);
111     wr_u32b(creature_ptr->csp_frac);
112     wr_s16b(creature_ptr->max_plv);
113
114     byte tmp8u = (byte)current_world_ptr->max_d_idx;
115     wr_byte(tmp8u);
116     for (int i = 0; i < tmp8u; i++)
117         wr_s16b((s16b)max_dlv[i]);
118
119     wr_s16b(0);
120     wr_s16b(0);
121     wr_s16b(0);
122     wr_s16b(0);
123     wr_s16b(creature_ptr->sc);
124     wr_s16b(creature_ptr->concent);
125
126     wr_s16b(0); /* old "rest" */
127     wr_s16b(creature_ptr->blind);
128     wr_s16b(creature_ptr->paralyzed);
129     wr_s16b(creature_ptr->confused);
130     wr_s16b(creature_ptr->food);
131     wr_s16b(0); /* old "food_digested" */
132     wr_s16b(0); /* old "protection" */
133     wr_s16b(creature_ptr->energy_need);
134     wr_s16b(creature_ptr->enchant_energy_need);
135     wr_s16b(creature_ptr->fast);
136     wr_s16b(creature_ptr->slow);
137     wr_s16b(creature_ptr->afraid);
138     wr_s16b(creature_ptr->cut);
139     wr_s16b(creature_ptr->stun);
140     wr_s16b(creature_ptr->poisoned);
141     wr_s16b(creature_ptr->image);
142     wr_s16b(creature_ptr->protevil);
143     wr_s16b(creature_ptr->invuln);
144     wr_s16b(creature_ptr->ult_res);
145     wr_s16b(creature_ptr->hero);
146     wr_s16b(creature_ptr->shero);
147     wr_s16b(creature_ptr->shield);
148     wr_s16b(creature_ptr->blessed);
149     wr_s16b(creature_ptr->tim_invis);
150     wr_s16b(creature_ptr->word_recall);
151     wr_s16b(creature_ptr->recall_dungeon);
152     wr_s16b(creature_ptr->alter_reality);
153     wr_s16b(creature_ptr->see_infra);
154     wr_s16b(creature_ptr->tim_infra);
155     wr_s16b(creature_ptr->oppose_fire);
156     wr_s16b(creature_ptr->oppose_cold);
157     wr_s16b(creature_ptr->oppose_acid);
158     wr_s16b(creature_ptr->oppose_elec);
159     wr_s16b(creature_ptr->oppose_pois);
160     wr_s16b(creature_ptr->tsuyoshi);
161     wr_s16b(creature_ptr->tim_esp);
162     wr_s16b(creature_ptr->wraith_form);
163     wr_s16b(creature_ptr->resist_magic);
164     wr_s16b(creature_ptr->tim_regen);
165     wr_s16b(creature_ptr->tim_pass_wall);
166     wr_s16b(creature_ptr->tim_stealth);
167     wr_s16b(creature_ptr->tim_levitation);
168     wr_s16b(creature_ptr->tim_sh_touki);
169     wr_s16b(creature_ptr->lightspeed);
170     wr_s16b(creature_ptr->tsubureru);
171     wr_s16b(creature_ptr->magicdef);
172     wr_s16b(creature_ptr->tim_res_nether);
173     wr_s16b(creature_ptr->tim_res_time);
174     wr_byte((byte)creature_ptr->mimic_form);
175     wr_s16b(creature_ptr->tim_mimic);
176     wr_s16b(creature_ptr->tim_sh_fire);
177     wr_s16b(creature_ptr->tim_sh_holy);
178     wr_s16b(creature_ptr->tim_eyeeye);
179
180     wr_s16b(creature_ptr->tim_reflect);
181     wr_s16b(creature_ptr->multishadow);
182     wr_s16b(creature_ptr->dustrobe);
183
184     wr_s16b(creature_ptr->chaos_patron);
185     wr_u32b(creature_ptr->muta1);
186     wr_u32b(creature_ptr->muta2);
187     wr_u32b(creature_ptr->muta3);
188
189     for (int i = 0; i < 8; i++)
190         wr_s16b(creature_ptr->virtues[i]);
191
192     for (int i = 0; i < 8; i++)
193         wr_s16b(creature_ptr->vir_types[i]);
194
195     wr_s16b(creature_ptr->ele_attack);
196     wr_u32b(creature_ptr->special_attack);
197     wr_s16b(creature_ptr->ele_immune);
198     wr_u32b(creature_ptr->special_defense);
199     wr_byte(creature_ptr->knowledge);
200     wr_byte(creature_ptr->autopick_autoregister);
201     wr_byte(0);
202     wr_byte((byte)creature_ptr->action);
203     wr_byte(0);
204     wr_byte(preserve_mode);
205     wr_byte(creature_ptr->wait_report_score);
206
207     for (int i = 0; i < 12; i++)
208         wr_u32b(0L);
209
210     /* Ignore some flags */
211     wr_u32b(0L);
212     wr_u32b(0L);
213     wr_u32b(0L);
214
215     wr_u32b(current_world_ptr->seed_flavor);
216     wr_u32b(current_world_ptr->seed_town);
217     wr_u16b(creature_ptr->panic_save);
218     wr_u16b(current_world_ptr->total_winner);
219     wr_u16b(current_world_ptr->noscore);
220     wr_byte(creature_ptr->is_dead);
221     wr_byte(creature_ptr->feeling);
222     wr_s32b(creature_ptr->current_floor_ptr->generated_turn);
223     wr_s32b(creature_ptr->feeling_turn);
224     wr_s32b(current_world_ptr->game_turn);
225     wr_s32b(current_world_ptr->dungeon_turn);
226     wr_s32b(current_world_ptr->arena_start_turn);
227     wr_s16b(today_mon);
228     wr_s16b(creature_ptr->today_mon);
229     wr_s16b(creature_ptr->riding);
230     wr_s16b(creature_ptr->floor_id);
231
232     /* Save temporary preserved pets (obsolated) */
233     wr_s16b(0);
234     wr_u32b(current_world_ptr->play_time);
235     wr_s32b(creature_ptr->visit);
236     wr_u32b(creature_ptr->count);
237 }