OSDN Git Service

[Fix] ロード時に latest_visit_mark を復元
authortaotao54321 <taotao54321@gmail.com>
Sun, 21 Feb 2021 13:37:33 +0000 (22:37 +0900)
committertaotao54321 <taotao54321@gmail.com>
Sun, 21 Feb 2021 13:37:33 +0000 (22:37 +0900)
Fixes #239.

起動時の `latest_visit_mark` の値が 1 固定だったため、セーブ/ロードを挟
むと保存フロアがいっぱいになったときの削除順がおかしくなっていた。

ロード時に全ての保存済みフロアについての `visit_mark` の最大値 + 1 を
`latest_visit_mark` の値とすることで解決。

src/load/dungeon-loader.c

index 8d42950..654a525 100644 (file)
@@ -84,6 +84,14 @@ static errr rd_dungeon(player_type *player_ptr)
             if (!load_floor(player_ptr, get_sf_ptr(player_ptr->floor_id), SLF_SECOND))
                 err = 183;
         }
+
+        // latest_visit_mark の復元。
+        // 全ての保存フロアについての visit_mark の最大値 + 1 とする。
+        for (int i = 0; i < num; ++i) {
+            const u32b next_visit_mark = saved_floors[i].visit_mark + 1;
+            if (next_visit_mark > latest_visit_mark)
+                latest_visit_mark = next_visit_mark;
+        }
     }
 
     switch (err) {