Cockpit view live: V toggle, camera gate, real EyepointRotation, inside skeleton

- V toggles the authentic cockpit eyepoint <-> the chase camera.  Both eyes
  coexist; DPLEyeRenderable::Execute now writes the VIEW only when it IS
  mCamera (unconditional writes let the last-executed eye stomp the toggle).
- EyepointRotation is a real zeroed EulerAngles member on Mech (was bound to
  the shared junk attrPad -- the eye composes this attribute into the view
  EVERY frame, so the cockpit camera was rotated by garbage: the canted
  horizon, then the black screen).  The eye-slew systems write it later.
- The cockpit eye mounts at the eyepoint's REST position with a clean upright
  forward basis on the tree root (the live joint chain fed it the site tilt +
  torso pose; authentic pitch/yaw is the deferred gyro eye chain).
- The inside view swaps the player to the INSIDE skeleton mesh set
  (SkeletonType_A): 19 body segments hide, exactly one mesh remains --
  blx_cop.bgf, the authentic cockpit canopy shell around the eyepoint.  It
  currently renders as a black enclosure (the black-screen report), so it is
  HIDDEN pending its interior/punch-material rendering (BT_INSIDE_COCKPIT=1
  shows it for that work).  Damage gstates respected in both directions;
  RemakeEntity keys off the DISPLAYED skeleton.
- Dev: BT_START_INSIDE=1 starts in the cockpit view.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-08 19:23:07 -05:00
co-authored by Claude Fable 5
parent c2f70f6348
commit 56f02b2176
6 changed files with 186 additions and 11 deletions
+3 -2
View File
@@ -531,7 +531,7 @@ const Mech::IndexEntry
ATTRIBUTE_ENTRY(Mech, CollisionMaterialType, attrPad), // 0x19
ATTRIBUTE_ENTRY(Mech, CurrentSpeed, legCycleSpeed), // 0x1a (existing @0x348)
ATTRIBUTE_ENTRY(Mech, MaxRunSpeed, reverseStrideLength), // 0x1b (existing @0x34c = run/top speed)
ATTRIBUTE_ENTRY(Mech, EyepointRotation, attrPad), // 0x1c
ATTRIBUTE_ENTRY(Mech, EyepointRotation, eyepointRotation), // 0x1c (real member -- the eye reads it per frame)
ATTRIBUTE_ENTRY(Mech, TargetReticle, attrPad), // 0x1d
ATTRIBUTE_ENTRY(Mech, FootStep, attrPad), // 0x1e
ATTRIBUTE_ENTRY(Mech, AnimationState, attrPad), // 0x1f
@@ -1318,7 +1318,8 @@ Mech::Mech(
deathHandler = (int)new MechDeathHandler(this); // FUN_0042a984
critRes->Unlock();
}
wreckSmokeTimer = 0.0f;
wreckSmokeTimer = 0.0f;
eyepointRotation = EulerAngles(Radian(0.0f), Radian(0.0f), Radian(0.0f));
//
// Cylinder hit-location table (resource type 0x1d = DamageLookupTableStream) --