Fork from OpenRA/OpenRA with one-click launch script (start-ra.cmd) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
161 lines
5.5 KiB
Lua
161 lines
5.5 KiB
Lua
--[[
|
|
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
|