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>
4.6 KiB
4.6 KiB
my-game → splash port inventory (generated 2026-07-09)
Exhaustive Godot API surface of ~/games/my-game (the AI-generated corpus), used as the acceptance checklist for the aigame engine port. Two parallel games: 2D side-scroller (main.tscn) and the ACTIVE 3D sandbox (main3d.tscn, run/main_scene). 13 actors share one behavior pattern set; 2D/3D scripts are near-mirrors.
First-class engine APIs required (by measured usage weight)
- Position as currency:
global_positionread/write ×122 (write = teleport: respawn, mount-follow, carry).distance_to×14,length×23,normalized×16. - Kinematic character motion:
move_and_slide×14 (ALL actors),is_on_floor()×33, hand-rolled gravity (velocity.y += G*dt, engine gravity unused),move_toward×9 (friction),is_on_wall×6 (hop trigger), per-actor jump/fall constants, respawn on fall (y beyond limit → teleport to recorded_spawn). - World building: StaticBody2D/3D + box colliders for ALL terrain; 3D visuals 100% MeshInstance3D+BoxMesh+StandardMaterial3D.albedo_color (8 sites); 2D visuals 100% ColorRect. Counts: 2D = 6 ground + 19 platforms + 7 movers + walls/flag/hills; 3D = ground 3 + stairs 7 + towers 8 + trees 12 + goal + 10 creatures + 2 vehicles.
- Groups as event bus (no signal bus!): groups player/vehicle/soldier/kissy/huggy/game;
get_nodes_in_groupiterated per-frame for nearest-target; broadcast = scan group +has_method()duck-typing ×14 (huggy_caught,enrage,capture,rescue,zap,send_home,cam_yaw…). Engine needs: tags + find/iterate- dynamic method dispatch on entities.
- Scene tree:
add_child×53 (all procedural),is_instance_valid×14 (cached-ref guards),set_script×6 (behavior attach to bare bodies),queue_free×3 (bolt). - Input:
get_axis(left,right)×6,is_action_just_pressed×7; actions used: shoot×8, ui_up/right/left/accept×4 each, ui_down×2, ui_cancel×1. RUNTIME InputMap action creation (shoot = mouse-left + F key + gamepad X). Mouse-capture relative-motion camera (captured/visible modes, pitch clamp, Esc release). - Camera: 2D = child cam, position smoothing (speed 6), level-bounds limits.
3D = CamYaw→CamPitch→Camera3D boom (z=13), mouse yaw/pitch, camera-relative locomotion
via
Basis(UP, yaw) * wish— shared by player AND vehicle steering (driver.cam_yaw()). - Random/AI math: randf_range ×16, randf ×7, randi/pick_random ×5, lerp ×8, atan2 (model facing), sin/cos ping-pong (movers).
- Audio — procedural synth, zero files (sfx.gd autoload the AI wrote itself):
8-voice AudioStreamPlayer pool, 22050Hz s16 WAV buffers generated by
_sweep(square pitch glide),_zap(falling tone+noise),_notes(arpeggio). Bank: jump, shoot, zap, grab, angry, calm, rescue, shove, board, win. APISfx.play(name, pitch). → aigame should ship this as first-class (game.sfx("jump")+ beep/jingle synth).
Structural patterns to support
- Mount/dismount: nearest group("vehicle") within REACH →
mount(player)→ disable collider (deferred) + stop actor physics + per-frame teleport to seat; up to 3 passenger seats; eject with pop velocity + cooldown. - Win conditions polled in
_process(goal distance / x threshold) +_wonlatch + HUD. - HUD: Label text/visible + font/outline theme overrides; transient banners via
await create_timer(s)with generation-token cancel (the ONLY async in the game — no tweens/AnimationPlayer anywhere). - Ledge AI: RayCast repositioned per frame + force_raycast_update; ±90° sidestep along edges (no navmesh). Needs script-facing raycast.
- Moving platforms (2D): AnimatableBody2D sync_to_physics, cosine ping-pong, carries riders via floor tracking.
- Collision layers: 1=world, 2=creatures, 4=vehicle, 8=player; creatures/player mask world-only (pass through each other); bolt masks world+creatures.
- Label3D billboard nametags (no_depth_test); emission material on bolt projectile; ProceduralSky + one shadowed DirectionalLight3D.
Confirmed absent (do NOT build): tweens, particles, AnimationPlayer, navmesh,
custom shaders, paths, physics joints (in-game), signals (only Area3D.body_entered ×1).
Porting risk list (ranked)
- Procedural audio synth (engine-side now, task #6)
- Mouse-capture camera + camera-relative movement basis
- Ledge raycast AI (script raycast API)
- Moving platforms carrying riders (mover ground-velocity inheritance)
- Runtime input action registration (ActionMap covers it)
- Deferred collision toggling during mount (engine needs disable-collision-safe-point)
- Jolt move_and_slide floor-snap feel parity (box3d mover tuning)