BT410 5.3.119: the master gate comes home -- 0xC/0x100 decoded as the engine's own enums, and every [T2] mirror retired

The 'mysterious flag pair' gating every master-only registration was never
BT-specific state waiting on unreconstructed stream builders. It is the
Entity base itself: InstanceBits=2 puts the instance field at mask 0xC
(ReplicantInstance=4), DynamicBit=8 makes DynamicFlag 0x100 -- so the
binary's (flags & 0xC)==0 && (flags & 0x100)!=0 reads 'a master-instance
dynamic entity', spelled MasterInstance + DynamicFlag in the 1995 headers.
Mover::DefaultFlags = DynamicFlag|MasterInstance, ENTITY.CPP:978 seeds
simulationFlags from the MakeMessage's instanceFlags, and our spawn recipe
has passed Mech::DefaultFlags since the boot ladder -- the authentic gate
was live all along. The BT411 donor's 'MasterHeatSinkFlag' name was a
fabrication that made an engine constant look like a missing subsystem
feature (donor drift #12).

Eleven sites flip from the GetInstance() mirror to the binary pair: the
heat-family registrations (x4), powersub (x3), gyro, hud, myomers,
emitter, and the Torso ctor's master/copy selection (@004b6b0c verbatim,
isDamagedCopy set in both branches). The MECHWEAP score-post and MECH view
gates are different families and stay as they are.

Statically proven (DefaultFlags carries both bits) and mission-soaked
clean. No [T2] divergence markers remain in the tree.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-08-04 14:10:49 -05:00
co-authored by Claude Fable 5
parent 80ac2943a0
commit 6da6ec89dd
8 changed files with 110 additions and 23 deletions
+8 -1
View File
@@ -194,7 +194,14 @@ Emitter::Emitter(
// updates / ServiceDischarge instead -- that path joins the network wave.) // updates / ServiceDischarge instead -- that path joins the network wave.)
// //
weaponAlarm.SetLevel(LoadingState); weaponAlarm.SetLevel(LoadingState);
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&Emitter::EmitterSimulation); SetPerformance(&Emitter::EmitterSimulation);
} }
+8 -1
View File
@@ -120,7 +120,14 @@ Gyroscope::Gyroscope(
// //
// The master instance runs the gyro per-frame. // The master instance runs the gyro per-frame.
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&Gyroscope::GyroscopeSimulation); SetPerformance(&Gyroscope::GyroscopeSimulation);
} }
+32 -4
View File
@@ -418,7 +418,14 @@ HeatSink::HeatSink(
// the weapons) override with their own Performance in their ctors, each of // the weapons) override with their own Performance in their ctors, each of
// which chains this step. // which chains this step.
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&HeatSink::HeatSinkSimulation); SetPerformance(&HeatSink::HeatSinkSimulation);
} }
@@ -875,7 +882,14 @@ HeatWatcher::HeatWatcher(
// the segment-copy mask + the master flag; our tree's established // the segment-copy mask + the master flag; our tree's established
// equivalent is the replicant test every sibling ctor uses). // equivalent is the replicant test every sibling ctor uses).
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&HeatWatcher::WatchSimulation); SetPerformance(&HeatWatcher::WatchSimulation);
} }
@@ -1045,7 +1059,14 @@ Condenser::Condenser(
// //
// Install the per-frame refrigeration Performance. // Install the per-frame refrigeration Performance.
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&Condenser::RefrigerationSimulation); SetPerformance(&Condenser::RefrigerationSimulation);
} }
@@ -1226,7 +1247,14 @@ AggregateHeatSink::AggregateHeatSink(
<< " conductance=" << thermalConductance << endl << flush; << " conductance=" << thermalConductance << endl << flush;
} }
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&AggregateHeatSink::RadiatorSimulation); SetPerformance(&AggregateHeatSink::RadiatorSimulation);
} }
+8 -1
View File
@@ -84,7 +84,14 @@ HUD::HUD(
// //
// The master instance runs the HUD per-frame. // The master instance runs the HUD per-frame.
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&HUD::HudSimulation); SetPerformance(&HUD::HudSimulation);
} }
+8 -1
View File
@@ -111,7 +111,14 @@ Myomers::Myomers(
// The master instance runs the myomer per-frame (the same gate every // The master instance runs the myomer per-frame (the same gate every
// sibling uses; the binary's is the segment-copy/master flag pair). // sibling uses; the binary's is the segment-copy/master flag pair).
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&Myomers::MyomersSimulation); SetPerformance(&Myomers::MyomersSimulation);
} }
+24 -3
View File
@@ -167,7 +167,14 @@ PoweredSubsystem::PoweredSubsystem(
// simulation. Derived subsystems (the weapons, Sensor, ...) override with // simulation. Derived subsystems (the weapons, Sensor, ...) override with
// their own Performance in their ctors, each of which chains this step. // their own Performance in their ctors, each of which chains this step.
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&PoweredSubsystem::PoweredSubsystemSimulation); SetPerformance(&PoweredSubsystem::PoweredSubsystemSimulation);
} }
@@ -665,7 +672,14 @@ Generator::Generator(
// //
// Install the generator's per-frame electrical Performance. // Install the generator's per-frame electrical Performance.
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&Generator::GeneratorSimulation); SetPerformance(&Generator::GeneratorSimulation);
} }
@@ -797,7 +811,14 @@ PowerWatcher::PowerWatcher(
// //
// Install the per-frame watchdog on the master instance. // Install the per-frame watchdog on the master instance.
// //
if (owner->GetInstance() != Entity::ReplicantInstance) // The binary's master gate: MasterInstance + DynamicFlag -- the
// simulationFlags 0xC/0x100 pair, now decoded as engine enum identities
// (InstanceBits=2 makes InstanceMask 0xC; DynamicBit=8 makes DynamicFlag
// 0x100; Entity::DefaultFlags carries both, seeded from the MakeMessage).
if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
SetPerformance(&PowerWatcher::Simulation); SetPerformance(&PowerWatcher::Simulation);
} }
+13 -8
View File
@@ -87,7 +87,6 @@ Torso::Torso(
Check(owner); Check(owner);
Check_Pointer(r); Check_Pointer(r);
isDamagedCopy = (owner->GetInstance() == Entity::ReplicantInstance);
statusFlags = 0; statusFlags = 0;
buttonAccelerationPerSecond = r->buttonAccelerationPerSecond; buttonAccelerationPerSecond = r->buttonAccelerationPerSecond;
@@ -168,19 +167,25 @@ Torso::Torso(
lastUpdateTime = 0L; lastUpdateTime = 0L;
// //
// Install the per-frame Performance. The binary's gate @004b6b0c is // Install the per-frame Performance -- the binary's gate @004b6b0c
// (owner->simulationFlags & 0xC) == 0 && (owner->simulationFlags & 0x100) // verbatim: (flags & 0xC) == 0 && (flags & 0x100) != 0, which decodes to
// != 0 -- the master-segment flag pair seeded by the mech stream builders, // the engine's own MasterInstance + DynamicFlag (InstanceBits=2 puts the
// which are not reconstructed yet. [T2] Until they land, the whole // instance field at mask 0xC with ReplicantInstance=4; DynamicBit=8 is
// watcher family mirrors that gate with the instance test (same sites: // 0x100). Entity::DefaultFlags = DynamicFlag|MasterInstance and the
// heat.cpp / powersub.cpp / gyro.cpp registrations); revisit together. // engine seeds simulationFlags from the MakeMessage, so the gate is live
// with no stream-builder dependency. [T2 RETIRED 5.3.119.]
// //
if (owner->GetInstance() != Entity::ReplicantInstance) if (
(owner->simulationFlags & Entity::InstanceMask) == Entity::MasterInstance &&
(owner->simulationFlags & Entity::DynamicFlag) != 0
)
{ {
isDamagedCopy = 0;
SetPerformance(&Torso::TorsoSimulation); SetPerformance(&Torso::TorsoSimulation);
} }
else else
{ {
isDamagedCopy = 1;
SetPerformance(&Torso::TorsoCopySimulation); // binary PTR @00510c1c SetPerformance(&Torso::TorsoCopySimulation); // binary PTR @00510c1c
} }
+9 -4
View File
@@ -75,10 +75,15 @@ Members carved from `dynamicsState[16]` → `[12]`: `targetTwist` @0x218,
`twistAtUpdate` @0x21C, `twistRate` @0x238, `lastUpdateTime` @0x254 (`Time`, `twistAtUpdate` @0x21C, `twistRate` @0x238, `lastUpdateTime` @0x254 (`Time`,
init `0L` — plain `0` is ambiguous between the long/float assignment operators init `0L` — plain `0` is ambiguous between the long/float assignment operators
under BC4.52). Ctor now registers the copy Performance on replicants under BC4.52). Ctor now registers the copy Performance on replicants
(binary PTR @00510c1c). [T2] The registration gate mirrors the binary's (binary PTR @00510c1c). [T2 RETIRED 5.3.119] The gate is now the binary's
`(owner->simulationFlags & 0xC) == 0 && (flags & 0x100) != 0` with the own pair, decoded as engine enum identities: `(flags & 0xC)` is the Entity
instance test, consistent with the whole watcher family, until the mech INSTANCE field (InstanceBits=2, ReplicantInstance=4) and `0x100` is
stream builders (which seed those flag bits) are reconstructed. Entity::DynamicFlag (DynamicBit=8). Mover::DefaultFlags =
DynamicFlag|MasterInstance and ENTITY.CPP seeds simulationFlags from the
MakeMessage's instanceFlags, so the authentic gate was live all along --
no stream-builder dependency existed, and the BT411 donor's
"MasterHeatSinkFlag" name was a fabrication. The whole registration
family (heat x4, powersub x3, gyro, hud, myomers, emitter) flipped with it.
**Staged feeders**: `Read/WriteUpdateRecord` (the census remainder in this TU) **Staged feeders**: `Read/WriteUpdateRecord` (the census remainder in this TU)
stamp `twistAtUpdate`/`twistRate`/`lastUpdateTime` from console updates. stamp `twistAtUpdate`/`twistRate`/`lastUpdateTime` from console updates.