Project scaffold:
- project.godot at repo root, GL Compatibility renderer (max mobile reach),
pixel-snap on, texture filter nearest, sensor_landscape orientation
- 7 autoloads: World, Sim, GameState, EventBus, Strings, Audit, SaveSystem
- scenes/main/main.{tscn,gd} smoke-test scene with autoload assertions
- Folder layout matches tavernkeep idiom: autoload/ at root, scripts
co-located with scenes/ (not the scripts/autoloads/ mirror originally
sketched in implementation.md)
- Input map: pause, speed_cycle, speed_normal/fast/ultra, confirm, cancel.
Mobile gestures (pinch/drag/long-press) handled at script level via
Godot's InputEventScreenTouch/Drag/MagnifyGesture.
- SaveSystem skeleton: SAVE_VERSION=1, JSON to user://save_slot.json,
version-mismatch warning. Phase 3 expands to real entity state.
- icon.svg placeholder (cabin silhouette on dark green field)
- README.md points at memory.md / implementation.md / docs/
Headless verification: 'godot --headless --path . --quit' exits 0,
'[main] Phase 0 smoke test online.' prints, no errors. Editor-side
green-dot check still pending — needs human launch of editor.
Asset audit (researcher Haiku, 2026-05-10):
- FG_Houses.png NOT autotile-solvable — pre-built decorative house
compositions, 4 distinct roof palettes, no modular wall family.
~½–1 day per material to author terrain bits on top.
- FG_Fortress.png IS autotile-solvable — ~20–30 modular tan-stone
pieces. Wang-style Godot 4 terrain works with minimal extra art.
Iconic Homestead $19.99 fallback not needed.
- No wolf sprite anywhere in the bundle. EvoMonster packs all
cute/fantasy. Need commission, CC0 source, or Ventilatore check.
- Retro Graveyard 16x16 [Kingdom Explorer] confirmed in Tier 3 with
full graveyard suite — direct use in Phase 14.
New open questions surfaced in memory.md:
- Player-built wall material strategy (3 options laid out)
- Wolf sprite acquisition path (Phase 10 blocker)
Project move:
- Repo physical location moved from ~/claude/projects/rimlike to
/mnt/d/godot/rimlike (D: drive, fast for Windows-side editor).
- Symlink at the original WSL path preserves the home-CLAUDE.md
layout convention. Mirrors tavernkeep's pattern.
- Set core.filemode=false to silence DrvFs's everything-is-0777
false-positive on git diff.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
28 lines
940 B
GDScript
28 lines
940 B
GDScript
extends Node
|
|
## Top-level mutable game state. SaveSystem serializes via save_dict() / apply_dict().
|
|
##
|
|
## Holds session-wide flags and the "what map are we on" pointer. Per-entity state
|
|
## lives on the entities themselves; per-tile state on the TileMap or World.
|
|
## See docs/architecture.md.
|
|
|
|
var current_map_id: StringName = &"slice_temperate_forest"
|
|
var session_started_at_unix: int = 0 # for "you've been away X minutes" toast
|
|
|
|
|
|
func _ready() -> void:
|
|
session_started_at_unix = int(Time.get_unix_time_from_system())
|
|
|
|
|
|
# Phase 16 expands these into real save round-trip.
|
|
func save_dict() -> Dictionary:
|
|
return {
|
|
"current_map_id": String(current_map_id),
|
|
"session_started_at_unix": session_started_at_unix,
|
|
}
|
|
|
|
|
|
func apply_dict(d: Dictionary) -> void:
|
|
if d.has("current_map_id"):
|
|
current_map_id = StringName(d["current_map_id"])
|
|
if d.has("session_started_at_unix"):
|
|
session_started_at_unix = int(d["session_started_at_unix"])
|