mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 05:46:43 -04:00
Tied the unit upkeep scaling to game speed (#1870)
* Tied the unit upkeep scaling to game speed * Refactor: Modifier and TurnLimit are now fields * Turn limit will be derived from the GameSpeed.modifier and base game duration
This commit is contained in:
parent
edf0294dfd
commit
096e1c2beb
@ -2,6 +2,7 @@ package com.unciv.logic.civilization
|
||||
|
||||
import com.unciv.logic.civilization.diplomacy.RelationshipLevel
|
||||
import com.unciv.logic.map.RoadStatus
|
||||
import com.unciv.models.metadata.BASE_GAME_DURATION_TURNS
|
||||
import com.unciv.models.ruleset.tile.ResourceType
|
||||
import com.unciv.models.stats.Stat
|
||||
import com.unciv.models.stats.StatMap
|
||||
@ -30,8 +31,8 @@ class CivInfoStats(val civInfo: CivilizationInfo){
|
||||
numberOfUnitsToPayFor -= 0.25f * numberOfUnitsWithDiscount
|
||||
}
|
||||
|
||||
|
||||
val gameProgress = civInfo.gameInfo.turns/400f // as game progresses Maintenance cost rises
|
||||
val turnLimit = BASE_GAME_DURATION_TURNS * civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
val gameProgress = civInfo.gameInfo.turns / turnLimit // as game progresses Maintenance cost rises
|
||||
var cost = baseUnitCost*numberOfUnitsToPayFor*(1+gameProgress)
|
||||
cost = cost.pow(1+gameProgress/3) // Why 3? To spread 1 to 1.33
|
||||
if(!civInfo.isPlayerCivilization())
|
||||
|
@ -513,7 +513,7 @@ class CivilizationInfo {
|
||||
TechEra.Information, TechEra.Future -> 400
|
||||
else -> 0
|
||||
}
|
||||
return (basicGoldCostOfSignResearchAgreement * gameInfo.gameParameters.gameSpeed.getModifier()).toInt()
|
||||
return (basicGoldCostOfSignResearchAgreement * gameInfo.gameParameters.gameSpeed.modifier).toInt()
|
||||
}
|
||||
|
||||
fun giftMilitaryUnitTo(otherCiv: CivilizationInfo) {
|
||||
|
@ -30,7 +30,7 @@ class GoldenAgeManager{
|
||||
if(civInfo.nation.unique=="Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and +10% Strength")
|
||||
turnsToGoldenAge*=1.5
|
||||
if (civInfo.policies.isAdopted("Freedom Complete")) turnsToGoldenAge *= 1.5
|
||||
turnsToGoldenAge *= civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
turnsToGoldenAge *= civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
turnsLeftForCurrentGoldenAge += turnsToGoldenAge.toInt()
|
||||
civInfo.addNotification("You have entered a golden age!", null, Color.GOLD)
|
||||
civInfo.popupAlerts.add(PopupAlert(AlertType.GoldenAge,""))
|
||||
|
@ -55,7 +55,7 @@ class PolicyManager {
|
||||
policyCultureCost *= 0.9
|
||||
if (civInfo.isPlayerCivilization())
|
||||
policyCultureCost *= civInfo.getDifficulty().policyCostModifier
|
||||
policyCultureCost *= civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
policyCultureCost *= civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
val cost: Int = (policyCultureCost * (1 + cityModifier)).roundToInt()
|
||||
return cost - (cost % 5)
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ class TechManager {
|
||||
var techCost = getRuleset().technologies[techName]!!.cost.toFloat()
|
||||
if (civInfo.isPlayerCivilization())
|
||||
techCost *= civInfo.getDifficulty().researchCostModifier
|
||||
techCost *= civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
techCost *= civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
val techsResearchedKnownCivs = civInfo.getKnownCivs().count { it.isMajorCiv() && it.tech.isResearched(techName) }
|
||||
val undefeatedCivs = UncivGame.Current.gameInfo.civilizations.count { it.isMajorCiv() && !it.isDefeated() }
|
||||
// https://forums.civfanatics.com/threads/the-mechanics-of-overflow-inflation.517970/
|
||||
@ -127,7 +127,7 @@ class TechManager {
|
||||
|
||||
fun getScienceFromGreatScientist(): Int {
|
||||
// https://civilization.fandom.com/wiki/Great_Scientist_(Civ5)
|
||||
return (scienceOfLast8Turns.sum() * civInfo.gameInfo.gameParameters.gameSpeed.getModifier()).toInt()
|
||||
return (scienceOfLast8Turns.sum() * civInfo.gameInfo.gameParameters.gameSpeed.modifier).toInt()
|
||||
}
|
||||
|
||||
fun addCurrentScienceToScienceOfLast8Turns() {
|
||||
|
@ -507,7 +507,7 @@ class MapUnit {
|
||||
private fun clearEncampment(tile: TileInfo) {
|
||||
tile.improvement = null
|
||||
|
||||
var goldGained = civInfo.getDifficulty().clearBarbarianCampReward * civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
var goldGained = civInfo.getDifficulty().clearBarbarianCampReward * civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
if (civInfo.nation.unique == "Receive triple Gold from Barbarian encampments and pillaging Cities. Embarked units can defend themselves.")
|
||||
goldGained *= 3f
|
||||
|
||||
|
@ -121,7 +121,7 @@ class TradeEvaluation{
|
||||
|
||||
TradeType.Technology ->
|
||||
return (sqrt(civInfo.gameInfo.ruleSet.technologies[offer.name]!!.cost.toDouble())
|
||||
* civInfo.gameInfo.gameParameters.gameSpeed.getModifier()).toInt()*20
|
||||
* civInfo.gameInfo.gameParameters.gameSpeed.modifier).toInt()*20
|
||||
TradeType.Introduction -> return 250
|
||||
TradeType.WarDeclaration -> {
|
||||
val civToDeclareWarOn = civInfo.gameInfo.getCivilization(offer.name)
|
||||
|
@ -1,17 +1,14 @@
|
||||
package com.unciv.models.metadata
|
||||
|
||||
enum class GameSpeed{
|
||||
Quick,
|
||||
Standard,
|
||||
Epic,
|
||||
Marathon;
|
||||
const val BASE_GAME_DURATION_TURNS = 500f
|
||||
|
||||
fun getModifier(): Float {
|
||||
when(this) {
|
||||
Quick -> return 0.67f
|
||||
Standard -> return 1f
|
||||
Epic -> return 1.5f
|
||||
Marathon -> return 3f
|
||||
}
|
||||
}
|
||||
/** Game speed
|
||||
*
|
||||
* @param modifier cost modifier
|
||||
* */
|
||||
enum class GameSpeed(val modifier: Float) {
|
||||
Quick(0.67f),
|
||||
Standard(1f),
|
||||
Epic(1.5f),
|
||||
Marathon(3f);
|
||||
}
|
@ -205,7 +205,7 @@ class Building : NamedStats(), IConstruction{
|
||||
productionCost *= civInfo.gameInfo.getDifficulty().aiBuildingCostModifier
|
||||
}
|
||||
}
|
||||
productionCost *= civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
productionCost *= civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
return productionCost.toInt()
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ class TileImprovement : NamedStats() {
|
||||
|
||||
|
||||
fun getTurnsToBuild(civInfo: CivilizationInfo): Int {
|
||||
var realTurnsToBuild = turnsToBuild.toFloat() * civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
var realTurnsToBuild = turnsToBuild.toFloat() * civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
if (civInfo.containsBuildingUnique("Worker construction increased 25%"))
|
||||
realTurnsToBuild *= 0.75f
|
||||
if (civInfo.policies.isAdopted("Citizenship"))
|
||||
|
@ -97,7 +97,7 @@ class BaseUnit : INamed, IConstruction {
|
||||
productionCost *= civInfo.getDifficulty().unitCostModifier
|
||||
else
|
||||
productionCost *= civInfo.gameInfo.getDifficulty().aiUnitCostModifier
|
||||
productionCost *= civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
productionCost *= civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
return productionCost.toInt()
|
||||
}
|
||||
|
||||
|
@ -282,7 +282,7 @@ class UnitActions {
|
||||
uncivSound = UncivSound.Chimes,
|
||||
action = {
|
||||
// http://civilization.wikia.com/wiki/Great_Merchant_(Civ5)
|
||||
var goldEarned = (350 + 50 * unit.civInfo.getEra().ordinal) * unit.civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
|
||||
var goldEarned = (350 + 50 * unit.civInfo.getEra().ordinal) * unit.civInfo.gameInfo.gameParameters.gameSpeed.modifier
|
||||
if (unit.civInfo.policies.isAdopted("Commerce Complete"))
|
||||
goldEarned *= 2
|
||||
unit.civInfo.gold += goldEarned.toInt()
|
||||
|
Loading…
x
Reference in New Issue
Block a user