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 @@ -387,6 +387,11 @@ }); titles.push({ + "label": translate("Turbo Match"), + "value": initAttributes.settings.TurboMatch + }); + + titles.push({ "label": translate("Explored Map"), "value": initAttributes.settings.ExploreMap }); Index: binaries/data/mods/public/gui/gamesettings/attributes/TurboMatch.js =================================================================== --- /dev/null +++ binaries/data/mods/public/gui/gamesettings/attributes/TurboMatch.js @@ -0,0 +1,30 @@ +GameSettings.prototype.Attributes.TurboMatch = class TurboMatch extends GameSetting +{ + init() + { + this.enabled = false; + this.settings.map.watch(() => this.onMapChange(), ["map"]); + } + + toInitAttributes(attribs) + { + attribs.settings.TurboMatch = this.enabled; + } + + fromInitAttributes(attribs) + { + this.enabled = !!this.getLegacySetting(attribs, "TurboMatch"); + } + + onMapChange() + { + if (this.settings.map.type != "scenario") + return; + this.setEnabled(!!this.getMapSetting("TurboMatch")); + } + + setEnabled(enabled) + { + this.enabled = enabled; + } +}; Index: binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/GameSettingsLayout.js =================================================================== --- binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/GameSettingsLayout.js +++ binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/GameSettingsLayout.js @@ -19,6 +19,7 @@ "TriggerDifficulty", "Nomad", "Treasures", + "TurboMatch", "ExploredMap", "RevealedMap", "AlliedView" Index: binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/TurboMatch.js =================================================================== --- /dev/null +++ binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSettings/Single/Checkboxes/TurboMatch.js @@ -0,0 +1,28 @@ +GameSettingControls.TurboMatch = class TurboMatch extends GameSettingControlCheckbox +{ + constructor(...args) + { + super(...args); + g_GameSettings.turboMatch.watch(() => this.render(), ["enabled"]); + g_GameSettings.map.watch(() => this.render(), ["type"]); + this.render(); + } + + render() + { + this.setEnabled(g_GameSettings.map.type != "scenario"); + this.setChecked(g_GameSettings.turboMatch.enabled); + } + + onPress(checked) + { + g_GameSettings.turboMatch.setEnabled(checked); + this.gameSettingsController.setNetworkInitAttributes(); + } +}; + +GameSettingControls.TurboMatch.prototype.TitleCaption = + translate("Turbo Match"); + +GameSettingControls.TurboMatch.prototype.Tooltip = + translate("When checked the game will generally feel faster. Units gather more and faster, train and build faster."); Index: binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/Panels/GameDescription.js =================================================================== --- binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/Panels/GameDescription.js +++ binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/Panels/GameDescription.js @@ -33,6 +33,7 @@ g_GameSettings.triggerDifficulty.watch(update, ["value"]); g_GameSettings.victoryConditions.watch(update, ["active"]); g_GameSettings.wonder.watch(update, ["duration"]); + g_GameSettings.turboMatch.watch(update, ["enabled"]); } onTabsResize(settingsTabButtonsFrame) Index: binaries/data/mods/public/simulation/data/technologies/special/turbo_match.json =================================================================== --- /dev/null +++ binaries/data/mods/public/simulation/data/technologies/special/turbo_match.json @@ -0,0 +1,19 @@ +{ + "genericName": "Turbo Match", + "description": "Speeds up the match by icreasing gathering rates and decreasing training/building times.", + "requirements": { }, + "requirementsTooltip": "", + "icon": "", + "tooltip": "Turbo Match", + "modifications": [ + { "value": "ResourceGatherer/BaseSpeed", "multiply": 2 }, + { "value": "ResourceGatherer/Capacities/food", "multiply": 2 }, + { "value": "ResourceGatherer/Capacities/wood", "multiply": 2 }, + { "value": "ResourceGatherer/Capacities/stone", "multiply": 2 }, + { "value": "ResourceGatherer/Capacities/metal", "multiply": 2 }, + { "value": "Cost/BuildTime", "multiply": 0.5 }, + { "value": "ProductionQueue/TechCostMultiplier/time", "multiply": 0.5 } + ], + "affects": ["Unit", "Structure"], + "soundComplete": "interface/alarm/alarm_upgradearmory.xml" +} Index: binaries/data/mods/public/simulation/helpers/InitGame.js =================================================================== --- binaries/data/mods/public/simulation/helpers/InitGame.js +++ binaries/data/mods/public/simulation/helpers/InitGame.js @@ -69,8 +69,12 @@ if (settings.PopulationCap) cmpPlayer.SetMaxPopulation(settings.PopulationCap); + const cmpTechnologyManager = Engine.QueryInterface(cmpPlayer.entity, IID_TechnologyManager); if (settings.AllyView) - Engine.QueryInterface(cmpPlayer.entity, IID_TechnologyManager)?.ResearchTechnology(cmpPlayer.template.SharedLosTech); + cmpTechnologyManager?.ResearchTechnology(cmpPlayer.template.SharedLosTech); + + if (settings.TurboMatch) + cmpTechnologyManager?.ResearchTechnology("special/turbo_match"); } if (settings.WorldPopulationCap) Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).SetMaxWorldPopulation(settings.WorldPopulationCap);