Experience levels WIRED: the egg field drives the simulation tier (Gitea #2)
BTPlayer's master ctor now seeds the flag block from btMission->ExperienceLevel() + AdvancedDamageOn() (accessors from the SURVIVED 1995 BTMSSN.HPP [T0]) instead of the NULL-stubbed scenario role -- the egg experience knob works for the first time. Both switch slot errors fixed vs the binary @4c0bc8; phantom btMission duplicate member removed (+0x1f8 IS Player::playerMission). SEVEN gate stubs unified onto the real flags (two found empirically): HeatModelActive, OwnerAdvancedDamage, LiveFireEnabled, ControlsAllowLights, powersub @4b0efc, emitter's file-local FUN_004ad7d4 + FUN_004ac9c8 stubs. FUN_004ac9c8 family swept (incl. a live raw-offset databinding trap in MechSubsystem::IsDamaged). Flag block renamed to its true semantics (simLive/heatModelOn/...), scoring-era names kept as comments. Includes the #5 [aud-tail] diag in emitter.cpp. ALL 19 shipped eggs say experience=expert -> default behavior UNCHANGED (per-tier verified: novice/standard = no heat/jams, authentic; veteran/ expert = today's exact behavior). Real delta: egg advancedDamage=1 now reaches player+0x264/0x268 (was hardwired 0). Follow-up flagged: the glass FE defaults empty experience to veteran (one tier below shipped). Awaiting human verification. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
a0cec48e3f
commit
d7158f1f82
@@ -148,14 +148,20 @@
|
||||
// SetGraphicsDirty -> engine Simulation::ForceUpdate() (this+0x18)
|
||||
// SetInstanceFlag -> engine Simulation::simulationFlags |= bits (this+0x28)
|
||||
// GetSegmentFlags() removed (the ctor gate now reads owner->simulationFlags).
|
||||
// ControlsAllowLights(): no ported base member (the real read is the
|
||||
// owner controls-mapper lightsEnabled via an unsafe raw owner-offset
|
||||
// chain) -> return True for bring-up; the only consumer (ToggleLamp) is
|
||||
// dormant. Faithful follow-up = a real Mech::ControlsAllowLights().
|
||||
// ControlsAllowLights() [T1]: the ToggleLamp @004b860c gate is the
|
||||
// owning BTPlayer's +0x25c "sim live" EXPERIENCE flag (mech+0x190
|
||||
// playerLink -> player+0x25c; the old "controls-mapper lightsEnabled"
|
||||
// reading was wrong) -- 0 only for NOVICE experience. Issue #2:
|
||||
// routed through the complete-type bridge in btplayer.cpp
|
||||
// (databinding rule: never raw-read player offsets).
|
||||
Logical HostShutDown() const { return simulationState == 1; /* Destroyed */ }
|
||||
int WatchedVoltageLevel() const { return watchdogAlarm.GetLevel(); } // @0x198
|
||||
int HeatStateLevel() const { return heatAlarm.GetLevel(); } // @0x140
|
||||
Logical ControlsAllowLights() const { return True; } // bring-up (see above)
|
||||
Logical ControlsAllowLights() const
|
||||
{
|
||||
extern int BTPlayerExperienceSimLive(void *owner_mech); // btplayer.cpp (player+0x25c)
|
||||
return BTPlayerExperienceSimLive(owner) ? True : False;
|
||||
}
|
||||
void SetGraphicsDirty() { ForceUpdate(); } // this[0x18] |= 1
|
||||
void SetInstanceFlag(int bits) { simulationFlags |= bits; } // this[10] |= bits
|
||||
// The "ToggleLamp" command arg is carried at message+0xC (decomp).
|
||||
|
||||
Reference in New Issue
Block a user