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
@@ -342,8 +342,12 @@ class DropZone__ReplyMessage;
|
||||
// Scalar currentScore; // @0x278 (Player) -- running score
|
||||
|
||||
// --- BT-specific ---
|
||||
Mission
|
||||
*btMission; // @0x1f8 cached mission / role registry source
|
||||
// (The binary's @0x1f8 mission pointer IS the inherited
|
||||
// Player::playerMission -- the master ctor leaves the base's value and
|
||||
// the replicant branch back-fills it from Application::GetCurrentMission.
|
||||
// The old separate `btMission` member here was a phantom duplicate of
|
||||
// the base field, never set on the master branch; removed in the
|
||||
// issue-#2 experience wiring.)
|
||||
char
|
||||
teamName[64]; // @0x20c copied from MakeMessage (+0x50)
|
||||
BTTeam
|
||||
@@ -358,28 +362,30 @@ class DropZone__ReplyMessage;
|
||||
//
|
||||
// EXPERIENCE-LEVEL game-mode flags (2026-07-18 [T1] — the old "per-role
|
||||
// display toggles / returnFromDeath" reading was WRONG). The ctor
|
||||
// @004c0bc8 seeds this block from btMission(+0x1f8)->experienceLevel
|
||||
// @004c0bc8 seeds this block from playerMission(+0x1f8)->experienceLevel
|
||||
// (+0xe4, the egg's per-pilot "experience" novice/standard/veteran/
|
||||
// expert) and ->advancedDamageOn(+0xf0) — NOT from the scenario role.
|
||||
// The member NAMES below date from the scoring work and do not match
|
||||
// the semantics; kept until the wiring task renames them. Binary
|
||||
// mapping (nov/std/vet/exp) + consumers: context/experience-levels.md.
|
||||
// Renamed to the true semantics by the issue-#2 wiring (old scoring-era
|
||||
// names in the trailing comments). Binary mapping (nov/std/vet/exp) +
|
||||
// consumers: context/experience-levels.md.
|
||||
//
|
||||
Logical
|
||||
showDamageReceived; // @0x25c 0/1/1/1 "sim live" (novice lockout: jams, searchlight, powersub @4b0efc)
|
||||
simLive; // @0x25c 0/1/1/1 "sim live" novice lockout: jams, searchlight, powersub @4b0efc (was showDamageReceived)
|
||||
Logical
|
||||
showKills; // @0x260 0/0/1/1 HEAT-MODEL master switch (FUN_004ad7d4)
|
||||
heatModelOn; // @0x260 0/0/1/1 HEAT-MODEL master switch (FUN_004ad7d4) (was showKills)
|
||||
Logical
|
||||
showDamageInflicted;// @0x264 = mission advancedDamageOn (copy 1; NOT part of the level switch)
|
||||
advancedDamageOn; // @0x264 = mission advancedDamageOn (copy 1; NOT part of the level switch) (was showDamageInflicted)
|
||||
Logical
|
||||
showScore; // @0x270 0/1/1/1 consumer not located
|
||||
Scalar
|
||||
roleReturnDelay; // @0x268 = mission advancedDamageOn (copy 2; int in the binary)
|
||||
Scalar
|
||||
roleReturnDelay2; // @0x26c 0/1/1/0 consumer not located (supercharge-clamp hypothesis [T4])
|
||||
levelFlag270; // @0x270 0/1/1/1 consumer not located (was showScore)
|
||||
Logical
|
||||
advancedDamageOn2; // @0x268 = mission advancedDamageOn (copy 2; int in the binary) (was roleReturnDelay, mistyped Scalar)
|
||||
Logical
|
||||
levelFlag26c; // @0x26c 0/1/1/0 consumer not located (supercharge-clamp hypothesis [T4]) (was roleReturnDelay2, mistyped Scalar)
|
||||
int
|
||||
roleClassIndex; // @0x274 raw experience level 0..3 (FUN_004ac9c8 = ==0 novice predicate)
|
||||
friend int BTPlayerRoleLocksAdvanced(void *); // the FUN_004ac9c8 bridge (task #12)
|
||||
experienceLevel; // @0x274 raw experience level 0..3 (FUN_004ac9c8 = ==0 novice predicate) (was roleClassIndex)
|
||||
friend int BTPlayerRoleLocksAdvanced(void *); // the FUN_004ac9c8 bridge (task #12): experienceLevel == 0
|
||||
friend int BTPlayerExperienceSimLive(void *); // +0x25c reader (issue #2): jams / lights / powersub short path
|
||||
friend int BTPlayerExperienceHeatModelOn(void *); // +0x260 reader (issue #2): FUN_004ad7d4 heat-model gate
|
||||
friend void BTPlayerCountObservedDeath(void *); // observed-death tally (MP DEATHS fix)
|
||||
|
||||
int
|
||||
|
||||
Reference in New Issue
Block a user