Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/ExploredMap.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/ExploredMap.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/ExploredMap.js (revision 24037) @@ -1,58 +1,59 @@ GameSettingControls.ExploredMap = class extends GameSettingControlCheckbox { onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.ExploreMap || undefined; + mapData.settings.ExploreMap !== undefined) + mapValue = mapData.settings.ExploreMap; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.ExploreMap) { g_GameAttributes.settings.ExploreMap = mapValue; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesChange() { if (!g_GameAttributes.mapType) return; if (g_GameAttributes.settings.ExploreMap === undefined) { g_GameAttributes.settings.ExploreMap = !!g_GameAttributes.settings.RevealMap; this.gameSettingsControl.updateGameAttributes(); } else if (g_GameAttributes.settings.RevealMap && !g_GameAttributes.settings.ExploreMap) { g_GameAttributes.settings.ExploreMap = true; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { if (!g_GameAttributes.mapType) return; this.setChecked(g_GameAttributes.settings.ExploreMap); this.setEnabled(g_GameAttributes.mapType != "scenario" && !g_GameAttributes.settings.RevealMap); } onPress(checked) { g_GameAttributes.settings.ExploreMap = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.ExploredMap.prototype.TitleCaption = // Translation: Make sure to differentiate between the revealed map and explored map settings! translate("Explored Map"); GameSettingControls.ExploredMap.prototype.Tooltip = // Translation: Make sure to differentiate between the revealed map and explored map settings! translate("Toggle explored map (see initial map)."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/LastManStanding.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/LastManStanding.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/LastManStanding.js (revision 24037) @@ -1,61 +1,62 @@ GameSettingControls.LastManStanding = class extends GameSettingControlCheckbox { onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - !mapData.settings.LockTeams && - mapData.settings.LastManStanding; + mapData.settings.LastManStanding !== undefined) + mapValue = !mapData.settings.LockTeams && + mapData.settings.LastManStanding; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.LastManStanding) { g_GameAttributes.settings.LastManStanding = mapValue; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesChange() { if (!g_GameAttributes.mapType) return; this.available = !g_GameAttributes.settings.LockTeams; if (this.available) { if (g_GameAttributes.settings.LastManStanding === undefined) { g_GameAttributes.settings.LastManStanding = false; this.gameSettingsControl.updateGameAttributes(); } } else if (g_GameAttributes.settings.LastManStanding !== undefined) { delete g_GameAttributes.settings.LastManStanding; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { if (!g_GameAttributes.mapType) return; // Always display this, so that players are aware that there is this gamemode this.setChecked(!!g_GameAttributes.settings.LastManStanding); this.setEnabled(g_GameAttributes.mapType != "scenario" && !g_GameAttributes.settings.LockTeams); } onPress(checked) { g_GameAttributes.settings.LastManStanding = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.LastManStanding.prototype.TitleCaption = translate("Last Man Standing"); GameSettingControls.LastManStanding.prototype.Tooltip = translate("Toggle whether the last remaining player or the last remaining set of allies wins."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/LockedTeams.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/LockedTeams.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/LockedTeams.js (revision 24037) @@ -1,62 +1,63 @@ GameSettingControls.LockedTeams = class extends GameSettingControlCheckbox { onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - !mapData.settings.LockTeams && - mapData.settings.LastManStanding; + mapData.settings.LockTeams !== undefined) + mapValue = !mapData.settings.LockTeams && + mapData.settings.LastManStanding; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.LastManStanding) { g_GameAttributes.settings.LastManStanding = mapValue; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesChange() { if (!g_GameAttributes.mapType) return; if (g_GameAttributes.settings.LockTeams === undefined || g_GameAttributes.settings.RatingEnabled && !g_GameAttributes.settings.LockTeams) { g_GameAttributes.settings.LockTeams = g_IsNetworked; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { if (!g_GameAttributes.mapType) return; this.setChecked(g_GameAttributes.settings.LockTeams); this.setEnabled( g_GameAttributes.mapType != "scenario" && !g_GameAttributes.settings.RatingEnabled); } onPress(checked) { g_GameAttributes.settings.LockTeams = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.LockedTeams.prototype.TitleCaption = translate("Teams Locked"); GameSettingControls.LockedTeams.prototype.Tooltip = translate("Toggle locked teams."); /** * In multiplayer mode, players negotiate teams before starting the match and * expect to play the match with these teams unless explicitly stated otherwise during the match settings. * For singleplayermode, preserve the historic default of open diplomacies. */ GameSettingControls.LockedTeams.prototype.DefaultValue = Engine.HasNetClient(); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Nomad.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Nomad.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Nomad.js (revision 24037) @@ -1,63 +1,64 @@ GameSettingControls.Nomad = class extends GameSettingControlCheckbox { onMapChange(mapData) { let available = g_GameAttributes.mapType == "random"; this.setHidden(!available); if (!available) return; - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.Nomad; + mapData.settings.Nomad !== undefined) + mapValue = mapData.settings.Nomad; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.Nomad) { g_GameAttributes.settings.Nomad = mapValue; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesChange() { if (!g_GameAttributes.mapType) return; if (g_GameAttributes.mapType == "random") { if (g_GameAttributes.settings.Nomad === undefined) { g_GameAttributes.settings.Nomad = false; this.gameSettingsControl.updateGameAttributes(); } } else if (g_GameAttributes.settings.Nomad !== undefined) { delete g_GameAttributes.settings.Nomad; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { if (!g_GameAttributes.mapType) return; if (g_GameAttributes.mapType == "random") this.setChecked(g_GameAttributes.settings.Nomad); } onPress(checked) { g_GameAttributes.settings.Nomad = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.Nomad.prototype.TitleCaption = translate("Nomad"); GameSettingControls.Nomad.prototype.Tooltip = translate("In Nomad mode, players start with only few units and have to find a suitable place to build their city. Ceasefire is recommended."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/RegicideGarrison.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/RegicideGarrison.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/RegicideGarrison.js (revision 24037) @@ -1,67 +1,68 @@ GameSettingControls.RegicideGarrison = class extends GameSettingControlCheckbox { onMapChange(mapData) { this.setEnabled(g_GameAttributes.mapType != "scenario"); - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && mapData.settings.VictoryConditions && mapData.settings.VictoryConditions.indexOf(this.RegicideName) != -1 && - mapData.settings.RegicideGarrison; + mapData.settings.RegicideGarrison !== undefined) + mapValue = mapData.settings.RegicideGarrison; if (mapValue !== undefined || !g_GameAttributes.settings || mapValue == g_GameAttributes.settings.RegicideGarrison) return; if (!g_GameAttributes.settings.VictoryConditions) g_GameAttributes.settings.VictoryConditions = []; if (g_GameAttributes.settings.VictoryConditions.indexOf(this.RegicideName) == -1) g_GameAttributes.settings.VictoryConditions.push(this.RegicideName); g_GameAttributes.settings.RegicideGarrison = mapValue; this.gameSettingsControl.updateGameAttributes(); } onGameAttributesChange() { if (!g_GameAttributes.settings.VictoryConditions) return; let available = g_GameAttributes.settings.VictoryConditions.indexOf(this.RegicideName) != -1; this.setHidden(!available); if (available) { if (g_GameAttributes.settings.RegicideGarrison === undefined) { g_GameAttributes.settings.RegicideGarrison = false; this.gameSettingsControl.updateGameAttributes(); } this.setChecked(g_GameAttributes.settings.RegicideGarrison); } else if (g_GameAttributes.settings.RegicideGarrison !== undefined) { delete g_GameAttributes.settings.RegicideGarrison; this.gameSettingsControl.updateGameAttributes(); } } onPress(checked) { g_GameAttributes.settings.RegicideGarrison = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.RegicideGarrison.prototype.TitleCaption = translate("Hero Garrison"); GameSettingControls.RegicideGarrison.prototype.Tooltip = translate("Toggle whether heroes can be garrisoned."); GameSettingControls.RegicideGarrison.prototype.RegicideName = "regicide"; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/RevealedMap.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/RevealedMap.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/RevealedMap.js (revision 24037) @@ -1,53 +1,54 @@ GameSettingControls.RevealedMap = class extends GameSettingControlCheckbox { onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.RevealMap || undefined; + mapData.settings.RevealMap !== undefined) + mapValue = mapData.settings.RevealMap; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.RevealMap) { g_GameAttributes.settings.RevealMap = mapValue; this.gameSettingsControl.updateGameAttributes(); } this.setEnabled(g_GameAttributes.mapType != "scenario"); } onGameAttributesChange() { if (!g_GameAttributes.mapType) return; if (g_GameAttributes.settings.RevealMap === undefined) { g_GameAttributes.settings.RevealMap = false; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { if (!g_GameAttributes.mapType) return; this.setChecked(g_GameAttributes.settings.RevealMap); } onPress(checked) { g_GameAttributes.settings.RevealMap = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.RevealedMap.prototype.TitleCaption = // Translation: Make sure to differentiate between the revealed map and explored map settings! translate("Revealed Map"); GameSettingControls.RevealedMap.prototype.Tooltip = // Translation: Make sure to differentiate between the revealed map and explored map settings! translate("Toggle revealed map (see everything)."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Spies.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Spies.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Spies.js (revision 24037) @@ -1,45 +1,46 @@ GameSettingControls.Spies = class extends GameSettingControlCheckbox { onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.DisableSpies; + mapData.settings.DisableSpies !== undefined) + mapValue = mapData.settings.DisableSpies; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.DisableSpies) { g_GameAttributes.settings.DisableSpies = mapValue; this.gameSettingsControl.updateGameAttributes(); } this.setEnabled(g_GameAttributes.mapType != "scenario"); } onGameAttributesChange() { if (g_GameAttributes.settings.DisableSpies === undefined) { g_GameAttributes.settings.DisableSpies = false; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { this.setChecked(g_GameAttributes.settings.DisableSpies); } onPress(checked) { g_GameAttributes.settings.DisableSpies = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.Spies.prototype.TitleCaption = translate("Disable Spies"); GameSettingControls.Spies.prototype.Tooltip = translate("Disable spies during the game."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Treasures.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Treasures.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/Treasures.js (revision 24037) @@ -1,45 +1,46 @@ GameSettingControls.Treasures = class extends GameSettingControlCheckbox { onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.DisableTreasures; + mapData.settings.DisableTreasures !== undefined) + mapValue = mapData.settings.DisableTreasures; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.DisableTreasures) { g_GameAttributes.settings.DisableTreasures = mapValue; this.gameSettingsControl.updateGameAttributes(); } this.setEnabled(g_GameAttributes.mapType != "scenario"); } onGameAttributesChange() { if (g_GameAttributes.settings.DisableTreasures === undefined) { g_GameAttributes.settings.DisableTreasures = false; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { this.setChecked(g_GameAttributes.settings.DisableTreasures); } onPress(checked) { g_GameAttributes.settings.DisableTreasures = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.Treasures.prototype.TitleCaption = translate("Disable Treasures"); GameSettingControls.Treasures.prototype.Tooltip = translate("Do not add treasures to the map."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/WorldPopulation.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/WorldPopulation.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/WorldPopulation.js (revision 24037) @@ -1,51 +1,52 @@ GameSettingControls.WorldPopulation = class extends GameSettingControlCheckbox { onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.WorldPopulation || undefined; + mapData.settings.WorldPopulation !== undefined) + mapValue = mapData.settings.WorldPopulation; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.WorldPopulation) { g_GameAttributes.settings.WorldPopulation = mapValue; this.gameSettingsControl.updateGameAttributes(); } this.setEnabled(g_GameAttributes.mapType != "scenario"); } onGameAttributesChange() { if (!g_GameAttributes.mapType) return; if (g_GameAttributes.settings.WorldPopulation !== undefined) return; g_GameAttributes.settings.WorldPopulation = false; this.gameSettingsControl.updateGameAttributes(); } onGameAttributesBatchChange() { if (!g_GameAttributes.mapType) return; this.setChecked(g_GameAttributes.settings.WorldPopulation); } onPress(checked) { g_GameAttributes.settings.WorldPopulation = checked; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.WorldPopulation.prototype.TitleCaption = translate("World population"); GameSettingControls.WorldPopulation.prototype.Tooltip = translate("When checked the Population Cap will be evenly distributed over all living players."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/GameSpeed.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/GameSpeed.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/GameSpeed.js (revision 24037) @@ -1,76 +1,78 @@ GameSettingControls.GameSpeed = class extends GameSettingControlDropdown { constructor(...args) { super(...args); this.previousAllowFastForward = undefined; } onMapChange(mapData) { - let mapValue = mapData && mapData.gameSpeed || undefined; + let mapValue; + if (mapData && mapData.gameSpeed !== undefined) + mapValue = mapData.gameSpeed; if (mapValue !== undefined && mapValue != g_GameAttributes.gameSpeed) { g_GameAttributes.gameSpeed = mapValue; this.gameSettingsControl.updateGameAttributes(); } } onPlayerAssignmentsChange() { this.update(); } onGameAttributesChange() { this.update(); } update() { let allowFastForward = true; for (let guid in g_PlayerAssignments) if (g_PlayerAssignments[guid].player != -1) { allowFastForward = false; break; } if (this.previousAllowFastForward !== allowFastForward) { Engine.ProfileStart("updateGameSpeedList"); this.previousAllowFastForward = allowFastForward; this.values = prepareForDropdown( g_Settings.GameSpeeds.filter(speed => !speed.FastForward || allowFastForward)); this.dropdown.list = this.values.Title; this.dropdown.list_data = this.values.Speed; Engine.ProfileStop(); } if (this.values.Speed.indexOf(g_GameAttributes.gameSpeed || undefined) == -1) { g_GameAttributes.gameSpeed = this.values.Speed[this.values.Default]; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { this.setSelectedValue(g_GameAttributes.gameSpeed); } onSelectionChange(itemIdx) { g_GameAttributes.gameSpeed = this.values.Speed[itemIdx]; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.GameSpeed.prototype.TitleCaption = translate("Game Speed"); GameSettingControls.GameSpeed.prototype.Tooltip = translate("Select game speed."); Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/MapSize.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/MapSize.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/MapSize.js (revision 24037) @@ -1,79 +1,80 @@ GameSettingControls.MapSize = class extends GameSettingControlDropdown { constructor(...args) { super(...args); this.previousMapType = undefined; this.dropdown.list = g_MapSizes.Name; this.dropdown.list_data = g_MapSizes.Tiles; } onHoverChange() { this.dropdown.tooltip = g_MapSizes.Tooltip[this.dropdown.hovered] || this.Tooltip; } onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.Size || undefined; + mapData.settings.Size !== undefined) + mapValue = mapData.settings.Size; if (g_GameAttributes.mapType == "random" && mapValue !== undefined && mapValue != g_GameAttributes.settings.Size) { g_GameAttributes.settings.Size = mapValue; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesChange() { if (!g_GameAttributes.mapType || !g_GameAttributes.settings || this.previousMapType == g_GameAttributes.mapType) return; this.previousMapType = g_GameAttributes.mapType; let available = g_GameAttributes.mapType == "random"; this.setHidden(!available); if (available) { if (g_GameAttributes.settings.Size === undefined) { g_GameAttributes.settings.Size = g_MapSizes.Tiles[g_MapSizes.Default]; this.gameSettingsControl.updateGameAttributes(); } this.setSelectedValue(g_GameAttributes.settings.Size); } else if (g_GameAttributes.settings.Size !== undefined) { delete g_GameAttributes.settings.Size; this.gameSettingsControl.updateGameAttributes(); } } getAutocompleteEntries() { return g_MapSizes.Name; } onSelectionChange(itemIdx) { g_GameAttributes.settings.Size = g_MapSizes.Tiles[itemIdx]; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.MapSize.prototype.TitleCaption = translate("Map Size"); GameSettingControls.MapSize.prototype.Tooltip = translate("Select map size. (Larger sizes may reduce performance.)"); GameSettingControls.MapSize.prototype.AutocompleteOrder = 0; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/PopulationCap.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/PopulationCap.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/PopulationCap.js (revision 24037) @@ -1,110 +1,111 @@ GameSettingControls.PopulationCap = class extends GameSettingControlDropdown { constructor(...args) { super(...args); this.perPlayer = false; this.dropdown.list = g_PopulationCapacities.Title; this.dropdown.list_data = g_PopulationCapacities.Population; this.sprintfArgs = {}; } onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.PopulationCap || undefined; + mapData.settings.PopulationCap !== undefined) + mapValue = mapData.settings.PopulationCap; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.PopulationCap) { g_GameAttributes.settings.PopulationCap = mapValue; this.gameSettingsControl.updateGameAttributes(); } let isScenario = g_GameAttributes.mapType == "scenario"; this.perPlayer = isScenario && mapData.settings.PlayerData && mapData.settings.PlayerData.some(pData => pData && pData.PopulationLimit !== undefined); this.setEnabled(!isScenario && !this.perPlayer); if (this.perPlayer) this.label.caption = this.PerPlayerCaption; } onGameAttributesChange() { if (g_GameAttributes.settings.WorldPopulation) { this.setHidden(true); g_GameAttributes.settings.PopulationCap = undefined; } else { this.setHidden(false); if (g_GameAttributes.settings.PopulationCap === undefined) { g_GameAttributes.settings.PopulationCap = g_PopulationCapacities.Population[g_PopulationCapacities.Default]; this.gameSettingsControl.updateGameAttributes(); } } } onGameAttributesBatchChange() { if (!this.perPlayer) this.setSelectedValue(g_GameAttributes.settings.PopulationCap); } onHoverChange() { let tooltip = this.Tooltip; if (this.dropdown.hovered != -1) { let popCap = g_PopulationCapacities.Population[this.dropdown.hovered]; let players = g_GameAttributes.settings.PlayerData.length; if (popCap * players >= this.PopulationCapacityRecommendation) { this.sprintfArgs.players = players; this.sprintfArgs.popCap = popCap; tooltip = setStringTags(sprintf(this.HoverTooltip, this.sprintfArgs), this.HoverTags); } } this.dropdown.tooltip = tooltip; } onSelectionChange(itemIdx) { g_GameAttributes.settings.PopulationCap = g_PopulationCapacities.Population[itemIdx]; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.PopulationCap.prototype.TitleCaption = translate("Population Cap"); GameSettingControls.PopulationCap.prototype.Tooltip = translate("Select population limit."); GameSettingControls.PopulationCap.prototype.PerPlayerCaption = translateWithContext("population limit", "Per Player"); GameSettingControls.PopulationCap.prototype.HoverTooltip = translate("Warning: There might be performance issues if all %(players)s players reach %(popCap)s population."); GameSettingControls.PopulationCap.prototype.HoverTags = { "color": "orange" }; /** * Total number of units that the engine can run with smoothly. * It means a 4v4 with 150 population can still run nicely, but more than that might "lag". */ GameSettingControls.PopulationCap.prototype.PopulationCapacityRecommendation = 1200; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/StartingResources.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/StartingResources.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/StartingResources.js (revision 24037) @@ -1,92 +1,93 @@ GameSettingControls.StartingResources = class extends GameSettingControlDropdown { constructor(...args) { super(...args); this.dropdown.list = g_StartingResources.Title; this.dropdown.list_data = g_StartingResources.Resources; this.perPlayer = false; this.sprintfArgs = {}; } onHoverChange() { let tooltip = this.Tooltip; if (this.dropdown.hovered != -1) { this.sprintfArgs.resources = g_StartingResources.Resources[this.dropdown.hovered]; tooltip = sprintf(this.HoverTooltip, this.sprintfArgs); } this.dropdown.tooltip = tooltip; } onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.StartingResources || undefined; + mapData.settings.StartingResources !== undefined) + mapValue = mapData.settings.StartingResources; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.StartingResources) { g_GameAttributes.settings.StartingResources = mapValue; this.gameSettingsControl.updateGameAttributes(); } let isScenario = g_GameAttributes.mapType == "scenario"; this.perPlayer = isScenario && mapData.settings.PlayerData && mapData.settings.PlayerData.some(pData => pData && pData.Resources !== undefined); this.setEnabled(!isScenario && !this.perPlayer); if (this.perPlayer) this.label.caption = this.PerPlayerCaption; } onGameAttributesChange() { if (g_GameAttributes.settings.StartingResources === undefined) { g_GameAttributes.settings.StartingResources = g_StartingResources.Resources[g_StartingResources.Default]; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { if (!this.perPlayer) this.setSelectedValue(g_GameAttributes.settings.StartingResources); } getAutocompleteEntries() { return g_StartingResources.Title; } onSelectionChange(itemIdx) { g_GameAttributes.settings.StartingResources = g_StartingResources.Resources[itemIdx]; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.StartingResources.prototype.TitleCaption = translate("Starting Resources"); GameSettingControls.StartingResources.prototype.Tooltip = translate("Select the game's starting resources."); GameSettingControls.StartingResources.prototype.HoverTooltip = translate("Initial amount of each resource: %(resources)s."); GameSettingControls.StartingResources.prototype.PerPlayerCaption = translateWithContext("starting resources", "Per Player"); GameSettingControls.StartingResources.prototype.AutocompleteOrder = 0; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/WorldPopulationCap.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/WorldPopulationCap.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/WorldPopulationCap.js (revision 24037) @@ -1,91 +1,92 @@ GameSettingControls.WorldPopulationCap = class extends GameSettingControlDropdown { constructor(...args) { super(...args); this.dropdown.list = g_WorldPopulationCapacities.Title; this.dropdown.list_data = g_WorldPopulationCapacities.Population; this.sprintfArgs = {}; } onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.WorldPopulationCap || undefined; + mapData.settings.WorldPopulationCap !== undefined) + mapValue = mapData.settings.WorldPopulationCap; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.WorldPopulationCap) { g_GameAttributes.settings.WorldPopulationCap = mapValue; this.gameSettingsControl.updateGameAttributes(); } this.setEnabled(g_GameAttributes.mapType != "scenario"); } onGameAttributesChange() { if (g_GameAttributes.settings.WorldPopulation) { this.setHidden(false); if (g_GameAttributes.settings.WorldPopulationCap === undefined) { g_GameAttributes.settings.WorldPopulationCap = g_WorldPopulationCapacities.Population[g_WorldPopulationCapacities.Default]; this.gameSettingsControl.updateGameAttributes(); } } else { this.setHidden(true); g_GameAttributes.settings.WorldPopulationCap = undefined; } } onGameAttributesBatchChange() { this.setSelectedValue(g_GameAttributes.settings.WorldPopulationCap); } onHoverChange() { let tooltip = this.Tooltip; if (this.dropdown.hovered != -1) { let popCap = g_WorldPopulationCapacities.Population[this.dropdown.hovered]; if (popCap >= this.WorldPopulationCapacityRecommendation) { this.sprintfArgs.popCap = popCap; tooltip = setStringTags(sprintf(this.HoverTooltip, this.sprintfArgs), this.HoverTags); } } this.dropdown.tooltip = tooltip; } onSelectionChange(itemIdx) { g_GameAttributes.settings.WorldPopulationCap = g_WorldPopulationCapacities.Population[itemIdx]; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } }; GameSettingControls.WorldPopulationCap.prototype.TitleCaption = translate("World Population Cap"); GameSettingControls.WorldPopulationCap.prototype.Tooltip = translate("Select world population limit."); GameSettingControls.WorldPopulationCap.prototype.HoverTooltip = translate("Warning: There might be performance issues if %(popCap)s population is reached."); GameSettingControls.WorldPopulationCap.prototype.HoverTags = { "color": "orange" }; /** * Total number of units that the engine can run with smoothly. */ GameSettingControls.WorldPopulationCap.prototype.WorldPopulationCapacityRecommendation = 1200; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/Ceasefire.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/Ceasefire.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/Ceasefire.js (revision 24037) @@ -1,76 +1,77 @@ GameSettingControls.Ceasefire = class extends GameSettingControlSlider { constructor(...args) { super(...args); this.sprintfValue = {}; } onMapChange(mapData) { - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && - mapData.settings.Ceasefire || undefined; + mapData.settings.Ceasefire !== undefined) + mapValue = mapData.settings.Ceasefire; if (mapValue !== undefined && mapValue != g_GameAttributes.settings.Ceasefire) { g_GameAttributes.settings.Ceasefire = mapValue; this.gameSettingsControl.updateGameAttributes(); } this.setEnabled(g_GameAttributes.mapType != "scenario"); } onGameAttributesChange() { if (g_GameAttributes.settings.Ceasefire == undefined) { g_GameAttributes.settings.Ceasefire = this.DefaultValue; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { let value = Math.round(g_GameAttributes.settings.Ceasefire); this.sprintfValue.minutes = value; this.setSelectedValue( g_GameAttributes.settings.Ceasefire, value == 0 ? this.NoCeasefireCaption : sprintf(this.CeasefireCaption(value), this.sprintfValue)); } onValueChange(value) { g_GameAttributes.settings.Ceasefire = value; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } onGameAttributesFinalize() { g_GameAttributes.settings.Ceasefire = Math.round(g_GameAttributes.settings.Ceasefire); } }; GameSettingControls.Ceasefire.prototype.TitleCaption = translate("Ceasefire"); GameSettingControls.Ceasefire.prototype.Tooltip = translate("Set time where no attacks are possible."); GameSettingControls.Ceasefire.prototype.NoCeasefireCaption = translateWithContext("ceasefire", "No ceasefire"); GameSettingControls.Ceasefire.prototype.CeasefireCaption = minutes => translatePluralWithContext("ceasefire", "%(minutes)s minute", "%(minutes)s minutes", minutes); GameSettingControls.Ceasefire.prototype.DefaultValue = 0; GameSettingControls.Ceasefire.prototype.MinValue = 0; GameSettingControls.Ceasefire.prototype.MaxValue = 45; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/RelicCount.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/RelicCount.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/RelicCount.js (revision 24037) @@ -1,101 +1,102 @@ GameSettingControls.RelicCount = class extends GameSettingControlSlider { constructor(...args) { super(...args); this.sprintfValue = {}; this.available = false; } onMapChange(mapData) { this.setEnabled(g_GameAttributes.mapType != "scenario"); - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && mapData.settings.VictoryConditions && mapData.settings.VictoryConditions.indexOf(this.NameCaptureTheRelic) != -1 && - mapData.settings.RelicCount || undefined; + mapData.settings.RelicCount !== undefined) + mapValue = mapData.settings.RelicCount; if (mapValue === undefined || mapValue == g_GameAttributes.settings.RelicCount) return; if (!g_GameAttributes.settings.VictoryConditions) g_GameAttributes.settings.VictoryConditions = []; if (g_GameAttributes.settings.VictoryConditions.indexOf(this.NameCaptureTheRelic) == -1) g_GameAttributes.settings.VictoryConditions.push(this.NameCaptureTheRelic); g_GameAttributes.settings.RelicCount = mapValue; this.gameSettingsControl.updateGameAttributes(); } onGameAttributesChange() { if (!g_GameAttributes.settings.VictoryConditions) return; this.available = g_GameAttributes.settings.VictoryConditions.indexOf(this.NameCaptureTheRelic) != -1; if (this.available) { if (g_GameAttributes.settings.RelicCount === undefined) { g_GameAttributes.settings.RelicCount = this.DefaultValue; this.gameSettingsControl.updateGameAttributes(); } } else if (g_GameAttributes.settings.RelicCount !== undefined) { delete g_GameAttributes.settings.RelicCount; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { this.setHidden(!this.available); if (this.available) { let value = Math.round(g_GameAttributes.settings.RelicCount); this.sprintfValue.number = value; this.setSelectedValue( g_GameAttributes.settings.RelicCount, value == 0 ? this.InstantVictory : sprintf(this.CaptionRelicCount(value), this.sprintfValue)); } } onValueChange(value) { g_GameAttributes.settings.RelicCount = value; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } onGameAttributesFinalize() { if (this.available) g_GameAttributes.settings.RelicCount = Math.round(g_GameAttributes.settings.RelicCount); } }; GameSettingControls.RelicCount.prototype.TitleCaption = translate("Relic Count"); GameSettingControls.RelicCount.prototype.CaptionRelicCount = relicCount => translatePlural("%(number)s relic", "%(number)s relics", relicCount); GameSettingControls.RelicCount.prototype.Tooltip = translate("Total number of relics spawned on the map. Relic victory is most realistic with only one or two relics. With greater numbers, the relics are important to capture to receive aura bonuses."); GameSettingControls.RelicCount.prototype.NameCaptureTheRelic = "capture_the_relic"; GameSettingControls.RelicCount.prototype.MinValue = 1; GameSettingControls.RelicCount.prototype.MaxValue = Object.keys(g_CivData).length; GameSettingControls.RelicCount.prototype.DefaultValue = 2; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/RelicDuration.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/RelicDuration.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/RelicDuration.js (revision 24037) @@ -1,104 +1,105 @@ GameSettingControls.RelicDuration = class extends GameSettingControlSlider { constructor(...args) { super(...args); this.sprintfValue = {}; this.available = false; } onMapChange(mapData) { this.setEnabled(g_GameAttributes.mapType != "scenario"); - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && mapData.settings.VictoryConditions && mapData.settings.VictoryConditions.indexOf(this.NameCaptureTheRelic) != -1 && - mapData.settings.RelicDuration || undefined; + mapData.settings.RelicDuration !== undefined) + mapValue = mapData.settings.RelicDuration; if (mapValue === undefined || mapValue == g_GameAttributes.settings.RelicDuration) return; if (!g_GameAttributes.settings.VictoryConditions) g_GameAttributes.settings.VictoryConditions = []; if (g_GameAttributes.settings.VictoryConditions.indexOf(this.NameCaptureTheRelic) == -1) g_GameAttributes.settings.VictoryConditions.push(this.NameCaptureTheRelic); g_GameAttributes.settings.RelicDuration = mapValue; this.gameSettingsControl.updateGameAttributes(); } onGameAttributesChange() { if (!g_GameAttributes.settings.VictoryConditions) return; this.available = g_GameAttributes.settings.VictoryConditions.indexOf(this.NameCaptureTheRelic) != -1; if (this.available) { if (g_GameAttributes.settings.RelicDuration === undefined) { g_GameAttributes.settings.RelicDuration = this.DefaultValue; this.gameSettingsControl.updateGameAttributes(); } } else if (g_GameAttributes.settings.RelicDuration !== undefined) { delete g_GameAttributes.settings.RelicDuration; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { this.setHidden(!this.available); if (this.available) { let value = Math.round(g_GameAttributes.settings.RelicDuration); this.sprintfValue.min = value; this.setSelectedValue( g_GameAttributes.settings.RelicDuration, value == 0 ? this.InstantVictory : sprintf(this.CaptionVictoryTime(value), this.sprintfValue)); } } onValueChange(value) { g_GameAttributes.settings.RelicDuration = value; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } onGameAttributesFinalize() { if (this.available) g_GameAttributes.settings.RelicDuration = Math.round(g_GameAttributes.settings.RelicDuration); } }; GameSettingControls.RelicDuration.prototype.TitleCaption = translate("Relic Duration"); GameSettingControls.RelicDuration.prototype.Tooltip = translate("Minutes until the player has achieved Relic Victory."); GameSettingControls.RelicDuration.prototype.NameCaptureTheRelic = "capture_the_relic"; GameSettingControls.RelicDuration.prototype.CaptionVictoryTime = min => translatePluralWithContext("victory duration", "%(min)s minute", "%(min)s minutes", min); GameSettingControls.RelicDuration.prototype.InstantVictory = translateWithContext("victory duration", "Immediate Victory."); GameSettingControls.RelicDuration.prototype.MinValue = 0; GameSettingControls.RelicDuration.prototype.MaxValue = 60; GameSettingControls.RelicDuration.prototype.DefaultValue = 20; Index: ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/WonderDuration.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/WonderDuration.js (revision 24036) +++ ps/trunk/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Sliders/WonderDuration.js (revision 24037) @@ -1,105 +1,106 @@ GameSettingControls.WonderDuration = class extends GameSettingControlSlider { constructor(...args) { super(...args); this.sprintfValue = {}; this.available = false; } onMapChange(mapData) { this.setEnabled(g_GameAttributes.mapType != "scenario"); - let mapValue = - mapData && + let mapValue; + if (mapData && mapData.settings && mapData.settings.VictoryConditions && mapData.settings.VictoryConditions.indexOf(this.NameWonderVictory) != -1 && - mapData.settings.WonderDuration || undefined; + mapData.settings.WonderDuration !== undefined) + mapValue = mapData.settings.WonderDuration; if (mapValue === undefined || mapValue == g_GameAttributes.settings.WonderDuration) return; if (!g_GameAttributes.settings.VictoryConditions) g_GameAttributes.settings.VictoryConditions = []; if (g_GameAttributes.settings.VictoryConditions.indexOf(this.NameWonderVictory) == -1) g_GameAttributes.settings.VictoryConditions.push(this.NameWonderVictory); g_GameAttributes.settings.WonderDuration = mapValue; this.gameSettingsControl.updateGameAttributes(); } onGameAttributesChange() { if (!g_GameAttributes.settings.VictoryConditions) return; this.available = g_GameAttributes.settings.VictoryConditions.indexOf(this.NameWonderVictory) != -1; if (this.available) { if (g_GameAttributes.settings.WonderDuration === undefined) { g_GameAttributes.settings.WonderDuration = this.DefaultValue; this.gameSettingsControl.updateGameAttributes(); } } else if (g_GameAttributes.settings.WonderDuration !== undefined) { delete g_GameAttributes.settings.WonderDuration; this.gameSettingsControl.updateGameAttributes(); } } onGameAttributesBatchChange() { this.setHidden(!this.available); if (this.available) { let value = Math.round(g_GameAttributes.settings.WonderDuration); this.sprintfValue.min = value; this.setSelectedValue( g_GameAttributes.settings.WonderDuration, value == 0 ? this.InstantVictory : sprintf(this.CaptionVictoryTime(value), this.sprintfValue)); } } onValueChange(value) { g_GameAttributes.settings.WonderDuration = value; this.gameSettingsControl.updateGameAttributes(); this.gameSettingsControl.setNetworkGameAttributes(); } onGameAttributesFinalize() { if (this.available) g_GameAttributes.settings.WonderDuration = Math.round(g_GameAttributes.settings.WonderDuration); } }; GameSettingControls.WonderDuration.prototype.TitleCaption = translate("Wonder Duration"); GameSettingControls.WonderDuration.prototype.Tooltip = translate("Minutes until the player has achieved Wonder Victory"); GameSettingControls.WonderDuration.prototype.NameWonderVictory = "wonder"; GameSettingControls.WonderDuration.prototype.CaptionVictoryTime = min => translatePluralWithContext("victory duration", "%(min)s minute", "%(min)s minutes", min); GameSettingControls.WonderDuration.prototype.InstantVictory = translateWithContext("victory duration", "Immediate Victory."); GameSettingControls.WonderDuration.prototype.MinValue = 0; GameSettingControls.WonderDuration.prototype.MaxValue = 60; GameSettingControls.WonderDuration.prototype.DefaultValue = 20;