diff --git a/restoration/source410/BT_L4/BTL4GAUG.CPP b/restoration/source410/BT_L4/BTL4GAUG.CPP index 4ea43350..c6c7e513 100644 --- a/restoration/source410/BT_L4/BTL4GAUG.CPP +++ b/restoration/source410/BT_L4/BTL4GAUG.CPP @@ -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) { } diff --git a/restoration/source410/BT_L4/BTL4GAUG.HPP b/restoration/source410/BT_L4/BTL4GAUG.HPP index 90b4c7b4..a8abbca1 100644 --- a/restoration/source410/BT_L4/BTL4GAUG.HPP +++ b/restoration/source410/BT_L4/BTL4GAUG.HPP @@ -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] };