Skip to content

Releases: ForgeKitStudio/forgekit-core

v0.9.2

09 May 22:05
39a9956

Choose a tag to compare

(2026-05-09)

v0.9.1

09 May 21:11

Choose a tag to compare

(2026-05-09)

v0.9.0

09 May 19:56
9f37002

Choose a tag to compare

(2026-05-09)

v0.8.1

09 May 18:52
bd1c51a

Choose a tag to compare

(2026-05-09)

v0.8.0

09 May 18:39
85567a9

Choose a tag to compare

(2026-05-09)

v0.7.0 - Phase 6 world-layer signals

09 May 14:33
b2cb819

Choose a tag to compare

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. killer is &\"\" 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

09 May 13:02
68651c5

Choose a tag to compare

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_gained fires once per XPSystem.grant_xp(...) call, before any resulting level-up signals. source is one of &"manual" (direct grant), &"kill" (driven by died in phase 6), &"quest" (phase 8).
  • leveled_up fires once per level crossed. A single grant_xp that spans multiple levels produces N sequential signals. reward_tier echoes LevelUpRewardResource.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.version contract: 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

09 May 10:35
bf35d06

Choose a tag to compare

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.version contract: 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

09 May 08:45
798f5d0

Choose a tag to compare

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 build as a pretest hook so tests that depend on dist/src/index.js always have a fresh build.
  • Routed tests-gameplay through GUT (consistent with tests-unit and tests-property) instead of the defunct --mcp-bridge flag.
  • Added a narrow FIXTURE_PATH_ALLOWLIST so the language-policy validator stops flagging its own Polish test fixtures.
  • Added a Pre-warm Godot global class cache step before property tests so headless --script spawns can resolve cross-file class_name references.

Breaking changes

None. All changes are additive.

Compatibility

  • Minimum Godot version: 4.3+ (source level).
  • CI target: Godot 4.6.2.
  • api.version contract: 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

09 May 05:54

Choose a tag to compare

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.