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:
@@ -194,7 +194,14 @@ Emitter::Emitter(
|
||||
// updates / ServiceDischarge instead -- that path joins the network wave.)
|
||||
//
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -120,7 +120,14 @@ Gyroscope::Gyroscope(
|
||||
//
|
||||
// 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);
|
||||
}
|
||||
|
||||
@@ -418,7 +418,14 @@ HeatSink::HeatSink(
|
||||
// the weapons) override with 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(&HeatSink::HeatSinkSimulation);
|
||||
}
|
||||
@@ -875,7 +882,14 @@ HeatWatcher::HeatWatcher(
|
||||
// the segment-copy mask + the master flag; our tree's established
|
||||
// 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);
|
||||
}
|
||||
@@ -1045,7 +1059,14 @@ Condenser::Condenser(
|
||||
//
|
||||
// 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);
|
||||
}
|
||||
@@ -1226,7 +1247,14 @@ AggregateHeatSink::AggregateHeatSink(
|
||||
<< " 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);
|
||||
}
|
||||
|
||||
@@ -84,7 +84,14 @@ HUD::HUD(
|
||||
//
|
||||
// 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);
|
||||
}
|
||||
|
||||
@@ -111,7 +111,14 @@ Myomers::Myomers(
|
||||
// The master instance runs the myomer per-frame (the same gate every
|
||||
// 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);
|
||||
}
|
||||
|
||||
@@ -167,7 +167,14 @@ PoweredSubsystem::PoweredSubsystem(
|
||||
// simulation. Derived subsystems (the weapons, Sensor, ...) override with
|
||||
// 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);
|
||||
}
|
||||
@@ -665,7 +672,14 @@ Generator::Generator(
|
||||
//
|
||||
// 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);
|
||||
}
|
||||
@@ -797,7 +811,14 @@ PowerWatcher::PowerWatcher(
|
||||
//
|
||||
// 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);
|
||||
}
|
||||
|
||||
@@ -87,7 +87,6 @@ Torso::Torso(
|
||||
Check(owner);
|
||||
Check_Pointer(r);
|
||||
|
||||
isDamagedCopy = (owner->GetInstance() == Entity::ReplicantInstance);
|
||||
|
||||
statusFlags = 0;
|
||||
buttonAccelerationPerSecond = r->buttonAccelerationPerSecond;
|
||||
@@ -168,19 +167,25 @@ Torso::Torso(
|
||||
lastUpdateTime = 0L;
|
||||
|
||||
//
|
||||
// Install the per-frame Performance. The binary's gate @004b6b0c is
|
||||
// (owner->simulationFlags & 0xC) == 0 && (owner->simulationFlags & 0x100)
|
||||
// != 0 -- the master-segment flag pair seeded by the mech stream builders,
|
||||
// which are not reconstructed yet. [T2] Until they land, the whole
|
||||
// watcher family mirrors that gate with the instance test (same sites:
|
||||
// heat.cpp / powersub.cpp / gyro.cpp registrations); revisit together.
|
||||
// Install the per-frame Performance -- the binary's gate @004b6b0c
|
||||
// verbatim: (flags & 0xC) == 0 && (flags & 0x100) != 0, which decodes to
|
||||
// the engine's own MasterInstance + DynamicFlag (InstanceBits=2 puts the
|
||||
// instance field at mask 0xC with ReplicantInstance=4; DynamicBit=8 is
|
||||
// 0x100). Entity::DefaultFlags = DynamicFlag|MasterInstance and the
|
||||
// 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);
|
||||
}
|
||||
else
|
||||
{
|
||||
isDamagedCopy = 1;
|
||||
SetPerformance(&Torso::TorsoCopySimulation); // binary PTR @00510c1c
|
||||
}
|
||||
|
||||
|
||||
@@ -75,10 +75,15 @@ Members carved from `dynamicsState[16]` → `[12]`: `targetTwist` @0x218,
|
||||
`twistAtUpdate` @0x21C, `twistRate` @0x238, `lastUpdateTime` @0x254 (`Time`,
|
||||
init `0L` — plain `0` is ambiguous between the long/float assignment operators
|
||||
under BC4.52). Ctor now registers the copy Performance on replicants
|
||||
(binary PTR @00510c1c). [T2] The registration gate mirrors the binary's
|
||||
`(owner->simulationFlags & 0xC) == 0 && (flags & 0x100) != 0` with the
|
||||
instance test, consistent with the whole watcher family, until the mech
|
||||
stream builders (which seed those flag bits) are reconstructed.
|
||||
(binary PTR @00510c1c). [T2 RETIRED 5.3.119] The gate is now the binary's
|
||||
own pair, decoded as engine enum identities: `(flags & 0xC)` is the Entity
|
||||
INSTANCE field (InstanceBits=2, ReplicantInstance=4) and `0x100` is
|
||||
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)
|
||||
stamp `twistAtUpdate`/`twistRate`/`lastUpdateTime` from console updates.
|
||||
|
||||
Reference in New Issue
Block a user