Tidewakeworking title

Milestone: M2 — Dungeon 1 · page generated 2026-10-09 23:35 UTC

Play

▶ Play the latest build

Built 2026-10-09 23:26 UTC · build 3904dfba · browser check passed 2026-10-09 23:33 UTC

What changed: 2026-10-09 — Dungeon 1 under construction: the Spark Caves

Desktop screenshot of the latest build
Desktop
Phone screenshot of the latest build
Phone

Roadmap

Now: M2 — Dungeon 1

Plan: docs/m2-plan.md (the Spark Caves, D-036). Production started 2026-10-09 (D-053). A test dungeon is playable with ?dungeon=d1_test (not linked from the meadow yet).

3 of 6 done

All milestones

Needs you

Answering never blocks work. Each item below is a default the lead picked so work keeps moving; the default is the recommendation. Reply only if you want something changed, whenever suits you. The lead adapts the work.

D-006 2026-10-08

defaultWorking title "Tidewake".

Alternatives / notes: Lanternmoss, Brightfold. Rename is cheap until M2.

D-007 2026-10-08

defaultStory open; three pitches after M1. Yala's story not carried over.

Alternatives / notes: Pitches ready early: see D-031.

D-008 2026-10-08

default640 × 360 internal, integer scaling, 20 × 11 tile screens.

D-009 2026-10-08

defaultMusic and sound fully original.

D-010 2026-10-08

defaultLead on Claude Opus 5.5 in T3; Codex GPT for image generation and cross-review.

D-013 2026-10-08

defaultSite layout: project page at /, game at /play/, notes API at /api/notes; notes stored in /var/lib/tidewake/.

Alternatives / notes: A separate hostname for the game.

D-014 2026-10-08

defaultArt test order: style frame (painted 640×360 concept) → master palette → tileset and sprites matched to it → mock screen re-composed from the real tiles.

Alternatives / notes: Tiles first, palette derived afterwards.

D-015 2026-10-08

defaultRooms are 20 × 11 JSON tile grids loaded into a TileMapLayer, with LA-style screen-scroll transitions. Overworld changed by D-029/D-030.

Alternatives / notes: One Godot scene per room (heavier to author and validate by script).

D-018 2026-10-08

defaultGamepad buttons by position, as in Link's Awakening on Switch: bottom = sword, right = interact, left and top = items, Start = pause, Select = map.

Alternatives / notes: Xbox-label mapping (B = sword) as Yala had.

D-019 2026-10-08

defaultHero body strips on a 48×64 canvas, feet anchor [24,56]; the sword is a separate overlay strip per direction that shares the feet anchor (as in Link's Awakening, where the sword is its own sprite).

Alternatives / notes: Body and sword baked together on one larger canvas.

D-020 2026-10-08

defaultBig objects (2×2 trees, cliffs, rocks) are fully solid, as in Link's Awakening; no canopy overlap or depth sorting in M0–M1.

Alternatives / notes: Trunk-only collision with the canopy drawn over the hero.

D-021 2026-10-08

defaultPalette v2: style frame v1 is readable but on the safe side of D-016. Add up to 4 accent colours (glints, glowing flowers, magic light) and push grass and water a step more saturated; hero, outline and skin ramps stay as they are.

Alternatives / notes: Keep the v1 palette.

D-022 2026-10-08

defaultTerrain transitions (path, shore, cliff edges) are a 16-tile corner set built by deterministic masks in tools/art/ from generated base materials, so seams always match.

Alternatives / notes: Generate every transition tile with image generation and fix seams by hand.

D-023 2026-10-08

defaultRooms have two layers: rows = ground terrain only, optional overlay = props (sign, rock, bush, flowers, tall grass, tree) as transparent cut-outs drawn over any ground, with their own collision.

Alternatives / notes: Props baked onto a grass background per tile, as on the SNES (breaks on path, shore and every new ground).

D-024 2026-10-08

defaultArt test result: keep 32 px tiles (D-002 go). The hero holds registration across all frames and directions; the meadow mock reads well after round 2. Polish before production: livelier walk, matched side profiles, lighter contours, less visible cliff and water repetition.

Alternatives / notes: Fall back to 16 px tiles (D-002's fallback); or another art round before deciding. See the gallery.

D-025 2026-10-08

defaultCurrency placeholder name "shells" (fits the coast); the real name and icon follow the story pitches (D-007).

Alternatives / notes: Any name from the story.

D-026 2026-10-08

defaultM1 feel defaults (Link's Awakening): hearts overlay the room top-left with an 8 px band; a wandering beetle hurts on contact; 2 px shake on hero damage only; bushes regrow on room re-entry; charge + spin attack is an M1 stretch, built only once the basic swing feels great.

Alternatives / notes: Taller opaque HUD band (−24 px of room); contact damage only while charging; no shake; bushes stay cut for the session; spin parked to M2.

D-027 2026-10-08

defaultA room edge without an exit is closed by an invisible wall, so art doesn't need a solid tile border.

Alternatives / notes: Require solid tiles along every closed edge (stricter, constrains room art).

D-028 2026-10-08

default?sword in the URL turns on a sword-swing preview in the published build (?sword=8 plays it 8× slower) until M1 makes the sword real.

Alternatives / notes: Debug builds only (no way to judge the swing on the web).

D-030 2026-10-08

defaultHow (D-029): overworld still authored as 20 × 11 chunks with a grid position, stitched into one continuous map; the camera follows the hero smoothly and stops at the world's edges; enemies wake within a margin around the camera and reset once far off-screen. Interiors and dungeons keep room transitions.

Alternatives / notes: One big hand-authored overworld map (harder to author and validate by script); camera zones that lock per area.

D-031 2026-10-08

defaultStory: pitch 1, "Tidewake" (cosy). The lighthouse at Brindle Cove went dark in the storm and the tide stopped turning; the keeper's new apprentice brings back the three parts of the lamp. Full pitches: docs/delivery/story-pitches.md.

Alternatives / notes: Pitch 2, "Low Water" (mysterious): the sea pulled out and a drowned town nobody remembers lies below the village. Pitch 3, "The Warden's Coat" (bittersweet): your sister sealed the storm and never came home; you follow her chalk marks.

D-032 2026-10-08

defaultGameplay timing lives in scripts/tuning.gd; frame_ticks in sprite JSON are the art's suggested values, and a test flags any drift.

Alternatives / notes: Sprite JSON owns timing (two places to edit when tuning).

D-033 2026-10-08

defaultDebug URL flags stay in the published build: ?sword=N (slow sword, D-028) and ?slow=N (whole game N× slower); without a flag nothing changes.

Alternatives / notes: Debug builds only (no way to check combat on the web build).

D-034 2026-10-08

defaultA seamless world is a full rectangle of chunks (one camera clamp); irregular coastlines are drawn with tiles, not holes.

Alternatives / notes: Worlds with holes and per-area camera limits.

D-035 2026-10-08

defaultAfter death you respawn at the start of the chunk you fell in, with full hearts; revisit with save points (Link's Awakening uses the last entrance).

Alternatives / notes: Last door or entrance used.

D-036 2026-10-08

defaultDungeon 1 = the Spark Caves draft (docs/m2-plan.md): 14 rooms, bombs, spark-urchins and tide crabs, the Urchin King. Its defaults hold: bombs hurt the hero for 1 heart; doorways 2 tiles wide; four-direction enemy strips; mini-boss snap and boss roll cost 1 heart; dungeon state is per session in M2 (saves come later); keep the bomb-only secret room; heart container +1 heart (pieces in M3); blast radius 2 tiles. Prize name, currency name and villager hints follow the story pick (D-031).

Alternatives / notes: Adjacent-only bombing (the vault puzzle then needs another gate); 1-tile doorways; save file in M2.

D-037 2026-10-08

defaultBomb blast radius 48 px (1.5 tiles), matching the 96 px explosion art, so the hit area is what you see; overrides D-036's 2 tiles. The vault puzzle in docs/m2-plan.md is laid out for it during M2 authoring.

Alternatives / notes: 2-tile radius with a 128 px explosion (very large on a 32 px grid).

D-038 2026-10-09

defaultThe charged-water tell reuses urchin_charge, so one electric motif means "danger soon" everywhere.

Alternatives / notes: A separate, quieter charged-water sound.

D-039 2026-10-09

defaultWhen commits start, Godot's *.import files are committed next to their assets (Godot's recommendation); .godot/ and build/ stay ignored.

Alternatives / notes: Ignore *.import and let each checkout re-import (slower, settings can drift).

D-040 2026-10-09

default?seed=N (deterministic drops) joins the debug URL flags in the published build (D-033); without a flag nothing changes.

Alternatives / notes: Strip all debug flags from release builds (the browser check would need a separate debug export).

D-041 2026-10-09

defaultMusic starts early with one original overworld theme sketch in the M1 playtest build, so Pierre can judge the direction by ear before the five M2 pieces; synthesized in code, OGG for the web.

Alternatives / notes: Wait for M2 to start music (no early feedback on the direction).

D-043 2026-10-09

defaultWater edges collide only where water is drawn, so you walk right up to the shore; cliff edges stay full tiles. Through a door, invulnerability frames carry over while knockback, a swing, hit-stop and a buffered press are cleared.

Alternatives / notes: Finer collision on cliffs too; clear invulnerability at doors.

D-044 2026-10-09

defaultPhone layout details: portrait layout only when touch controls show; controls low for thumbs, leaving a band under the game (future home for a mini-map or items); landscape overlays the controls on every current phone (side bars too narrow); music −8 dB under SFX, resumes after interiors, mute on the pause screen.

Alternatives / notes: Controls centred in the free band; music restarts after interiors.

D-047 2026-10-09

defaultSword hits get punchier: an impact spark at the contact point, a short squash on the enemy, a 1 px shake on enemy hits too (D-026 had shake only when the hero is hurt), and a stronger white flash; tune hit-stop after Pierre hears the sounds.

Alternatives / notes: Keep the M1a feedback and only fix the sound.

D-050 2026-10-09

defaultHero proportion: option B, 36 px tall (study in art/actors/hero-study/compare.png): compact and big-headed, scarf, hands and sword still readable. The full hero redo uses it.

Alternatives / notes: A, 40 px (closer to today); C, 32 px (exactly one tile, details get tight).

D-051 2026-10-09

defaultTouch d-pad is fixed in place (touch reach 1.5× its radius, equal 45° direction zones); the silent <audio> keep-alive runs on Apple devices as a backup to audioSession; hit-stop stays 5 ticks until Pierre hears the hit sound.

Alternatives / notes: Re-centring pad or wider cardinal zones; keep-alive only where audioSession is missing; hit-stop 6–7.

D-052 2026-10-09

defaultControl details: keyboard J/Z sword, K/X action, I/C and U/V items, Q/L shield, E/Shift dash, Esc/P/Enter menu, M/Tab map; shield and dash on the R/L shoulders (triggers unused for now); action reaches the adjacent cell; Sleeping Sea levelled by a −2.2 dB manifest gain so the file stays byte-identical to Yala's; the down sword hitbox keeps its 4 px past the blade (same reach as before).

Alternatives / notes: Triggers for shield/dash; re-encoded music; per-direction reach (down 30 px).

D-053 2026-10-09

defaultM2 production starts in parallel with Pierre's M1 replay (his notes become a small tuning task). The master palette may grow to 64 colours for dungeon biomes, adding ramps without changing existing ones.

Alternatives / notes: Wait for the M1 sign-off before M2; keep 48 colours and reuse ramps for caves.

D-054 2026-10-09

defaultTide crab claw box: a 16×16 box centred on the drawn claw tip of each direction's snap frame (measured from art/actors/crab/), live during snap; the 48 px lunge moves the crab itself. What the player sees is what hits, so the box follows the art, not a fixed 16 px past the body. Urchin pulse frame timing [6,6] and ring [4,4,4] ticks accepted as drawn.

Alternatives / notes: A fixed 16 px extension past the body edge (art falls 8–12 px short on three sides); a separate claw overlay or a larger crab cell.

D-055 2026-10-09

defaultTileset contract after the cave review: names ending in _<integer> are reserved for animation frames (halves _l/_r, _t/_b; variants _b or _vN), gates come only from the room's doors list and are drawn by the engine from the tileset (never in overlay), bridges are walkable ground tiles in 1-wide runs, plus cut_to, "collision": "corners" and solid_from (contracts.md, Tiles). Art renames in a fix round; the engine reads gates from the tileset in a cave-integration task.

Alternatives / notes: Change the engine to animate only explicit frames lists (touches the meadow and every room); gates as overlay tiles cleared by the engine.

D-056 2026-10-09

defaultDungeon doors as built in M2 E1: a shutter belongs to its own room (the neighbour shows a plain open doorway); a cleared room keeps its shutters open while its enemies respawn on re-entry, as in Link's Awakening; key and boss doors open after walking into them for 8 ticks (rattle without a key). Room JSON in contracts.md "Rooms".

Alternatives / notes: Shutters on both sides; enemies stay dead once cleared; unlock with action only.

D-057 2026-10-09

defaultDungeon rules after the room re-sketch for the 2-row north wall: the urchin pulse hurts the hero only inside the drawn water of a charged cell (its corner shape, like D-043 collision), so shore half-cells that look like floor are safe; a bomb may be placed on a corner-collision water-edge cell; push blocks never enter doorway, doorway-depth or ledge cells; side doorways stay at rows 4–5 (the engine standard; the art mocks' rows 5–6 are mocks); in the boss room the King charges its ring directly and the phase-2 urchins pulse by radius only (no pool link, so the 48-cell cap stays).

Alternatives / notes: Whole-cell pulse (then stepping stones must be whole floor cells); doorways at rows 5–6; raise the pool cap for room 13.

D-058 2026-10-09

defaultBoss boxes as drawn (M2 A4): Urchin King body circle r 44 centred [0,-44] in feet space (spine ornament may reach 6 px past it, not part of the box); Shellback body [-28,-18,56,18], hurt [-32,-44,64,44], D-054 claw boxes centred down [-22,-5], up [21,-46], left [-31,-23], right [30,-21]; hero hold-up item anchored at the hands [0,-40]; Shellback's 6-frame death (45 ticks) replaces the plan's 40-tick hold.

Alternatives / notes: Re-derive boxes in the engine task; a 40-tick death cut short.

D-059 2026-10-09

defaultChests and hold-up as built in M2 E3: chests open only from the front (below, facing up, with action); the item fanfare replaces item_get at a hold-up (the SFX stays for floor pickups and when music can't be heard); dungeon rooms play the Spark Caves theme, the overworld the Sleeping Sea, the house is silent, themes crossfade over 0.8 s and resume where they stopped; the bed ducks 18 dB under a fanfare; the world freezes during the hold-up and text while music and SFX play; a rising chest fades in over 30 ticks and turns solid only once the hero is off its cell.

Alternatives / notes: Chests open from any side; item_get together with the fanfare; restart themes from the top.

D-060 2026-10-09

defaultBombable targets swap by break_to (contracts.md, Tiles): a cracked cliff breaks into a walkable 1-wide gap through the three cliff courses, the well cover into an open well, boulders into rubble, all by the same engine rule as the cave's cracked walls. Enemy and boss sprites record their claw-tip box centres in their own JSON (claw_tip_feet) so the engine reads D-054/D-058 from the art.

Alternatives / notes: Engine-side lookup tables per tileset; cliffs that break to decorative rubble only.

D-061 2026-10-09

defaultFrom M2, standing things are depth-sorted by their feet (z = 1000 + feet y; solid props one layer per row; ground, walkable decorations, crystals and gates underneath; effects on top), extending D-020 now that rooms have pillars and a tall north face. During a hold-up the open chest is drawn darker so the held item reads (until chest_open is redrawn). The boss and mini-boss loops import with loop=true.

Alternatives / notes: No sorting (the hero would cover pillars he stands behind); Godot y-sort with the hero moved into each room's tree.

D-062 2026-10-09

defaultThe 14 Spark Caves rooms live as staged data in design/d1/ (validated, with mocks) until the engine feature each room needs lands; each engine task imports its rooms into data/rooms/. The level designer's "Format notes for the engine" in docs/delivery/m2-l1-rooms.md are the data contract for the remaining features (enemy types, switches[] with on/while_down, swaps[], boss_win, props in overlay in their initial state, push blocks reset on entry). Plan changes accepted: the vault re-laid for the 48 px blast (D-037) with the hit switch's hurt box on the top half of its cell, a 2-row yard in the crab pen, a pillar line in the compass room with the ledge on row 7, the stair as a sealed channel, a 2×2 island in the sparks room.

Alternatives / notes: Author rooms only after every feature exists; keep the plan's 64 px vault.

D-063 2026-10-09

defaultWater and urchins as built in M2 E5: "in water" uses the drawn water shape (D-043); pools flood-fill shallow and shore cells only, deep-shore cells join pools once charged_deep_shore_* art exists; wading hides the hero's lowest 4 px with a shader clip and shows wade_ripple; urchins never hold a shutter room shut (they can't die before bombs); a sword hit doesn't pause an urchin's clock; splash needs 20 dry ticks before it repeats and is silent when a room starts with the hero in water.

Alternatives / notes: Deep shores in pools now (no charged art); a mask node for wading; urchins count as hostiles for shutters.

D-064 2026-10-09

defaultPuzzles as built in M2 E7: the 14 d1 rooms are imported (?dungeon=d1, not linked from the meadow) with unbuilt features inert but validated (crabs, Shellback and the King don't spawn or hold shutters yet, ledges walkable both ways until the hop, cracked doors shut); hit switches latch once hit; a floor switch with on and no while_down stays down, with while_down it pops back up; blocks slide over floor, shallow water, switches and decorations only; a spike bar rises only once the hero is off its cell; swaps fade in over 30 ticks; the bridge uses chest_rise until a bridge_rise sound exists; the pulse flash is engine-drawn (4 ticks of off-palette blend); debug ?room=<id>.

Alternatives / notes: Toggling crystal switches as in LA; charged-flash tiles from art; per-chest reach keys.

Sound

The game's original music and sound effects, to listen to here. Your ear decides. Turn the volume up a little; nothing plays until you press play. Items tagged check this are the by-ear checks we cannot do ourselves.

Music

Overworld meadow overworld_meadow

D major · 112 BPM · 4/4 · 32 bars · 1:08 (68.6 s) · loops

What to listen for

  • Does the tune feel like this coast, bright and a little magical, or too plain / too busy?
  • Is the walking tempo right against the hero's speed?

Overworld sleeping sea overworld_sleeping_sea

D minor · 116 BPM · 4/4 · 32 bars · 1:06 (66.2 s) · loops

Dungeon spark caves dungeon_spark_caves

D Dorian (D minor, raised sixth) · 72 BPM · 4/4 · 24 bars · 1:20 (80.0 s) · loops

What to listen for

  • Is it calm enough for half an hour, or does the lead in the first section still pull attention (the easiest fix is the lead gain or resting it more)?
  • Do you hear the overworld tune in the crystal section and in the bass, or does it need to be more obvious (the crystals could play it at the original speed)?

Fanfare item fanfare_item

D major · 100 BPM · 4/4 · 1 bars · 0:02 (2.9 s) · loops

Fanfare heart fanfare_heart

D major · 66 BPM · 4/4 · 1 bars · 0:03 (3.9 s) · loops

Miniboss shellback miniboss_shellback

D minor (Dorian sixth, Eb and G# as danger notes) · 105 BPM · 4/4 · 16 bars · 0:36 (36.6 s) · loops

What to listen for

  • Does the sideways lurch read as the crab, or does it want a straight beat (the stomp grids are two lines)?
  • Is the horn too brash for the cave, or just right for a mini-boss (lead gain, or swap the horn voice for breath in the lead)?

Boss urchin king boss_urchin_king

D minor; the hero's answer in D major · 144 BPM · 4/4 · 32 bars · 0:53 (53.3 s) · loops

Sound effects

Sword and combat

Enemies

Hero

Pickups

Doors and keys

Bombs and switches

Bosses

Menus

Your notes on the sound

Anything that sounds wrong, harsh, too dry or too similar. Name the sound if you can.

Playtest notes

Anything you notice: bugs, feel, ideas, answers. Notes go to the top of the lead's next to-do list.

Recent notes

Loading notes…