The Chain Remembers
Death in the Warrens used to mean starting over. Not anymore.
Save and Load
The game now persists everything that matters. Player position, facing direction, monster health and locations, which doors you’ve opened, which items you’ve picked up — all of it serialized to disk and restored on load. Die, and only your character stats survive; the dungeon resets. Pause and exit, and the entire floor freezes in place, waiting for your return.
The persistence layer sits at a clean boundary: runtime state uses typed structs and enums, while save files stay as plain JSON with string keys. Conversion happens in one place, so the save format can evolve independently of the game logic.

The Continue Screen
The main menu now offers a Continue option when saved characters exist. A character select panel lists every save slot — name, race, class, stats, and a “Last played” timestamp that reads naturally: “3h ago”, “2d ago”, or a date for older saves. Most recent characters float to the top. Pick one and you’re back in the dungeon exactly where you left off.

Identity
Under the hood, every named entity — monsters, pickups, doors — now carries a typed GameObjectName instead of a raw string. It’s a small change at the API level but it closes a class of bugs where an arbitrary string could slip into a name-shaped hole. The engine enforces it; the game constructs it.
Cleaning House
GameState got simpler. The character data is now always present — initialized with sensible defaults, reset when returning to the main menu. No more null checks, no more EnsureCharacter() calls scattered across scenes. One fewer thing to forget.
