diff --git a/android/assets/jsons/Civ V - Gods & Kings/GlobalUniques.json b/android/assets/jsons/Civ V - Gods & Kings/GlobalUniques.json index d26ebaa47f..751b9a139c 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/GlobalUniques.json +++ b/android/assets/jsons/Civ V - Gods & Kings/GlobalUniques.json @@ -6,7 +6,8 @@ "[-50]% [Production] [in all cities] ", "[-33]% Strength ", "Cannot build [Settler] units ", - "Rebel units may spawn " + "Rebel units may spawn ", + "[-1] Sight " // TODO: Implement the uniques below // "[+20]% [Culture] [in all cities] ", diff --git a/android/assets/jsons/Civ V - Gods & Kings/Nations.json b/android/assets/jsons/Civ V - Gods & Kings/Nations.json index 7bc3f99224..1d03981601 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Nations.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Nations.json @@ -538,7 +538,9 @@ "innerColor": [255,255,75], "favoredReligion": "Christianity", "uniqueName": "Wayfinding", - "uniques": ["Enables embarkation for land units ", "Enables [All] units to enter ocean tiles ", "Normal vision when embarked ", "[+10]% Strength "], + "uniques": ["Enables embarkation for land units ", + "Enables [All] units to enter ocean tiles ", + "[+1] Sight ", "[+10]% Strength "], "cities": ["Honolulu","Samoa","Tonga","Nuku Hiva","Raiatea","Aotearoa","Tahiti","Hilo","Te Wai Pounamu","Rapa Nui", "Tuamotu","Rarotonga","Tuvalu","Tubuai","Mangareva","Oahu","Kiritimati","Ontong Java","Niue","Rekohu", "Rakahanga","Bora Bora","Kailua","Uvea","Futuna","Rotuma","Tokelau","Lahaina","Bellona","Mungava","Tikopia", diff --git a/android/assets/jsons/Civ V - Gods & Kings/Units.json b/android/assets/jsons/Civ V - Gods & Kings/Units.json index f766810b9a..3c7cf42f5d 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Units.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Units.json @@ -1309,7 +1309,7 @@ "cost": 400, "requiredTech": "Pharmaceuticals", "promotions": ["Amphibious"], - "uniques": ["Normal vision when embarked", "Defense bonus when embarked"], + "uniques": ["[+1] Sight ", "Defense bonus when embarked"], "attackSound": "shot" }, { diff --git a/android/assets/jsons/Civ V - Vanilla/GlobalUniques.json b/android/assets/jsons/Civ V - Vanilla/GlobalUniques.json index 0b60351c4a..751b9a139c 100644 --- a/android/assets/jsons/Civ V - Vanilla/GlobalUniques.json +++ b/android/assets/jsons/Civ V - Vanilla/GlobalUniques.json @@ -6,7 +6,8 @@ "[-50]% [Production] [in all cities] ", "[-33]% Strength ", "Cannot build [Settler] units ", - "Rebel units may spawn " + "Rebel units may spawn ", + "[-1] Sight " // TODO: Implement the uniques below // "[+20]% [Culture] [in all cities] ", @@ -22,4 +23,4 @@ // "[+20]% [Production] [in cities connected via railroad]" // something something unit supply ] -} \ No newline at end of file +} diff --git a/android/assets/jsons/Civ V - Vanilla/Nations.json b/android/assets/jsons/Civ V - Vanilla/Nations.json index a67efb7ef6..7b9b6274ab 100644 --- a/android/assets/jsons/Civ V - Vanilla/Nations.json +++ b/android/assets/jsons/Civ V - Vanilla/Nations.json @@ -499,7 +499,10 @@ "outerColor": [217,89,0], "innerColor": [255,255,75], "uniqueName": "Wayfinding", - "uniques": ["Enables embarkation for land units ", "Enables [All] units to enter ocean tiles ", "Normal vision when embarked ", "[+10]% Strength "], + "uniques": ["Enables embarkation for land units ", + "Enables [All] units to enter ocean tiles ", + "[+1] Sight ", + "[+10]% Strength "], "cities": ["Honolulu","Samoa","Tonga","Nuku Hiva","Raiatea","Aotearoa","Tahiti","Hilo","Te Wai Pounamu","Rapa Nui", "Tuamotu","Rarotonga","Tuvalu","Tubuai","Mangareva","Oahu","Kiritimati","Ontong Java","Niue","Rekohu", "Rakahanga","Bora Bora","Kailua","Uvea","Futuna","Rotuma","Tokelau","Lahaina","Bellona","Mungava","Tikopia", diff --git a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt index e09215204e..2af4bc3961 100644 --- a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt +++ b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt @@ -278,15 +278,14 @@ class MapUnit : IsPartOfGameInfoSerialization { val conditionalState = StateForConditionals(civInfo = civ, unit = this) + val relevantUniques = getMatchingUniques(UniqueType.Sight, conditionalState, checkCivInfoUniques = true) + + getTile().getMatchingUniques(UniqueType.Sight, conditionalState) if (isEmbarked() && !hasUnique(UniqueType.NormalVisionWhenEmbarked, conditionalState, checkCivInfoUniques = true)) { - return 1 + visibilityRange += relevantUniques + .filter { it.conditionals.any { it.type == UniqueType.ConditionalOurUnit && it.params[0] == Constants.embarked } } + .sumOf { it.params[0].toInt() } } - - visibilityRange += getMatchingUniques(UniqueType.Sight, conditionalState, checkCivInfoUniques = true) - .sumOf { it.params[0].toInt() } - - visibilityRange += getTile().getMatchingUniques(UniqueType.Sight, conditionalState) - .sumOf { it.params[0].toInt() } + else visibilityRange += relevantUniques.sumOf { it.params[0].toInt() } if (visibilityRange < 1) visibilityRange = 1 @@ -799,15 +798,14 @@ class MapUnit : IsPartOfGameInfoSerialization { return filter.filterAndLogic { matchesFilter(it) } // multiple types at once - AND logic. Looks like:"{Military} {Land}" ?: when (filter) { - // todo: unit filters should be adjectives, fitting "[filterType] units" - // This means converting "wounded units" to "Wounded", "Barbarians" to "Barbarian" - "Wounded", "wounded units" -> health < 100 + Constants.wounded, "wounded units" -> health < 100 Constants.barbarians, "Barbarian" -> civ.isBarbarian() "City-State" -> civ.isCityState() - "Embarked" -> isEmbarked() + Constants.embarked -> isEmbarked() "Non-City" -> true else -> { if (baseUnit.matchesFilter(filter)) return true + if (civ.nation.matchesFilter(filter)) return true if (tempUniquesMap.containsKey(filter)) return true return false } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 079591fd2e..ad30bac628 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -441,6 +441,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: HealAdjacentUnits("All adjacent units heal [amount] HP when healing", UniqueTarget.Unit), // Vision + + @Deprecated("as of 4.6.4", ReplaceWith("[+1] Sight \" OR \"[+1] Sight ")) NormalVisionWhenEmbarked("Normal vision when embarked", UniqueTarget.Unit, UniqueTarget.Global), DefenceBonusWhenEmbarked("Defense bonus when embarked", UniqueTarget.Unit, UniqueTarget.Global), NoSight("No Sight", UniqueTarget.Unit), diff --git a/docs/Modders/uniques.md b/docs/Modders/uniques.md index 5d7796193a..c072d4d3fb 100644 --- a/docs/Modders/uniques.md +++ b/docs/Modders/uniques.md @@ -1840,6 +1840,11 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl Applicable to: Conditional +??? example "<when [mapUnitFilter]>" + Example: "<when [Wounded]>" + + Applicable to: Conditional + ??? example "<for units with [promotion]>" Example: "<for units with [Shock I]>"