Repository navigation
feat: rebuild the menu and Hidden Garden prologue as one system - #170
Merged
Merged
Conversation
Three boards from the Mensa and lab photos, sized against the 76 px hero: the coffee machine at 80 px fills its 40 x 80 save box, the food pickups are 13-18 px, the pocket computer is a 19 x 10 px case. Awaiting review; not exported yet.
CoffeeVisit seats Dexter beside every coffee machine that has a Dexter spawn. The first save there plays bow, sweat and the pocket computer and muffin gift, which unlocks the map. Pools from defeated enemies wait until the next save, when he absorbs them. Story scenes now share one atlas loader so their preloads no longer collide. Dev: Shift + F4.
Both branches added a scene to the registry: Flow from the stack and CoffeeVisit here. Fixes found playing it on the merged stage: Preload loads every atlas (story scenes loading the same keys stalled it), the machine uses the approved coffee-machine atlas, and Dexter's first pose follows a save made between frames. Dev builds expose window.game.
Jenny revs, charges nose first, crashes at the far wall, sheds parts and is stunned, in three phases over 30 hits. Her armoured nose takes chair hits only from behind or while she is stunned. The arena comes from collision (boss gate and floor line), and clip lengths come from her anims.json. Beating her emits boss-defeated, which starts the ending. Dev: ?boss-test.
compare.py stride measures the approved cycles: the walk's stride is 43 px and the run's 82 px. export_atlas passes the stride into anims.json, and locomotion plays both cycles by distance, so the planted foot no longer slides. Speeds drop from 3.5 / 6 m/s, 2.3-2.5x too fast for the art, to 2.2 / 4.6 m/s. The rover's spot range is its own value. Part of #156.
The chair is armed by its pickup box (item chair), not by the region name. The approved chair-pickup frame lies there, and the carried state lives in the game registry, so it survives region swaps and respawns. Dev test URLs start with it. Part of #156.
…logue # Conflicts: # game/src/stage/assets.ts
docs/15 sets the bar Alexander asked for (menu, loading, layers, wind, leaves, water, grounding, story), the five workstreams and the files each owns, and the contracts between them. Progress goes in docs/prologue-tracker.csv.
readability.py puts prologue sprites at 1x on Hidden Garden bands, reports fill and outline contrast, flags LOW sprites and previews a 1 px rim light. export_key_art.py writes opaque 16:9 menu art into game/public/assets/ui.
fx-leaves (birch, maple, oak 5 each), fx-ground (dust, grass, leaf-kick, splash 4 each), fx-water (lily-bob, ripple, sparkle 4 each) exported for review; dexter-prologue (look-back 3, wait 3, sit 2) in tmp review only; menu-key 1280x720 into game/public/assets/ui.
art: prologue FX, Dexter additions, menu key art, inventory
…g screen and menu
…rt and arc-driven jump
Alexander approved dexter-prologue (look-back 3, wait 3, sit 2 at 27 px), so it is exported into the game and loaded with the other boards.
Far and mid plates rendered whole and quilted again; the sky cross-fades. Water, path and rear filled behind the foreground (no black holes when it slides). A grass strip (06-near, z 6, scroll 1) painted along every chunk's trail covers the feet; the chunks' art carries it. atmosphere.json sways it from its base.
…feedback, bouncing parts
Walk-offs shorter than 0.12 s keep the locomotion cycle, step drops under 10 px land without a pose, a moving landing is its crouch only and goes straight into the cycle the body is in (no idle and run-start at full speed). The jump crouch shows for one rendered frame and is skipped out of a landing; a released jump brakes at 3x gravity once it can still reach 52 px, so a tap hop tops out in 0.18 s instead of 0.29 s. Idle variants start at the idle loop, hold their key pose and never repeat; check-wounds plays back out.
The standing hero is drawn as three crops of its own frame: the chest rises 1 px for two idle loops in four (the split row doubled), the poncho's lower half takes 1 px downwind while a gust of the region's atmosphere wind passes (hysteresis, 0.35 s hold), the legs never move. Whole pixels only; any frame that is not a hero idle frame is drawn whole.
depth_layers.py clear: rear pieces that touch the chunk's top and end above 320 px are repainted as sky, far and mid by the model; their pixels go to sky where sky-coloured, else to the nearer of far and mid.
The grown chunks hg-1-0 to hg-3-0 lose the canopy pieces with straight cuts (the hill oak is a stump on the crest now); sky, far and mid rebuilt from the new masks, parallax.png at five camera positions.
docs/09 gets the hot-dog steps (clear, near, under, complete, fills); docs/15 the NEAR_DEPTH band and the P2/P3 tracker rows.
…/prologue # Conflicts: # docs/15-PROLOGUE-SLICE.md
…e/prologue # Conflicts: # docs/15-PROLOGUE-SLICE.md
The near grass strip and its under-fills were painted along the walk lines from before the terrain rework (#173), which moved several of them (the hg-1-0 line by 30 px). depth_layers near and under ran again for all five chunks, then split_layers. export_stage --verify rebuilds every chunk exactly, using the layers worktree's newer rest plates.
Member
Author
|
Wave 2: Alexander's playtest fixes, all merged into
Checks on Replayed with the game stepped by hand:
Known and still open:
|
arudaev
marked this pull request as ready for review
October 24, 2026 04:48
rc-0-0's 557 deck stopped 2 px short of the 515 deck, so a running hero fell into the water and reset; it now meets the 42 px face, which he jumps. rc-2-0's 572 floor left a 5 px gap and a 17 px rise, 1 px over the step-up; it now meets the 555 floor as a 16 px step. hg-3-0's first stone starts 8 px earlier, inside its painted edge, so a jump off the rubble at a full run reaches it.
depth_layers near now matches the strip's hue to the chunk's own art under it (match_hue) and pulls pink-magenta plants 70 % of the way to red; the garden has no pink. The five strips were recoloured from their saved paintings (--reuse, no new image calls). The 300-330 degree share fell to under 2 %, and export_stage --verify rebuilds every chunk exactly.
depth_layers and collision_check import numpy, so the art-pipeline job failed on the runner.
The hero has no carrying frames, so after the pick-up the chair vanished until the first swing. The drawn chair-pickup frame now rides behind the hero (seat behind the backpack, legs over the shoulder), follows his facing, and hides while a chair pose or the pick-up holds it in his hands.
This was referenced Oct 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The prologue slice rebuild (docs/15): from the loading screen, through the menu and the whole Hidden Garden prologue, into the anomaly. Five workstreams were built in parallel against one contract, merged and played here. It also carries #154 (Dexter at the coffee machine), #164 (walk and run by stride), the chair pickup and #163 (Jenny's fight), so this branch plays from the title to the ending.
Closes #50, #52, #57, #159. Part of #51, #156, #158, #160.
The five workstreams
art/inventory.csv;fx-leaves,fx-groundandfx-waterboards; Dexter'sdexter-prologueposes (approved); the menu key art;scripts/readability.py(#159)surfaces.json: feet sink 1–3 px by material with grass tufts over them; footstep and landing puffs fromfx-ground; jump and fall follow the arc; drawn hurt frames instead of a white flash; steady cameragame/src/boot/, with boards as data instage/boards.json, retry/continue on failure and a watchdog; the pocket-computer loading screen; the menu over the key art with a live garden behind itstage/depth.ts); wind shader anchored on each plant's base; front and back leaves; blurred foreground drawn over the hero; pond ripples, shimmer, lily pads, the hero's reflection; the wrong reflection onanomaly-reveal;addRimWave 2: the playtest fixes (P1–P8)
After wave 2:
Integration fixes on this branch:
?boss-testspawn: it was 10 px under the floor and looped through resets; it now lands on the walk line.atmosphere.jsonassets, after the JSON wave. Without this the pond's wrong reflection was never requested.BOARDSconflicts were resolved by moving the list toboards.json.Checks
check_docs.pypasses,collision_check.pyreports 0 problems, andexport_stage.py --verifyrebuilds every chunk exactly.?skip-menu: the whole prologue, through the 404 and the pull. Screenshots are ingame/verification/prologue/.boss-defeated→ Ending (glitch) with the stage frozenHow to test
Restart
npm run devafter any asset export, because Vite only serves public files that existed when it started.Dev shortcuts:
?skip-menuskips the menu.game.scene.getScene('Flow').prologue.skipToPond()jumps to the jetty.game.scene.getScene('Preload').tracker.summary()shows the load state.Known gaps