This is probably the biggest internal milestone since the demo launched, meta-progression has been added in a skeletal state, placeholder assets for now, but fully functional. Please feedback your thoughts, it's still in need of a lot of testing.
What's new:
The Hometown — There's now a persistent hub scene between runs. This is where meta-progression lives: your unlocks, your blessings, your level. It's not fully stocked yet, but the infrastructure is there and it already makes the game feel meaningfully different to launch into rather than just hitting "new run" from a menu.
Blessings — A new meta-loop mechanic. You can now spend currency earned across runs at a blessings shop in the Hometown. These carry into future runs as persistent passive upgrades. Early days on the variety, but the system is in.
Unlock system — Subclass cards for the Anointed, Guardian, Martyr, Stormguard, and Spiritwalker now have unlock conditions attached. Working toward a point where discovering builds feels earned rather than just selected from a list.
The Anointed Subclass — The fourth playable subclass is now in the game. Animations are placeholder for now — I'll flag when the full art pass is done — but the kit is there and playable.
Battle feel improvements — A lot of work went into making combat read better moment-to-moment. Per-sprite hit flash (was full-screen before), directional knockback that scales with damage, directional camera shake, a pre-impact zoom that pulls back slightly before impact frames, and an impact vignette that draws the fog in on hits. Also added DoT preview bars on the health UI so you can see incoming Ignite, Bleed, and Poison damage before it lands, and a net damage incoming label that shows your incoming damage minus block. Shows 'safe' when you're fully covered.
New statuses and enemy cards — Added Chill and Acid as new status effects. Forest enemies each got 2 new cards.
End screen — Replaced the old win screen with a proper end screen that shows on both wins and losses. Shows run stats, medals earned, and connects into the meta-progression rewards.
There's also a large card refactor under the hood that doesn't change how any card feels but made the codebase a lot more maintainable. 15 new helper functions in card.gd — 163 cards now use a shared animation call instead of their own preamble, 109 use a shared deal_damage(), and so on. The kind of work that's invisible but makes every future card faster to write and easier to debug.
The Codex also has a card gallery and bestiary now, alongside the medal gallery that went in previously.
Lots more to come — the Anointed art pass, building out the Hometown properly, more enemy content. But meta-progression being in place is the unlock that lets all the other systems connect.
Thank you to everyone playing the demo and sending feedback. It genuinely shapes what gets prioritised.
Full patch notes:
Meta & progression:
Hometown — new persistent hub scene added (hometown.gd, hometown.tscn); meta-progression home base between runs
Blessings — blessing_handler.gd + blessings shop scene added; blessings purchasable as part of the meta loop
Unlock system — unlock_condition_checker.gd + unlocks_singleton.gd; unlock conditions patched onto all subclass cards (Anointed, Guardian, Martyr, Stormguard, Spiritwalker)
Player level manager — player_level_manager.gd added; levelling infrastructure in place
Level up screen — new screen shown on level-up events; all relics now available as level up rewards
Meta rewards screen — shown at run end; connects run results to meta progression
Run metrics manager + medal registry — tracks player statistics across a run for balance and post-run medal awarding; medals help surface hidden mechanics
Medals — medal gallery in Codex has all medals with locked/unlocked states
Data analytics — run_metrics_manager and analytics_manager added; opt-in consent button on game start and in settings
Save system — save_game.gd significantly updated to persist meta state, medals, unlocks
Content:
Anointed subclass added — placeholder animations for now, full art pass incoming
Added 2 new cards to each forest enemy
Added Chill and Acid as new status effects
Combat & UI:
Battle visuals — pre-impact zoom anticipation on all slow motion keyframes (camera pulls back slightly before impact frames)
Battle visuals — per-sprite hit flash on hurt animations for player and all enemies (was full-screen before)
Battle visuals — directional knockback on player and enemy when hit, scales with damage amount
Battle visuals — impact vignette on hits draws the run scene fog in closer then back out
Battle visuals — directional camera shake on hits; camera moves right when player hits enemy and vice versa
Health UI — DoT preview bars added; shows Ignite, Bleed, and Poison incoming damage over the health bar before it lands
Battle UI — net_damage_incoming_label added; shows raw incoming damage minus player block; displays 'safe' when damage is fully covered
Enemy statuses — power status tooltip added as a visible status for all enemies that have a power, so the effect is readable without the card being visible
Biome transition — short preview animation of the next biome now plays before progressing; demo teaser animation added on demo version; plays at start of run before title card
Scene transition speed changed from 0.8 to 0.3
Codex:
Card gallery — card_gallery.gd/tscn built out inside the Codex; shows full card collection
Bestiary — bestiary.gd/tscn added to Codex
Codex accessible from main menu Codex button
End screen:
Win screen replaced with a unified end screen
End screen now also shown on run loss (was modified battle rewards screen before)
Debug buttons added for setting player and character levels for quicker testing
Card refactor (under the hood):
card.gd — 15 new helper functions added: play_animation(), deal_damage(), gain_block(), heal_target(), lose_hp(), apply_status(), draw_cards(), get_health_percent(), get_missing_hp(), get_player(), get_enemy(), short_delay(), calc_damage_tooltip(), calc_block_tooltip(), calc_heal_tooltip()
163 cards now use await play_animation() (was 2-line preamble per card)
109 cards use deal_damage()
73 cards use gain_block()
56 cards use apply_status()
39 cards use heal_target()
39 cards use await short_delay()
25 cards use get_health_percent()
Player animations:
Guardian and Anointed player animations added to player.tscn
Additional animations added to enemy.tscn
Lore:
lore_handler.gd + lore_popup.gd added; lore entries can surface in-game; placeholder text in for now
Bugfixes:
Fixed faulty player died signal in fountain of life scene
Fixed Igniting Strike not showing ATK value in card tooltip
Demo on Steam: