From 74cfda9854805a50dea1f507970c810693d2138f Mon Sep 17 00:00:00 2001 From: SomeTroglodyte <63000004+SomeTroglodyte@users.noreply.github.com> Date: Sun, 29 Oct 2023 18:00:34 +0100 Subject: [PATCH] Tighten RulesetValidator for Terrain (#10355) * Tighten RulesetValidator for Terrain * Fix unintended indentation (say that fast repeatedly) --- .../ruleset/validation/RulesetValidator.kt | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt b/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt index 45299a7c8d..99f9c76bc4 100644 --- a/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt +++ b/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt @@ -328,9 +328,23 @@ class RulesetValidator(val ruleset: Ruleset) { if (ruleset.terrains.values.none { it.type == TerrainType.Land && !it.impassable }) lines += "No passable land terrains exist!" for (terrain in ruleset.terrains.values) { - for (baseTerrain in terrain.occursOn) - if (!ruleset.terrains.containsKey(baseTerrain)) - lines += "${terrain.name} occurs on terrain $baseTerrain which does not exist!" + for (baseTerrainName in terrain.occursOn) { + val baseTerrain = ruleset.terrains[baseTerrainName] + if (baseTerrain == null) + lines += "${terrain.name} occurs on terrain $baseTerrainName which does not exist!" + else if (baseTerrain.type == TerrainType.NaturalWonder) + lines.add("${terrain.name} occurs on natural wonder $baseTerrainName: Unsupported.", RulesetErrorSeverity.WarningOptionsOnly) + } + if (terrain.type == TerrainType.NaturalWonder) { + if (terrain.turnsInto == null) + lines += "Natural Wonder ${terrain.name} is missing the turnsInto attribute!" + val baseTerrain = ruleset.terrains[terrain.turnsInto] + if (baseTerrain == null) + lines += "${terrain.name} turns into terrain ${terrain.turnsInto} which does not exist!" + else if (!baseTerrain.type.isBaseTerrain) + // See https://github.com/hackedpassword/Z2/blob/main/HybridTileTech.md for a clever exploit + lines.add("${terrain.name} turns into terrain ${terrain.turnsInto} which is not a base terrain!", RulesetErrorSeverity.Warning) + } uniqueValidator.checkUniques(terrain, lines, rulesetSpecific, tryFixUnknownUniques) } }