gamedev-save-systems
Imported awesome-gamedev-agent-skills guidance for save-systems workflows in game development projects.
Skill by bgrenat
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/bgrenat-gamedev-save-systems
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/gamedev-save-systems
What's inside
- Skill name
gamedev-save-systems- Description
- Imported awesome-gamedev-agent-skills guidance for save-systems workflows in game development projects. Use when designing save files: what to serialize, crash-safe atomic writes, slots, and versioned migration of old saves.
- License
- LGPL-3.0
- Instructions
- 152 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- versioning-and-migration.md · references/
SKILL.md (first lines)
# Save systems
A save file is a **serialized snapshot of game state** that survives restarts.
The hard parts aren't writing bytes — they're choosing *what* to save, writing it
so a crash mid-save can't corrupt it, and reading *old* saves after you ship a
patch. Get those three right and the rest is plumbing.
## When to use
- Use to persist progress: player stats, inventory, world flags, settings,
positions — across sessions and game updates.
- Use to design save slots, quicksave/autosave, and crash-safe writes.
- Use when old save files break after a content/code change (versioning &
migration).
**When *not* to use:** for Roblox cloud persistence specifics, use
`roblox-datastores`. For the data model the save serializes (resources/SOs), use
`godot-resources` / `unity-scriptableobjects`. For Godot's `FileAccess`/
`ResourceSaver` and `user://` paths, defer to the Godot engine skill while
applying the patterns here.
## Core workflow
1. **Decide what state is authoritative.** Save the *data* (hp, position, seed,
unlocked flags), not engine objects or scene nodes. You will reconstruct
objects from data on load — never serialize live node references.
2. **Define a versioned schema.** Every save embeds a `version` integer. This is
the single most important field for a game you intend to patch.
3. **Pick a format.** JSON/text for readability and debuggability; a binary
format for size/speed or mild tamper-resistance. Start with JSON.
4. **Write atomically.** Serialize to a temp file, flush, then rename over the
real file. A crash leaves either the old save or the new one — never a
half-written one.
5. **Load defensively.** Read version → migrate up to current → validate →
instantiate. Keep a backup of the last good save and fall back on parse error.
6. **Autosave on safe boundaries** (level change, checkpoint), throttled, and to a
separate slot so it can't clobber a manual save.
7. **Verify**: save, fully quit, relaunch, load — and confirm by inspection that
state matches. Test loading a save from the previous version.
## Patterns
### 1. Serialize state as plain data (not engine objects)
```gdscript
# Build a dictionary of pure data. Each savable object reports its own state.
func capture_state() -> Dictionary:
return {
"version": SAVE_VERSION, # ALWAYS stamp the schema version
"player": { "hp": player.hp, "pos": [player.position.x, player.position.y] },
"inventory": player.inventory.to_array(), # ids + counts, not Item nodes
"flags": world.flags, # e.g. {"met_guard": true}
"seed": world.seed, # regenerate procedural content
}
# On load, RECONSTRUCT objects from the data — do not expect live references back.
func apply_state(data: Dictionary) -> void:
player.hp = data["player"]["hp"]
player.position = Vector2(data["player"]["pos"][0], data["player"]["pos"][1])
player.inventory.from_array(data["inventory"])
world.flags = data["flags"]
```
### 2. Atomic, crash-safe write (temp + rename)
```gdscript
# RIGHT: write to a temp file, then atomically rename over the target.
func save_atomic(path: String, data: Dictionary) -> void:
var tmp := path + ".tmp"
var f := FileAccess.open(tmp, FileAccess.WRITE)
f.store_string(JSON.stringify(data))
f.flush() # ensure bytes hit disk
f.close()
DirAccess.rename_absolute(tmp, path) # replaces the target; atomic on POSIX
# WRONG: opening `path` directly and writing in place — a crash mid-write leaves a
# truncated, unloadable save and destroys the player's progress.
```
Rename-over-target is atomic on POSIX (same volume); on Windows a replace-by-rename
isn't guaranteed atomic, so keep the previous file as `path + ".bak"` before the
rename — that backup is what actually guarantees you can recover from a bad write.
### 3. Versioned load with migration
```python
SAVE_VERSION = 3
def load_save(raw_bytes):
data = parse(raw_bytes) # JSON/binary -> dict
v = data.get("version", 0)
if v > SAVE_VERSION:
raise NewerSaveError(v) # save is from a newer build; refuse
while v < SAVE_VERSION: # apply migrations in order, v -> v+1
data = MIGRATIONS[v](data)
v += 1
data["version"] = v
validate(data) # check required keys / ranges
return data
# Each migration is a pure function from one version's shape to the next.
def migrate_1_to_2(d):
d["flags"] = {k: True for k in d.pop("completed_quests", [])} # list -> set-map
return d
MIGRATIONS = {1: migrate_1_to_2, 2: migrate_2_to_3}
```
### 4. Save slots + throttled autosave
```gdscript
const SLOT_PATH := "user://save_%d.json" # manual slots 0..N
const AUTOSAVE_PATH := "user://autosave.json" # separate file: never clobbers a slot
var _autosave_cooldown := 0.0
func autosave_if_due(dt: float) -> void:
_autosave_cooldown -= dt
if _autosave_cooldown <= 0.0:
save_atomic(AUTOSAVE_PATH, capture_state())
_autosave_cooldown = 60.0 # throttle: at most once a minute
# Trigger an immediate autosave on checkpoints/level transitions, not mid-combat.
```From bgrenat/godot-game-dev-studio, LGPL-3.0.
More from bgrenat/godot-game-dev-studio
- 0.652score
gamedev-level-design
bgrenat
Imported awesome-gamedev-agent-skills guidance for level-design workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-input-systems
bgrenat
Imported awesome-gamedev-agent-skills guidance for input-systems workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-audio-design
bgrenat
Imported awesome-gamedev-agent-skills guidance for audio-design workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-itch-publish
bgrenat
Imported awesome-gamedev-agent-skills guidance for itch-publish workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-card-game
bgrenat
Imported awesome-gamedev-agent-skills guidance for card-game workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-dialogue-systems
bgrenat
Imported awesome-gamedev-agent-skills guidance for dialogue-systems workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-fps-shooter
bgrenat
Imported awesome-gamedev-agent-skills guidance for fps-shooter workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-game-ai
bgrenat
Imported awesome-gamedev-agent-skills guidance for game-ai workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-game-feel
bgrenat
Imported awesome-gamedev-agent-skills guidance for game-feel workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-camera-systems
bgrenat
Imported awesome-gamedev-agent-skills guidance for camera-systems workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-game-ui-ux
bgrenat
Imported awesome-gamedev-agent-skills guidance for game-ui-ux workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-performance-optimization
bgrenat
Imported awesome-gamedev-agent-skills guidance for performance-optimization workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9
Signals
- Stars
- 24
- Forks
- 3
- Open issues
- 0
- Last commit (this folder)
- Oct 12, 2026 (16 days ago)
- Last release
- Oct 12, 2026 (16 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- LGPL-3.0
- Repository
- github.com/bgrenat/godot-game-dev-studio
- Website
- powehi.eu
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from bgrenat
- 0.652score
gamedev-fps-shooter
bgrenat
Imported awesome-gamedev-agent-skills guidance for fps-shooter workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-dialogue-systems
bgrenat
Imported awesome-gamedev-agent-skills guidance for dialogue-systems workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-audio-design
bgrenat
Imported awesome-gamedev-agent-skills guidance for audio-design workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-camera-systems
bgrenat
Imported awesome-gamedev-agent-skills guidance for camera-systems workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-card-game
bgrenat
Imported awesome-gamedev-agent-skills guidance for card-game workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9 - 0.652score
gamedev-game-ai
bgrenat
Imported awesome-gamedev-agent-skills guidance for game-ai workflows in game development projects.
SkillAFreshness: A★ 24Claude Code +9
Cite this page
gamedev-save-systems skill. Agent Mart. https://agentmart.dev/skills/bgrenat-gamedev-save-systems (last updated 2026-10-24)