makepad/aigame_parity_gap.md
Admin 449f51be7a gamemaker prerequisites: makepad-tts library, TTS/whisper model downloader, aigame design docs
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>
2026-07-10 13:29:22 +02:00

52 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 34, 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, hit0.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.