Event-driven save system with crash recovery that adapts to code changes automatically
Even minor code refactoring corrupts player progress, forcing complete restarts with each game update
Manually serializing nested objects and relationships becomes an unmaintainable web of dependencies
Inspired by Jan Thomä's guide on save compatibility in Godot.
Every game object broadcasts its state through signals. No central tracking system that becomes a bottleneck or single point of failure.
State lives in memory until explicitly saved. This means instant autosaves, zero corruption from crashes, and perfect recovery even from power loss.
The real magic: property versioning. When you refactor code, the save system adapts. Players keep their progress through every update.
Changes written to temp files first. Original saves untouched until validated.
State cached in memory. Crashes can't corrupt disk data.
Objects rebuild from partial data. Game continues with defaults if needed.
C# • Godot Resource System • Event Architecture