From fb2ec45636359b78cb745064eb1a2798dd96afb7 Mon Sep 17 00:00:00 2001 From: calebco Date: Wed, 4 Mar 2026 21:00:29 -0600 Subject: [PATCH] add re-fire delay for beta testing --- src/core/configuration/Config.ts | 1 + src/core/configuration/DefaultConfig.ts | 5 +++++ src/core/execution/SAMMissileExecution.ts | 8 +++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/configuration/Config.ts b/src/core/configuration/Config.ts index 55fbab613..242610d7b 100644 --- a/src/core/configuration/Config.ts +++ b/src/core/configuration/Config.ts @@ -139,6 +139,7 @@ export interface Config { safeFromPiratesCooldownMax(): number; defensePostRange(): number; SAMCooldown(): number; + samRefireDelayTicks(): number; SiloCooldown(): number; minDistanceBetweenPlayers(): number; defensePostDefenseBonus(): number; diff --git a/src/core/configuration/DefaultConfig.ts b/src/core/configuration/DefaultConfig.ts index 2195371a3..9a0056d79 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -203,6 +203,11 @@ export class DefaultConfig implements Config { SAMCooldown(): number { return 75; } + samRefireDelayTicks(): number { + // Beta testing: adjust this constant to tune the delay before a SAM can + // refire at a nuke whose interceptor was destroyed. 0 = instant refire. + return 5; + } SiloCooldown(): number { return 75; } diff --git a/src/core/execution/SAMMissileExecution.ts b/src/core/execution/SAMMissileExecution.ts index e5f3a0916..22df4ad88 100644 --- a/src/core/execution/SAMMissileExecution.ts +++ b/src/core/execution/SAMMissileExecution.ts @@ -17,6 +17,7 @@ export class SAMMissileExecution implements Execution { private SAMMissile: Unit | undefined; private mg: Game; private speed: number = 0; + private refireDelayRemaining: number | null = null; constructor( private spawn: TileRef, @@ -39,8 +40,13 @@ export class SAMMissileExecution implements Execution { {}, ); if (!this.SAMMissile.isActive()) { - // Interceptor was destroyed (e.g. by nuke blast) — allow SAMs to re-target this nuke + // Interceptor was destroyed (e.g. by nuke blast) — allow SAMs to re-target this nuke after delay if (this.target.isActive()) { + this.refireDelayRemaining ??= this.mg.config().samRefireDelayTicks(); + if (this.refireDelayRemaining > 0) { + this.refireDelayRemaining--; + return; + } this.target.setTargetedBySAM(false); // Notify defender their interceptor was destroyed this.mg.displayMessage(