Add initial standard library, and port shellmaps.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
local ants = OpenRA.GetRandomInteger(0, 51) == 0
|
||||
local ants = Utils.RandomInteger(0, 51) == 0
|
||||
|
||||
if ants then
|
||||
UnitTypes = { "ant", "ant", "ant" }
|
||||
@@ -29,85 +29,110 @@ else
|
||||
{ SovietWarFactory1, { "3tnk", "4tnk", "v2rl", "ttnk", "apc" } }
|
||||
}
|
||||
end
|
||||
ParadropPlaneType = "badr"
|
||||
ParadropWaypointCount = 8
|
||||
|
||||
SendSovietUnits = function(entryCell, unitTypes, interval)
|
||||
local units = Reinforcements.Reinforce(soviets, unitTypes, entryCell, entryCell, interval)
|
||||
local team = Team.New(units)
|
||||
Team.AddEventHandler(team.OnAllKilled, function()
|
||||
SendSovietUnits(entryCell, unitTypes, interval)
|
||||
end)
|
||||
Team.Do(team, function(a)
|
||||
Actor.OnDamaged(a, function()
|
||||
if not Actor.CargoIsEmpty(a) then
|
||||
Actor.Stop(a)
|
||||
Actor.UnloadCargo(a, true)
|
||||
ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4, Paradrop5, Paradrop6, Paradrop7, Paradrop8 }
|
||||
|
||||
BindActorTriggers = function(a)
|
||||
if a.HasProperty("Hunt") then
|
||||
if a.Owner == allies then
|
||||
Trigger.OnIdle(a, a.Hunt)
|
||||
else
|
||||
Trigger.OnIdle(a, function(a) a.AttackMove(AlliedTechnologyCenter.Location) end)
|
||||
end
|
||||
end
|
||||
|
||||
if a.HasProperty("HasPassengers") then
|
||||
Trigger.OnDamaged(a, function()
|
||||
if a.HasPassengers then
|
||||
a.Stop()
|
||||
a.UnloadPassengers()
|
||||
end
|
||||
end)
|
||||
Actor.OnIdle(a, function() Actor.AttackMove(a, AlliedTechnologyCenter.Location) end)
|
||||
end
|
||||
end
|
||||
|
||||
SendSovietUnits = function(entryCell, unitTypes, interval)
|
||||
local i = 0
|
||||
team = {}
|
||||
|
||||
Utils.Do(unitTypes, function(type)
|
||||
local a = Actor.Create(type, false, { Owner = soviets, Location = entryCell })
|
||||
BindActorTriggers(a)
|
||||
Trigger.AfterDelay(i * interval, function() a.IsInWorld = true end)
|
||||
table.insert(team, a)
|
||||
i = i + 1
|
||||
end)
|
||||
|
||||
Trigger.OnAllKilled(team, function() SendSovietUnits(entryCell, unitTypes, interval) end)
|
||||
end
|
||||
|
||||
ShipAlliedUnits = function()
|
||||
local transport, reinforcements = Reinforcements.Insert(allies, "lst", { "1tnk", "1tnk", "jeep", "2tnk", "2tnk" }, { LstEntry.Location, LstUnload.Location }, { LstEntry.Location })
|
||||
Utils.Do(reinforcements, function(a) Actor.OnIdle(a, Actor.Hunt) end)
|
||||
OpenRA.RunAfterDelay(60 * 25, ShipAlliedUnits)
|
||||
local transport = Actor.Create("lst", true, { Location = LstEntry.Location, Owner = allies })
|
||||
|
||||
Utils.Do({ "1tnk", "1tnk", "jeep", "2tnk", "2tnk" }, function(type)
|
||||
local a = Actor.Create(type, false, { Owner = allies })
|
||||
BindActorTriggers(a)
|
||||
transport.LoadPassenger(a)
|
||||
end)
|
||||
|
||||
transport.Move(LstUnload.Location)
|
||||
transport.UnloadPassengers()
|
||||
transport.Wait(50)
|
||||
transport.Move(LstEntry.Location)
|
||||
transport.Destroy()
|
||||
Trigger.AfterDelay(60 * 25, ShipAlliedUnits)
|
||||
end
|
||||
|
||||
ParadropSovietUnits = function()
|
||||
local lz = Map.GetNamedActor("Paradrop" .. OpenRA.GetRandomInteger(1, ParadropWaypointCount - 1)).Location
|
||||
local plane, passengers = SupportPowers.Paradrop(soviets, ParadropPlaneType, ParadropUnitTypes, Map.GetRandomEdgeCell(), lz)
|
||||
Utils.Do(passengers, function(a) Actor.OnIdle(a, Actor.Hunt) end)
|
||||
OpenRA.RunAfterDelay(35 * 25, ParadropSovietUnits)
|
||||
local lz = Utils.Random(ParadropWaypoints).Location
|
||||
local start = Utils.CenterOfCell(Map.RandomEdgeCell()) + WVec.New(0, 0, Actor.CruiseAltitude("badr"))
|
||||
local transport = Actor.Create("badr", true, { CenterPosition = start, Owner = soviets, Facing = (Utils.CenterOfCell(lz) - start).Facing })
|
||||
|
||||
Utils.Do(ParadropUnitTypes, function(type)
|
||||
local a = Actor.Create(type, false, { Owner = soviets })
|
||||
BindActorTriggers(a)
|
||||
transport.LoadPassenger(a)
|
||||
end)
|
||||
|
||||
transport.Paradrop(lz)
|
||||
Trigger.AfterDelay(35 * 25, ParadropSovietUnits)
|
||||
end
|
||||
|
||||
ProduceUnits = function()
|
||||
Utils.Do(ProducedUnitTypes, function(t)
|
||||
local factory = t[1]
|
||||
if not Actor.IsDead(factory) and not Production.PerFactoryQueueIsBusy(factory) then
|
||||
local unitType = t[2][OpenRA.GetRandomInteger(1, #t[2] + 1)]
|
||||
Production.BuildWithPerFactoryQueue(factory, unitType)
|
||||
end
|
||||
end)
|
||||
OpenRA.RunAfterDelay(15, ProduceUnits)
|
||||
ProduceUnits = function(t)
|
||||
local factory = t[1]
|
||||
if not factory.IsDead then
|
||||
local unitType = t[2][Utils.RandomInteger(1, #t[2] + 1)]
|
||||
factory.Wait(Actor.BuildTime(unitType))
|
||||
factory.Produce(unitType)
|
||||
factory.CallFunc(function() ProduceUnits(t) end)
|
||||
end
|
||||
end
|
||||
|
||||
SetupAlliedUnits = function()
|
||||
for a in Utils.Enumerate(Map.GetNamedActors()) do
|
||||
if Actor.Owner(a) == allies then
|
||||
if Actor.HasTrait(a, "LuaScriptEvents") then
|
||||
a:AddTrait(OpenRA.New("Invulnerable")) -- todo: replace
|
||||
end
|
||||
Actor.SetStance(a, "Defend")
|
||||
Utils.Do(Map.NamedActors, function(a)
|
||||
if a.Owner == allies and a.HasProperty("Invulnerable") then
|
||||
a.Invulnerable = true
|
||||
a.Stance = "Defend"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
SetupFactories = function()
|
||||
Utils.Do(ProducedUnitTypes, function(pair)
|
||||
Actor.OnProduced(pair[1], function(self, other, ex)
|
||||
Actor.Hunt(other)
|
||||
Actor.OnDamaged(other, function()
|
||||
if not Actor.CargoIsEmpty(other) then
|
||||
Actor.Stop(other)
|
||||
Actor.UnloadCargo(other, true)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
SetupFactories = function()
|
||||
Utils.Do(ProducedUnitTypes, function(pair)
|
||||
Trigger.OnProduction(pair[1], function(_, a) BindActorTriggers(a) end)
|
||||
end)
|
||||
end
|
||||
|
||||
ChronoshiftAlliedUnits = function()
|
||||
local cells = Map.ExpandFootprint({ ChronoshiftLocation.Location }, false)
|
||||
local cells = Utils.ExpandFootprint({ ChronoshiftLocation.Location }, false)
|
||||
local units = { }
|
||||
for i = 1, #cells do
|
||||
local unit = Actor.Create("2tnk", { Owner = allies, Facing = { 0, "Int32" } })
|
||||
Actor.OnIdle(unit, Actor.Hunt)
|
||||
table.insert(units, { unit, cells[i] })
|
||||
end
|
||||
SupportPowers.Chronoshift(units, Chronosphere)
|
||||
OpenRA.RunAfterDelay(60 * 25, ChronoshiftAlliedUnits)
|
||||
local unit = Actor.Create("2tnk", true, { Owner = allies, Facing = 0 })
|
||||
BindActorTriggers(unit)
|
||||
units[unit] = cells[i]
|
||||
end
|
||||
Chronosphere.Chronoshift(units)
|
||||
Trigger.AfterDelay(60 * 25, ChronoshiftAlliedUnits)
|
||||
end
|
||||
|
||||
ticks = 0
|
||||
@@ -117,33 +142,21 @@ Tick = function()
|
||||
ticks = ticks + 1
|
||||
|
||||
local t = (ticks + 45) % (360 * speed) * (math.pi / 180) / speed;
|
||||
OpenRA.SetViewportCenterPosition(WPos.op_Addition(viewportOrigin, WVec.New(19200 * math.sin(t), 20480 * math.cos(t))))
|
||||
|
||||
if ticks % 150 == 0 then
|
||||
Utils.Do(Actor.ActorsWithTrait("AttackBase"), function(a)
|
||||
if Actor.IsIdle(a) and not Map.IsNamedActor(a) and not Actor.IsDead(a) and Actor.IsInWorld(a) and (Actor.Owner(a) == soviets or Actor.Owner(a) == allies) then
|
||||
Actor.Hunt(a)
|
||||
end
|
||||
end)
|
||||
end
|
||||
Camera.Position = viewportOrigin + WVec.New(19200 * math.sin(t), 20480 * math.cos(t), 0)
|
||||
end
|
||||
|
||||
WorldLoaded = function()
|
||||
allies = OpenRA.GetPlayer("Allies")
|
||||
soviets = OpenRA.GetPlayer("Soviets")
|
||||
|
||||
viewportOrigin = OpenRA.GetViewportCenterPosition()
|
||||
|
||||
allies = Player.GetPlayer("Allies")
|
||||
soviets = Player.GetPlayer("Soviets")
|
||||
viewportOrigin = Camera.Position
|
||||
|
||||
SetupAlliedUnits()
|
||||
SetupFactories()
|
||||
ProduceUnits()
|
||||
ShipAlliedUnits()
|
||||
ParadropSovietUnits()
|
||||
OpenRA.RunAfterDelay(5 * 25, ChronoshiftAlliedUnits)
|
||||
|
||||
OpenRA.GiveCash(allies, 1000000)
|
||||
OpenRA.GiveCash(soviets, 1000000)
|
||||
|
||||
Trigger.AfterDelay(5 * 25, ChronoshiftAlliedUnits)
|
||||
Utils.Do(ProducedUnitTypes, ProduceUnits)
|
||||
|
||||
SendSovietUnits(Entry1.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry2.Location, UnitTypes, 50)
|
||||
SendSovietUnits(Entry3.Location, UnitTypes, 50)
|
||||
|
||||
@@ -315,9 +315,6 @@ Actors:
|
||||
Actor110: fcom
|
||||
Location: 106,44
|
||||
Owner: Soviets
|
||||
Actor111: silo
|
||||
Location: 96,28
|
||||
Owner: Soviets
|
||||
Actor106: fact
|
||||
Location: 114,43
|
||||
Owner: Soviets
|
||||
@@ -477,9 +474,6 @@ Actors:
|
||||
Actor105: brik
|
||||
Location: 94,70
|
||||
Owner: Allies
|
||||
Actor154: silo
|
||||
Location: 82,86
|
||||
Owner: Allies
|
||||
SovietBarracks1: barr
|
||||
Location: 109,48
|
||||
Owner: Soviets
|
||||
@@ -956,30 +950,6 @@ Actors:
|
||||
Actor195: hpad
|
||||
Location: 70,75
|
||||
Owner: Allies
|
||||
Actor75: oilb
|
||||
Location: 4,126
|
||||
Owner: Allies
|
||||
Actor334: oilb
|
||||
Location: 6,126
|
||||
Owner: Allies
|
||||
Actor335: oilb
|
||||
Location: 8,126
|
||||
Owner: Allies
|
||||
Actor336: oilb
|
||||
Location: 10,126
|
||||
Owner: Allies
|
||||
Actor337: oilb
|
||||
Location: 12,126
|
||||
Owner: Allies
|
||||
Actor338: oilb
|
||||
Location: 14,126
|
||||
Owner: Allies
|
||||
Actor339: oilb
|
||||
Location: 2,126
|
||||
Owner: Allies
|
||||
Actor340: oilb
|
||||
Location: 0,126
|
||||
Owner: Allies
|
||||
Actor341: dome
|
||||
Location: 63,73
|
||||
Owner: Allies
|
||||
@@ -1034,15 +1004,6 @@ Actors:
|
||||
Actor361: pbox.e1
|
||||
Location: 71,96
|
||||
Owner: Allies
|
||||
Actor55: silo
|
||||
Location: 81,85
|
||||
Owner: Allies
|
||||
Actor76: silo
|
||||
Location: 81,86
|
||||
Owner: Allies
|
||||
Actor159: silo
|
||||
Location: 82,85
|
||||
Owner: Allies
|
||||
Actor365: hpad
|
||||
Location: 64,78
|
||||
Owner: Allies
|
||||
@@ -1303,11 +1264,16 @@ Rules:
|
||||
-CrateSpawner:
|
||||
-SpawnMPUnits:
|
||||
-MPStartLocations:
|
||||
LuaScriptInterface:
|
||||
LuaScripts: desert-shellmap.lua
|
||||
ResourceType@ore:
|
||||
ValuePerUnit: 0
|
||||
LuaScript:
|
||||
Scripts: desert-shellmap.lua
|
||||
LoadWidgetAtGameStart:
|
||||
Widget: MAINMENU
|
||||
-StartGameNotification:
|
||||
OILB:
|
||||
CashTrickler:
|
||||
ShowTicks: false
|
||||
TRAN.Husk2:
|
||||
Burns:
|
||||
Damage: 0
|
||||
@@ -1316,24 +1282,6 @@ Rules:
|
||||
APC:
|
||||
Cargo:
|
||||
InitialUnits: e1, e1, e2, e3, e4
|
||||
TENT:
|
||||
ProductionQueue:
|
||||
Type: Infantry
|
||||
Group: Infantry
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
BARR:
|
||||
ProductionQueue:
|
||||
Type: Infantry
|
||||
Group: Infantry
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
WEAP:
|
||||
ProductionQueue:
|
||||
Type: Vehicle
|
||||
Group: Vehicle
|
||||
BuildSpeed: .4
|
||||
LowPowerSlowdown: 3
|
||||
Ant:
|
||||
Buildable:
|
||||
Owner: soviet
|
||||
@@ -1341,6 +1289,7 @@ Rules:
|
||||
Health:
|
||||
HP: 200
|
||||
^Vehicle:
|
||||
ScriptInvulnerable:
|
||||
GivesBounty:
|
||||
Percentage: 0
|
||||
GainsExperience:
|
||||
@@ -1349,6 +1298,7 @@ Rules:
|
||||
ArmorModifier:
|
||||
SpeedModifier:
|
||||
^Tank:
|
||||
ScriptInvulnerable:
|
||||
GivesBounty:
|
||||
Percentage: 0
|
||||
GainsExperience:
|
||||
@@ -1357,6 +1307,7 @@ Rules:
|
||||
ArmorModifier:
|
||||
SpeedModifier:
|
||||
^Infantry:
|
||||
ScriptInvulnerable:
|
||||
-Selectable: # short-term hack to make infantry not play die sounds until we fix RenderInfantry
|
||||
GivesBounty:
|
||||
Percentage: 0
|
||||
@@ -1366,12 +1317,15 @@ Rules:
|
||||
ArmorModifier:
|
||||
SpeedModifier:
|
||||
^Ship:
|
||||
ScriptInvulnerable:
|
||||
GivesBounty:
|
||||
Percentage: 0
|
||||
^Plane:
|
||||
ScriptInvulnerable:
|
||||
GivesBounty:
|
||||
Percentage: 0
|
||||
^Building:
|
||||
ScriptInvulnerable:
|
||||
GivesBounty:
|
||||
Percentage: 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user