From 33ec4b9e2a88bdf332b37937a1c09a19ecace64a Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sat, 12 Nov 2022 21:08:38 +0200 Subject: [PATCH] Added diplomatic repercussions for attacking your own ally city-state, and discouraged AIs from doing so --- .../civilization/NextTurnAutomation.kt | 10 +++++++--- .../diplomacy/DiplomacyManager.kt | 20 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt index 6b7f93d436..3cea8ca200 100644 --- a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt @@ -737,9 +737,9 @@ object NextTurnAutomation { val ourCombatStrength = civInfo.getStatForRanking(RankingType.Force).toFloat() + baseForce var theirCombatStrength = otherCiv.getStatForRanking(RankingType.Force).toFloat() + baseForce - //for city-states, also consider there protectors + //for city-states, also consider their protectors if (otherCiv.isCityState() and otherCiv.getProtectorCivs().isNotEmpty()) { - theirCombatStrength += otherCiv.getProtectorCivs().sumOf{it.getStatForRanking(RankingType.Force)} + theirCombatStrength += otherCiv.getProtectorCivs().filterNot { it == civInfo }.sumOf{it.getStatForRanking(RankingType.Force)} } if (theirCombatStrength > ourCombatStrength) return 0 @@ -814,7 +814,11 @@ object NextTurnAutomation { if (theirCity.getTiles().none { tile -> tile.neighbors.any { it.getOwner() == theirCity.civInfo && it.getCity() != theirCity } }) modifierMap["Isolated city"] = 15 - if (otherCiv.isCityState()) modifierMap["City-state"] = -20 + if (otherCiv.isCityState()) { + modifierMap["City-state"] = -20 + if (otherCiv.getAllyCiv() == civInfo.civName) + modifierMap["Allied City-state"] = -20 // There had better be a DAMN good reason + } return modifierMap.values.sum() } diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index 47ff038df4..92155dd7ae 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -705,6 +705,21 @@ class DiplomacyManager() : IsPartOfGameInfoSerialization { val otherCiv = otherCiv() val otherCivDiplomacy = otherCivDiplomacy() + if (otherCiv.isCityState() && !indirectCityStateAttack) { + otherCivDiplomacy.setInfluence(-60f) + civInfo.changeMinorCivsAttacked(1) + otherCiv.cityStateFunctions.cityStateAttacked(civInfo) + + // You attacked your own ally, you're a right bastard + if (otherCiv.getAllyCiv() == civInfo.civName) { + otherCiv.updateAllyCivForCityState() + otherCivDiplomacy.setInfluence(-120f) + for (knownCiv in civInfo.getKnownCivs()) { + knownCiv.getDiplomacyManager(civInfo).addModifier(DiplomaticModifiers.BetrayedDeclarationOfFriendship, -10f) + } + } + } + onWarDeclared() otherCivDiplomacy.onWarDeclared() @@ -717,11 +732,6 @@ class DiplomacyManager() : IsPartOfGameInfoSerialization { otherCivDiplomacy.setModifier(DiplomaticModifiers.DeclaredWarOnUs, -20f) otherCivDiplomacy.removeModifier(DiplomaticModifiers.ReturnedCapturedUnits) - if (otherCiv.isCityState() && !indirectCityStateAttack) { - otherCivDiplomacy.setInfluence(-60f) - civInfo.changeMinorCivsAttacked(1) - otherCiv.cityStateFunctions.cityStateAttacked(civInfo) - } for (thirdCiv in civInfo.getKnownCivs()) { if (thirdCiv.isAtWarWith(otherCiv)) {