The game shipped to a public web arcade with ZERO touch input: on a phone you
could tap PLAY and then nothing moved. Fixes that, and the framing bug it
exposed.
- src/blob/touch.ts: a third input source beside keyboard and gamepad. Floating
thumbstick in the lower-left (touch anywhere in the zone and THAT point is the
stick centre — forgiving on a screen with no tactile edges) plus a JUMP button
lower-right. Emits the same {x,z,jump} shape the gamepad poll produces, so the
controller consumes all three sources through one path (including the same
buffered jump edge). Installs NOTHING on a non-touch device, so desktop gets no
phantom UI. Hidden until ui:play so it can't sit behind the title card.
`?touch=1` forces it on to preview the phone layout from a desktop.
- index.html: touch-action:none — the browser otherwise claims drags on the game
surface for scroll/pull-to-refresh, so steering panned the page.
- camera: FOV is VERTICAL, so a portrait phone saw ~30 degrees horizontally vs
~92 on 16:9 — the blob filled the screen and the course was invisible. Pull the
rig back on narrow aspects (no fisheye), recomputed per frame so rotating the
device adapts. Exactly 1.0 at 16:9 and wider, so desktop is untouched.
- world.ts: clamp the viewport to >=1px. A zero-height container made aspect
0/0 = NaN and poisoned the projection matrix (blank screen healed only by a
later resize); mobile browsers genuinely report 0 during orientation changes
and address-bar collapse.
Verified with synthetic TouchEvents at 375x812: stick drag-up drives vz -8.47,
byte-identical to keyboard W under the same settled camera; JUMP takes vy 0 to
6.85 and the blob rises; nub/ring track the drag; layer hidden pre-play, shown
post-play. Desktop at 1280x800 keeps base distance 9 / height 4.5 with no touch
layer. tsc + 10 test suites green.
ponytail: tried two portrait composition refinements (flatter rig, aim-ahead
lead) and reverted BOTH — each traded floor for sky and framed less course than
the plain pulled-back rig. Noted in-file so nobody re-derives them.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| .claude | ||
| assets | ||
| demos | ||
| docs | ||
| lanes | ||
| public/assets | ||
| scripts | ||
| src | ||
| tools | ||
| .gitignore | ||
| deploy.sh | ||
| editor.html | ||
| GDD.md | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vite.config.ts | ||
BLOBBO
Fall Guys × Splatoon × Micro Machines: wobbly blob racers on giant Rube-Goldberg courses where the paint that lands on you is your loadout — relative % coverage per colour = your buffs, weight, and size.
- GDD.md — the design document (v0.1, in review). Start here.
- docs/IDEA.md — the original raw idea capture (2026-07-17).
- tools/mb.py — MODELBEAST farm client (concept art / mesh gen
on the local render farm).
tools/concept-wave-1.json= first asset wave. assets/concepts/— generated concept art (review gate for the mesh wave).
Status: pre-production. GDD under review; next step is per-lane execution instructions (see GDD §11) once features are signed off.