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.)
|
// 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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user