From 446c3fb97af6f89e3e2637d334c79f6d91c5606d Mon Sep 17 00:00:00 2001 From: SimonCeder <63475501+SimonCeder@users.noreply.github.com> Date: Wed, 27 Oct 2021 06:08:23 +0200 Subject: [PATCH] Conquistadors only settle other continents (#5566) * conquistadors only settle other continents * make it a conditional --- android/assets/jsons/Civ V - Vanilla/Units.json | 2 +- core/src/com/unciv/models/ruleset/unique/Unique.kt | 3 +++ core/src/com/unciv/models/ruleset/unique/UniqueType.kt | 1 + core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt | 6 +++++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/android/assets/jsons/Civ V - Vanilla/Units.json b/android/assets/jsons/Civ V - Vanilla/Units.json index 754f2da5ed..0b5edb75b4 100644 --- a/android/assets/jsons/Civ V - Vanilla/Units.json +++ b/android/assets/jsons/Civ V - Vanilla/Units.json @@ -617,7 +617,7 @@ "requiredResource": "Horses", "upgradesTo": "Cavalry", "obsoleteTech": "Military Science", - "uniques": ["Can move after attacking","No defensive terrain bonus", "Founds a new city", "[+2] Sight", "Defense bonus when embarked"], + "uniques": ["Can move after attacking","No defensive terrain bonus", "Founds a new city ", "[+2] Sight", "Defense bonus when embarked"], "attackSound": "horse" //Conquistador should have no penalty attacking cities //Ability to found new cities can only be used on a foreign continent that does not contain the Spanish capital. diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index 266ebf7d1a..783437d6cd 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -82,6 +82,9 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s val theirCities = state.theirCombatant?.getCivInfo()?.cities?.size ?: 0 yourCities < theirCities } + UniqueType.ConditionalForeignContinent -> state.unit != null && + (state.unit.civInfo.cities.isEmpty() || + state.unit.civInfo.getCapital().getCenterTile().getContinent() != state.unit.getTile().getContinent()) UniqueType.ConditionalNeighborTiles -> state.cityInfo != null && diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 402b45f364..74d04e6955 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -363,6 +363,7 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget) { ConditionalAttacking("when attacking", UniqueTarget.Conditional), ConditionalDefending("when defending", UniqueTarget.Conditional), ConditionalInTiles("when fighting in [tileFilter] tiles", UniqueTarget.Conditional), + ConditionalForeignContinent("on foreign continents", UniqueTarget.Conditional), /////// tile conditionals ConditionalNeighborTiles("with [amount] to [amount] neighboring [tileFilter] tiles", UniqueTarget.Conditional), diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index e5abaed854..188f4c1260 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -16,6 +16,7 @@ import com.unciv.models.UncivSound import com.unciv.models.UnitAction import com.unciv.models.UnitActionType import com.unciv.models.ruleset.Building +import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.stats.Stat import com.unciv.models.stats.Stats @@ -161,7 +162,10 @@ object UnitActions { * (no movement left, too close to another city). */ fun getFoundCityAction(unit: MapUnit, tile: TileInfo): UnitAction? { - if (!unit.hasUnique(UniqueType.FoundCity) || tile.isWater || tile.isImpassible()) return null + if (!(unit.hasUnique(UniqueType.FoundCity)) + || tile.isWater || tile.isImpassible()) return null + // Spain should still be able to build Conquistadors in a one city challenge - but can't settle them + if (unit.civInfo.isOneCityChallenger() && unit.civInfo.hasEverOwnedOriginalCapital == true) return null if (unit.currentMovement <= 0 || !tile.canBeSettled())