1 #include "birth/quick-start.h"
2 #include "birth/birth-stat.h"
3 #include "birth/birth-util.h"
4 #include "birth/game-play-initializer.h"
5 #include "core/player-update-types.h"
6 #include "io/input-key-acceptor.h"
7 #include "player-base/player-class.h"
8 #include "player-info/class-info.h"
9 #include "player-info/race-info.h"
10 #include "player/player-personality.h"
11 #include "player/player-sex.h"
12 #include "player/player-status.h"
13 #include "player/process-name.h"
14 #include "player/race-info-table.h"
15 #include "system/player-type-definition.h"
16 #include "term/screen-processor.h"
17 #include "util/enum-converter.h"
20 * The last character rolled,
21 * holded for quick start
23 birther previous_char;
26 * @brief クイックスタート処理の問い合わせと実行を行う。/Ask whether the player use Quick Start or not.
28 bool ask_quick_start(player_type *player_ptr)
30 if (!previous_char.quick_ok)
34 put_str(_("クイック・スタートを使うと以前と全く同じキャラクターで始められます。",
35 "Do you want to use the quick start function (same character as your last one)."),
39 put_str(_("クイック・スタートを使いますか?[y/N]", "Use quick start? [y/N]"), 14, 10);
46 show_help(player_ptr, _("jbirth.txt#QuickStart", "birth.txt#QuickStart"));
47 else if ((c == 'y') || (c == 'Y'))
53 load_prev_data(player_ptr, false);
54 init_turn(player_ptr);
55 init_dungeon_quests(player_ptr);
57 sp_ptr = &sex_info[player_ptr->psex];
58 rp_ptr = &race_info[enum2i(player_ptr->prace)];
59 auto short_pclass = enum2i(player_ptr->pclass);
60 cp_ptr = &class_info[short_pclass];
61 mp_ptr = &m_info[short_pclass];
62 ap_ptr = &personality_info[player_ptr->ppersonality];
64 get_extra(player_ptr, false);
65 player_ptr->update |= (PU_BONUS | PU_HP);
66 update_creature(player_ptr);
67 player_ptr->chp = player_ptr->mhp;
68 player_ptr->csp = player_ptr->msp;
69 process_player_name(player_ptr);
73 * @brief プレイヤーのクイックスタート情報をプレイヤー構造体から保存する / Save the current data for later
74 * @param birther_ptr クイックスタート構造体の参照ポインタ
77 void save_prev_data(player_type *player_ptr, birther *birther_ptr)
79 birther_ptr->psex = player_ptr->psex;
80 birther_ptr->prace = player_ptr->prace;
81 birther_ptr->pclass = player_ptr->pclass;
82 birther_ptr->ppersonality = player_ptr->ppersonality;
84 if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
85 birther_ptr->realm1 = player_ptr->element;
87 birther_ptr->realm1 = player_ptr->realm1;
89 birther_ptr->realm2 = player_ptr->realm2;
90 birther_ptr->age = player_ptr->age;
91 birther_ptr->ht = player_ptr->ht;
92 birther_ptr->wt = player_ptr->wt;
93 birther_ptr->sc = player_ptr->sc;
94 birther_ptr->au = player_ptr->au;
96 for (int i = 0; i < A_MAX; i++) {
97 birther_ptr->stat_max[i] = player_ptr->stat_max[i];
98 birther_ptr->stat_max_max[i] = player_ptr->stat_max_max[i];
101 for (int i = 0; i < PY_MAX_LEVEL; i++) {
102 birther_ptr->player_hp[i] = player_ptr->player_hp[i];
105 birther_ptr->chaos_patron = player_ptr->chaos_patron;
106 for (int i = 0; i < 8; i++) {
107 birther_ptr->vir_types[i] = player_ptr->vir_types[i];
110 for (int i = 0; i < 4; i++) {
111 strcpy(birther_ptr->history[i], player_ptr->history[i]);
116 * @brief プレイヤーのクイックスタート情報をプレイヤー構造体へ読み込む / Load the previous data
117 * @param swap TRUEならば現在のプレイヤー構造体上との内容をスワップする形で読み込む。
120 void load_prev_data(player_type *player_ptr, bool swap)
124 save_prev_data(player_ptr, &temp);
126 player_ptr->psex = previous_char.psex;
127 player_ptr->prace = previous_char.prace;
128 player_ptr->pclass = previous_char.pclass;
129 player_ptr->ppersonality = previous_char.ppersonality;
131 if (player_ptr->pclass == PlayerClassType::ELEMENTALIST)
132 player_ptr->element = previous_char.realm1;
134 player_ptr->realm1 = previous_char.realm1;
136 player_ptr->realm2 = previous_char.realm2;
137 player_ptr->age = previous_char.age;
138 player_ptr->ht = previous_char.ht;
139 player_ptr->wt = previous_char.wt;
140 player_ptr->sc = previous_char.sc;
141 player_ptr->au = previous_char.au;
143 for (int i = 0; i < A_MAX; i++) {
144 player_ptr->stat_cur[i] = player_ptr->stat_max[i] = previous_char.stat_max[i];
145 player_ptr->stat_max_max[i] = previous_char.stat_max_max[i];
148 for (int i = 0; i < PY_MAX_LEVEL; i++) {
149 player_ptr->player_hp[i] = previous_char.player_hp[i];
152 player_ptr->mhp = player_ptr->player_hp[0];
153 player_ptr->chp = player_ptr->player_hp[0];
154 player_ptr->chaos_patron = previous_char.chaos_patron;
155 for (int i = 0; i < 8; i++) {
156 player_ptr->vir_types[i] = previous_char.vir_types[i];
159 PlayerClass(player_ptr).init_specific_data();
161 for (int i = 0; i < 4; i++) {
162 strcpy(player_ptr->history[i], previous_char.history[i]);
166 previous_char = temp;