diff --git a/OpenRA.Mods.RA/Missions/DefaultShellmapScript.cs b/OpenRA.Mods.RA/Missions/DefaultShellmapScript.cs deleted file mode 100644 index 9ce3ee9cef..0000000000 --- a/OpenRA.Mods.RA/Missions/DefaultShellmapScript.cs +++ /dev/null @@ -1,72 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * 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. For more information, - * see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Air; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA -{ - class DefaultShellmapScriptInfo : TraitInfo { } - - class DefaultShellmapScript: IWorldLoaded, ITick - { - Dictionary Actors; - static WPos ViewportOrigin; - WorldRenderer worldRenderer; - - public void WorldLoaded(World w, WorldRenderer wr) - { - worldRenderer = wr; - var b = w.Map.Bounds; - ViewportOrigin = new CPos(b.Left + b.Width/2, b.Top + b.Height/2).CenterPosition; - worldRenderer.Viewport.Center(ViewportOrigin); - - Actors = w.WorldActor.Trait().Actors; - Sound.SoundVolumeModifier = 0.25f; - } - - int ticks = 0; - float speed = 4f; - public void Tick(Actor self) - { - var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed; - var offset = new float2(15360, 10240) * float2.FromAngle((float)t); - worldRenderer.Viewport.Center(ViewportOrigin + new WVec((int)offset.X, (int)offset.Y, 0)); - - if (ticks == 50) - { - Scripting.RASpecialPowers.Chronoshift(self.World, new List>() - { - Pair.New(Actors["ca1"], new CPos(96, 70)), - Pair.New(Actors["ca2"], new CPos(98, 72)) - }, Actors["pdox"], -1, false); - } - - if (ticks == 100) - Actors["mslo1"].Trait().Activate(Actors["mslo1"], new Order() { TargetLocation = new CPos(98, 52) }); - if (ticks == 140) - Actors["mslo2"].Trait().Activate(Actors["mslo2"], new Order() { TargetLocation = new CPos(95, 54) }); - if (ticks == 180) - Actors["mslo3"].Trait().Activate(Actors["mslo3"], new Order() { TargetLocation = new CPos(95, 49) }); - - if (ticks == 430) - { - Actors["mig1"].Trait().AttackTarget(Target.FromActor(Actors["greeceweap"]), false, true); - Actors["mig2"].Trait().AttackTarget(Target.FromActor(Actors["greeceweap"]), false, true); - } - - ticks++; - } - } -} diff --git a/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs b/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs deleted file mode 100644 index 31a1d2f2d5..0000000000 --- a/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs +++ /dev/null @@ -1,319 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * 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. For more information, - * see COPYING. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Air; -using OpenRA.Mods.RA.Buildings; -using OpenRA.Mods.RA.Move; -using OpenRA.Mods.RA.Scripting; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA.Missions -{ - class DesertShellmapScriptInfo : TraitInfo, Requires { } - - class DesertShellmapScript : ITick, IWorldLoaded - { - World world; - WorldRenderer worldRenderer; - Player allies; - Player soviets; - Player neutral; - - WPos[] viewportTargets; - WPos viewportTarget; - int viewportTargetNumber; - WPos viewportOrigin; - int mul; - int div = 400; - int waitTicks = 0; - - int nextCivilianMove = 1; - - Actor attackLocation; - Actor coastWP1; - Actor coastWP2; - int coastUnitsLeft; - static readonly string[] CoastUnits = { "e1", "e1", "e2", "e3", "e4" }; - - Actor paradrop1LZ; - Actor paradrop1Entry; - Actor paradrop2LZ; - Actor paradrop2Entry; - static readonly string[] ParadropUnits = { "e1", "e1", "e1", "e2", "e2" }; - - Actor offmapAttackerSpawn1; - Actor offmapAttackerSpawn2; - Actor offmapAttackerSpawn3; - Actor[] offmapAttackerSpawns; - static readonly string[] OffmapAttackers = { "ftrk", "apc", "ttnk", "1tnk" }; - static readonly string[] AttackerCargo = { "e1", "e2", "e3", "e4" }; - - static readonly string[] HeavyTanks = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk" }; - Actor heavyTankSpawn; - Actor heavyTankWP; - static readonly string[] MediumTanks = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "2tnk" }; - Actor mediumTankChronoSpawn; - - static readonly string[] ChinookCargo = { "e1", "e1", "e1", "e1", "e3", "e3" }; - - static readonly string[] InfantryProductionUnits = { "e1", "e3" }; - static readonly string[] VehicleProductionUnits = { "jeep", "1tnk", "2tnk", "arty" }; - Actor alliedBarracks; - Actor alliedWarFactory; - - Dictionary actors; - - Actor chronosphere; - Actor ironCurtain; - - CPos[] mig1Waypoints; - CPos[] mig2Waypoints; - - Actor chinook1Entry; - Actor chinook1LZ; - Actor chinook2Entry; - Actor chinook2LZ; - - public void Tick(Actor self) - { - if (world.FrameNumber % 100 == 0) - { - var actor = OffmapAttackers.Random(world.SharedRandom); - var spawn = offmapAttackerSpawns.Random(world.SharedRandom); - var u = world.CreateActor(actor, soviets, spawn.Location, Traits.Util.GetFacing(attackLocation.Location - spawn.Location, 0)); - var cargo = u.TraitOrDefault(); - if (cargo != null) - { - while (cargo.HasSpace(1)) - cargo.Load(u, world.CreateActor(false, AttackerCargo.Random(world.SharedRandom), soviets, null, null)); - } - u.QueueActivity(new AttackMove.AttackMoveActivity(u, new Move.Move(attackLocation.Location, 0))); - } - - if (world.FrameNumber % 25 == 0) - { - foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.IsIdle && !a.IsDead() - && a.HasTrait() && a.HasTrait()).Except(actors.Values)) - MissionUtils.AttackNearestLandActor(true, actor, actor.Owner == soviets ? allies : soviets); - - MissionUtils.StartProduction(world, allies, "Infantry", InfantryProductionUnits.Random(world.SharedRandom)); - MissionUtils.StartProduction(world, allies, "Vehicle", VehicleProductionUnits.Random(world.SharedRandom)); - } - - if (world.FrameNumber % 20 == 0 && coastUnitsLeft-- > 0) - { - var u = world.CreateActor(CoastUnits.Random(world.SharedRandom), soviets, coastWP1.Location, null); - u.QueueActivity(new Move.Move(coastWP2.Location, 0)); - u.QueueActivity(new AttackMove.AttackMoveActivity(u, new Move.Move(attackLocation.Location, 0))); - } - - if (world.FrameNumber == nextCivilianMove) - { - var civilians = world.Actors.Where(a => !a.IsDead() && a.IsInWorld && a.Owner == neutral && a.HasTrait()); - if (civilians.Any()) - { - var civilian = civilians.Random(world.SharedRandom); - civilian.Trait().Nudge(civilian, civilian, true); - nextCivilianMove += world.SharedRandom.Next(1, 75); - } - } - - if (world.FrameNumber == 1) - { - MissionUtils.Paradrop(world, soviets, ParadropUnits, paradrop1Entry.Location, paradrop1LZ.Location); - MissionUtils.Paradrop(world, soviets, ParadropUnits, paradrop2Entry.Location, paradrop2LZ.Location); - } - - if (--waitTicks <= 0) - { - if (++mul <= div) - worldRenderer.Viewport.Center(WPos.Lerp(viewportOrigin, viewportTarget, mul, div)); - else - { - mul = 0; - viewportOrigin = viewportTarget; - viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Length)]; - waitTicks = 100; - - if (viewportTargetNumber == 0) - { - coastUnitsLeft = 15; - SendChinookReinforcements(chinook1Entry.Location, chinook1LZ); - SendChinookReinforcements(chinook2Entry.Location, chinook2LZ); - } - if (viewportTargetNumber == 1) - { - MissionUtils.Paradrop(world, soviets, ParadropUnits, paradrop1Entry.Location, paradrop1LZ.Location); - MissionUtils.Paradrop(world, soviets, ParadropUnits, paradrop2Entry.Location, paradrop2LZ.Location); - } - if (viewportTargetNumber == 2) - { - AttackWithHeavyTanks(); - ChronoSpawnMediumTanks(); - } - if (viewportTargetNumber == 4) - { - FlyMigs(mig1Waypoints); - FlyMigs(mig2Waypoints); - } - } - } - - MissionUtils.CapOre(soviets); - } - - void AttackWithHeavyTanks() - { - foreach (var tank in HeavyTanks) - { - var u = world.CreateActor(tank, soviets, heavyTankSpawn.Location, Traits.Util.GetFacing(heavyTankWP.Location - heavyTankSpawn.Location, 0)); - u.QueueActivity(new AttackMove.AttackMoveActivity(u, new Move.Move(heavyTankWP.Location, 0))); - } - ironCurtain.Trait().Activate(ironCurtain, new Order { TargetLocation = heavyTankSpawn.Location }); - } - - void ChronoSpawnMediumTanks() - { - var chronoInfo = new List>(); - foreach (var tank in MediumTanks.Select((x, i) => new { x, i })) - { - var u = world.CreateActor(tank.x, allies, mediumTankChronoSpawn.Location, Traits.Util.GetFacing(heavyTankWP.Location - mediumTankChronoSpawn.Location, 0)); - chronoInfo.Add(Pair.New(u, new CPos(mediumTankChronoSpawn.Location.X + tank.i, mediumTankChronoSpawn.Location.Y))); - } - RASpecialPowers.Chronoshift(world, chronoInfo, chronosphere, -1, false); - foreach (var tank in chronoInfo) - tank.First.QueueActivity(new AttackMove.AttackMoveActivity(tank.First, new Move.Move(heavyTankSpawn.Location, 0))); - } - - void FlyMigs(CPos[] waypoints) - { - var m = world.CreateActor("mig", new TypeDictionary - { - new OwnerInit(soviets), - new LocationInit(waypoints[0]), - new FacingInit(Traits.Util.GetFacing(waypoints[1] - waypoints[0], 0)) - }); - foreach (var waypoint in waypoints) - m.QueueActivity(new Fly(m, Target.FromCell(waypoint))); - m.QueueActivity(new RemoveSelf()); - } - - void SendChinookReinforcements(CPos entry, Actor lz) - { - var chinook = world.CreateActor("tran", allies, entry, Traits.Util.GetFacing(lz.Location - entry, 0)); - var cargo = chinook.Trait(); - - while (cargo.HasSpace(1)) - cargo.Load(chinook, world.CreateActor(false, ChinookCargo.Random(world.SharedRandom), allies, null, null)); - - var exit = lz.Info.Traits.WithInterface().FirstOrDefault(); - var offset = (exit != null) ? exit.SpawnOffset : WVec.Zero; - - chinook.QueueActivity(new HeliFly(chinook, Target.FromPos(lz.CenterPosition + offset))); // no reservation of hpad but it's not needed - chinook.QueueActivity(new Turn(0)); - chinook.QueueActivity(new HeliLand(false)); - chinook.QueueActivity(new UnloadCargo(chinook, true)); - chinook.QueueActivity(new Wait(150)); - chinook.QueueActivity(new HeliFly(chinook, Target.FromCell(entry))); - chinook.QueueActivity(new RemoveSelf()); - } - - void InitializeAlliedFactories() - { - alliedBarracks.Trait().SetPrimaryProducer(alliedBarracks, true); - alliedWarFactory.Trait().SetPrimaryProducer(alliedWarFactory, true); - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - worldRenderer = wr; - allies = w.Players.Single(p => p.InternalName == "Allies"); - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - neutral = w.Players.Single(p => p.InternalName == "Neutral"); - - actors = w.WorldActor.Trait().Actors; - - attackLocation = actors["AttackLocation"]; - coastWP1 = actors["CoastWP1"]; - coastWP2 = actors["CoastWP2"]; - - paradrop1LZ = actors["Paradrop1LZ"]; - paradrop1Entry = actors["Paradrop1Entry"]; - paradrop2LZ = actors["Paradrop2LZ"]; - paradrop2Entry = actors["Paradrop2Entry"]; - - var t1 = actors["ViewportTarget1"].CenterPosition; - var t2 = actors["ViewportTarget2"].CenterPosition; - var t3 = actors["ViewportTarget3"].CenterPosition; - var t4 = actors["ViewportTarget4"].CenterPosition; - var t5 = actors["ViewportTarget5"].CenterPosition; - viewportTargets = new[] { t1, t2, t3, t4, t5 }; - - offmapAttackerSpawn1 = actors["OffmapAttackerSpawn1"]; - offmapAttackerSpawn2 = actors["OffmapAttackerSpawn2"]; - offmapAttackerSpawn3 = actors["OffmapAttackerSpawn3"]; - offmapAttackerSpawns = new[] { offmapAttackerSpawn1, offmapAttackerSpawn2, offmapAttackerSpawn3 }; - - heavyTankSpawn = actors["HeavyTankSpawn"]; - heavyTankWP = actors["HeavyTankWP"]; - mediumTankChronoSpawn = actors["MediumTankChronoSpawn"]; - - chronosphere = actors["Chronosphere"]; - ironCurtain = actors["IronCurtain"]; - - mig1Waypoints = new[] { actors["Mig11"], actors["Mig12"], actors["Mig13"], actors["Mig14"] }.Select(a => a.Location).ToArray(); - mig2Waypoints = new[] { actors["Mig21"], actors["Mig22"], actors["Mig23"], actors["Mig24"] }.Select(a => a.Location).ToArray(); - - chinook1Entry = actors["Chinook1Entry"]; - chinook2Entry = actors["Chinook2Entry"]; - chinook1LZ = actors["Chinook1LZ"]; - chinook2LZ = actors["Chinook2LZ"]; - - alliedBarracks = actors["AlliedBarracks"]; - alliedWarFactory = actors["AlliedWarFactory"]; - - InitializeAlliedFactories(); - - foreach (var actor in actors.Values) - { - if (actor.Owner == allies && actor.HasTrait()) - actor.Trait().Stance = UnitStance.Defend; - - if (actor.IsInWorld && (actor.HasTrait() || actor.Owner == allies || (actor.Owner == soviets && actor.HasTrait()))) - actor.AddTrait(new Invulnerable()); - } - - viewportOrigin = viewportTargets[0]; - viewportTargetNumber = 1; - viewportTarget = viewportTargets[1]; - - wr.Viewport.Center(viewportOrigin); - Sound.SoundVolumeModifier = 0.1f; - } - } - - class DesertShellmapAutoUnloadInfo : TraitInfo, Requires { } - - class DesertShellmapAutoUnload : INotifyDamage - { - public void Damaged(Actor self, AttackInfo e) - { - var cargo = self.Trait(); - if (!cargo.IsEmpty(self) && !(self.GetCurrentActivity() is UnloadCargo)) - self.QueueActivity(false, new UnloadCargo(self, true)); - } - } -} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 335d20d315..b48bbe9892 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -261,7 +261,6 @@ - @@ -272,7 +271,6 @@ - @@ -352,7 +350,6 @@ - diff --git a/OpenRA.Mods.RA/Scripting/LuaScriptEvents.cs b/OpenRA.Mods.RA/Scripting/LuaScriptEvents.cs index 40b2778583..b8edf9a657 100644 --- a/OpenRA.Mods.RA/Scripting/LuaScriptEvents.cs +++ b/OpenRA.Mods.RA/Scripting/LuaScriptEvents.cs @@ -15,13 +15,16 @@ namespace OpenRA.Mods.RA.Scripting { public class LuaScriptEventsInfo : TraitInfo { } - public class LuaScriptEvents : INotifyKilled, INotifyAddedToWorld, INotifyRemovedFromWorld, INotifyCapture, INotifyDamage + public class LuaScriptEvents : INotifyKilled, INotifyAddedToWorld, INotifyRemovedFromWorld, + INotifyCapture, INotifyDamage, INotifyIdle, INotifyProduction { public event Action OnKilled = (self, e) => { }; public event Action OnAddedToWorld = self => { }; public event Action OnRemovedFromWorld = self => { }; public event Action OnCaptured = (self, captor, oldOwner, newOwner) => { }; public event Action OnDamaged = (self, e) => { }; + public event Action OnIdle = self => { }; + public event Action OnProduced = (self, other, exit) => { }; public void Killed(Actor self, AttackInfo e) { @@ -47,5 +50,15 @@ namespace OpenRA.Mods.RA.Scripting { OnDamaged(self, e); } + + public void TickIdle(Actor self) + { + OnIdle(self); + } + + public void UnitProduced(Actor self, Actor other, CPos exit) + { + OnProduced(self, other, exit); + } } } diff --git a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs index 10fab7b688..93150f1faa 100644 --- a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs +++ b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs @@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA.Scripting public class LuaScriptInterface : IWorldLoaded, ITick { World world; - Dictionary mapActors; + SpawnMapActors sma; readonly LuaScriptContext context = new LuaScriptContext(); readonly LuaScriptInterfaceInfo info; @@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Scripting public void WorldLoaded(World w, WorldRenderer wr) { world = w; - mapActors = world.WorldActor.Trait().Actors; + sma = world.WorldActor.Trait(); context.Lua["World"] = w; context.Lua["WorldRenderer"] = wr; @@ -75,7 +75,7 @@ namespace OpenRA.Mods.RA.Scripting void AddMapActorGlobals() { - foreach (var kv in mapActors) + foreach (var kv in sma.Actors) { if (context.Lua[kv.Key] != null) context.ShowErrorMessage("{0}: The global name '{1}' is reserved and may not be used by map actor {2}".F(GetType().Name, kv.Key, kv.Value), null); @@ -328,7 +328,19 @@ namespace OpenRA.Mods.RA.Scripting [LuaGlobal] public Actor GetNamedActor(string actorName) { - return mapActors[actorName]; + return sma.Actors[actorName]; + } + + [LuaGlobal] + public bool IsNamedActor(Actor actor) + { + return actor.ActorID <= sma.LastMapActorID && actor.ActorID > sma.LastMapActorID - sma.Actors.Count; + } + + [LuaGlobal] + public IEnumerable GetNamedActors() + { + return sma.Actors.Values; } [LuaGlobal] @@ -343,18 +355,28 @@ namespace OpenRA.Mods.RA.Scripting return world.FindActorsInCircle(location, radius).ToArray(); } + ClassicProductionQueue GetSharedQueueForCategory(Player player, string category) + { + return world.ActorsWithTrait() + .Where(a => a.Actor.Owner == player && a.Trait.Info.Type == category) + .Select(a => a.Trait).FirstOrDefault(); + } + + ClassicProductionQueue GetSharedQueueForUnit(Player player, string unit) + { + var ri = Rules.Info[unit]; + + var bi = ri.Traits.GetOrDefault(); + if (bi == null) + return null; + + return GetSharedQueueForCategory(player, bi.Queue); + } + [LuaGlobal] public void BuildWithSharedQueue(Player player, string unit, double amount) { - var ri = Rules.Info[unit]; - if (ri == null || !ri.Traits.Contains()) - return; - - var category = ri.Traits.Get().Queue; - - var queue = world.ActorsWithTrait() - .Where(a => a.Actor.Owner == player && a.Trait.Info.Type == category) - .Select(a => a.Trait).FirstOrDefault(); + var queue = GetSharedQueueForUnit(player, unit); if (queue != null) queue.ResolveOrder(queue.self, Order.StartProduction(queue.self, unit, (int)amount)); @@ -363,14 +385,38 @@ namespace OpenRA.Mods.RA.Scripting [LuaGlobal] public void BuildWithPerFactoryQueue(Actor factory, string unit, double amount) { - if (!factory.HasTrait()) - return; - var ri = Rules.Info[unit]; - if (ri == null || !ri.Traits.Contains()) + + var bi = ri.Traits.GetOrDefault(); + if (bi == null) return; - factory.Trait().ResolveOrder(factory, Order.StartProduction(factory, unit, (int)amount)); + var queue = factory.TraitOrDefault(); + + if (queue != null) + queue.ResolveOrder(factory, Order.StartProduction(factory, unit, (int)amount)); + } + + [LuaGlobal] + public bool SharedQueueIsBusy(Player player, string category) + { + var queue = GetSharedQueueForCategory(player, category); + + if (queue == null) + return true; + + return queue.CurrentItem() != null; + } + + [LuaGlobal] + public bool PerFactoryQueueIsBusy(Actor factory) + { + var queue = factory.TraitOrDefault(); + + if (queue == null) + return true; + + return queue.CurrentItem() != null; } [LuaGlobal] @@ -384,5 +430,11 @@ namespace OpenRA.Mods.RA.Scripting gt.GuardTarget(guard, Target.FromActor(target)); } } + + [LuaGlobal] + public IEnumerable ExpandFootprint(LuaTable cells, bool allowDiagonal) + { + return Util.ExpandFootprint(cells.Values.Cast(), allowDiagonal); + } } } diff --git a/OpenRA.Mods.RA/Scripting/RASpecialPowers.cs b/OpenRA.Mods.RA/Scripting/RASpecialPowers.cs deleted file mode 100644 index bd044cf7d8..0000000000 --- a/OpenRA.Mods.RA/Scripting/RASpecialPowers.cs +++ /dev/null @@ -1,30 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * 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. For more information, - * see COPYING. - */ -#endregion - -using System.Collections.Generic; -using OpenRA.FileFormats; - -namespace OpenRA.Mods.RA.Scripting -{ - public class RASpecialPowers - { - public static void Chronoshift(World world, List> units, Actor chronosphere, int duration, bool killCargo) - { - foreach (var kv in units) - { - var target = kv.First; - var targetCell = kv.Second; - var cs = target.Trait(); - if (chronosphere.Owner.Shroud.IsExplored(targetCell) && cs.CanChronoshiftTo(target, targetCell)) - cs.Teleport(target, targetCell, duration, killCargo, chronosphere); - } - } - } -} diff --git a/OpenRA.Mods.RA/SpawnMapActors.cs b/OpenRA.Mods.RA/SpawnMapActors.cs index 5999564846..a44155c293 100644 --- a/OpenRA.Mods.RA/SpawnMapActors.cs +++ b/OpenRA.Mods.RA/SpawnMapActors.cs @@ -20,6 +20,7 @@ namespace OpenRA.Mods.RA public class SpawnMapActors : IWorldLoaded { public Dictionary Actors = new Dictionary(); + public uint LastMapActorID { get; private set; } public void WorldLoaded(World world, WorldRenderer wr) { @@ -32,7 +33,9 @@ namespace OpenRA.Mods.RA var initDict = actorReference.Value.InitDict; initDict.Add(new SkipMakeAnimsInit()); - Actors[actorReference.Key] = world.CreateActor(actorReference.Value.Type, initDict); + var actor = world.CreateActor(actorReference.Value.Type, initDict); + Actors[actorReference.Key] = actor; + LastMapActorID = actor.ActorID; } } } diff --git a/mods/common/lua/actor.lua b/mods/common/lua/actor.lua index a0aca22213..c8acc1dd06 100644 --- a/mods/common/lua/actor.lua +++ b/mods/common/lua/actor.lua @@ -76,7 +76,14 @@ Actor.FlyOffMap = function(actor) end Actor.Hunt = function(actor) - actor:QueueActivity(OpenRA.New("Hunt", { actor })) + if Actor.HasTrait(actor, "AttackBase") and Actor.HasTrait(actor, "IMove") then + actor:QueueActivity(OpenRA.New("Hunt", { actor })) + end +end + +Actor.CargoIsEmpty = function(actor) + local cargo = Actor.TraitOrDefault(actor, "Cargo") + return cargo == nil or cargo:IsEmpty(actor) end Actor.UnloadCargo = function(actor, unloadAll) @@ -163,6 +170,14 @@ Actor.OnCaptured = function(actor, eh) Actor.Trait(actor, "LuaScriptEvents").OnCaptured:Add(eh) end +Actor.OnIdle = function(actor, eh) + Actor.Trait(actor, "LuaScriptEvents").OnIdle:Add(eh) +end + +Actor.OnProduced = function(actor, eh) + Actor.Trait(actor, "LuaScriptEvents").OnProduced:Add(eh) +end + Actor.ActorsWithTrait = function(className) local ret = { } for item in Utils.Enumerate(Internal.ActorsWithTrait(className)) do diff --git a/mods/common/lua/map.lua b/mods/common/lua/map.lua index 48f4194540..e8f7fe66f2 100644 --- a/mods/common/lua/map.lua +++ b/mods/common/lua/map.lua @@ -12,10 +12,18 @@ Map.GetRandomEdgeCell = function() return Internal.GetRandomEdgeCell() end +Map.IsNamedActor = function(actor) + return Internal.IsNamedActor(actor) +end + Map.GetNamedActor = function(actorName) return Internal.GetNamedActor(actorName) end +Map.GetNamedActors = function() + return Internal.GetNamedActors() +end + Map.FindActorsInCircle = function(location, radius, func) local actors = Internal.FindActorsInCircle(location.CenterPosition, WRange.FromCells(radius)) return Utils.EnumerableWhere(actors, func) @@ -58,6 +66,10 @@ Map.FindIdleUnitsInBox = function(player, topLeft, bottomRight) return Map.FindActorsInBox(topLeft, bottomRight, function(a) return Map.__FilterByTraitAndIdle(a, player, "Mobile") end) end +Map.ExpandFootprint = function(cells, allowDiagonal) + return Utils.EnumerableToTable(Internal.ExpandFootprint(cells, allowDiagonal)) +end + CPos.New = function(x, y) return OpenRA.New("CPos", { { x, "Int32" }, { y, "Int32" } }) end @@ -90,4 +102,4 @@ end WRange.FromCells = function(cells) return WRange.New(cells * 1024) -end +end \ No newline at end of file diff --git a/mods/common/lua/production.lua b/mods/common/lua/production.lua index 9acef2b6c5..d03b129ef0 100644 --- a/mods/common/lua/production.lua +++ b/mods/common/lua/production.lua @@ -8,6 +8,14 @@ Production.BuildWithPerFactoryQueue = function(factory, unit, amount) Internal.BuildWithPerFactoryQueue(factory, unit, amount or 1) end +Production.SharedQueueIsBusy = function(player, category) + return Internal.SharedQueueIsBusy(player, category) +end + +Production.PerFactoryQueueIsBusy = function(factory) + return Internal.PerFactoryQueueIsBusy(factory) +end + Production.SetRallyPoint = function(factory, location) Actor.Trait(factory, "RallyPoint").rallyPoint = location.Location end diff --git a/mods/common/lua/supportpowers.lua b/mods/common/lua/supportpowers.lua index c899ddfa3b..971b49d9bb 100644 --- a/mods/common/lua/supportpowers.lua +++ b/mods/common/lua/supportpowers.lua @@ -2,8 +2,8 @@ SupportPowers = { } SupportPowers.Airstrike = function(owner, planeName, enterLocation, bombLocation) local facing = { Map.GetFacing(CPos.op_Subtraction(bombLocation, enterLocation), 0), "Int32" } - local altitude = { Rules.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" } - local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude }) + local center = WPos.op_Addition(enterLocation.CenterPosition, WVec.New(0, 0, Rules.InitialAltitude(planeName))) + local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, CenterPosition = center }) Actor.Trait(plane, "AttackBomber"):SetTarget(bombLocation.CenterPosition) Actor.Fly(plane, bombLocation.CenterPosition) Actor.FlyOffMap(plane) @@ -13,8 +13,8 @@ end SupportPowers.Paradrop = function(owner, planeName, passengerNames, enterLocation, dropLocation) local facing = { Map.GetFacing(CPos.op_Subtraction(dropLocation, enterLocation), 0), "Int32" } - local altitude = { Rules.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" } - local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude }) + local center = WPos.op_Addition(enterLocation.CenterPosition, WVec.New(0, 0, Rules.InitialAltitude(planeName))) + local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, CenterPosition = center }) Actor.FlyAttackCell(plane, dropLocation) Actor.Trait(plane, "ParaDrop"):SetLZ(dropLocation) local cargo = Actor.Trait(plane, "Cargo") @@ -25,4 +25,17 @@ SupportPowers.Paradrop = function(owner, planeName, passengerNames, enterLocatio cargo:Load(plane, passenger) end return plane, passengers +end + +SupportPowers.Chronoshift = function(unitLocationPairs, chronosphere, duration, killCargo) + duration = duration or -1 + killCargo = killCargo or true + Utils.Do(unitLocationPairs, function(pair) + local unit = pair[1] + local cell = pair[2] + local cs = Actor.TraitOrDefault(unit, "Chronoshiftable") + if cs ~= nil and cs:CanChronoshiftTo(unit, cell) then + cs:Teleport(unit, cell, duration, killCargo, chronosphere) + end + end) end \ No newline at end of file diff --git a/mods/common/lua/utils.lua b/mods/common/lua/utils.lua index 15c376da1c..03f3ef0031 100644 --- a/mods/common/lua/utils.lua +++ b/mods/common/lua/utils.lua @@ -28,6 +28,14 @@ Utils.EnumerableWhere = function(netEnumerable, func) return ret end +Utils.EnumerableToTable = function(netEnumerable, func) + local ret = { } + for item in Utils.Enumerate(netEnumerable) do + table.insert(ret, item) + end + return ret +end + Utils.Where = function(array, func) local ret = { } for i, item in ipairs(array) do diff --git a/mods/ra/maps/desert-shellmap/desert-shellmap.lua b/mods/ra/maps/desert-shellmap/desert-shellmap.lua new file mode 100644 index 0000000000..c91de275af --- /dev/null +++ b/mods/ra/maps/desert-shellmap/desert-shellmap.lua @@ -0,0 +1,154 @@ +local ants = OpenRA.GetRandomInteger(0, 51) == 0 + +if ants then + UnitTypes = { "ant", "ant", "ant" } + BeachUnitTypes = { "ant", "ant" } + ParadropUnitTypes = { "ant", "ant", "ant", "ant", "ant" } + ProducedUnitTypes = + { + { AlliedBarracks1, { "e1", "e3" } }, + { AlliedBarracks2, { "e1", "e3" } }, + { SovietBarracks1, { "ant" } }, + { SovietBarracks2, { "ant" } }, + { SovietBarracks3, { "ant" } }, + { AlliedWarFactory1, { "jeep", "1tnk", "2tnk", "arty", "ctnk" } }, + { SovietWarFactory1, { "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" } + ParadropUnitTypes = { "e1", "e1", "e2", "e3", "e4" } + ProducedUnitTypes = + { + { AlliedBarracks1, { "e1", "e3" } }, + { AlliedBarracks2, { "e1", "e3" } }, + { SovietBarracks1, { "dog", "e1", "e2", "e3", "e4", "shok" } }, + { SovietBarracks2, { "dog", "e1", "e2", "e3", "e4", "shok" } }, + { SovietBarracks3, { "dog", "e1", "e2", "e3", "e4", "shok" } }, + { AlliedWarFactory1, { "jeep", "1tnk", "2tnk", "arty", "ctnk" } }, + { 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) + end + end) + Actor.OnIdle(a, function() Actor.AttackMove(a, AlliedTechnologyCenter.Location) end) + 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) +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) +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) +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") + 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 + +ChronoshiftAlliedUnits = function() + local cells = Map.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) +end + +ticks = 0 +speed = 5 + +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 +end + +WorldLoaded = function() + allies = OpenRA.GetPlayer("Allies") + soviets = OpenRA.GetPlayer("Soviets") + + viewportOrigin = OpenRA.GetViewportCenterPosition() + + SetupAlliedUnits() + SetupFactories() + ProduceUnits() + ShipAlliedUnits() + ParadropSovietUnits() + OpenRA.RunAfterDelay(5 * 25, ChronoshiftAlliedUnits) + + OpenRA.GiveCash(allies, 1000000) + OpenRA.GiveCash(soviets, 1000000) + + 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 \ No newline at end of file diff --git a/mods/ra/maps/desert-shellmap/map.bin b/mods/ra/maps/desert-shellmap/map.bin index 66f210f4cd..e11ce7baa2 100644 Binary files a/mods/ra/maps/desert-shellmap/map.bin and b/mods/ra/maps/desert-shellmap/map.bin differ diff --git a/mods/ra/maps/desert-shellmap/map.yaml b/mods/ra/maps/desert-shellmap/map.yaml index e00b3c7f9c..df096a95d7 100644 --- a/mods/ra/maps/desert-shellmap/map.yaml +++ b/mods/ra/maps/desert-shellmap/map.yaml @@ -61,9 +61,9 @@ Actors: Actor4: rock4 Location: 25,45 Owner: Neutral - Actor6: rock2 - Location: 34,42 - Owner: Neutral + Actor307: brik + Location: 40,74 + Owner: Allies Actor5: rock6 Location: 34,45 Owner: Neutral @@ -73,11 +73,8 @@ Actors: Actor24: v22 Location: 31,52 Owner: Neutral - Actor9: tc01 - Location: 97,69 - Owner: Neutral Actor78: 2tnk - Location: 77,72 + Location: 77,68 Owner: Allies Facing: 0 Actor23: v23 @@ -89,12 +86,6 @@ Actors: Actor13: oilb Location: 60,46 Owner: Neutral - Actor14: oilb - Location: 67,51 - Owner: Neutral - Actor15: oilb - Location: 59,33 - Owner: Neutral Actor16: oilb Location: 41,46 Owner: Neutral @@ -122,8 +113,8 @@ Actors: Actor22: v29 Location: 26,49 Owner: Neutral - Actor25: barl - Location: 69,53 + Actor14: oilb + Location: 26,37 Owner: Neutral Actor26: barl Location: 63,35 @@ -134,70 +125,54 @@ Actors: Actor333: syrf Location: 67,95 Owner: Allies - Actor198: sbag - Location: 68,63 + Actor53: brik + Location: 70,63 Owner: Allies - Actor165: sbag - Location: 50,61 + Actor254: fenc + Location: 96,97 Owner: Allies - Actor177: sbag - Location: 53,59 + Actor90: brik + Location: 92,70 Owner: Allies - Actor167: sbag - Location: 51,61 + Actor252: fenc + Location: 95,97 Owner: Allies - Actor30: sbag - Location: 41,61 + Actor10: gun + Location: 64,63 Owner: Allies - Actor194: sbag - Location: 60,60 + Facing: 0 + Actor153: apwr + Location: 93,87 Owner: Allies - Actor160: brik - Location: 87,75 + Actor49: brik + Location: 71,63 Owner: Allies - Actor202: sbag - Location: 69,65 - Owner: Allies - Actor164: cycl - Location: 58,66 - Owner: Neutral - Actor29: sbag - Location: 41,62 + Actor33: gun + Location: 85,69 Owner: Allies + Facing: 0 Actor40: dome Location: 55,19 Owner: Soviets Actor41: brl3 Location: 56,43 Owner: Neutral - Actor180: sbag - Location: 57,59 + Actor71: brik + Location: 70,64 Owner: Allies - Actor38: brik - Location: 83,73 + Actor325: e3 + Location: 76,70 Owner: Allies - Actor230: cycl - Location: 55,66 - Owner: Neutral - Actor55: sbag - Location: 39,63 - Owner: Allies - Actor47: brik - Location: 74,73 - Owner: Allies - Actor32: sbag - Location: 36,68 - Owner: Allies - Actor39: gun - Location: 75,72 + Actor28: gun + Location: 74,67 Owner: Allies Facing: 0 Actor50: apwr Location: 51,14 Owner: Soviets - Actor153: apwr - Location: 87,84 - Owner: Allies + Entry1: waypoint + Location: 1,50 + Owner: Neutral Actor63: tsla Location: 48,31 Owner: Soviets @@ -228,17 +203,14 @@ Actors: Actor70: afld Location: 47,24 Owner: Soviets - Actor79: barr + SovietBarracks3: barr Location: 41,27 Owner: Soviets - Actor80: proc - Location: 37,20 - Owner: Soviets Actor81: rock7 Location: 53,19 Owner: Neutral - Actor201: sbag - Location: 69,64 + Actor48: brik + Location: 72,63 Owner: Allies Actor85: powr Location: 49,14 @@ -249,63 +221,49 @@ Actors: Actor52: powr Location: 54,14 Owner: Soviets - Actor205: sbag - Location: 35,70 + Actor74: brik + Location: 89,70 Owner: Allies Actor88: t08 Location: 87,47 Owner: Neutral - Actor181: sbag - Location: 58,59 + Actor65: brik + Location: 69,64 Owner: Allies - Actor219: sbag - Location: 40,64 + Actor303: mrj + Location: 61,60 Owner: Allies + Facing: 0 Actor87: tc01 Location: 92,50 Owner: Neutral - Actor86: mine - Location: 30,42 - Owner: Neutral - ViewportTarget1: waypoint - Location: 37,76 - Owner: Neutral - ViewportTarget2: waypoint - Location: 70,78 - Owner: Neutral - ViewportTarget3: waypoint - Location: 85,55 - Owner: Neutral - ViewportTarget4: waypoint - Location: 59,33 - Owner: Neutral - ViewportTarget5: waypoint - Location: 38,55 - Owner: Neutral - Actor203: sbag - Location: 35,68 + Actor306: brik + Location: 40,75 Owner: Allies + Actor163: tran.husk2 + Location: 14,55 + Owner: Allies + Actor15: oilb + Location: 56,33 + Owner: Neutral + Actor164: flare + Location: 14,56 + Owner: Neutral Actor62: apwr Location: 38,17 Owner: Soviets - Actor213: sbag - Location: 35,72 + Actor72: brik + Location: 87,70 Owner: Allies Actor253: arty Location: 44,68 Owner: Allies Facing: 0 - Actor192: sbag - Location: 59,59 - Owner: Allies - Actor200: sbag + Actor64: brik Location: 69,63 Owner: Allies - Actor204: sbag - Location: 35,69 - Owner: Allies - Actor175: sbag - Location: 52,60 + Actor47: brik + Location: 73,63 Owner: Allies Actor116: mine Location: 78,21 @@ -324,26 +282,17 @@ Actors: Actor97: rock2 Location: 12,75 Owner: Neutral - AttackLocation: waypoint - Location: 55,67 - Owner: Neutral - CoastWP1: waypoint - Location: 1,79 - Owner: Neutral - CoastWP2: waypoint - Location: 36,81 - Owner: Neutral - Actor206: sbag - Location: 35,71 + Actor73: brik + Location: 88,70 Owner: Allies - Actor214: sbag - Location: 36,72 + Actor51: brik + Location: 86,70 Owner: Allies - Actor216: sbag - Location: 37,73 + Actor176: brik + Location: 85,70 Owner: Allies - Actor215: sbag - Location: 37,72 + Actor175: brik + Location: 85,71 Owner: Allies Actor37: rock5 Location: 35,43 @@ -363,9 +312,6 @@ Actors: Actor101: apwr Location: 115,38 Owner: Soviets - Actor105: silo - Location: 35,21 - Owner: Soviets Actor110: fcom Location: 106,44 Owner: Soviets @@ -402,10 +348,10 @@ Actors: Actor117: fix Location: 106,34 Owner: Soviets - Actor118: weap + SovietWarFactory1: weap Location: 106,29 Owner: Soviets - Actor119: barr + SovietBarracks2: barr Location: 102,30 Owner: Soviets Actor136: v2rl @@ -493,36 +439,30 @@ Actors: Actor147: rock1 Location: 118,54 Owner: Neutral - Actor263: powr - Location: 52,74 + Actor167: powr + Location: 54,74 Owner: Allies - Actor148: pbox.e1 + Actor39: pbox.e1 Location: 70,89 Owner: Allies - Actor51: miss + AlliedTechnologyCenter: miss Location: 56,68 Owner: Neutral Actor152: 1tnk Location: 69,85 Owner: Allies Facing: 110 - Actor155: apwr - Location: 84,84 + Actor150: apwr + Location: 94,90 Owner: Allies - Paradrop1Entry: waypoint - Location: 63,30 - Owner: Neutral - Paradrop1LZ: waypoint - Location: 63,88 - Owner: Neutral - Actor149: pbox.e1 - Location: 67,84 + Actor35: pbox.e1 + Location: 68,85 Owner: Allies - Actor156: pbox.e1 - Location: 94,91 + Actor178: pbox.e1 + Location: 77,76 Owner: Allies - Actor49: brik - Location: 72,73 + Actor300: brik + Location: 48,77 Owner: Allies Actor186: 3tnk Location: 107,50 @@ -531,35 +471,16 @@ Actors: Actor174: tc01 Location: 98,37 Owner: Neutral - Actor159: fact - Location: 75,86 + Actor25: fact + Location: 86,84 Owner: Allies - Actor74: cycl - Location: 60,66 - Owner: Neutral - Actor71: cycl - Location: 54,69 - Owner: Neutral - Actor92: sbag - Location: 55,59 + Actor105: brik + Location: 94,70 Owner: Allies - Actor76: silo - Location: 83,81 + Actor154: silo + Location: 82,86 Owner: Allies - Actor120: cycl - Location: 59,66 - Owner: Neutral - Actor42: gun - Location: 84,72 - Owner: Allies - Facing: 0 - Actor65: cycl - Location: 54,68 - Owner: Neutral - Actor48: brik - Location: 73,73 - Owner: Allies - Actor169: barr + SovietBarracks1: barr Location: 109,48 Owner: Soviets Actor170: kenn @@ -571,26 +492,20 @@ Actors: Actor182: rock6 Location: 96,45 Owner: Neutral - Actor45: brik - Location: 75,73 - Owner: Allies Chronosphere: pdox Location: 78,91 Owner: Allies - Actor313: brik - Location: 56,79 + Actor298: brik + Location: 48,78 Owner: Allies - AlliedWarFactory: weap + AlliedWarFactory1: weap Location: 75,81 Owner: Allies - Actor178: pbox.e1 - Location: 101,81 + Actor156: pbox.e1 + Location: 52,71 Owner: Allies - Actor31: sbag - Location: 39,64 - Owner: Allies - Actor157: gap - Location: 81,92 + Actor343: brik + Location: 82,93 Owner: Allies Actor187: ftur Location: 104,47 @@ -598,11 +513,11 @@ Actors: Actor342: lst Location: 67,98 Owner: Allies - Actor90: sbag - Location: 54,59 + Actor86: brik + Location: 91,70 Owner: Allies - Actor326: brik - Location: 49,77 + Actor216: brik + Location: 57,80 Owner: Allies Actor188: ftur Location: 107,52 @@ -611,14 +526,11 @@ Actors: Location: 76,92 Owner: Allies Facing: 150 - Actor172: apwr - Location: 81,87 + Actor155: apwr + Location: 90,87 Owner: Allies - Actor89: atek - Location: 68,73 - Owner: Allies - Actor324: brik - Location: 47,77 + Actor213: brik + Location: 60,80 Owner: Allies Actor196: pt Location: 55,92 @@ -634,20 +546,14 @@ Actors: Location: 30,88 Owner: Allies Facing: 64 - Actor150: apwr - Location: 81,84 - Owner: Allies Actor199: e1 Location: 72,83 Owner: Allies - Actor171: cycl - Location: 56,66 - Owner: Neutral - Actor151: apwr - Location: 87,87 + Actor89: apwr + Location: 93,84 Owner: Allies - Actor173: apwr - Location: 84,87 + Actor161: powr + Location: 89,90 Owner: Allies Actor84: apwr Location: 38,9 @@ -673,32 +579,29 @@ Actors: Actor191: apwr Location: 26,9 Owner: Soviets - Actor179: sbag - Location: 56,59 + Actor120: brik + Location: 95,70 Owner: Allies - Actor161: sbag - Location: 37,68 + Actor9: brik + Location: 94,71 Owner: Allies - Actor168: sbag - Location: 51,60 + Actor80: brik + Location: 90,70 Owner: Allies - Actor195: sbag - Location: 67,63 + Actor251: fenc + Location: 94,97 Owner: Allies - Actor163: cycl - Location: 56,71 - Owner: Neutral - Actor176: sbag - Location: 53,60 + Actor92: brik + Location: 93,70 Owner: Allies - Actor325: brik - Location: 48,77 + Actor214: brik + Location: 59,80 Owner: Allies - Actor193: sbag - Location: 59,60 + Actor149: apwr + Location: 92,93 Owner: Allies - Actor207: tran.husk2 - Location: 43,80 + Actor38: brik + Location: 72,67 Owner: Allies Actor208: e7 Location: 39,81 @@ -714,108 +617,40 @@ Actors: Location: 41,82 Owner: Allies Facing: 90 - Actor212: flare - Location: 43,79 - Owner: Neutral - OffmapAttackerSpawn1: waypoint - Location: 10,1 - Owner: Neutral - OffmapAttackerSpawn2: waypoint - Location: 84,1 - Owner: Neutral - OffmapAttackerSpawn3: waypoint - Location: 1,50 - Owner: Neutral + Actor36: brik + Location: 72,66 + Owner: Allies + Actor228: mgg + Location: 49,63 + Owner: Allies + Facing: 0 Actor255: e1 Location: 67,76 Owner: Allies Actor77: e1 Location: 78,74 Owner: Allies - HeavyTankWP: waypoint - Location: 79,69 - Owner: Neutral - Actor220: apwr - Location: 116,80 - Owner: Allies Actor82: 2tnk - Location: 82,72 + Location: 82,69 Owner: Allies Facing: 0 - HeavyTankSpawn: waypoint - Location: 80,45 - Owner: Neutral - Actor166: cycl - Location: 57,66 - Owner: Neutral - MediumTankChronoSpawn: waypoint - Location: 80,65 - Owner: Neutral - Actor221: apwr - Location: 113,80 + Actor30: pbox.e1 + Location: 47,77 Owner: Allies - Actor64: cycl - Location: 54,67 - Owner: Neutral - Actor35: pbox.e1 - Location: 80,73 - Owner: Allies - Mig11: waypoint - Location: 94,1 - Owner: Neutral - Mig12: waypoint - Location: 68,33 - Owner: Neutral - Mig22: waypoint - Location: 70,35 - Owner: Neutral - Mig13: waypoint - Location: 41,38 - Owner: Neutral - Mig14: waypoint - Location: 1,26 - Owner: Neutral - Mig23: waypoint - Location: 41,40 - Owner: Neutral - Mig24: waypoint - Location: 1,28 - Owner: Neutral - Actor28: sbag - Location: 40,62 - Owner: Allies - Actor10: sbag - Location: 39,62 + Actor29: pbox.e1 + Location: 42,75 Owner: Allies Actor217: sbag Location: 43,67 Owner: Allies - Mig21: waypoint - Location: 96,3 - Owner: Neutral - Actor121: oilb - Location: 103,74 - Owner: Allies - Actor158: oilb - Location: 109,76 - Owner: Allies - Chinook1Entry: waypoint - Location: 44,126 - Owner: Neutral - Chinook2Entry: waypoint - Location: 47,126 - Owner: Neutral - Paradrop2LZ: waypoint - Location: 56,75 - Owner: Neutral - Paradrop2Entry: waypoint - Location: 56,22 + Actor158: mine + Location: 110,78 Owner: Neutral Actor299: e1 Location: 50,70 Owner: Allies - Actor312: brik - Location: 56,78 + Actor297: brik + Location: 49,78 Owner: Allies Actor234: sbag Location: 53,63 @@ -823,30 +658,18 @@ Actors: Actor223: sbag Location: 53,62 Owner: Allies - Actor227: sbag - Location: 60,61 + Actor151: apwr + Location: 91,90 Owner: Allies - Actor228: sbag - Location: 60,62 + Actor31: t08 + Location: 56,58 + Owner: Neutral + Actor311: brik + Location: 41,74 Owner: Allies - Actor229: sbag - Location: 67,64 + Actor302: brik + Location: 41,75 Owner: Allies - Actor154: cycl - Location: 55,71 - Owner: Neutral - Actor72: cycl - Location: 54,70 - Owner: Neutral - Actor73: cycl - Location: 54,71 - Owner: Neutral - Actor302: rock2 - Location: 70,61 - Owner: Neutral - Actor306: rock3 - Location: 25,66 - Owner: Neutral Actor295: jeep Location: 37,67 Owner: Allies @@ -855,8 +678,8 @@ Actors: Location: 58,65 Owner: Allies Facing: 192 - Actor314: brik - Location: 47,76 + Actor215: brik + Location: 58,80 Owner: Allies Actor233: 2tnk Location: 66,62 @@ -880,9 +703,6 @@ Actors: Actor245: sbag Location: 58,63 Owner: Allies - Actor235: cycl - Location: 54,66 - Owner: Neutral Actor249: arty Location: 57,63 Owner: Allies @@ -891,13 +711,10 @@ Actors: Location: 54,63 Owner: Allies Facing: 16 - Actor247: cycl - Location: 57,71 - Owner: Neutral Actor250: sbag Location: 44,67 Owner: Allies - AlliedBarracks: tent + AlliedBarracks2: tent Location: 50,66 Owner: Allies Actor66: gap @@ -906,23 +723,8 @@ Actors: Actor218: sbag Location: 43,68 Owner: Allies - Actor251: sbag - Location: 45,67 - Owner: Allies - Actor252: sbag - Location: 45,68 - Owner: Allies - Actor246: cycl - Location: 60,69 - Owner: Neutral - Actor231: cycl - Location: 60,67 - Owner: Neutral - Actor232: cycl - Location: 60,68 - Owner: Neutral - Actor328: apwr - Location: 122,77 + Actor229: fenc + Location: 93,97 Owner: Allies Actor264: v27 Location: 20,49 @@ -942,9 +744,9 @@ Actors: Actor269: v26 Location: 21,54 Owner: Neutral - Actor281: powr - Location: 54,74 - Owner: Allies + Entry2: waypoint + Location: 1,27 + Owner: Neutral Actor270: v28 Location: 18,49 Owner: Neutral @@ -978,7 +780,7 @@ Actors: Actor280: c10 Location: 23,55 Owner: Neutral - Actor184: tent + AlliedBarracks1: tent Location: 83,75 Owner: Allies Actor282: e1 @@ -996,20 +798,20 @@ Actors: Actor286: e1 Location: 39,67 Owner: Allies - Actor287: e3 + Actor287: brik Location: 50,62 Owner: Allies Actor288: e3 Location: 40,63 Owner: Allies - Actor289: e3 + Actor289: brik + Location: 60,60 + Owner: Allies + Actor291: brik Location: 59,61 Owner: Allies - Actor290: e3 - Location: 52,61 - Owner: Allies - Actor291: e3 - Location: 57,60 + Actor290: brik + Location: 60,61 Owner: Allies Actor292: e3 Location: 68,64 @@ -1017,11 +819,11 @@ Actors: Actor293: e3 Location: 36,69 Owner: Allies - Actor311: brik - Location: 50,77 + Actor219: brik + Location: 57,79 Owner: Allies - Chinook2LZ: hpad - Location: 47,71 + Actor45: brik + Location: 73,64 Owner: Allies Actor226: 2tnk Location: 62,60 @@ -1036,7 +838,7 @@ Actors: Owner: Allies Facing: 30 Actor236: jeep - Location: 46,62 + Location: 45,62 Owner: Allies Facing: 16 Actor238: 2tnk @@ -1044,139 +846,115 @@ Actors: Owner: Allies Facing: 40 Actor224: 2tnk - Location: 43,61 + Location: 41,62 Owner: Allies Facing: 0 Actor237: jeep Location: 63,63 Owner: Allies Facing: 0 - Actor303: hbox.e1 - Location: 60,72 - Owner: Allies Actor304: e1 Location: 57,72 Owner: Allies Actor305: e1 Location: 61,70 Owner: Allies - Actor301: rock5 - Location: 72,66 - Owner: Neutral + Actor43: brik + Location: 73,65 + Owner: Allies Actor294: e1 Location: 58,76 Owner: Allies - Chinook1LZ: hpad - Location: 44,71 + Actor34: brik + Location: 73,66 Owner: Allies - Actor310: brik - Location: 51,77 + Actor220: brik + Location: 57,78 Owner: Allies - Actor309: brik - Location: 52,77 + Actor222: brik + Location: 57,77 Owner: Allies - Actor307: brik - Location: 53,77 - Owner: Allies - Actor300: brik - Location: 54,77 - Owner: Allies - Actor298: brik - Location: 55,77 - Owner: Allies - Actor297: brik + Actor230: brik Location: 56,77 Owner: Allies - Actor315: sbag - Location: 38,73 + Actor231: brik + Location: 55,77 Owner: Allies - Actor316: sbag - Location: 39,73 + Actor232: brik + Location: 54,77 Owner: Allies - Actor317: sbag - Location: 40,73 + Actor246: brik + Location: 52,77 Owner: Allies - Actor318: sbag - Location: 40,74 + Actor160: brik + Location: 86,71 Owner: Allies - Actor319: sbag - Location: 40,75 + Actor179: brik + Location: 68,84 Owner: Allies - Actor320: sbag - Location: 41,75 + Actor180: brik + Location: 69,84 + Owner: Allies + Actor181: brik + Location: 69,83 + Owner: Allies + Actor192: brik + Location: 68,83 + Owner: Allies + Actor198: brik + Location: 68,82 Owner: Allies Actor321: e1 Location: 45,76 Owner: Allies - Actor222: powr + Actor165: powr Location: 50,74 Owner: Allies Actor257: arty - Location: 72,74 + Location: 72,68 Owner: Allies Facing: 0 - Actor33: brik - Location: 86,73 + Actor344: e1 + Location: 78,69 Owner: Allies - Actor43: brik - Location: 76,73 - Owner: Allies - Actor53: brik - Location: 71,73 + Actor301: brik + Location: 49,77 Owner: Allies Actor256: gap Location: 74,75 Owner: Allies - Actor44: t08 - Location: 37,71 - Owner: Neutral + Actor313: brik + Location: 37,70 + Owner: Allies Actor46: tc01 Location: 49,79 Owner: Neutral - Actor258: t08 - Location: 54,60 - Owner: Neutral + Actor258: brik + Location: 76,94 + Owner: Allies Actor259: rock6 Location: 53,81 Owner: Neutral Actor260: rock2 Location: 46,85 Owner: Neutral - Actor254: proc - Location: 84,81 + Actor32: proc + Location: 90,72 + Owner: Allies + Actor168: brik + Location: 95,71 Owner: Allies - Actor261: mine - Location: 104,90 - Owner: Neutral - Actor308: mine - Location: 111,89 - Owner: Neutral Actor322: oilb Location: 58,78 Owner: Allies - Actor323: oilb - Location: 109,68 - Owner: Allies - Actor327: apwr - Location: 119,80 - Owner: Allies - Actor262: apwr - Location: 119,77 - Owner: Allies + Actor121: mine + Location: 103,76 + Owner: Neutral Actor329: mine Location: 90,21 Owner: Neutral - Actor330: apwr - Location: 113,77 - Owner: Allies - Actor331: apwr - Location: 116,77 - Owner: Allies - Actor332: fix - Location: 69,80 - Owner: Allies - Actor34: brik - Location: 85,73 + Actor195: hpad + Location: 70,75 Owner: Allies Actor75: oilb Location: 4,126 @@ -1205,113 +983,316 @@ Actors: Actor341: dome Location: 63,73 Owner: Allies - Actor36: brik - Location: 84,73 + Actor166: wood + Location: 17,52 + Owner: Neutral + Actor281: brik + Location: 50,78 Owner: Allies - Actor343: brik - Location: 70,73 + Actor235: brik + Location: 53,77 Owner: Allies - Actor344: brik - Location: 70,72 + Actor200: brik + Location: 68,81 Owner: Allies - Actor345: brik - Location: 69,72 + Actor201: brik + Location: 67,81 Owner: Allies - Actor346: brik - Location: 68,72 + Actor202: brik + Location: 66,81 Owner: Allies - Actor347: brik - Location: 67,72 + Actor203: brik + Location: 65,81 Owner: Allies - Actor348: brik - Location: 67,71 + Actor204: brik + Location: 64,81 Owner: Allies - Actor349: brik - Location: 67,70 + Actor205: brik + Location: 63,81 Owner: Allies - Actor350: brik - Location: 67,69 + Actor148: apwr + Location: 95,93 Owner: Allies - Actor351: brik - Location: 67,68 + Actor324: e3 + Location: 73,68 Owner: Allies - Actor352: brik - Location: 76,74 + Actor206: brik + Location: 63,80 Owner: Allies - Actor353: brik - Location: 75,74 + Actor207: brik + Location: 62,80 Owner: Allies - Actor354: brik - Location: 83,74 + Actor263: brik + Location: 51,78 Owner: Allies - Actor355: brik - Location: 84,74 + Actor247: brik + Location: 51,77 Owner: Allies - Actor356: brik - Location: 66,68 - Owner: Allies - Actor357: brik - Location: 66,69 - Owner: Allies - Actor358: brik - Location: 57,79 - Owner: Allies - Actor359: brik - Location: 57,78 - Owner: Allies - Actor360: brik - Location: 48,76 + Actor212: brik + Location: 61,80 Owner: Allies Actor361: pbox.e1 Location: 71,96 Owner: Allies - Actor362: silo - Location: 82,82 + Actor55: silo + Location: 81,85 Owner: Allies - Actor363: silo - Location: 83,82 + Actor76: silo + Location: 81,86 Owner: Allies - Actor364: silo - Location: 82,81 + Actor159: silo + Location: 82,85 Owner: Allies Actor365: hpad Location: 64,78 Owner: Allies - Actor366: apwr - Location: 122,80 + Actor221: fenc + Location: 92,97 + Owner: Allies + Actor345: e1 + Location: 80,69 + Owner: Allies + Actor193: fix + Location: 69,70 + Owner: Allies + Actor42: pbox.e1 + Location: 67,70 + Owner: Allies + Actor262: fenc + Location: 97,97 + Owner: Allies + Actor309: fenc + Location: 98,97 + Owner: Allies + Actor310: fenc + Location: 98,96 + Owner: Allies + Entry7: waypoint + Location: 1,79 + Owner: Neutral + AttackDest: waypoint + Location: 55,69 + Owner: Neutral + Actor6: brik + Location: 73,67 + Owner: Allies + Actor312: brik + Location: 40,73 + Owner: Allies + Actor314: brik + Location: 37,69 + Owner: Allies + Actor319: brik + Location: 38,69 + Owner: Allies + Actor316: brik + Location: 38,73 + Owner: Allies + Actor315: brik + Location: 39,73 + Owner: Allies + Actor317: brik + Location: 37,73 + Owner: Allies + Actor318: brik + Location: 37,72 + Owner: Allies + Actor44: brik + Location: 37,71 + Owner: Allies + Actor320: brik + Location: 38,70 + Owner: Allies + Actor330: brik + Location: 79,94 + Owner: Allies + Actor328: brik + Location: 78,94 + Owner: Allies + Actor327: brik + Location: 77,94 + Owner: Allies + Actor331: brik + Location: 80,94 + Owner: Allies + Actor332: brik + Location: 80,93 + Owner: Allies + Actor157: brik + Location: 81,93 + Owner: Allies + Actor346: brik + Location: 75,94 + Owner: Allies + Actor347: brik + Location: 75,93 + Owner: Allies + Actor348: brik + Location: 75,92 + Owner: Allies + Actor349: brik + Location: 75,91 + Owner: Allies + Actor350: brik + Location: 75,90 + Owner: Allies + Actor351: brik + Location: 74,90 + Owner: Allies + Actor352: brik + Location: 73,90 + Owner: Allies + Actor353: brik + Location: 72,90 + Owner: Allies + Actor354: brik + Location: 72,89 + Owner: Allies + Actor355: brik + Location: 71,89 + Owner: Allies + Actor356: brik + Location: 72,88 + Owner: Allies + Actor357: brik + Location: 71,88 + Owner: Allies + Actor358: brik + Location: 82,92 + Owner: Allies + Actor359: brik + Location: 82,91 + Owner: Allies + Actor360: brik + Location: 82,90 + Owner: Allies + Actor362: brik + Location: 81,90 + Owner: Allies + Actor363: brik + Location: 81,91 + Owner: Allies + Actor364: gap + Location: 77,90 + Owner: Allies + Actor366: brik + Location: 59,60 Owner: Allies Actor367: brik - Location: 86,74 + Location: 58,60 Owner: Allies Actor368: brik - Location: 86,75 + Location: 57,60 Owner: Allies Actor369: brik - Location: 87,76 + Location: 56,60 Owner: Allies Actor370: brik - Location: 87,77 + Location: 55,60 Owner: Allies Actor371: brik - Location: 87,78 + Location: 54,60 Owner: Allies Actor372: brik - Location: 86,78 + Location: 53,60 Owner: Allies Actor373: brik - Location: 86,77 + Location: 52,60 Owner: Allies - Actor374: hpad - Location: 71,75 + Actor374: brik + Location: 52,61 Owner: Allies - Actor375: gun - Location: 51,72 + Actor375: brik + Location: 51,61 Owner: Allies - Facing: 48 - Actor376: gun - Location: 63,68 + Actor376: brik + Location: 50,61 Owner: Allies - Facing: 0 + Actor377: brik + Location: 49,61 + Owner: Allies + Actor378: brik + Location: 49,62 + Owner: Allies + Actor379: gun + Location: 37,68 + Owner: Allies + Actor380: gun + Location: 48,61 + Owner: Allies + Actor381: atek + Location: 76,87 + Owner: Allies + Actor194: powr + Location: 52,74 + Owner: Allies + Entry3: waypoint + Location: 10,1 + Owner: Neutral + Entry4: waypoint + Location: 84,1 + Owner: Neutral + Entry5: waypoint + Location: 126,27 + Owner: Neutral + Entry6: waypoint + Location: 46,1 + Owner: Neutral + Actor171: wood + Location: 17,53 + Owner: Neutral + Actor172: wood + Location: 17,54 + Owner: Neutral + Actor173: wood + Location: 17,55 + Owner: Neutral + Actor177: wood + Location: 17,56 + Owner: Neutral + LstEntry: waypoint + Location: 33,126 + Owner: Neutral + LstUnload: waypoint + Location: 60,93 + Owner: Neutral + Actor184: pbox.e1 + Location: 96,79 + Owner: Allies + Paradrop1: waypoint + Location: 70,50 + Owner: Neutral + Paradrop2: waypoint + Location: 39,50 + Owner: Neutral + Paradrop3: waypoint + Location: 81,60 + Owner: Neutral + Paradrop4: waypoint + Location: 28,64 + Owner: Neutral + Paradrop5: waypoint + Location: 63,89 + Owner: Neutral + Paradrop6: waypoint + Location: 22,77 + Owner: Neutral + Paradrop7: waypoint + Location: 64,69 + Owner: Neutral + Paradrop8: waypoint + Location: 80,78 + Owner: Neutral + ChronoshiftLocation: waypoint + Location: 80,65 + Owner: Neutral + Actor79: agun + Location: 70,65 + Owner: Allies + Actor118: agun + Location: 47,69 + Owner: Allies + Facing: 64 Smudges: @@ -1322,21 +1303,76 @@ Rules: -CrateSpawner: -SpawnMPUnits: -MPStartLocations: - DesertShellmapScript: + LuaScriptInterface: + LuaScripts: desert-shellmap.lua LoadWidgetAtGameStart: Widget: MAINMENU TRAN.Husk2: Burns: Damage: 0 - APC: - DesertShellmapAutoUnload: - MIG: - Plane: - Speed: 280 - BADR: - Invulnerable: MISS: Invulnerable: + 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 + Prerequisites: barr + Health: + HP: 200 + ^Vehicle: + GivesBounty: + Percentage: 0 + GainsExperience: + CostThreshold: + FirepowerModifier: + ArmorModifier: + SpeedModifier: + ^Tank: + GivesBounty: + Percentage: 0 + GainsExperience: + CostThreshold: + FirepowerModifier: + ArmorModifier: + SpeedModifier: + ^Infantry: + -Selectable: # short-term hack to make infantry not play die sounds until we fix RenderInfantry + GivesBounty: + Percentage: 0 + GainsExperience: + CostThreshold: + FirepowerModifier: + ArmorModifier: + SpeedModifier: + ^Ship: + GivesBounty: + Percentage: 0 + ^Plane: + GivesBounty: + Percentage: 0 + ^Building: + GivesBounty: + Percentage: 0 Sequences: diff --git a/mods/ra/maps/shellmap/map.bin b/mods/ra/maps/shellmap/map.bin deleted file mode 100644 index 99977abe57..0000000000 Binary files a/mods/ra/maps/shellmap/map.bin and /dev/null differ diff --git a/mods/ra/maps/shellmap/map.yaml b/mods/ra/maps/shellmap/map.yaml deleted file mode 100644 index 559bb86401..0000000000 --- a/mods/ra/maps/shellmap/map.yaml +++ /dev/null @@ -1,1309 +0,0 @@ -Selectable: False - -MapFormat: 6 - -RequiresMod: ra - -Title: OpenRA Shellmap - -Author: Westwood Studios - -Tileset: TEMPERAT - -MapSize: 128,128 - -Bounds: 26,36,92,57 - -UseAsShellmap: True - -Type: Conquest - -Options: - -Players: - PlayerReference@Neutral: - Name: Neutral - OwnsWorld: True - NonCombatant: True - Race: allies - PlayerReference@GoodGuy: - Name: GoodGuy - Race: allies - ColorRamp: 161,134,200 - Enemies: Greece,Creeps - PlayerReference@Greece: - Name: Greece - Race: soviet - ColorRamp: 3,255,127 - Enemies: GoodGuy,Creeps - PlayerReference@Multi0: - Name: Multi0 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Multi1: - Name: Multi1 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Multi2: - Name: Multi2 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Multi3: - Name: Multi3 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Multi4: - Name: Multi4 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Multi5: - Name: Multi5 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Multi6: - Name: Multi6 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Multi7: - Name: Multi7 - Playable: True - Race: Random - Enemies: Creeps - PlayerReference@Creeps: - Name: Creeps - NonCombatant: True - Race: Random - Enemies: GoodGuy,Greece,Multi0,Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi7 - -Actors: - Actor0: brik - Location: 32,43 - Owner: Neutral - Actor1: brik - Location: 33,43 - Owner: Neutral - Actor2: brik - Location: 37,43 - Owner: Neutral - Actor3: brik - Location: 38,43 - Owner: Neutral - Actor4: brik - Location: 32,44 - Owner: Neutral - Actor5: brik - Location: 33,44 - Owner: Neutral - Actor6: brik - Location: 37,44 - Owner: Neutral - Actor7: brik - Location: 38,44 - Owner: Neutral - Actor8: brik - Location: 93,46 - Owner: Neutral - Actor9: brik - Location: 94,46 - Owner: Neutral - Actor10: brik - Location: 97,46 - Owner: Neutral - Actor11: brik - Location: 98,46 - Owner: Neutral - Actor12: brik - Location: 91,47 - Owner: Neutral - Actor13: brik - Location: 92,47 - Owner: Neutral - Actor14: brik - Location: 93,47 - Owner: Neutral - Actor15: brik - Location: 94,47 - Owner: Neutral - Actor16: brik - Location: 97,47 - Owner: Neutral - Actor17: brik - Location: 98,47 - Owner: Neutral - Actor18: brik - Location: 99,47 - Owner: Neutral - Actor19: brik - Location: 90,48 - Owner: Neutral - Actor20: brik - Location: 91,48 - Owner: Neutral - Actor21: brik - Location: 99,48 - Owner: Neutral - Actor22: brik - Location: 90,49 - Owner: Neutral - Actor23: brik - Location: 91,49 - Owner: Neutral - Actor24: brik - Location: 89,50 - Owner: Neutral - Actor25: brik - Location: 90,50 - Owner: Neutral - Actor26: brik - Location: 96,50 - Owner: Neutral - Actor27: brik - Location: 97,50 - Owner: Neutral - Actor28: brik - Location: 89,51 - Owner: Neutral - Actor29: brik - Location: 90,51 - Owner: Neutral - Actor30: brik - Location: 93,51 - Owner: Neutral - Actor31: brik - Location: 94,51 - Owner: Neutral - Actor32: brik - Location: 95,51 - Owner: Neutral - Actor33: brik - Location: 96,51 - Owner: Neutral - Actor34: brik - Location: 97,51 - Owner: Neutral - Actor35: brik - Location: 93,52 - Owner: Neutral - Actor36: brik - Location: 96,52 - Owner: Neutral - Actor37: brik - Location: 97,52 - Owner: Neutral - Actor38: brik - Location: 98,52 - Owner: Neutral - Actor39: brik - Location: 93,53 - Owner: Neutral - Actor40: brik - Location: 96,53 - Owner: Neutral - Actor41: brik - Location: 97,53 - Owner: Neutral - Actor42: brik - Location: 98,53 - Owner: Neutral - Actor43: brik - Location: 89,54 - Owner: Neutral - Actor44: brik - Location: 90,54 - Owner: Neutral - Actor45: brik - Location: 93,54 - Owner: Neutral - Actor46: brik - Location: 94,54 - Owner: Neutral - Actor47: brik - Location: 95,54 - Owner: Neutral - Actor48: brik - Location: 96,54 - Owner: Neutral - Actor49: brik - Location: 97,54 - Owner: Neutral - Actor50: brik - Location: 89,55 - Owner: Neutral - Actor51: brik - Location: 90,55 - Owner: Neutral - Actor52: brik - Location: 96,55 - Owner: Neutral - Actor53: brik - Location: 97,55 - Owner: Neutral - Actor54: brik - Location: 90,56 - Owner: Neutral - Actor55: brik - Location: 91,56 - Owner: Neutral - Actor56: brik - Location: 90,57 - Owner: Neutral - Actor57: brik - Location: 91,57 - Owner: Neutral - Actor58: brik - Location: 99,57 - Owner: Neutral - Actor59: brik - Location: 91,58 - Owner: Neutral - Actor60: brik - Location: 92,58 - Owner: Neutral - Actor61: brik - Location: 93,58 - Owner: Neutral - Actor62: brik - Location: 94,58 - Owner: Neutral - Actor63: brik - Location: 97,58 - Owner: Neutral - Actor64: brik - Location: 98,58 - Owner: Neutral - Actor65: brik - Location: 99,58 - Owner: Neutral - Actor66: brik - Location: 93,59 - Owner: Neutral - Actor67: brik - Location: 94,59 - Owner: Neutral - Actor68: brik - Location: 97,59 - Owner: Neutral - Actor69: brik - Location: 98,59 - Owner: Neutral - Actor70: wood - Location: 59,69 - Owner: Neutral - Actor71: wood - Location: 60,69 - Owner: Neutral - Actor72: wood - Location: 61,69 - Owner: Neutral - Actor73: wood - Location: 62,69 - Owner: Neutral - Actor74: wood - Location: 63,69 - Owner: Neutral - Actor75: wood - Location: 64,69 - Owner: Neutral - Actor76: wood - Location: 65,69 - Owner: Neutral - Actor77: brik - Location: 77,74 - Owner: Neutral - Actor78: brik - Location: 78,74 - Owner: Neutral - Actor79: brik - Location: 77,75 - Owner: Neutral - Actor80: brik - Location: 78,75 - Owner: Neutral - Actor81: brik - Location: 77,76 - Owner: Neutral - Actor82: brik - Location: 76,77 - Owner: Neutral - Actor83: brik - Location: 77,77 - Owner: Neutral - Actor84: brik - Location: 76,78 - Owner: Neutral - Actor85: brik - Location: 77,78 - Owner: Neutral - Actor86: brik - Location: 76,83 - Owner: Neutral - Actor87: brik - Location: 77,83 - Owner: Neutral - Actor88: brik - Location: 76,84 - Owner: Neutral - Actor89: brik - Location: 77,84 - Owner: Neutral - Actor90: brik - Location: 76,85 - Owner: Neutral - Actor91: brik - Location: 76,86 - Owner: Neutral - Actor92: brik - Location: 76,87 - Owner: Neutral - Actor93: brik - Location: 77,87 - Owner: Neutral - Actor94: wood - Location: 27,88 - Owner: Neutral - Actor95: wood - Location: 28,88 - Owner: Neutral - Actor96: wood - Location: 29,88 - Owner: Neutral - Actor97: brik - Location: 76,88 - Owner: Neutral - Actor98: brik - Location: 77,88 - Owner: Neutral - Actor99: wood - Location: 29,89 - Owner: Neutral - Actor100: wood - Location: 29,91 - Owner: Neutral - Actor101: wood - Location: 28,92 - Owner: Neutral - Actor102: wood - Location: 29,92 - Owner: Neutral - Actor103: tc01 - Location: 71,73 - Owner: Neutral - Actor104: tc04 - Location: 73,73 - Owner: Neutral - Actor105: tc05 - Location: 74,74 - Owner: Neutral - Actor106: t10 - Location: 100,83 - Owner: Neutral - Actor107: t08 - Location: 110,78 - Owner: Neutral - Actor108: t07 - Location: 116,89 - Owner: Neutral - Actor109: t06 - Location: 113,86 - Owner: Neutral - Actor110: t05 - Location: 111,84 - Owner: Neutral - Actor111: t02 - Location: 110,87 - Owner: Neutral - Actor112: t01 - Location: 112,89 - Owner: Neutral - Actor113: tc01 - Location: 76,58 - Owner: Neutral - Actor114: t05 - Location: 93,49 - Owner: Neutral - Actor115: t03 - Location: 93,47 - Owner: Neutral - Actor116: t02 - Location: 91,54 - Owner: Neutral - Actor117: t01 - Location: 105,73 - Owner: Neutral - Actor118: tc02 - Location: 115,71 - Owner: Neutral - Actor119: t17 - Location: 117,70 - Owner: Neutral - Actor120: tc01 - Location: 107,89 - Owner: Neutral - Actor121: tc05 - Location: 96,90 - Owner: Neutral - Actor122: tc04 - Location: 97,88 - Owner: Neutral - Actor123: tc01 - Location: 95,91 - Owner: Neutral - Actor124: tc01 - Location: 112,73 - Owner: Neutral - Actor125: t17 - Location: 105,82 - Owner: Neutral - Actor126: t15 - Location: 96,85 - Owner: Neutral - Actor127: tc05 - Location: 60,51 - Owner: Neutral - Actor128: tc03 - Location: 62,89 - Owner: Neutral - Actor129: tc02 - Location: 47,85 - Owner: Neutral - Actor130: t17 - Location: 44,90 - Owner: Neutral - Actor131: t15 - Location: 55,80 - Owner: Neutral - Actor132: t14 - Location: 60,81 - Owner: Neutral - Actor133: t13 - Location: 53,85 - Owner: Neutral - Actor134: t12 - Location: 43,82 - Owner: Neutral - Actor135: t11 - Location: 47,90 - Owner: Neutral - Actor136: t08 - Location: 59,85 - Owner: Neutral - Actor137: t07 - Location: 51,82 - Owner: Neutral - Actor138: t01 - Location: 65,38 - Owner: Neutral - Actor139: tc04 - Location: 62,39 - Owner: Neutral - Actor140: tc03 - Location: 63,41 - Owner: Neutral - Actor141: tc01 - Location: 55,77 - Owner: Neutral - Actor142: tc05 - Location: 56,76 - Owner: Neutral - Actor143: tc05 - Location: 65,67 - Owner: Neutral - Actor144: tc04 - Location: 40,76 - Owner: Neutral - Actor145: tc05 - Location: 56,67 - Owner: Neutral - Actor146: tc04 - Location: 55,66 - Owner: Neutral - Actor147: tc01 - Location: 54,68 - Owner: Neutral - Actor148: tc02 - Location: 53,67 - Owner: Neutral - Actor149: t02 - Location: 101,88 - Owner: Neutral - Actor150: tc03 - Location: 41,69 - Owner: Neutral - Actor151: tc01 - Location: 45,69 - Owner: Neutral - Actor152: t17 - Location: 45,68 - Owner: Neutral - Actor153: t16 - Location: 45,70 - Owner: Neutral - Actor154: tc04 - Location: 36,83 - Owner: Neutral - Actor155: t01 - Location: 41,87 - Owner: Neutral - Actor156: tc03 - Location: 32,87 - Owner: Neutral - Actor157: t11 - Location: 38,70 - Owner: Neutral - Actor158: t12 - Location: 38,91 - Owner: Neutral - Actor159: tc05 - Location: 29,82 - Owner: Neutral - Actor160: tc04 - Location: 28,81 - Owner: Neutral - Actor161: tc01 - Location: 37,73 - Owner: Neutral - Actor162: t01 - Location: 38,67 - Owner: Neutral - Actor163: tc05 - Location: 28,75 - Owner: Neutral - Actor164: tc02 - Location: 26,73 - Owner: Neutral - Actor165: tc04 - Location: 41,35 - Owner: Neutral - Actor166: tc01 - Location: 31,35 - Owner: Neutral - Actor167: t02 - Location: 29,40 - Owner: Neutral - Actor168: tc05 - Location: 44,43 - Owner: Neutral - Actor169: tc04 - Location: 41,44 - Owner: Neutral - Actor170: tc03 - Location: 26,43 - Owner: Neutral - Actor171: tc02 - Location: 26,36 - Owner: Neutral - Actor172: tc02 - Location: 26,51 - Owner: Neutral - Actor173: tc01 - Location: 97,42 - Owner: Neutral - Actor174: t16 - Location: 85,44 - Owner: Neutral - Actor175: t13 - Location: 82,61 - Owner: Neutral - Actor176: t08 - Location: 85,62 - Owner: Neutral - Actor177: t01 - Location: 66,55 - Owner: Neutral - Actor178: t13 - Location: 104,41 - Owner: Neutral - Actor179: t12 - Location: 104,42 - Owner: Neutral - Actor180: tc02 - Location: 72,89 - Owner: Neutral - Actor181: tc01 - Location: 69,89 - Owner: Neutral - Actor182: t13 - Location: 71,91 - Owner: Neutral - Actor183: tc01 - Location: 77,91 - Owner: Neutral - Actor184: t17 - Location: 74,90 - Owner: Neutral - Actor185: tc01 - Location: 84,74 - Owner: Neutral - Actor186: t17 - Location: 82,74 - Owner: Neutral - Actor187: tc02 - Location: 109,74 - Owner: Neutral - Actor188: tc02 - Location: 92,74 - Owner: Neutral - Actor189: tc04 - Location: 26,68 - Owner: Neutral - Actor190: t01 - Location: 33,91 - Owner: Neutral - Actor191: tc02 - Location: 39,38 - Owner: Neutral - Actor192: tc01 - Location: 41,41 - Owner: Neutral - Actor193: t01 - Location: 31,43 - Owner: Neutral - Actor194: t07 - Location: 43,49 - Owner: Neutral - Actor195: tc04 - Location: 30,57 - Owner: Neutral - Actor196: tc03 - Location: 29,65 - Owner: Neutral - Actor197: tc05 - Location: 38,61 - Owner: Neutral - Actor198: t01 - Location: 50,36 - Owner: Neutral - Actor199: t07 - Location: 57,42 - Owner: Neutral - Actor200: t07 - Location: 66,63 - Owner: Neutral - Actor201: t11 - Location: 62,59 - Owner: Neutral - Actor202: tc01 - Location: 26,91 - Owner: Neutral - Actor203: t17 - Location: 26,87 - Owner: Neutral - Actor204: t16 - Location: 26,78 - Owner: Neutral - Actor205: t16 - Location: 44,68 - Owner: Neutral - Actor206: t01 - Location: 89,55 - Owner: Neutral - Actor207: tc05 - Location: 83,57 - Owner: Neutral - Actor208: tc04 - Location: 83,48 - Owner: Neutral - Actor209: tc01 - Location: 83,54 - Owner: Neutral - Actor210: t17 - Location: 82,55 - Owner: Neutral - Actor211: tc01 - Location: 86,46 - Owner: Neutral - Actor212: tc03 - Location: 103,62 - Owner: Neutral - Actor213: t03 - Location: 99,58 - Owner: Neutral - Actor214: t01 - Location: 103,79 - Owner: Neutral - Actor215: tc05 - Location: 95,80 - Owner: Neutral - Actor216: tc04 - Location: 92,76 - Owner: Neutral - Actor217: tc03 - Location: 92,83 - Owner: Neutral - Actor218: t01 - Location: 84,91 - Owner: Neutral - Actor219: mine - Location: 52,39 - Owner: Neutral - Actor220: mine - Location: 55,89 - Owner: Neutral - Actor221: mine - Location: 54,56 - Owner: Neutral - Actor222: mine - Location: 61,63 - Owner: Neutral - Actor223: gap - Location: 85,80 - Owner: Greece - Actor224: apwr - Location: 89,86 - Owner: Greece - Actor225: apwr - Location: 91,89 - Owner: Greece - Actor226: atek - Location: 95,45 - Owner: GoodGuy - Actor227: agun - Location: 98,50 - Owner: GoodGuy - Actor228: agun - Location: 98,53 - Owner: GoodGuy - Actor229: atek - Location: 95,58 - Owner: GoodGuy - Actor230: atek - Location: 89,52 - Owner: GoodGuy - Actor231: gun - Location: 92,59 - Owner: GoodGuy - Actor232: gun - Location: 92,46 - Owner: GoodGuy - Actor234: agun - Location: 94,49 - Owner: GoodGuy - Actor235: agun - Location: 94,54 - Owner: GoodGuy - Actor236: gap - Location: 95,49 - Owner: GoodGuy - Actor237: gap - Location: 95,54 - Owner: GoodGuy - Actor238: apwr - Location: 106,45 - Owner: GoodGuy - Actor239: apwr - Location: 103,45 - Owner: GoodGuy - Actor240: weap - Location: 82,78 - Owner: Greece - Actor241: dome - Location: 84,83 - Owner: Greece - Actor242: gun - Location: 75,78 - Owner: Greece - Actor243: gun - Location: 75,83 - Owner: Greece - Actor244: fact - Location: 86,76 - Owner: Greece - Actor245: apwr - Location: 92,86 - Owner: Greece - Actor246: apwr - Location: 88,89 - Owner: Greece - Actor247: tent - Location: 79,76 - Owner: Greece - Actor248: tent - Location: 80,83 - Owner: Greece - Actor249: gun - Location: 79,84 - Owner: Greece - Actor250: gun - Location: 87,82 - Owner: Greece - Actor251: gun - Location: 81,77 - Owner: Greece - Actor252: hbox.e1 - Location: 78,78 - Owner: Greece - Actor253: hbox.e1 - Location: 78,83 - Owner: Greece - Actor254: hbox.e1 - Location: 89,81 - Owner: Greece - Actor255: agun - Location: 84,76 - Owner: Greece - Actor256: agun - Location: 86,84 - Owner: Greece - Actor257: apwr - Location: 27,45 - Owner: Greece - Actor258: tent - Location: 37,45 - Owner: Greece - Actor259: domf - Location: 29,49 - Owner: Greece - Actor260: gun - Location: 38,42 - Owner: GoodGuy - Actor261: gun - Location: 32,42 - Owner: Greece - greeceweap: weap - Location: 37,48 - Owner: Greece - Actor263: fact - Location: 31,45 - Owner: Greece - Actor264: apwr - Location: 32,49 - Owner: Greece - Actor265: gun - Location: 40,54 - Owner: Greece - Actor266: gun - Location: 34,56 - Owner: Greece - Actor267: hbox.e1 - Location: 94,45 - Owner: GoodGuy - Actor268: hpad - Location: 103,59 - Owner: GoodGuy - Actor269: hpad - Location: 86,57 - Owner: GoodGuy - Actor270: hbox.e1 - Location: 97,45 - Owner: GoodGuy - Actor271: hbox.e1 - Location: 99,51 - Owner: GoodGuy - Actor272: apwr - Location: 106,54 - Owner: GoodGuy - Actor273: silo - Location: 86,87 - Owner: Greece - Actor274: atek - Location: 27,89 - Owner: Greece - Actor275: hbox.e1 - Location: 94,60 - Owner: GoodGuy - Actor276: hbox.e1 - Location: 97,60 - Owner: GoodGuy - Actor277: hbox.e1 - Location: 88,51 - Owner: GoodGuy - Actor278: hbox.e1 - Location: 88,54 - Owner: GoodGuy - Actor279: hbox.e1 - Location: 99,54 - Owner: GoodGuy - Actor280: apwr - Location: 103,54 - Owner: GoodGuy - Actor281: apwr - Location: 107,48 - Owner: GoodGuy - Actor282: apwr - Location: 107,51 - Owner: GoodGuy - Actor283: hpad - Location: 102,42 - Owner: GoodGuy - Actor284: fact - Location: 103,50 - Owner: GoodGuy - Actor285: gun - Location: 100,48 - Owner: GoodGuy - Actor286: gun - Location: 100,57 - Owner: GoodGuy - Actor287: apwr - Location: 83,50 - Owner: GoodGuy - Actor288: apwr - Location: 81,58 - Owner: GoodGuy - Actor289: minv - Location: 59,76 - Owner: GoodGuy - Actor290: minv - Location: 60,75 - Owner: GoodGuy - Actor291: minv - Location: 61,76 - Owner: GoodGuy - Actor292: minv - Location: 60,77 - Owner: GoodGuy - Actor293: minv - Location: 58,75 - Owner: GoodGuy - Actor294: minv - Location: 65,74 - Owner: GoodGuy - Actor295: minv - Location: 67,72 - Owner: GoodGuy - Actor296: minv - Location: 67,74 - Owner: GoodGuy - Actor297: minv - Location: 66,73 - Owner: GoodGuy - Actor298: minv - Location: 68,73 - Owner: GoodGuy - Actor299: minv - Location: 65,72 - Owner: GoodGuy - Actor300: silo - Location: 87,86 - Owner: Greece - Actor301: silo - Location: 87,88 - Owner: Greece - Actor302: syrd - Location: 96,74 - Owner: GoodGuy - Actor303: 2tnk - Location: 55,75 - Owner: GoodGuy - Actor304: 2tnk - Location: 57,73 - Owner: GoodGuy - Actor305: 2tnk - Location: 69,88 - Owner: GoodGuy - Actor306: 2tnk - Location: 74,80 - Owner: GoodGuy - Actor307: 2tnk - Location: 49,85 - Owner: GoodGuy - Actor308: 2tnk - Location: 50,82 - Owner: GoodGuy - Actor309: 2tnk - Location: 37,51 - Owner: Greece - Actor310: 2tnk - Location: 30,52 - Owner: Greece - Actor311: 2tnk - Location: 33,48 - Owner: Greece - Actor312: 1tnk - Location: 32,72 - Owner: GoodGuy - Actor313: 2tnk - Location: 89,49 - Owner: GoodGuy - Actor314: 2tnk - Location: 96,43 - Owner: GoodGuy - Actor315: 2tnk - Location: 89,61 - Owner: GoodGuy - Actor316: 2tnk - Location: 106,49 - Owner: GoodGuy - Actor317: 2tnk - Location: 100,62 - Owner: GoodGuy - Actor318: 2tnk - Location: 99,52 - Owner: GoodGuy - Actor319: 1tnk - Location: 77,82 - Owner: GoodGuy - Actor320: 2tnk - Location: 82,80 - Owner: GoodGuy - Actor321: 1tnk - Location: 108,84 - Owner: GoodGuy - Actor322: 1tnk - Location: 33,72 - Owner: GoodGuy - Actor323: 1tnk - Location: 84,54 - Owner: GoodGuy - Actor324: 1tnk - Location: 84,62 - Owner: GoodGuy - Actor325: 1tnk - Location: 104,58 - Owner: GoodGuy - Actor326: 1tnk - Location: 99,46 - Owner: GoodGuy - Actor327: e1 - Location: 37,47 - Owner: Greece - Actor328: e1 - Location: 31,48 - Owner: Greece - Actor329: e3 - Location: 35,46 - Owner: Greece - Actor330: e1 - Location: 39,47 - Owner: Greece - Actor331: e1 - Location: 38,51 - Owner: Greece - Actor332: e1 - Location: 36,53 - Owner: Greece - Actor333: e1 - Location: 34,54 - Owner: Greece - Actor334: e1 - Location: 32,53 - Owner: Greece - Actor335: e1 - Location: 40,51 - Owner: Greece - Actor336: e1 - Location: 33,42 - Owner: Greece - Actor337: e1 - Location: 37,42 - Owner: Greece - Actor338: e1 - Location: 37,79 - Owner: GoodGuy - Actor339: e1 - Location: 36,80 - Owner: GoodGuy - Actor340: e3 - Location: 36,79 - Owner: GoodGuy - Actor341: e3 - Location: 37,79 - Owner: GoodGuy - Actor342: e3 - Location: 53,85 - Owner: GoodGuy - Actor343: e3 - Location: 48,83 - Owner: GoodGuy - Actor344: e1 - Location: 50,83 - Owner: GoodGuy - Actor345: e1 - Location: 49,87 - Owner: GoodGuy - Actor346: e1 - Location: 30,91 - Owner: Greece - Actor347: e1 - Location: 32,90 - Owner: Greece - Actor348: e1 - Location: 31,90 - Owner: Greece - Actor349: e3 - Location: 32,92 - Owner: GoodGuy - Actor350: e3 - Location: 31,88 - Owner: GoodGuy - Actor351: e3 - Location: 32,89 - Owner: GoodGuy - Actor352: e3 - Location: 31,91 - Owner: GoodGuy - Actor353: e1 - Location: 80,78 - Owner: GoodGuy - Actor354: e1 - Location: 80,85 - Owner: GoodGuy - Actor355: e3 - Location: 79,78 - Owner: GoodGuy - Actor356: e3 - Location: 82,82 - Owner: GoodGuy - Actor357: e1 - Location: 109,85 - Owner: GoodGuy - Actor358: e1 - Location: 109,82 - Owner: GoodGuy - Actor359: e1 - Location: 106,85 - Owner: GoodGuy - Actor360: e1 - Location: 96,61 - Owner: GoodGuy - Actor361: e1 - Location: 93,62 - Owner: GoodGuy - Actor362: e1 - Location: 90,43 - Owner: GoodGuy - Actor363: e1 - Location: 89,45 - Owner: GoodGuy - Actor364: e3 - Location: 93,43 - Owner: GoodGuy - Actor365: e3 - Location: 91,45 - Owner: GoodGuy - Actor366: e1 - Location: 95,63 - Owner: GoodGuy - Actor367: e1 - Location: 89,64 - Owner: GoodGuy - Actor368: e1 - Location: 87,55 - Owner: GoodGuy - Actor369: e1 - Location: 87,53 - Owner: GoodGuy - Actor370: e1 - Location: 101,52 - Owner: GoodGuy - Actor371: e1 - Location: 100,53 - Owner: GoodGuy - Actor372: e1 - Location: 92,64 - Owner: GoodGuy - Actor373: e1 - Location: 101,63 - Owner: GoodGuy - Actor374: e3 - Location: 91,63 - Owner: GoodGuy - Actor375: e3 - Location: 101,53 - Owner: GoodGuy - Actor376: e3 - Location: 102,49 - Owner: GoodGuy - Actor377: e3 - Location: 100,46 - Owner: GoodGuy - Actor378: e3 - Location: 86,54 - Owner: GoodGuy - Actor379: e3 - Location: 87,50 - Owner: GoodGuy - Actor380: e3 - Location: 97,63 - Owner: GoodGuy - Actor381: e3 - Location: 88,62 - Owner: GoodGuy - Actor382: e3 - Location: 86,60 - Owner: GoodGuy - Actor383: e3 - Location: 84,56 - Owner: GoodGuy - pdox: pdox - Location: 94,52 - Owner: GoodGuy - ca1: ca - Location: 119,66 - Owner: GoodGuy - ca2: ca - Location: 120,66 - Owner: GoodGuy - mslo1: mslo - Location: 89,84 - Owner: Greece - mslo2: mslo - Location: 89,83 - Owner: Greece - mslo3: mslo - Location: 89,82 - Owner: Greece - mig1: mig - Location: 124,52 - Owner: GoodGuy - mig2: mig - Location: 128,47 - Owner: GoodGuy - spawn0: mpspawn - Location: 36,36 - Owner: Neutral - spawn1: mpspawn - Location: 35,48 - Owner: Neutral - spawn2: mpspawn - Location: 33,36 - Owner: Neutral - spawn3: mpspawn - Location: 39,36 - Owner: Neutral - spawn4: mpspawn - Location: 29,36 - Owner: Neutral - spawn5: mpspawn - Location: 44,36 - Owner: Neutral - spawn6: mpspawn - Location: 32,46 - Owner: Neutral - spawn7: mpspawn - Location: 38,49 - Owner: Neutral - -Smudges: - -Rules: - World: - DefaultShellmapScript: - -SpawnMPUnits: - -MPStartLocations: - LoadWidgetAtGameStart: - Widget: MAINMENU - MSLO: - Building: - Power: 0 - -Sequences: - -VoxelSequences: - -Weapons: - 8Inch: - Report: tank6.aud - -Voices: - -Notifications: - -Translations: