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
@@ -118,10 +118,15 @@ static_assert((int)PoweredSubsystem::NextAttributeID
|
||||
const MechWeapon::IndexEntry
|
||||
MechWeapon::AttributePointers[]=
|
||||
{
|
||||
// task #16: the FULL binary table @0x511890 (eleven entries) + the
|
||||
// port-extra OutputVoltage alias. Every member offset matches the
|
||||
// binary's (layout static_assert-locked); TriggerState stays the streamed
|
||||
// fire-button binding (id 0x13 PINNED).
|
||||
// task #16: the FULL binary table @0x511890 (eleven entries). Every member
|
||||
// offset matches the binary's (layout static_assert-locked); TriggerState
|
||||
// stays the streamed fire-button binding (id 0x13 PINNED).
|
||||
// issue #11: the port-extra 0x1D "OutputVoltage" alias (-> rechargeLevel) is
|
||||
// RETIRED -- the binary MechWeapon table ends at 0x1C, and the alias SHADOWED
|
||||
// the authentic Emitter-level OutputVoltage (currentLevel@0x414, RAW volts --
|
||||
// the SeekVoltageGraph cursor feed) because AttributeIndexSet::Find walks
|
||||
// lowest-id-first. Energy weapons now publish their own table (emitter.cpp
|
||||
// ids 0x1D-0x25); no ballistic-weapon consumer ever bound the alias.
|
||||
//
|
||||
// The PADS fill our chain-vs-binary id gap (now 0x0F..0x11) with valid,
|
||||
// named, never-bound entries (the binary's own ids here are the powered/
|
||||
@@ -142,8 +147,7 @@ const MechWeapon::IndexEntry
|
||||
ATTRIBUTE_ENTRY(MechWeapon, PipExtendedRange, pipExtendedRange), // 0x19 @0x348
|
||||
ATTRIBUTE_ENTRY(MechWeapon, EstimatedReadyTime, estimatedReadyTime),// 0x1A @0x330
|
||||
ATTRIBUTE_ENTRY(MechWeapon, RearFiring, rearFiring), // 0x1B @0x334 (task #68: real semantics)
|
||||
ATTRIBUTE_ENTRY(MechWeapon, WeaponState, weaponAlarm), // 0x1C @0x350
|
||||
ATTRIBUTE_ENTRY(MechWeapon, OutputVoltage, rechargeLevel) // 0x1D (port alias)
|
||||
ATTRIBUTE_ENTRY(MechWeapon, WeaponState, weaponAlarm) // 0x1C @0x350 (binary table END)
|
||||
};
|
||||
|
||||
MechWeapon::AttributeIndexSet&
|
||||
|
||||
Reference in New Issue
Block a user