1 #include "load/dungeon-loader.h"
2 #include "dungeon/quest.h"
3 #include "floor/floor-save-util.h"
4 #include "floor/floor-save.h"
5 #include "load/angband-version-comparer.h"
6 #include "load/dummy-loader.h"
7 #include "load/floor-loader.h"
8 #include "load/load-util.h"
9 #include "load/load-v1-5-0.h"
10 #include "monster-race/monster-race.h"
11 #include "monster-race/race-flags1.h"
12 #include "save/floor-writer.h"
13 #include "system/floor-type-definition.h"
14 #include "world/world.h"
17 * @brief 保存されたフロアを読み込む / Read the dungeon
18 * @param player_ptr プレーヤーへの参照ポインタ
21 * The monsters/objects must be loaded in the same order
22 * that they were stored, since the actual indexes matter.
24 static errr rd_dungeon(player_type *player_ptr)
26 init_saved_floors(player_ptr, FALSE);
28 if (h_older_than(1, 5, 0, 0)) {
29 err = rd_dungeon_old(player_ptr);
30 if (player_ptr->dungeon_idx) {
31 player_ptr->floor_id = get_new_floor_id(player_ptr);
32 get_sf_ptr(player_ptr->floor_id)->dun_level = player_ptr->current_floor_ptr->dun_level;
38 rd_s16b(&max_floor_id);
41 player_ptr->dungeon_idx = (DUNGEON_IDX)tmp8u;
45 err = rd_saved_floor(player_ptr, NULL);
47 for (int i = 0; i < num; i++) {
48 saved_floor_type *sf_ptr = &saved_floors[i];
50 rd_s16b(&sf_ptr->floor_id);
52 sf_ptr->savefile_id = (s16b)tmp8u;
56 sf_ptr->dun_level = (DEPTH)tmp16s;
58 rd_s32b(&sf_ptr->last_visit);
59 rd_u32b(&sf_ptr->visit_mark);
60 rd_s16b(&sf_ptr->upper_floor_id);
61 rd_s16b(&sf_ptr->lower_floor_id);
64 for (int i = 0; i < num; i++) {
65 saved_floor_type *sf_ptr = &saved_floors[i];
66 if (!sf_ptr->floor_id)
72 err = rd_saved_floor(player_ptr, sf_ptr);
76 if (!save_floor(player_ptr, sf_ptr, SLF_SECOND))
84 if (!load_floor(player_ptr, get_sf_ptr(player_ptr->floor_id), SLF_SECOND))
91 load_note(_("アイテムの配列が大きすぎる!", "Too many object entries!"));
95 load_note(_("アイテム配置エラー", "Object allocation error"));
99 load_note(_("モンスターの配列が大きすぎる!", "Too many monster entries!"));
103 load_note(_("モンスター配置エラー", "Monster allocation error"));
107 load_note(_("保存されたフロアのダンジョンデータが壊れています!", "Dungeon data of saved floors are broken!"));
111 load_note(_("テンポラリ・ファイルを作成できません!", "Failed to make temporary files!"));
115 load_note(_("Error 183", "Error 183"));
119 current_world_ptr->character_dungeon = TRUE;
123 errr restore_dungeon(player_type *creature_ptr)
125 if (creature_ptr->is_dead) {
126 for (int i = MIN_RANDOM_QUEST; i < MAX_RANDOM_QUEST + 1; i++)
127 r_info[quest[i].r_idx].flags1 &= ~RF1_QUESTOR;
132 load_note(_("ダンジョン復元中...", "Restoring Dungeon..."));
133 if (rd_dungeon(creature_ptr)) {
134 load_note(_("ダンジョンデータ読み込み失敗", "Error reading dungeon data"));