diff --git a/OpenRA.sln b/OpenRA.sln index 7190f90f0a..ef50a47e49 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -135,6 +135,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dune 2000 Lua scripts", "Du mods\d2k\maps\harkonnen-06b\harkonnen06b.lua = mods\d2k\maps\harkonnen-06b\harkonnen06b.lua mods\d2k\maps\harkonnen-07\harkonnen07-AI.lua = mods\d2k\maps\harkonnen-07\harkonnen07-AI.lua mods\d2k\maps\harkonnen-07\harkonnen07.lua = mods\d2k\maps\harkonnen-07\harkonnen07.lua + mods\d2k\maps\harkonnen-09a\harkonnen09a-AI.lua = mods\d2k\maps\harkonnen-09a\harkonnen09a-AI.lua + mods\d2k\maps\harkonnen-09a\harkonnen09a.lua = mods\d2k\maps\harkonnen-09a\harkonnen09a.lua mods\d2k\maps\ordos-01a\ordos01a.lua = mods\d2k\maps\ordos-01a\ordos01a.lua mods\d2k\maps\ordos-01b\ordos01b.lua = mods\d2k\maps\ordos-01b\ordos01b.lua mods\d2k\maps\ordos-02a\ordos02a-AI.lua = mods\d2k\maps\ordos-02a\ordos02a-AI.lua diff --git a/mods/d2k/maps/harkonnen-09a/harkonnen09a-AI.lua b/mods/d2k/maps/harkonnen-09a/harkonnen09a-AI.lua new file mode 100644 index 0000000000..e67fcf8233 --- /dev/null +++ b/mods/d2k/maps/harkonnen-09a/harkonnen09a-AI.lua @@ -0,0 +1,80 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you under the terms of the GNU General Public License + as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. For more + information, see COPYING. +]] + +AttackGroupSize = +{ + easy = 6, + normal = 8, + hard = 10 +} + +AttackDelays = +{ + easy = { DateTime.Seconds(4), DateTime.Seconds(7) }, + normal = { DateTime.Seconds(2), DateTime.Seconds(5) }, + hard = { DateTime.Seconds(1), DateTime.Seconds(3) } +} + +EnemyInfantryTypes = { "light_inf", "light_inf", "light_inf", "trooper", "trooper" } +EnemyVehicleTypes = { "trike", "trike", "quad" } + +AtreidesMainTankTypes = { "combat_tank_a", "combat_tank_a", "siege_tank", "missile_tank", "sonic_tank" } +AtreidesSmallTankTypes = { "combat_tank_a", "combat_tank_a", "siege_tank" } +AtreidesStarportTypes = { "trike.starport", "trike.starport", "quad.starport", "combat_tank_a.starport", "combat_tank_a.starport", "siege_tank.starport", "missile_tank.starport" } + +CorrinoMainInfantryTypes = { "light_inf", "light_inf", "trooper", "sardaukar" } +CorrinoMainTankTypes = { "combat_tank_h", "combat_tank_h", "siege_tank", "missile_tank" } +CorrinoSmallTankTypes = { "combat_tank_h", "combat_tank_h", "siege_tank" } +CorrinoStarportTypes = { "trike.starport", "trike.starport", "quad.starport", "combat_tank_h.starport", "combat_tank_h.starport", "siege_tank.starport", "missile_tank.starport" } + +ActivateAI = function() + IdlingUnits[atreides_main] = Reinforcements.Reinforce(atreides_main, InitialAtreidesReinforcements[1], InitialAtreidesPaths[1]), Reinforcements.Reinforce(atreides_main, InitialAtreidesReinforcements[2], InitialAtreidesPaths[2]), Reinforcements.Reinforce(atreides_main, InitialAtreidesReinforcements[3], InitialAtreidesPaths[3]) + IdlingUnits[atreides_small_1] = Reinforcements.Reinforce(atreides_small_1, InitialAtreidesReinforcements[4], InitialAtreidesPaths[4]), Reinforcements.Reinforce(atreides_small_1, InitialAtreidesReinforcements[5], InitialAtreidesPaths[5]) + IdlingUnits[atreides_small_2] = Reinforcements.Reinforce(atreides_small_2, InitialAtreidesReinforcements[6], InitialAtreidesPaths[6]) + IdlingUnits[corrino_main] = Reinforcements.Reinforce(corrino_main, InitialCorrinoReinforcements, InitialCorrinoPaths[1]) + IdlingUnits[corrino_small] = Reinforcements.Reinforce(corrino_main, InitialCorrinoReinforcements, InitialCorrinoPaths[2]) + + DefendAndRepairBase(atreides_main, AtreidesMainBase, 0.75, AttackGroupSize[Difficulty]) + DefendAndRepairBase(atreides_small_1, AtreidesSmall1Base, 0.75, AttackGroupSize[Difficulty]) + DefendAndRepairBase(atreides_small_2, AtreidesSmall2Base, 0.75, AttackGroupSize[Difficulty]) + DefendAndRepairBase(corrino_main, CorrinoMainBase, 0.75, AttackGroupSize[Difficulty]) + DefendAndRepairBase(corrino_small, CorrinoSmallBase, 0.75, AttackGroupSize[Difficulty]) + + local delay = function() return Utils.RandomInteger(AttackDelays[Difficulty][1], AttackDelays[Difficulty][2] + 1) end + local infantryToBuild = function() return { Utils.Random(EnemyInfantryTypes) } end + local infantryToBuildCorrinoMain = function() return { Utils.Random(CorrinoMainInfantryTypes) } end + local vehilcesToBuild = function() return { Utils.Random(EnemyVehicleTypes) } end + local tanksToBuildAtreidesMain = function() return { Utils.Random(AtreidesMainTankTypes) } end + local tanksToBuildAtreidesSmall = function() return { Utils.Random(AtreidesSmallTankTypes) } end + local tanksToBuildCorrinoMain = function() return { Utils.Random(CorrinoMainTankTypes) } end + local tanksToBuildCorrinoSmall = function() return { Utils.Random(CorrinoSmallTankTypes) } end + local unitsToBuyAtreides = function() return { Utils.Random(AtreidesStarportTypes) } end + local unitsToBuyCorrino = function() return { Utils.Random(CorrinoStarportTypes) } end + local attackThresholdSize = AttackGroupSize[Difficulty] * 2.5 + + ProduceUnits(atreides_main, ABarracks1, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(atreides_main, ALightFactory1, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(atreides_main, AHeavyFactory1, delay, tanksToBuildAtreidesMain, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(atreides_main, AStarport, delay, unitsToBuyAtreides, AttackGroupSize[Difficulty], attackThresholdSize) + + ProduceUnits(atreides_small_1, ABarracks3, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(atreides_small_1, ALightFactory2, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(atreides_small_1, AHeavyFactory2, delay, tanksToBuildAtreidesSmall, AttackGroupSize[Difficulty], attackThresholdSize) + + ProduceUnits(atreides_small_2, ABarracks4, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + + ProduceUnits(corrino_main, CBarracks1, delay, infantryToBuildCorrinoMain, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(corrino_main, CLightFactory1, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(corrino_main, CHeavyFactory1, delay, tanksToBuildCorrinoMain, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(corrino_main, CStarport, delay, unitsToBuyCorrino, AttackGroupSize[Difficulty], attackThresholdSize) + + ProduceUnits(corrino_small, CBarracks2, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(corrino_small, CLightFactory2, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(corrino_small, CHeavyFactory2, delay, tanksToBuildCorrinoSmall, AttackGroupSize[Difficulty], attackThresholdSize) +end diff --git a/mods/d2k/maps/harkonnen-09a/harkonnen09a.lua b/mods/d2k/maps/harkonnen-09a/harkonnen09a.lua new file mode 100644 index 0000000000..611981e31f --- /dev/null +++ b/mods/d2k/maps/harkonnen-09a/harkonnen09a.lua @@ -0,0 +1,338 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you under the terms of the GNU General Public License + as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. For more + information, see COPYING. +]] + +AtreidesMainBase = { AConYard1, AOutpost1, APalace, ARefinery1, ARefinery2, ARefinery3, AHeavyFactory1, ALightFactory1, AStarport, AHiTechFactory, AResearch, AGunt1, AGunt2, AGunt3, AGunt4, AGunt5, ARock1, ARock2, ARock3, ARock4, ABarracks1, ABarracks2, APower1, APower2, APower3, APower4, APower5, APower6, APower7, APower8, APower9, APower10, APower11, APower12, APower13, APower14 } +AtreidesSmall1Base = { AConYard2, ARefinery4, ABarracks3, AHeavyFactory2, ALightFactory2, ARepair, ARock5, ARock6, ARock7, ARock8, ARock9, APower15, APower16, APower17, APower18, APower19, APower20 } +AtreidesSmall2Base = { AOutpost2, ABarracks3, AGunt6, AGunt7, AGunt8, ARock10, APower21, APower22 } +CorrinoMainBase = { COutpost, CPalace, CRefinery1, CHeavyFactory1, CLightFactory1, CStarport, CResearch, CGunt1, CGunt2, CRock1, CRock2, CBarracks1, CPower1, CPower2, CPower3, CPower4, CPower5, CPower6, CPower7 } +CorrinoSmallBase = { CConYard, CRefinery2, CHeavyFactory2, CLightFactory2, CRock3, CRock4, CBarracks2, CPower8, CPower9, CPower10, CPower11 } + +AtreidesReinforcements = +{ + easy = + { + { "missile_tank", "trooper", "light_inf", "light_inf" }, + { "quad", "light_inf", "combat_tank_a"}, + { "light_inf", "trooper", "missile_tank" }, + { "light_inf", "light_inf", "siege_tank" } + }, + + normal = + { + { "missile_tank", "trooper", "trooper", "light_inf", "light_inf" }, + { "quad", "trike", "combat_tank_a"}, + { "trooper", "trooper", "missile_tank" }, + { "light_inf", "light_inf", "light_inf", "siege_tank" }, + { "combat_tank_a", "trike", "trike", "fremen" } + }, + + hard = + { + { "missile_tank", "trooper", "trooper", "trooper", "light_inf", "light_inf" }, + { "quad", "trike", "light_inf", "combat_tank_a"}, + { "light_inf", "trooper", "trooper", "missile_tank" }, + { "light_inf", "light_inf", "light_inf", "light_inf", "siege_tank" }, + { "combat_tank_a", "trike", "trike", "fremen", "fremen" }, + { "sonic_tank", "combat_tank_a", "combat_tank_a", "quad" } + } +} + +CorrinoStarportReinforcements = +{ + easy = + { + { "sardaukar", "sardaukar", "missile_tank" }, + { "trooper", "trooper", "siege_tank" }, + { "sardaukar", "sardaukar", "sardaukar", "trooper", "trooper", "light_inf", "light_inf" } + }, + + normal = + { + { "sardaukar", "sardaukar", "sardaukar", "missile_tank" }, + { "trooper", "trooper", "trooper", "siege_tank" }, + { "sardaukar", "sardaukar", "sardaukar", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf" } + }, + + hard = + { + { "sardaukar", "sardaukar", "sardaukar", "sardaukar", "missile_tank" }, + { "trooper", "trooper", "trooper", "trooper", "siege_tank" }, + { "sardaukar", "sardaukar", "sardaukar", "trooper", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf" } + } +} + +AtreidesAttackDelay = +{ + easy = DateTime.Minutes(3) + DateTime.Seconds(30), + normal = DateTime.Minutes(2) + DateTime.Seconds(30), + hard = DateTime.Minutes(1) + DateTime.Seconds(30) +} + +CorrinoStarportDelay = +{ + easy = DateTime.Minutes(10), + normal = DateTime.Minutes(8), + hard = DateTime.Minutes(6) +} + +AtreidesAttackWaves = +{ + easy = 4, + normal = 5, + hard = 6 +} + +FremenGroupSize = +{ + easy = 2, + normal = 4, + hard = 6 +} + +InitialAtreidesReinforcements = +{ + { "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "trooper", "trooper", "trooper", "combat_tank_a", "combat_tank_a" }, + { "combat_tank_a", "combat_tank_a", "quad", "quad", "trike" }, + { "trooper", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "combat_tank_a", "combat_tank_a" }, + { "combat_tank_a", "quad", "quad", "trike", "trike", "trike" } +} + +InitialCorrinoReinforcements = { "trooper", "trooper", "trooper", "trooper", "quad", "quad" } + +AtreidesPaths = +{ + { AtreidesEntry1.Location, AtreidesRally1.Location }, + { AtreidesEntry2.Location, AtreidesRally2.Location }, + { AtreidesEntry3.Location, AtreidesRally3.Location }, + { AtreidesEntry4.Location, AtreidesRally4.Location } +} + +InitialAtreidesPaths = +{ + { AtreidesEntry5.Location, AtreidesRally5.Location }, + { AtreidesEntry6.Location, AtreidesRally6.Location }, + { AtreidesEntry7.Location, AtreidesRally7.Location }, + { AtreidesEntry8.Location, AtreidesRally8.Location }, + { AtreidesEntry9.Location, AtreidesRally9.Location }, + { AtreidesEntry10.Location, AtreidesRally10.Location } +} + +InitialCorrinoPaths = +{ + { CorrinoEntry1.Location, CorrinoRally1.Location }, + { CorrinoEntry2.Location, CorrinoRally2.Location } +} + +HarkonnenReinforcements = { "combat_tank_h", "combat_tank_h", "siege_tank", "siege_tank", "missile_tank" } + +HarkonnenPath = { HarkonnenEntry.Location, HarkonnenRally.Location } + +SendStarportReinforcements = function() + Trigger.AfterDelay(CorrinoStarportDelay[Difficulty], function() + if CStarport.IsDead or CStarport.Owner ~= corrino_main then + return + end + + reinforcements = Utils.Random(CorrinoStarportReinforcements[Difficulty]) + + local units = Reinforcements.ReinforceWithTransport(corrino_main, "frigate", reinforcements, { CorrinoStarportEntry.Location, CStarport.Location + CVec.New(1, 1) }, { CorrinoStarportExit.Location })[2] + Utils.Do(units, function(unit) + unit.AttackMove(AtreidesAttackLocation) + IdleHunt(unit) + end) + + SendStarportReinforcements() + end) +end + +SendHarkonnenReinforcements = function(delay) + Trigger.AfterDelay(delay, function() + Reinforcements.ReinforceWithTransport(player, "carryall.reinforce", HarkonnenReinforcements, HarkonnenPath, { HarkonnenPath[1] }) + Trigger.AfterDelay(DateTime.Seconds(5), function() + Media.PlaySpeechNotification(player, "Reinforce") + end) + end) +end + +SendAirStrike = function() + if AHiTechFactory.IsDead or AHiTechFactory.Owner ~= atreides_main then + return + end + + local targets = Utils.Where(player.GetActors(), function(actor) + return + actor.HasProperty("Sell") and + actor.Type ~= "wall" and + actor.Type ~= "medium_gun_turret" and + actor.Type ~= "large_gun_turret" and + actor.Type ~= "wind_trap" + end) + + if #targets > 0 then + AHiTechFactory.SendAirstrike(Utils.Random(targets).CenterPosition, true, 0) + end + + Trigger.AfterDelay(DateTime.Minutes(5), SendAirStrike) +end + +BuildFremen = function() + if APalace.IsDead or APalace.Owner ~= atreides_main then + return + end + + APalace.Produce("fremen") + APalace.Produce("fremen") + + Trigger.AfterDelay(DateTime.Seconds(1), function() + IdleFremen = Utils.Where(atreides_main.GetActorsByType('fremen'), function(actor) return actor.IsIdle end) + + if #IdleFremen >= FremenGroupSize[Difficulty] then + SendFremen() + end + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds (30), BuildFremen) +end + +SendFremen = function() + Utils.Do(IdleFremen, function(freman) + freman.AttackMove(AtreidesAttackLocation) + IdleHunt(freman) + end) +end + +Tick = function() + if player.HasNoRequiredUnits() then + atreides_main.MarkCompletedObjective(KillHarkonnen1) + atreides_small_1.MarkCompletedObjective(KillHarkonnen2) + atreides_small_2.MarkCompletedObjective(KillHarkonnen3) + corrino_main.MarkCompletedObjective(KillHarkonnen4) + corrino_small.MarkCompletedObjective(KillHarkonnen5) + end + + if atreides_main.HasNoRequiredUnits() and atreides_small_1.HasNoRequiredUnits() and atreides_small_2.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillAtreides) then + Media.DisplayMessage("The Atreides have been annihilated!", "Mentat") + player.MarkCompletedObjective(KillAtreides) + end + + if corrino_main.HasNoRequiredUnits() and corrino_small.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillCorrino) then + Media.DisplayMessage("The Emperor has been annihilated!", "Mentat") + player.MarkCompletedObjective(KillCorrino) + end + + if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[atreides_main] then + local units = atreides_main.GetActorsByType("harvester") + + if #units > 0 then + LastHarvesterEaten[atreides_main] = false + ProtectHarvester(units[1], atreides_main, AttackGroupSize[Difficulty]) + end + end + + if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[atreides_small_1] then + local units = atreides_small_1.GetActorsByType("harvester") + + if #units > 0 then + LastHarvesterEaten[atreides_small_1] = false + ProtectHarvester(units[1], atreides_small_1, AttackGroupSize[Difficulty]) + end + end + + if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[corrino_main] then + local units = corrino_main.GetActorsByType("harvester") + + if #units > 0 then + LastHarvesterEaten[corrino_main] = false + ProtectHarvester(units[1], corrino_main, AttackGroupSize[Difficulty]) + end + end + + if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[corrino_small] then + local units = corrino_small.GetActorsByType("harvester") + + if #units > 0 then + LastHarvesterEaten[corrino_small] = false + ProtectHarvester(units[1], corrino_small, AttackGroupSize[Difficulty]) + end + end +end + +WorldLoaded = function() + atreides_main = Player.GetPlayer("Atreides Main Base") + atreides_small_1 = Player.GetPlayer("Atreides Small Base 1") + atreides_small_2 = Player.GetPlayer("Atreides Small Base 2") + corrino_main = Player.GetPlayer("Corrino Main Base") + corrino_small = Player.GetPlayer("Corrino Small Base") + player = Player.GetPlayer("Harkonnen") + + InitObjectives(player) + KillAtreides = player.AddPrimaryObjective("Destroy the Atreides.") + KillCorrino = player.AddPrimaryObjective("Destroy the Imperial Forces.") + KillHarkonnen1 = atreides_main.AddPrimaryObjective("Kill all Harkonnen units.") + KillHarkonnen2 = atreides_small_1.AddPrimaryObjective("Kill all Harkonnen units.") + KillHarkonnen3 = atreides_small_2.AddPrimaryObjective("Kill all Harkonnen units.") + KillHarkonnen4 = corrino_main.AddPrimaryObjective("Kill all Harkonnen units.") + KillHarkonnen5 = corrino_small.AddPrimaryObjective("Kill all Harkonnen units.") + + Camera.Position = HMCV.CenterPosition + AtreidesAttackLocation = HarkonnenRally.Location + + Trigger.AfterDelay(DateTime.Minutes(5), SendAirStrike) + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds (30), BuildFremen) + + Trigger.OnAllKilledOrCaptured(AtreidesMainBase, function() + Utils.Do(atreides_main.GetGroundAttackers(), IdleHunt) + end) + + Trigger.OnAllKilledOrCaptured(AtreidesSmall1Base, function() + Utils.Do(atreides_small_1.GetGroundAttackers(), IdleHunt) + end) + + Trigger.OnAllKilledOrCaptured(AtreidesSmall2Base, function() + Utils.Do(atreides_small_2.GetGroundAttackers(), IdleHunt) + end) + + Trigger.OnAllKilledOrCaptured(CorrinoMainBase, function() + Utils.Do(corrino_main.GetGroundAttackers(), IdleHunt) + end) + + Trigger.OnAllKilledOrCaptured(CorrinoSmallBase, function() + Utils.Do(corrino_small.GetGroundAttackers(), IdleHunt) + end) + + local path = function() return Utils.Random(AtreidesPaths) end + local waveCondition = function() return player.IsObjectiveCompleted(KillAtreides) end + local huntFunction = function(unit) + unit.AttackMove(AtreidesAttackLocation) + IdleHunt(unit) + end + SendCarryallReinforcements(atreides_main, 0, AtreidesAttackWaves[Difficulty], AtreidesAttackDelay[Difficulty], path, AtreidesReinforcements[Difficulty], waveCondition, huntFunction) + + SendStarportReinforcements() + + Actor.Create("upgrade.barracks", true, { Owner = atreides_main }) + Actor.Create("upgrade.light", true, { Owner = atreides_main }) + Actor.Create("upgrade.heavy", true, { Owner = atreides_main }) + Actor.Create("upgrade.hightech", true, { Owner = atreides_main }) + Actor.Create("upgrade.barracks", true, { Owner = atreides_small_1 }) + Actor.Create("upgrade.light", true, { Owner = atreides_small_1 }) + Actor.Create("upgrade.heavy", true, { Owner = atreides_small_1 }) + Actor.Create("upgrade.barracks", true, { Owner = atreides_small_2 }) + Actor.Create("upgrade.barracks", true, { Owner = corrino_main }) + Actor.Create("upgrade.light", true, { Owner = corrino_main }) + Actor.Create("upgrade.heavy", true, { Owner = corrino_main }) + Actor.Create("upgrade.barracks", true, { Owner = corrino_small }) + Actor.Create("upgrade.light", true, { Owner = corrino_small }) + Actor.Create("upgrade.heavy", true, { Owner = corrino_small }) + Trigger.AfterDelay(0, ActivateAI) + + SendHarkonnenReinforcements(DateTime.Minutes(2) + DateTime.Seconds(30)) +end diff --git a/mods/d2k/maps/harkonnen-09a/map.bin b/mods/d2k/maps/harkonnen-09a/map.bin new file mode 100644 index 0000000000..bdabf5cf58 Binary files /dev/null and b/mods/d2k/maps/harkonnen-09a/map.bin differ diff --git a/mods/d2k/maps/harkonnen-09a/map.png b/mods/d2k/maps/harkonnen-09a/map.png new file mode 100644 index 0000000000..2b4cffb655 Binary files /dev/null and b/mods/d2k/maps/harkonnen-09a/map.png differ diff --git a/mods/d2k/maps/harkonnen-09a/map.yaml b/mods/d2k/maps/harkonnen-09a/map.yaml new file mode 100644 index 0000000000..bbbce6ee34 --- /dev/null +++ b/mods/d2k/maps/harkonnen-09a/map.yaml @@ -0,0 +1,1041 @@ +MapFormat: 11 + +RequiresMod: d2k + +Title: Harkonnen 09a + +Author: Westwood Studios + +Tileset: ARRAKIS + +MapSize: 100,100 + +Bounds: 2,2,96,96 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Enemies: Harkonnen, Atreides Main Base, Atreides Small Base 1, Atreides Small Base 2, Corrino Main Base, Corrino Small Base + PlayerReference@Harkonnen: + Name: Harkonnen + Playable: True + LockFaction: True + Faction: harkonnen + LockColor: True + Color: FE0000 + Enemies: Atreides Main Base, Atreides Small Base 1, Atreides Small Base 2, Corrino Main Base, Corrino Small Base, Creeps + PlayerReference@Atreides Main Base: + Name: Atreides Main Base + LockFaction: True + Faction: atreides + LockColor: True + Color: 9191FF + Allies: Atreides Small Base 1, Atreides Small Base 2, Corrino Main Base, Corrino Small Base + Enemies: Harkonnen + PlayerReference@Atreides Small Base 1: + Name: Atreides Small Base 1 + LockFaction: True + Faction: atreides + LockColor: True + Color: 9191FF + Allies: Atreides Main Base, Atreides Small Base 2, Corrino Main Base, Corrino Small Base + Enemies: Harkonnen + PlayerReference@Atreides Small Base 2: + Name: Atreides Small Base 2 + LockFaction: True + Faction: atreides + LockColor: True + Color: 9191FF + Allies: Atreides Main Base, Atreides Small Base 1, Corrino Main Base, Corrino Small Base + Enemies: Harkonnen + PlayerReference@Corrino Main Base: + Name: Corrino Main Base + LockFaction: True + Faction: corrino + LockColor: True + Color: 7D00FE + Allies: Atreides Main Base, Atreides Small Base 1, Atreides Small Base 2, Corrino Small Base + Enemies: Harkonnen + PlayerReference@Corrino Small Base: + Name: Corrino Small Base + LockFaction: True + Faction: corrino + LockColor: True + Color: 7D00FE + Allies: Atreides Main Base, Atreides Small Base 1, Atreides Small Base 2, Corrino Main Base + Enemies: Harkonnen + +Actors: + Actor0: combat_tank_a + Location: 23,3 + Owner: Atreides Main Base + AGunt1: medium_gun_turret + Location: 24,3 + Owner: Atreides Main Base + Actor2: wall + Location: 25,3 + Owner: Atreides Main Base + Actor3: wall + Location: 26,3 + Owner: Atreides Main Base + Actor4: wall + Location: 27,3 + Owner: Atreides Main Base + APalace: palace + Location: 28,3 + Owner: Atreides Main Base + AConYard1: construction_yard + Location: 32,3 + Owner: Atreides Main Base + Actor7: wall + Location: 36,3 + Owner: Atreides Main Base + ABarracks1: barracks + Location: 38,3 + Owner: Atreides Main Base + APower1: wind_trap + Location: 40,3 + Owner: Atreides Main Base + APower2: wind_trap + Location: 42,3 + Owner: Atreides Main Base + APower3: wind_trap + Location: 44,3 + Owner: Atreides Main Base + APower4: wind_trap + Location: 46,3 + Owner: Atreides Main Base + Actor13: carryall + Location: 49,3 + Owner: Atreides Main Base + ARefinery1: refinery + Location: 50,3 + Owner: Atreides Main Base + Actor15: harvester + Location: 53,3 + Owner: Atreides Main Base + Actor16: light_inf + Location: 27,4 + Owner: Atreides Main Base + Actor17: wall + Location: 36,4 + Owner: Atreides Main Base + Actor18: combat_tank_a + Location: 23,5 + Owner: Atreides Main Base + ARock1: large_gun_turret + Location: 36,5 + Owner: Atreides Main Base + AGunt2: medium_gun_turret + Location: 24,6 + Owner: Atreides Main Base + Actor21: wall + Location: 25,6 + Owner: Atreides Main Base + Actor22: wall + Location: 26,6 + Owner: Atreides Main Base + APower5: wind_trap + Location: 38,6 + Owner: Atreides Main Base + AResearch: research_centre + Location: 48,6 + Owner: Atreides Main Base + Actor25: spicebloom.spawnpoint + Location: 11,7 + Owner: Neutral + Actor26: wall + Location: 26,7 + Owner: Atreides Main Base + APower6: wind_trap + Location: 29,7 + Owner: Atreides Main Base + APower7: wind_trap + Location: 32,7 + Owner: Atreides Main Base + APower8: wind_trap + Location: 40,7 + Owner: Atreides Main Base + APower9: wind_trap + Location: 42,7 + Owner: Atreides Main Base + APower10: wind_trap + Location: 44,7 + Owner: Atreides Main Base + APower11: wind_trap + Location: 46,7 + Owner: Atreides Main Base + Actor33: wall + Location: 26,8 + Owner: Atreides Main Base + Actor34: wall + Location: 27,8 + Owner: Atreides Main Base + AGunt3: medium_gun_turret + Location: 54,8 + Owner: Atreides Main Base + Actor36: wall + Location: 55,8 + Owner: Atreides Main Base + Actor37: wall + Location: 27,9 + Owner: Atreides Main Base + Actor38: wall + Location: 55,9 + Owner: Atreides Main Base + Actor39: wall + Location: 17,10 + Owner: Corrino Main Base + Actor40: wall + Location: 18,10 + Owner: Corrino Main Base + Actor41: wall + Location: 19,10 + Owner: Corrino Main Base + Actor42: wall + Location: 20,10 + Owner: Corrino Main Base + Actor43: wall + Location: 21,10 + Owner: Corrino Main Base + Actor44: wall + Location: 27,10 + Owner: Atreides Main Base + Actor45: carryall + Location: 49,10 + Owner: Atreides Main Base + ARefinery2: refinery + Location: 50,10 + Owner: Atreides Main Base + Actor47: wall + Location: 55,10 + Owner: Atreides Main Base + CPower1: wind_trap + Location: 2,11 + Owner: Corrino Main Base + CPower2: wind_trap + Location: 4,11 + Owner: Corrino Main Base + Actor50: wall + Location: 21,11 + Owner: Corrino Main Base + Actor51: wall + Location: 27,11 + Owner: Atreides Main Base + Actor52: wall + Location: 28,11 + Owner: Atreides Main Base + Actor53: wall + Location: 29,11 + Owner: Atreides Main Base + Actor54: wall + Location: 30,11 + Owner: Atreides Main Base + Actor55: wall + Location: 31,11 + Owner: Atreides Main Base + Actor56: wall + Location: 32,11 + Owner: Atreides Main Base + ARock2: large_gun_turret + Location: 33,11 + Owner: Atreides Main Base + Actor58: wall + Location: 55,11 + Owner: Atreides Main Base + CStarport: starport + Location: 17,12 + Owner: Corrino Main Base + Actor60: wall + Location: 21,12 + Owner: Corrino Main Base + Actor61: wall + Location: 30,12 + Owner: Atreides Main Base + AOutpost1: outpost + Location: 34,12 + Owner: Atreides Main Base + Actor63: wall + Location: 55,12 + Owner: Atreides Main Base + Actor64: wall + Location: 56,12 + Owner: Atreides Main Base + Actor65: wall + Location: 57,12 + Owner: Atreides Main Base + Actor66: wall + Location: 58,12 + Owner: Atreides Main Base + Actor67: wall + Location: 20,13 + Owner: Corrino Main Base + CRock1: large_gun_turret + Location: 21,13 + Owner: Corrino Main Base + Actor69: wall + Location: 30,13 + Owner: Atreides Main Base + Actor70: wall + Location: 58,13 + Owner: Atreides Main Base + CPower3: wind_trap + Location: 2,14 + Owner: Corrino Main Base + CPower4: wind_trap + Location: 4,14 + Owner: Corrino Main Base + Actor73: siege_tank + Location: 11,14 + Owner: Corrino Main Base + CBarracks1: barracks + Location: 13,14 + Owner: Corrino Main Base + Actor75: wall + Location: 20,14 + Owner: Corrino Main Base + Actor76: wall + Location: 30,14 + Owner: Atreides Main Base + AHiTechFactory: high_tech_factory + Location: 48,14 + Owner: Atreides Main Base + Actor78: harvester + Location: 52,14 + Owner: Atreides Main Base + APower12: wind_trap + Location: 53,14 + Owner: Atreides Main Base + Actor80: wall + Location: 58,14 + Owner: Atreides Main Base + CRefinery1: refinery + Location: 10,15 + Owner: Corrino Main Base + CGunt1: medium_gun_turret + Location: 20,15 + Owner: Corrino Main Base + Actor83: wall + Location: 30,15 + Owner: Atreides Main Base + Actor84: wall + Location: 31,15 + Owner: Atreides Main Base + Actor85: wall + Location: 32,15 + Owner: Atreides Main Base + Actor86: wall + Location: 56,15 + Owner: Atreides Main Base + Actor87: wall + Location: 57,15 + Owner: Atreides Main Base + Actor88: wall + Location: 58,15 + Owner: Atreides Main Base + CHeavyFactory1: heavy_factory + Location: 6,16 + Owner: Corrino Main Base + Actor90: combat_tank_h + Location: 9,16 + Owner: Corrino Main Base + Actor91: wall + Location: 32,16 + Owner: Atreides Main Base + APower13: wind_trap + Location: 37,16 + Owner: Atreides Main Base + Actor93: wall + Location: 56,16 + Owner: Atreides Main Base + Actor94: wall + Location: 32,17 + Owner: Atreides Main Base + Actor95: wall + Location: 33,17 + Owner: Atreides Main Base + AHeavyFactory1: heavy_factory + Location: 45,17 + Owner: Atreides Main Base + AStarport: starport + Location: 48,17 + Owner: Atreides Main Base + Actor98: wall + Location: 56,17 + Owner: Atreides Main Base + CResearch: research_centre + Location: 2,18 + Owner: Corrino Main Base + Actor100: harvester + Location: 10,18 + Owner: Corrino Main Base + Actor101: carryall + Location: 12,18 + Owner: Corrino Main Base + Actor102: missile_tank + Location: 13,18 + Owner: Corrino Main Base + Actor103: wall + Location: 33,18 + Owner: Atreides Main Base + ALightFactory1: light_factory + Location: 40,18 + Owner: Atreides Main Base + Actor105: wall + Location: 56,18 + Owner: Atreides Main Base + Actor106: combat_tank_h + Location: 15,19 + Owner: Corrino Main Base + Actor107: wall + Location: 33,19 + Owner: Atreides Main Base + Actor108: wall + Location: 56,19 + Owner: Atreides Main Base + CPower5: wind_trap + Location: 12,20 + Owner: Corrino Main Base + Actor110: wall + Location: 33,20 + Owner: Atreides Main Base + Actor111: harvester + Location: 44,20 + Owner: Atreides Main Base + Actor112: wall + Location: 56,20 + Owner: Atreides Main Base + COutpost: outpost + Location: 9,21 + Owner: Corrino Main Base + Actor114: wall + Location: 33,21 + Owner: Atreides Main Base + Actor115: wall + Location: 34,21 + Owner: Atreides Main Base + Actor116: wall + Location: 35,21 + Owner: Atreides Main Base + Actor117: light_inf + Location: 46,21 + Owner: Atreides Main Base + APower14: wind_trap + Location: 53,21 + Owner: Atreides Main Base + Actor119: wall + Location: 56,21 + Owner: Atreides Main Base + CLightFactory1: light_factory + Location: 2,22 + Owner: Corrino Main Base + Actor121: wall + Location: 35,22 + Owner: Atreides Main Base + Actor122: wall + Location: 36,22 + Owner: Atreides Main Base + Actor123: wall + Location: 37,22 + Owner: Atreides Main Base + Actor124: wall + Location: 38,22 + Owner: Atreides Main Base + Actor125: wall + Location: 39,22 + Owner: Atreides Main Base + ARefinery3: refinery + Location: 44,22 + Owner: Atreides Main Base + ABarracks2: barracks + Location: 48,22 + Owner: Atreides Main Base + Actor128: wall + Location: 56,22 + Owner: Atreides Main Base + Actor129: wall + Location: 39,23 + Owner: Atreides Main Base + Actor130: wall + Location: 40,23 + Owner: Atreides Main Base + Actor131: wall + Location: 41,23 + Owner: Atreides Main Base + Actor132: wall + Location: 56,23 + Owner: Atreides Main Base + CPower6: wind_trap + Location: 8,24 + Owner: Corrino Main Base + CPower7: wind_trap + Location: 10,24 + Owner: Corrino Main Base + Actor135: wall + Location: 41,24 + Owner: Atreides Main Base + Actor136: wall + Location: 56,24 + Owner: Atreides Main Base + Actor137: wall + Location: 2,25 + Owner: Corrino Main Base + Actor138: wall + Location: 3,25 + Owner: Corrino Main Base + Actor139: wall + Location: 4,25 + Owner: Corrino Main Base + Actor140: wall + Location: 5,25 + Owner: Corrino Main Base + CGunt2: medium_gun_turret + Location: 6,25 + Owner: Corrino Main Base + Actor142: wall + Location: 41,25 + Owner: Atreides Main Base + Actor143: wall + Location: 54,25 + Owner: Atreides Main Base + Actor144: wall + Location: 55,25 + Owner: Atreides Main Base + Actor145: wall + Location: 56,25 + Owner: Atreides Main Base + Actor146: wall + Location: 41,26 + Owner: Atreides Main Base + Actor147: wall + Location: 42,26 + Owner: Atreides Main Base + Actor148: wall + Location: 43,26 + Owner: Atreides Main Base + Actor149: wall + Location: 44,26 + Owner: Atreides Main Base + Actor150: wall + Location: 45,26 + Owner: Atreides Main Base + Actor151: wall + Location: 46,26 + Owner: Atreides Main Base + Actor152: wall + Location: 47,26 + Owner: Atreides Main Base + Actor153: wall + Location: 48,26 + Owner: Atreides Main Base + Actor154: wall + Location: 54,26 + Owner: Atreides Main Base + Actor155: sardaukar + Location: 5,27 + Owner: Corrino Main Base + ARock3: large_gun_turret + Location: 48,27 + Owner: Atreides Main Base + Actor157: wall + Location: 49,27 + Owner: Atreides Main Base + Actor158: wall + Location: 53,27 + Owner: Atreides Main Base + ARock4: large_gun_turret + Location: 54,27 + Owner: Atreides Main Base + CPalace: palace + Location: 2,28 + Owner: Corrino Main Base + Actor161: wall + Location: 49,28 + Owner: Atreides Main Base + Actor162: wall + Location: 53,28 + Owner: Atreides Main Base + Actor163: wall + Location: 22,29 + Owner: Atreides Small Base 2 + Actor164: wall + Location: 23,29 + Owner: Atreides Small Base 2 + Actor165: wall + Location: 24,29 + Owner: Atreides Small Base 2 + Actor166: wall + Location: 25,29 + Owner: Atreides Small Base 2 + AGunt6: medium_gun_turret + Location: 26,29 + Owner: Atreides Small Base 2 + AGunt4: medium_gun_turret + Location: 49,29 + Owner: Atreides Main Base + AGunt5: medium_gun_turret + Location: 53,29 + Owner: Atreides Main Base + Actor170: wall + Location: 5,30 + Owner: Corrino Main Base + Actor171: wall + Location: 22,30 + Owner: Atreides Small Base 2 + ABarracks4: barracks + Location: 23,30 + Owner: Atreides Small Base 2 + APower22: wind_trap + Location: 25,30 + Owner: Atreides Small Base 2 + Actor174: wall + Location: 4,31 + Owner: Corrino Main Base + CRock2: large_gun_turret + Location: 5,31 + Owner: Corrino Main Base + Actor176: wall + Location: 21,31 + Owner: Atreides Small Base 2 + Actor177: wall + Location: 22,31 + Owner: Atreides Small Base 2 + Actor178: wall + Location: 81,31 + Owner: Corrino Small Base + AGunt7: medium_gun_turret + Location: 21,32 + Owner: Atreides Small Base 2 + Actor180: wall + Location: 81,32 + Owner: Corrino Small Base + CHeavyFactory2: heavy_factory + Location: 92,32 + Owner: Corrino Small Base + CPower8: wind_trap + Location: 96,32 + Owner: Corrino Small Base + APower23: wind_trap + Location: 19,33 + Owner: Atreides Small Base 2 + AGunt8: medium_gun_turret + Location: 29,33 + Owner: Atreides Small Base 2 + Actor185: wall + Location: 81,33 + Owner: Corrino Small Base + CBarracks2: barracks + Location: 88,33 + Owner: Corrino Small Base + CPower9: wind_trap + Location: 90,33 + Owner: Corrino Small Base + AOutpost2: outpost + Location: 26,34 + Owner: Atreides Small Base 2 + Actor189: wall + Location: 29,34 + Owner: Atreides Small Base 2 + CRock3: large_gun_turret + Location: 81,34 + Owner: Corrino Small Base + Actor191: wall + Location: 82,34 + Owner: Corrino Small Base + Actor192: wall + Location: 83,34 + Owner: Corrino Small Base + Actor193: wall + Location: 84,34 + Owner: Corrino Small Base + Actor194: wall + Location: 85,34 + Owner: Corrino Small Base + Actor195: wall + Location: 86,34 + Owner: Corrino Small Base + Actor196: wall + Location: 87,34 + Owner: Corrino Small Base + Actor197: wall + Location: 29,35 + Owner: Atreides Small Base 2 + Actor198: wall + Location: 23,36 + Owner: Atreides Small Base 2 + Actor199: wall + Location: 24,36 + Owner: Atreides Small Base 2 + ARock10: large_gun_turret + Location: 25,36 + Owner: Atreides Small Base 2 + Actor201: wall + Location: 29,36 + Owner: Atreides Small Base 2 + CConYard: construction_yard + Location: 95,36 + Owner: Corrino Small Base + Actor203: wall + Location: 24,37 + Owner: Atreides Small Base 2 + Actor204: wall + Location: 25,37 + Owner: Atreides Small Base 2 + Actor205: wall + Location: 26,37 + Owner: Atreides Small Base 2 + Actor206: wall + Location: 27,37 + Owner: Atreides Small Base 2 + Actor207: wall + Location: 28,37 + Owner: Atreides Small Base 2 + Actor208: wall + Location: 29,37 + Owner: Atreides Small Base 2 + Actor209: spicebloom.spawnpoint + Location: 39,37 + Owner: Neutral + CRefinery2: refinery + Location: 90,37 + Owner: Corrino Small Base + Actor211: carryall + Location: 93,37 + Owner: Corrino Small Base + Actor212: harvester + Location: 88,38 + Owner: Corrino Small Base + CRock4: large_gun_turret + Location: 83,39 + Owner: Corrino Small Base + Actor214: wall + Location: 84,39 + Owner: Corrino Small Base + Actor215: wall + Location: 85,39 + Owner: Corrino Small Base + Actor216: wall + Location: 86,39 + Owner: Corrino Small Base + Actor217: wall + Location: 87,39 + Owner: Corrino Small Base + Actor218: wormspawner + Location: 51,40 + Owner: Creeps + Actor219: wall + Location: 83,40 + Owner: Corrino Small Base + CPower10: wind_trap + Location: 87,40 + Owner: Corrino Small Base + CPower11: wind_trap + Location: 96,40 + Owner: Corrino Small Base + Actor222: wall + Location: 83,41 + Owner: Corrino Small Base + CLightFactory2: light_factory + Location: 92,41 + Owner: Corrino Small Base + Actor224: wall + Location: 83,42 + Owner: Corrino Small Base + Actor225: spicebloom.spawnpoint + Location: 5,44 + Owner: Neutral + Actor226: spicebloom.spawnpoint + Location: 57,48 + Owner: Neutral + Actor227: spicebloom.spawnpoint + Location: 82,52 + Owner: Neutral + ALightFactory2: light_factory + Location: 34,53 + Owner: Atreides Small Base 1 + Actor229: wall + Location: 42,53 + Owner: Atreides Small Base 1 + APower15: wind_trap + Location: 38,54 + Owner: Atreides Small Base 1 + Actor231: wall + Location: 42,54 + Owner: Atreides Small Base 1 + ARock5: large_gun_turret + Location: 43,54 + Owner: Atreides Small Base 1 + Actor233: wall + Location: 43,55 + Owner: Atreides Small Base 1 + Actor234: wall + Location: 43,56 + Owner: Atreides Small Base 1 + Actor235: spicebloom.spawnpoint + Location: 18,57 + Owner: Neutral + Actor236: wall + Location: 43,57 + Owner: Atreides Small Base 1 + ARefinery4: refinery + Location: 24,58 + Owner: Atreides Small Base 1 + APower16: wind_trap + Location: 30,58 + Owner: Atreides Small Base 1 + AConYard2: construction_yard + Location: 33,58 + Owner: Atreides Small Base 1 + ARepair: repair_pad + Location: 37,58 + Owner: Atreides Small Base 1 + APower17: wind_trap + Location: 41,58 + Owner: Atreides Small Base 1 + Actor242: wall + Location: 43,58 + Owner: Atreides Small Base 1 + APower18: wind_trap + Location: 28,59 + Owner: Atreides Small Base 1 + Actor244: wall + Location: 43,59 + Owner: Atreides Small Base 1 + Actor245: wall + Location: 44,59 + Owner: Atreides Small Base 1 + Actor246: wall + Location: 45,59 + Owner: Atreides Small Base 1 + Actor247: wall + Location: 46,59 + Owner: Atreides Small Base 1 + Actor248: wall + Location: 47,59 + Owner: Atreides Small Base 1 + Actor249: harvester + Location: 23,60 + Owner: Atreides Small Base 1 + Actor250: wall + Location: 47,60 + Owner: Atreides Small Base 1 + Actor251: spicebloom.spawnpoint + Location: 14,61 + Owner: Neutral + Actor252: wall + Location: 47,61 + Owner: Atreides Small Base 1 + ARock6: large_gun_turret + Location: 47,62 + Owner: Atreides Small Base 1 + AHeavyFactory2: heavy_factory + Location: 36,63 + Owner: Atreides Small Base 1 + APower19: wind_trap + Location: 33,64 + Owner: Atreides Small Base 1 + Actor256: spicebloom.spawnpoint + Location: 20,65 + Owner: Neutral + Actor257: spicebloom.spawnpoint + Location: 68,65 + Owner: Neutral + APower20: wind_trap + Location: 40,66 + Owner: Atreides Small Base 1 + ARock7: large_gun_turret + Location: 44,66 + Owner: Atreides Small Base 1 + APower21: wind_trap + Location: 38,67 + Owner: Atreides Small Base 1 + ARock8: large_gun_turret + Location: 44,67 + Owner: Atreides Small Base 1 + ABarracks3: barracks + Location: 36,68 + Owner: Atreides Small Base 1 + Actor263: wall + Location: 44,68 + Owner: Atreides Small Base 1 + Actor264: wall + Location: 43,69 + Owner: Atreides Small Base 1 + Actor265: wall + Location: 44,69 + Owner: Atreides Small Base 1 + Actor266: wall + Location: 42,70 + Owner: Atreides Small Base 1 + Actor267: wall + Location: 43,70 + Owner: Atreides Small Base 1 + Actor268: wall + Location: 42,71 + Owner: Atreides Small Base 1 + Actor269: wall + Location: 40,72 + Owner: Atreides Small Base 1 + Actor270: wall + Location: 41,72 + Owner: Atreides Small Base 1 + ARock9: large_gun_turret + Location: 42,72 + Owner: Atreides Small Base 1 + Actor272: wall + Location: 40,73 + Owner: Atreides Small Base 1 + Actor273: light_inf + Location: 78,77 + Owner: Harkonnen + Actor274: missile_tank + Location: 81,77 + Owner: Harkonnen + Actor275: trike + Location: 76,78 + Owner: Harkonnen + Actor276: siege_tank + Location: 84,78 + Owner: Harkonnen + Actor277: light_inf + Location: 75,79 + Owner: Harkonnen + Actor278: combat_tank_h + Location: 77,79 + Owner: Harkonnen + HMCV: mcv + Location: 79,79 + Owner: Harkonnen + Actor280: combat_tank_h + Location: 79,80 + Owner: Harkonnen + Actor281: light_inf + Location: 75,81 + Owner: Harkonnen + Actor282: light_inf + Location: 76,82 + Owner: Harkonnen + Actor283: siege_tank + Location: 78,83 + Owner: Harkonnen + Actor284: trooper + Location: 81,83 + Owner: Harkonnen + Actor285: spicebloom.spawnpoint + Location: 48,86 + Owner: Neutral + Actor286: spicebloom.spawnpoint + Location: 66,86 + Owner: Neutral + Actor287: spicebloom.spawnpoint + Location: 95,92 + Owner: Neutral + Actor288: spicebloom.spawnpoint + Location: 73,94 + Owner: Neutral + Actor289: spicebloom.spawnpoint + Location: 48,95 + Owner: Neutral + Actor290: wall + Owner: Atreides Main Base + Location: 27,2 + Actor291: wall + Owner: Atreides Main Base + Location: 36,2 + HarkonnenRally: waypoint + Owner: Neutral + Location: 86,75 + HarkonnenEntry: waypoint + Owner: Neutral + Location: 97,75 + AtreidesRally1: waypoint + Owner: Neutral + Location: 96,87 + AtreidesEntry1: waypoint + Owner: Neutral + Location: 97,87 + AtreidesRally2: waypoint + Owner: Neutral + Location: 76,93 + AtreidesEntry2: waypoint + Owner: Neutral + Location: 76,97 + AtreidesRally3: waypoint + Owner: Neutral + Location: 63,65 + AtreidesEntry3: waypoint + Owner: Neutral + Location: 97,65 + AtreidesRally4: waypoint + Owner: Neutral + Location: 92,55 + AtreidesEntry4: waypoint + Owner: Neutral + Location: 97,55 + CorrinoRally1: waypoint + Owner: Neutral + Location: 6,15 + CorrinoEntry1: waypoint + Owner: Neutral + Location: 2,16 + CorrinoRally2: waypoint + Owner: Neutral + Location: 84,37 + CorrinoEntry2: waypoint + Owner: Neutral + Location: 97,38 + AtreidesRally7: waypoint + Owner: Neutral + Location: 39,11 + AtreidesEntry7: waypoint + Owner: Neutral + Location: 35,2 + AtreidesRally5: waypoint + Owner: Neutral + Location: 43,11 + AtreidesEntry5: waypoint + Owner: Neutral + Location: 37,2 + AtreidesRally6: waypoint + Owner: Neutral + Location: 49,11 + AtreidesEntry6: waypoint + Owner: Neutral + Location: 49,2 + AtreidesRally9: waypoint + Owner: Neutral + Location: 33,62 + AtreidesEntry9: waypoint + Owner: Neutral + Location: 2,70 + AtreidesRally8: waypoint + Owner: Neutral + Location: 40,63 + AtreidesEntry8: waypoint + Owner: Neutral + Location: 2,49 + AtreidesRally10: waypoint + Owner: Neutral + Location: 22,34 + AtreidesEntry10: waypoint + Owner: Neutral + Location: 2,40 + CorrinoStarportEntry: waypoint + Owner: Neutral + Location: 97,13 + CorrinoStarportExit: waypoint + Owner: Neutral + Location: 2,13 + +Rules: d2k|rules/campaign-rules.yaml, d2k|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/d2k/maps/harkonnen-09a/rules.yaml b/mods/d2k/maps/harkonnen-09a/rules.yaml new file mode 100644 index 0000000000..385bfe1ee9 --- /dev/null +++ b/mods/d2k/maps/harkonnen-09a/rules.yaml @@ -0,0 +1,70 @@ +Player: + PlayerResources: + DefaultCash: 7000 + +World: + LuaScript: + Scripts: campaign-global.lua, harkonnen09a.lua, harkonnen09a-AI.lua + MissionData: + Briefing: Only the Atreides and Imperial forces now remain. The Sardaukar, still scattered from their long march from the North, cannot mass their forces to attack. Only the destruction of the Emperor's base encampment will stop the flow of Imperial forces.\n\nOnce this has been accomplished, turn on the Atreides and annihilate them. Claim Arrakis for House Harkonnen! + BriefingVideo: H_BR09_E.VQA + MapOptions: + TechLevel: unrestricted + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Atreides Main Base: 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128 + Atreides Small Base 1: 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128 + Atreides Small Base 2: 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128 + Corrino Main Base: 191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176 + Corrino Small Base: 191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176 + +carryall.reinforce: + Cargo: + MaxWeight: 10 + +frigate: + Aircraft: + LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune, Concrete + VTOL: true # The frigate would teleport to land otherwise + +starport: + ProvidesPrerequisite@harkonnen: + Prerequisite: starport.harkonnen + Factions: harkonnen, corrino + +light_factory: + ProvidesPrerequisite@trikes: + Prerequisite: light.regulartrikes + Factions: atreides, harkonnen, corrino + +heavy_factory: + ProvidesPrerequisite@harkonnen: + Prerequisite: heavy.harkonnen + Factions: harkonnen, corrino + +palace: + ProvidesPrerequisite@sardaukar: + Prerequisite: palace.sardaukar + Factions: corrino + +sardaukar: + Buildable: + Prerequisites: barracks, ~palace.sardaukar + +grenadier: + Buildable: + Prerequisites: ~disabled + +thumper: + Buildable: + Prerequisites: ~disabled diff --git a/mods/d2k/missions.yaml b/mods/d2k/missions.yaml index 547f5a954e..0e41d095c9 100644 --- a/mods/d2k/missions.yaml +++ b/mods/d2k/missions.yaml @@ -29,3 +29,4 @@ Harkonnen Campaign: ./mods/d2k/maps/harkonnen-06a ./mods/d2k/maps/harkonnen-06b ./mods/d2k/maps/harkonnen-07 + ./mods/d2k/maps/harkonnen-09a