diff --git a/src/core/execution/PlayerExecution.ts b/src/core/execution/PlayerExecution.ts index 9d5cb9b5c..4b0a5a64b 100644 --- a/src/core/execution/PlayerExecution.ts +++ b/src/core/execution/PlayerExecution.ts @@ -42,12 +42,15 @@ export class PlayerExecution implements Execution { tick(ticks: number) { this.player.decayRelations(); + const hasPort = this.player.units(UnitType.Port).length > 0; this.player.units().forEach((u) => { if (u.health() <= 0) { u.delete(); return; } - u.modifyHealth(1); + if (hasPort && u.type() == UnitType.Warship) { + u.modifyHealth(1); + } const tileOwner = this.mg.owner(u.tile()); if (u.info().territoryBound) { if (tileOwner.isPlayer()) { diff --git a/src/core/execution/WarshipExecution.ts b/src/core/execution/WarshipExecution.ts index aa0ce3033..3b19021ef 100644 --- a/src/core/execution/WarshipExecution.ts +++ b/src/core/execution/WarshipExecution.ts @@ -136,6 +136,7 @@ export class WarshipExecution implements Execution { if (this.target != null && !this.target.isActive()) { this.target = null; } + const hasPort = this._owner.units(UnitType.Port).length > 0; const ships = this.mg .units(UnitType.TransportShip, UnitType.Warship, UnitType.TradeShip) .filter((u) => this.mg.manhattanDist(u.tile(), this.warship.tile()) < 130) @@ -143,6 +144,8 @@ export class WarshipExecution implements Execution { .filter((u) => u != this.warship) .filter((u) => !u.owner().isAlliedWith(this.warship.owner())) .filter((u) => !this.alreadySentShell.has(u)) + // Do not target trade ships if we don't have port + .filter((u) => u.type() != UnitType.TradeShip || hasPort) .filter((u) => { const portOwner = u.dstPort() ? u.dstPort().owner() : null; return u.type() != UnitType.TradeShip || portOwner != this.owner();