Releases: ForgeKitStudio/forgekit-core
v0.9.2
v0.9.1
v0.9.0
v0.8.1
v0.8.0
v0.7.0 - Phase 6 world-layer signals
Phase 6 of the forgekit-core roadmap. Adds six world-layer GameEvents signals consumed by the forgekit_rpg module's enemies, loot, world interactables, NPC, dialog, and vendor subsystems.
New signals
- died(victim: StringName, killer: StringName) — an entity's HP reached zero.
killeris&\"\"for environmental, suicide, or poison-tick deaths. Unblocks the XPSystem auto-subscribe that was a guarded no-op in v0.6.0. - chest_opened(chest_id: StringName, opener: StringName) — a TreasureChest was interacted with and its loot rolled. Fires exactly once per chest instance.
- scene_transition_requested(from_scene: String, to_scene: String, target_spawn_point: StringName) — a Door or Portal asks gameplay code to change scenes. Announces intent only; gameplay code performs the actual transition.
- dialog_started(npc_id: StringName, dialog_tree_id: StringName) — a DialogRunner began a conversation.
- dialog_completed(npc_id: StringName, dialog_tree_id: StringName, outcome: StringName) — a DialogRunner ended. `outcome` is `&""` when the terminal node is untagged.
- shop_transaction(actor: StringName, vendor_id: StringName, transaction_type: StringName, item_id: StringName, amount: int, currency_delta: int) — Vendor buy/sell completed. `currency_delta` is negative on buy, positive on sell.
Total declared signals: 17 (was 11 in v0.6.0).
Compatibility
Purely additive MINOR bump. No existing signal, schema, or API removed or retyped.
What's next
The paired PR #8 (feat(mcp-server): extend RPG-only profile with 7 phase 6 modules) adds the profile surface so forgekit_rpg v0.7.0 can expose the 30+ new phase 6 tool adapters (enemies, loot, spawner, chests, npc, dialog, vendor).
Test summary
- 22/22 GameEvents unit tests passing (6 new Phase 6 tests + 16 existing).
- list_signals() now returns 17 entries in sorted order.
v0.6.0 — phase 5 progression signals
Summary
Additive release adding 2 new validated signals to the GameEvents autoload so the upcoming RPG progression subsystem (XPSystem, XpCurveResource, LevelUpRewardResource) can route XP and level-up events through the same bus as combat, crafting, effects, magic, and equipment.
What's new
GameEvents — 2 new signals
| Signal | Payload |
|---|---|
xp_gained |
owner: StringName, amount: float, source: StringName |
leveled_up |
owner: StringName, new_level: int, reward_tier: StringName |
All pre-existing 9 signals keep their previous schemas.
xp_gainedfires once perXPSystem.grant_xp(...)call, before any resulting level-up signals.sourceis one of&"manual"(direct grant),&"kill"(driven bydiedin phase 6),&"quest"(phase 8).leveled_upfires once per level crossed. A singlegrant_xpthat spans multiple levels produces N sequential signals.reward_tierechoesLevelUpRewardResource.unlock_tier(or&""when the level-up applied no reward) so UI can group events into warrior / mage / boss panels.
Breaking changes
None. All changes are additive. list_signals() now returns 11 entries (was 9) — consumers that hard-coded the count should update.
Compatibility
- Minimum Godot version: 4.3+ (source level).
- CI target: Godot 4.6.2.
api.versioncontract: 0.5.1 → 0.6.0 (MINOR — additive signal additions, no existing signal signatures changed).
Consumer note
The RPG module's phase 5 PR (progression subsystem) requires core_min_version: 0.6.0 in its module.manifest.tres.
v0.5.1 — EquipableItemResource
Summary
Additive patch release adding a single Core-owned data shape so the RPG module's upcoming equipment subsystem has a public type to depend on.
What's new
EquipableItemResource (addons/forgekit_core/resources/equipable_item_resource.gd) extends ItemResource with four exported fields:
| Field | Type | Purpose |
|---|---|---|
slot |
StringName |
Non-empty slot identifier (&"head", &"chest", &"weapon", ...) |
stat_modifiers |
Array[Dictionary] |
StatsSystem modifier payloads applied on equip |
status_effects_on_equip |
Array[StringName] |
Effect ids applied on equip and removed on unequip |
requirements |
Dictionary |
stat_name -> min_value gating equip |
validate() returns the union of base and equipable-specific errors. to_dict / from_dict round-trip both layers.
Breaking changes
None. Changes are strictly additive.
Compatibility
- Minimum Godot version: 4.3+.
- CI target: Godot 4.6.2.
api.versioncontract: 0.5.0 → 0.5.1 (PATCH — no schema changes to existing types).
Consumer note
Equipment-aware RPG modules (phase 4B in forgekit-rpg) will require core_min_version: 0.5.1 in their module.manifest.tres.
v0.5.0 — phase 4B GameEvents signals
Summary
Additive release adding 5 new validated signals to the GameEvents autoload so the upcoming RPG module subsystems (status effects, magic, equipment) can route their events through the same bus as combat, crafting, and inventory.
This release also ships CI infrastructure fixes that unblocked main after it had been red for several days.
What's new
GameEvents — 5 new signals
| Signal | Payload |
|---|---|
status_effect_ticked |
owner: StringName, effect_id: StringName, tick_index: int |
status_effect_expired |
owner: StringName, effect_id: StringName |
spell_cast |
caster: StringName, spell_id: StringName, target: Node, status: StringName |
item_equipped |
owner: StringName, slot: StringName, item_id: StringName |
item_unequipped |
owner: StringName, slot: StringName, item_id: StringName |
All pre-existing signals (damage_dealt, craft_completed, item_added, item_removed) keep their previous schemas.
For spell_cast, status is a CastResult.Status name (ok, insufficient_mana, on_cooldown, …), so a single subscriber can react to both successful and failed casts.
CI infrastructure
- Bumped CI Godot version from 4.3.0 to 4.6.2 to match forgekit-rpg and local developer setups.
- Added
npm run buildas apretesthook so tests that depend ondist/src/index.jsalways have a fresh build. - Routed
tests-gameplaythrough GUT (consistent withtests-unitandtests-property) instead of the defunct--mcp-bridgeflag. - Added a narrow
FIXTURE_PATH_ALLOWLISTso the language-policy validator stops flagging its own Polish test fixtures. - Added a
Pre-warm Godot global class cachestep before property tests so headless--scriptspawns can resolve cross-fileclass_namereferences.
Breaking changes
None. All changes are additive.
Compatibility
- Minimum Godot version: 4.3+ (source level).
- CI target: Godot 4.6.2.
api.versioncontract: 0.3.0 → 0.5.0 (MINOR — additive signal additions).
Consumer note
RPG module's phase 4B PRs (status effects, magic, equipment) will require core_min_version: 0.5.0 in their module.manifest.tres.
v0.3.0 — Runtime Bridge + Crafting/Inventory
Phase 3 release of ForgeKit Core: Runtime Bridge (UDP), License_Activator with HMAC-SHA256 offline verification, Module Management MCP tools, and handshake API.
This release is published retrospectively so downstream consumers (notably the forgekit-rpg integration-with-core CI job) can resolve the latest Core tag via the GitHub Releases API.
See the forgekit-core v0.3.0 tag for the full source and CHANGELOG.