diff --git a/mods/d2k/maps/ordos-04/map.bin b/mods/d2k/maps/ordos-04/map.bin new file mode 100644 index 0000000000..4af28ad80c Binary files /dev/null and b/mods/d2k/maps/ordos-04/map.bin differ diff --git a/mods/d2k/maps/ordos-04/map.png b/mods/d2k/maps/ordos-04/map.png new file mode 100644 index 0000000000..3f3fa40165 Binary files /dev/null and b/mods/d2k/maps/ordos-04/map.png differ diff --git a/mods/d2k/maps/ordos-04/map.yaml b/mods/d2k/maps/ordos-04/map.yaml new file mode 100644 index 0000000000..510ffe276a --- /dev/null +++ b/mods/d2k/maps/ordos-04/map.yaml @@ -0,0 +1,526 @@ +MapFormat: 11 + +RequiresMod: d2k + +Title: Ordos 04 + +Author: Westwood Studios + +Tileset: ARRAKIS + +MapSize: 68,68 + +Bounds: 2,2,64,64 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: Random + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: Random + Enemies: Ordos, Harkonnen, Smugglers + PlayerReference@Ordos: + Name: Ordos + Playable: True + LockFaction: True + Faction: ordos + LockColor: True + Color: B3EAA5 + Enemies: Harkonnen, Smugglers, Creeps + PlayerReference@Harkonnen: + Name: Harkonnen + LockFaction: True + Faction: harkonnen + LockColor: True + Color: FE0000 + Allies: Smugglers + Enemies: Ordos + PlayerReference@Smugglers: + Name: Smugglers + LockFaction: True + Faction: smuggler + LockColor: True + Color: 542209 + Allies: Harkonnen + Enemies: Ordos + +Actors: + Actor0: wall + Location: 38,2 + Owner: Harkonnen + Actor1: wall + Location: 42,2 + Owner: Smugglers + HGunTurret1: medium_gun_turret + Location: 38,3 + Owner: Harkonnen + TurretFacing: 0 + Actor3: wall + Location: 42,3 + Owner: Smugglers + SLightFactory: light_factory + Location: 44,3 + Owner: Smugglers + Actor5: wall + Location: 42,4 + Owner: Smugglers + Actor6: wall + Location: 42,5 + Owner: Smugglers + Actor7: wall + Location: 42,6 + Owner: Smugglers + Actor8: light_inf + Location: 43,6 + Owner: Smugglers + HGunTurret2: medium_gun_turret + Location: 38,7 + Owner: Harkonnen + TurretFacing: 0 + Actor10: trooper + Location: 39,7 + Owner: Harkonnen + Actor11: wall + Location: 42,7 + Owner: Smugglers + Actor12: wall + Location: 46,7 + Owner: Smugglers + Actor13: wall + Location: 47,7 + Owner: Smugglers + Actor14: wall + Location: 48,7 + Owner: Smugglers + Actor15: wall + Location: 49,7 + Owner: Smugglers + Actor16: wall + Location: 50,7 + Owner: Smugglers + Actor17: light_inf + Location: 51,7 + Owner: Smugglers + Actor18: wall + Location: 38,8 + Owner: Harkonnen + Actor19: wall + Location: 42,8 + Owner: Smugglers + SPower1: wind_trap + Location: 44,8 + Owner: Smugglers + Actor21: wall + Location: 46,8 + Owner: Smugglers + SOutpost: outpost + Location: 47,8 + Owner: Smugglers + Actor23: wall + Location: 50,8 + Owner: Smugglers + Actor24: wall + Location: 38,9 + Owner: Harkonnen + Actor25: combat_tank_h + Location: 39,9 + Owner: Harkonnen + Actor26: wall + Location: 42,9 + Owner: Smugglers + Actor27: wall + Location: 46,9 + Owner: Smugglers + Actor28: wall + Location: 50,9 + Owner: Smugglers + Actor29: wall + Location: 29,10 + Owner: Harkonnen + Actor30: wall + Location: 30,10 + Owner: Harkonnen + Actor31: wall + Location: 31,10 + Owner: Harkonnen + Actor32: wall + Location: 32,10 + Owner: Harkonnen + Actor33: wall + Location: 33,10 + Owner: Harkonnen + Actor34: wall + Location: 34,10 + Owner: Harkonnen + Actor35: wall + Location: 35,10 + Owner: Harkonnen + Actor36: wall + Location: 36,10 + Owner: Harkonnen + Actor37: wall + Location: 37,10 + Owner: Harkonnen + Actor38: wall + Location: 38,10 + Owner: Harkonnen + SGunTurret1: medium_gun_turret + Location: 42,10 + Owner: Smugglers + TurretFacing: 0 + Actor40: wall + Location: 43,10 + Owner: Smugglers + Actor41: wall + Location: 46,10 + Owner: Smugglers + Actor42: wall + Location: 50,10 + Owner: Smugglers + Actor43: spicebloom.spawnpoint + Location: 61,10 + Owner: Neutral + Actor44: wall + Location: 28,11 + Owner: Harkonnen + Actor45: wall + Location: 29,11 + Owner: Harkonnen + Actor46: harvester + Location: 40,11 + Owner: Harkonnen + Actor47: wall + Location: 46,11 + Owner: Smugglers + Actor48: wall + Location: 47,11 + Owner: Smugglers + Actor49: wall + Location: 48,11 + Owner: Smugglers + Actor50: wall + Location: 49,11 + Owner: Smugglers + Actor51: wall + Location: 50,11 + Owner: Smugglers + Actor52: wall + Location: 28,12 + Owner: Harkonnen + Actor53: wall + Location: 27,13 + Owner: Harkonnen + Actor54: wall + Location: 28,13 + Owner: Harkonnen + HBarracks: barracks + Location: 29,13 + Owner: Harkonnen + HHeavyFactory: heavy_factory + Location: 31,13 + Owner: Harkonnen + HRefinery: refinery + Location: 35,13 + Owner: Harkonnen + SGunTurret2: medium_gun_turret + Location: 42,13 + Owner: Smugglers + TurretFacing: 0 + Actor59: wall + Location: 43,13 + Owner: Smugglers + SPower2: wind_trap + Location: 44,13 + Owner: Smugglers + SHeavyFactory: heavy_factory + Location: 46,13 + Owner: Smugglers + SPower3: wind_trap + Location: 49,13 + Owner: Smugglers + SBarracks: barracks + Location: 52,13 + Owner: Smugglers + Actor64: wall + Location: 42,14 + Owner: Smugglers + Actor65: wall + Location: 42,15 + Owner: Smugglers + Actor66: wall + Location: 42,16 + Owner: Smugglers + Actor67: light_inf + Location: 43,16 + Owner: Smugglers + Actor68: wall + Location: 42,17 + Owner: Smugglers + Actor69: wall + Location: 43,17 + Owner: Smugglers + Actor70: wall + Location: 44,17 + Owner: Smugglers + Actor71: wall + Location: 45,17 + Owner: Smugglers + Actor72: wall + Location: 46,17 + Owner: Smugglers + Actor73: wall + Location: 47,17 + Owner: Smugglers + Actor74: wall + Location: 48,17 + Owner: Smugglers + HLightFactory: light_factory + Location: 39,18 + Owner: Harkonnen + HConyard: construction_yard + Location: 44,18 + Owner: Harkonnen + Actor83: spicebloom.spawnpoint + Location: 6,19 + Owner: Neutral + Actor84: spicebloom.spawnpoint + Location: 18,20 + Owner: Neutral + Actor85: wall + Location: 56,20 + Owner: Smugglers + SGunTurret3: medium_gun_turret + Location: 57,20 + Owner: Smugglers + TurretFacing: 0 + HPower1: wind_trap + Location: 44,21 + Owner: Harkonnen + HPower2: wind_trap + Location: 46,21 + Owner: Harkonnen + SGunTurret4: medium_gun_turret + Location: 63,21 + Owner: Smugglers + TurretFacing: 0 + Actor90: wall + Location: 64,21 + Owner: Smugglers + Actor91: wall + Location: 65,21 + Owner: Smugglers + Actor92: spicebloom.spawnpoint + Location: 23,24 + Owner: Neutral + HGunTurret3: wind_trap + Location: 44,24 + Owner: Harkonnen + HPower3: wind_trap + Location: 46,24 + Owner: Harkonnen + Actor95: wall + Location: 46,29 + Owner: Harkonnen + HGunTurret4: medium_gun_turret + Location: 47,29 + Owner: Harkonnen + TurretFacing: 0 + Actor97: wall + Location: 48,29 + Owner: Harkonnen + Actor98: spicebloom.spawnpoint + Location: 53,30 + Owner: Neutral + Actor99: combat_tank_h + Location: 14,31 + Owner: Harkonnen + Actor100: wormspawner + Location: 2,32 + Owner: Creeps + Actor101: wall + Location: 10,32 + Owner: Harkonnen + HGunTurret5: medium_gun_turret + Location: 11,32 + Owner: Harkonnen + TurretFacing: 0 + Actor103: light_inf + Location: 12,32 + Owner: Harkonnen + Actor104: light_inf + Location: 16,32 + Owner: Harkonnen + Actor105: wall + Location: 10,33 + Owner: Harkonnen + Actor106: wall + Location: 15,33 + Owner: Harkonnen + Actor107: wall + Location: 10,34 + Owner: Harkonnen + Actor108: wall + Location: 15,34 + Owner: Harkonnen + Actor109: wall + Location: 16,34 + Owner: Harkonnen + Actor110: wall + Location: 16,35 + Owner: Harkonnen + Actor111: wall + Location: 16,36 + Owner: Harkonnen + Actor112: wall + Location: 17,36 + Owner: Harkonnen + Actor113: trike + Location: 37,39 + Owner: Harkonnen + Actor114: trike + Location: 39,39 + Owner: Harkonnen + Actor115: trike + Location: 41,39 + Owner: Harkonnen + Actor116: spicebloom.spawnpoint + Location: 7,40 + Owner: Neutral + Actor117: wall + Location: 37,40 + Owner: Harkonnen + Actor118: wall + Location: 38,40 + Owner: Harkonnen + Actor119: light_inf + Location: 42,40 + Owner: Harkonnen + Actor120: wall + Location: 37,41 + Owner: Harkonnen + Actor121: wall + Location: 42,41 + Owner: Harkonnen + Actor122: wall + Location: 43,41 + Owner: Harkonnen + Actor123: wall + Location: 37,42 + Owner: Harkonnen + Actor124: wall + Location: 43,42 + Owner: Harkonnen + Actor125: wall + Location: 43,43 + Owner: Harkonnen + Actor126: spicebloom.spawnpoint + Location: 32,49 + Owner: Neutral + Actor127: spicebloom.spawnpoint + Location: 59,54 + Owner: Neutral + Actor128: spicebloom.spawnpoint + Location: 5,58 + Owner: Neutral + Actor129: raider + Location: 64,58 + Owner: Ordos + Actor130: light_inf + Location: 65,58 + Owner: Ordos + Actor131: light_inf + Location: 63,59 + Owner: Ordos + Actor132: light_inf + Location: 61,60 + Owner: Ordos + Actor133: combat_tank_o + Location: 64,60 + Owner: Ordos + Actor134: combat_tank_o + Location: 63,61 + Owner: Ordos + Actor135: spicebloom.spawnpoint + Location: 26,62 + Owner: Neutral + Actor136: raider + Location: 60,62 + Owner: Ordos + OConyard: construction_yard + Location: 62,62 + Owner: Ordos + Actor138: raider + Location: 60,63 + Owner: Ordos + Actor139: light_inf + Location: 60,65 + Owner: Ordos + HarkonnenRally1: waypoint + Owner: Neutral + Location: 11,33 + HarkonnenEntry1: waypoint + Owner: Neutral + Location: 2,33 + HarkonnenRally2: waypoint + Owner: Neutral + Location: 31,29 + HarkonnenEntry2: waypoint + Owner: Neutral + Location: 31,2 + HarkonnenRally3: waypoint + Owner: Neutral + Location: 44,32 + HarkonnenEntry3: waypoint + Owner: Neutral + Location: 65,32 + HarkonnenRally4: waypoint + Owner: Neutral + Location: 40,6 + HarkonnenEntry4: waypoint + Owner: Neutral + Location: 40,2 + SmugglerRally: waypoint + Owner: Neutral + Location: 53,12 + SmugglerEntry: waypoint + Owner: Neutral + Location: 53,2 + OrdosRally: waypoint + Owner: Neutral + Location: 37,59 + OrdosEntry: waypoint + Owner: Neutral + Location: 37,65 + Actor156: wall + Owner: Smugglers + Location: 50,20 + Actor157: wall + Owner: Smugglers + Location: 49,20 + Actor158: wall + Owner: Smugglers + Location: 51,20 + Actor153: wind_trap + Owner: Smugglers + Location: 50,17 + Actor150: wall + Owner: Smugglers + Location: 49,17 + Actor151: wall + Owner: Smugglers + Location: 49,18 + Actor152: wall + Owner: Smugglers + Location: 49,19 + +Rules: d2k|rules/campaign-rules.yaml, rules.yaml diff --git a/mods/d2k/maps/ordos-04/ordos04-AI.lua b/mods/d2k/maps/ordos-04/ordos04-AI.lua new file mode 100644 index 0000000000..f4c7d37e94 --- /dev/null +++ b/mods/d2k/maps/ordos-04/ordos04-AI.lua @@ -0,0 +1,180 @@ +IdlingUnits = +{ + Harkonnen = { }, + Smugglers = { } +} + +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" } + +HarkonnenVehicleTypes = { "trike", "trike", "quad" } +HarkonnenTankType = { "combat_tank_h" } + +SmugglerVehicleTypes = { "raider", "raider", "quad" } +SmugglerTankType = { "combat_tank_o" } + +IsAttacking = +{ + Harkonnen = false, + Smugglers = false +} + +AttackOnGoing = +{ + Harkonnen = false, + Smugglers = false +} + +HoldProduction = +{ + Harkonnen = false, + Smugglers = false +} + +HarvesterKilled = +{ + Harkonnen = true, + Smugglers = true +} + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +SetupAttackGroup = function(house) + local units = { } + + for i = 0, AttackGroupSize[Difficulty], 1 do + if #IdlingUnits[house.Name] == 0 then + return units + end + + local number = Utils.RandomInteger(1, #IdlingUnits[house.Name]) + + if IdlingUnits[house.Name][number] and not IdlingUnits[house.Name][number].IsDead then + units[i] = IdlingUnits[house.Name][number] + table.remove(IdlingUnits[house.Name], number) + end + end + + return units +end + +SendAttack = function(house) + if IsAttacking[house.Name] then + return + end + IsAttacking[house.Name] = true + HoldProduction[house.Name] = true + + local units = SetupAttackGroup(house) + Utils.Do(units, function(unit) + IdleHunt(unit) + end) + + Trigger.OnAllRemovedFromWorld(units, function() + IsAttacking[house.Name] = false + HoldProduction[house.Name] = false + end) +end + +ProtectHarvester = function(unit, house) + DefendActor(unit, house) + Trigger.OnKilled(unit, function() HarvesterKilled[house.Name] = true end) +end + +DefendActor = function(unit, house) + Trigger.OnDamaged(unit, function(self, attacker) + if AttackOnGoing[house.Name] then + return + end + AttackOnGoing[house.Name] = true + + -- Don't try to attack spiceblooms + if attacker and attacker.Type == "spicebloom" then + return + end + + local Guards = SetupAttackGroup(house) + + if #Guards <= 0 then + AttackOnGoing[house.Name] = false + return + end + + Utils.Do(Guards, function(unit) + if not self.IsDead then + unit.AttackMove(self.Location) + end + IdleHunt(unit) + end) + + Trigger.OnAllRemovedFromWorld(Guards, function() AttackOnGoing[house.Name] = false end) + end) +end + +InitAIUnits = function(house) + IdlingUnits[house.Name] = Reinforcements.Reinforce(house, InitialReinforcements[house.Name], InitialReinforcementsPaths[house.Name]) + + Utils.Do(Base[house.Name], function(actor) + DefendActor(actor, house) + Trigger.OnDamaged(actor, function(building) + if building.Health < building.MaxHealth * 3/4 and building.Owner.Name == house.Name then + building.StartBuildingRepairs() + end + end) + end) +end + +Produce = function(house, units, factory) + if factory.IsDead then + return + end + + if HoldProduction[house.Name] then + Trigger.AfterDelay(DateTime.Seconds(30), function() Produce(house, units, factory) end) + return + end + + local delay = Utils.RandomInteger(AttackDelays[Difficulty][1], AttackDelays[Difficulty][2] + 1) + local toBuild = { Utils.Random(units) } + house.Build(toBuild, function(unit) + local unitCount = 1 + if IdlingUnits[house.Name] then + unitCount = 1 + #IdlingUnits[house.Name] + end + IdlingUnits[house.Name][unitCount] = unit[1] + Trigger.AfterDelay(delay, function() Produce(house, units, factory) end) + + if unitCount >= (AttackGroupSize[Difficulty] * 2.5) then + SendAttack(house) + end + end) +end + +ActivateAI = function() + InitAIUnits(harkonnen) + InitAIUnits(smuggler) + + -- Finish the upgrades first before trying to build something + Trigger.AfterDelay(DateTime.Seconds(14), function() + Produce(harkonnen, EnemyInfantryTypes, HBarracks) + Produce(harkonnen, HarkonnenVehicleTypes, HLightFactory) + Produce(harkonnen, HarkonnenTankType, HHeavyFactory) + + Produce(smuggler, EnemyInfantryTypes, SBarracks) + Produce(smuggler, SmugglerVehicleTypes, SLightFactory) + Produce(smuggler, SmugglerTankType, SHeavyFactory) + end) +end diff --git a/mods/d2k/maps/ordos-04/ordos04.lua b/mods/d2k/maps/ordos-04/ordos04.lua new file mode 100644 index 0000000000..725bd1831e --- /dev/null +++ b/mods/d2k/maps/ordos-04/ordos04.lua @@ -0,0 +1,163 @@ +Base = +{ + Harkonnen = { HRefinery, SHeavyFactory, SLightFactory, HGunTurret1, HGunTurret2, HGunTurret3, HGunTurret4, HGunTurret5, SBarracks, HPower1, HPower2, HPower3, HPower4 }, + Smugglers = { SOutpost, SHeavyFactory, SLightFactory, SGunTurret1, SGunTurret2, SGunTurret3, SGunTurret4, SBarracks, SPower1, SPower2, SPower3 } +} + +HarkonnenLightInfantryRushers = +{ + easy = { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + normal = { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" }, + hard = { "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" } +} + +HarkonnenAttackDelay = +{ + easy = DateTime.Minutes(3) + DateTime.Seconds(30), + normal = DateTime.Minutes(2) + DateTime.Seconds(30), + hard = DateTime.Minutes(1) + DateTime.Seconds(30) +} + +InitialReinforcements = +{ + Harkonnen = { "combat_tank_h", "combat_tank_h", "trike", "quad" }, + Smugglers = { "light_inf", "light_inf", "light_inf", "light_inf", "trooper", "trooper", "trooper" } +} + +LightInfantryRushersPaths = +{ + { HarkonnenEntry1.Location, HarkonnenRally1.Location }, + { HarkonnenEntry2.Location, HarkonnenRally2.Location }, + { HarkonnenEntry3.Location, HarkonnenRally3.Location } +} + +InitialReinforcementsPaths = +{ + Harkonnen = { HarkonnenEntry4.Location, HarkonnenRally4.Location }, + Smugglers = { SmugglerEntry.Location, SmugglerRally.Location } +} + +OrdosReinforcements = { "light_inf", "light_inf", "light_inf", "light_inf" } + +OrdosPath = { OrdosEntry.Location, OrdosRally.Location } + +SendHarkonnen = function(path) + Trigger.AfterDelay(HarkonnenAttackDelay[Difficulty], function() + if player.IsObjectiveCompleted(KillHarkonnen) then + return + end + + local units = Reinforcements.ReinforceWithTransport(harkonnen, "carryall.reinforce", HarkonnenLightInfantryRushers[Difficulty], path, { path[1] })[2] + Utils.Do(units, function(unit) + unit.AttackMove(HarkonnenAttackLocation) + IdleHunt(unit) + end) + end) +end + +Hunt = function(house) + Trigger.OnAllKilledOrCaptured(Base[house.Name], function() + Utils.Do(house.GetGroundAttackers(), IdleHunt) + end) +end + +CheckHarvester = function(house) + if DateTime.GameTime % DateTime.Seconds(30) and HarvesterKilled[house.Name] then + local units = house.GetActorsByType("harvester") + + if #units > 0 then + HarvesterKilled[house.Name] = false + ProtectHarvester(units[1], house) + end + end +end + +Tick = function() + if player.HasNoRequiredUnits() then + harkonnen.MarkCompletedObjective(KillOrdosH) + smuggler.MarkCompletedObjective(KillOrdosS) + smuggler.MarkCompletedObjective(DefendOutpost) + end + + if harkonnen.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillHarkonnen) then + Media.DisplayMessage("The Harkonnen have been annihilated!", "Mentat") + player.MarkCompletedObjective(KillHarkonnen) + end + + CheckHarvester(harkonnen) + CheckHarvester(smuggler) + + if SOutpost.IsDead then + player.MarkFailedObjective(CaptureOutpost) + end + + if SOutpost.Owner == player then + player.MarkCompletedObjective(CaptureOutpost) + smuggler.MarkFailedObjective(DefendOutpost) + end +end + +WorldLoaded = function() + harkonnen = Player.GetPlayer("Harkonnen") + smuggler = Player.GetPlayer("Smugglers") + player = Player.GetPlayer("Ordos") + + Difficulty = Map.LobbyOption("difficulty") + + InitObjectives() + + Camera.Position = OConyard.CenterPosition + HarkonnenAttackLocation = OConyard.Location + + Hunt(harkonnen) + Hunt(smuggler) + + SendHarkonnen(LightInfantryRushersPaths[1]) + SendHarkonnen(LightInfantryRushersPaths[2]) + SendHarkonnen(LightInfantryRushersPaths[3]) + ActivateAI() + + Actor.Create("upgrade.barracks", true, { Owner = harkonnen }) + Actor.Create("upgrade.light", true, { Owner = harkonnen }) + Actor.Create("upgrade.barracks", true, { Owner = smuggler }) + Actor.Create("upgrade.light", true, { Owner = smuggler }) + + Trigger.AfterDelay(HarkonnenAttackDelay[Difficulty] - DateTime.Seconds(5), function() + Media.PlaySpeechNotification(player, "Reinforce") + Reinforcements.Reinforce(player, OrdosReinforcements, OrdosPath) + end) + + Trigger.AfterDelay(HarkonnenAttackDelay[Difficulty], function() + Media.DisplayMessage("WARNING: Large force approaching!", "Mentat") + end) +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + KillOrdosH = harkonnen.AddPrimaryObjective("Kill all Ordos units.") + KillOrdosS = smuggler.AddSecondaryObjective("Kill all Ordos units.") + DefendOutpost = smuggler.AddPrimaryObjective("Don't let the outpost to be captured or destroyed.") + CaptureOutpost = player.AddPrimaryObjective("Capture the Smuggler Outpost.") + KillHarkonnen = player.AddSecondaryObjective("Destroy the Harkonnen.") + + 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/ordos-04/rules.yaml b/mods/d2k/maps/ordos-04/rules.yaml new file mode 100644 index 0000000000..7f9a95f4ce --- /dev/null +++ b/mods/d2k/maps/ordos-04/rules.yaml @@ -0,0 +1,68 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: ordos04.lua, ordos04-AI.lua + MissionData: + Briefing: The Smugglers at Sietch Tabr must be neutralized. Capture the Outpost where their families have taken shelter as insurance. The children's lives will assure the loyalties of their fathers. Use an Engineer to enter and capture the building.\n\nThe Smugglers' new partners, the Harkonnen, may attempt to protect them. Harkonnen firepower is great, but we have recently acquired tanks that may counter this.\n\nEnsure our investment is used wisely.\n + BriefingVideo: O_BR04_E.VQA + MapOptions: + TechLevel: low + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +carryall.reinforce: + Cargo: + MaxWeight: 10 + +concreteb: + Buildable: + Prerequisites: ~disabled + +medium_gun_turret: + Buildable: + Prerequisites: ~disabled + +outpost: + Buildable: + Prerequisites: barracks + +quad: + Buildable: + Prerequisites: upgrade.light + +trooper: + Buildable: + Prerequisites: upgrade.barracks + +engineer: + Buildable: + Prerequisites: upgrade.barracks + +light_factory: + ProvidesPrerequisite@ordos: + Factions: ordos, smuggler + +heavy_factory: + ProvidesPrerequisite@ordos: + Factions: ordos, smuggler + +repair_pad: + Buildable: + Prerequisites: heavy_factory, upgrade.heavy + +mcv: + Buildable: + Prerequisites: repair_pad, upgrade.heavy + +upgrade.conyard: + Buildable: + Prerequisites: ~disabled diff --git a/mods/d2k/missions.yaml b/mods/d2k/missions.yaml index dd5ef68355..f9bd2004b5 100644 --- a/mods/d2k/missions.yaml +++ b/mods/d2k/missions.yaml @@ -12,6 +12,7 @@ Ordos Campaign: ./mods/d2k/maps/ordos-01b ./mods/d2k/maps/ordos-02a ./mods/d2k/maps/ordos-02b + ./mods/d2k/maps/ordos-04 Harkonnen Campaign: ./mods/d2k/maps/harkonnen-01a