diff --git a/core/src/com/unciv/models/ruleset/nation/Nation.kt b/core/src/com/unciv/models/ruleset/nation/Nation.kt index ee8fbb6b05..952be09658 100644 --- a/core/src/com/unciv/models/ruleset/nation/Nation.kt +++ b/core/src/com/unciv/models/ruleset/nation/Nation.kt @@ -302,7 +302,9 @@ class Nation : RulesetObject() { "All" -> true name -> true "Major" -> isMajorCiv + // To be deprecated, replaced by "City-States" "CityState" -> isCityState + Constants.cityStates -> isCityState else -> uniques.contains(filter) } } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt index 2954053b44..dcc2bf8996 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt @@ -175,6 +175,21 @@ enum class UniqueParameterType( } }, + /** Implemented by [Nation.matchesFilter][com.unciv.models.ruleset.Building.matchesFilter] */ + NationFilter("nationFilter", Constants.cityStates) { + private val knownValues = setOf(Constants.cityStates, "Major", "All") + + override fun getErrorSeverity( + parameterText: String, + ruleset: Ruleset + ): UniqueType.UniqueComplianceErrorSeverity? { + if (parameterText in knownValues) return null + if (ruleset.nations.containsKey(parameterText)) return null + if (ruleset.nations.values.any { it.hasUnique(parameterText) }) return null + return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific + } + }, + /** Implemented by [CityInfo.matchesFilter][com.unciv.logic.city.City.matchesFilter] */ CityFilter("cityFilter", "in all cities", null, "City filters") { private val cityFilterStrings = setOf( diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 845b7858e4..71653bdc68 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -628,6 +628,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: /////// civ conditionals + ConditionalCivFilter("for [nationFilter]", UniqueTarget.Conditional), ConditionalWar("when at war", UniqueTarget.Conditional), ConditionalNotWar("when not at war", UniqueTarget.Conditional), ConditionalGoldenAge("during a Golden Age", UniqueTarget.Conditional), diff --git a/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt b/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt index 3098947c15..3997440dd9 100644 --- a/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt +++ b/core/src/com/unciv/ui/screens/cityscreen/SpecialistAllocationTable.kt @@ -65,6 +65,7 @@ class SpecialistAllocationTable(val cityScreen: CityScreen) : Table(BaseScreen.s else Color.GRAY // unassigned val icon = ImageGetter.getSpecialistIcon(color) specialistIconTable.add(icon).size(30f) + if (i % 6 == 0) specialistIconTable.row() } return specialistIconTable } diff --git a/docs/Modders/Unique-parameters.md b/docs/Modders/Unique-parameters.md index 1d90a629f7..5de64bbcda 100644 --- a/docs/Modders/Unique-parameters.md +++ b/docs/Modders/Unique-parameters.md @@ -53,6 +53,16 @@ Allows to only activate a unique for certain buildings. Allowed options are: - Provides that stat as a bonus for resources (e.g. +1 Food from every Wheat) - Provides that stat per some amount of population (e.g. +1 Science for every 2 population [cityFilter]) +## nationFilter + +Allows filtering for specific nations. + +- `All` +- `City-states` +- `Major` +- Nation name +- Nation unique + ## cityFilter cityFilters allow us to choose the range of cities affected by this unique: