Index: binaries/data/mods/public/campaigns/new_maps.json =================================================================== --- /dev/null +++ binaries/data/mods/public/campaigns/new_maps.json @@ -0,0 +1,127 @@ +{ + "Name": "Demo campaign - new maps", + "Description": "Discover the new maps in Alpha 25 with a demo campaign, taking you through all of them.\nEach level is unlocked by completing one of the two preceding levels.", + "Image": "session/icons/mappreview/Introductory_Tutorial.png", + "Levels": { + "alpine_valleys_2p": { + "Map": "skirmishes/alpine_valleys_2p.xml", + "MapType": "skirmish", + "AI": true + }, + "bactria_2p": { + "Map": "skirmishes/bactria_2p.xml", + "MapType": "skirmish", + "AI": true + }, + "belgian_bog_2p": { + "Map": "skirmishes/belgian_bog_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "alpine_valleys_2p bactria_2p" + }, + "butana_steppe_2p": { + "Map": "skirmishes/butana_steppe_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "alpine_valleys_2p bactria_2p" + }, + "cisalpine_winter_2p": { + "Map": "skirmishes/cisalpine_winter_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "belgian_bog_2p butana_steppe_2p" + }, + "crocodilopolis_4p": { + "Map": "skirmishes/crocodilopolis_4p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "belgian_bog_2p butana_steppe_2p" + }, + "gallic_highlands_2p": { + "Map": "skirmishes/gallic_highlands_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "cisalpine_winter_2p crocodilopolis_4p" + }, + "hindu_kush_2p": { + "Map": "skirmishes/hindu_kush_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "cisalpine_winter_2p crocodilopolis_4p" + }, + "hydaspes_river_4p": { + "Map": "skirmishes/hydaspes_river_4p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "hindu_kush_2p hydaspes_river_4p" + }, + "magadha_2p": { + "Map": "skirmishes/magadha_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "hindu_kush_2p hydaspes_river_4p" + }, + "miletus_peninsula_2p": { + "Map": "skirmishes/miletus_peninsula_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "hydaspes_river_4p magadha_2p" + }, + "nubian_frontier_2p": { + "Map": "skirmishes/nubian_frontier_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "hydaspes_river_4p magadha_2p" + }, + "saharan_oases_2p": { + "Map": "skirmishes/saharan_oases_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "miletus_peninsula_2p nubian_frontier_2p" + }, + "scythia_4p": { + "Map": "skirmishes/scythia_4p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "miletus_peninsula_2p nubian_frontier_2p" + }, + "sporades_islands_2p": { + "Map": "skirmishes/sporades_islands_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "saharan_oases_2p scythia_4p" + }, + "syria_2p": { + "Map": "skirmishes/syria_2p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "saharan_oases_2p scythia_4p" + }, + "white_cliffs_of_dover_5p": { + "Map": "skirmishes/white_cliffs_of_dover_5p.xml", + "MapType": "skirmish", + "AI": true, + "Requires": "sporades_islands_2p syria_2p" + } + }, + "Order": [ + "alpine_valleys_2p", + "bactria_2p", + "belgian_bog_2p", + "butana_steppe_2p", + "cisalpine_winter_2p", + "crocodilopolis_4p", + "gallic_highlands_2p", + "hindu_kush_2p", + "hydaspes_river_4p", + "magadha_2p", + "miletus_peninsula_2p", + "nubian_frontier_2p", + "saharan_oases_2p", + "scythia_4p", + "sporades_islands_2p", + "syria_2p", + "white_cliffs_of_dover_5p" + ], + "ShowUnavailable": true +} 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));