From d3b8e788a2623143c5367150e4c7eac6e2bc99d4 Mon Sep 17 00:00:00 2001 From: Loof <223481293+unciv-loof@users.noreply.github.com> Date: Sat, 20 Sep 2025 23:11:55 +0200 Subject: [PATCH] Adjust CS military rank tribute points to depend on number of alive players --- .../logic/civilization/diplomacy/CityStateFunctions.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/diplomacy/CityStateFunctions.kt b/core/src/com/unciv/logic/civilization/diplomacy/CityStateFunctions.kt index 37cd561205..45e1412f3d 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/CityStateFunctions.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/CityStateFunctions.kt @@ -463,11 +463,14 @@ class CityStateFunctions(val civInfo: Civilization) { if (!requireWholeList && modifiers.values.sum() < -200) return modifiers - // highest force gets rank=0 + // highest force is rank=0 val forceRank = civInfo.gameInfo.getAliveMajorCivs().sortedByDescending { it.getStatForRanking( RankingType.Force) }.indexOf(demandingCiv) + // probably not necessary, but just in case, avoid division by zero if there's some edge case where no players are alive + val numAlivePlayers = max(civInfo.gameInfo.getAliveMajorCivs().size, 1) val globalModifier = civInfo.gameInfo.ruleset.modOptions.constants.tributeGlobalModifier - modifiers["Military Rank"] = globalModifier * (civInfo.gameInfo.gameParameters.players.size - forceRank) / civInfo.gameInfo.gameParameters.players.size + // apparently lowest force gets some pity points + modifiers["Military Rank"] = globalModifier * (numAlivePlayers - forceRank) / numAlivePlayers if (!requireWholeList && modifiers.values.sum() < -100) return modifiers