3 * @brief プレイヤーの作成を行う / Create a player character
6 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
8 * This software may be copied and distributed for educational, research,\n
9 * and not for profit purposes provided that this copyright and statement\n
10 * are included in all such copies. Other copyrights may also apply.\n
11 * 2013 Deskull Doxygen向けのコメント整理\n
14 #include "birth/character-builder.h"
15 #include "birth/birth-explanations-table.h"
16 #include "birth/birth-wizard.h"
17 #include "birth/game-play-initializer.h"
18 #include "birth/quick-start.h"
19 #include "core/window-redrawer.h"
20 #include "floor/floor-town.h"
21 #include "floor/wild.h"
22 #include "game-option/option-flags.h"
23 #include "io/write-diary.h"
24 #include "main/music-definitions-table.h"
25 #include "main/sound-of-music.h"
26 #include "mind/mind-elementalist.h"
27 #include "monster-floor/monster-remover.h"
28 #include "player-base/player-class.h"
29 #include "player-base/player-race.h"
30 #include "player-info/class-info.h"
31 #include "player-info/race-types.h"
32 #include "player/patron.h"
33 #include "player/player-personality.h"
34 #include "player/player-sex.h"
35 #include "player/race-info-table.h"
36 #include "realm/realm-names-table.h"
37 #include "store/store-owners.h"
38 #include "store/store.h"
39 #include "system/player-type-definition.h"
40 #include "term/gameterm.h"
41 #include "term/z-form.h"
42 #include "util/enum-converter.h"
43 #include "view/display-messages.h"
44 #include "world/world.h"
47 * @brief プレイヤーキャラの作成結果を日記に書く
48 * @param player_ptr プレイヤーへの参照ポインタ
50 static void write_birth_diary(PlayerType *player_ptr)
56 message_add("====================");
60 exe_write_diary(player_ptr, DIARY_GAMESTART, 1, _("-------- 新規ゲーム開始 --------", "------- Started New Game -------"));
61 exe_write_diary(player_ptr, DIARY_DIALY, 0, nullptr);
63 strnfmt(buf, sizeof(buf), _("%s性別に%sを選択した。", "%schose %s gender."), indent, sex_info[player_ptr->psex].title);
64 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
65 strnfmt(buf, sizeof(buf), _("%s種族に%sを選択した。", "%schose %s race."), indent, race_info[enum2i(player_ptr->prace)].title);
66 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
67 strnfmt(buf, sizeof(buf), _("%s職業に%sを選択した。", "%schose %s class."), indent, class_info[enum2i(player_ptr->pclass)].title);
68 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
69 if (player_ptr->realm1) {
70 strnfmt(buf, sizeof(buf), _("%s魔法の領域に%s%sを選択した。", "%schose %s%s."), indent, realm_names[player_ptr->realm1],
71 player_ptr->realm2 ? format(_("と%s", " and %s realms"), realm_names[player_ptr->realm2]).data() : _("", " realm"));
72 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
74 if (player_ptr->element) {
75 strnfmt(buf, sizeof(buf), _("%s元素系統に%sを選択した。", "%schose %s system."), indent, get_element_title(player_ptr->element));
76 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
78 strnfmt(buf, sizeof(buf), _("%s性格に%sを選択した。", "%schose %s personality."), indent, personality_info[player_ptr->ppersonality].title);
79 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
80 if (PlayerClass(player_ptr).equals(PlayerClassType::CHAOS_WARRIOR)) {
81 strnfmt(buf, sizeof(buf), _("%s守護神%sと契約を交わした。", "%smade a contract with patron %s."), indent, patron_list[player_ptr->chaos_patron].name.data());
82 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
87 * @brief プレイヤー作成処理のメインルーチン/ Create a new character.
89 * Note that we may be called with "junk" leftover in the various
90 * fields, so we must be sure to clear them first.
92 void player_birth(PlayerType *player_ptr)
94 TermCenteredOffsetSetter tcos(MAIN_TERM_MIN_COLS, MAIN_TERM_MIN_ROWS);
97 wipe_monsters_list(player_ptr);
98 player_wipe_without_name(player_ptr);
99 if (!ask_quick_start(player_ptr)) {
100 play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_NEW_GAME);
102 if (player_birth_wizard(player_ptr)) {
106 player_wipe_without_name(player_ptr);
110 write_birth_diary(player_ptr);
111 for (size_t i = 1; i < towns_info.size(); i++) {
112 for (auto sst : STORE_SALE_TYPE_LIST) {
118 if (PlayerRace(player_ptr).equals(PlayerRaceType::BEASTMAN)) {
119 player_ptr->hack_mutation = true;
121 player_ptr->hack_mutation = false;
124 if (!window_flag[1]) {
125 window_flag[1] |= PW_MESSAGE;
128 if (!window_flag[2]) {
129 window_flag[2] |= PW_INVENTORY;