libs/tts was never tracked despite being a build dependency of the gamemaker example. tools/download_tts.sh fetches the public upstream weights (HuggingFace Kokoro-82M + whisper.cpp) and converts them locally with the in-repo stdlib-only converter; model artifacts are gitignored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
52 lines
3.8 KiB
Markdown
52 lines
3.8 KiB
Markdown
# Full-parity gap: current ~/games/my-game vs the aigame engine
|
||
|
||
Goal (rik, 2026-07-09 late): run the little Godot game — CURRENT state — fully in
|
||
splash/gamemaker. Evidence: 21:54 `gd shot` sheet + a full close-read of all 17 actor
|
||
scripts. The game now spawns **~44 creatures + 2 vehicles**: Giant DogDay guardian
|
||
(23-box model, 1.9x scale, intercept-charges nightmares), 3 headcrabs (leap + latch to
|
||
the player's head, 0.5x speed debuff, shake off by jumping), the Prototype
|
||
(weeping-angel: only moves unwatched, LOS dot 0.55 vs camera forward), Baba Chops ram
|
||
(27 boxes, fire eyes with proximity-ramped emission), Nightmare Huggy (arm-reach lerp),
|
||
4 nightmare critters, 10 farm animals (per-kind synth calls w/ pitch), Huggy pack,
|
||
Kissy-as-bodyguard, grapple hand (yank player to walls / haul creatures, stretched
|
||
cable), 64-chunk welded smooth terrain (256x256 cells, 0.5 terracing, caves, alpha
|
||
water at y=3.5), ProceduralSky, shadowed sun, crosshair + hint + 4 colored flash HUD.
|
||
|
||
**Key architectural relief:** Godot NEVER rotates the physics body — only the visual
|
||
`Model` child yaws (atan2 facing + turn-rate clamp). Our unrotated-AABB physics is the
|
||
same design; the gap is visual/animation, not physics.
|
||
|
||
Axis trap for the re-port: main3d.gd heightfield is x-major (`i*(CELLS+1)+j`), our
|
||
game.terrain is z-major row-major — transpose or the goal lands on the wrong peak.
|
||
(The Godot-side "_heights@62" parse error is a stale Godot cache: identifier doesn't
|
||
exist on disk; file is internally consistent.)
|
||
|
||
## Engine work — Fork A "the look" (game_view render/world)
|
||
|
||
| # | Item | Spec from the game |
|
||
|---|---|---|
|
||
| A1 | Per-entity model yaw | auto-face velocity w/ turn-rate clamp (default movers), `game.face(id, yaw)` / `turn_rate` override; physics AABB unchanged |
|
||
| A2 | Owner-local parts | part offsets rotate with owner yaw; fronts at −z convention |
|
||
| A3 | Part animation | `game.move_part(part, {pos, rot_x, rot_z…})` engine-lerped (t≈dt*9, Godot's constant); `game.scale(id, v)` model scale (CatNap curl 1/0.6/1, DogDay 1.9x); headcrab spin |
|
||
| A4 | Emission | glow parts (eyes 3–4, runtime ramp 1.5→5, bolt/beacon); `glow:` spawn opt + `game.glow(id, e)` |
|
||
| A5 | Sky + ambient + fog | gradient top (0.32,0.58,0.9) → horizon (0.75,0.87,0.96); distance fade |
|
||
| A6 | Blob shadows | dark ground quad per mover at height-lookup y (real shadow maps out of scope) |
|
||
| A7 | Smooth terrain | triangulated heightfield mesh, flat per-tri normals, per-vertex height colors (SAND≤3.6/GRASS≤13/DIRT≤17.5/STONE≤21/SNOW), height-lookup collision; translucent water sheet (0.25,0.55,0.85,0.6) |
|
||
|
||
## Engine work — Fork B "systems"
|
||
|
||
| # | Item | Spec |
|
||
|---|---|---|
|
||
| B1 | Ride attach + debuff | `attach(..., {mode:"ride", spin})` per-frame head-follow; `game.speed_mult(id, f)`; shake-off = script (vel.y > 5 or timeout → detach) |
|
||
| B2 | Grapple support | `game.beam(a, b, {size,color})` stretched transient box (cable); haul = attach + detach-with-pop (exists); yank = set_vel (exists) |
|
||
| B3 | Camera | third-person low rig: pivot height 1.6, boom 10, pitch clamp [−1.2, 0.25], occlusion pull-in vs terrain/boxes (`max(1, hit−0.5)`), ignore tagged scenery; optional mouse-look |
|
||
| B4 | HUD slots | crosshair toggle, hint line (top-left), 4 independent colored center banners: `game.text(slot, msg, {color, size})`; billboard labels: multiple per entity, color/size/height opts |
|
||
| B5 | Synth voices | bark, moo, clank, whip (+ per-call pitch already works) |
|
||
|
||
## Script-side patterns (no engine work — fixture implements with existing APIs)
|
||
group-AI intercept (tags + find + dual distance gates), LOS gate (cam_yaw dot), duck
|
||
damage dispatch (tag → handler table in script), stun/stagger contract, animal AI.
|
||
|
||
## Sequence
|
||
Fork A → Fork B (same files, sequential) → Fork C re-port of the CURRENT game as
|
||
fixtures/sandbox3d.splash v2 (acceptance test) → GPU visual check by rik.
|