SeekVoltageGraph: full reconstruction -- the eng-page POWER graph + top-box eraser (Gitea #11)
The #10 audit's one WRONG: the port Execute was a bring-up no-op, so the emitter/myomer engineering pages never erased their top data box -> stale sibling-page ghosts on the shared Eng bit-plane (SYSTEM 10 PPC showing the Streak ammo box, etc). Full faithful widget landed: - btl4gau2: ctor/BecameActive/Execute/clear/ticks/cursor recovered from the capstone disasm of @004c6798/@004c6920/@004c6934/@004c6be4/@004c6c30/ @004c6c6c (Ghidra dropped every x87 arg). Plot: v=0..12000 step 1200, x=Round(response(v)*230), y=Round(v*(1/12000)*187) (ld80 @004c6bd0/@004c6d74 = exactly 1/12000); change-test samples the response at 12000V vs the 9999 activation sentinel; XOR op for tick/cursor move-by-redraw; destroyed branch centres edestryd.pcc and revives via own vtbl+0xC (BecameActive, slot 3 of PTR_0051a1fc -- vtable-dump verified). - The vtbl+0x3C sampler identified from the binary vtables: Emitter slot 15 @004bb42c = sqrt(P(v)/2.0e8), P @004bb3f4 = damageFraction*v^2*0.5* energyCoefficient; Myomers slot 15 @004b8f94 = sqrt(AvailableOutput(v)*3.6/ 350). FUN_004dd138 == sqrt (part_015.c:4026): myomers' fabs reading corrected, GetSpeedReading renamed SeekVoltageResponse. Port dispatch via complete-type bridges BTSeekVoltageSample/BTMyomersSeekSample + BTSubsystemDestroyed (databinding rule). - Emitter's AUTHENTIC attribute table recovered (binary @0x511dd4, ids 0x1D-0x25) and published: Laser*/Seek*/OutputVoltage@0x414 (currentLevel, RAW volts -- the live-cursor feed). Field renames per the table: 0x3F8 minSeekVoltageIndex / 0x3FC maxSeekVoltageIndex (static_assert-locked). The MechWeapon 0x1D OutputVoltage PORT ALIAS retired (binary table ends 0x1C; Find walks lowest-id-first, the alias shadowed the authentic row). PPC::DefaultData -> Emitter::GetAttributeIndex(). - mech4: BT_PRESET_HOLD=<n> (freeze the #9 preset cycler after n pulses) for steady-state pixel verification; BT_SEEK_LOG diag. Verified live (BLH, autofire): both #10 repro pairs held ghost-free for minutes (SYS09->SYS10 PPC, SYS02->SYS04 ERMed, SYS05->SYS06 Myomers); curves draw with live cursors; one replot per activation; quad panels/J-K-L/sec panel un-regressed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
f1a6ccbaaf
commit
63b168cb92
@@ -5214,11 +5214,19 @@ void
|
||||
&& getenv("BT_PRESET_TEST"))
|
||||
{
|
||||
static int s_ptFrame = 0;
|
||||
static int s_ptPulses = 0;
|
||||
++s_ptFrame;
|
||||
int t0 = atoi(getenv("BT_PRESET_TEST"));
|
||||
if (t0 < 1) t0 = 600;
|
||||
if (s_ptFrame >= t0 && (s_ptFrame - t0) % 120 == 0)
|
||||
// issue #11: BT_PRESET_HOLD=<n> stops after n pulses so a page can
|
||||
// be HELD indefinitely (steady-state ghost/graph verification --
|
||||
// the 120-frame cycle otherwise phase-locks with BT_SHOT's 90-frame
|
||||
// cadence, so a fixed fraction of shots lands on transition frames).
|
||||
int holdAfter = getenv("BT_PRESET_HOLD") ? atoi(getenv("BT_PRESET_HOLD")) : 0;
|
||||
if (s_ptFrame >= t0 && (s_ptFrame - t0) % 120 == 0
|
||||
&& (holdAfter <= 0 || s_ptPulses < holdAfter))
|
||||
{
|
||||
++s_ptPulses;
|
||||
gBTPresetCycle[0] = 1;
|
||||
gBTPresetCycle[1] = 1;
|
||||
gBTPresetCycle[2] = 1;
|
||||
|
||||
Reference in New Issue
Block a user