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
@@ -60,7 +60,7 @@
|
||||
// FUN_004b9d00 MechWeapon::PrintState (slot 13 base)
|
||||
// FUN_004b9948 MechWeapon::GetMuzzlePoint FUN_004b9bdc MechWeapon::UpdateTargeting
|
||||
// FUN_004b9cbc MechWeapon::GetTargetPosition FUN_004b0d50 voltage helper
|
||||
// FUN_004ad7d4 HeatableSubsystem present? FUN_00417ab4 Connection::Resolve
|
||||
// FUN_004ad7d4 heat-model experience gate (player+0x260; HeatModelActive) FUN_00417ab4 Connection::Resolve
|
||||
// FUN_0041bbd8 AlarmIndicator::SetLevel(n) FUN_0041db7c Damage init
|
||||
// FUN_004179d4 / FUN_004179f8 SharedData::Connection ctor/dtor
|
||||
// FUN_004022d0 operator delete FUN_004215b0 resolve subsystem name->index
|
||||
@@ -227,7 +227,13 @@ Subsystem *
|
||||
Logical
|
||||
ProjectileWeapon::LiveFireEnabled() const
|
||||
{
|
||||
return True;
|
||||
// CheckForJam @004bbfcc's early-out [T1]: the owning BTPlayer's +0x25c
|
||||
// "sim live" experience flag (mech+0x190 playerLink) -- 0 only for NOVICE
|
||||
// experience, whose ballistics never jam. Issue #2: the old permissive
|
||||
// `return True` stub let every tier roll jams; routed through the
|
||||
// complete-type bridge in btplayer.cpp (databinding rule).
|
||||
extern int BTPlayerExperienceSimLive(void *owner_mech); // btplayer.cpp (player+0x25c)
|
||||
return BTPlayerExperienceSimLive(owner) ? True : False;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -507,8 +513,9 @@ void
|
||||
// uniform random sample falls under the current jam probability:
|
||||
// p = clamp(0.41 * currentTemperature / failureTemperature,
|
||||
// minJamChance, 1.0)
|
||||
// Gated on the weapon being heat-active (this+0x184) and the owning Mech's
|
||||
// "live fire" flag (mech.controls+0x25c).
|
||||
// Gated on the weapon being heat-active (this+0x184) and the owning PLAYER's
|
||||
// "sim live" experience flag (mech+0x190 playerLink -> player+0x25c; novice
|
||||
// never jams -- issue #2).
|
||||
//
|
||||
Logical
|
||||
ProjectileWeapon::CheckForJam()
|
||||
@@ -772,7 +779,7 @@ void
|
||||
// binary adds heatCostToFire RAW to the weapon's own pendingHeat --
|
||||
// projectile resources author PRE-scaled 1e7-unit heat (AFC100 = 6.5e7)
|
||||
// -- gated on the heatable check (part_013.c:8744-8747 idiom).
|
||||
if (HeatModelActive()) // FUN_004ad7d4 (heat.hpp; [T3] permissive)
|
||||
if (HeatModelActive()) // FUN_004ad7d4 (heat.hpp -> player+0x260 experience gate; issue #2)
|
||||
{
|
||||
pendingHeat += heatCostToFire; // HeatSink @0x1C8, raw
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user