diff --git a/core/src/com/unciv/Constants.kt b/core/src/com/unciv/Constants.kt index da3eab525d..f6d7fa9bd4 100644 --- a/core/src/com/unciv/Constants.kt +++ b/core/src/com/unciv/Constants.kt @@ -6,7 +6,6 @@ object Constants { const val eraSpecificUnit = "Era Starting Unit" const val spreadReligionAbilityCount = "Spread Religion" const val removeHeresyAbilityCount = "Remove Foreign religions from your own cities" - const val hiddenWithoutReligionUnique = "Hidden when religion is disabled" const val hideFromCivilopediaUnique = "Will not be displayed in Civilopedia" const val impassable = "Impassable" diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index aa3879d121..208f74b34a 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -644,7 +644,7 @@ class CivilizationInfo { .filter { it.isGreatPerson() } .map { getEquivalentUnit(it.name) } return if (!gameInfo.isReligionEnabled()) - greatPeople.filter { !it.hasUnique(Constants.hiddenWithoutReligionUnique) }.toHashSet() + greatPeople.filter { !it.hasUnique(UniqueType.HiddenWithoutReligion) }.toHashSet() else greatPeople.toHashSet() } diff --git a/core/src/com/unciv/logic/civilization/QuestManager.kt b/core/src/com/unciv/logic/civilization/QuestManager.kt index 796fb3b1fb..bc2b9f4631 100644 --- a/core/src/com/unciv/logic/civilization/QuestManager.kt +++ b/core/src/com/unciv/logic/civilization/QuestManager.kt @@ -12,6 +12,7 @@ import com.unciv.models.ruleset.Quest import com.unciv.models.ruleset.QuestName import com.unciv.models.ruleset.tile.ResourceType import com.unciv.models.ruleset.tile.TileResource +import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.translations.fillPlaceholders import com.unciv.models.translations.getPlaceholderParameters @@ -349,6 +350,7 @@ class QuestManager { QuestName.SpreadReligion.value -> playerReligion != null && civInfo.getCapital().religion.getMajorityReligion()?.name != playerReligion QuestName.ConquerCityState.value -> getCityStateTarget(challenger) != null && civInfo.cityStatePersonality != CityStatePersonality.Friendly QuestName.BullyCityState.value -> getCityStateTarget(challenger) != null + QuestName.ContestFaith.value -> civInfo.gameInfo.isReligionEnabled() else -> true } } @@ -658,7 +660,7 @@ class QuestManager { && civInfo.gameInfo.getCities().none { it.cityConstructions.isBuilt(building.name) } // Can't be disabled && building.name !in startingEra.startingObsoleteWonders - && (civInfo.gameInfo.gameParameters.religionEnabled || !building.hasUnique("Hidden when religion is disabled")) + && (civInfo.gameInfo.gameParameters.religionEnabled || !building.hasUnique(UniqueType.HiddenWithoutReligion)) // Can't be more than 25% built anywhere && civInfo.gameInfo.getCities().none { it.cityConstructions.getWorkDone(building.name) * 3 > it.cityConstructions.getRemainingWork(building.name) } @@ -696,7 +698,9 @@ class QuestManager { val greatPeople = challenger.getGreatPeople() .map { it.getReplacedUnit(ruleSet) } .distinct() - .filter { !challengerGreatPeople.contains(it) && !cityStateGreatPeople.contains(it) } + .filterNot { challengerGreatPeople.contains(it) + || cityStateGreatPeople.contains(it) + || (it.hasUnique(UniqueType.HiddenWithoutReligion) && !civInfo.gameInfo.isReligionEnabled()) } .toList() if (greatPeople.isNotEmpty()) diff --git a/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt b/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt index ded1fe436f..81831969ca 100644 --- a/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt +++ b/core/src/com/unciv/logic/civilization/RuinsManager/RuinsManager.kt @@ -5,6 +5,7 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.MapUnit import com.unciv.models.ruleset.RuinReward import com.unciv.models.ruleset.unique.UniqueTriggerActivation +import com.unciv.models.ruleset.unique.UniqueType import kotlin.random.Random class RuinsManager { @@ -41,7 +42,7 @@ class RuinsManager { for (possibleReward in possibleRewards) { if (civInfo.gameInfo.difficulty in possibleReward.excludedDifficulties) continue - if (Constants.hiddenWithoutReligionUnique in possibleReward.uniques && !civInfo.gameInfo.isReligionEnabled()) continue + if (possibleReward.hasUnique(UniqueType.HiddenWithoutReligion) && !civInfo.gameInfo.isReligionEnabled()) continue if ("Hidden after generating a Great Prophet" in possibleReward.uniques && civInfo.civConstructions.boughtItemsWithIncreasingPrice[civInfo.religionManager.getGreatProphetEquivalent()] ?: 0 > 0 ) continue diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 39aae35fec..e8461b3720 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -463,7 +463,7 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { if (civInfo.tech.isResearched(unique.params[0])) rejectionReasons.add(RejectionReason.Obsoleted.apply { errorMessage = unique.text }) - Constants.hiddenWithoutReligionUnique -> + "Hidden when religion is disabled" -> if (!civInfo.gameInfo.isReligionEnabled()) rejectionReasons.add(RejectionReason.DisabledBySetting) } diff --git a/core/src/com/unciv/models/ruleset/tech/Technology.kt b/core/src/com/unciv/models/ruleset/tech/Technology.kt index 9cede7f498..ec8f8f7336 100644 --- a/core/src/com/unciv/models/ruleset/tech/Technology.kt +++ b/core/src/com/unciv/models/ruleset/tech/Technology.kt @@ -7,6 +7,7 @@ import com.unciv.models.ruleset.Building import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.RulesetObject import com.unciv.models.ruleset.unique.UniqueTarget +import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.translations.tr import com.unciv.ui.civilopedia.FormattedLine @@ -107,7 +108,7 @@ class Technology: RulesetObject() { predicate(it) // expected to be the most selective, thus tested first && (it.uniqueTo == civInfo.civName || it.uniqueTo==null && civInfo.getEquivalentBuilding(it) == it) && (nuclearWeaponsEnabled || "Enables nuclear weapon" !in it.uniques) - && (religionEnabled || Constants.hiddenWithoutReligionUnique !in it.uniques) + && (religionEnabled || !it.hasUnique(UniqueType.HiddenWithoutReligion)) && Constants.hideFromCivilopediaUnique !in it.uniques } } @@ -126,7 +127,7 @@ class Technology: RulesetObject() { it.requiredTech == name && (it.uniqueTo == civInfo.civName || it.uniqueTo==null && civInfo.getEquivalentUnit(it) == it) && (nuclearWeaponsEnabled || it.uniqueObjects.none { unique -> unique.placeholderText == "Nuclear weapon of Strength []" }) - && (religionEnabled || Constants.hiddenWithoutReligionUnique !in it.uniques) + && (religionEnabled || !it.hasUnique(UniqueType.HiddenWithoutReligion)) && Constants.hideFromCivilopediaUnique !in it.uniques } } diff --git a/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt b/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt index 05d9e3162c..bbc0b96bac 100644 --- a/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt +++ b/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt @@ -9,6 +9,7 @@ import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.RulesetStatsObject import com.unciv.models.ruleset.unique.Unique import com.unciv.models.ruleset.unique.UniqueTarget +import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.translations.tr import com.unciv.ui.civilopedia.FormattedLine import com.unciv.ui.utils.toPercent @@ -172,7 +173,7 @@ class TileImprovement : RulesetStatsObject() { ruleset.ruinRewards.values.asSequence() .filter { reward -> difficulty !in reward.excludedDifficulties && - (religionEnabled || Constants.hiddenWithoutReligionUnique !in reward.uniques) + (religionEnabled || !reward.hasUnique(UniqueType.HiddenWithoutReligion)) } .forEach { reward -> textList += FormattedLine(reward.name, starred = true, color = reward.color) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index f3a2f05727..52c03bee71 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -209,6 +209,8 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget) { CanEnterIceTiles("Can enter ice tiles", UniqueTarget.Unit), CannotEnterOcean("Cannot enter ocean tiles", UniqueTarget.Unit), CannotEnterOceanUntilAstronomy("Cannot enter ocean tiles until Astronomy", UniqueTarget.Unit), + + HiddenWithoutReligion("Hidden when religion is disabled", UniqueTarget.Unit, UniqueTarget.Building, UniqueTarget.Ruins), //////////////////////////////////////// TERRAIN UNIQUES //////////////////////////////////////// diff --git a/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt b/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt index 6425a53d96..639b9f2fdf 100644 --- a/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt +++ b/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt @@ -9,6 +9,7 @@ import com.unciv.Constants import com.unciv.UncivGame import com.unciv.models.ruleset.* import com.unciv.models.ruleset.unique.Unique +import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.stats.INamed import com.unciv.models.translations.tr import com.unciv.ui.utils.* @@ -175,7 +176,7 @@ class CivilopediaScreen( val uniques = uniqueObjects.map { it.placeholderText } return Constants.hideFromCivilopediaUnique !in uniques - && !(hideReligionItems && Constants.hiddenWithoutReligionUnique in uniques) + && !(hideReligionItems && uniqueObjects.any { it.isOfType(UniqueType.HiddenWithoutReligion) } ) && !(uniqueObjects.filter { unique -> unique.placeholderText == "Hidden when [] Victory is disabled"}.any { unique -> !game.gameInfo.gameParameters.victoryTypes.contains(VictoryType.valueOf(unique.params[0] )) }) diff --git a/core/src/com/unciv/ui/overviewscreen/WonderOverviewTable.kt b/core/src/com/unciv/ui/overviewscreen/WonderOverviewTable.kt index 8481378931..c313f652e2 100644 --- a/core/src/com/unciv/ui/overviewscreen/WonderOverviewTable.kt +++ b/core/src/com/unciv/ui/overviewscreen/WonderOverviewTable.kt @@ -12,6 +12,7 @@ import com.unciv.models.ruleset.Building import com.unciv.models.ruleset.Era import com.unciv.models.ruleset.QuestName import com.unciv.models.ruleset.VictoryType +import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.translations.tr import com.unciv.ui.civilopedia.CivilopediaCategories import com.unciv.ui.civilopedia.CivilopediaScreen @@ -85,7 +86,7 @@ class WonderOverviewTable( private fun shouldBeDisplayed(wonder: Building, wonderEra: Int) = when { Constants.hideFromCivilopediaUnique in wonder.uniques -> false - Constants.hiddenWithoutReligionUnique in wonder.uniques && hideReligionItems -> false + wonder.hasUnique(UniqueType.HiddenWithoutReligion) && hideReligionItems -> false wonder.name in startingObsolete -> false wonder.uniqueObjects.filter { unique -> unique.placeholderText == "Hidden when [] Victory is disabled"