diff --git a/core/src/com/unciv/logic/battle/Nuke.kt b/core/src/com/unciv/logic/battle/Nuke.kt index 113a820dda..09da8020ad 100644 --- a/core/src/com/unciv/logic/battle/Nuke.kt +++ b/core/src/com/unciv/logic/battle/Nuke.kt @@ -29,12 +29,15 @@ object Nuke { * Both [BattleTable.simulateNuke] and [AirUnitAutomation.automateNukes] check range, so that check is omitted here. */ fun mayUseNuke(nuke: MapUnitCombatant, targetTile: Tile): Boolean { - if (nuke.getTile() == targetTile) return false - // Can only nuke visible Tiles - if (!targetTile.isVisible(nuke.getCivInfo())) return false + val attackerCiv = nuke.getCivInfo() + val launchTile = nuke.getTile() + + if (launchTile == targetTile) return false + if (!targetTile.isExplored(attackerCiv)) return false + // Can only nuke in unit's range, visibility (line of sight) doesn't matter + if (launchTile.aerialDistanceTo(targetTile) > nuke.unit.getRange()) return false var canNuke = true - val attackerCiv = nuke.getCivInfo() fun checkDefenderCiv(defenderCiv: Civilization?) { if (defenderCiv == null) return // Allow nuking yourself! (Civ5 source: CvUnit::isNukeVictim) diff --git a/core/src/com/unciv/ui/screens/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/screens/worldscreen/bottombar/BattleTable.kt index 486d37f901..bf0c7207a2 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/bottombar/BattleTable.kt @@ -343,9 +343,7 @@ class BattleTable(val worldScreen: WorldScreen) : Table() { val attackButton = "NUKE".toTextButton().apply { color = Color.RED } - val canReach = attacker.unit.currentTile.getTilesInDistance(attacker.unit.getRange()).contains(targetTile) - - if (!worldScreen.isPlayersTurn || !attacker.canAttack() || !canReach || !canNuke) { + if (!worldScreen.isPlayersTurn || !attacker.canAttack() || !canNuke) { attackButton.disable() attackButton.label.color = Color.GRAY }