Godot port: Redot 26.2 -> Godot 4.6.3 (standard build) + XR foundation stack #5
Loading…
Reference in a new issue
No description provided.
Delete branch "muse-lantern/da-game:godot-mcp-plugin"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What this is
The full stack, rebased as one PR because the XR foundation work was never PR'd separately: XR foundation (vendored godot-xr-tools 4.5.2, rig on XRToolsPlayerBody, controller pose fix), the engine port (Redot 26.2 -> Godot 4.6.3, standard build — see
docs/engine-migration.md), the DA Debug Bridge as an editor plugin (localhost TCP + bundled stdlib MCP server), and the 1.2x arm-reach solver multiplier.Arms: the corrected fix (2026-10-22) — replaces the earlier account
The first version of this PR described a "mirror correction" to the PSX arms asset (commit
1dd3cf2). That diagnosis was wrong and that fix is reverted bye908981in this stack. The asset was never mislabeled: its bone names agree with its skinned geometry (verified in Blender — bone and weighted-geometry positions match, and the mesh vertex data was byte-identical across the bad commit; only armature bone positions had been flipped, leaving the bind incoherent, while bone-position-only tests kept passing).The real defect was a frame mismatch in the mapping pipeline: the model is authored facing +Z (glTF convention — its elbows bow toward its back, -Z) while the player faces -Z (Godot). Fix, at the layer where it belongs:
.blend/.glbrestored to the authored state; READMEs document the facing contract and the history.scenes/player_rig.tscn: ArmsView carries a 180-degree yaw, landing the model's own left on the player's left.update_arms()converts controller world transforms through the skeleton's global transform, so the yaw is accounted for automatically.tests/arms_check.gd: side guard now asserts world-space rest positions, plus a new bone/geometry coherence guard (each Hand bone must sit next to the geometry skinned to it). Negative control: against the old flipped asset, all four new assertions fail.Debug Cam (new in this update)
The bridge gains a
debug_cammethod / MCP tool: a free Camera3D under the persistent Game root, independent of the player camera, placeable by orbit (target + yaw/pitch/distance) or explicit position + look_at. While enabled it is the viewport camera, soscreenshotrenders from it. Also,solve_armnow makes the view model visible (it hides whenever no controller is tracked — i.e. always in flat/headless runs). Verification workflow is now: pose withsolve_arm, frame withdebug_cam, check the screenshot with eyes — validated in-session with posed screenshots (wave / double-reach / T-pose, all uncrossed, hands on their own sides).Verified
.godot/before the first import — Redot-stamped import cache (engine 26.2 / format 6) is refused by Godot.Still owed (yours)
Merge is yours, as always.
Validation correction (2026-10-22, Zach's review): the first demo captures were shot from behind the model (orbit-yaw front/back was documented inverted — now fixed) and
solve_arm's default hand basis pinned the fingers skeleton-up, twisting the wrists in the captures. The bridge now defaults to a rest-relative hand basis (~7° wrist angle in a forward reach vs ~51° before), the snapshot reports fingertip positions, and the e2e asserts the wrist-angle invariant numerically. Corrected front-view captures and the full account are on issue #6. The arms fix itself (facing yaw + restored asset) was not implicated.Zach's call after the sourced Godot-vs-Redot re-weigh (2026-10-21): DEAD AIR is XR-first and XR is where Redot is structurally weakest (no XR team, selective cherry-picks onto a Godot 4.5-generation base, >=9 months measured lag on the IK stack); the migration is at its lifetime cheapest while the codebase is a rig, a menu, and an arm solver. Full record: docs/engine-migration.md. Conversion surface was minimal: - project.godot features rewritten to Godot's canonical ("4.6", "GL Compatibility"); no other settings changed. - Every existing checkout needs ONE manual step: delete .godot/ before the first Godot import — Redot's importer stamps converted resources with engine version 26.2 / format 6 and Godot refuses them. Committed sources are engine-neutral; only the local import cache is stamped. (Documented in the migration doc.) - Vendored godot-xr-tools 4.5.2 runs as-is on 4.6.3 (VENDORED.md updated); re-syncing to upstream's 4.6.x line is a separate deliberate step. Verified headless on Godot 4.6.3 Mono: import clean; smoke_menu, arms_check, addon_check all PASS, suites unchanged. Honest open item (in the migration doc): the 'working engine IK' gain is NOT first-hand verified — TwoBoneIK3D produced zero bone movement from code-driven configuration on 4.6.3 and 4.7.2 in every tested setup (real + synthetic skeletons, headless + Xvfb) while a probe modifier proved the pipeline runs. ArmsView's hand-rolled IK remains the IK of record.05e71966a0to527c071e7e