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/z-form.h"
41 #include "util/enum-converter.h"
42 #include "view/display-messages.h"
43 #include "world/world.h"
46 * @brief プレイヤーキャラの作成結果を日記に書く
47 * @param player_ptr プレイヤーへの参照ポインタ
49 static void write_birth_diary(PlayerType *player_ptr)
55 message_add("====================");
59 exe_write_diary(player_ptr, DIARY_GAMESTART, 1, _("-------- 新規ゲーム開始 --------", "------- Started New Game -------"));
60 exe_write_diary(player_ptr, DIARY_DIALY, 0, nullptr);
62 strnfmt(buf, sizeof(buf), _("%s性別に%sを選択した。", "%schose %s gender."), indent, sex_info[player_ptr->psex].title);
63 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
64 strnfmt(buf, sizeof(buf), _("%s種族に%sを選択した。", "%schose %s race."), indent, race_info[enum2i(player_ptr->prace)].title);
65 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
66 strnfmt(buf, sizeof(buf), _("%s職業に%sを選択した。", "%schose %s class."), indent, class_info[enum2i(player_ptr->pclass)].title);
67 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
68 if (player_ptr->realm1) {
69 strnfmt(buf, sizeof(buf), _("%s魔法の領域に%s%sを選択した。", "%schose %s%s."), indent, realm_names[player_ptr->realm1],
70 player_ptr->realm2 ? format(_("と%s", " and %s realms"), realm_names[player_ptr->realm2]).data() : _("", " realm"));
71 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
73 if (player_ptr->element) {
74 strnfmt(buf, sizeof(buf), _("%s元素系統に%sを選択した。", "%schose %s system."), indent, get_element_title(player_ptr->element));
75 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
77 strnfmt(buf, sizeof(buf), _("%s性格に%sを選択した。", "%schose %s personality."), indent, personality_info[player_ptr->ppersonality].title);
78 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
79 if (PlayerClass(player_ptr).equals(PlayerClassType::CHAOS_WARRIOR)) {
80 strnfmt(buf, sizeof(buf), _("%s守護神%sと契約を交わした。", "%smade a contract with patron %s."), indent, patron_list[player_ptr->chaos_patron].name.data());
81 exe_write_diary(player_ptr, DIARY_DESCRIPTION, 1, buf);
86 * @brief プレイヤー作成処理のメインルーチン/ Create a new character.
88 * Note that we may be called with "junk" leftover in the various
89 * fields, so we must be sure to clear them first.
91 void player_birth(PlayerType *player_ptr)
94 wipe_monsters_list(player_ptr);
95 player_wipe_without_name(player_ptr);
96 if (!ask_quick_start(player_ptr)) {
97 play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_NEW_GAME);
99 if (player_birth_wizard(player_ptr)) {
103 player_wipe_without_name(player_ptr);
107 write_birth_diary(player_ptr);
108 for (int i = 1; i < max_towns; i++) {
109 for (auto sst : STORE_SALE_TYPE_LIST) {
115 if (PlayerRace(player_ptr).equals(PlayerRaceType::BEASTMAN)) {
116 player_ptr->hack_mutation = true;
118 player_ptr->hack_mutation = false;
121 if (!window_flag[1]) {
122 window_flag[1] |= PW_MESSAGE;
125 if (!window_flag[2]) {
126 window_flag[2] |= PW_INVEN;