#85: myomer drive heat LIVE -- the five Mech motion operands were return-0
shims, so the reconstructed integrator @004b8d18 accumulated zero forever
The integrator, its gates and the heat plumbing were all reconstructed and
running -- but OwnerVelocityMag/OwnerDriveMag/OwnerVelocityY/OwnerMotionGain/
OwnerMass were cross-family compile shims returning 0.0f, so the myomers
priced ratio^2 * damageGain * 0 every tick: ice cold at any seek (Oracle's
night-7 panel-confirmed report).
Operands re-grounded against the raw disasm + decomp and mapped to NAMED
members via a complete-Mech-TU bridge (BTMechMyomerMotionSample, mech4.cpp),
per the databinding rule:
+0x1C4 vec -> localVelocity.linearMotion
+0x82C vec -> localAcceleration.linearMotion (the authentic 15-ring
smoothed AccelerationLastFrame the port already maintains)
+0x20C -> moverMass (the collision divert's cell; the old "motion
gain" label was a misread)
*(+0x250) -> environment gravity (FUN_00421e2c: vy -= **(+0x250)/tick),
via GetEnvironment()->gravityConstant
So the heat physics reads: 0.005 * 1/2 m v^2 (kinetic work, per-tick/no-dt
in the binary -- kept verbatim, frame-rate note documented) + 0.2 * m g
|vy| dt (climb power) + 0.2 * m |v||a| dt (acceleration power), all scaled
by ratio^2 and (1 + zone damage). Restored the binary's fabs(v.y) (the
draft had signed vy -- descending would have COOLED).
Authored tuning extracted from BTL4.RES (18 mech records, one shared
tuning): VelocityEfficiency=0.995, AccelerationEfficiency=0.8, gears
0.3/0.5/0.7/0.9999 rec idx 2; myomer thermal profile 77/1000/2000,
conductance 1.9e5, thermalMass 2.5e5.
Live-verified (solo arena, BT_MYO_LOG + BT_HEAT_LOG): standstill generates
~0; hard circling drove Myomers T 77 -> 1225 (past the 1000 degradation
line) and the coolant loop conducted it back to ~520 equilibrium on
slowing; damageGain live at 1.048 from grind rattle.
Known-inert remainder (filed in open-questions): the climb term reads g=0
because Mover::localEnvironment is never populated in the port
(EnvironmentZone res type 23 unwired); the mover feed (speedEffect ->
locomotion) stays WAVE 6.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Zh7PTkFy4KwTzVighLR9J
This commit is contained in:
co-authored by
Claude Fable 5
parent
37dd7f9663
commit
1570983fde
@@ -1606,6 +1606,36 @@ static void
|
||||
}
|
||||
}
|
||||
|
||||
//###########################################################################
|
||||
// BTMechMyomerMotionSample -- the five Mech motion operands of the myomer
|
||||
// drive-heat integrator @004b8d18 (issue #85), read here in a complete-Mech
|
||||
// TU and mapped to NAMED engine members per the databinding rule:
|
||||
// binary mech+0x1C4 vec -> localVelocity.linearMotion (|v|, v.y --
|
||||
// the same vector the crash block's iv2 squares, operand-confirmed)
|
||||
// binary mech+0x82C vec -> localAcceleration.linearMotion (the published
|
||||
// "AccelerationLastFrame" attribute, decomp-reference entity table)
|
||||
// binary mech+0x20C -> moverMass (same cell the collision divert
|
||||
// divides by -- NOT a "motion gain")
|
||||
// binary *(mech+0x250) -> GetEnvironment()->gravityConstant (the 1995
|
||||
// Mover holds a POINTER to the environment gravity: FUN_00421e2c does
|
||||
// vy -= **(+0x250) per tick. So the integrator's velTerm is m*g*|vy|
|
||||
// = climb work, and the heat physics reads: kinetic energy + climb
|
||||
// power + acceleration power, scaled by the authored inefficiencies.)
|
||||
//###########################################################################
|
||||
void BTMechMyomerMotionSample(void *mech_v,
|
||||
float *vel_mag, float *acc_mag, float *vel_y, float *mass, float *gravity)
|
||||
{
|
||||
Mech *m = (Mech *)mech_v;
|
||||
const Vector3D &v = m->localVelocity.linearMotion;
|
||||
const Vector3D &a = m->localAcceleration.linearMotion;
|
||||
*vel_mag = (float)Sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
|
||||
*acc_mag = (float)Sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
|
||||
*vel_y = (float)v.y;
|
||||
*mass = (float)m->moverMass;
|
||||
Environment *env = m->GetEnvironment();
|
||||
*gravity = (env != 0) ? (float)env->gravityConstant : 0.0f;
|
||||
}
|
||||
|
||||
//###########################################################################
|
||||
// MechDeathHandler effect-spawn bridge (mechdmg.cpp calls this)
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user