SegmentArcRatio (config keyword "segmentArcRatio") was declared but undefined.
It is a thin subclass of the engine SegmentArc gauge: two Scalar connections
(numerator=value, denominator=max) and an Execute override that computes the
[0,1] fill fraction into the base's currentValue, then delegates drawing to
SegmentArc::Execute (which lights numerator/denominator of the segments).
Reconstruct Make (@004c62fc) / ctor (@004c6394) / Execute (@004c6488) / dtor +
the methodDescription (rate,modeMask,scalar inner,scalar outer,scalar deg0,
scalar deg1,integer segs,color bg,color fg,attribute numerator,attribute
denominator -- matching the engine SegmentArcNormalized param types; the config
gives inner/outer once and the Make duplicates them into inner0==inner1 /
outer0==outer1). Execute recovered by disassembling the vtable override
@004c6488 (Ghidra dropped the x87):
if (denominator < 1) currentValue = 0;
else currentValue = clamp(|numerator/denominator * segmentSpan|, 0, 1);
SegmentArc::Execute();
where FUN_004dcd00 = fabs and the ctor precomputes
segmentSpan = (Scalar)(|n|/(|n|-1)) * 0.75f // int division => 0.75 for n=36
(_DAT_004c6484 = 0.75f, read live from the binary). Fixed the header field type
int segmentSpan -> Scalar (the ctor fstp's it and Execute fmul's it).
The config binds numerator=LinearSpeed, denominator=MaxRunSpeed -- both now
resolved by the Mech attribute table -- so the arc sweeps with speed.
Verified live (BT_DEV_GAUGES + drive): the radar-surface SPEED dial now shows a
green segmented arc filling with speed (was a plain ring). No /FORCE unresolved
externals. Combat un-regressed (TARGET DESTROYED after 8 hits), 0 crashes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>