mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-08 23:08:35 +07:00
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:
@ -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"
|
||||
|
@ -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()
|
||||
}
|
||||
|
||||
|
@ -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())
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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 ////////////////////////////////////////
|
||||
|
||||
|
@ -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] ))
|
||||
})
|
||||
|
@ -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"
|
||||
|
Reference in New Issue
Block a user