diff --git a/core/src/com/unciv/models/ruleset/unique/Conditionals.kt b/core/src/com/unciv/models/ruleset/unique/Conditionals.kt index 65f4383892..9ba3d972ee 100644 --- a/core/src/com/unciv/models/ruleset/unique/Conditionals.kt +++ b/core/src/com/unciv/models/ruleset/unique/Conditionals.kt @@ -142,6 +142,13 @@ object Conditionals { UniqueType.ConditionalIfStartingInEra -> checkOnGameInfo { gameParameters.startingEra == conditional.params[0] } UniqueType.ConditionalSpeed -> checkOnGameInfo { gameParameters.speed == conditional.params[0] } UniqueType.ConditionalDifficulty -> checkOnGameInfo { gameParameters.difficulty == conditional.params[0] } + UniqueType.ConditionalDifficultyOrHigher -> checkOnGameInfo { + val difficulty = conditional.params[0] + if (difficulty in ruleset.difficulties) { + val difficulties = ruleset.difficulties.keys.toList() + difficulties.indexOf(difficulty) >= difficulties.indexOf(getDifficulty().name) + } else false + } UniqueType.ConditionalVictoryEnabled -> checkOnGameInfo { gameParameters.victoryTypes.contains(conditional.params[0]) } UniqueType.ConditionalVictoryDisabled -> checkOnGameInfo { !gameParameters.victoryTypes.contains(conditional.params[0]) } UniqueType.ConditionalReligionEnabled -> checkOnGameInfo { isReligionEnabled() } diff --git a/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt b/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt index 2db41fb630..5aa278a70b 100644 --- a/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt +++ b/core/src/com/unciv/models/ruleset/unique/IHasUniques.kt @@ -124,6 +124,7 @@ interface IHasUniques : INamed { UniqueType.ConditionalVictoryEnabled, UniqueType.ConditionalSpeed, UniqueType.ConditionalDifficulty, + UniqueType.ConditionalDifficultyOrHigher, UniqueType.ConditionalReligionEnabled, UniqueType.ConditionalReligionDisabled, UniqueType.ConditionalEspionageEnabled, diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index dffa6c4680..bb61c21a89 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -690,6 +690,7 @@ enum class UniqueType( ConditionalAfterTurns("after turn number [nonNegativeAmount]", UniqueTarget.Conditional), ConditionalSpeed("on [speed] game speed", UniqueTarget.Conditional), ConditionalDifficulty("on [difficulty] difficulty", UniqueTarget.Conditional), + ConditionalDifficultyOrHigher("on [difficulty] difficulty or higher", UniqueTarget.Conditional), ConditionalVictoryEnabled("when [victoryType] Victory is enabled", UniqueTarget.Conditional), ConditionalVictoryDisabled("when [victoryType] Victory is disabled", UniqueTarget.Conditional), ConditionalReligionEnabled("when religion is enabled", UniqueTarget.Conditional), diff --git a/docs/Modders/uniques.md b/docs/Modders/uniques.md index ddfbb7f795..09e940f20b 100644 --- a/docs/Modders/uniques.md +++ b/docs/Modders/uniques.md @@ -3176,6 +3176,11 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl Applicable to: Conditional +??? example "<on [difficulty] difficulty or higher>" + Example: "<on [Prince] difficulty or higher>" + + Applicable to: Conditional + ??? example "<when [victoryType] Victory is enabled>" Example: "<when [Domination] Victory is enabled>" diff --git a/tests/src/com/unciv/uniques/GlobalUniquesTests.kt b/tests/src/com/unciv/uniques/GlobalUniquesTests.kt index 754f09ee54..97e6d461ac 100644 --- a/tests/src/com/unciv/uniques/GlobalUniquesTests.kt +++ b/tests/src/com/unciv/uniques/GlobalUniquesTests.kt @@ -608,6 +608,39 @@ class GlobalUniquesTests { // endregion happiness + // region Conditionals + + @Test + fun conditionalDifficulty() { + val civInfo = game.addCiv() + val tile = game.getTile(Vector2.Zero) + val city = game.addCity(civInfo, tile, true) + + val tests = listOf( + "" to 0, + "" to 0, + "" to 1, // TestGame is Prince + "" to 0, + "" to 0, + "" to 0, + "" to 0, + "" to 1, + "" to 1, + "" to 1, + "" to 0, + "" to 0, + ) + + Assert.assertEquals(civInfo.gold, 0) + for ((test, expected) in tests) { + val building = game.createBuilding("Gain [1] [Gold] $test") + city.cityConstructions.addBuilding(building) + Assert.assertEquals("Conditional `$test` should be: $expected", civInfo.gold, expected) + civInfo.addGold(-civInfo.gold) // Reset the gold + } + } + + // endregion // region Great Persons @Test