From 7d1066a5d5ad55890bae826c3e442a0c8e748b4d Mon Sep 17 00:00:00 2001 From: John McCardle Date: Fri, 10 Apr 2026 02:19:19 -0400 Subject: [PATCH] Fix demo game fog layer accumulation and web IDBFS mkdir race - Add stairs position to occupied set to prevent enemy/item overlap - Remove old fog layer before creating new one on level transitions - Reset fog_layer reference on new game to avoid stale grid reference - Wrap FS.mkdir('/save') in try/catch for page reload resilience Co-Authored-By: Claude Opus 4.6 --- src/scripts_demo/game.py | 6 +++++- web/index.html | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/scripts_demo/game.py b/src/scripts_demo/game.py index 5db32a3..f039fef 100644 --- a/src/scripts_demo/game.py +++ b/src/scripts_demo/game.py @@ -304,6 +304,7 @@ class Game: ) self.grid.entities.append(stairs) self.stairs_pos = (sx, sy) + self.occupied.add((sx, sy)) # Place enemies (more enemies on deeper levels) num_enemies = min(3 + self.depth * 2, 15) @@ -357,7 +358,9 @@ class Game: self.items.append({"entity": item, "kind": "treasure", "pos": pos}) self.occupied.add(pos) - # Set up fog of war + # Set up fog of war (remove old layer first to prevent accumulation) + if self.fog_layer is not None: + self.grid.remove_layer(self.fog_layer) self.fog_layer = mcrfpy.ColorLayer(name="fog", z_index=10) self.grid.add_layer(self.fog_layer) self.fog_layer.fill(mcrfpy.Color(0, 0, 0, 255)) @@ -521,6 +524,7 @@ class Game: self.depth = 1 self.score = 0 self.player = None + self.fog_layer = None # Old grid is being discarded # Remove overlay if hasattr(self, 'game_over_overlay'): # Rebuild UI from scratch diff --git a/web/index.html b/web/index.html index e4b66fe..25bc364 100644 --- a/web/index.html +++ b/web/index.html @@ -362,7 +362,7 @@ var Module = { preRun: [function() { - FS.mkdir('/save'); + try { FS.mkdir('/save'); } catch(e) { /* already exists */ } FS.mount(IDBFS, {}, '/save'); Module.addRunDependency('idbfs-restore'); FS.syncfs(true, function(err) {