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 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"

View File

@ -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()
}

View File

@ -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())

View File

@ -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

View File

@ -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)
}

View File

@ -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
}
}

View File

@ -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)

View File

@ -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 ////////////////////////////////////////

View File

@ -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] ))
})

View File

@ -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"