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:
197
mods/ra/maps/desert-shellmap/desert-shellmap.lua
Normal file
197
mods/ra/maps/desert-shellmap/desert-shellmap.lua
Normal file
@@ -0,0 +1,197 @@
|
||||
--[[
|
||||
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.
|
||||
]]
|
||||
|
||||
-- Halloween easter egg
|
||||
if DateTime.CurrentMonth == 10 and DateTime.CurrentDay == 31 then
|
||||
UnitTypes = { "ant", "ant", "ant" }
|
||||
BeachUnitTypes = { "ant", "ant" }
|
||||
ProxyType = "powerproxy.parazombies"
|
||||
ProducedUnitTypes =
|
||||
{
|
||||
{ factory = AlliedBarracks1, types = { "e1", "e3" } },
|
||||
{ factory = AlliedBarracks2, types = { "e1", "e3" } },
|
||||
{ factory = SovietBarracks1, types = { "ant" } },
|
||||
{ factory = SovietBarracks2, types = { "ant" } },
|
||||
{ factory = SovietBarracks3, types = { "ant" } },
|
||||
{ factory = AlliedWarFactory1, types = { "jeep", "1tnk", "2tnk", "arty", "ctnk" } },
|
||||
{ factory = SovietWarFactory1, types = { "3tnk", "4tnk", "v2rl", "ttnk", "apc" } }
|
||||
}
|
||||
else
|
||||
UnitTypes = { "3tnk", "ftrk", "ttnk", "apc" }
|
||||
BeachUnitTypes = { "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4" }
|
||||
ProxyType = "powerproxy.paratroopers"
|
||||
ProducedUnitTypes =
|
||||
{
|
||||
{ factory = AlliedBarracks1, types = { "e1", "e3" } },
|
||||
{ factory = AlliedBarracks2, types = { "e1", "e3" } },
|
||||
{ factory = SovietBarracks1, types = { "dog", "e1", "e2", "e3", "e4", "shok" } },
|
||||
{ factory = SovietBarracks2, types = { "dog", "e1", "e2", "e3", "e4", "shok" } },
|
||||
{ factory = SovietBarracks3, types = { "dog", "e1", "e2", "e3", "e4", "shok" } },
|
||||
{ factory = AlliedWarFactory1, types = { "jeep", "1tnk", "2tnk", "arty", "ctnk" } },
|
||||
{ factory = SovietWarFactory1, types = { "3tnk", "4tnk", "v2rl", "ttnk", "apc" } }
|
||||
}
|
||||
end
|
||||
|
||||
ShipUnitTypes = { "1tnk", "1tnk", "jeep", "2tnk", "2tnk" }
|
||||
HelicopterUnitTypes = { "e1", "e1", "e1", "e1", "e3", "e3" };
|
||||
|
||||
ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4, Paradrop5, Paradrop6, Paradrop7, Paradrop8 }
|
||||
|
||||
Mig1Waypoints = { Mig11, Mig12, Mig13, Mig14 }
|
||||
Mig2Waypoints = { Mig21, Mig22, Mig23, Mig24 }
|
||||
|
||||
BindActorTriggers = function(a)
|
||||
if a.HasProperty("Hunt") then
|
||||
if a.Owner == Allies then
|
||||
Trigger.OnIdle(a, function(a)
|
||||
if a.IsInWorld then
|
||||
a.Hunt()
|
||||
end
|
||||
end)
|
||||
else
|
||||
Trigger.OnIdle(a, function(a)
|
||||
if a.IsInWorld then
|
||||
a.AttackMove(AlliedTechnologyCenter.Location)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
if a.HasProperty("HasPassengers") then
|
||||
Trigger.OnPassengerExited(a, function(t, p)
|
||||
BindActorTriggers(p)
|
||||
end)
|
||||
|
||||
Trigger.OnDamaged(a, function()
|
||||
if a.HasPassengers then
|
||||
a.Stop()
|
||||
a.UnloadPassengers()
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
SendSovietUnits = function(entryCell, unitTypes, interval)
|
||||
local units = Reinforcements.Reinforce(Soviets, unitTypes, { entryCell }, interval)
|
||||
Utils.Do(units, function(unit)
|
||||
BindActorTriggers(unit)
|
||||
end)
|
||||
Trigger.OnAllKilled(units, function() SendSovietUnits(entryCell, unitTypes, interval) end)
|
||||
end
|
||||
|
||||
SendMigs = function(waypoints)
|
||||
local migEntryPath = { waypoints[1].Location, waypoints[2].Location }
|
||||
local migs = Reinforcements.Reinforce(Soviets, { "mig" }, migEntryPath, 4)
|
||||
Utils.Do(migs, function(mig)
|
||||
mig.Move(waypoints[3].Location)
|
||||
mig.Move(waypoints[4].Location)
|
||||
mig.Destroy()
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(40), function() SendMigs(waypoints) end)
|
||||
end
|
||||
|
||||
ShipAlliedUnits = function()
|
||||
local units = Reinforcements.ReinforceWithTransport(Allies, "lst",
|
||||
ShipUnitTypes, { LstEntry.Location, LstUnload.Location }, { LstEntry.Location })[2]
|
||||
|
||||
Utils.Do(units, function(unit)
|
||||
BindActorTriggers(unit)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(60), ShipAlliedUnits)
|
||||
end
|
||||
|
||||
--- @param hpad actor
|
||||
InsertAlliedChinookReinforcements = function(entry, hpad)
|
||||
local units = Reinforcements.ReinforceWithTransport(Allies, "tran",
|
||||
HelicopterUnitTypes, { entry.Location, hpad.Location + CVec.New(1, 2) }, { entry.Location })[2]
|
||||
|
||||
Utils.Do(units, function(unit)
|
||||
BindActorTriggers(unit)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(60), function() InsertAlliedChinookReinforcements(entry, hpad) end)
|
||||
end
|
||||
|
||||
ParadropSovietUnits = function()
|
||||
local lz = Utils.Random(ParadropWaypoints)
|
||||
local aircraft = PowerProxy.TargetParatroopers(lz.CenterPosition)
|
||||
|
||||
Utils.Do(aircraft, function(a)
|
||||
Trigger.OnPassengerExited(a, function(t, p)
|
||||
BindActorTriggers(p)
|
||||
end)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(35), ParadropSovietUnits)
|
||||
end
|
||||
|
||||
ProduceUnits = function(t)
|
||||
local factory = t.factory
|
||||
if not factory.IsDead then
|
||||
local unitType = t.types[Utils.RandomInteger(1, #t.types + 1)]
|
||||
factory.Wait(Actor.BuildTime(unitType))
|
||||
factory.Produce(unitType)
|
||||
factory.CallFunc(function() ProduceUnits(t) end)
|
||||
end
|
||||
end
|
||||
|
||||
SetupAlliedUnits = function()
|
||||
Utils.Do(Map.NamedActors, function(a)
|
||||
if a.Owner == Allies and a.HasProperty("AcceptsCondition") and a.AcceptsCondition("unkillable") then
|
||||
a.GrantCondition("unkillable")
|
||||
a.Stance = "Defend"
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
SetupFactories = function()
|
||||
Utils.Do(ProducedUnitTypes, function(production)
|
||||
Trigger.OnProduction(production.factory, function(_, a) BindActorTriggers(a) end)
|
||||
end)
|
||||
end
|
||||
|
||||
ChronoshiftAlliedUnits = function()
|
||||
local cells = Utils.ExpandFootprint({ ChronoshiftLocation.Location }, false)
|
||||
local units = {}
|
||||
for i = 1, #cells do
|
||||
local unit = Actor.Create("2tnk", true, { Owner = Allies, Facing = Angle.North })
|
||||
BindActorTriggers(unit)
|
||||
units[unit] = cells[i]
|
||||
end
|
||||
Chronosphere.Chronoshift(units)
|
||||
Trigger.AfterDelay(DateTime.Seconds(60), ChronoshiftAlliedUnits)
|
||||
end
|
||||
|
||||
WorldLoaded = function()
|
||||
Allies = Player.GetPlayer("Allies")
|
||||
Soviets = Player.GetPlayer("Soviets")
|
||||
|
||||
SetupAlliedUnits()
|
||||
SetupFactories()
|
||||
ShipAlliedUnits()
|
||||
InsertAlliedChinookReinforcements(Chinook1Entry, HeliPad1)
|
||||
InsertAlliedChinookReinforcements(Chinook2Entry, HeliPad2)
|
||||
PowerProxy = Actor.Create(ProxyType, false, { Owner = Soviets })
|
||||
ParadropSovietUnits()
|
||||
Trigger.AfterDelay(DateTime.Seconds(5), ChronoshiftAlliedUnits)
|
||||
Utils.Do(ProducedUnitTypes, ProduceUnits)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(30), function() SendMigs(Mig1Waypoints) end)
|
||||
Trigger.AfterDelay(DateTime.Seconds(30), function() SendMigs(Mig2Waypoints) end)
|
||||
|
||||
SendSovietUnits(Entry1.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry2.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry3.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry4.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry5.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry6.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry7.Location, BeachUnitTypes, 15)
|
||||
end
|
||||
Reference in New Issue
Block a user