Castle Crawler - hand-off brief for the next session

Point the next session at this file. It says where the project stands on 2026-10-18 and what is left to do; nothing here depends on earlier chat history. Project rules and conventions are in CLAUDE.md; how everything works (and every test) is in wiki/game/game-prototype.md.

1. The project in one paragraph

An original 2D side-scrolling co-op action game, a spiritual successor to Castlevania: Harmony of Despair: 1-6 players online (host-authoritative), 30-minute chapters that each end in a boss, no XP (power only from loot and skill mastery), a camera that zooms from one room to the whole chapter. Godot 4.7.1 (GDScript), art modelled in Blender and pre-rendered to sprite sheets. Original IP only.

2. Where it stands (everything below is merged in main and live)

3. How to work on it

4. Backlog

Features

  1. Ghost art and the new enemies' art: the ghost reuses the fall frame (pale blue, see-through); the Sentinel, leaper and wisp are code-drawn block-outs like the older enemies.
  2. Bandwidth: a full party costs the host ~2.3 Mbit/s up (see the load test in wiki/game/game-prototype.md). Next steps if that is too much for home connections: player state at 30 Hz instead of 60 (the interpolator copes; re-check the prediction-error expectations), net_anim as an index instead of a StringName.
  3. The bestiary in the chapters (placed 2026-10-19: Hollow Keep seven, Clock Tower eight plus the Iron Jailer, Silent Abbey seven plus the Glass Cantor; see wiki/game/enemies.md, "Where to meet the new ones"). Left: the Prologue has no mini-boss, the Cinder Lobber is only in the Menagerie, and the Pale Huntsman and the Glass Saint have arenas of their own but no chapter leading to them. Hollow Keep's JSON has no generator: game/levels/add_bestiary_hollow_keep.py appends to it.
  4. Art for the bestiary: all fourteen are ColorRect block-outs (game/scenes/<type>.tscn); they need Blender sources and sheets like the wolf.
  5. Brunhal, next steps (her kit is checked solo and on a client by bulwarktest and bulwarknettest): shields as loot in her off hand (today the tower shield is fixed); sets with one-handed weapon pieces (the two sets' weapons are two-handed, so no new archetype can finish one); armour restricted per character.
  6. Kestrel, next steps: level design that uses her (tall shafts and ledges only she reaches with a lever or a chest at the top, the co-op role the design doc gives her); a human animation pass on her six moves (they are scripted poses); her test wall is built by the test, the stages have no wall-run tutorial yet.
  7. Coralie, next steps (her kit is checked solo by bindertest): a two-peer test (the book and Leaping Verse predicted on a client, a capture and Sanctuary on another player's character); spells for the bosses and the enemies without one (Hound, Tickwraith, Windup Knight); an icon per spell and a spell page on the gear screen (slots are picked by turning the page with the book open); the tome bonus in the gear screen's ATK; a Meshy model instead of the block-out. weapons.blend and the weapons sheet are binary and every archetype branch adds to them: after merging another one, re-run render_weapons.py (it adds the missing collections) and sync.
  8. Orsolya, next steps (checked by moonbloodtest and moonbloodnettest): her art is a block-out on the shared rig and a recoloured, de-tentacled copy of the enemy wolf (a Meshy model, prompt in the design doc, would replace the human block-out); the wolf keeps the human body box (52 px tall), so it fits wherever she stood and never gets stuck turning back; Pounce aims at the enemy where the predicting client sees it, so it can drift a few px on a client when the target moves (not covered by the two-peer test); armour restriction per character now exists ("armor" in Characters.DEFS) but only Orsolya uses it.
  9. Nemo, next steps (his kit is checked solo by masktest; nothing on a client yet): a two-peer test (the glide, the shield and the blink are predicted like Brunhal's guard and need the same check); the Warden's mask (to be designed) and masks for the hound, the Colossus and the Midnight Engine; the worn mask as a head-socket layer (one look today); a mask icon sheet instead of the drawn placeholder; per-mask cooldowns if the shared one feels wrong.
  10. Ysolde, next steps (her kit is checked solo by ysoldetest and on a client by ysoldenettest): robes as armour (she wears only the Leather Coat and the Hunter's Garb); a charging pose while attack is held for the Star Bolt; the enemy slow and pull are not shown on clients (no tint); the gear screen's ATK preview leaves out her staff's spell-rank bonus.
  11. Tobias, next steps (checked solo by beastwardentest, on a client by beastwardennettest, and at six players by tobiasloadtest): totems (his own charms that change a familiar, e.g. a slower wolf that takes hits); a real crow and moth sprite instead of the code drawings; the hound only follows the floor and platforms (no path-finding round walls, it reappears at his side past 22 tiles); the crow brings loot only to him, not to a teammate in danger (the doc's coop note); his armour rule (Items.TOBIAS_ARMOR) is the first per-character armour restriction and could become a general "armor" list in Characters.DEFS.
  12. Shared kit work: per-character armour has grown several mechanisms (Items.WALLRUNNER_GEAR, BINDER_ARMOR, STARWRIGHT_ARMOR, TOBIAS_ARMOR, Nemo's MASKED_NO_ARMOR and the general "armor" list read by Characters.armor_of): fold them into the "armor" list. No archetype has a co-op super (the Dual Crushes of the reference). The eight merges were resolved by hand; a fresh look at player.gd's _step (where every kit starts its moves) would be worth it.

Online

Content and polish

Technical debt