Initial commit: OpenRA game engine
Fork from OpenRA/OpenRA with one-click launch script (start-ra.cmd) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
160
mods/ra/maps/sarin-gas-1-crackdown/crackdown.lua
Normal file
160
mods/ra/maps/sarin-gas-1-crackdown/crackdown.lua
Normal file
@@ -0,0 +1,160 @@
|
||||
--[[
|
||||
Copyright (c) The OpenRA Developers and Contributors
|
||||
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.
|
||||
]]
|
||||
MammothPath = { Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location }
|
||||
ConvoyTrucks = { Truck1, Truck2, Truck3, Truck4, Truck5, IntroTruck1, IntroTruck2 }
|
||||
IntroTrucks = { IntroTruck1, IntroTruck2 }
|
||||
TruckEscapeNorth = { EscapeNorth1, EscapeNorth2, EscapeNorth3, EscapeNorth4, EscapeNorth5, EscapeNorth6, EscapeNorth7, EscapeNorth8, EscapeNorth9, EscapeNorth10 }
|
||||
TruckEscapeSouth = { EscapeSouth1, EscapeSouth2, EscapeSouth3, EscapeSouth4, EscapeSouth5 }
|
||||
SovAttackStart = { StartTank, StartRifle1, StartRifle2, StartRifle3, StartRifle4 }
|
||||
SovAttackStart2 = { StartRifle5, StartRifle6, StartGren }
|
||||
RunAway = { IntroTruck2, StartRifle3, StartRifle4 }
|
||||
GreeceRifles = { GreeceRifle1, GreeceRifle2, GreeceRifle3, GreeceRifle4, GreeceRifle5 }
|
||||
CombatTeam1 = { "mnly", "spy", "spy", "mcv" }
|
||||
CombatTeam2 =
|
||||
{
|
||||
easy = { "2tnk", "2tnk", "2tnk", "e3", "e3", "e3" },
|
||||
normal = { "e3", "e3", "e3", "2tnk", "1tnk" },
|
||||
hard = { "e3", "e3", "e3", "1tnk" }
|
||||
}
|
||||
|
||||
SetupTriggers = function()
|
||||
Trigger.OnInfiltrated(RadarDome, function()
|
||||
Greece.MarkCompletedObjective(RadarSpyObjective)
|
||||
Actor.Create("camera", true, { Owner = Greece, Location = Cam1.Location })
|
||||
Actor.Create("camera", true, { Owner = Greece, Location = Cam2.Location })
|
||||
Actor.Create("camera", true, { Owner = Greece, Location = Cam3.Location })
|
||||
Actor.Create("camera", true, { Owner = Greece, Location = Cam4.Location })
|
||||
end)
|
||||
|
||||
Trigger.OnKilled(RadarDome, function()
|
||||
if not Greece.IsObjectiveCompleted(RadarSpyObjective) then
|
||||
Greece.MarkFailedObjective(RadarSpyObjective)
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnAllKilled(ConvoyTrucks, function()
|
||||
Greece.MarkCompletedObjective(DestroyAllTrucksObjective)
|
||||
end)
|
||||
end
|
||||
|
||||
MissionStart = function()
|
||||
Trigger.AfterDelay(DateTime.Seconds(1), function()
|
||||
Reinforcements.Reinforce(Greece, CombatTeam1, { TruckEscapeCenter.Location, DefaultCameraPosition.Location })
|
||||
local StartCamera = Actor.Create("camera", true, { Owner = Greece, Location = DefaultCameraPosition.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
StartCamera.Destroy()
|
||||
end)
|
||||
end)
|
||||
|
||||
Utils.Do(GreeceRifles, function(actor)
|
||||
actor.Move(DefaultCameraPosition.Location)
|
||||
end)
|
||||
|
||||
Utils.Do(SovAttackStart, function(actor)
|
||||
actor.AttackMove(DefaultCameraPosition.Location)
|
||||
end)
|
||||
|
||||
Utils.Do(IntroTrucks, function(truck)
|
||||
truck.Move(TruckEscapeCenter.Location)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(3), function()
|
||||
Utils.Do(RunAway, function(actor)
|
||||
if actor.IsDead then
|
||||
return
|
||||
else
|
||||
actor.Stop()
|
||||
actor.Move(Cam4.Location)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
Utils.Do(SovAttackStart2, function(actor)
|
||||
if actor.IsDead then
|
||||
return
|
||||
else
|
||||
actor.AttackMove(DefaultCameraPosition.Location)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Minutes(1), function()
|
||||
CombatTeam2 = CombatTeam2[Difficulty]
|
||||
Reinforcements.Reinforce(Greece, CombatTeam2, { TruckEscapeCenter.Location, DefaultCameraPosition.Location })
|
||||
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived")
|
||||
end)
|
||||
end
|
||||
|
||||
SendPatrol = function(mammoth)
|
||||
if not mammoth.IsDead then
|
||||
mammoth.Patrol(MammothPath, true, 20)
|
||||
end
|
||||
end
|
||||
|
||||
MoveTruckEscapeRoute = function(truck, route)
|
||||
if truck.IsDead then
|
||||
return
|
||||
else
|
||||
Media.DisplayMessage(UserInterface.GetFluentMessage("convoy-truck-escaping"))
|
||||
Media.PlaySoundNotification(Greece, "AlertBleep")
|
||||
Utils.Do(route, function(waypoint)
|
||||
truck.Move(waypoint.Location)
|
||||
end)
|
||||
|
||||
Trigger.OnIdle(truck, function()
|
||||
if truck.Location == route[#route].Location then
|
||||
truck.Destroy()
|
||||
Greece.MarkFailedObjective(DestroyAllTrucksObjective)
|
||||
else
|
||||
truck.Move(route[#route].Location)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
Tick = function()
|
||||
USSR.Cash = 5000
|
||||
BadGuy.Cash = 5000
|
||||
|
||||
if USSR.HasNoRequiredUnits() and BadGuy.HasNoRequiredUnits() then
|
||||
Greece.MarkCompletedObjective(KillAllObjective)
|
||||
end
|
||||
|
||||
if Greece.HasNoRequiredUnits() then
|
||||
USSR.MarkCompletedObjective(USSRobjective)
|
||||
end
|
||||
end
|
||||
|
||||
WorldLoaded = function()
|
||||
Greece = Player.GetPlayer("Greece")
|
||||
USSR = Player.GetPlayer("USSR")
|
||||
BadGuy = Player.GetPlayer("BadGuy")
|
||||
|
||||
InitObjectives(Greece)
|
||||
|
||||
DestroyAllTrucksObjective = AddPrimaryObjective(Greece, "prevent-soviet-trucks-escaping")
|
||||
KillAllObjective = AddPrimaryObjective(Greece, "clear-sector-soviet-presence")
|
||||
RadarSpyObjective = AddSecondaryObjective(Greece, "infiltrate-radar-reveal-escape-routes")
|
||||
USSRobjective = USSR.AddObjective("")
|
||||
|
||||
ActivateAI()
|
||||
SetupTriggers()
|
||||
MissionStart()
|
||||
|
||||
Camera.Position = DefaultCameraPosition.CenterPosition
|
||||
|
||||
Trigger.AfterDelay(DateTime.Minutes(5), function() SendPatrol(PatrolMammoth) end)
|
||||
Trigger.AfterDelay(DateTime.Minutes(5), function() MoveTruckEscapeRoute(Truck1, TruckEscapeNorth) end)
|
||||
Trigger.AfterDelay(DateTime.Minutes(9), function() MoveTruckEscapeRoute(Truck2, TruckEscapeNorth) end)
|
||||
Trigger.AfterDelay(DateTime.Minutes(12), function() MoveTruckEscapeRoute(Truck3, TruckEscapeSouth) end)
|
||||
Trigger.AfterDelay(DateTime.Minutes(15), function() MoveTruckEscapeRoute(Truck4, TruckEscapeNorth) end)
|
||||
Trigger.AfterDelay(DateTime.Minutes(17), function() MoveTruckEscapeRoute(Truck5, TruckEscapeSouth) end)
|
||||
Trigger.AfterDelay(DateTime.Minutes(18), function() MoveTruckEscapeRoute(IntroTruck2, TruckEscapeSouth) end)
|
||||
end
|
||||
Reference in New Issue
Block a user