Backlog now carries only conditionals (torque-servo, glass-through- glass, slope + cross-frame residuals, destructible decor, bumper tuning), parked audio, presentation polish candidates from this round (twist-chute dressing, rider wander, frame-local camera banking), and the updated pin table + re-pin workflow.
- commit
- 7992ac40cd86ead1a37c2f1597d08497e3d3c434
- parent
- 4c15954d499cf11ec022dda9fb790d6b15bc6acc
- author
- Dami <dami.etoile@gmail.com>
| M | progress.md | 98 | +++++++++++------------------- |
@@ -3,42 +3,33 @@
33 This file is exclusively the backlog. Completed work lives in `git log`44 (each round carries a detailed commit message) and in the agent memory55 (measured kit facts, physics laws, debugging methods, pin tables).6-Current state in one line: M1–M15 + the autopilot/boost/glass rounds are7-live — endless mode is an N-marble physics race (1–9999 racers, fuel8-boost economy, glass marbles, hero-anchored streaming), loop mode is the9-finite inspection bench. 116 tests green.6+Current state in one line: M1–M16 are live — endless mode is an7+N-marble physics race (1–9999 racers at 4× realtime via physics LOD,8+fuel boost economy, glass marbles with real cores, rubber-banded9+pilots, ghost respawns), the world reorients gravity 90°/180° between10+islands (wall/ceiling riding), fans blow marbles around, spurs drop11+branch riders through real holes. 154 tests green, `deno task check`12+clean.1013 11-## Race presentation14+## Presentation polish1215 13-- **Leaderboard HUD (USER SPEC — minimal)**: at MOST `#{PLACE}/{N}`14- (hero's place out of peers+1). We have a very simple ui — no strips,15- no lists. The CUA `race` telemetry already carries place data.16-- **Game-feel UI skin (USER)**: the toast system reads as WEB, not17- game. Source UI library assets from the user's game assets folder:18- `/Users/dami/Documents/Game Dev Asset Packs/kennygames/UI assets/`19- (candidates: "UI Pack", "UI Pack - Sci-fi" for the void aesthetic,20- "Fantasy UI Borders"). Restyle toasts/HUD from those.21-- **Respawn spawn-in envelope**: respawned racers pop into place — give22- them the streamAnim-style scale-in (the decorative peer ring had one;23- real racers don't).16+- **Twist-chute dressing**: the reorient corkscrew renders the bare17+ collision ribbon (violet, double-sided) — functional and readable,18+ but it could carry rim rails / an entry banner if it should feel more19+ authored. Wait for user feedback on the current look.20+- **Rider lanes at pack scale**: demoted far racers glide fixed lane21+ offsets — reads as an orderly stream from distance; per-rider wander22+ (pilotOffset reuse) would loosen it if it ever reads mechanical.23+- **Camera banking under reorient**: the follow-cam's banking lean24+ samples the path in the world y-plane; inside a 90° frame the lean is25+ computed against the wrong plane (tiny effect — the up-vector roll26+ dominates). Fold banking into the local frame if it ever reads off.2427 2528 ## Physics / feel2629 27-- **Collision-immunity window on respawn** (deferred from M15): a28- respawned marble materializing inside the pack should ghost through29- neighbors for ~2s. Needs shape filter bits in the shim30- (b3ShapeDef filter) + a timer per racer.31-- **Rubber-banding through pilot skill** (never thrust — Melder/Game AI32- Pro rule): trailing racers get braver corner margins + earlier jump33- commits; leaders get conservative ones. All knobs exist on `Pilot`;34- the missing piece is a race-position → parameter modulation law.3530 - **Torque-servo authority**: only if feel ever demands spin-on-bounce /3631 ice burnouts. Force-at-COM + Box3D contact friction is the standing3732 decision; revisit needs new shim surface (apply torque).38-- **Pack scale realtime**: N=9999 runs at ~0.27× realtime (the 10k-body39- Box3D step is the wall). If max-scale realtime matters: physics LOD40- (far racers kinematic riders on the rail, promoted to bodies near the41- camera) or substep reduction at large N.4233 4334 ## Rendering4435 @@ -46,33 +37,16 @@ finite inspection bench. 116 tests green.
4637 transparent shells (only opaques land in the transmission buffer).4738 Escalation if close-ups demand it: port a MeshTransmissionMaterial-4839 style shared-buffer material (drei-vanilla reference).49-- **Follow-cam island clipping polish**: occluder raycast exists; edge50- cases remain when the cam trails past island masses.5140 5241 ## Generation5342 54-- **GRAVITY REORIENTATION BETWEEN ISLANDS (USER HIGHLIGHT — the real55- gravity feature)**: island A connects to island B where island B is a56- 90° or 180° GRAVITY DIRECTION CHANGE — riding walls/ceilings, not the57- current subtle forward tilt. Machinery notes: per-marble gravity is58- already a delta force against a fixed world vector59- (stationGravityDelta), so arbitrary per-station gravity directions60- are one rail-mod away; the real work is generation (planning island-B61- runs on reoriented planes + collision channels on walls/ceilings),62- the autopilot's ground-plane math (currently assumes +y up in the63- corridor/normal projections), and the camera up-vector following the64- local gravity. The old "camera pitch during gravity zones" idea is65- subsumed by this.66-- **FANS AS INTERACTIVE ELEMENTS (USER)**: fans were always meant to be67- something marbles INTERACT with — a directional force with many68- unexplored uses (cross-wind zones pushing marbles laterally, updraft69- columns for lift/jump assists, blockading gusts, fan-powered70- boost corridors). Fan placements + spin animation exist71- (track.ts spinners); the missing piece is a force field volume tied72- to fan placements, fed into the per-marble force pass.73-- **Endless stream goldens**: pin per-segment hashes for fixed seeds so74- planner refactors can't silently reshuffle streams (seed freeze itself75- stays OFF per user).43+- **Cross-frame world overlap (residual)**: occupancy prevents overlap44+ in PLAN space; after a reorient, co-live chunks in different frames45+ could in principle overlap in world space. Never observed (the46+ survivability corpus + goldens are clean, twists claim a swept drum47+ and the stream departs along the twist axis) — if a fuzz ever finds48+ interpenetration, add a world-space AABB check across frames at49+ generation time.7650 - **Slope cubic-spillover residual**: island terraces got the spillover7751 low-base fix; PLAIN slope windows' neighbor cells still claim flat7852 bands while the realized cubic dips slightly below its base near part@@ -81,11 +55,11 @@ finite inspection bench. 116 tests green.
8155 it.8256 - **Destructible decor**: physics now exists to collide with; dormant8357 until something can hit decor (island-top pieces are off the channel).84-- **Takeable spurs in endless**: the loop testbed proved the machinery85- (LoopSegment.alt + guaranteed falls); wire them into endless as86- respawn variety.8758 - **Bumper density tuning**: after watching feedback (pins currently8859 only on wide island decks).60+- **More fan set-pieces**: cross-winds, updraft columns and boost61+ corridors shipped; blockading gust WALLS (a fan bank the pack must62+ time) remain unexplored vocabulary.8963 9064 ## Audio (PARKED — user rule)9165 @@ -99,9 +73,11 @@ finite inspection bench. 116 tests green.
9973 ## Housekeeping10074 10175 - Scenario pins move whenever a planner clause changes the weighted102- draw — re-scan with a scratch script (current pins recorded in103- memory + tests).104-- `deno task check` has two pre-existing failures unrelated to the game105- (src/server/main.ts Timeout typing, tools/physics-debug/phys-contact.ts106- proxy-union access) — `deno task test` is the real gate. Fix when107- touching those files.76+ draw — re-scan with a scratch script (current pins: wide-scan-5 jump,77+ grav-scan-11 propeller, wide-scan-1 diamond, wide-scan-7 wide,78+ helix-scan-25 helix, wide-scan-17 icy, wide-scan-21 gravity,79+ jump-scan-4 + wide-scan-10 spurs, biome-3 + abs-1 + dami reorients);80+ regenerate endless goldens with `deno run --allow-read --allow-write81+ tools/pin_endless.ts`.82+- `deno task check` is fully clean now — keep it that way; `deno task83+ test` remains the gate.