Mech: THE 0xBD3 UNTANGLE -- real SubsystemMessageManager in [0x10d], the mapper's one true home is roster slot 0 (task #7)

Binary census [T1]: mech+0x434 has exactly 2 writers (ctor init + factory
case 0xBD3) and ONE reader (@0x4b984b in MechWeapon::SendDamageMessage
@004b9728) -- pure message-manager semantics, nothing mapper-like.  The
factory case now builds the real SubsystemMessageManager (ctor @0049bca4,
0x130, ConsolidateAndSendDamage Performance); the misbuilt MechControlsMapper
squatter is evicted.  Every mapper consumer re-pointed to MappingMapper()
(roster slot 0 = the binary's **(mech+0x128); SetMappingSubsystem @0049fe40
touches ONLY slot 0 -- its [0x10d] mirror removed).  Non-viewpoint mechs get
a slot-0 demand LATCH (base mapper, [T3] accommodation -- the binary leaves
slot 0 NULL off-viewpoint but never drives/animates those paths; ours does).
Verified: solo drive+gait clean; MP replicant gait through the latch (full
run lifecycle); 3x kill/respawn cycle with type-6 records on the observer.
Remaining (task #7 tail): the messmgr's consolidated TakeDamageStream send +
weapon-path routing (@004b9728 real body).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-11 14:16:27 -05:00
co-authored by Claude Fable 5
parent 8ed6184d65
commit afefaeece5
7 changed files with 126 additions and 43 deletions
+25
View File
@@ -1242,6 +1242,31 @@ void *BTResolveRosterPilot(int slot)
// sees only the forward declaration of MechControlsMapper, so the read
// lives here in the complete-type TU (the house databinding pattern).
//
//###########################################################################
// BTBuildMapperDemandLatch -- slot-0 latch (task #7)
//
// The binary leaves roster slot 0 NULL except on the viewpoint mech
// (MakeViewpointEntity installs the real device mapper via
// SetMappingSubsystem @0049fe40). Our port drives NON-viewpoint masters
// (the BT_GOTO/BT_AUTODRIVE harness) and animates replicant gait through
// mapper demand fields, so every mech gets a default-data BASE mapper as a
// demand LATCH at ctor end; SetMappingSubsystem deletes + replaces it on
// the viewpoint mech exactly as the binary replaces slot 0. [T3
// accommodation -- relocates the retired 0xBD3 squatter's role to the slot
// the binary actually reads.] Complete-type TU (the mech.cpp caller
// carries a local stub under the mapper's name).
//
Subsystem *BTBuildMapperDemandLatch(Mech *mech)
{
static MechControlsMapper::SubsystemResource latch_resource;
Str_Copy(latch_resource.subsystemName, "ControlsMapper",
sizeof(latch_resource.subsystemName));
latch_resource.classID = (RegisteredClass::ClassID)0xf; // TrivialSubsystemClassID (btl4app idiom)
latch_resource.subsystemModelSize = sizeof(latch_resource);
return new MechControlsMapper(mech, 0, &latch_resource,
MechControlsMapper::DefaultData);
}
Scalar BTMapperSpeedDemandRaw(void *mapper)
{
// void* signature: mech.cpp's TU carries a local recon stub type under the