1 #include "core/game-closer.h"
2 #include "cmd-io/cmd-save.h"
3 #include "core/asking-player.h"
4 #include "core/scores.h"
5 #include "core/stuff-handler.h"
6 #include "game-option/cheat-options.h"
7 #include "io/input-key-acceptor.h"
9 #include "io/signal-handlers.h"
10 #include "io/uid-checker.h"
11 #include "main/music-definitions-table.h"
12 #include "main/sound-of-music.h"
13 #include "player/process-death.h"
14 #include "util/angband-files.h"
15 #include "view/display-main-window.h"
16 #include "view/display-messages.h"
17 #include "view/display-player.h"
18 #include "world/world.h"
20 static void clear_floor(player_type *player_ptr)
22 (void)fd_close(highscore_fd);
24 clear_saved_floor_files(player_ptr);
25 signals_handle_tstp();
28 static void send_world_score_on_closing(player_type *player_ptr, bool do_send)
30 if (send_world_score(player_ptr, do_send, update_playtime, display_player, map_name))
33 if (!get_check_strict(
34 player_ptr, _("後でスコアを登録するために待機しますか?", "Stand by for later score registration? "), (CHECK_NO_ESCAPE | CHECK_NO_HISTORY)))
37 player_ptr->wait_report_score = TRUE;
38 player_ptr->is_dead = FALSE;
39 if (!save_player(player_ptr))
40 msg_print(_("セーブ失敗!", "death save failed!"));
43 static bool check_death(player_type *player_ptr)
45 if (player_ptr->is_dead)
48 do_cmd_save_game(player_ptr, FALSE);
49 prt(_("リターンキーか ESC キーを押して下さい。", "Press Return (or Escape)."), 0, 40);
50 play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_EXIT);
51 if (inkey() != ESCAPE)
52 predict_score(player_ptr);
54 clear_floor(player_ptr);
60 * Close up the current game (player may or may not be dead)
61 * @param creature_ptr プレーヤーへの参照ポインタ
65 * This function is called only from "main.c" and "signals.c".
68 void close_game(player_type *player_ptr)
71 handle_stuff(player_ptr);
74 signals_ignore_tstp();
76 current_world_ptr->character_icky = TRUE;
78 path_build(buf, sizeof(buf), ANGBAND_DIR_APEX, "scores.raw");
80 highscore_fd = fd_open(buf, O_RDWR);
83 if (!check_death(player_ptr))
86 if (current_world_ptr->total_winner)
89 if (!cheat_save || get_check(_("死んだデータをセーブしますか? ", "Save death? "))) {
90 if (!save_player(player_ptr))
91 msg_print(_("セーブ失敗!", "death save failed!"));
95 print_tomb(player_ptr);
97 show_death_info(player_ptr, update_playtime, display_player, map_name);
99 if (check_score(player_ptr)) {
100 send_world_score_on_closing(player_ptr, do_send);
101 if (!player_ptr->wait_report_score)
102 (void)top_twenty(player_ptr);
103 } else if (highscore_fd >= 0) {
104 display_scores_aux(0, 10, -1, NULL);
107 clear_floor(player_ptr);