First human feedback: "ship movement feels sluggish". It was, and the cause was a bug rather
than a taste call.
`disc.damping` is applied every step AFTER accel, so the real cap on lateral speed was never
`maxSpeed` — it was accel/damping. At 78/6.5 that is 12 u/s in theory and a MEASURED 10.16,
which means the authored maxSpeed of 13 was unreachable and had been decorative since round 1.
A full tube crossing took 1.95 s. Against 12-20 u/s of forward flow that is 30+ units of canal
travelled while you cross the lumen once — so anything read late simply cannot be answered,
which is exactly what sluggish feels like from the cockpit.
accel 78 -> 155 (maxSpeed is now the ACTUAL cap: 155/6.5 = 23.8 > 19)
maxSpeed 13 -> 19 (crossing 1.95s -> 1.10s, 1.77x faster; ramp to top speed 0.12s)
damping 6.5 unchanged — it is what makes the ship STOP crisply, and precision was never
the complaint. Only the ceiling moved.
Knock-ons handled rather than left to rot:
- bank.gain 0.055 -> 0.04, so 19 u/s lands exactly at bank.max: full deflection still means
full roll and everything below it stays proportional. At the old gain the ship would have
been pinned at max roll almost permanently.
- arena thrust/maxSpeed 44/11 -> 90/16. Those were sized against the old disc; leaving them
would have made every room feel like treacle next to the corridor leading into it. Still
deliberately under the tube's flow, per the GDD's "slower, spatial".
Verified no tunnelling at the new speed: pinned at 19 u/s straight into the wall, the ship
reaches rho 10.51 against a wallRho of 11.38 and stays there — 0.32 u of travel per frame at
60 fps, well inside what collideWall resolves.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| .claude | ||
| docs | ||
| pipeline | ||
| tools | ||
| web | ||
| .gitignore | ||
| README.md | ||
GUTS — a fantastic voyage through the alimentary canal
Browser flight-combat game (three.js, zero build step). You pilot ENDO-1, a microscopic probe, mouth → rectum through five anatomically-grounded biomes: ride peristalsis down the esophagus, cross the acid sea of the stomach, thread the villi forest of the small intestine, survive the gas swamps of the colon. Fantastic Voyage × Star Fox × Descent.
- Design: docs/GDD.md · Look: docs/ART_BIBLE.md
- Architecture + contracts: docs/TECH.md
- Asset generation: docs/PIPELINE.md
- How we work (lanes/rounds): docs/PROCESS.md — read this first if you are a lane
- Current round: docs/LANES/ROUND1_INSTRUCTIONS.md
Run it
cd web && python3 -m http.server 8140
# http://localhost:8140 — the game
# http://localhost:8140/?stub=1&dbg=1 — stub world + debug HUD (works from day 0)
No bundler, no npm, no build. ES modules + import map; three.js r175 vendored in web/vendor/
(never CDN — the game must run offline). Before you finish a session: bash tools/qa.sh.
The one-paragraph tech pitch
The whole canal is a spline. World position is (s, θ, ρ) — distance along the canal,
angle and radius in the cross-section. Tube walls are chunked extrusions along
parallel-transport frames; peristalsis and breathing are vertex-shader displacement
(cheap, squishy, everywhere); collision is an analytic radius test (no physics engine).
Caverns (mouth, stomach) switch the same controller to free 6DOF. Look is synthetic
scanner — dark endoscope void, SEM-style monochrome walls with FLUX-generated detail
textures, emissive-coded enemies. Everything is seeded + deterministic, and every asset is
optional at runtime — the game boots and plays asset-free with procedural fallbacks.
Hard laws (all lanes)
- Determinism. No
Math.randomoutsidejs/core/rng.js. Seeded RNG only. qa.sh greps. - Assets are optional. Missing texture/model/audio ⇒ procedural fallback, never a crash.
- Eyeball everything. Visual work isn't done until a screenshot is in
docs/shots/laneX/. - Perf budget: ≤300 draw calls, 60 fps on M-series / mid laptop. Measure via
window.DBG. - Free-first. Local MODELBEAST generation before any paid API; fal.ai is a gated fallback (John's go). See PIPELINE.md.
- Git: stage only your exact paths, commit + push each session, never
git add ..
Deploy
Live: https://partly.party/gutsy/ — bash tools/deploy.sh (QA gate → rsync web/ minus
dev/ → docker cp into forum-nginx → verify). No build step; web/ ships as-is.
Two things to know before you touch it, both documented at length in the script header:
- It's ephemeral. Content lives in the container's own layer (like blobbo/glytch), so a
docker compose up --force-recreateor nginx image bump wipes it — re-run the script. The durable fix is a bind mount inforum/docker-compose.yml(what cratewars/roguelike use), which costs a forum-nginx recreate and brief partly.party downtime. - A 404 there returns HTTP 200. nginx's catch-all
try_files ... /index.htmlserves the arcade index for any missing file. Verify on content, never on status codes.
Origin: ssh://git@100.71.119.27:222/monster/guts.git.