Index: binaries/data/mods/public/gui/campaigns/default_menu/CampaignMenu.js =================================================================== --- binaries/data/mods/public/gui/campaigns/default_menu/CampaignMenu.js +++ binaries/data/mods/public/gui/campaigns/default_menu/CampaignMenu.js @@ -36,11 +36,11 @@ startScenario() { - let level = this.getSelectedLevelData(); + const level = this.getSelectedLevelData(); if (!meetsRequirements(this.run, level)) return; - let settings = { + const settings = { "mapType": level.MapType, "map": "maps/" + level.Map, "settings": { @@ -52,15 +52,32 @@ "data": this.run.data } }; - let assignments = { + const assignments = { "local": { "player": 1, "name": Engine.ConfigDB_GetValue("user", "playername.singleplayer") || Engine.GetSystemUsername() } }; - let gameSettings = new GameSettings().init(); + const gameSettings = new GameSettings().init(); gameSettings.fromInitAttributes(settings); + + if (level.AI) + { + // Setup AI on the non-human players. + for (let i = 1; i < gameSettings.playerCount.nbPlayers; ++i) + { + const bot = { + "bot": g_Settings.PlayerDefaults[i + 1].AI, + "difficulty": +Engine.ConfigDB_GetValue("user", "gui.gamesetup.aidifficulty"), + "behavior": Engine.ConfigDB_GetValue("user", "gui.gamesetup.aibehavior"), + }; + if (typeof level.AI === "string") + bot.bot = level.AI; + gameSettings.playerAI.set(i, bot); + } + } + if (level.Preview) gameSettings.mapPreview.setCustom("cropped:" + 400/512 + "," + 300/512 + ":" + level.Preview); gameSettings.mapName.set(this.getLevelName(level));