- GDScript 95.1%
- Shell 1.3%
- GAP 0.9%
- Python 0.8%
- HTML 0.7%
- Other 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The operator's complaint, measured and fixed at the surface rather than in the car. Before: at 30 m/s the south pass / ramp / deck transitions demanded 15-17 m/s^2 of centripetal acceleration where gravity supplies 9.8, so the car unloaded - 7% of ticks in contact, 101 contact losses, 0.763 units airborne down the plank descent. Three changes, together (the operator chose 'both'): - the grade is halved. The ramp climbed ~9.4 units over ~32 horizontal units (29%, not the 16% its comment claimed); the deck drops 12.09 -> 8.54 and the climb is spread over more of the approach. Max demand per elevated section is now 7-8 m/s^2 at 30 m/s, i.e. under gravity. - CONTACT_BOUNCE 0.35 -> 0.15, and the contact spin-out now needs a real impact rather than any contact, so a landing costs speed rather than steering. - ELEVATION_EASE 12 keeps every flat<->slope join continuous (one profile, read by the ribbon, collision, kerbs and checkpoints alike). Measured after, same instrument, same driver: at 30 m/s the descent is 100% of ticks in contact, 0 contact losses, peak lift 0.005 units, mean vertical accel 4.6; at 16 m/s, 100% contact and mean 6.7. The two failed tests are green, plus the west U-turn and the brake-into-a-corner wedge regression the smaller car caused. 194 test cases, 0 failures. |
||
| .pi/agents | ||
| addons/gdUnit4 | ||
| assets | ||
| data | ||
| docs | ||
| scenes | ||
| scripts | ||
| shaders | ||
| tests | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| CONTRIBUTING.md | ||
| export_presets.cfg | ||
| GLOSSARY.md | ||
| project.godot | ||
| README.md | ||
Tiny Turbo: Table Turmoil 🏎️
The 3D browser sequel to Tiny Turbo: the same eight comical drivers and the same household tables, now raced in three dimensions with Micro Machines V3's chaos — weapon pickups and the 8-bulb Screen Break duel. M2 ships the breakfast table; the rest of the tables are M4's work.
Built with Godot 4.7.2 / GDScript, exported to WebGL2 (Compatibility renderer, single-threaded) and served as a static site on the home-lab arcade.
Status: M2 — the chaos layer. One race is playable end to end in the browser: three laps of the breakfast table against three AI drivers, five weapon pickups plus the tank's shell, and the Screen Break bulb board. One archetype ships (
sports), one table ships, and there is no front end yet — the game boots straight into a race. The plan is indocs/plan/roadmap.md; M3 is the second archetype and the cups.
What it is
| Camera | Chase cam behind the car: boom and FOV that move in opposite senses with speed, a dolly punch-in, shake on contact |
| Race | 3 laps of the breakfast table, 4 cars (you + 3 AI on a fixed seed), countdown, standings, results board, pause |
| The V3 rule | Screen Break — earn 34 m of daylight on the nearest rival that still holds a bulb, inside a 4 s window (a standing lead is not an event: a clean car's ceiling is 34 m in 4 s, so it takes a fall or a hit), max 2 steals per lap, hold all 8 to win the race instantly. No pause: the steal costs 0.35 s of slow motion and a camera punch (V3's most-criticised feature, deliberately removed) |
| Weapons | Five pickups — missile, hammer, oil slick, shield, turbo can — plus the tank's shell. The AI fires on the same seam the player does |
| Vehicles | One archetype ships: sports. The buggy, tank and hovercraft rows exist in data/vehicles.gd and in the race model's balancing runs, but the race scene places every car as a sports car (M3) |
| Drivers | Leodin, Nitro Nana, Sir Reginald, Capt. Whiskers, Lili-Anna, Clara, Tina Turbo, Moni Mayhem — carried over unchanged, four of them on the grid |
| Tables | One ships: the breakfast table (procedural gingham ribbon, kerbs, plank bridge, props). Pool table, pitch, study desk, kitchen counter and garden pond are planned (M4) |
| Structure | M2 has no cups, no points and no menus: one race, then R restarts it. The 2 × 3-table cup and the prize cars are M4 |
| Look | Glossy toy diorama: saturated palette, one warm sun, blob shadows, procedural seamless surfaces (numpy recipes in scripts/tools/make_surfaces.py), every mesh built from code |
| Not yet wired | Syrup/milk hazard discs are placed and drawn but no query reads them yet (a surface that slows you is M3); there is no audio system, so nothing in the game makes a sound |
Run it
./scripts/gate.sh # import → parse-check → tests → trace → web export
./scripts/serve.sh # http://127.0.0.1:8060
./scripts/shot.sh <pose> # render a named pose to shots/<pose>.png for review
Needs Godot 4.7.2 at /Applications/Godot.app (not on PATH) and the 4.7.2 export templates.
Both are installed and verified; see docs/research/engine-choice.md.
Why Godot and not Phaser
tiny-turbo is Phaser 4 + TypeScript and stays that way. The sequel needs real 3D — elevation, ramps, loops, a chase camera over a tabletop — which Phaser cannot do without writing a renderer. Godot exports a single-page WebGL2 build with no server requirements, and GDScript is the only option because Godot 4 cannot export C# projects to the web.
Documentation
| Doc | Contents |
|---|---|
CONTRIBUTING.md |
run/verify/ship, the gate, the traps (read before any shader or export change) |
GLOSSARY.md |
the domain words: table, corridor, break, bulb, archetype, trace, pose |
docs/research/micromachines-v3.md |
the V3 research with sources, and the deltas we take |
docs/research/engine-choice.md |
Godot 4.7.2 and the web/Compatibility constraints |
docs/design/gameplay-spec.md |
physics, archetypes, weapons, Screen Break, cups, tables |
docs/design/visual-spec.md |
palette, materials, lighting, camera, HUD, quality tiers |
docs/plan/roadmap.md |
M0–M6, each with the proof it must produce |
docs/plan/subagent-playbook.md |
how the work is split across subagents and verified |
docs/implementation/ |
per-milestone implementation notes |
docs/implementation/m0-foundation.md |
M0: the gate (measured cold/warm timings), toolchain, web build, traps, Compatibility feature limits, and what is NOT verified |
docs/implementation/m1.5-look.md |
M1.5: the surface split, the kerbs, the sky and the room — with the four acceptance renders read honestly, and what is still wrong |
docs/implementation/m1.5b-pass.md |
M1.5b: the deck gets a body, the car wins on chroma, the cream paints stop clipping — with the measurements, including the two fixes that were tried and did not work |
docs/implementation/m2-hud-fixes.md |
M2 review fixes: the position readout's contrast (measured), the minimap's real spline, and the break-cut's flash and banner punch — with the stills read honestly |
Credits
- Design reference: Micro Machines V3 (Codemasters/Psygnosis, 1997). No assets are taken from
it; research and mechanic inspiration only, documented in
docs/research/. - Characters and the tabletop premise carry over from tiny-turbo.
- Image assets are committed with the recipe, prompt and seed that produced them
(
assets/manifest.md). The shipped surface family — the gingham ribbon, felt, turf, wood, water, stone — is procedural, generated byscripts/tools/make_surfaces.pyand seam-gated; Qwen-Image-2.1 (mflux/MLX) is the tool for art with composition (key art, portraits), which is M4's work.