From 76294c827384c69b08f2f919dde5e76dd0d2c8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 24 Jul 2016 10:40:24 +0200 Subject: [PATCH] Port the Co-Op Allies04 map to Lua. --- OpenRA.sln | 1 + mods/ra/maps/infiltration/infiltration.lua | 383 +++++ mods/ra/maps/infiltration/map.bin | Bin 0 -> 81937 bytes mods/ra/maps/infiltration/map.png | Bin 0 -> 17580 bytes mods/ra/maps/infiltration/map.yaml | 1788 ++++++++++++++++++++ mods/ra/maps/infiltration/rules.yaml | 228 +++ 6 files changed, 2400 insertions(+) create mode 100644 mods/ra/maps/infiltration/infiltration.lua create mode 100644 mods/ra/maps/infiltration/map.bin create mode 100644 mods/ra/maps/infiltration/map.png create mode 100644 mods/ra/maps/infiltration/map.yaml create mode 100644 mods/ra/maps/infiltration/rules.yaml diff --git a/OpenRA.sln b/OpenRA.sln index dddabd21dd..c28c02e405 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -73,6 +73,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\fort-lonestar\fort-lonestar-AI.lua = mods\ra\maps\fort-lonestar\fort-lonestar-AI.lua mods\ra\maps\fort-lonestar\fort-lonestar.lua = mods\ra\maps\fort-lonestar\fort-lonestar.lua mods\ra\maps\intervention\intervention.lua = mods\ra\maps\intervention\intervention.lua + mods\ra\maps\infiltration\infiltration.lua = mods\ra\maps\infiltration\infiltration.lua mods\ra\maps\monster-tank-madness\monster-tank-madness.lua = mods\ra\maps\monster-tank-madness\monster-tank-madness.lua mods\ra\maps\evacuation\evacuation.lua = mods\ra\maps\evacuation\evacuation.lua mods\ra\maps\exodus\exodus.lua = mods\ra\maps\exodus\exodus.lua diff --git a/mods/ra/maps/infiltration/infiltration.lua b/mods/ra/maps/infiltration/infiltration.lua new file mode 100644 index 0000000000..c82b1c986e --- /dev/null +++ b/mods/ra/maps/infiltration/infiltration.lua @@ -0,0 +1,383 @@ +Difficulty = Map.LobbyOption("difficulty") + +if Difficulty == "hard" then + TimerTicks = DateTime.Minutes(25) +elseif Difficulty == "normal" then + TimerTicks = DateTime.Minutes(28) +else + TimerTicks = DateTime.Minutes(31) +end + +Announcements = +{ + { speech = "TwentyMinutesRemaining", delay = DateTime.Minutes(20) }, + { speech = "TenMinutesRemaining", delay = DateTime.Minutes(10) }, + { speech = "WarningFiveMinutesRemaining", delay = DateTime.Minutes(5) }, + { speech = "WarningFourMinutesRemaining", delay = DateTime.Minutes(4) }, + { speech = "WarningThreeMinutesRemaining", delay = DateTime.Minutes(3) }, + { speech = "WarningTwoMinutesRemaining", delay = DateTime.Minutes(2) }, + { speech = "WarningOneMinuteRemaining", delay = DateTime.Minutes(1) } +} + +TownAttackers = { TownAttacker1, TownAttacker2, TownAttacker3, TownAttacker4, TownAttacker5, TownAttacker6, TownAttacker7 } + +PatrolPoints1 = { PatrolPoint11.Location, PatrolPoint12.Location, PatrolPoint13.Location, PatrolPoint14.Location, PatrolPoint15.Location } +PatrolPoints2 = { PatrolPoint21.Location, PatrolPoint22.Location, PatrolPoint23.Location, PatrolPoint24.Location, PatrolPoint25.Location } +PatrolPoints3 = { PatrolPoint31.Location, PatrolPoint32.Location, PatrolPoint33.Location, PatrolPoint34.Location } +PatrolPoints4 = { PatrolPoint41.Location, PatrolPoint42.Location, PatrolPoint43.Location, PatrolPoint44.Location, PatrolPoint45.Location } + +Patrol1 = { "e1", "e1", "e1", "e1", "e1" } +Patrol2 = { "e1", "dog.patrol", "dog.patrol" } +Patrol3 = { "e1", "e1", "dog.patrol" } + +TransportType = "lst.unselectable.unloadonly" + +SecureLabFailed = function() + Utils.Do(humans, function(player) + if player then + player.MarkFailedObjective(secureLab) + end + end) +end + +timerStarted = false +StartTimer = function() + Utils.Do(humans, function(player) + if player.IsLocalPlayer then + TimerColor = player.Color + end + end) + CountDownTimerAnnouncements() + ticked = TimerTicks + timerStarted = true + Trigger.AfterDelay(DateTime.Seconds(3), function() + Utils.Do(humans, function(player) + Media.PlaySpeechNotification(player, "TimerStarted") + end) + end) +end + +CountDownTimerAnnouncements = function() + for i = #Announcements, 1, -1 do + local delay = TimerTicks - Announcements[i].delay + Trigger.AfterDelay(delay, function() + if not labSecured then + Utils.Do(humans, function(player) + Media.PlaySpeechNotification(player, Announcements[i].speech) + end) + end + end) + end +end + +reinforcementsHaveArrived = false +LabInfiltrated = function() + Utils.Do(humans, function(player) + if player then + secureLab = player.AddPrimaryObjective("Eliminate all units guarding the lab.") + destroyBase = player.AddPrimaryObjective("Destroy the soviet installation.") + player.MarkCompletedObjective(infiltrateLab) + Trigger.ClearAll(Lab) + Trigger.AfterDelay(0, function() + Trigger.OnKilled(Lab, SecureLabFailed) + end) + end + end) + + Camera.Position = ReinforcementsUnloadPoint.CenterPosition + local entryPath = { ReinforcementsEntryPoint.Location, ReinforcementsUnloadPoint.Location } + local exit = { ReinforcementsEntryPoint.Location } + + mcvActors = { "mcv" } + if player2 then + mcvActors = { "mcv", "mcv" } + end + + local reinforcements = Reinforcements.ReinforceWithTransport(allies, TransportType, mcvActors, entryPath, exit) + local mcvs = reinforcements[2] + + Trigger.OnAddedToWorld(mcvs[1], function(mcvUnloaded) + + -- Don't call this twice (because of the owner change) + if mcvUnloaded.Owner == player1 then + return + end + + mcvUnloaded.Owner = player1 + if not player2 then + player1.Cash = 5000 + end + Media.PlaySpeechNotification(player, "AlliedReinforcementsSouth") + StartTimer() + HijackTruck.Destroy() + reinforcementsHaveArrived = true + end) + + if player2 then + Trigger.OnAddedToWorld(mcvs[2], function(mcvUnloaded) + + -- Don't call this twice (because of the owner change) + if mcvUnloaded.Owner == player2 then + return + end + + mcvUnloaded.Owner = player2 + player1.Cash = 2500 + player2.Cash = 2500 + end) + end + + Utils.Do(humans, function(player) + for i = 0, 2 do + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(player, "AlertBuzzer") + end) + end + end) + + local attackPoint = BridgeAttackPoint.CenterPosition + local radius = WDist.FromCells(5) + local bridge = Map.ActorsInCircle(attackPoint, radius, function(actor) + return actor.Type == "br3" + end)[1] + BridgeTank.Attack(bridge, true, true) +end + +InfiltrateLabFailed = function() + Utils.Do(humans, function(player) + if player then + player.MarkFailedObjective(infiltrateLab) + end + end) +end + +ChangeOwnerOnAddedToWorld = function(actor, newOwner) + Trigger.OnAddedToWorld(actor, function(unloadedActor) + unloadedActor.Owner = newOwner + Trigger.Clear(unloadedActor, "OnAddedToWorld") + end) +end + +InsertSpies = function() + Utils.Do(humans, function(player) + if player then + infiltrateLab = player.AddPrimaryObjective("Get our spy into the laboratory undetected.") + end + end) + + Trigger.OnKilled(Lab, function() + if not player1.IsObjectiveCompleted(infiltrateLab) then + InfiltrateLabFailed() + end + end) + + -- The delay isn't purely cosmetic, but also prevents a System.InvalidOperationException + -- "Collection was modified after the enumerator was instantiated." in tick_activities + local infiltrationCount = 0 + Trigger.OnInfiltrated(Lab, function() + infiltrationCount = infiltrationCount + 1 + + if (player2 and infiltrationCount == 2) or not player2 then + Trigger.AfterDelay(DateTime.Seconds(3), LabInfiltrated) + end + end) + + spyActors = { "spy.strong" } + if player2 then + spyActors = { "spy.strong", "spy.strong" } + end + + local entryPath = { SpyReinforcementsEntryPoint.Location, SpyReinforcementsUnloadPoint.Location } + local exit = { SpyReinforcementsExitPoint.Location } + local reinforcements = Reinforcements.ReinforceWithTransport(allies, TransportType, spyActors, entryPath, exit) + + local transport = reinforcements[1] + Camera.Position = transport.CenterPosition + + spies = reinforcements[2] + Trigger.OnAnyKilled(spies, InfiltrateLabFailed) + + ChangeOwnerOnAddedToWorld(spies[1], player1) + + if player2 then + ChangeOwnerOnAddedToWorld(spies[2], player2) + end +end + +IdleHunt = function(unit) + Trigger.OnIdle(unit, unit.Hunt) +end + +StopHunt = function(unit) + if not unit.IsDead then + Trigger.Clear(unit, "OnIdle") + end +end + +AttackTown = function() + Utils.Do(TownAttackers, IdleHunt) + + Trigger.OnRemovedFromWorld(Hospital, function() + Utils.Do(TownAttackers, StopHunt) + end) +end + +CapOre = function(player) + if player.Resources > player.ResourceCapacity * 0.9 then + player.Resources = player.ResourceCapacity * 0.8 + end +end + +NewPatrol = function(actorType, start, waypoints) + local guard = Actor.Create(actorType, true, { Owner = soviets, Location = start }) + guard.Patrol(waypoints, true, Utils.RandomInteger(50, 75)) +end + +SetupPatrols = function() + Utils.Do(Patrol1, function(patrol1) NewPatrol(patrol1, PatrolPoints1[1], PatrolPoints1) end) + Utils.Do(Patrol2, function(patrol2) NewPatrol(patrol2, PatrolPoints1[3], PatrolPoints1) end) + Utils.Do(Patrol2, function(patrol3) NewPatrol(patrol3, PatrolPoints3[1], PatrolPoints3) end) + Utils.Do(Patrol2, function(patrol4) NewPatrol(patrol4, PatrolPoints4[1], PatrolPoints4) end) + + if Difficulty == "hard" then + Utils.Do(Patrol3, function(patrol5) NewPatrol(patrol5, PatrolPoints2[1], PatrolPoints2) end) + end + + local checkpoint = { BaseGuardTruckPos.Location } + Trigger.OnEnteredFootprint(checkpoint, function(a, id) + Trigger.RemoveFootprintTrigger(id) + if not BaseGuard.IsDead then + BaseGuard.ScriptedMove(BaseGuardMovePos.Location) + end + end) +end + +ticked = 0 +SecureLabTimer = function() + if not timerStarted or labSecured then + return + end + + if ticked > 0 then + UserInterface.SetMissionText("Secure lab in: " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked <= 0 then + TimerColor = soviets.Color + UserInterface.SetMissionText("The Soviet research laboratory was not secured in time.", TimerColor) + SecureLabFailed() + end +end + +SovietBaseMaintenanceSetup = function() + local sovietbuildings = Utils.Where(Map.NamedActors, function(a) + return a.Owner == soviets + and a.HasProperty("StartBuildingRepairs") and a.HasProperty("Sell") + end) + + -- This includes killed, captured (actor is temporarily removed) and sold. + Trigger.OnAllRemovedFromWorld(sovietbuildings, function() + Utils.Do(humans, function(player) + player.MarkCompletedObjective(destroyBase) + end) + end) + + Utils.Do(sovietbuildings, function(sovietbuilding) + Trigger.OnDamaged(sovietbuilding, function(building) + if building.Owner ~= soviets then + return + end + if building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + if building.Health < building.MaxHealth * 1/4 then + building.Sell() + end + end) + end) +end + +CheckPlayerDefeat = function() + if not reinforcementsHaveArrived then + return + end + + Utils.Do(humans, function(player) + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(destroyBase) + end + end) +end + +labSecured = false +CheckLabSecured = function() + if not reinforcementsHaveArrived or labSecured then + return + end + + if player1.HasNoRequiredUnits() or (player2 and player2.HasNoRequiredUnits()) then + Utils.Do(humans, function(player) + player.MarkFailedObjective(secureLab) + end) + end + + local radius = WDist.FromCells(10) + local labGuards = Utils.Where(Map.ActorsInCircle(LabWaypoint.CenterPosition, radius), function(a) + return a.Owner == soviets and a.HasProperty("Move") + end) + + if #labGuards < 1 then + labSecured = true + Utils.Do(humans, function(player) + player.MarkCompletedObjective(secureLab) + end) + UserInterface.SetMissionText("") + end +end + +Tick = function() + CapOre(soviets) + SecureLabTimer() + CheckLabSecured() + CheckPlayerDefeat() +end + +WorldLoaded = function() + allies = Player.GetPlayer("Allies") + neutral = Player.GetPlayer("Neutral") + creeps = Player.GetPlayer("Creeps") + soviets = Player.GetPlayer("Soviets") + + player1 = Player.GetPlayer("Allies1") + player2 = Player.GetPlayer("Allies2") + humans = { player1, player2 } + + Utils.Do(humans, function(player) + if player and player.IsLocalPlayer then + Trigger.OnObjectiveAdded(player, function(p, id) + local objectiveType = string.lower(p.GetObjectiveType(id)) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. objectiveType .. " objective") + end) + + 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.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + end + end) + + InsertSpies() + AttackTown() + SetupPatrols() + SovietBaseMaintenanceSetup() +end diff --git a/mods/ra/maps/infiltration/map.bin b/mods/ra/maps/infiltration/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..3fc82e322551ee55a4f25e32655db14584cb5399 GIT binary patch literal 81937 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