Index: binaries/data/mods/public/gui/common/gamedescription.js =================================================================== --- binaries/data/mods/public/gui/common/gamedescription.js +++ binaries/data/mods/public/gui/common/gamedescription.js @@ -219,7 +219,8 @@ { "min": g_GameAttributes.settings.VictoryDuration } ); - else if (g_VictoryConditions.Name[victoryIdx] == "capture_the_relic") + let isCaptureTheRelic = g_VictoryConditions.Name[victoryIdx] == "capture_the_relic"; + if (isCaptureTheRelic) title = sprintf( translatePluralWithContext( "victory condition", @@ -234,6 +235,12 @@ "label": title, "value": g_VictoryConditions.Description[victoryIdx] }); + + if (isCaptureTheRelic) + titles.push({ + "label": translate("Relic Count"), + "value": g_GameAttributes.settings.RelicCount + }); } if (g_GameAttributes.settings.RatingEnabled && Index: binaries/data/mods/public/gui/gamesetup/gamesetup.js =================================================================== --- binaries/data/mods/public/gui/gamesetup/gamesetup.js +++ binaries/data/mods/public/gui/gamesetup/gamesetup.js @@ -62,6 +62,11 @@ */ var g_CivData = loadCivData(); +/** + * Number of relics: [1, ..., NumCivs] + */ +var g_RelicCountList = Object.keys(g_CivData).map((civ, i) => i + 1); + var g_PlayerCivList = g_CivData && prepareForDropdown([{ "name": '[color="' + g_ColorRandom + '"]' + translateWithContext("civilization", "Random") + '[/color]', "code": "random" @@ -307,6 +312,7 @@ "Dropdown": [ "gameSpeed", "victoryCondition", + "relicCount", "victoryDuration", "populationCap", "startingResources", @@ -498,6 +504,20 @@ "enabled": () => g_GameAttributes.mapType != "scenario", "autocomplete": true, }, + "relicCount": { + "title": () => translate("Relic Count"), + "tooltip": () => translate("Total number of relics spawned on the map."), + "labels": () => g_RelicCountList, + "ids": () => g_RelicCountList, + "default": () => g_RelicCountList.indexOf(5), + "defined": () => g_GameAttributes.settings.RelicCount !== undefined, + "get": () => g_GameAttributes.settings.RelicCount, + "select": (idx) => { + g_GameAttributes.settings.RelicCount = g_RelicCountList[idx]; + }, + "hidden": () => g_GameAttributes.settings.GameType != "capture_the_relic", + "enabled": () => g_GameAttributes.mapType != "scenario", + }, "victoryDuration": { "title": () => translate("Victory Duration"), "tooltip": () => translate("Number of minutes until the player has won."), Index: binaries/data/mods/public/maps/scripts/CaptureTheRelic.js =================================================================== --- binaries/data/mods/public/maps/scripts/CaptureTheRelic.js +++ binaries/data/mods/public/maps/scripts/CaptureTheRelic.js @@ -48,7 +48,8 @@ return; } - let numSpawnedRelics = Math.ceil(TriggerHelper.GetNumberOfPlayers() / 2); + let cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager); + let numSpawnedRelics = cmpEndGameManager.GetGameTypeSettings().relicCount; this.playerRelicsCount = new Array(TriggerHelper.GetNumberOfPlayers()).fill(0, 1); this.playerRelicsCount[0] = numSpawnedRelics; Index: binaries/data/mods/public/simulation/helpers/Setup.js =================================================================== --- binaries/data/mods/public/simulation/helpers/Setup.js +++ binaries/data/mods/public/simulation/helpers/Setup.js @@ -45,6 +45,8 @@ let cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager); let gameTypeSettings = {}; + if (settings.RelicCount) + gameTypeSettings.relicCount = settings.RelicCount; if (settings.VictoryDuration) gameTypeSettings.victoryDuration = settings.VictoryDuration * 60 * 1000; if (settings.GameType)