diff --git a/restoration/source410/BT/MECHWEAP.NOTES.md b/restoration/source410/BT/MECHWEAP.NOTES.md index a87fd18a..cf6b3018 100644 --- a/restoration/source410/BT/MECHWEAP.NOTES.md +++ b/restoration/source410/BT/MECHWEAP.NOTES.md @@ -150,3 +150,13 @@ cycling — the NoAmmo roach-motel holds. Zero Fail. Energy), ER-M 3.43 (type 3 Laser), SRM6 5.83×6 (type 2 Explosive); repeat hits climb linearly; zones reach 1.0 Burning/Destroyed; no-target runs hold fire (0 FIRED across a 65s force-fire run without a target). + +## 5.3.18a — salvo economy CORRECTED (BT411 task #62) + +The 5.3.16 "one message per missile" loop was ~missileCount-times too lethal. +The arcade fires ONE cluster Missile per trigger and its zone damage lands +EXACTLY ONCE: damageData carries the ctor's salvo-split per-missile amount +with burstCount=missileCount (burstCount feeds only gyro bounce + splash +falloff — never the zone formula). MISLANCH now dispatches a single +SendDamage per salvo (verified 1:1 FIRED:[dmg]). The cluster SPLASH component +arrives with the Missile entity wave (proximity-fuse detonation). diff --git a/restoration/source410/BT/MISLANCH.CPP b/restoration/source410/BT/MISLANCH.CPP index 2fb459b2..dbb89ecf 100644 --- a/restoration/source410/BT/MISLANCH.CPP +++ b/restoration/source410/BT/MISLANCH.CPP @@ -113,22 +113,20 @@ void } // - // The salvo delivery: ONE TakeDamageMessage per missile, each carrying - // the salvo-split per-missile damage (the ctor split the authored amount - // across missileCount). The zone armor formula IGNORES burstCount - // (BT411 combat-damage: one message = one amount*scale application), so - // a single split message would under-deliver the salvo by the round - // count. INTERIM instant-hit with every round hitting (its own random - // zone) -- the Missile entity flight / seeker / proximity fuse joins the - // entity-spawn wave. + // The salvo delivery (CORRECTED to the arcade economy, BT411 task #62): + // the binary fires ONE cluster Missile per trigger and its zone damage + // lands EXACTLY ONCE -- damageData carries the ctor's salvo-split + // per-missile amount with burstCount = missileCount, and the zone armor + // formula ignores burstCount (it feeds only the gyro bounce + the splash + // falloff). A per-round delivery loop was ~missileCount-times too + // lethal (the port's "2-shot kill" regression). INTERIM instant-hit -- + // the Missile entity flight / seeker / proximity fuse / cluster SPLASH + // is the missile wave. // if (targetWithinRange && owner != NULL && owner->GetTargetEntity() != NULL) { - for (int mm = 0; mm < missileCount; ++mm) - { - SendDamage(owner->GetTargetEntity(), damageData); - } + SendDamage(owner->GetTargetEntity(), damageData); } if (getenv("BT_MECH_LOG"))