diff --git a/mods/d2k/maps/atreides-02b/atreides02b.lua b/mods/d2k/maps/atreides-02b/atreides02b.lua new file mode 100644 index 0000000000..ba997b75ab --- /dev/null +++ b/mods/d2k/maps/atreides-02b/atreides02b.lua @@ -0,0 +1,128 @@ + +HarkonnenBase = { HConyard, HOutpost, HBarracks } + +HarkonnenReinforcements = { } +HarkonnenReinforcements["Easy"] = +{ + { "light_inf", "trike" }, + { "light_inf", "trike" }, + { "light_inf", "light_inf", "light_inf", "trike", "trike" } +} + +HarkonnenReinforcements["Normal"] = +{ + { "light_inf", "trike" }, + { "light_inf", "trike" }, + { "light_inf", "light_inf", "light_inf", "trike", "trike" }, + { "light_inf", "light_inf" }, + { "light_inf", "light_inf", "light_inf" }, + { "light_inf", "trike" }, +} + +HarkonnenReinforcements["Hard"] = +{ + { "trike", "trike" }, + { "light_inf", "trike" }, + { "light_inf", "trike" }, + { "light_inf", "light_inf", "light_inf", "trike", "trike" }, + { "light_inf", "light_inf" }, + { "trike", "trike" }, + { "light_inf", "light_inf", "light_inf" }, + { "light_inf", "trike" }, + { "trike", "trike" } +} + +HarkonnenAttackPaths = +{ + { HarkonnenEntry1.Location, HarkonnenRally1.Location }, + { HarkonnenEntry1.Location, HarkonnenRally3.Location }, + { HarkonnenEntry2.Location, HarkonnenRally2.Location }, + { HarkonnenEntry2.Location, HarkonnenRally4.Location } +} + +HarkonnenAttackDelay = +{ + Easy = DateTime.Minutes(5), + Normal = DateTime.Minutes(2) + DateTime.Seconds(40), + Hard = DateTime.Minutes(1) + DateTime.Seconds(20) +} + +HarkonnenAttackWaves = +{ + Easy = 3, + Normal = 6, + Hard = 9 +} + +wave = 0 +SendHarkonnen = function() + Trigger.AfterDelay(HarkonnenAttackDelay[Map.Difficulty], function() + wave = wave + 1 + if wave > HarkonnenAttackWaves[Map.Difficulty] then + return + end + + local path = Utils.Random(HarkonnenAttackPaths) + local units = Reinforcements.ReinforceWithTransport(harkonnen, "carryall.reinforce", HarkonnenReinforcements[Map.Difficulty][wave], path, { path[1] })[2] + Utils.Do(units, IdleHunt) + + SendHarkonnen() + end) +end + +IdleHunt = function(unit) + Trigger.OnIdle(unit, unit.Hunt) +end + +Tick = function() + if player.HasNoRequiredUnits() then + harkonnen.MarkCompletedObjective(KillAtreides) + end + + if harkonnen.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillHarkonnen) then + Media.DisplayMessage("The Harkonnen have been anihilated!", "Mentat") + player.MarkCompletedObjective(KillHarkonnen) + end +end + +WorldLoaded = function() + harkonnen = Player.GetPlayer("Harkonnen") + player = Player.GetPlayer("Atreides") + + InitObjectives() + + Camera.Position = AConyard.CenterPosition + + Trigger.OnAllKilled(HarkonnenBase, function() + Utils.Do(harkonnen.GetGroundAttackers(), IdleHunt) + end) + + SendHarkonnen() +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + KillAtreides = harkonnen.AddPrimaryObjective("Kill all Atreides units.") + KillHarkonnen = player.AddPrimaryObjective("Destroy all Harkonnen forces.") + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "Lose") + end) + end) + Trigger.OnPlayerWon(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "Win") + end) + end) +end diff --git a/mods/d2k/maps/atreides-02b/map.bin b/mods/d2k/maps/atreides-02b/map.bin new file mode 100644 index 0000000000..0068202b5d Binary files /dev/null and b/mods/d2k/maps/atreides-02b/map.bin differ diff --git a/mods/d2k/maps/atreides-02b/map.png b/mods/d2k/maps/atreides-02b/map.png new file mode 100644 index 0000000000..687e7f87b3 Binary files /dev/null and b/mods/d2k/maps/atreides-02b/map.png differ diff --git a/mods/d2k/maps/atreides-02b/map.yaml b/mods/d2k/maps/atreides-02b/map.yaml new file mode 100644 index 0000000000..ea0c82257e --- /dev/null +++ b/mods/d2k/maps/atreides-02b/map.yaml @@ -0,0 +1,211 @@ +MapFormat: 7 + +RequiresMod: d2k + +Title: Atreides 02b + +Description: Infiltrate the Imperial Basin and build up our forces until they are strong enough to eradicate the local Harkonnen presence.\n\nThe Harkonnen are reinforcing their troops by air, so be on your guard. Use the Outpost's radar to detect attacks from unexpected quarters.\n\nBe careful when mining the Spice. Spice mounds grow out of the sand. While a vital source of Spice, Spice mounds can damage or destroy any unit that blunders into them.\n\nGood luck.\n + +Author: Westwood Studios + +Tileset: ARRAKIS + +MapSize: 52,52 + +Bounds: 2,2,48,48 + +Visibility: MissionSelector + +Type: Campaign + +Videos: + Briefing: a_br02_e.vqa + +Options: + Crates: False + Creeps: True + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 5000 + TechLevel: Low + ConfigurableStartingUnits: False + Difficulties: Easy, Normal, Hard + ShortGame: False + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + PlayerReference@Atreides: + Name: Atreides + Playable: True + LockFaction: True + Faction: atreides + LockColor: True + ColorRamp: 170,255,200 + Enemies: Harkonnen + PlayerReference@Harkonnen: + Name: Harkonnen + LockFaction: True + Faction: harkonnen + LockColor: True + ColorRamp: 0,255,127 + Enemies: Atreides + +Actors: + Actor0: light_inf + Location: 26,8 + Owner: Atreides + Actor1: trike + Location: 28,8 + Owner: Atreides + Actor2: trike + Location: 30,8 + Owner: Atreides + Actor3: light_inf + Location: 24,10 + Owner: Atreides + Actor5: trike + Location: 31,11 + Owner: Atreides + Actor6: light_inf + Location: 47,11 + Owner: Harkonnen + Actor7: light_inf + Location: 25,12 + Owner: Atreides + Actor8: light_inf + Location: 8,14 + Owner: Harkonnen + Actor9: light_inf + Location: 27,14 + Owner: Atreides + Actor10: wormspawner + Location: 40,17 + Owner: Creeps + Actor11: light_inf + Location: 40,33 + Owner: Harkonnen + Actor12: trike + Location: 14,39 + Owner: Harkonnen + Actor13: light_inf + Location: 16,39 + Owner: Harkonnen + Actor14: trike + Location: 18,39 + Owner: Harkonnen + Actor16: trike + Location: 16,41 + Owner: Harkonnen + Actor17: light_inf + Location: 9,42 + Owner: Harkonnen + Actor20: light_inf + Location: 11,44 + Owner: Harkonnen + Actor21: trike + Location: 12,46 + Owner: Harkonnen + Actor22: light_inf + Location: 18,46 + Owner: Harkonnen + Actor23: light_inf + Location: 21,46 + Owner: Harkonnen + Actor24: trike + Location: 16,48 + Owner: Harkonnen + HConyard: construction_yard + Location: 14,42 + Owner: Harkonnen + HOutpost: outpostnopower + Location: 11,40 + Owner: Harkonnen + HBarracks: barracks + Location: 18,42 + Owner: Harkonnen + AConyard: construction_yard + Location: 27,10 + Owner: Atreides + HarkonnenEntry1: waypoint + Owner: Neutral + Location: 2,22 + HarkonnenEntry2: waypoint + Owner: Neutral + Location: 49,33 + HarkonnenRally1: waypoint + Owner: Neutral + Location: 12,7 + HarkonnenRally2: waypoint + Owner: Neutral + Location: 36,15 + HarkonnenRally3: waypoint + Owner: Neutral + Location: 18,17 + HarkonnenRally4: waypoint + Owner: Neutral + Location: 30,28 + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + LuaScript: + Scripts: atreides02b.lua + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + WormManager: + Minimum: 1 + Maximum: 1 + carryall.reinforce: + Cargo: + MaxWeight: 10 + construction_yard: + Production: + Produces: Building + concreteb: + Buildable: + Prerequisites: ~disabled + heavy_factory: + Buildable: + Prerequisites: ~disabled + medium_gun_turret: + Buildable: + Prerequisites: ~disabled + wall: + Buildable: + Prerequisites: ~disabled + outpost: + Buildable: + Prerequisites: barracks + outpostnopower: + Inherits: outpost + Buildable: + Prerequisites: ~disabled + -RequiresPower: + +Sequences: + +VoxelSequences: + +Weapons: + +Voices: + +Notifications: + +Translations: diff --git a/mods/d2k/missions.yaml b/mods/d2k/missions.yaml index 721fa147b2..b6bcdcb33e 100644 --- a/mods/d2k/missions.yaml +++ b/mods/d2k/missions.yaml @@ -2,3 +2,4 @@ Atreides Campaign: ./mods/d2k/maps/atreides-01a ./mods/d2k/maps/atreides-01b ./mods/d2k/maps/atreides-02a + ./mods/d2k/maps/atreides-02b