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

3.8 KiB
Raw Permalink Blame History

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.