BT410 5.3.38: SegmentArc270 never applied its 270 degrees
The class computed segmentSpan = 0.75 in its ctor and nothing ever read it: the engine SegmentArc base has no span member, and SegmentArc270 declared no Execute, so the recharge dial lit all 20 segments at PercentDone 1.0 where the shipped cockpit lights 15 and leaves the quarter gap. That was the last MFD delta -- four extra spokes at the upper-left of every weapon disc. A derived Execute is the only place the 0.75 can reach the draw, which is the same role SegmentArcRatio's Execute plays with its own copy. It scales the raw fraction, draws, then restores: the connection only rewrites currentValue when its source changes, so scaling in place would compound frame after frame and walk the dial to zero. head missing extra Mfd1 140 (=) 679 -> 7 Mfd2 97 (=) 462 -> 14 Mfd3 31 (=) 461 -> 13 Cockpit: 98.2% identical / 97% coverage. The three MFD heads and the three engineering heads are now within a few dozen pixels of the shipped binary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2789,6 +2789,27 @@ SegmentArc270::SegmentArc270(
|
||||
Check_Fpu();
|
||||
}
|
||||
|
||||
//
|
||||
// Execute -- scale the raw fraction by the 270-degree span, draw, then
|
||||
// put the raw value back. Restoring matters: the connection only
|
||||
// rewrites currentValue when its source changes, so scaling in place
|
||||
// would compound frame after frame and walk the dial to zero.
|
||||
//
|
||||
void
|
||||
SegmentArc270::Execute()
|
||||
{
|
||||
Check(this);
|
||||
|
||||
Scalar
|
||||
raw = currentValue;
|
||||
|
||||
currentValue = raw * segmentSpan;
|
||||
SegmentArc::Execute();
|
||||
currentValue = raw;
|
||||
|
||||
Check_Fpu();
|
||||
}
|
||||
|
||||
SegmentArc270::~SegmentArc270() // @004c66b3 (base chain)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -566,8 +566,16 @@
|
||||
const char *identification_string);
|
||||
~SegmentArc270(); // dtor thunk @004c66b3
|
||||
|
||||
// No Execute override: inherits the engine SegmentArc::Execute
|
||||
// (@00474300), which draws the lit segments up to currentValue.
|
||||
//
|
||||
// Execute applies the 270-degree SPAN. The engine base has no
|
||||
// span member, so a derived Execute is the only place the 0.75
|
||||
// can reach the draw -- the same role SegmentArcRatio's Execute
|
||||
// plays with its own copy. Without it the dial lit all 20
|
||||
// segments at PercentDone 1.0 where the shipped cockpit lights
|
||||
// 15, leaving the quarter gap (the A/B rig's last MFD delta:
|
||||
// four extra spokes at the upper-left of every weapon disc).
|
||||
//
|
||||
void Execute();
|
||||
protected:
|
||||
Scalar segmentSpan; // @0xC0 this[0x30]
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user