Changelog
Found a bug in one of these releases? Report it on Codeberg — a minimal repro scene or steps to trigger it helps a lot.
[0.2.0] - 2026-09-12
Added
- AttributeDefinition resource - system-agnostic attribute definition (id, display name, min/max, default value)
- Independent enforce_min_clamp / enforce_max_clamp flags per attribute, allowing designers to opt in/out of clamping on either side
- AttributeModifier resource - flat additive modifier (attribute reference via resource picker, value, source_id for later removal by source)
- RuntimeAttribute - per-character runtime state, strictly separated from AttributeDefinition to avoid the shared-Resource pitfall; recalculates from source of truth on every apply/remove
- StatsComponent (Node) - owns and manages all RuntimeAttribute instances for a character; forwards per-attribute value_changed signals as a single attribute_changed signal
- Manual verification workflow via _scratch/ (gitignored) for ad-hoc testing without polluting the repo with throwaway scenes/data
Notes
- Modifiers currently support flat additive values only; percentage/override modifiers and configurable application order are deferred (see roadmap Backlog)
- Example .tres attribute data intentionally deferred to the content/ folder until milestone 1.0.0 (Demo)
[0.1.1] - 2026-09-11
Fixed
- EventBus.game_state_changed signal parameters are now explicitly typed as GameStateManager.State.
- Removed a dead, no-op is_paused() call at the end of GameStateManager.remove_pause_reason().
Added
- GameStateManager.get_pause_reasons() - returns a duplicated snapshot of active pause reasons, so external code cannot mutate the internal pause state by reference.
[0.1.0] - 2026-08-17
Added
- Initial project structure (core/, autoloads/, actors/, content/, ui/, demo/).
- EventBus autoload - global signal bus for cross-cutting game events (game_state_changed, actor_died).
- GameStateManager autoload - top-level game state tracking (MAIN_MENU, EXPLORATION, COMBAT, DIALOG) with guarded state transitions.
- World-pause mechanism on GameStateManager (add_pause_reason / remove_pause_reason / is_paused), supporting multiple independent, concurrent pause sources.
- Logger autoload - centralized, explicit logging of selected EventBus signals.