diff --git a/OpenRA.sln b/OpenRA.sln index a5cb04f88d..e46cf9f54b 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -127,6 +127,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dune 2000 Lua scripts", "Du mods\d2k\maps\harkonnen-03b\harkonnen03b.lua = mods\d2k\maps\harkonnen-03b\harkonnen03b.lua mods\d2k\maps\harkonnen-04\harkonnen04-AI.lua = mods\d2k\maps\harkonnen-04\harkonnen04-AI.lua mods\d2k\maps\harkonnen-04\harkonnen04.lua = mods\d2k\maps\harkonnen-04\harkonnen04.lua + mods\d2k\maps\harkonnen-05\harkonnen05-AI.lua = mods\d2k\maps\harkonnen-05\harkonnen05-AI.lua + mods\d2k\maps\harkonnen-05\harkonnen05.lua = mods\d2k\maps\harkonnen-05\harkonnen05.lua mods\d2k\maps\harkonnen-06a\harkonnen06a-AI.lua = mods\d2k\maps\harkonnen-06a\harkonnen06a-AI.lua mods\d2k\maps\harkonnen-06a\harkonnen06a.lua = mods\d2k\maps\harkonnen-06a\harkonnen06a.lua mods\d2k\maps\harkonnen-06b\harkonnen06b-AI.lua = mods\d2k\maps\harkonnen-06b\harkonnen06b-AI.lua diff --git a/mods/d2k/maps/harkonnen-05/harkonnen05-AI.lua b/mods/d2k/maps/harkonnen-05/harkonnen05-AI.lua new file mode 100644 index 0000000000..22b6d7a52b --- /dev/null +++ b/mods/d2k/maps/harkonnen-05/harkonnen05-AI.lua @@ -0,0 +1,49 @@ +--[[ + 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) } +} + +OrdosInfantryTypes = { "light_inf", "light_inf", "light_inf", "trooper", "trooper" } +OrdosVehicleTypes = { "raider", "raider", "quad" } +OrdosTankType = { "combat_tank_o" } + +ActivateAI = function() + IdlingUnits[ordos_main] = Reinforcements.Reinforce(ordos_main, InitialOrdosReinforcements[1], InitialOrdosPaths[1]), Reinforcements.Reinforce(ordos_main, InitialOrdosReinforcements[2], InitialOrdosPaths[2]) + IdlingUnits[ordos_small] = Reinforcements.Reinforce(ordos_small, InitialOrdosReinforcements[1], InitialOrdosPaths[3]) + IdlingUnits[corrino] = { CSaraukar1, CSaraukar2, CSaraukar3, CSaraukar4, CSaraukar5 } + + DefendAndRepairBase(ordos_main, OrdosMainBase, 0.75, AttackGroupSize[Difficulty]) + DefendAndRepairBase(ordos_small, OrdosSmallBase, 0.75, AttackGroupSize[Difficulty]) + DefendAndRepairBase(corrino, CorrinoBase, 0.75, AttackGroupSize[Difficulty]) + + local delay = function() return Utils.RandomInteger(AttackDelays[Difficulty][1], AttackDelays[Difficulty][2] + 1) end + local infantryToBuild = function() return { Utils.Random(OrdosInfantryTypes) } end + local vehilcesToBuild = function() return { Utils.Random(OrdosVehicleTypes) } end + local tanksToBuild = function() return OrdosTankType end + local attackThresholdSize = AttackGroupSize[Difficulty] * 2.5 + + ProduceUnits(ordos_main, OBarracks1, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(ordos_main, OLightFactory1, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(ordos_main, OHeavyFactory, delay, tanksToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + + ProduceUnits(ordos_small, OBarracks3, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize) + ProduceUnits(ordos_small, OLightFactory2, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize) +end diff --git a/mods/d2k/maps/harkonnen-05/harkonnen05.lua b/mods/d2k/maps/harkonnen-05/harkonnen05.lua new file mode 100644 index 0000000000..3ae445e2c0 --- /dev/null +++ b/mods/d2k/maps/harkonnen-05/harkonnen05.lua @@ -0,0 +1,285 @@ +--[[ + 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. +]] + +OrdosMainBase = { OConYard, OOutpost, ORefinery1, ORefinery2, OHeavyFactory, OLightFactory1, OHiTechFactory, OGunt1, OGunt2, OGunt3, OGunt4, OBarracks1, OBarracks2, OPower1, OPower2, OPower3, OPower4, OPower5, OPower6, OPower7, OPower8, OPower9 } +OrdosSmallBase = { ORefinery3, OBarracks3, OLightFactory2, OGunt5, OGunt6, OPower10, OPower11, OPower12, OPower13, OSilo } +CorrinoBase = { CStarport, CPower1, CPower2 } + +BaseAreaTriggers = +{ + { CPos.New(68, 70), CPos.New(69, 70), CPos.New(70, 70), CPos.New(71, 70) }, + { CPos.New(39, 78), CPos.New(39, 79), CPos.New(39, 80), CPos.New(39, 81), CPos.New(43, 68), CPos.New(44, 68), CPos.New(45, 68), CPos.New(46, 68), CPos.New(47, 68), CPos.New(48, 68), CPos.New(49, 68), CPos.New(50, 68), CPos.New(51, 68), CPos.New(52, 68), CPos.New(53, 68), CPos.New(54, 68), CPos.New(55, 68), CPos.New(56, 68), CPos.New(57, 68), CPos.New(58, 68), CPos.New(59, 68), CPos.New(60, 68) } +} + +OrdosReinforcements = +{ + easy = + { + { "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper" }, + { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "combat_tank_o", "quad" }, + { "combat_tank_o", "raider", "light_inf", "light_inf" }, + { "siege_tank", "combat_tank_o", "quad" } + }, + + normal = + { + { "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper" }, + { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "combat_tank_o", "combat_tank_o" }, + { "combat_tank_o", "raider", "raider", "light_inf" }, + { "siege_tank", "combat_tank_o", "quad", "quad" }, + { "combat_tank_o", "combat_tank_o", "combat_tank_o", "combat_tank_o" } + }, + + hard = + { + { "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper" }, + { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "combat_tank_o", "combat_tank_o", "quad" }, + { "combat_tank_o", "raider", "raider", "raider" }, + { "siege_tank", "combat_tank_o", "combat_tank_o", "quad" }, + { "combat_tank_o", "combat_tank_o", "combat_tank_o", "combat_tank_o", "combat_tank_o" }, + { "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "quad", "quad", "raider" } + } +} + +CorrinoStarportReinforcements = +{ + easy = { "trooper", "trooper", "quad", "quad", "trike", "trike", "missile_tank", "missile_tank" }, + normal = { "trooper", "trooper", "trooper", "quad", "quad", "trike", "trike", "missile_tank", "missile_tank" }, + hard = { "trooper", "trooper", "trooper", "quad", "quad", "quad", "trike", "trike", "trike", "missile_tank", "missile_tank" } +} + +OrdosAttackDelay = +{ + easy = DateTime.Minutes(3), + normal = DateTime.Minutes(2) + DateTime.Seconds(20), + hard = DateTime.Minutes(1) +} + +CorrinoStarportDelay = +{ + easy = DateTime.Minutes(3), + normal = DateTime.Minutes(2) + DateTime.Seconds(30), + hard = DateTime.Minutes(2) +} + +OrdosAttackWaves = +{ + easy = 6, + normal = 7, + hard = 8 +} + +OrdosHunters = +{ + { "combat_tank_o", "combat_tank_o" }, + { "missile_tank" } +} + +InitialOrdosReinforcements = +{ + { "trooper", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + { "combat_tank_o", "combat_tank_o", "quad", "quad", "raider", "raider" } +} + +OrdosPaths = +{ + { OrdosEntry1.Location, OrdosRally1.Location }, + { OrdosEntry2.Location, OrdosRally2.Location }, + { OrdosEntry3.Location, OrdosRally3.Location }, + { OrdosEntry4.Location, OrdosRally4.Location }, + { OrdosEntry5.Location, OrdosRally5.Location }, + { OrdosEntry6.Location, OrdosRally6.Location }, + { OrdosEntry7.Location, OrdosRally7.Location } +} + +InitialOrdosPaths = +{ + { OrdosEntry8.Location, OrdosRally8.Location }, + { OrdosEntry9.Location, OrdosRally9.Location }, + { OrdosEntry10.Location, OrdosRally10.Location } +} + +OrdosHunterPaths = +{ + { OrdosEntry11.Location, OrdosEntry11.Location }, + { OrdosEntry12.Location, OrdosEntry12.Location }, +} + +HarkonnenReinforcements = +{ + { "trooper", "trooper", "trooper", "trooper" }, + { "combat_tank_h", "combat_tank_h", "combat_tank_h", "combat_tank_h" } +} + +HarkonnenPaths = +{ + { HarkonnenEntry1.Location, HarkonnenRally1.Location }, + { HarkonnenEntry2.Location, HarkonnenRally2.Location } +} + +SendStarportReinforcements = function() + Trigger.AfterDelay(CorrinoStarportDelay[Difficulty], function() + if CStarport.IsDead or CStarport.Owner ~= corrino then + return + end + + local units = Reinforcements.ReinforceWithTransport(corrino, "frigate", CorrinoStarportReinforcements[Difficulty], { CorrinoStarportEntry.Location, CStarport.Location + CVec.New(1, 1) }, { CorrinoStarportExit.Location })[2] + Utils.Do(units, function(unit) + unit.AttackMove(OrdosAttackLocation) + IdleHunt(unit) + end) + + SendStarportReinforcements() + + if player.IsObjectiveFailed(GuardOutpost) then + return + end + + Media.DisplayMessage("Imperial ships penetrating defense grid!", "Mentat") + end) +end + +SendHarkonnenReinforcements = function(delay, number) + Trigger.AfterDelay(delay, function() + Reinforcements.ReinforceWithTransport(player, "carryall.reinforce", HarkonnenReinforcements[number], HarkonnenPaths[number], { HarkonnenPaths[number][1] }) + Trigger.AfterDelay(DateTime.Seconds(5), function() + Media.PlaySpeechNotification(player, "Reinforce") + end) + end) +end + +OrdosReinforcementNotification = function(currentWave, totalWaves) + Trigger.AfterDelay(OrdosAttackDelay[Difficulty], function() + if player.IsObjectiveFailed(GuardOutpost) or player.IsObjectiveCompleted(KillOrdos) then + return + end + + currentWave = currentWave + 1 + if currentWave > totalWaves then + return + end + + Media.DisplayMessage("Enemy carryall drop detected!", "Mentat") + + OrdosReinforcementNotification(currentWave, totalWaves) + end) +end + + +Tick = function() + if player.HasNoRequiredUnits() then + ordos_main.MarkCompletedObjective(KillHarkonnen1) + ordos_small.MarkCompletedObjective(KillHarkonnen2) + corrino.MarkCompletedObjective(KillHarkonnen3) + end + + if ordos_main.HasNoRequiredUnits() and ordos_small.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillOrdos) then + Media.DisplayMessage("The Ordos have been annihilated!", "Mentat") + player.MarkCompletedObjective(KillOrdos) + end + + if corrino.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillCorrino) then + Media.DisplayMessage("The Emperor has been annihilated!", "Mentat") + player.MarkCompletedObjective(KillCorrino) + end + + if player.IsObjectiveCompleted(KillOrdos) and player.IsObjectiveCompleted(KillCorrino) and not player.IsObjectiveCompleted(GuardOutpost) then + player.MarkCompletedObjective(GuardOutpost) + end + + if (HOutpost.IsDead or HOutpost.Owner ~= player) and not player.IsObjectiveFailed(GuardOutpost) then + player.MarkFailedObjective(GuardOutpost) + end + + if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[ordos_main] then + local units = ordos_main.GetActorsByType("harvester") + + if #units > 0 then + LastHarvesterEaten[ordos_main] = false + ProtectHarvester(units[1], ordos_main, AttackGroupSize[Difficulty]) + end + end + + if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[ordos_small] then + local units = ordos_small.GetActorsByType("harvester") + + if #units > 0 then + LastHarvesterEaten[ordos_small] = false + ProtectHarvester(units[1], ordos_small, AttackGroupSize[Difficulty]) + end + end +end + +WorldLoaded = function() + ordos_main = Player.GetPlayer("Ordos Main Base") + ordos_small = Player.GetPlayer("Ordos Small Base") + corrino = Player.GetPlayer("Corrino") + player = Player.GetPlayer("Harkonnen") + + InitObjectives(player) + KillOrdos = player.AddPrimaryObjective("Destroy the Ordos.") + KillCorrino = player.AddPrimaryObjective("Destroy the Imperial Forces.") + GuardOutpost = player.AddSecondaryObjective("Keep the Modified Outpost intact.") + KillHarkonnen1 = ordos_main.AddPrimaryObjective("Kill all Harkonnen units.") + KillHarkonnen2 = ordos_small.AddPrimaryObjective("Kill all Harkonnen units.") + KillHarkonnen3 = corrino.AddPrimaryObjective("Kill all Harkonnen units.") + + HOutpost.GrantCondition("modified") + + Camera.Position = HConYard.CenterPosition + OrdosAttackLocation = HConYard.Location + + Trigger.OnAllKilledOrCaptured(OrdosMainBase, function() + Utils.Do(ordos_main.GetGroundAttackers(), IdleHunt) + end) + + Trigger.OnAllKilledOrCaptured(OrdosSmallBase, function() + Utils.Do(ordos_small.GetGroundAttackers(), IdleHunt) + end) + + Trigger.OnAllKilledOrCaptured(CorrinoBase, function() + Utils.Do(corrino.GetGroundAttackers(), IdleHunt) + end) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + Media.DisplayMessage("Protect the Outpost from attack.", "Mentat") + end) + + local path = function() return Utils.Random(OrdosPaths) end + local waveCondition = function() return player.IsObjectiveCompleted(KillOrdos) end + local huntFunction = function(unit) + unit.AttackMove(OrdosAttackLocation) + IdleHunt(unit) + end + SendCarryallReinforcements(ordos_main, 0, OrdosAttackWaves[Difficulty], OrdosAttackDelay[Difficulty], path, OrdosReinforcements[Difficulty], waveCondition, huntFunction) + OrdosReinforcementNotification(0, OrdosAttackWaves[Difficulty]) + + SendStarportReinforcements() + + Actor.Create("upgrade.barracks", true, { Owner = ordos_main }) + Actor.Create("upgrade.light", true, { Owner = ordos_main }) + Actor.Create("upgrade.heavy", true, { Owner = ordos_main }) + Actor.Create("upgrade.barracks", true, { Owner = ordos_small }) + Actor.Create("upgrade.light", true, { Owner = ordos_small }) + Trigger.AfterDelay(0, ActivateAI) + + SendHarkonnenReinforcements(DateTime.Seconds(15), 1) + SendHarkonnenReinforcements(DateTime.Seconds(30), 1) + SendHarkonnenReinforcements(DateTime.Seconds(35), 2) + + local ordosCondition = function() return player.IsObjectiveCompleted(KillOrdos) end + TriggerCarryallReinforcements(player, ordos_main, BaseAreaTriggers[1], OrdosHunters[1], OrdosHunterPaths[3], ordosCondition) + TriggerCarryallReinforcements(player, ordos_main, BaseAreaTriggers[2], OrdosHunters[2], OrdosHunterPaths[2], ordosCondition) +end diff --git a/mods/d2k/maps/harkonnen-05/map.bin b/mods/d2k/maps/harkonnen-05/map.bin new file mode 100644 index 0000000000..f1d7cb8b49 Binary files /dev/null and b/mods/d2k/maps/harkonnen-05/map.bin differ diff --git a/mods/d2k/maps/harkonnen-05/map.png b/mods/d2k/maps/harkonnen-05/map.png new file mode 100644 index 0000000000..6687db30dd Binary files /dev/null and b/mods/d2k/maps/harkonnen-05/map.png differ diff --git a/mods/d2k/maps/harkonnen-05/map.yaml b/mods/d2k/maps/harkonnen-05/map.yaml new file mode 100644 index 0000000000..aa6fa409b2 --- /dev/null +++ b/mods/d2k/maps/harkonnen-05/map.yaml @@ -0,0 +1,515 @@ +MapFormat: 11 + +RequiresMod: d2k + +Title: Harkonnen 05 + +Author: Westwood Studios + +Tileset: ARRAKIS + +MapSize: 74,84 + +Bounds: 2,2,70,80 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Enemies: Harkonnen, Ordos Main Base, Ordos Small Base, Corrino + PlayerReference@Harkonnen: + Name: Harkonnen + Playable: True + LockFaction: True + Faction: harkonnen + LockColor: True + Color: FE0000 + Enemies: Ordos Main Base, Ordos Small Base, Corrino, Creeps + PlayerReference@Ordos Main Base: + Name: Ordos Main Base + LockFaction: True + Faction: ordos + LockColor: True + Color: B3EAA5 + Allies: Ordos Small Base, Corrino + Enemies: Harkonnen + PlayerReference@Ordos Small Base: + Name: Ordos Small Base + LockFaction: True + Faction: ordos + LockColor: True + Color: B3EAA5 + Allies: Ordos Main Base, Corrino + Enemies: Harkonnen + PlayerReference@Corrino: + Name: Corrino + LockFaction: True + Faction: corrino + LockColor: True + Color: 7D00FE + Allies: Ordos Main Base, Ordos Small Base + Enemies: Harkonnen + +Actors: + Actor0: wall + Location: 69,10 + Owner: Ordos Main Base + Actor1: wall + Location: 70,10 + Owner: Ordos Main Base + Actor2: wall + Location: 71,10 + Owner: Ordos Main Base + Actor3: wall + Location: 64,11 + Owner: Ordos Main Base + Actor4: wall + Location: 65,11 + Owner: Ordos Main Base + Actor5: wall + Location: 66,11 + Owner: Ordos Main Base + Actor6: wall + Location: 67,11 + Owner: Ordos Main Base + Actor7: wall + Location: 68,11 + Owner: Ordos Main Base + Actor8: wall + Location: 69,11 + Owner: Ordos Main Base + OGunt1: medium_gun_turret + Location: 59,13 + Owner: Ordos Main Base + CSardaukar1: sardaukar + Location: 69,13 + Owner: Corrino + CSardaukar2: sardaukar + Location: 70,13 + Owner: Corrino + Actor12: spicebloom.spawnpoint + Location: 32,14 + Owner: Neutral + Actor13: wall + Location: 59,14 + Owner: Ordos Main Base + CStarport: starport + Location: 67,14 + Owner: Corrino + Actor15: wall + Location: 59,15 + Owner: Ordos Main Base + OHeavyFactory: heavy_factory + Location: 61,15 + Owner: Ordos Main Base + CSardaukar3: sardaukar + Location: 65,15 + Owner: Corrino + CSardaukar4: sardaukar + Location: 71,15 + Owner: Corrino + Actor19: wall + Location: 59,16 + Owner: Ordos Main Base + Actor20: wall + Location: 59,17 + Owner: Ordos Main Base + CSardaukar5: sardaukar + Location: 66,17 + Owner: Corrino + Actor22: wall + Location: 57,18 + Owner: Ordos Main Base + Actor23: wall + Location: 58,18 + Owner: Ordos Main Base + Actor24: wall + Location: 59,18 + Owner: Ordos Main Base + Actor25: light_inf + Location: 65,18 + Owner: Ordos Main Base + CPower1: wind_trap + Location: 67,18 + Owner: Corrino + CPower2: wind_trap + Location: 69,18 + Owner: Corrino + Actor28: wind_trap + Location: 4,19 + Owner: Harkonnen + Actor29: spicebloom.spawnpoint + Location: 47,19 + Owner: Neutral + OOutpost: outpost + Location: 58,19 + Owner: Ordos Main Base + OConYard: construction_yard + Location: 63,19 + Owner: Ordos Main Base + Actor32: light_inf + Location: 3,20 + Owner: Harkonnen + Actor33: light_inf + Location: 6,20 + Owner: Harkonnen + OPower1: wind_trap + Location: 55,20 + Owner: Ordos Main Base + Actor35: trooper + Location: 61,20 + Owner: Ordos Main Base + Actor36: combat_tank_h + Location: 7,21 + Owner: Harkonnen + ORefinery1: refinery + Location: 68,21 + Owner: Ordos Main Base + HConYard: construction_yard + Location: 4,23 + Owner: Harkonnen + Actor39: wind_trap + Location: 8,23 + Owner: Harkonnen + OLightFactory1: light_factory + Location: 57,23 + Owner: Ordos Main Base + OPower2: wind_trap + Location: 61,23 + Owner: Ordos Main Base + OBarracks1: barracks + Location: 63,23 + Owner: Ordos Main Base + OPower3: wind_trap + Location: 67,24 + Owner: Ordos Main Base + OPower4: wind_trap + Location: 69,24 + Owner: Ordos Main Base + OPower5: wind_trap + Location: 54,26 + Owner: Ordos Main Base + Actor46: light_inf + Location: 8,27 + Owner: Harkonnen + Actor47: spicebloom.spawnpoint + Location: 19,27 + Owner: Neutral + OHiTechFactory: high_tech_factory + Location: 57,27 + Owner: Ordos Main Base + Actor49: trooper + Location: 61,27 + Owner: Ordos Main Base + ORefinery2: refinery + Location: 63,27 + Owner: Ordos Main Base + Actor51: carryall + Location: 66,27 + Owner: Ordos Main Base + Actor52: light_inf + Location: 6,28 + Owner: Harkonnen + OPower6: wind_trap + Location: 67,28 + Owner: Ordos Main Base + OPower7: wind_trap + Location: 69,28 + Owner: Ordos Main Base + Actor55: light_inf + Location: 3,29 + Owner: Harkonnen + Actor56: harvester + Location: 65,30 + Owner: Ordos Main Base + OBarracks2: barracks + Location: 57,31 + Owner: Ordos Main Base + Actor58: combat_tank_o + Location: 61,31 + Owner: Ordos Main Base + Actor59: light_inf + Location: 63,31 + Owner: Ordos Main Base + OPower8: wind_trap + Location: 67,31 + Owner: Ordos Main Base + OPower9: wind_trap + Location: 69,31 + Owner: Ordos Main Base + Actor62: wormspawner + Location: 48,33 + Owner: Creeps + Actor63: combat_tank_o + Location: 59,33 + Owner: Ordos Main Base + Actor64: combat_tank_o + Location: 66,33 + Owner: Ordos Main Base + Actor65: wall + Location: 57,35 + Owner: Ordos Main Base + Actor66: wall + Location: 58,35 + Owner: Ordos Main Base + Actor67: wall + Location: 59,35 + Owner: Ordos Main Base + Actor68: wall + Location: 60,35 + Owner: Ordos Main Base + OGunt2: medium_gun_turret + Location: 61,35 + Owner: Ordos Main Base + Actor70: combat_tank_o + Location: 64,35 + Owner: Ordos Main Base + OGunt3: medium_gun_turret + Location: 66,35 + Owner: Ordos Main Base + Actor72: wall + Location: 67,35 + Owner: Ordos Main Base + Actor73: wall + Location: 68,35 + Owner: Ordos Main Base + Actor74: wall + Location: 69,35 + Owner: Ordos Main Base + Actor75: wall + Location: 70,35 + Owner: Ordos Main Base + Actor76: wall + Location: 57,36 + Owner: Ordos Main Base + Actor77: wall + Location: 70,36 + Owner: Ordos Main Base + Actor78: wall + Location: 57,37 + Owner: Ordos Main Base + Actor79: wall + Location: 70,37 + Owner: Ordos Main Base + Actor80: wall + Location: 71,37 + Owner: Ordos Main Base + Actor81: spicebloom.spawnpoint + Location: 25,38 + Owner: Neutral + OGunt4: medium_gun_turret + Location: 56,38 + Owner: Ordos Main Base + Actor83: wall + Location: 57,38 + Owner: Ordos Main Base + Actor84: wall + Location: 10,43 + Owner: Harkonnen + Actor85: wall + Location: 12,43 + Owner: Harkonnen + Actor86: wall + Location: 10,44 + Owner: Harkonnen + Actor87: medium_gun_turret + Location: 11,44 + Owner: Harkonnen + Actor88: wall + Location: 12,44 + Owner: Harkonnen + Actor89: spicebloom.spawnpoint + Location: 22,45 + Owner: Neutral + Actor90: spicebloom.spawnpoint + Location: 63,45 + Owner: Neutral + Actor91: wall + Location: 5,47 + Owner: Harkonnen + Actor92: wall + Location: 6,47 + Owner: Harkonnen + Actor93: medium_gun_turret + Location: 6,48 + Owner: Harkonnen + Actor94: spicebloom.spawnpoint + Location: 27,48 + Owner: Neutral + Actor95: wall + Location: 5,49 + Owner: Harkonnen + Actor96: wall + Location: 6,49 + Owner: Harkonnen + Actor97: spicebloom.spawnpoint + Location: 32,56 + Owner: Neutral + Actor98: spicebloom.spawnpoint + Location: 66,62 + Owner: Neutral + Actor99: spicebloom.spawnpoint + Location: 41,64 + Owner: Neutral + Actor100: spicebloom.spawnpoint + Location: 38,66 + Owner: Neutral + Actor101: spicebloom.spawnpoint + Location: 5,69 + Owner: Neutral + OSilo: silo + Location: 13,72 + Owner: Ordos Small Base + OPower10: wind_trap + Location: 15,72 + Owner: Ordos Small Base + OLightFactory2: light_factory + Location: 11,74 + Owner: Ordos Small Base + OPower11: wind_trap + Location: 15,75 + Owner: Ordos Small Base + OGunt5: medium_gun_turret + Location: 9,76 + Owner: Ordos Small Base + Actor107: wall + Location: 10,76 + Owner: Ordos Small Base + Actor108: wall + Location: 9,77 + Owner: Ordos Small Base + OBarracks3: barracks + Location: 7,78 + Owner: Ordos Small Base + ORefinery3: refinery + Location: 10,78 + Owner: Ordos Small Base + Actor111: carryall + Location: 13,78 + Owner: Ordos Small Base + OPower12: wind_trap + Location: 14,78 + Owner: Ordos Small Base + OPower13: wind_trap + Location: 16,78 + Owner: Ordos Small Base + Actor114: wall + Location: 19,78 + Owner: Ordos Small Base + Actor115: spicebloom.spawnpoint + Location: 32,78 + Owner: Neutral + OGunt6: medium_gun_turret + Location: 19,79 + Owner: Ordos Small Base + Actor117: harvester + Location: 13,80 + Owner: Ordos Small Base + Actor118: wall + Location: 19,80 + Owner: Ordos Small Base + OrdosRally10: waypoint + Owner: Neutral + Location: 4,78 + OrdosEntry10: waypoint + Owner: Neutral + Location: 4,81 + CorrinoStarportEntry: waypoint + Owner: Neutral + Location: 71,15 + CorrinoStarportExit: waypoint + Owner: Neutral + Location: 2,15 + OrdosRally8: waypoint + Owner: Neutral + Location: 63,36 + OrdosEntry8: waypoint + Owner: Neutral + Location: 71,34 + OrdosRally9: waypoint + Owner: Neutral + Location: 63,33 + OrdosEntry9: waypoint + Owner: Neutral + Location: 71,30 + OrdosRally11: waypoint + Owner: Neutral + Location: 69,76 + OrdosEntry11: waypoint + Owner: Neutral + Location: 71,76 + HOutpost: outpost + Owner: Harkonnen + Location: 6,40 + OrdosRally12: waypoint + Owner: Neutral + Location: 28,80 + OrdosEntry12: waypoint + Owner: Neutral + Location: 28,81 + OrdosRally1: waypoint + Owner: Neutral + Location: 29,67 + OrdosEntry1: waypoint + Owner: Neutral + Location: 29,81 + OrdosRally2: waypoint + Owner: Neutral + Location: 7,67 + OrdosEntry2: waypoint + Owner: Neutral + Location: 2,67 + OrdosRally3: waypoint + Owner: Neutral + Location: 14,65 + OrdosEntry3: waypoint + Owner: Neutral + Location: 2,65 + OrdosRally4: waypoint + Owner: Neutral + Location: 32,58 + OrdosEntry4: waypoint + Owner: Neutral + Location: 2,58 + OrdosRally5: waypoint + Owner: Neutral + Location: 22,30 + OrdosEntry5: waypoint + Owner: Neutral + Location: 22,2 + OrdosRally6: waypoint + Owner: Neutral + Location: 30,8 + OrdosEntry6: waypoint + Owner: Neutral + Location: 30,2 + OrdosRally7: waypoint + Owner: Neutral + Location: 31,4 + OrdosEntry7: waypoint + Owner: Neutral + Location: 31,2 + HarkonnenRally1: waypoint + Owner: Neutral + Location: 11,19 + HarkonnenEntry1: waypoint + Owner: Neutral + Location: 2,19 + HarkonnenRally2: waypoint + Owner: Neutral + Location: 4,29 + HarkonnenEntry2: waypoint + Owner: Neutral + Location: 2,29 + +Rules: d2k|rules/campaign-rules.yaml, d2k|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/d2k/maps/harkonnen-05/rules.yaml b/mods/d2k/maps/harkonnen-05/rules.yaml new file mode 100644 index 0000000000..0ff1f584a3 --- /dev/null +++ b/mods/d2k/maps/harkonnen-05/rules.yaml @@ -0,0 +1,76 @@ +Player: + PlayerResources: + DefaultCash: 6000 + +World: + LuaScript: + Scripts: campaign-global.lua, harkonnen05.lua, harkonnen05-AI.lua + MissionData: + Briefing: Protect the Outpost at Habbanya to prevent Imperial interference. Rush ground troops through the mountain passes and secure our Outpost. Once this is done, turn on the Ordos and crush them. + BriefingVideo: H_BR05_E.VQA + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Ordos Main Base: 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160 + Ordos Small Base: 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160 + +carryall.reinforce: + Cargo: + MaxWeight: 25 + +frigate: + Aircraft: + LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune, Concrete + VTOL: true # The frigate would teleport to land otherwise + +concreteb: + Buildable: + Prerequisites: ~disabled + +large_gun_turret: + Buildable: + Prerequisites: ~disabled + +research_centre: + Buildable: + Prerequisites: outpost, heavy_factory, upgrade.heavy + +missile_tank: + Buildable: + Prerequisites: ~heavy.missiletank, upgrade.heavy, research_centre + +siege_tank: + Buildable: + Prerequisites: ~disabled + +sardaukar: + Buildable: + Prerequisites: ~disabled + +stealth_raider: + Buildable: + Prerequisites: ~disabled + +upgrade.conyard: + Buildable: + Prerequisites: ~disabled + +outpost: + ExternalCondition@lua: + Condition: modified + Tooltip: + RequiresCondition: !modified + Tooltip@Modified: + Name: Modified Outpost + RequiresCondition: modified diff --git a/mods/d2k/missions.yaml b/mods/d2k/missions.yaml index 1ecc203609..06cceb5e80 100644 --- a/mods/d2k/missions.yaml +++ b/mods/d2k/missions.yaml @@ -25,5 +25,6 @@ Harkonnen Campaign: ./mods/d2k/maps/harkonnen-03a ./mods/d2k/maps/harkonnen-03b ./mods/d2k/maps/harkonnen-04 + ./mods/d2k/maps/harkonnen-05 ./mods/d2k/maps/harkonnen-06a ./mods/d2k/maps/harkonnen-06b