Wyrmframe - A System-Agnostic cRPG Template for Godot

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.