Disable religious quest with religion disabled; enumify "Hidden when religion is disabled" (#5465)

* enumify hidden with religion disabled

* prevent religious quests in no-religion games
This commit is contained in:
SimonCeder
2021-10-12 06:31:22 +02:00
committed by GitHub
parent d44bfce665
commit e375fb9896
10 changed files with 21 additions and 11 deletions

View File

@ -6,7 +6,6 @@ object Constants {
const val eraSpecificUnit = "Era Starting Unit" const val eraSpecificUnit = "Era Starting Unit"
const val spreadReligionAbilityCount = "Spread Religion" const val spreadReligionAbilityCount = "Spread Religion"
const val removeHeresyAbilityCount = "Remove Foreign religions from your own cities" 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 hideFromCivilopediaUnique = "Will not be displayed in Civilopedia"
const val impassable = "Impassable" const val impassable = "Impassable"

View File

@ -644,7 +644,7 @@ class CivilizationInfo {
.filter { it.isGreatPerson() } .filter { it.isGreatPerson() }
.map { getEquivalentUnit(it.name) } .map { getEquivalentUnit(it.name) }
return if (!gameInfo.isReligionEnabled()) return if (!gameInfo.isReligionEnabled())
greatPeople.filter { !it.hasUnique(Constants.hiddenWithoutReligionUnique) }.toHashSet() greatPeople.filter { !it.hasUnique(UniqueType.HiddenWithoutReligion) }.toHashSet()
else greatPeople.toHashSet() else greatPeople.toHashSet()
} }

View File

@ -12,6 +12,7 @@ import com.unciv.models.ruleset.Quest
import com.unciv.models.ruleset.QuestName import com.unciv.models.ruleset.QuestName
import com.unciv.models.ruleset.tile.ResourceType import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.ruleset.tile.TileResource 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.ruleset.unit.BaseUnit
import com.unciv.models.translations.fillPlaceholders import com.unciv.models.translations.fillPlaceholders
import com.unciv.models.translations.getPlaceholderParameters import com.unciv.models.translations.getPlaceholderParameters
@ -349,6 +350,7 @@ class QuestManager {
QuestName.SpreadReligion.value -> playerReligion != null && civInfo.getCapital().religion.getMajorityReligion()?.name != playerReligion QuestName.SpreadReligion.value -> playerReligion != null && civInfo.getCapital().religion.getMajorityReligion()?.name != playerReligion
QuestName.ConquerCityState.value -> getCityStateTarget(challenger) != null && civInfo.cityStatePersonality != CityStatePersonality.Friendly QuestName.ConquerCityState.value -> getCityStateTarget(challenger) != null && civInfo.cityStatePersonality != CityStatePersonality.Friendly
QuestName.BullyCityState.value -> getCityStateTarget(challenger) != null QuestName.BullyCityState.value -> getCityStateTarget(challenger) != null
QuestName.ContestFaith.value -> civInfo.gameInfo.isReligionEnabled()
else -> true else -> true
} }
} }
@ -658,7 +660,7 @@ class QuestManager {
&& civInfo.gameInfo.getCities().none { it.cityConstructions.isBuilt(building.name) } && civInfo.gameInfo.getCities().none { it.cityConstructions.isBuilt(building.name) }
// Can't be disabled // Can't be disabled
&& building.name !in startingEra.startingObsoleteWonders && 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 // Can't be more than 25% built anywhere
&& civInfo.gameInfo.getCities().none { && civInfo.gameInfo.getCities().none {
it.cityConstructions.getWorkDone(building.name) * 3 > it.cityConstructions.getRemainingWork(building.name) } it.cityConstructions.getWorkDone(building.name) * 3 > it.cityConstructions.getRemainingWork(building.name) }
@ -696,7 +698,9 @@ class QuestManager {
val greatPeople = challenger.getGreatPeople() val greatPeople = challenger.getGreatPeople()
.map { it.getReplacedUnit(ruleSet) } .map { it.getReplacedUnit(ruleSet) }
.distinct() .distinct()
.filter { !challengerGreatPeople.contains(it) && !cityStateGreatPeople.contains(it) } .filterNot { challengerGreatPeople.contains(it)
|| cityStateGreatPeople.contains(it)
|| (it.hasUnique(UniqueType.HiddenWithoutReligion) && !civInfo.gameInfo.isReligionEnabled()) }
.toList() .toList()
if (greatPeople.isNotEmpty()) if (greatPeople.isNotEmpty())

View File

@ -5,6 +5,7 @@ import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.models.ruleset.RuinReward import com.unciv.models.ruleset.RuinReward
import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueTriggerActivation
import com.unciv.models.ruleset.unique.UniqueType
import kotlin.random.Random import kotlin.random.Random
class RuinsManager { class RuinsManager {
@ -41,7 +42,7 @@ class RuinsManager {
for (possibleReward in possibleRewards) { for (possibleReward in possibleRewards) {
if (civInfo.gameInfo.difficulty in possibleReward.excludedDifficulties) continue 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 if ("Hidden after generating a Great Prophet" in possibleReward.uniques
&& civInfo.civConstructions.boughtItemsWithIncreasingPrice[civInfo.religionManager.getGreatProphetEquivalent()] ?: 0 > 0 && civInfo.civConstructions.boughtItemsWithIncreasingPrice[civInfo.religionManager.getGreatProphetEquivalent()] ?: 0 > 0
) continue ) continue

View File

@ -463,7 +463,7 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
if (civInfo.tech.isResearched(unique.params[0])) if (civInfo.tech.isResearched(unique.params[0]))
rejectionReasons.add(RejectionReason.Obsoleted.apply { errorMessage = unique.text }) rejectionReasons.add(RejectionReason.Obsoleted.apply { errorMessage = unique.text })
Constants.hiddenWithoutReligionUnique -> "Hidden when religion is disabled" ->
if (!civInfo.gameInfo.isReligionEnabled()) if (!civInfo.gameInfo.isReligionEnabled())
rejectionReasons.add(RejectionReason.DisabledBySetting) rejectionReasons.add(RejectionReason.DisabledBySetting)
} }

View File

@ -7,6 +7,7 @@ import com.unciv.models.ruleset.Building
import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.RulesetObject import com.unciv.models.ruleset.RulesetObject
import com.unciv.models.ruleset.unique.UniqueTarget 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.ruleset.unit.BaseUnit
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.civilopedia.FormattedLine import com.unciv.ui.civilopedia.FormattedLine
@ -107,7 +108,7 @@ class Technology: RulesetObject() {
predicate(it) // expected to be the most selective, thus tested first predicate(it) // expected to be the most selective, thus tested first
&& (it.uniqueTo == civInfo.civName || it.uniqueTo==null && civInfo.getEquivalentBuilding(it) == it) && (it.uniqueTo == civInfo.civName || it.uniqueTo==null && civInfo.getEquivalentBuilding(it) == it)
&& (nuclearWeaponsEnabled || "Enables nuclear weapon" !in it.uniques) && (nuclearWeaponsEnabled || "Enables nuclear weapon" !in it.uniques)
&& (religionEnabled || Constants.hiddenWithoutReligionUnique !in it.uniques) && (religionEnabled || !it.hasUnique(UniqueType.HiddenWithoutReligion))
&& Constants.hideFromCivilopediaUnique !in it.uniques && Constants.hideFromCivilopediaUnique !in it.uniques
} }
} }
@ -126,7 +127,7 @@ class Technology: RulesetObject() {
it.requiredTech == name it.requiredTech == name
&& (it.uniqueTo == civInfo.civName || it.uniqueTo==null && civInfo.getEquivalentUnit(it) == it) && (it.uniqueTo == civInfo.civName || it.uniqueTo==null && civInfo.getEquivalentUnit(it) == it)
&& (nuclearWeaponsEnabled || it.uniqueObjects.none { unique -> unique.placeholderText == "Nuclear weapon of Strength []" }) && (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 && Constants.hideFromCivilopediaUnique !in it.uniques
} }
} }

View File

@ -9,6 +9,7 @@ import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.RulesetStatsObject import com.unciv.models.ruleset.RulesetStatsObject
import com.unciv.models.ruleset.unique.Unique import com.unciv.models.ruleset.unique.Unique
import com.unciv.models.ruleset.unique.UniqueTarget import com.unciv.models.ruleset.unique.UniqueTarget
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.civilopedia.FormattedLine import com.unciv.ui.civilopedia.FormattedLine
import com.unciv.ui.utils.toPercent import com.unciv.ui.utils.toPercent
@ -172,7 +173,7 @@ class TileImprovement : RulesetStatsObject() {
ruleset.ruinRewards.values.asSequence() ruleset.ruinRewards.values.asSequence()
.filter { reward -> .filter { reward ->
difficulty !in reward.excludedDifficulties && difficulty !in reward.excludedDifficulties &&
(religionEnabled || Constants.hiddenWithoutReligionUnique !in reward.uniques) (religionEnabled || !reward.hasUnique(UniqueType.HiddenWithoutReligion))
} }
.forEach { reward -> .forEach { reward ->
textList += FormattedLine(reward.name, starred = true, color = reward.color) textList += FormattedLine(reward.name, starred = true, color = reward.color)

View File

@ -210,6 +210,8 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget) {
CannotEnterOcean("Cannot enter ocean tiles", UniqueTarget.Unit), CannotEnterOcean("Cannot enter ocean tiles", UniqueTarget.Unit),
CannotEnterOceanUntilAstronomy("Cannot enter ocean tiles until Astronomy", 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 //////////////////////////////////////// //////////////////////////////////////// TERRAIN UNIQUES ////////////////////////////////////////

View File

@ -9,6 +9,7 @@ import com.unciv.Constants
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.models.ruleset.* import com.unciv.models.ruleset.*
import com.unciv.models.ruleset.unique.Unique import com.unciv.models.ruleset.unique.Unique
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.stats.INamed import com.unciv.models.stats.INamed
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
@ -175,7 +176,7 @@ class CivilopediaScreen(
val uniques = uniqueObjects.map { it.placeholderText } val uniques = uniqueObjects.map { it.placeholderText }
return Constants.hideFromCivilopediaUnique !in uniques 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 { && !(uniqueObjects.filter { unique -> unique.placeholderText == "Hidden when [] Victory is disabled"}.any {
unique -> !game.gameInfo.gameParameters.victoryTypes.contains(VictoryType.valueOf(unique.params[0] )) unique -> !game.gameInfo.gameParameters.victoryTypes.contains(VictoryType.valueOf(unique.params[0] ))
}) })

View File

@ -12,6 +12,7 @@ import com.unciv.models.ruleset.Building
import com.unciv.models.ruleset.Era import com.unciv.models.ruleset.Era
import com.unciv.models.ruleset.QuestName import com.unciv.models.ruleset.QuestName
import com.unciv.models.ruleset.VictoryType import com.unciv.models.ruleset.VictoryType
import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.civilopedia.CivilopediaCategories import com.unciv.ui.civilopedia.CivilopediaCategories
import com.unciv.ui.civilopedia.CivilopediaScreen import com.unciv.ui.civilopedia.CivilopediaScreen
@ -85,7 +86,7 @@ class WonderOverviewTable(
private fun shouldBeDisplayed(wonder: Building, wonderEra: Int) = when { private fun shouldBeDisplayed(wonder: Building, wonderEra: Int) = when {
Constants.hideFromCivilopediaUnique in wonder.uniques -> false 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.name in startingObsolete -> false
wonder.uniqueObjects.filter { unique -> wonder.uniqueObjects.filter { unique ->
unique.placeholderText == "Hidden when [] Victory is disabled" unique.placeholderText == "Hidden when [] Victory is disabled"