diff --git a/core/src/com/unciv/logic/BackwardCompatibility.kt b/core/src/com/unciv/logic/BackwardCompatibility.kt index 48129e975b..83ab0426ec 100644 --- a/core/src/com/unciv/logic/BackwardCompatibility.kt +++ b/core/src/com/unciv/logic/BackwardCompatibility.kt @@ -22,14 +22,9 @@ object BackwardCompatibility { * This function removes them so the game doesn't crash when it tries to access them. */ fun GameInfo.removeMissingModReferences() { - for (tile in tileMap.values) { - for (terrainFeature in tile.terrainFeatures.filter{ !ruleSet.terrains.containsKey(it) }) - tile.terrainFeatures.remove(terrainFeature) - if (tile.resource != null && !ruleSet.tileResources.containsKey(tile.resource!!)) - tile.resource = null - if (tile.improvement != null && !ruleSet.tileImprovements.containsKey(tile.improvement!!)) - tile.improvement = null + tileMap.removeMissingTerrainModReferences(ruleSet) + for (tile in tileMap.values) { for (unit in tile.getUnits()) { if (!ruleSet.units.containsKey(unit.name)) tile.removeUnit(unit) diff --git a/core/src/com/unciv/logic/map/TileMap.kt b/core/src/com/unciv/logic/map/TileMap.kt index 06c6ffec63..4ce876dfdd 100644 --- a/core/src/com/unciv/logic/map/TileMap.kt +++ b/core/src/com/unciv/logic/map/TileMap.kt @@ -429,6 +429,20 @@ class TileMap { } } + fun removeMissingTerrainModReferences(ruleSet: Ruleset) { + for (tile in this.values) { + for (terrainFeature in tile.terrainFeatures.filter { !ruleSet.terrains.containsKey(it) }) + tile.terrainFeatures.remove(terrainFeature) + if (tile.resource != null && !ruleSet.tileResources.containsKey(tile.resource!!)) + tile.resource = null + if (tile.improvement != null && !ruleSet.tileImprovements.containsKey(tile.improvement!!)) + tile.improvement = null + } + for (startingLocation in startingLocations.toList()) + if (startingLocation.nation !in ruleSet.nations.keys) + startingLocations.remove(startingLocation) + } + /** Tries to place the [unitName] into the [TileInfo] closest to the given [position] * @param position where to try to place the unit (or close - max 10 tiles distance) * @param unitName name of the [BaseUnit][com.unciv.models.ruleset.unit.BaseUnit] to create and place diff --git a/core/src/com/unciv/ui/mapeditor/MapEditorMenuPopup.kt b/core/src/com/unciv/ui/mapeditor/MapEditorMenuPopup.kt index 1d33f80949..d910e652ce 100644 --- a/core/src/com/unciv/ui/mapeditor/MapEditorMenuPopup.kt +++ b/core/src/com/unciv/ui/mapeditor/MapEditorMenuPopup.kt @@ -169,6 +169,9 @@ class MapEditorMenuPopup(var mapEditorScreen: MapEditorScreen): Popup(mapEditorS ruleset.mods += mapParameters.mods ruleset.modOptions = newRuleset.modOptions + mapEditorScreen.tileMap.removeMissingTerrainModReferences(ruleset) + mapEditorScreen.mapHolder.updateTileGroups() + ImageGetter.setNewRuleset(ruleset) }