From 79fd3a8f7a238e7131ee87df3aad518739aaf7b5 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 22 Mar 2023 10:40:37 +0200 Subject: [PATCH] Resolved #8991 #8985 - Solved capital conquest crash --- .../city/managers/CityInfoConquestFunctions.kt | 2 +- .../unciv/logic/civilization/Civilization.kt | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/core/src/com/unciv/logic/city/managers/CityInfoConquestFunctions.kt b/core/src/com/unciv/logic/city/managers/CityInfoConquestFunctions.kt index b80aa1f082..1942897f8e 100644 --- a/core/src/com/unciv/logic/city/managers/CityInfoConquestFunctions.kt +++ b/core/src/com/unciv/logic/city/managers/CityInfoConquestFunctions.kt @@ -275,7 +275,7 @@ class CityInfoConquestFunctions(val city: City){ // civs so the capitalCityIndicator recognizes the unique buildings of the conquered civ if (oldCiv.getCapital() == this) oldCiv.moveCapitalToNextLargest() - civ.cities = civ.cities.toMutableList().apply { remove(city) } + oldCiv.cities = oldCiv.cities.toMutableList().apply { remove(city) } newCivInfo.cities = newCivInfo.cities.toMutableList().apply { add(city) } civ = newCivInfo hasJustBeenConquered = false diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index 70d7aa621a..7289ba1050 100644 --- a/core/src/com/unciv/logic/civilization/Civilization.kt +++ b/core/src/com/unciv/logic/civilization/Civilization.kt @@ -772,15 +772,17 @@ class Civilization : IsPartOfGameInfoSerialization { * Removes current capital then moves capital to argument city if not null */ fun moveCapitalTo(city: City?) { - if (cities.isNotEmpty() && getCapital() != null) { - val oldCapital = getCapital()!! - oldCapital.cityConstructions.removeBuilding(oldCapital.capitalCityIndicator()) - } - if (city == null) return // can't move a non-existent city but we can always remove our old capital - // move new capital - city.cityConstructions.addBuilding(city.capitalCityIndicator()) - city.isBeingRazed = false // stop razing the new capital if it was being razed + val oldCapital = getCapital() + + // Add new capital first so the civ doesn't get stuck in a state where it has cities but no capital + if (city != null) { + // move new capital + city.cityConstructions.addBuilding(city.capitalCityIndicator()) + city.isBeingRazed = false // stop razing the new capital if it was being razed + } + if (oldCapital != null) + oldCapital.cityConstructions.removeBuilding(oldCapital.capitalCityIndicator()) } fun moveCapitalToNextLargest() {