From 856120f2b238bc0813f975f2562508622460e9fb Mon Sep 17 00:00:00 2001 From: ScottNZ Date: Sat, 8 Mar 2014 00:26:09 +1300 Subject: [PATCH] Remove hardcoded missions --- OpenRA.Mods.RA/Missions/Allies01Script.cs | 322 -- OpenRA.Mods.RA/Missions/Allies02Script.cs | 478 --- OpenRA.Mods.RA/Missions/Allies03Script.cs | 459 --- OpenRA.Mods.RA/Missions/Allies04Script.cs | 576 ---- OpenRA.Mods.RA/Missions/CountdownTimer.cs | 68 - OpenRA.Mods.RA/Missions/FortLonestarScript.cs | 379 --- OpenRA.Mods.RA/Missions/MissionUtils.cs | 253 -- OpenRA.Mods.RA/Missions/MissionWidgets.cs | 55 - .../Missions/MonsterTankMadnessScript.cs | 342 -- OpenRA.Mods.RA/Missions/Objective.cs | 52 - .../Missions/Soviet01ClassicScript.cs | 208 -- OpenRA.Mods.RA/Missions/Survival01Script.cs | 346 -- OpenRA.Mods.RA/Missions/Survival02Script.cs | 411 --- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 14 - .../Scripting/LuaScriptInterface.cs | 22 +- .../Widgets/Logic/MissionObjectivesLogic.cs | 111 - mods/ra/maps/Fort-Lonestar/map.bin | Bin 46085 -> 0 bytes mods/ra/maps/Fort-Lonestar/map.yaml | 1249 -------- mods/ra/maps/Survival01/map.bin | Bin 30725 -> 0 bytes mods/ra/maps/Survival01/map.yaml | 1329 -------- mods/ra/maps/Survival02/map.bin | Bin 32005 -> 0 bytes mods/ra/maps/Survival02/map.yaml | 1149 ------- mods/ra/maps/allies-01/map.bin | Bin 15365 -> 0 bytes mods/ra/maps/allies-01/map.yaml | 446 --- mods/ra/maps/allies-02/map.bin | Bin 81925 -> 0 bytes mods/ra/maps/allies-02/map.yaml | 1947 ------------ mods/ra/maps/allies-03/map.bin | Bin 92165 -> 0 bytes mods/ra/maps/allies-03/map.yaml | 1580 ---------- mods/ra/maps/allies-04/map.bin | Bin 81925 -> 0 bytes mods/ra/maps/allies-04/map.yaml | 2004 ------------ mods/ra/maps/monster-tank-madness/map.bin | Bin 81925 -> 0 bytes mods/ra/maps/monster-tank-madness/map.yaml | 2777 ----------------- mods/ra/maps/soviet-01-classic/map.bin | Bin 81925 -> 0 bytes mods/ra/maps/soviet-01-classic/map.yaml | 953 ------ 34 files changed, 20 insertions(+), 17510 deletions(-) delete mode 100644 OpenRA.Mods.RA/Missions/Allies01Script.cs delete mode 100644 OpenRA.Mods.RA/Missions/Allies02Script.cs delete mode 100644 OpenRA.Mods.RA/Missions/Allies03Script.cs delete mode 100644 OpenRA.Mods.RA/Missions/Allies04Script.cs delete mode 100644 OpenRA.Mods.RA/Missions/CountdownTimer.cs delete mode 100644 OpenRA.Mods.RA/Missions/FortLonestarScript.cs delete mode 100644 OpenRA.Mods.RA/Missions/MissionUtils.cs delete mode 100644 OpenRA.Mods.RA/Missions/MissionWidgets.cs delete mode 100644 OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs delete mode 100644 OpenRA.Mods.RA/Missions/Objective.cs delete mode 100644 OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs delete mode 100644 OpenRA.Mods.RA/Missions/Survival01Script.cs delete mode 100644 OpenRA.Mods.RA/Missions/Survival02Script.cs delete mode 100644 OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs delete mode 100644 mods/ra/maps/Fort-Lonestar/map.bin delete mode 100644 mods/ra/maps/Fort-Lonestar/map.yaml delete mode 100644 mods/ra/maps/Survival01/map.bin delete mode 100644 mods/ra/maps/Survival01/map.yaml delete mode 100644 mods/ra/maps/Survival02/map.bin delete mode 100644 mods/ra/maps/Survival02/map.yaml delete mode 100644 mods/ra/maps/allies-01/map.bin delete mode 100644 mods/ra/maps/allies-01/map.yaml delete mode 100644 mods/ra/maps/allies-02/map.bin delete mode 100644 mods/ra/maps/allies-02/map.yaml delete mode 100644 mods/ra/maps/allies-03/map.bin delete mode 100644 mods/ra/maps/allies-03/map.yaml delete mode 100644 mods/ra/maps/allies-04/map.bin delete mode 100644 mods/ra/maps/allies-04/map.yaml delete mode 100644 mods/ra/maps/monster-tank-madness/map.bin delete mode 100644 mods/ra/maps/monster-tank-madness/map.yaml delete mode 100644 mods/ra/maps/soviet-01-classic/map.bin delete mode 100644 mods/ra/maps/soviet-01-classic/map.yaml diff --git a/OpenRA.Mods.RA/Missions/Allies01Script.cs b/OpenRA.Mods.RA/Missions/Allies01Script.cs deleted file mode 100644 index 868e46c3e5..0000000000 --- a/OpenRA.Mods.RA/Missions/Allies01Script.cs +++ /dev/null @@ -1,322 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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 System.Linq; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Air; -using OpenRA.Mods.RA.Move; -using OpenRA.Scripting; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA.Missions -{ - class Allies01ScriptInfo : TraitInfo, Requires { } - - class Allies01Script : IHasObjectives, IWorldLoaded, ITick - { - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return new[] { findEinstein, extractEinstein }; } } - - Objective findEinstein = new Objective(ObjectiveType.Primary, FindEinsteinText, ObjectiveStatus.InProgress); - Objective extractEinstein = new Objective(ObjectiveType.Primary, ExtractEinsteinText, ObjectiveStatus.Inactive); - - const string FindEinsteinText = "Find Einstein. Tanya and Einstein must survive."; - const string ExtractEinsteinText = "Wait for the helicopter and extract Einstein. Tanya and Einstein must survive."; - - Player allies; - Player soviets; - - Actor insertionLZ; - Actor extractionLZ; - Actor lab; - Actor insertionLZEntryPoint; - Actor extractionLZEntryPoint; - Actor chinookExitPoint; - Actor shipSpawnPoint; - Actor shipMovePoint; - Actor einstein; - Actor einsteinChinook; - Actor tanya; - Actor attackEntryPoint1; - Actor attackEntryPoint2; - - World world; - - static readonly string[] Taunts = { "laugh1.aud", "lefty1.aud", "cmon1.aud", "gotit1.aud" }; - - static readonly string[] Ships = { "ca", "ca", "ca", "ca" }; - static readonly string[] Patrol = { "e1", "dog", "e1" }; - - static readonly string[] AttackWave = { "e1", "e1", "e1", "e1", "e2", "e2", "e2", "e2", "dog" }; - static readonly string[] LastAttackWaveAddition = { "3tnk", "e1", "e1", "e1", "e1", "e2", "e2", "e2", "e2" }; - int currentAttackWaveFrameNumber; - int currentAttackWave; - const int EinsteinChinookAttackWave = 5; - - const int LabClearRange = 5; - const string EinsteinName = "einstein"; - const string TanyaName = "e7"; - const string SignalFlareName = "flare"; - - string difficulty; - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, allies); - } - - void MissionFailed(string text) - { - MissionUtils.CoopMissionFailed(world, text, allies); - } - - public void Tick(Actor self) - { - if (allies.WinState != WinState.Undefined) return; - - if (world.FrameNumber % 1000 == 0) - Sound.Play(Taunts[world.SharedRandom.Next(Taunts.Length)]); - - if (findEinstein.Status == ObjectiveStatus.InProgress) - { - if (AlliesControlLab()) - LabSecured(); - - if (lab.IsDead()) - { - findEinstein.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("Einstein was killed."); - } - } - if (extractEinstein.Status == ObjectiveStatus.InProgress) - { - if (difficulty != "Easy") - { - ManageSovietUnits(); - if (world.FrameNumber >= currentAttackWaveFrameNumber + 400) - { - SpawnSovietUnits(AttackWave); - currentAttackWave++; - currentAttackWaveFrameNumber = world.FrameNumber; - - if (currentAttackWave >= EinsteinChinookAttackWave) - SpawnSovietUnits(LastAttackWaveAddition); - - if (currentAttackWave == EinsteinChinookAttackWave) - ExtractEinsteinAtLZ(); - } - } - if (einsteinChinook != null) - { - if (einsteinChinook.IsDead()) - { - extractEinstein.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The extraction helicopter was destroyed."); - } - else if (!world.Map.IsInMap(einsteinChinook.Location) && einsteinChinook.Trait().Passengers.Contains(einstein)) - { - extractEinstein.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - MissionAccomplished("Einstein was rescued"); - } - } - } - - if (tanya != null && tanya.IsDead()) - MissionFailed("Tanya was killed."); - - else if (einstein != null && einstein.IsDead()) - MissionFailed("Einstein was killed."); - - MissionUtils.CapOre(soviets); - } - - void LabSecured() - { - SpawnSignalFlare(); - Sound.Play("flaren1.aud"); - SpawnEinsteinAtLab(); - SendShips(); - lab.QueueActivity(new Transform(lab, "stek") { SkipMakeAnims = true }); - - findEinstein.Status = ObjectiveStatus.Completed; - extractEinstein.Status = ObjectiveStatus.InProgress; - OnObjectivesUpdated(true); - - currentAttackWaveFrameNumber = world.FrameNumber; - - if (difficulty == "Easy") - ExtractEinsteinAtLZ(); - else - { - var infantry = MissionUtils.FindQueues(world, soviets, "Infantry").FirstOrDefault(); - if (infantry != null) - infantry.ResolveOrder(infantry.self, Order.StartProduction(infantry.self, "e1", 5)); - } - } - - void SpawnSignalFlare() - { - world.CreateActor(SignalFlareName, new TypeDictionary { new OwnerInit(allies), new LocationInit(extractionLZ.Location) }); - } - - void SpawnSovietUnits(IEnumerable wave) - { - foreach (var unit in wave) - { - var spawnActor = world.SharedRandom.Next(2) == 0 ? attackEntryPoint1 : attackEntryPoint2; - world.CreateActor(unit, new TypeDictionary { new OwnerInit(soviets), new LocationInit(spawnActor.Location) }); - } - } - - void ManageSovietUnits() - { - foreach (var unit in world.Actors.Where(u => u.IsInWorld && u.Owner == soviets && !u.IsDead() && u.IsIdle - && u.HasTrait() && u.HasTrait())) - { - Activity innerActivity; - if (einstein != null) - { - if (einstein.IsInWorld) - innerActivity = new Move.Move(Target.FromActor(einstein), WRange.FromCells(3)); - - else - { - var container = world.UnitContaining(einstein); - - if (container != null && !container.HasTrait() && container.HasTrait()) - innerActivity = new Move.Move(Target.FromActor(container), WRange.FromCells(3)); - - else - innerActivity = new Move.Move(extractionLZ.Location, 3); - } - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, innerActivity)); - } - } - } - - void SendPatrol() - { - for (int i = 0; i < Patrol.Length; i++) - world.CreateActor(Patrol[i], new TypeDictionary - { - new OwnerInit(soviets), - new LocationInit(insertionLZ.Location + new CVec(-1 + i, 10 + i * 2)) - }) - .QueueActivity(new Move.Move(insertionLZ.Location)); - } - - bool AlliesControlLab() - { - return MissionUtils.AreaSecuredWithUnits(world, allies, lab.CenterPosition, WRange.FromCells(LabClearRange)); - } - - void SpawnEinsteinAtLab() - { - einstein = world.CreateActor(EinsteinName, new TypeDictionary { new OwnerInit(allies), new LocationInit(lab.Location) }); - einstein.QueueActivity(new Move.Move(lab.Location - new CVec(0, 2))); - } - - void SendShips() - { - for (int i = 0; i < Ships.Length; i++) - world.CreateActor(Ships[i], new TypeDictionary - { - new OwnerInit(allies), - new LocationInit(shipSpawnPoint.Location + new CVec(i * 2, 0)) - }) - .QueueActivity(new Move.Move(shipMovePoint.Location + new CVec(i * 4, 0))); - } - - void ExtractEinsteinAtLZ() - { - einsteinChinook = MissionUtils.ExtractUnitWithChinook( - world, - allies, - einstein, - extractionLZEntryPoint.Location, - extractionLZ.Location, - chinookExitPoint.Location); - } - - void InsertTanyaAtLZ() - { - tanya = MissionUtils.InsertUnitWithChinook( - world, - allies, - TanyaName, - insertionLZEntryPoint.Location, - insertionLZ.Location, - chinookExitPoint.Location, - unit => - { - Sound.Play("laugh1.aud"); - unit.QueueActivity(new Move.Move(insertionLZ.Location - new CVec(1, 0))); - }).Second; - } - - void SetAlliedUnitsToDefensiveStance() - { - foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == allies && !a.IsDead() && a.HasTrait())) - actor.Trait().Stance = UnitStance.Defend; - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - - difficulty = w.LobbyInfo.GlobalSettings.Difficulty; - Game.Debug("{0} difficulty selected".F(difficulty)); - - allies = w.Players.Single(p => p.InternalName == "Allies"); - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - - allies.PlayerActor.Trait().Cash = 0; - - var actors = w.WorldActor.Trait().Actors; - insertionLZ = actors["InsertionLZ"]; - extractionLZ = actors["ExtractionLZ"]; - lab = actors["Lab"]; - insertionLZEntryPoint = actors["InsertionLZEntryPoint"]; - chinookExitPoint = actors["ChinookExitPoint"]; - extractionLZEntryPoint = actors["ExtractionLZEntryPoint"]; - shipSpawnPoint = actors["ShipSpawnPoint"]; - shipMovePoint = actors["ShipMovePoint"]; - attackEntryPoint1 = actors["SovietAttackEntryPoint1"]; - attackEntryPoint2 = actors["SovietAttackEntryPoint2"]; - SetAlliedUnitsToDefensiveStance(); - - wr.Viewport.Center(insertionLZ.CenterPosition); - - if (w.LobbyInfo.IsSinglePlayer) - Media.PlayFMVFullscreen(w, "ally1.vqa", () => - Media.PlayFMVFullscreen(w, "landing.vqa", () => - { - InsertTanyaAtLZ(); - SendPatrol(); - MissionUtils.PlayMissionMusic(); - }) - ); - else - { - InsertTanyaAtLZ(); - SendPatrol(); - MissionUtils.PlayMissionMusic(); - } - } - } -} diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs deleted file mode 100644 index ee017320c4..0000000000 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ /dev/null @@ -1,478 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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 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.Effects; -using OpenRA.Mods.RA.Move; -using OpenRA.Traits; -using OpenRA.Widgets; - -namespace OpenRA.Mods.RA.Missions -{ - class Allies02ScriptInfo : TraitInfo, Requires { } - - class Allies02Script : IHasObjectives, IWorldLoaded, ITick - { - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return new[] { findEinstein, destroySamSites, extractEinstein, maintainPresence, fewDeaths }; } } - - Objective findEinstein = new Objective(ObjectiveType.Primary, FindEinsteinText, ObjectiveStatus.InProgress); - Objective destroySamSites = new Objective(ObjectiveType.Primary, DestroySamSitesText, ObjectiveStatus.InProgress); - Objective extractEinstein = new Objective(ObjectiveType.Primary, ExtractEinsteinText, ObjectiveStatus.Inactive); - Objective maintainPresence = new Objective(ObjectiveType.Primary, MaintainPresenceText, ObjectiveStatus.InProgress); - Objective fewDeaths = new Objective(ObjectiveType.Secondary, "", ObjectiveStatus.InProgress); - - const string FindEinsteinText = "Find Einstein's crashed helicopter. Tanya must survive."; - const string DestroySamSitesText = "Destroy the SAM sites. Tanya must survive."; - const string ExtractEinsteinText = "Wait for the helicopter and extract Einstein. Tanya and Einstein must survive."; - const string MaintainPresenceText = "Maintain an Allied presence in the area. Reinforcements will arrive soon."; - - const string FewDeathsTemplate = "Lose fewer than {0}/{1} units."; - - const int DeathsThreshold = 200; - - Actor sam1; - Actor sam2; - Actor sam3; - Actor sam4; - Actor[] sams; - Actor tanya; - Actor einstein; - Actor engineer; - - Actor chinookHusk; - Actor allies2BasePoint; - Actor reinforcementsEntryPoint; - Actor extractionLZEntryPoint; - Actor extractionLZ; - Actor badgerEntryPoint1; - Actor badgerEntryPoint2; - Actor badgerDropPoint1; - Actor badgerDropPoint2; - Actor badgerDropPoint3; - Actor parabombPoint1; - Actor parabombPoint2; - Actor sovietRallyPoint; - Actor townPoint; - Actor sovietTownAttackPoint1; - Actor sovietTownAttackPoint2; - Actor yakEntryPoint; - Actor yakAttackPoint; - Actor yak; - - Actor einsteinChinook; - - World world; - Player allies; - Player allies1; - Player allies2; - Player soviets; - - Actor sovietBarracks; - Actor sovietWarFactory; - - CountdownTimer reinforcementsTimer; - CountdownTimerWidget reinforcementsTimerWidget; - - CPos alliedBaseTopLeft; - CPos alliedBaseBottomRight; - - const string InfantryQueueName = "Infantry"; - const string VehicleQueueName = "Vehicle"; - static readonly string[] SovietInfantry = { "e1", "e2", "e3" }; - static readonly string[] SovietVehicles1 = { "3tnk" }; - static readonly string[] SovietVehicles2 = { "3tnk", "v2rl" }; - const int SovietVehiclesUpgradeTicks = 1500 * 4; - const int SovietGroupSize = 5; - - const int ReinforcementsTicks = 1500 * 16; - static readonly string[] Reinforcements = - { - "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", - "1tnk", "1tnk", - "jeep", - "e1", "e1", "e1", "e1", - "e3", "e3", - "mcv", - "truk", "truk", "truk", "truk", "truk", "truk" - }; - int currentReinforcement = -1; - - const int ParabombTicks = 750; - - const int ParatroopersTicks = 1500 * 5; - static readonly string[] Badger1Passengers = { "e1", "e1", "e1", "e2", "3tnk" }; - static readonly string[] Badger2Passengers = { "e1", "e1", "e1", "e2", "e2" }; - static readonly string[] Badger3Passengers = { "e1", "e1", "e1", "e2", "e2" }; - - const string SignalFlareName = "flare"; - const string YakName = "yak"; - - const int AlliedTownTransferRange = 15; - const int SovietTownAttackGroupRange = 5; - const int SovietTownMoveNearEnough = 3; - - void MissionFailed(string text) - { - MissionUtils.CoopMissionFailed(world, text, allies1, allies2); - if (reinforcementsTimer != null) - reinforcementsTimerWidget.Visible = false; - } - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, allies1, allies2); - } - - public void Tick(Actor self) - { - if (allies1.WinState != WinState.Undefined) return; - - if (world.FrameNumber % 50 == 1 && chinookHusk.IsInWorld) - world.Add(new Smoke(world, chinookHusk.CenterPosition, "smoke_m")); - - if (world.FrameNumber == 1) - { - InitializeSovietFactories(); - StartReinforcementsTimer(); - } - - reinforcementsTimer.Tick(); - - if (world.FrameNumber == ParatroopersTicks) - { - MissionUtils.Paradrop(world, soviets, Badger1Passengers, badgerEntryPoint1.Location, badgerDropPoint1.Location); - MissionUtils.Paradrop(world, soviets, Badger2Passengers, badgerEntryPoint1.Location + new CVec(3, 0), badgerDropPoint2.Location); - MissionUtils.Paradrop(world, soviets, Badger3Passengers, badgerEntryPoint1.Location + new CVec(6, 0), badgerDropPoint3.Location); - } - if (world.FrameNumber == ParabombTicks) - { - MissionUtils.Parabomb(world, soviets, badgerEntryPoint2.Location, parabombPoint1.Location); - MissionUtils.Parabomb(world, soviets, badgerEntryPoint2.Location + new CVec(0, 3), parabombPoint2.Location); - } - - if (allies1 != allies2) - { - if (yak == null || (yak != null && !yak.IsDead() && (yak.GetCurrentActivity() is FlyCircle || yak.IsIdle))) - { - var alliedUnitsNearYakPoint = world.FindAliveCombatantActorsInCircle(yakAttackPoint.CenterPosition, WRange.FromCells(10)) - .Where(a => a.Owner != soviets && a.HasTrait() && a != tanya && a != einstein && a != engineer); - if (alliedUnitsNearYakPoint.Any()) - YakStrafe(alliedUnitsNearYakPoint); - } - } - - if (currentReinforcement > -1 && currentReinforcement < Reinforcements.Length && world.FrameNumber % 25 == 0) - SpawnAlliedUnit(Reinforcements[currentReinforcement++]); - - if (world.FrameNumber % 25 == 0) - { - BuildSovietUnits(); - ManageSovietUnits(); - } - - UpdateDeaths(); - - if (findEinstein.Status == ObjectiveStatus.InProgress) - { - if (AlliesNearTown()) - { - findEinstein.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - TransferTownUnitsToAllies(); - SovietsAttackTown(); - } - } - if (destroySamSites.Status == ObjectiveStatus.InProgress) - { - if (sams.All(s => s.IsDead() || s.Owner != soviets)) - { - destroySamSites.Status = ObjectiveStatus.Completed; - extractEinstein.Status = ObjectiveStatus.InProgress; - - OnObjectivesUpdated(true); - - world.CreateActor(SignalFlareName, new TypeDictionary { new OwnerInit(allies1), new LocationInit(extractionLZ.Location) }); - Sound.Play("flaren1.aud"); - ExtractEinsteinAtLZ(); - } - } - if (extractEinstein.Status == ObjectiveStatus.InProgress && einsteinChinook != null) - { - if (einsteinChinook.IsDead()) - { - extractEinstein.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The extraction helicopter was destroyed."); - } - else if (!world.Map.IsInMap(einsteinChinook.Location) && einsteinChinook.Trait().Passengers.Contains(einstein)) - { - extractEinstein.Status = ObjectiveStatus.Completed; - maintainPresence.Status = ObjectiveStatus.Completed; - - if (fewDeaths.Status == ObjectiveStatus.InProgress) - fewDeaths.Status = ObjectiveStatus.Completed; - - OnObjectivesUpdated(true); - MissionAccomplished("Einstein was rescued."); - } - } - - if (tanya.IsDead()) - MissionFailed("Tanya was killed."); - - else if (einstein.IsDead()) - MissionFailed("Einstein was killed."); - - world.AddFrameEndTask(w => - { - if (!w.FindAliveCombatantActorsInBox(alliedBaseTopLeft, alliedBaseBottomRight) - .Any(a => (a.Owner == allies || a.Owner == allies2) && (a.HasTrait() && !a.HasTrait()) || a.HasTrait())) - { - maintainPresence.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The Allied reinforcements have been defeated."); - } - }); - } - - void UpdateDeaths() - { - var unitDeaths = allies1.PlayerActor.Trait().UnitsDead + allies2.PlayerActor.Trait().UnitsDead; - fewDeaths.Text = FewDeathsTemplate.F(unitDeaths, DeathsThreshold); - OnObjectivesUpdated(false); - if (unitDeaths >= DeathsThreshold && fewDeaths.Status == ObjectiveStatus.InProgress) - { - fewDeaths.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - } - } - - void YakStrafe(IEnumerable candidates) - { - if (yak == null) - { - var altitude = Rules.Info[YakName].Traits.Get().CruiseAltitude; - yak = world.CreateActor(YakName, new TypeDictionary - { - new CenterPositionInit(yakEntryPoint.CenterPosition + new WVec(WRange.Zero, WRange.Zero, altitude)), - new OwnerInit(soviets), - new FacingInit(Traits.Util.GetFacing(yakAttackPoint.Location - yakEntryPoint.Location, 0)) - }); - } - - if (yak.Trait().HasAmmo()) - yak.QueueActivity(new FlyAttack(Target.FromActor(candidates.Random(world.SharedRandom)))); - - else - { - yak.QueueActivity(new FlyOffMap()); - yak.QueueActivity(new RemoveSelf()); - } - } - - void BuildSovietUnits() - { - if (!sovietBarracks.IsDead()) - BuildSovietUnit(InfantryQueueName, SovietInfantry.Random(world.SharedRandom)); - - if (!sovietWarFactory.IsDead()) - { - var vehicles = world.FrameNumber >= SovietVehiclesUpgradeTicks ? SovietVehicles2 : SovietVehicles1; - BuildSovietUnit(VehicleQueueName, vehicles.Random(world.SharedRandom)); - } - } - - void ManageSovietUnits() - { - var units = world.FindAliveCombatantActorsInCircle(sovietRallyPoint.CenterPosition, WRange.FromCells(10)) - .Where(u => u.IsIdle && u.HasTrait() && u.HasTrait() && u.Owner == soviets) - .Except(world.WorldActor.Trait().Actors.Values); - if (units.Count() >= SovietGroupSize) - { - foreach (var unit in units) - MissionUtils.AttackNearestLandActor(true, unit, allies2); - } - - var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.IsIdle - && u.HasTrait() && u.HasTrait() && u.Owner == soviets) - .Except(world.WorldActor.Trait().Actors.Values) - .Except(units); - - foreach (var unit in scatteredUnits) - MissionUtils.AttackNearestLandActor(true, unit, allies2); - } - - void SetupAlliedBase() - { - foreach (var actor in world.Actors.Where(a => a.Owner == allies && a != allies.PlayerActor)) - { - actor.ChangeOwner(allies2); - if (actor.Info.Name == "proc") - actor.QueueActivity(new Transform(actor, "proc") { SkipMakeAnims = true }); // for harv spawn - foreach (var c in actor.TraitsImplementing()) - c.OnCapture(actor, actor, allies, allies2); - } - } - - void InitializeSovietFactories() - { - var sbrp = sovietBarracks.Trait(); - var swrp = sovietWarFactory.Trait(); - sbrp.rallyPoint = swrp.rallyPoint = sovietRallyPoint.Location; - sbrp.nearEnough = swrp.nearEnough = 6; - sovietBarracks.Trait().SetPrimaryProducer(sovietBarracks, true); - sovietWarFactory.Trait().SetPrimaryProducer(sovietWarFactory, true); - } - - void BuildSovietUnit(string category, string unit) - { - MissionUtils.StartProduction(world, soviets, category, unit); - } - - void StartReinforcementsTimer() - { - Sound.Play("timergo1.aud"); - reinforcementsTimer = new CountdownTimer(ReinforcementsTicks, ReinforcementsTimerExpired, true); - reinforcementsTimerWidget = new CountdownTimerWidget(reinforcementsTimer, "Allied reinforcements arrive in: {0}"); - Ui.Root.AddChild(reinforcementsTimerWidget); - } - - void ReinforcementsTimerExpired(CountdownTimer countdownTimer) - { - reinforcementsTimerWidget.Visible = false; - currentReinforcement++; - Sound.Play("aarrivs1.aud"); - } - - void SpawnAlliedUnit(string unit) - { - world.CreateActor(unit, new TypeDictionary - { - new LocationInit(reinforcementsEntryPoint.Location), - new FacingInit(0), - new OwnerInit(allies2) - }) - .QueueActivity(new Move.Move(allies2BasePoint.Location)); - } - - void ExtractEinsteinAtLZ() - { - einsteinChinook = MissionUtils.ExtractUnitWithChinook( - world, - allies1, - einstein, - extractionLZEntryPoint.Location, - extractionLZ.Location, - extractionLZEntryPoint.Location); - } - - bool AlliesNearTown() - { - return world.FindAliveCombatantActorsInCircle(townPoint.CenterPosition, WRange.FromCells(AlliedTownTransferRange)) - .Any(a => a.Owner == allies1 && a.HasTrait()); - } - - void TransferTownUnitsToAllies() - { - foreach (var unit in world.FindAliveNonCombatantActorsInCircle(townPoint.CenterPosition, WRange.FromCells(AlliedTownTransferRange)) - .Where(a => a.HasTrait())) - unit.ChangeOwner(allies1); - } - - void SovietsAttackTown() - { - var sovietAttackUnits = world.FindAliveCombatantActorsInCircle(sovietTownAttackPoint1.CenterPosition, WRange.FromCells(SovietTownAttackGroupRange)) - .Union(world.FindAliveCombatantActorsInCircle(sovietTownAttackPoint2.CenterPosition, WRange.FromCells(SovietTownAttackGroupRange))) - .Union(world.FindAliveCombatantActorsInCircle(townPoint.CenterPosition, WRange.FromCells(AlliedTownTransferRange))) - .Where(a => a.HasTrait() && a.Owner == soviets); - - foreach (var unit in sovietAttackUnits) - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(townPoint.Location, SovietTownMoveNearEnough))); - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - - allies1 = w.Players.Single(p => p.InternalName == "Allies1"); - allies2 = w.Players.SingleOrDefault(p => p.InternalName == "Allies2"); - - allies1.PlayerActor.Trait().Cash = 5000; - if (allies2 == null) - allies2 = allies1; - else - allies2.PlayerActor.Trait().Cash = 5000; - - allies = w.Players.Single(p => p.InternalName == "Allies"); - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - - soviets.PlayerActor.Trait().Cash = 1000; - - var actors = w.WorldActor.Trait().Actors; - sam1 = actors["SAM1"]; - sam2 = actors["SAM2"]; - sam3 = actors["SAM3"]; - sam4 = actors["SAM4"]; - sams = new[] { sam1, sam2, sam3, sam4 }; - tanya = actors["Tanya"]; - einstein = actors["Einstein"]; - engineer = actors["Engineer"]; - chinookHusk = actors["ChinookHusk"]; - allies2BasePoint = actors["Allies2BasePoint"]; - reinforcementsEntryPoint = actors["ReinforcementsEntryPoint"]; - extractionLZ = actors["ExtractionLZ"]; - extractionLZEntryPoint = actors["ExtractionLZEntryPoint"]; - - badgerEntryPoint1 = actors["BadgerEntryPoint1"]; - badgerEntryPoint2 = actors["BadgerEntryPoint2"]; - badgerDropPoint1 = actors["BadgerDropPoint1"]; - badgerDropPoint2 = actors["BadgerDropPoint2"]; - badgerDropPoint3 = actors["BadgerDropPoint3"]; - - parabombPoint1 = actors["ParabombPoint1"]; - parabombPoint2 = actors["ParabombPoint2"]; - sovietBarracks = actors["SovietBarracks"]; - sovietWarFactory = actors["SovietWarFactory"]; - sovietRallyPoint = actors["SovietRallyPoint"]; - townPoint = actors["TownPoint"]; - sovietTownAttackPoint1 = actors["SovietTownAttackPoint1"]; - sovietTownAttackPoint2 = actors["SovietTownAttackPoint2"]; - yakEntryPoint = actors["YakEntryPoint"]; - yakAttackPoint = actors["YakAttackPoint"]; - - alliedBaseTopLeft = actors["AlliedBaseTopLeft"].Location; - alliedBaseBottomRight = actors["AlliedBaseBottomRight"].Location; - - SetupAlliedBase(); - - var shroud = allies1.Shroud; - shroud.Explore(w, sam1.Location, WRange.FromCells(2)); - shroud.Explore(w, sam2.Location, WRange.FromCells(2)); - shroud.Explore(w, sam3.Location, WRange.FromCells(2)); - shroud.Explore(w, sam4.Location, WRange.FromCells(2)); - - if (w.LocalPlayer == null || w.LocalPlayer == allies1) - wr.Viewport.Center(chinookHusk.CenterPosition); - else - wr.Viewport.Center(allies2BasePoint.CenterPosition); - - MissionUtils.PlayMissionMusic(); - } - } -} diff --git a/OpenRA.Mods.RA/Missions/Allies03Script.cs b/OpenRA.Mods.RA/Missions/Allies03Script.cs deleted file mode 100644 index 501765bf88..0000000000 --- a/OpenRA.Mods.RA/Missions/Allies03Script.cs +++ /dev/null @@ -1,459 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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 System.Drawing; -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.Traits; -using OpenRA.Widgets; - -namespace OpenRA.Mods.RA.Missions -{ - class Allies03ScriptInfo : TraitInfo, Requires { } - - class Allies03Script : IHasObjectives, IWorldLoaded, ITick - { - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return new[] { evacuateUnits, destroyAirbases, evacuateMgg }; } } - - Objective evacuateUnits = new Objective(ObjectiveType.Primary, EvacuateUnitsText, ObjectiveStatus.InProgress); - Objective destroyAirbases = new Objective(ObjectiveType.Secondary, DestroyAirbasesText, ObjectiveStatus.InProgress); - Objective evacuateMgg = new Objective(ObjectiveType.Secondary, EvacuateMggText, ObjectiveStatus.InProgress); - - const string EvacuateUnitsText = "Following the rescue of Einstein, the Allies are now being flanked from both sides." - + " Evacuate {0} units before the remaining Allied forces in the area are wiped out."; - const string DestroyAirbasesText = "Destroy the nearby Soviet airbases."; - const string EvacuateMggText = "Einstein has recently developed a technology which allows us to obscure units from the enemy." - + " Evacuate at least one prototype mobile gap generator intact."; - - const string ShortEvacuateTemplate = "{0}/{1} units evacuated"; - - int unitsEvacuatedThreshold; - int unitsEvacuated; - InfoWidget evacuateWidget; - - World world; - Player allies1; - Player allies2; - Player allies; - Player soviets; - - Actor exit1TopLeft; - Actor exit1BottomRight; - Actor exit1ExitPoint; - - Actor exit2TopLeft; - Actor exit2BottomRight; - Actor exit2ExitPoint; - - Actor sovietEntryPoint1; - Actor sovietEntryPoint2; - Actor sovietEntryPoint3; - Actor sovietEntryPoint4; - Actor sovietEntryPoint5; - Actor sovietEntryPoint6; - CPos[] sovietEntryPoints; - Actor sovietRallyPoint1; - Actor sovietRallyPoint2; - Actor sovietRallyPoint3; - Actor sovietRallyPoint4; - Actor sovietRallyPoint5; - Actor sovietRallyPoint6; - CPos[] sovietRallyPoints; - - Actor[] sovietAirfields; - - Rectangle paradropBox; - - const int ReinforcementsTicks1 = 1500 * 5; - static readonly string[] Reinforcements1 = { "mgg", "2tnk", "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", "jeep", "jeep", "e1", "e1", "e1", "e1", "e3", "e3" }; - int currentReinforcement1; - - const int ReinforcementsTicks2 = 1500 * 10; - static readonly string[] Reinforcements2 = { "mgg", "2tnk", "2tnk", "2tnk", "2tnk", "truk", "truk", "truk", "truk", "truk", "truk", "1tnk", "1tnk", "jeep", "jeep" }; - int currentReinforcement2; - - static readonly string[] SovietUnits1 = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "ftrk", "apc", "e1", "e1", "e2", "e3", "e3", "e4" }; - static readonly string[] SovietUnits2 = { "4tnk", "4tnk", "4tnk", "4tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "ftrk", "apc", "e1", "e1", "e2", "e3", "e3", "e4" }; - int sovietUnits2Ticks; - const int SovietGroupSize = 5; - - int sovietParadropTicks; - const int ParadropIncrement = 200; - static readonly string[] ParadropTerrainTypes = { "Clear", "Road", "Rough", "Beach", "Ore" }; - static readonly string[] SovietParadroppers = { "e1", "e1", "e3", "e3", "e4" }; - int sovietParadrops; - int maxSovietYaks; - - int attackAtFrame; - int attackAtFrameIncrement; - int minAttackAtFrame; - - Actor allies1EntryPoint; - Actor allies1MovePoint; - - Actor allies2EntryPoint; - Actor allies2MovePoint; - - const string McvName = "mcv"; - const string YakName = "yak"; - - string difficulty; - - void MissionFailed(string text) - { - MissionUtils.CoopMissionFailed(world, text, allies1, allies2); - } - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, allies1, allies2); - } - - public void Tick(Actor self) - { - if (allies1.WinState != WinState.Undefined) return; - - if (world.FrameNumber == 1) - { - SpawnAlliedUnit(McvName); - evacuateWidget = new InfoWidget(""); - Ui.Root.AddChild(evacuateWidget); - UpdateUnitsEvacuated(); - } - if (world.FrameNumber == attackAtFrame) - { - SpawnSovietUnits(); - attackAtFrame += attackAtFrameIncrement; - attackAtFrameIncrement = Math.Max(attackAtFrameIncrement - 5, minAttackAtFrame); - } - - if (world.FrameNumber == ReinforcementsTicks1 || world.FrameNumber == ReinforcementsTicks2) - Sound.Play("reinfor1.aud"); - - if (world.FrameNumber % 25 == 0) - { - if (world.FrameNumber >= ReinforcementsTicks1 && currentReinforcement1 < Reinforcements1.Length) - SpawnAlliedUnit(Reinforcements1[currentReinforcement1++]); - - if (world.FrameNumber >= ReinforcementsTicks2 && currentReinforcement2 < Reinforcements2.Length) - SpawnAlliedUnit(Reinforcements2[currentReinforcement2++]); - } - - - if (sovietParadrops > 0) - { - if (world.FrameNumber == sovietParadropTicks) - Sound.Play("sovfapp1.aud"); - - if (world.FrameNumber >= sovietParadropTicks && world.FrameNumber % ParadropIncrement == 0) - { - CPos lz; - CPos entry; - do - { - var x = world.SharedRandom.Next(paradropBox.X, paradropBox.X + paradropBox.Width); - var y = world.SharedRandom.Next(paradropBox.Y, paradropBox.Y + paradropBox.Height); - entry = new CPos(0, y); - lz = new CPos(x, y); - } - while (!ParadropTerrainTypes.Contains(world.GetTerrainType(lz))); - MissionUtils.Paradrop(world, soviets, SovietParadroppers, entry, lz); - sovietParadrops--; - } - } - if (world.FrameNumber % 25 == 0) - ManageSovietUnits(); - - if (destroyAirbases.Status != ObjectiveStatus.Completed) - { - if (world.FrameNumber % 25 == 0) - BuildSovietAircraft(); - - ManageSovietAircraft(); - } - - EvacuateAlliedUnits(exit1TopLeft.Location, exit1BottomRight.Location, exit1ExitPoint.Location); - EvacuateAlliedUnits(exit2TopLeft.Location, exit2BottomRight.Location, exit2ExitPoint.Location); - - CheckSovietAirbases(); - - if (!world.Actors.Any(a => (a.Owner == allies1 || a.Owner == allies2) && a.IsInWorld && !a.IsDead() - && ((a.HasTrait() && !a.HasTrait()) || a.HasTrait()))) - { - evacuateUnits.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The remaining Allied forces in the area have been wiped out."); - } - } - - Actor FirstUnshroudedOrDefault(IEnumerable actors, World world, int shroudRange) - { - return actors.FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterPosition, WRange.FromCells(shroudRange)).All(a => !a.HasTrait())); - } - - void ManageSovietAircraft() - { - var enemies = world.Actors - .Where(u => (u.Owner == allies1 || u.Owner == allies2) - && ((u.HasTrait() && !u.HasTrait()) || u.HasTrait()) && u.IsInWorld && !u.IsDead() - && (!u.HasTrait() || !u.Trait().Disguised || (u.Trait().Disguised && u.Trait().disguisedAsPlayer != soviets))); - - foreach (var aircraft in SovietAircraft()) - { - var pos = aircraft.CenterPosition; - var plane = aircraft.Trait(); - var ammo = aircraft.Trait(); - if ((pos.Z == 0 && ammo.FullAmmo()) || (pos.Z != 0 && ammo.HasAmmo())) - { - var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (aircraft.CenterPosition - u.CenterPosition).LengthSquared), world, 10); - if (enemy != null) - { - if (!aircraft.IsIdle && aircraft.GetCurrentActivity().GetType() != typeof(FlyAttack)) - aircraft.CancelActivity(); - - if (pos.Z == 0) - plane.UnReserve(); - - aircraft.QueueActivity(new FlyAttack(Target.FromActor(enemy))); - } - } - else if (pos.Z != 0 && !LandIsQueued(aircraft)) - { - aircraft.CancelActivity(); - aircraft.QueueActivity(new ReturnToBase(aircraft, null)); - aircraft.QueueActivity(new ResupplyAircraft()); - } - } - } - - bool LandIsQueued(Actor actor) - { - for (var a = actor.GetCurrentActivity(); a != null; a = a.NextActivity) - if (a is ReturnToBase || a is Land) return true; - return false; - } - - void BuildSovietAircraft() - { - var queue = MissionUtils.FindQueues(world, soviets, "Plane").FirstOrDefault(q => q.CurrentItem() == null); - if (queue == null || SovietAircraft().Count() >= maxSovietYaks) return; - - queue.ResolveOrder(queue.self, Order.StartProduction(queue.self, YakName, 1)); - } - - IEnumerable SovietAircraft() - { - return world.Actors.Where(a => a.HasTrait() && a.Owner == soviets && a.IsInWorld && !a.IsDead()); - } - - void CheckSovietAirbases() - { - if (destroyAirbases.Status != ObjectiveStatus.Completed && sovietAirfields.All(a => a.IsDead() || a.Owner != soviets)) - { - destroyAirbases.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - } - } - - void SpawnSovietUnits() - { - var route = world.SharedRandom.Next(sovietEntryPoints.Length); - var spawnPoint = sovietEntryPoints[route]; - var rallyPoint = sovietRallyPoints[route]; - - IEnumerable units; - if (world.FrameNumber >= sovietUnits2Ticks) - units = SovietUnits2; - else - units = SovietUnits1; - - var unit = world.CreateActor(units.Random(world.SharedRandom), - new TypeDictionary - { - new LocationInit(spawnPoint), - new OwnerInit(soviets) - }); - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(rallyPoint, 3))); - } - - void AttackNearestAlliedActor(Actor self) - { - var enemies = world.Actors.Where(u => u.AppearsHostileTo(self) && (u.Owner == allies1 || u.Owner == allies2) - && ((u.HasTrait() && !u.HasTrait()) || u.HasTrait()) && u.IsInWorld && !u.IsDead()); - - var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (self.CenterPosition - u.CenterPosition).LengthSquared), world, 10); - if (enemy != null) - self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3)))); - } - - void ManageSovietUnits() - { - foreach (var rallyPoint in sovietRallyPoints) - { - var units = world.FindAliveCombatantActorsInCircle(rallyPoint.CenterPosition, WRange.FromCells(10)) - .Where(u => u.IsIdle && u.HasTrait() && u.HasTrait() && u.Owner == soviets); - if (units.Count() >= SovietGroupSize) - { - foreach (var unit in units) - AttackNearestAlliedActor(unit); - } - } - - var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait() && u.IsIdle && u.Owner == soviets) - .Except(world.WorldActor.Trait().Actors.Values) - .Except(sovietRallyPoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(rp.CenterPosition, WRange.FromCells(10)))); - - foreach (var unit in scatteredUnits) - AttackNearestAlliedActor(unit); - } - - void SpawnAlliedUnit(string actor) - { - SpawnAndMove(actor, allies1, allies1EntryPoint.Location, allies1MovePoint.Location); - if (allies1 != allies2) - SpawnAndMove(actor, allies2, allies2EntryPoint.Location, allies2MovePoint.Location); - } - - Actor SpawnAndMove(string actor, Player owner, CPos entry, CPos to) - { - var unit = world.CreateActor(actor, new TypeDictionary - { - new OwnerInit(owner), - new LocationInit(entry), - new FacingInit(Traits.Util.GetFacing(to - entry, 0)) - }); - unit.QueueActivity(new Move.Move(to)); - return unit; - } - - void UpdateUnitsEvacuated() - { - evacuateWidget.Text = ShortEvacuateTemplate.F(unitsEvacuated, unitsEvacuatedThreshold); - if (evacuateUnits.Status == ObjectiveStatus.InProgress && unitsEvacuated >= unitsEvacuatedThreshold) - { - evacuateUnits.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - MissionAccomplished("The remaining Allied forces in the area have evacuated."); - } - } - - void EvacuateAlliedUnits(CPos tl, CPos br, CPos exit) - { - var units = world.FindAliveCombatantActorsInBox(tl, br) - .Where(u => u.HasTrait() && !u.HasTrait() && (u.Owner == allies1 || u.Owner == allies2)); - - foreach (var unit in units) - { - unit.CancelActivity(); - unit.ChangeOwner(allies); - unitsEvacuated++; - - var createsShroud = unit.TraitOrDefault(); - if (createsShroud != null && evacuateMgg.Status == ObjectiveStatus.InProgress) - { - evacuateMgg.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - } - - var cargo = unit.TraitOrDefault(); - if (cargo != null) - unitsEvacuated += cargo.Passengers.Count(); - - UpdateUnitsEvacuated(); - unit.QueueActivity(new Move.Move(exit)); - unit.QueueActivity(new RemoveSelf()); - } - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - - difficulty = w.LobbyInfo.GlobalSettings.Difficulty; - Game.Debug("{0} difficulty selected".F(difficulty)); - - allies1 = w.Players.Single(p => p.InternalName == "Allies1"); - allies2 = w.Players.SingleOrDefault(p => p.InternalName == "Allies2"); - - var res = allies1.PlayerActor.Trait(); - if (allies2 == null) - { - res.Cash = 10000; - allies2 = allies1; - } - else - { - res.Cash = 5000; - res = allies2.PlayerActor.Trait(); - res.Cash = 5000; - } - - attackAtFrame = attackAtFrameIncrement = difficulty == "Hard" || difficulty == "Normal" ? 500 : 600; - minAttackAtFrame = difficulty == "Hard" || difficulty == "Normal" ? 100 : 150; - unitsEvacuatedThreshold = difficulty == "Hard" ? 200 : difficulty == "Normal" ? 100 : 50; - maxSovietYaks = difficulty == "Hard" ? 4 : difficulty == "Normal" ? 2 : 0; - sovietParadrops = difficulty == "Hard" ? 40 : difficulty == "Normal" ? 20 : 0; - sovietParadropTicks = difficulty == "Hard" ? 1500 * 17 : 1500 * 20; - sovietUnits2Ticks = difficulty == "Hard" ? 1500 * 12 : 1500 * 15; - - evacuateUnits.Text = evacuateUnits.Text.F(unitsEvacuatedThreshold); - - allies = w.Players.Single(p => p.InternalName == "Allies"); - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - - var actors = w.WorldActor.Trait().Actors; - exit1TopLeft = actors["Exit1TopLeft"]; - exit1BottomRight = actors["Exit1BottomRight"]; - exit1ExitPoint = actors["Exit1ExitPoint"]; - exit2TopLeft = actors["Exit2TopLeft"]; - exit2BottomRight = actors["Exit2BottomRight"]; - exit2ExitPoint = actors["Exit2ExitPoint"]; - allies1EntryPoint = actors["Allies1EntryPoint"]; - allies1MovePoint = actors["Allies1MovePoint"]; - allies2EntryPoint = actors["Allies2EntryPoint"]; - allies2MovePoint = actors["Allies2MovePoint"]; - sovietEntryPoint1 = actors["SovietEntryPoint1"]; - sovietEntryPoint2 = actors["SovietEntryPoint2"]; - sovietEntryPoint3 = actors["SovietEntryPoint3"]; - sovietEntryPoint4 = actors["SovietEntryPoint4"]; - sovietEntryPoint5 = actors["SovietEntryPoint5"]; - sovietEntryPoint6 = actors["SovietEntryPoint6"]; - sovietEntryPoints = new[] { sovietEntryPoint1, sovietEntryPoint2, sovietEntryPoint3, sovietEntryPoint4, sovietEntryPoint5, sovietEntryPoint6 }.Select(p => p.Location).ToArray(); - sovietRallyPoint1 = actors["SovietRallyPoint1"]; - sovietRallyPoint2 = actors["SovietRallyPoint2"]; - sovietRallyPoint3 = actors["SovietRallyPoint3"]; - sovietRallyPoint4 = actors["SovietRallyPoint4"]; - sovietRallyPoint5 = actors["SovietRallyPoint5"]; - sovietRallyPoint6 = actors["SovietRallyPoint6"]; - sovietRallyPoints = new[] { sovietRallyPoint1, sovietRallyPoint2, sovietRallyPoint3, sovietRallyPoint4, sovietRallyPoint5, sovietRallyPoint6 }.Select(p => p.Location).ToArray(); - sovietAirfields = actors.Values.Where(a => a.Owner == soviets && a.HasTrait() && a.Info.Traits.Get().Produces.Contains("Plane")).ToArray(); - var topLeft = actors["ParadropBoxTopLeft"]; - var bottomRight = actors["ParadropBoxBottomRight"]; - paradropBox = new Rectangle(topLeft.Location.X, topLeft.Location.Y, bottomRight.Location.X - topLeft.Location.X, bottomRight.Location.Y - topLeft.Location.Y); - - if (w.LocalPlayer == null || w.LocalPlayer == allies1) - wr.Viewport.Center(allies1EntryPoint.CenterPosition); - else - wr.Viewport.Center(allies2EntryPoint.CenterPosition); - - OnObjectivesUpdated(false); - MissionUtils.PlayMissionMusic(); - } - } -} diff --git a/OpenRA.Mods.RA/Missions/Allies04Script.cs b/OpenRA.Mods.RA/Missions/Allies04Script.cs deleted file mode 100644 index b5b2fb1b04..0000000000 --- a/OpenRA.Mods.RA/Missions/Allies04Script.cs +++ /dev/null @@ -1,576 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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 System.Drawing; -using System.Linq; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Buildings; -using OpenRA.Mods.RA.Move; -using OpenRA.Mods.RA.Render; -using OpenRA.Traits; -using OpenRA.Widgets; - -namespace OpenRA.Mods.RA.Missions -{ - class Allies04ScriptInfo : TraitInfo, Requires { } - - class Allies04Script : IHasObjectives, IWorldLoaded, ITick - { - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return new[] { infiltrateLab, destroyBase }; } } - - Objective infiltrateLab = new Objective(ObjectiveType.Primary, "", ObjectiveStatus.InProgress); - Objective destroyBase = new Objective(ObjectiveType.Primary, DestroyBaseText, ObjectiveStatus.Inactive); - - const string InfiltrateLabTemplate = "The Soviets are currently developing a new defensive system named the \"Iron Curtain\" at their main research laboratory." - + " Get our {0} into the laboratory undetected."; - - const string DestroyBaseText = "Secure the laboratory and destroy the rest of the Soviet base. Ensure that the laboratory is not destroyed."; - - Actor hijackTruck; - Actor baseGuard; - Actor baseGuardMovePos; - Actor baseGuardTruckPos; - Actor lab; - int baseGuardTicks = 100; - - Actor allies1Spy; - Actor allies2Spy; - bool allies1SpyInfiltratedLab; - bool allies2SpyInfiltratedLab; - int frameInfiltrated = -1; - - CountdownTimer destroyBaseTimer; - CountdownTimerWidget destroyBaseTimerWidget; - - Player allies1; - Player allies2; - Player soviets; - Player creeps; - World world; - WorldRenderer worldRenderer; - - List patrols; - CPos[] patrolPoints1; - CPos[] patrolPoints2; - CPos[] patrolPoints3; - CPos[] patrolPoints4; - CPos[] patrolPoints5; - - Actor reinforcementsEntryPoint; - Actor reinforcementsUnloadPoint; - - Actor spyReinforcementsEntryPoint; - Actor spyReinforcementsUnloadPoint; - Actor spyReinforcementsExitPoint; - - string difficulty; - int destroyBaseTicks; - - int nextCivilianMove = 1; - - Actor bridgeTank; - Actor bridgeAttackPoint; - Actor bridge; - bool attackingBridge; - - bool attackingTown = true; - Actor[] townAttackers; - - void MissionFailed(string text) - { - MissionUtils.CoopMissionFailed(world, text, allies1, allies2); - } - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, allies1, allies2); - } - - public void Tick(Actor self) - { - if (allies1.WinState != WinState.Undefined) return; - - if (world.FrameNumber == 1) - InsertSpies(); - - if (frameInfiltrated != -1) - { - if (world.FrameNumber == frameInfiltrated + 100) - { - Sound.Play("aarrivs1.aud"); - worldRenderer.Viewport.Center(reinforcementsUnloadPoint.CenterPosition); - world.AddFrameEndTask(w => SendReinforcements()); - } - if (world.FrameNumber == frameInfiltrated + 200) - { - Sound.Play("timergo1.aud"); - destroyBaseTimer = new CountdownTimer(destroyBaseTicks, OnDestroyBaseTimerExpired, true); - destroyBaseTimerWidget = new CountdownTimerWidget(destroyBaseTimer, "Secure lab in: {0}"); - Ui.Root.AddChild(destroyBaseTimerWidget); - } - - if (world.FrameNumber >= frameInfiltrated + 200) - destroyBaseTimer.Tick(); - - if (world.FrameNumber == frameInfiltrated + 1500 * 12 && !bridgeTank.IsDead() && bridgeTank.IsInWorld && !bridge.IsDead()) - { - bridgeTank.QueueActivity(new Attack(Target.FromPos(bridge.CenterPosition), WRange.FromCells(4))); - attackingBridge = true; - } - if (attackingBridge && bridge.IsDead()) - { - if (!bridgeTank.IsDead()) - bridgeTank.CancelActivity(); - attackingBridge = false; - } - - if (world.FrameNumber == frameInfiltrated + 1500 * 6) - foreach (var attacker in townAttackers.Where(a => !a.IsDead() && a.IsInWorld)) - { - attacker.CancelActivity(); - attacker.QueueActivity(new AttackMove.AttackMoveActivity(attacker, new Move.Move(reinforcementsUnloadPoint.Location + new CVec(10, -15), 3))); - } - } - - if (attackingTown) - { - foreach (var attacker in townAttackers.Where(u => u.IsIdle && !u.IsDead() && u.IsInWorld)) - { - var enemies = world.Actors.Where(u => u.Owner == creeps && u.HasTrait() - && ((u.HasTrait() && !u.HasTrait() && !u.HasTrait()) || u.HasTrait()) && !u.IsDead() && u.IsInWorld); - - var enemy = enemies.ClosestTo(attacker); - if (enemy != null) - attacker.QueueActivity(new AttackMove.AttackMoveActivity(attacker, new Attack(Target.FromActor(enemy), WRange.FromCells(3)))); - else - { - attackingTown = false; - break; - } - } - } - - foreach (var patrol in patrols) - patrol.DoPatrol(); - - MissionUtils.CapOre(soviets); - - BaseGuardTick(); - - if (world.FrameNumber == nextCivilianMove) - { - var civilians = world.Actors.Where(a => !a.IsDead() && a.IsInWorld && a.Owner == creeps && a.HasTrait()); - if (civilians.Any()) - { - var civilian = civilians.Random(world.SharedRandom); - civilian.Trait().Nudge(civilian, civilian, true); - nextCivilianMove += world.SharedRandom.Next(1, 75); - } - } - - world.AddFrameEndTask(w => - { - if ((allies1Spy.IsDead() && !allies1SpyInfiltratedLab) || (allies2Spy != null && allies2Spy.IsDead() && !allies2SpyInfiltratedLab)) - { - infiltrateLab.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("{0} spy was killed.".F(allies1 != allies2 ? "A" : "The")); - } - else if (lab.IsDead()) - { - if (infiltrateLab.Status == ObjectiveStatus.InProgress) - infiltrateLab.Status = ObjectiveStatus.Failed; - else if (destroyBase.Status == ObjectiveStatus.InProgress) - destroyBase.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The Soviet research laboratory was destroyed."); - } - else if (!world.Actors.Any(a => (a.Owner == allies1 || a.Owner == allies2) && !a.IsDead() - && (a.HasTrait() && !a.HasTrait()) || a.HasTrait())) - { - destroyBase.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The remaining Allied forces in the area have been wiped out."); - } - else if (SovietBaseDestroyed() && infiltrateLab.Status == ObjectiveStatus.Completed) - { - destroyBase.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - MissionAccomplished("The Soviet research laboratory has been secured successfully."); - } - }); - } - - bool SovietBaseDestroyed() - { - return !world.Actors.Any(a => a.Owner == soviets && a.IsInWorld && !a.IsDead() - && a.HasTrait() && !a.HasTrait() && !a.HasTrait() && a != lab); - } - - void OnDestroyBaseTimerExpired(CountdownTimer t) - { - if (SovietBaseDestroyed() && infiltrateLab.Status == ObjectiveStatus.Completed) return; - destroyBase.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The Soviet research laboratory was not secured in time."); - } - - void BaseGuardTick() - { - if (baseGuardTicks <= 0 || baseGuard.IsDead() || !baseGuard.IsInWorld) return; - - if (hijackTruck.Location == baseGuardTruckPos.Location) - { - if (--baseGuardTicks <= 0) - baseGuard.QueueActivity(new Move.Move(baseGuardMovePos.Location)); - } - else - baseGuardTicks = 100; - } - - void OnLabInfiltrated(Actor spy) - { - if (spy == allies1Spy) allies1SpyInfiltratedLab = true; - else if (spy == allies2Spy) allies2SpyInfiltratedLab = true; - - if (allies1SpyInfiltratedLab && (allies2SpyInfiltratedLab || allies2Spy == null)) - { - infiltrateLab.Status = ObjectiveStatus.Completed; - destroyBase.Status = ObjectiveStatus.InProgress; - OnObjectivesUpdated(true); - frameInfiltrated = world.FrameNumber; - - foreach (var actor in world.Actors.Where(a => !a.IsDead() && a.HasTrait())) - actor.QueueActivity(false, new Transform(actor, actor.Info.Traits.Get().ToActor) { SkipMakeAnims = true }); - } - } - - void SendReinforcements() - { - var lst = world.CreateActor("lst.unselectable", new TypeDictionary - { - new OwnerInit(allies1), - new LocationInit(reinforcementsEntryPoint.Location) - }); - lst.Trait().Load(lst, world.CreateActor(false, "mcv", new TypeDictionary { new OwnerInit(allies1) })); - if (allies1 != allies2) - lst.Trait().Load(lst, world.CreateActor(false, "mcv", new TypeDictionary { new OwnerInit(allies2) })); - - lst.QueueActivity(new Move.Move(reinforcementsUnloadPoint.Location)); - lst.QueueActivity(new Wait(10)); - - lst.QueueActivity(new CallFunc(() => - { - allies1.PlayerActor.Trait().GiveCash(allies1 == allies2 ? 5000 : 2500); - if (allies1 != allies2) - allies2.PlayerActor.Trait().GiveCash(2500); - })); - - lst.AddTrait(new TransformedAction(self => - { - self.QueueActivity(new Wait(10)); - self.QueueActivity(new Move.Move(reinforcementsEntryPoint.Location)); - self.QueueActivity(new RemoveSelf()); - })); - lst.QueueActivity(new UnloadCargo(lst, true)); - lst.QueueActivity(new Transform(lst, "lst.unselectable.nocargo") { SkipMakeAnims = true }); - } - - class Patrol - { - Actor[] actors; - CPos[] points; - int pointIndex; - World world; - - public Patrol(World world, string[] actorNames, Player owner, CPos[] points, int pointIndex) - { - this.world = world; - this.points = points; - this.pointIndex = pointIndex; - var td = new TypeDictionary { new OwnerInit(owner), new LocationInit(points[pointIndex]) }; - actors = actorNames.Select(a => world.CreateActor(a, td)).ToArray(); - } - - public void DoPatrol() - { - if (actors.Any(a => a.IsDead() || !a.IsIdle || !a.IsInWorld)) return; - - pointIndex = (pointIndex + 1) % points.Length; - foreach (var actor in actors.Where(a => !a.IsDead() && a.IsInWorld)) - { - actor.QueueActivity(new Wait(world.SharedRandom.Next(50, 75))); - actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(points[pointIndex], 0))); - } - } - } - - void InsertSpies() - { - var lst = world.CreateActor("lst.unselectable", new TypeDictionary - { - new OwnerInit(allies1), - new LocationInit(spyReinforcementsEntryPoint.Location) - }); - - allies1Spy = world.CreateActor(false, "spy.strong", new TypeDictionary { new OwnerInit(allies1) }); - lst.Trait().Load(lst, allies1Spy); - if (allies1 != allies2) - { - allies2Spy = world.CreateActor(false, "spy.strong", new TypeDictionary { new OwnerInit(allies2) }); - lst.Trait().Load(lst, allies2Spy); - } - - lst.AddTrait(new TransformedAction(self => - { - self.QueueActivity(new Wait(10)); - self.QueueActivity(new Move.Move(spyReinforcementsExitPoint.Location)); - self.QueueActivity(new RemoveSelf()); - })); - lst.QueueActivity(new Move.Move(spyReinforcementsUnloadPoint.Location)); - lst.QueueActivity(new Wait(10)); - lst.QueueActivity(new UnloadCargo(lst, true)); - lst.QueueActivity(new Transform(lst, "lst.unselectable.nocargo") { SkipMakeAnims = true }); - } - - void SetupSubStances() - { - foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && !a.IsDead() && a.HasTrait())) - actor.Trait().Stance = UnitStance.Defend; - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - worldRenderer = wr; - - difficulty = w.LobbyInfo.GlobalSettings.Difficulty; - Game.Debug("{0} difficulty selected".F(difficulty)); - - allies1 = w.Players.Single(p => p.InternalName == "Allies1"); - allies2 = w.Players.SingleOrDefault(p => p.InternalName == "Allies2"); - - allies1.PlayerActor.Trait().Cash = 0; - if (allies2 == null) - allies2 = allies1; - else - allies2.PlayerActor.Trait().Cash = 0; - - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - creeps = w.Players.Single(p => p.InternalName == "Creeps"); - infiltrateLab.Text = InfiltrateLabTemplate.F(allies1 != allies2 ? "spies" : "spy"); - - destroyBaseTicks = difficulty == "Hard" ? 1500 * 25 : difficulty == "Normal" ? 1500 * 28 : 1500 * 31; - - var actors = w.WorldActor.Trait().Actors; - - spyReinforcementsEntryPoint = actors["SpyReinforcementsEntryPoint"]; - spyReinforcementsUnloadPoint = actors["SpyReinforcementsUnloadPoint"]; - spyReinforcementsExitPoint = actors["SpyReinforcementsExitPoint"]; - - hijackTruck = actors["HijackTruck"]; - baseGuard = actors["BaseGuard"]; - baseGuardMovePos = actors["BaseGuardMovePos"]; - baseGuardTruckPos = actors["BaseGuardTruckPos"]; - patrolPoints1 = new[] - { - actors["PatrolPoint11"].Location, - actors["PatrolPoint12"].Location, - actors["PatrolPoint13"].Location, - actors["PatrolPoint14"].Location, - actors["PatrolPoint15"].Location - }; - patrolPoints2 = patrolPoints1; - patrolPoints3 = new[] - { - actors["PatrolPoint21"].Location, - actors["PatrolPoint22"].Location, - actors["PatrolPoint23"].Location, - actors["PatrolPoint24"].Location, - actors["PatrolPoint25"].Location - }; - patrolPoints4 = new[] - { - actors["PatrolPoint31"].Location, - actors["PatrolPoint32"].Location, - actors["PatrolPoint33"].Location, - actors["PatrolPoint34"].Location - }; - patrolPoints5 = new[] - { - actors["PatrolPoint41"].Location, - actors["PatrolPoint42"].Location, - actors["PatrolPoint43"].Location, - actors["PatrolPoint44"].Location, - actors["PatrolPoint45"].Location - }; - - lab = actors["Lab"]; - lab.AddTrait(new InfiltrateAction(OnLabInfiltrated)); - lab.AddTrait(new TransformedAction(self => lab = self)); - - reinforcementsEntryPoint = actors["ReinforcementsEntryPoint"]; - reinforcementsUnloadPoint = actors["ReinforcementsUnloadPoint"]; - - patrols = new List - { - new Patrol(world, new[] { "e1", "e1", "e1", "e1", "e1" }, soviets, patrolPoints1, 0), - new Patrol(world, new[] { "e1", "dog.patrol", "dog.patrol" }, soviets, patrolPoints2, 2), - new Patrol(world, new[] { "e1", "dog.patrol", "dog.patrol" }, soviets, patrolPoints4, 0), - new Patrol(world, new[] { "e1", "dog.patrol", "dog.patrol" }, soviets, patrolPoints5, 0), - }; - if (difficulty == "Hard") - patrols.Add(new Patrol(world, new[] { "e1", "e1", "dog.patrol" }, soviets, patrolPoints3, 0)); - - bridgeTank = actors["BridgeTank"]; - bridgeAttackPoint = actors["BridgeAttackPoint"]; - bridge = world.Actors - .Where(a => a.HasTrait() && !a.IsDead()) - .OrderBy(a => (a.Location - bridgeAttackPoint.Location).LengthSquared) - .FirstOrDefault(); - - var ta1 = actors["TownAttacker1"]; - var ta2 = actors["TownAttacker2"]; - var ta3 = actors["TownAttacker3"]; - var ta4 = actors["TownAttacker4"]; - var ta5 = actors["TownAttacker5"]; - var ta6 = actors["TownAttacker6"]; - var ta7 = actors["TownAttacker7"]; - - townAttackers = new[] { ta1, ta2, ta3, ta4, ta5, ta6, ta7 }; - - OnObjectivesUpdated(false); - SetupSubStances(); - - worldRenderer.Viewport.Center(spyReinforcementsEntryPoint.CenterPosition); - MissionUtils.PlayMissionMusic(); - } - } - - class Allies04HijackableInfo : ITraitInfo, Requires - { - public object Create(ActorInitializer init) { return new Allies04Hijackable(init.self); } - } - - class Allies04Hijackable : IAcceptInfiltrator, INotifyPassengerExited - { - public Player OldOwner; - - void OnTruckHijacked(Actor spy) { } - - public Allies04Hijackable(Actor self) - { - OldOwner = self.Owner; - - self.AddTrait(new InfiltrateAction(OnTruckHijacked)); - } - - public void OnInfiltrate(Actor self, Actor spy) - { - if (self.Trait().IsEmpty(self)) - self.ChangeOwner(spy.Owner); - - self.Trait().Load(self, spy); - } - - public void PassengerExited(Actor self, Actor passenger) - { - if (self.Trait().IsEmpty(self)) - { - self.CancelActivity(); - self.ChangeOwner(OldOwner); - } - else if (self.Owner == passenger.Owner) - self.ChangeOwner(self.Trait().Passengers.First().Owner); - } - } - - class Allies04RenderHijackedInfo : RenderUnitInfo - { - public override object Create(ActorInitializer init) { return new Allies04RenderHijacked(init.self, this); } - } - - class Allies04RenderHijacked : RenderUnit - { - Allies04Hijackable hijackable; - Allies04RenderHijackedInfo info; - - public Allies04RenderHijacked(Actor self, Allies04RenderHijackedInfo info) - : base(self) - { - this.info = info; - hijackable = self.Trait(); - } - - protected override string PaletteName(Actor self) - { - return info.Palette ?? info.PlayerPalette + hijackable.OldOwner.InternalName; - } - } - - class Allies04TrivialBuildingInfo : TraitInfo { } - class Allies04TrivialBuilding { } - - class Allies04MaintainBuildingInfo : TraitInfo - { - public readonly string Player = null; - } - - class Allies04MaintainBuilding : INotifyDamageStateChanged - { - public void DamageStateChanged(Actor self, AttackInfo e) - { - if (self.Owner.InternalName != self.Info.Traits.Get().Player) return; - - if (self.HasTrait() && e.DamageState == DamageState.Critical && e.PreviousDamageState < DamageState.Critical) - self.Trait().Sell(self); - - else if (self.HasTrait() && e.DamageState > DamageState.Undamaged && e.PreviousDamageState == DamageState.Undamaged) - self.Trait().RepairBuilding(self, self.Owner); - } - } - - class Allies04TransformOnLabInfiltrateInfo : TraitInfo - { - [ActorReference] - public readonly string ToActor = null; - } - - class Allies04TransformOnLabInfiltrate { } - - class Allies04HazyPaletteEffectInfo : TraitInfo { } - - class Allies04HazyPaletteEffect : IPaletteModifier - { - static readonly string[] ExcludePalettes = { "cursor", "chrome", "colorpicker", "fog", "shroud" }; - - public void AdjustPalette(Dictionary palettes) - { - foreach (var pal in palettes) - { - if (ExcludePalettes.Contains(pal.Key)) - continue; - - for (var x = 0; x < 256; x++) - { - var from = pal.Value.GetColor(x); - var to = Color.FromArgb(from.A, Color.FromKnownColor(KnownColor.DarkOrange)); - pal.Value.SetColor(x, Exts.ColorLerp(0.15f, from, to)); - } - } - } - } -} diff --git a/OpenRA.Mods.RA/Missions/CountdownTimer.cs b/OpenRA.Mods.RA/Missions/CountdownTimer.cs deleted file mode 100644 index bfbd6ef054..0000000000 --- a/OpenRA.Mods.RA/Missions/CountdownTimer.cs +++ /dev/null @@ -1,68 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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; - -namespace OpenRA.Mods.RA.Missions -{ - public class CountdownTimer - { - public int TicksLeft; - - public event Action OnExpired = t => { }; - public event Action OnOneMinuteRemaining = t => { }; - public event Action OnTwoMinutesRemaining = t => { }; - public event Action OnThreeMinutesRemaining = t => { }; - public event Action OnFourMinutesRemaining = t => { }; - public event Action OnFiveMinutesRemaining = t => { }; - public event Action OnTenMinutesRemaining = t => { }; - public event Action OnTwentyMinutesRemaining = t => { }; - public event Action OnThirtyMinutesRemaining = t => { }; - public event Action OnFortyMinutesRemaining = t => { }; - - public CountdownTimer(int ticksLeft, Action onExpired, bool withNotifications) - { - TicksLeft = ticksLeft; - OnExpired += onExpired; - if (withNotifications) - { - OnOneMinuteRemaining += t => Sound.Play("1minr.aud"); - OnTwoMinutesRemaining += t => Sound.Play("2minr.aud"); - OnThreeMinutesRemaining += t => Sound.Play("3minr.aud"); - OnFourMinutesRemaining += t => Sound.Play("4minr.aud"); - OnFiveMinutesRemaining += t => Sound.Play("5minr.aud"); - OnTenMinutesRemaining += t => Sound.Play("10minr.aud"); - OnTwentyMinutesRemaining += t => Sound.Play("20minr.aud"); - OnThirtyMinutesRemaining += t => Sound.Play("30minr.aud"); - OnFortyMinutesRemaining += t => Sound.Play("40minr.aud"); - } - } - - public void Tick() - { - if (TicksLeft <= 0) return; - - TicksLeft--; - switch (TicksLeft) - { - case 1500 * 00: OnExpired(this); break; - case 1500 * 01: OnOneMinuteRemaining(this); break; - case 1500 * 02: OnTwoMinutesRemaining(this); break; - case 1500 * 03: OnThreeMinutesRemaining(this); break; - case 1500 * 04: OnFourMinutesRemaining(this); break; - case 1500 * 05: OnFiveMinutesRemaining(this); break; - case 1500 * 10: OnTenMinutesRemaining(this); break; - case 1500 * 20: OnTwentyMinutesRemaining(this); break; - case 1500 * 30: OnThirtyMinutesRemaining(this); break; - case 1500 * 40: OnFortyMinutesRemaining(this); break; - } - } - } -} diff --git a/OpenRA.Mods.RA/Missions/FortLonestarScript.cs b/OpenRA.Mods.RA/Missions/FortLonestarScript.cs deleted file mode 100644 index 51604bdc88..0000000000 --- a/OpenRA.Mods.RA/Missions/FortLonestarScript.cs +++ /dev/null @@ -1,379 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2013 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.Drawing; -using System.Linq; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Buildings; -using OpenRA.Mods.RA.Move; -using OpenRA.Traits; -using OpenRA.Widgets; - -namespace OpenRA.Mods.RA.Missions -{ - class FortLonestarScriptInfo : TraitInfo, Requires { } - - class FortLonestarScript : IWorldLoaded, ITick - { - Player multi0; - Player soviets; - - Actor entry1; - Actor entry2; - Actor entry3; - Actor entry4; - Actor entry5; - Actor entry6; - Actor entry7; - Actor entry8; - CPos[] sovietEntryPoints; - Actor paradrop1; - Actor paradrop2; - Actor paradrop3; - Actor paradrop4; - Actor patrol1; - Actor patrol2; - Actor patrol3; - Actor patrol4; - World world; - - int WaveNumber = 0; - InfoWidget evacuateWidget; - const string ShortEvacuateTemplate = "Wave {0}"; - static readonly string[] Patrol = { "e1", "e2", "e1" }; - static readonly string[] Infantry = { "e4", "e1", "e1", "e2", "e1", "e2" }; - static readonly string[] Vehicles = { "arty", "ftrk", "ftrk", "apc", "apc" }; - const string tank = "3tnk"; - const string v2 = "v2rl"; - const string boss = "4tnk"; - - const int TimerTicks = 1; - - int AttackSquad = 6; - int AttackSquadCount = 1; - int VehicleSquad = 2; - int VehicleSquadCount = 1; - - int patrolAttackFrame; - int patrolattackAtFrameIncrement; - int WaveAttackFrame; - int WaveAttackAtFrameIncrement; - int VehicleAttackFrame; - int VehicleAttackAtFrameIncrement; - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, multi0); - } - - void AttackNearestAlliedActor(Actor self) - { - var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == multi0) - && ((u.HasTrait() && !u.HasTrait()))); - - var targetEnemy = enemies.ClosestTo(self); - if (targetEnemy != null) - self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(targetEnemy), WRange.FromCells(6)))); - } - - void SendVehicles() - { - if (SpawnVehicles == true) - { - for (int i = 1; i <= VehicleSquadCount; i++) - { - var route = world.SharedRandom.Next(sovietEntryPoints.Length); - var spawnPoint = sovietEntryPoints[route]; - for (int r = 1; r <= VehicleSquad; r++) - { - var squad = world.CreateActor(Vehicles.Random(world.SharedRandom), - new TypeDictionary - { - new LocationInit(spawnPoint), - new OwnerInit(soviets) - }); - squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3))); - } - } - } - } - - void SendWave() - { - if (SpawnWave == true) - { - for (int i = 1; i <= AttackSquadCount; i++) - { - world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == soviets) - && !u.HasTrait()); - var route = world.SharedRandom.Next(sovietEntryPoints.Length); - var spawnPoint = sovietEntryPoints[route]; - for (int r = 1; r < AttackSquad; r++) - { - var squad = world.CreateActor(Infantry.Random(world.SharedRandom), - new TypeDictionary - { - new LocationInit(spawnPoint), - new OwnerInit(soviets) - }); - squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3))); - var scatteredUnits = world.FindAliveCombatantActorsInCircle(paradrop1.Location.CenterPosition, WRange.FromCells(15)) - .Where(unit => unit.IsIdle && unit.HasTrait() && unit.Owner == soviets); - foreach (var unit in scatteredUnits) - { - AttackNearestAlliedActor(unit); - } - } - } - } - } - - void SendPatrol(string[] squad, Player owner, CPos location, CPos move) - { - if (SpawnPatrol) - { - for (int i = 0; i < squad.Length; i++) - { - var actor = world.CreateActor(squad[i], new TypeDictionary - { - new OwnerInit(owner), - new LocationInit(location) - }); - actor.QueueActivity(new AttackMove.AttackMoveActivity(actor, new Move.Move(move, 3))); - AttackNearestAlliedActor(actor); - } - } - } - - void SendBoss(string unit) - { - var route = world.SharedRandom.Next(sovietEntryPoints.Length); - var spawnPoint = sovietEntryPoints[route]; - var actor = world.CreateActor(unit, new TypeDictionary - { - new OwnerInit(soviets), - new LocationInit(spawnPoint) - }); - if (multi0 != null) - { - AttackNearestAlliedActor(actor); - } - } - - void Wave(string text) - { - Game.AddChatLine(Color.Cyan, "Wave Sequence", text); - } - - public void Tick(Actor self) - { - if (multi0.WinState != WinState.Undefined) return; - - if (world.FrameNumber == patrolAttackFrame) - { - patrolAttackFrame += patrolattackAtFrameIncrement; - patrolattackAtFrameIncrement = Math.Max(patrolattackAtFrameIncrement - 5, 100); - SendPatrol(Patrol, soviets, patrol1.Location, paradrop1.Location); - SendPatrol(Patrol, soviets, patrol2.Location, paradrop2.Location); - SendPatrol(Patrol, soviets, patrol3.Location, paradrop3.Location); - SendPatrol(Patrol, soviets, patrol4.Location, paradrop4.Location); - } - if (world.FrameNumber == WaveAttackFrame) - { - WaveAttackFrame += WaveAttackAtFrameIncrement; - WaveAttackAtFrameIncrement = Math.Max(WaveAttackAtFrameIncrement - 5, 100); - SendWave(); - } - if (world.FrameNumber == VehicleAttackFrame) - { - VehicleAttackFrame += VehicleAttackAtFrameIncrement; - VehicleAttackAtFrameIncrement = Math.Max(VehicleAttackAtFrameIncrement - 5, 100); - SendVehicles(); - } - if (world.FrameNumber == TimerTicks) - { - evacuateWidget = new InfoWidget(""); - Ui.Root.AddChild(evacuateWidget); - WaveNumber++; - Wave("One Initializing"); - UpdateWaveSequence(); - } - if (world.FrameNumber == 1500 * 2) - { - WaveNumber++; - Wave("Two Initializing"); - SpawnPatrol = false; - AttackSquad = 7; - AttackSquadCount = 2; - UpdateWaveSequence(); - MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location); - MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location + new CVec(0, -2)); - } - if (world.FrameNumber == 1500 * 4) - { - WaveNumber++; - Wave("Three Initializing"); - UpdateWaveSequence(); - AttackSquad = 8; - } - if (world.FrameNumber == 1500 * 6) - { - WaveNumber++; - Wave("Four Initializing"); - UpdateWaveSequence(); - AttackSquad = 9; - MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location); - MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop3.Location); - AttackSquadCount = 3; - VehicleSquad = 3; - } - if (world.FrameNumber == 1500 * 8) - { - WaveNumber++; - Wave("Five Initializing"); - UpdateWaveSequence(); - AttackSquad = 10; - VehicleSquad = 4; - VehicleSquadCount = 2; - SendBoss(tank); - } - if (world.FrameNumber == 1500 * 11) - { - WaveNumber++; - Wave("Six Initializing"); - UpdateWaveSequence(); - AttackSquad = 11; - AttackSquadCount = 4; - MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location); - MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop1.Location); - MissionUtils.Parabomb(world, soviets, entry6.Location, paradrop3.Location); - MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop3.Location); - SendBoss(tank); - SendBoss(tank); - } - if (world.FrameNumber == 1500 * 14) - { - WaveNumber++; - Wave("Seven Initializing"); - UpdateWaveSequence(); - AttackSquad = 12; - VehicleSquad = 5; - VehicleSquadCount = 3; - SendBoss(v2); - } - if (world.FrameNumber == 1500 * 17) - { - SpawnVehicles = true; - WaveNumber++; - Wave("Eight Initializing"); - UpdateWaveSequence(); - AttackSquad = 13; - AttackSquadCount = 5; - MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location); - MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop1.Location); - MissionUtils.Parabomb(world, soviets, entry6.Location, paradrop3.Location); - MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop3.Location); - MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop2.Location); - MissionUtils.Parabomb(world, soviets, entry3.Location, paradrop2.Location); - SendBoss(v2); - SendBoss(tank); - SendBoss(v2); - } - if (world.FrameNumber == 1500 * 21) - { - WaveNumber++; - Wave("Nine Initializing"); - UpdateWaveSequence(); - AttackSquad = 14; - VehicleSquad = 6; - VehicleSquadCount = 4; - SendBoss(v2); - SendBoss(tank); - SendBoss(tank); - } - if (world.FrameNumber == 1500 * 25) - { - WaveNumber++; - Wave("Ten Initializing"); - UpdateWaveSequence(); - AttackSquad = 15; - AttackSquadCount = 6; - for (int i = 0; i < 2; i++) - { - MissionUtils.Parabomb(world, soviets, entry1.Location, paradrop1.Location + new CVec(0, -2)); - MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop3.Location + new CVec(0, -2)); - MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop2.Location + new CVec(0, -2)); - MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop4.Location + new CVec(0, -2)); - MissionUtils.Parabomb(world, soviets, entry2.Location, paradrop1.Location + new CVec(0, 2)); - MissionUtils.Parabomb(world, soviets, entry4.Location, paradrop3.Location + new CVec(0, 2)); - MissionUtils.Parabomb(world, soviets, entry3.Location, paradrop2.Location + new CVec(0, 2)); - MissionUtils.Parabomb(world, soviets, entry5.Location, paradrop4.Location + new CVec(0, 2)); - } - SendBoss(boss); - } - if (world.FrameNumber == 1500 * 30) - { - SpawnWave = false; - SpawnVehicles = false; - } - if (world.FrameNumber == 1500 * 31) - { - MissionAccomplished("You and your mates have Survived the Onslaught!"); - } - } - - void UpdateWaveSequence() - { - evacuateWidget.Text = ShortEvacuateTemplate.F(WaveNumber); - } - - bool SpawnPatrol = true; - - bool SpawnWave = true; - - bool SpawnVehicles = true; - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - multi0 = w.Players.Single(p => p.InternalName == "Multi0"); - patrolAttackFrame = 750; - patrolattackAtFrameIncrement = 750; - WaveAttackFrame = 500; - WaveAttackAtFrameIncrement = 500; - VehicleAttackFrame = 2000; - VehicleAttackAtFrameIncrement = 2000; - var actors = w.WorldActor.Trait().Actors; - entry1 = actors["Entry1"]; - entry2 = actors["Entry2"]; - entry3 = actors["Entry3"]; - entry4 = actors["Entry4"]; - entry5 = actors["Entry5"]; - entry6 = actors["Entry6"]; - entry7 = actors["Entry7"]; - entry8 = actors["Entry8"]; - sovietEntryPoints = new[] { entry1, entry2, entry3, entry4, entry5, entry6, entry7, entry8 }.Select(p => p.Location).ToArray(); - paradrop1 = actors["Paradrop1"]; - paradrop2 = actors["Paradrop2"]; - paradrop3 = actors["Paradrop3"]; - paradrop4 = actors["Paradrop4"]; - patrol1 = actors["Patrol1"]; - patrol2 = actors["Patrol2"]; - patrol3 = actors["Patrol3"]; - patrol4 = actors["Patrol4"]; - MissionUtils.PlayMissionMusic(); - Game.AddChatLine(Color.Cyan, "Mission", "Defend Fort LoneStar At All costs!"); - } - } -} diff --git a/OpenRA.Mods.RA/Missions/MissionUtils.cs b/OpenRA.Mods.RA/Missions/MissionUtils.cs deleted file mode 100644 index bbbbf977b0..0000000000 --- a/OpenRA.Mods.RA/Missions/MissionUtils.cs +++ /dev/null @@ -1,253 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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 System.Drawing; -using System.Linq; -using OpenRA.FileFormats; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Air; -using OpenRA.Mods.RA.Buildings; -using OpenRA.Mods.RA.Move; -using OpenRA.Network; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA.Missions -{ - public static class MissionUtils - { - public static IEnumerable FindAliveCombatantActorsInCircle(this World world, WPos location, WRange range) - { - return world.FindActorsInCircle(location, range) - .Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && !u.Owner.NonCombatant); - } - - public static IEnumerable FindAliveCombatantActorsInBox(this World world, CPos a, CPos b) - { - return world.FindActorsInBox(a, b) - .Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && !u.Owner.NonCombatant); - } - - public static IEnumerable FindAliveNonCombatantActorsInCircle(this World world, WPos location, WRange range) - { - return world.FindActorsInCircle(location, range) - .Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && u.Owner.NonCombatant); - } - - public static Actor ExtractUnitWithChinook(World world, Player owner, Actor unit, CPos entry, CPos lz, CPos exit) - { - var chinook = world.CreateActor("tran", new TypeDictionary { new OwnerInit(owner), new LocationInit(entry) }); - chinook.QueueActivity(new HeliFly(chinook, Target.FromCell(lz))); - chinook.QueueActivity(new Turn(0)); - chinook.QueueActivity(new HeliLand(true)); - chinook.QueueActivity(new WaitFor(() => chinook.Trait().Passengers.Contains(unit))); - chinook.QueueActivity(new Wait(150)); - chinook.QueueActivity(new HeliFly(chinook, Target.FromCell(exit))); - chinook.QueueActivity(new RemoveSelf()); - return chinook; - } - - public static Pair InsertUnitWithChinook(World world, Player owner, string unitName, CPos entry, CPos lz, CPos exit, Action afterUnload) - { - var unit = world.CreateActor(false, unitName, new TypeDictionary { new OwnerInit(owner) }); - var chinook = world.CreateActor("tran", new TypeDictionary { new OwnerInit(owner), new LocationInit(entry) }); - chinook.Trait().Load(chinook, unit); - chinook.QueueActivity(new HeliFly(chinook, Target.FromCell(lz))); - chinook.QueueActivity(new Turn(0)); - chinook.QueueActivity(new HeliLand(true)); - chinook.QueueActivity(new UnloadCargo(chinook, true)); - chinook.QueueActivity(new CallFunc(() => afterUnload(unit))); - chinook.QueueActivity(new Wait(150)); - chinook.QueueActivity(new HeliFly(chinook, Target.FromCell(exit))); - chinook.QueueActivity(new RemoveSelf()); - return Pair.New(chinook, unit); - } - - public static void Paradrop(World world, Player owner, IEnumerable units, CPos entry, CPos location) - { - var altitude = Rules.Info["badr"].Traits.Get().CruiseAltitude; - var badger = world.CreateActor("badr", new TypeDictionary - { - new CenterPositionInit(entry.CenterPosition + new WVec(WRange.Zero, WRange.Zero, altitude)), - new OwnerInit(owner), - new FacingInit(Util.GetFacing(location - entry, 0)) - }); - - badger.QueueActivity(new FlyAttack(Target.FromCell(location))); - badger.Trait().SetLZ(location); - var cargo = badger.Trait(); - foreach (var unit in units) - { - cargo.Load(badger, world.CreateActor(false, unit, new TypeDictionary { new OwnerInit(owner) })); - } - } - - public static void Parabomb(World world, Player owner, CPos entry, CPos location) - { - var altitude = Rules.Info["badr.bomber"].Traits.Get().CruiseAltitude; - var badger = world.CreateActor("badr.bomber", new TypeDictionary - { - new CenterPositionInit(entry.CenterPosition + new WVec(WRange.Zero, WRange.Zero, altitude)), - new OwnerInit(owner), - new FacingInit(Util.GetFacing(location - entry, 0)) - }); - - badger.Trait().SetTarget(location.CenterPosition); - badger.QueueActivity(new Fly(badger, Target.FromCell(location))); - badger.QueueActivity(new FlyOffMap()); - badger.QueueActivity(new RemoveSelf()); - } - - public static bool AreaSecuredWithUnits(World world, Player player, WPos location, WRange range) - { - var units = world.FindAliveCombatantActorsInCircle(location, range).Where(a => a.HasTrait()); - return units.Any() && units.All(a => a.Owner == player); - } - - public static IEnumerable FindQueues(World world, Player player, string category) - { - return world.ActorsWithTrait() - .Where(a => a.Actor.Owner == player && a.Trait.Info.Type == category) - .Select(a => a.Trait); - } - - public static void StartProduction(World world, Player player, string category, string item) - { - var queue = FindQueues(world, player, category).FirstOrDefault(q => q.CurrentItem() == null); - if (queue != null) - queue.ResolveOrder(queue.self, Order.StartProduction(queue.self, item, 1)); - } - - public static Actor UnitContaining(this World world, Actor actor) - { - return world.Actors.FirstOrDefault(a => a.HasTrait() && a.Trait().Passengers.Contains(actor)); - } - - public static void PlayMissionMusic() - { - if (!Rules.InstalledMusic.Any() || !Game.Settings.Sound.MapMusic) - return; - Game.ConnectionStateChanged += StopMusic; - PlayMusic(); - } - - static void PlayMusic() - { - var track = Rules.InstalledMusic.Random(Game.CosmeticRandom); - Sound.PlayMusicThen(track.Value, PlayMusic); - } - - static void StopMusic(OrderManager orderManager) - { - if (!orderManager.GameStarted) - { - Sound.StopMusic(); - Game.ConnectionStateChanged -= StopMusic; - } - } - - public static void CoopMissionAccomplished(World world, string text, params Player[] players) - { - if (players.First().WinState != WinState.Undefined) - return; - - foreach (var player in players) - player.WinState = WinState.Won; - - if (text != null) - Game.AddChatLine(Color.Blue, "Mission accomplished", text); - - Sound.Play("misnwon1.aud"); - } - - public static void CoopMissionFailed(World world, string text, params Player[] players) - { - if (players.First().WinState != WinState.Undefined) - return; - - foreach (var player in players) - { - player.WinState = WinState.Lost; - foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == player && !a.IsDead())) - { - actor.Kill(actor); - } - } - - if (text != null) - Game.AddChatLine(Color.Red, "Mission failed", text); - - Sound.Play("misnlst1.aud"); - } - - public static Actor CreateActor(this World world, bool addToWorld, string name, Player owner, CPos? location, int? facing) - { - var td = new TypeDictionary { new OwnerInit(owner) }; - if (location.HasValue) - td.Add(new LocationInit(location.Value)); - if (facing.HasValue) - td.Add(new FacingInit(facing.Value)); - return world.CreateActor(addToWorld, name, td); - } - - public static Actor CreateActor(this World world, string name, Player owner, CPos? location, int? facing) - { - return CreateActor(world, true, name, owner, location, facing); - } - - public static void CapOre(Player player) - { - var res = player.PlayerActor.Trait(); - if (res.Ore > res.OreCapacity * 0.8) - res.Ore = (int)(res.OreCapacity * 0.8); - } - - public static void AttackNearestLandActor(bool queued, Actor self, Player enemyPlayer) - { - var enemies = self.World.Actors.Where(u => u.AppearsHostileTo(self) && u.Owner == enemyPlayer - && ((u.HasTrait() && !u.HasTrait()) || (u.HasTrait() && !u.HasTrait())) && u.IsInWorld && !u.IsDead()); - - var enemy = enemies.ClosestTo(self); - if (enemy != null) - self.QueueActivity(queued, new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3)))); - } - } - - class TransformedAction : INotifyTransformed - { - Action a; - - public TransformedAction(Action a) - { - this.a = a; - } - - public void OnTransformed(Actor toActor) - { - a(toActor); - } - } - - class InfiltrateAction : IAcceptInfiltrator - { - Action a; - - public InfiltrateAction(Action a) - { - this.a = a; - } - - public void OnInfiltrate(Actor self, Actor spy) - { - a(spy); - } - } -} diff --git a/OpenRA.Mods.RA/Missions/MissionWidgets.cs b/OpenRA.Mods.RA/Missions/MissionWidgets.cs deleted file mode 100644 index 5da20131c9..0000000000 --- a/OpenRA.Mods.RA/Missions/MissionWidgets.cs +++ /dev/null @@ -1,55 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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.Drawing; -using OpenRA.Widgets; - -namespace OpenRA.Mods.RA.Missions -{ - public class CountdownTimerWidget : Widget - { - public CountdownTimer Timer; - public string Format; - - public CountdownTimerWidget(CountdownTimer timer, string format) - { - Timer = timer; - Format = format; - } - - public override void Draw() - { - if (!IsVisible()) return; - - // TODO: Don't hardcode the screen position - var font = Game.Renderer.Fonts["Bold"]; - var text = Format.F(WidgetUtils.FormatTime(Timer.TicksLeft)); - var pos = new float2(Game.Renderer.Resolution.Width * 0.5f - font.Measure(text).X / 2, Game.Renderer.Resolution.Height * 0.1f); - font.DrawTextWithContrast(text, pos, Timer.TicksLeft <= 25 * 60 && Game.LocalTick % 50 < 25 ? Color.Red : Color.White, Color.Black, 1); - } - } - - public class InfoWidget : Widget - { - public string Text; - - public InfoWidget(string text) { Text = text; } - - public override void Draw() - { - if (!IsVisible()) return; - - // TODO: Don't hardcode the screen position - var font = Game.Renderer.Fonts["Bold"]; - var pos = new float2(Game.Renderer.Resolution.Width * 0.5f - font.Measure(Text).X / 2, Game.Renderer.Resolution.Height * 0.1f); - font.DrawTextWithContrast(Text, pos, Color.White, Color.Black, 1); - } - } -} diff --git a/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs b/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs deleted file mode 100644 index bc1c5431b1..0000000000 --- a/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs +++ /dev/null @@ -1,342 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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 System.Linq; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Buildings; -using OpenRA.Mods.RA.Move; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA.Missions -{ - class MonsterTankMadnessScriptInfo : ITraitInfo, Requires - { - public readonly string[] FirstStartUnits = null; - public readonly string[] SecondStartUnits = null; - public readonly string[] ThirdStartUnits = null; - public readonly string[] FirstBaseUnits = null; - public readonly string[] CivilianEvacuees = null; - - public object Create(ActorInitializer init) { return new MonsterTankMadnessScript(this); } - } - - class MonsterTankMadnessScript : IHasObjectives, IWorldLoaded, ITick - { - MonsterTankMadnessScriptInfo info; - - public MonsterTankMadnessScript(MonsterTankMadnessScriptInfo info) - { - this.info = info; - } - - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return new[] { findOutpost, evacuateDemitri, infiltrateRadarDome }; } } - - Objective findOutpost = new Objective(ObjectiveType.Primary, FindOutpostText, ObjectiveStatus.InProgress); - Objective evacuateDemitri = new Objective(ObjectiveType.Primary, EvacuateDemitriText, ObjectiveStatus.InProgress); - Objective infiltrateRadarDome = new Objective(ObjectiveType.Primary, InfiltrateRadarDomeText, ObjectiveStatus.InProgress); - - const string FindOutpostText = "Find our outpost and start repairs on it."; - const string EvacuateDemitriText = "Find and evacuate Dr. Demitri. He is missing -- likely hiding in the village to the far south."; - const string InfiltrateRadarDomeText = "Reprogram the Super Tanks by sending a spy into the Soviet radar dome."; - - //const string Briefing = "Dr. Demitri, creator of a Soviet Super Tank, wants to defect." - // + " We planned to extract him while the Soviets were testing their new weapon, but something has gone wrong." - // + " The Super Tanks are out of control, and Demitri is missing -- likely hiding in the village to the far south." - // + " Find our outpost and start repairs on it, then find and evacuate Demitri." - // + " As for the tanks, we can reprogram them. Send a spy into the Soviet radar dome in the NE, turning the tanks on their creators."; - - World world; - - Player neutral; - Player greece; - Player ussr; - Player badGuy; - Player turkey; - - Actor startEntryPoint; - Actor startMovePoint; - Actor startBridgeEndPoint; - Actor alliedBaseTopLeft; - Actor alliedBaseBottomRight; - Actor alliedBaseEntryPoint; - Actor alliedBaseMovePoint; - - Actor demitriChurch; - Actor demitriChurchSpawnPoint; - Actor demitriTriggerAreaCenter; - Actor demitri; - Actor demitriLZ; - Actor demitriLZFlare; - Actor demitriChinook; - - Actor provingGroundsCameraPoint; - - Actor[] superTanks; - - Actor hospital; - Actor hospitalCivilianSpawnPoint; - Actor hospitalSuperTankPoint; - - Actor superTankDome; - - bool hospitalEvacuated; - bool superTanksDestroyed; - - int baseTransferredTick = -1; - int superTankDomeInfiltratedTick = -1; - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, greece); - } - - void MissionFailed(string text) - { - MissionUtils.CoopMissionFailed(world, text, greece); - } - - public void Tick(Actor self) - { - if (greece.WinState != WinState.Undefined) return; - - if (world.FrameNumber == 1) - SpawnAndMoveBridgeUnits(info.FirstStartUnits); - - else if (world.FrameNumber == 25 * 3) - SpawnAndMoveBridgeUnits(info.SecondStartUnits); - - else if (world.FrameNumber == 25 * 8) - SpawnAndMoveBridgeUnits(info.ThirdStartUnits); - - MissionUtils.CapOre(ussr); - - if (!hospitalEvacuated && !hospital.IsDead() && MissionUtils.AreaSecuredWithUnits(world, greece, hospital.CenterPosition, WRange.FromCells(5))) - { - EvacuateCivilians(); - hospitalEvacuated = true; - } - - if (baseTransferredTick == -1) - { - var actorsInBase = world.FindActorsInBox(alliedBaseTopLeft.Location, alliedBaseBottomRight.Location).Where(a => a != a.Owner.PlayerActor); - if (actorsInBase.Any(a => a.Owner == greece)) - { - SetupAlliedBase(actorsInBase); - baseTransferredTick = world.FrameNumber; - findOutpost.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - } - } - else if (superTankDomeInfiltratedTick == -1) - { - if (world.FrameNumber == baseTransferredTick + 25 * 100) - foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) - tank.QueueActivity(false, new Move.Move(hospitalSuperTankPoint.Location, 2)); - - else if (world.FrameNumber == baseTransferredTick + 25 * 180) - foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) - tank.QueueActivity(false, new Move.Move(alliedBaseBottomRight.Location, 2)); - - else if (world.FrameNumber == baseTransferredTick + 25 * 280) - foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) - tank.QueueActivity(false, new Move.Move(demitriTriggerAreaCenter.Location, 2)); - - else if (world.FrameNumber == baseTransferredTick + 25 * 480) - foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) - tank.QueueActivity(false, new Move.Move(demitriLZ.Location, 4)); - } - else - { - if (world.FrameNumber % 25 == 0) - foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld && t.IsIdle)) - MissionUtils.AttackNearestLandActor(false, tank, ussr); - if (world.FrameNumber == superTankDomeInfiltratedTick + 25 * 180) - { - foreach (var actor in world.Actors.Where(a => !a.IsDead() && (a.Owner == ussr || a.Owner == badGuy))) - actor.Kill(actor); - } - if (world.FrameNumber == superTankDomeInfiltratedTick + 25 * 181) - { - foreach (var tank in superTanks.Where(t => !t.IsDead())) - tank.Kill(tank); - superTanksDestroyed = true; - } - } - if (evacuateDemitri.Status != ObjectiveStatus.Completed) - { - if (demitri == null) - { - if (demitriChurch.IsDead()) - { - evacuateDemitri.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("Dr. Demitri was killed."); - } - - else if (MissionUtils.AreaSecuredWithUnits(world, greece, demitriTriggerAreaCenter.CenterPosition, WRange.FromCells(3))) - { - demitri = world.CreateActor("demitri", greece, demitriChurchSpawnPoint.Location, null); - demitri.QueueActivity(new Move.Move(demitriTriggerAreaCenter.Location, 0)); - demitriLZFlare = world.CreateActor("flare", greece, demitriLZ.Location, null); - Sound.Play("flaren1.aud"); - var chinookEntry = new CPos(demitriLZ.Location.X, 0); - demitriChinook = MissionUtils.ExtractUnitWithChinook(world, greece, demitri, chinookEntry, demitriLZ.Location, chinookEntry); - } - } - else if (demitri.IsDead()) - { - evacuateDemitri.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("Dr. Demitri was killed."); - } - else if (demitriChinook != null && !demitriChinook.IsDead() && !world.Map.IsInMap(demitriChinook.Location) && demitriChinook.Trait().Passengers.Contains(demitri)) - { - demitriLZFlare.Destroy(); - SpawnAndMoveAlliedBaseUnits(info.FirstBaseUnits); - evacuateDemitri.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - } - } - if (!world.Actors.Any(a => a.Owner == greece && a.IsInWorld && !a.IsDead() - && ((a.HasTrait() && !a.HasTrait()) || a.HasTrait() || a.HasTrait()))) - { - MissionFailed("The remaining Allied forces in the area have been wiped out."); - } - if (superTankDomeInfiltratedTick == -1 && superTankDome.IsDead()) - { - infiltrateRadarDome.Status = ObjectiveStatus.Failed; - OnObjectivesUpdated(true); - MissionFailed("The Soviet radar dome was destroyed."); - } - if (superTanksDestroyed && evacuateDemitri.Status == ObjectiveStatus.Completed) - { - MissionAccomplished("Dr. Demitri has been extracted and the super tanks have been dealt with."); - } - } - - void SetupAlliedBase(IEnumerable actors) - { - foreach (var actor in actors) - { - // hack hack hack - actor.ChangeOwner(greece); - if (actor.Info.Name == "pbox") - { - actor.AddTrait(new TransformedAction(s => s.Trait().Load(s, world.CreateActor(false, "e1", greece, null, null)))); - actor.QueueActivity(new Transform(actor, "hbox.e1") { SkipMakeAnims = true }); - } - else if (actor.Info.Name == "proc") - actor.QueueActivity(new Transform(actor, "proc") { SkipMakeAnims = true }); - foreach (var c in actor.TraitsImplementing()) - c.OnCapture(actor, actor, neutral, greece); - } - } - - void EvacuateCivilians() - { - foreach (var unit in info.CivilianEvacuees) - { - var actor = world.CreateActor(unit, neutral, hospitalCivilianSpawnPoint.Location, null); - actor.Trait().Nudge(actor, actor, true); - actor.QueueActivity(new Move.Move(alliedBaseEntryPoint.Location, 0)); - actor.QueueActivity(new RemoveSelf()); - } - } - - void SpawnAndMoveBridgeUnits(string[] units) - { - Sound.Play("reinfor1.aud"); - foreach (var unit in units) - world.CreateActor(unit, greece, startEntryPoint.Location, Traits.Util.GetFacing(startBridgeEndPoint.CenterPosition - startEntryPoint.CenterPosition, 0)) - .QueueActivity(new Move.Move(startMovePoint.Location, 0)); - } - - void SpawnAndMoveAlliedBaseUnits(string[] units) - { - Sound.Play("reinfor1.aud"); - foreach (var unit in units) - world.CreateActor(unit, greece, alliedBaseEntryPoint.Location, Traits.Util.GetFacing(alliedBaseMovePoint.CenterPosition - alliedBaseEntryPoint.CenterPosition, 0)) - .QueueActivity(new Move.Move(alliedBaseMovePoint.Location, 0)); - } - - void OnSuperTankDomeInfiltrated(Actor spy) - { - if (superTankDomeInfiltratedTick != -1) return; - - superTankDome.QueueActivity(new Transform(superTankDome, "dome") { SkipMakeAnims = true }); - - world.AddFrameEndTask(_ => - { - superTanks.Do(world.Remove); - turkey.Stances[greece] = turkey.Stances[neutral] = Stance.Ally; - greece.Stances[turkey] = neutral.Stances[turkey] = Stance.Ally; - greece.Shroud.ExploreAll(world); - superTanks.Do(world.Add); - }); - - foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) - MissionUtils.AttackNearestLandActor(false, tank, ussr); - - superTankDomeInfiltratedTick = world.FrameNumber; - - infiltrateRadarDome.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - - neutral = w.Players.Single(p => p.InternalName == "Neutral"); - greece = w.Players.Single(p => p.InternalName == "Greece"); - ussr = w.Players.Single(p => p.InternalName == "USSR"); - badGuy = w.Players.Single(p => p.InternalName == "BadGuy"); - turkey = w.Players.Single(p => p.InternalName == "Turkey"); - - greece.PlayerActor.Trait().Cash = 0; - ussr.PlayerActor.Trait().Cash = 2000; - - var actors = w.WorldActor.Trait().Actors; - startEntryPoint = actors["StartEntryPoint"]; - startMovePoint = actors["StartMovePoint"]; - startBridgeEndPoint = actors["StartBridgeEndPoint"]; - alliedBaseTopLeft = actors["AlliedBaseTopLeft"]; - alliedBaseBottomRight = actors["AlliedBaseBottomRight"]; - alliedBaseEntryPoint = actors["AlliedBaseEntryPoint"]; - alliedBaseMovePoint = actors["AlliedBaseMovePoint"]; - - demitriChurch = actors["DemitriChurch"]; - demitriChurchSpawnPoint = actors["DemitriChurchSpawnPoint"]; - demitriTriggerAreaCenter = actors["DemitriTriggerAreaCenter"]; - demitriLZ = actors["DemitriLZ"]; - - hospital = actors["Hospital"]; - hospitalCivilianSpawnPoint = actors["HospitalCivilianSpawnPoint"]; - hospitalSuperTankPoint = actors["HospitalSuperTankPoint"]; - - superTanks = actors.Values.Where(a => a.Info.Name == "5tnk" && a.Owner == turkey).ToArray(); - - provingGroundsCameraPoint = actors["ProvingGroundsCameraPoint"]; - world.CreateActor("camera", greece, provingGroundsCameraPoint.Location, null); - - superTankDome = actors["SuperTankDome"]; - superTankDome.AddTrait(new InfiltrateAction(OnSuperTankDomeInfiltrated)); - superTankDome.AddTrait(new TransformedAction(self => superTankDome = self)); - - wr.Viewport.Center(startEntryPoint.CenterPosition); - MissionUtils.PlayMissionMusic(); - } - } -} diff --git a/OpenRA.Mods.RA/Missions/Objective.cs b/OpenRA.Mods.RA/Missions/Objective.cs deleted file mode 100644 index b0142c2205..0000000000 --- a/OpenRA.Mods.RA/Missions/Objective.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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.Traits; - -namespace OpenRA.Mods.RA.Missions -{ - public class Objective - { - public ObjectiveType Type; - public string Text; - public ObjectiveStatus Status; - - public Objective(ObjectiveType type, string text, ObjectiveStatus status) - { - Type = type; - Text = text; - Status = status; - } - } - - public enum ObjectiveType { Primary, Secondary } - public enum ObjectiveStatus { Inactive, InProgress, Completed, Failed } - - public interface IHasObjectives - { - event Action OnObjectivesUpdated; - IEnumerable Objectives { get; } - } - - public class MissionObjectivesPanelInfo : ITraitInfo - { - public string ObjectivesPanel = null; - public object Create(ActorInitializer init) { return new MissionObjectivesPanel(this); } - } - - public class MissionObjectivesPanel : IObjectivesPanel - { - MissionObjectivesPanelInfo info; - public MissionObjectivesPanel(MissionObjectivesPanelInfo info) { this.info = info; } - public string ObjectivesPanel { get { return info.ObjectivesPanel; } } - } -} diff --git a/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs b/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs deleted file mode 100644 index 775165c0dc..0000000000 --- a/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs +++ /dev/null @@ -1,208 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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 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.Scripting; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA.Missions -{ - class Soviet01ClassicScriptInfo : TraitInfo, Requires { } - - class Soviet01ClassicScript : IHasObjectives, IWorldLoaded, ITick - { - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return new[] { destroy }; } } - - Objective destroy = new Objective(ObjectiveType.Primary, DestroyText, ObjectiveStatus.InProgress); - - const string DestroyText = "A pitiful excuse for resistance has blockaded itself in this village." - + " Stalin has decided to make an example of them. Kill them all and destroy their homes." - + " You will have Yak aircraft to use in teaching these rebels a lesson."; - - World world; - - Player ussr; - Player france; - - Actor startJeep; - Actor startJeepMovePoint; - Actor church; - bool startJeepParadropped; - bool churchParadropped; - - Actor paradropPoint1; - Actor paradropEntryPoint1; - Actor paradropPoint2; - Actor paradropEntryPoint2; - - Actor airfield1; - Actor airfield2; - Actor airfield3; - Actor[] airfields; - - const string BadgerName = "badr"; - static readonly string[] Reinforcements = { "e1", "e1", "e1", "e2", "e2" }; - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, ussr); - } - - void MissionFailed(string text) - { - MissionUtils.CoopMissionFailed(world, text, ussr); - } - - public void Tick(Actor self) - { - if (ussr.WinState != WinState.Undefined) return; - - var unitsAndBuildings = world.Actors.Where(a => !a.IsDead() && a.IsInWorld && (a.HasTrait() || (a.HasTrait() && !a.HasTrait()))); - if (!unitsAndBuildings.Any(a => a.Owner == france)) - { - destroy.Status = ObjectiveStatus.Completed; - MissionAccomplished("We destroyed the resistance."); - } - else if (!unitsAndBuildings.Any(a => a.Owner == ussr)) - { - destroy.Status = ObjectiveStatus.Failed; - MissionFailed("We were destroyed by the resistance."); - } - if (!startJeepParadropped && startJeep.IsDead()) - { - Sound.Play("reinfor1.aud"); - MissionUtils.Paradrop(world, ussr, Reinforcements, paradropEntryPoint1.Location, paradropPoint1.Location); - startJeepParadropped = true; - } - if (!churchParadropped && church.IsDead()) - { - Sound.Play("reinfor1.aud"); - MissionUtils.Paradrop(world, ussr, Reinforcements, paradropEntryPoint2.Location, paradropPoint2.Location); - churchParadropped = true; - } - } - - void LandYaks() - { - foreach (var airfield in airfields) - { - var entry = airfield.Location - new CVec(10, 0); - var altitude = Rules.Info["yak"].Traits.Get().CruiseAltitude; - var yak = world.CreateActor("yak", new TypeDictionary - { - new CenterPositionInit(entry.CenterPosition + new WVec(WRange.Zero, WRange.Zero, altitude)), - new OwnerInit(ussr), - new FacingInit(Traits.Util.GetFacing(airfield.Location - entry, 0)) - }); - - while (yak.Trait().TakeAmmo()) { } - - yak.QueueActivity(new ReturnToBase(yak, airfield)); - yak.QueueActivity(new ResupplyAircraft()); - } - } - - void MoveJeep() - { - startJeep.QueueActivity(new Move.Move(startJeepMovePoint.Location, 0)); - startJeep.QueueActivity(new Turn(128)); - startJeep.QueueActivity(new CallFunc(() => - { - var bridge = world.Actors.Where(a => a.HasTrait()).ClosestTo(startJeep); - bridge.Trait().Demolish(bridge, startJeep); - })); - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - - ussr = w.Players.Single(p => p.InternalName == "USSR"); - france = w.Players.Single(p => p.InternalName == "France"); - - var actors = w.WorldActor.Trait().Actors; - startJeep = actors["StartJeep"]; - startJeepMovePoint = actors["StartJeepMovePoint"]; - paradropPoint1 = actors["ParadropPoint1"]; - paradropEntryPoint1 = actors["ParadropEntryPoint1"]; - paradropPoint2 = actors["ParadropPoint2"]; - paradropEntryPoint2 = actors["ParadropEntryPoint2"]; - church = actors["Church"]; - airfield1 = actors["Airfield1"]; - airfield2 = actors["Airfield2"]; - airfield3 = actors["Airfield3"]; - airfields = new[] { airfield1, airfield2, airfield3 }; - - wr.Viewport.Center(startJeep.CenterPosition); - - if (w.LobbyInfo.IsSinglePlayer) - { - Media.PlayFMVFullscreen(w, "soviet1.vqa", () => - { - LandYaks(); - MoveJeep(); - MissionUtils.PlayMissionMusic(); - }); - } - else - { - LandYaks(); - MoveJeep(); - MissionUtils.PlayMissionMusic(); - } - } - } - - class Soviet01ClassicContainsActorsInfo : ITraitInfo - { - public readonly string[] Actors = { }; - - public object Create(ActorInitializer init) { return new Soviet01ClassicContainsActors(this); } - } - - class Soviet01ClassicContainsActors : INotifyDamage - { - bool spawned; - Soviet01ClassicContainsActorsInfo info; - - public Soviet01ClassicContainsActors(Soviet01ClassicContainsActorsInfo info) - { - this.info = info; - } - - public void Damaged(Actor self, AttackInfo e) - { - if (spawned || self.IsDead()) - { - return; - } - foreach (var actor in info.Actors) - { - var unit = self.World.CreateActor(actor, new TypeDictionary - { - new OwnerInit(self.Owner), - new LocationInit(self.Location) - }); - unit.Trait().Nudge(unit, unit, true); - } - spawned = true; - } - } -} diff --git a/OpenRA.Mods.RA/Missions/Survival01Script.cs b/OpenRA.Mods.RA/Missions/Survival01Script.cs deleted file mode 100644 index 4d7b0e0d16..0000000000 --- a/OpenRA.Mods.RA/Missions/Survival01Script.cs +++ /dev/null @@ -1,346 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2013 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 System.Linq; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Buildings; -using OpenRA.Mods.RA.Move; -using OpenRA.Traits; -using OpenRA.Widgets; - -namespace OpenRA.Mods.RA.Missions -{ - class Survival01ScriptInfo : TraitInfo, Requires { } - - class Survival01Script : IHasObjectives, IWorldLoaded, ITick - { - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return new[] { maintainPresence, destroySoviets }; } } - - Objective maintainPresence = new Objective(ObjectiveType.Primary, MaintainPresenceText, ObjectiveStatus.InProgress); - Objective destroySoviets = new Objective(ObjectiveType.Primary, DestroySovietsText, ObjectiveStatus.Inactive); - - const string MaintainPresenceText = "Enforce your position and hold-out the onslaught until reinforcements arrive. We must not lose the base!"; - const string DestroySovietsText = "Take control of French reinforcements and dismantle the nearby Soviet base."; - - Player allies; - Player soviets; - - Actor sovietEntryPoint1; - Actor sovietEntryPoint2; - Actor sovietEntryPoint3; - Actor sovietEntryPoint4; - Actor sovietEntryPoint5; - CPos[] sovietEntryPoints; - Actor sovietRallyPoint1; - Actor sovietRallyPoint2; - Actor sovietRallyPoint3; - Actor sovietRallyPoint4; - Actor sovietRallyPoint5; - CPos[] sovietRallyPoints; - - Actor sovietinfantryentry1; - Actor sovietinfantryrally1; - - Actor badgerEntryPoint1; - Actor badgerEntryPoint2; - Actor paraDrop1; - Actor paraDrop2; - Actor sovietEntryPoint7; - - Actor alliesbase1; - Actor alliesbase2; - Actor alliesbase; - Actor sam1; - Actor sam2; - Actor barrack1; - World world; - - CountdownTimer survivalTimer; - CountdownTimerWidget survivalTimerWidget; - - int attackAtFrame; - int attackAtFrameIncrement; - int attackAtFrameInf; - int attackAtFrameIncrementInf; - - const int paradropTicks = 750; - static readonly string[] badger1Passengers = { "e1", "e1", "e1", "e2", "e2" }; - - const int factoryClearRange = 10; - static readonly string[] squad1 = { "e1", "e1" }; - static readonly string[] squad2 = { "e2", "e2" }; - static readonly string[] sovietVehicles = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "ftrk", "ftrk", "ftrk", "apc", "apc" }; - static readonly string[] sovietInfantry = { "e1", "e1", "e1", "e1", "e2", "e2", "e2", "e4", "e4", "e3", }; - static readonly string[] reinforcements = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", "1tnk", "arty", "arty", "arty", "jeep", "jeep" }; - const int sovietAttackGroupSize = 5; - const int sovietInfantryGroupSize = 7; - - const int timerTicks = 1500 * 25; - bool spawningSovietUnits = true; - bool spawningInfantry = true; - string difficulty; - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, allies); - } - - public void Tick(Actor self) - { - if (allies.WinState != WinState.Undefined) - return; - - survivalTimer.Tick(); - - if (world.FrameNumber == attackAtFrame) - { - attackAtFrame += attackAtFrameIncrement; - attackAtFrameIncrement = Math.Max(attackAtFrameIncrement - 5, 100); - SpawnSovietUnits(); - ManageSovietUnits(); - MissionUtils.CapOre(soviets); - } - - if (world.FrameNumber == attackAtFrameInf) - { - attackAtFrameInf += attackAtFrameIncrementInf; - attackAtFrameIncrementInf = Math.Max(attackAtFrameIncrementInf - 5, 100); - SpawnSovietInfantry(); - } - - if (barrack1.Destroyed) - { - spawningInfantry = false; - } - - if (world.FrameNumber == paradropTicks) - { - MissionUtils.Paradrop(world, soviets, badger1Passengers, badgerEntryPoint1.Location, paraDrop1.Location); - MissionUtils.Paradrop(world, soviets, badger1Passengers, badgerEntryPoint2.Location, paraDrop2.Location); - } - - if (world.FrameNumber == paradropTicks * 2) - { - MissionUtils.Paradrop(world, soviets, badger1Passengers, badgerEntryPoint1.Location, alliesbase2.Location); - MissionUtils.Paradrop(world, soviets, badger1Passengers, badgerEntryPoint2.Location, alliesbase1.Location); - } - - if (world.FrameNumber == 1500 * 23) - { - attackAtFrame = 100; - attackAtFrameIncrement = 100; - } - - if (world.FrameNumber == 1500 * 25) - { - spawningSovietUnits = false; - spawningInfantry = false; - } - - if (destroySoviets.Status == ObjectiveStatus.InProgress) - { - if (barrack1.Destroyed) - { - destroySoviets.Status = ObjectiveStatus.Completed; - OnObjectivesUpdated(true); - MissionAccomplished("The French forces have survived and dismantled the soviet presence in the area!"); - } - } - } - - void SendSquad1() - { - for (int i = 0; i < squad1.Length; i++) - { - var actor = world.CreateActor(squad1[i], new TypeDictionary { new OwnerInit(soviets), new LocationInit(alliesbase1.Location + new CVec(-2 + i, -6 + i * 2)) }); - actor.QueueActivity(new Move.Move(alliesbase1.Location)); - } - } - - void SendSquad2() - { - for (int i = 0; i < squad2.Length; i++) - { - var actor = world.CreateActor(squad2[i], new TypeDictionary { new OwnerInit(soviets), new LocationInit(alliesbase2.Location + new CVec(-9 + i, -2 + i * 2)) }); - actor.QueueActivity(new Move.Move(alliesbase2.Location)); - } - } - - void SpawnSovietInfantry() - { - if (spawningInfantry) - { - var units = world.CreateActor((sovietInfantry).Random(world.SharedRandom), new TypeDictionary { new LocationInit(sovietinfantryentry1.Location), new OwnerInit(soviets) }); - units.QueueActivity(new Move.Move(sovietinfantryrally1.Location, 3)); - var unitsincircle = world.FindAliveCombatantActorsInCircle(sovietinfantryrally1.CenterPosition, WRange.FromCells(10)) - .Where(a => a.Owner == soviets && a.IsIdle && a.HasTrait()); - if (unitsincircle.Count() >= sovietInfantryGroupSize) - { - foreach (var scatteredunits in unitsincircle) - AttackNearestAlliedActor(scatteredunits); - } - } - } - - void SpawnSovietUnits() - { - if (spawningSovietUnits) - { - var route = world.SharedRandom.Next(sovietEntryPoints.Length); - var spawnPoint = sovietEntryPoints[route]; - var rallyPoint = sovietRallyPoints[route]; - var unit = world.CreateActor(sovietVehicles.Random(world.SharedRandom), - new TypeDictionary { new LocationInit(spawnPoint), new OwnerInit(soviets) }); - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(rallyPoint, 3))); - } - } - - void AttackNearestAlliedActor(Actor self) - { - var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == allies) - && ((u.HasTrait() && !u.HasTrait()) || u.HasTrait())); - - var targetEnemy = enemies.ClosestTo(self); - if (targetEnemy != null) - self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(targetEnemy), WRange.FromCells(3)))); - } - - void ManageSovietUnits() - { - foreach (var rallyPoint in sovietRallyPoints) - { - var units = world.FindAliveCombatantActorsInCircle(rallyPoint.CenterPosition, WRange.FromCells(4)) - .Where(u => u.IsIdle && u.HasTrait() && u.Owner == soviets); - if (units.Count() >= sovietAttackGroupSize) - { - foreach (var unit in units) - { - AttackNearestAlliedActor(unit); - } - } - } - var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait() && u.IsIdle && u.Owner == soviets) - .Except(world.WorldActor.Trait().Actors.Values) - .Except(sovietRallyPoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(rp.CenterPosition, WRange.FromCells(4)))); - foreach (var unit in scatteredUnits) - { - AttackNearestAlliedActor(unit); - } - } - - void StartCountDownTimer() - { - Sound.Play("timergo1.aud"); - survivalTimer = new CountdownTimer(timerTicks, CountDownTimerExpired, true); - survivalTimerWidget = new CountdownTimerWidget(survivalTimer, "Survive: {0}"); - Ui.Root.AddChild(survivalTimerWidget); - } - - void SendReinforcements() - { - foreach (var unit in reinforcements) - { - var u = world.CreateActor(unit, new TypeDictionary - { - new LocationInit(sovietEntryPoint7.Location), - new FacingInit(0), - new OwnerInit(allies) - }); - u.QueueActivity(new Move.Move(alliesbase.Location)); - } - } - - void CountDownTimerExpired(CountdownTimer countDownTimer) - { - survivalTimerWidget.Visible = false; - SendReinforcements(); - maintainPresence.Status = ObjectiveStatus.Completed; - destroySoviets.Status = ObjectiveStatus.InProgress; - OnObjectivesUpdated(true); - } - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - - allies = w.Players.SingleOrDefault(p => p.InternalName == "Allies"); - if (allies != null) - { - attackAtFrameInf = 300; - attackAtFrameIncrementInf = 300; - attackAtFrame = 450; - attackAtFrameIncrement = 450; - } - - difficulty = w.LobbyInfo.GlobalSettings.Difficulty; - Game.Debug("{0} difficulty selected".F(difficulty)); - - switch (difficulty) - { - case "Hard": - attackAtFrameIncrement = 350; - attackAtFrameIncrementInf = 200; - break; - case "Normal": - attackAtFrameIncrement = 450; - attackAtFrameIncrementInf = 300; - break; - case "Easy": - attackAtFrameIncrement = 550; - attackAtFrameIncrementInf = 400; - break; - } - - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - var actors = w.WorldActor.Trait().Actors; - sovietEntryPoint1 = actors["sovietEntryPoint1"]; - sovietEntryPoint2 = actors["sovietEntryPoint2"]; - sovietEntryPoint3 = actors["sovietEntryPoint3"]; - sovietEntryPoint4 = actors["sovietEntryPoint4"]; - sovietEntryPoint5 = actors["sovietEntryPoint5"]; - sovietEntryPoints = new[] { sovietEntryPoint1, sovietEntryPoint2, sovietEntryPoint3, sovietEntryPoint4, sovietEntryPoint5 }.Select(p => p.Location).ToArray(); - sovietRallyPoint1 = actors["sovietRallyPoint1"]; - sovietRallyPoint2 = actors["sovietRallyPoint2"]; - sovietRallyPoint3 = actors["sovietRallyPoint3"]; - sovietRallyPoint4 = actors["sovietRallyPoint4"]; - sovietRallyPoint5 = actors["sovietRallyPoint5"]; - sovietRallyPoints = new[] { sovietRallyPoint1, sovietRallyPoint2, sovietRallyPoint3, sovietRallyPoint4, sovietRallyPoint5 }.Select(p => p.Location).ToArray(); - alliesbase = actors["alliesbase"]; - alliesbase1 = actors["alliesbase1"]; - alliesbase2 = actors["alliesbase2"]; - badgerEntryPoint1 = actors["BadgerEntryPoint1"]; - badgerEntryPoint2 = actors["BadgerEntryPoint2"]; - sovietEntryPoint7 = actors["sovietEntryPoint7"]; - sovietinfantryentry1 = actors["SovietInfantryEntry1"]; - sovietinfantryrally1 = actors["SovietInfantryRally1"]; - paraDrop1 = actors["ParaDrop1"]; - paraDrop2 = actors["ParaDrop2"]; - barrack1 = actors["Barrack1"]; - sam1 = actors["Sam1"]; - sam2 = actors["Sam2"]; - - var shroud = allies.PlayerActor.Trait(); - shroud.Explore(w, sam1.Location, WRange.FromCells(4)); - shroud.Explore(w, sam2.Location, WRange.FromCells(4)); - - wr.Viewport.Center(alliesbase.CenterPosition); - StartCountDownTimer(); - SendSquad1(); - SendSquad2(); - MissionUtils.PlayMissionMusic(); - } - } -} diff --git a/OpenRA.Mods.RA/Missions/Survival02Script.cs b/OpenRA.Mods.RA/Missions/Survival02Script.cs deleted file mode 100644 index 7139793f37..0000000000 --- a/OpenRA.Mods.RA/Missions/Survival02Script.cs +++ /dev/null @@ -1,411 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2013 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 System; -using System.Drawing; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Mods.RA.Activities; -using OpenRA.Mods.RA.Move; -using OpenRA.Traits; -using OpenRA.Widgets; -using OpenRA.Mods.RA.Buildings; - -namespace OpenRA.Mods.RA.Missions -{ - class Survival02ScriptInfo : TraitInfo, Requires { } - - class Survival02Script : IHasObjectives, IWorldLoaded, ITick - { - public event Action OnObjectivesUpdated = notify => { }; - - public IEnumerable Objectives { get { return objectives.Values; } } - - Dictionary objectives = new Dictionary - { - { maintainPresenceID, new Objective(ObjectiveType.Primary, maintainPresence, ObjectiveStatus.InProgress) }, - { destroySovietsID, new Objective(ObjectiveType.Primary, destroySoviets, ObjectiveStatus.Inactive) }, - }; - const int destroySovietsID = 0; - const string destroySoviets = "Excellent work Commander! We have reinforced our position enough to initiate a counter-attack. Destroy the remaining Soviet forces in the area!"; - const int maintainPresenceID = 1; - const string maintainPresence = "Commander! The Soviets have rendered us useless... Reports indicate Soviet reinforcements are coming to finish us off... the situation looks bleak..."; - - Player allies; - Player soviets; - - Actor sovietEntry1; - Actor sovietEntry2; - Actor sovietEntry3; - CPos[] sovietentrypoints; - CPos[] newsovietentrypoints; - - Actor sovietrally; - Actor sovietrally1; - Actor sovietrally2; - Actor sovietrally3; - Actor sovietrally4; - Actor sovietrally5; - Actor sovietrally6; - Actor sovietrally8; - CPos[] sovietrallypoints; - CPos[] newsovietrallypoints; - - Actor sovietparadrop1; - Actor sovietparadrop2; - Actor sovietparadrop3; - Actor sovietparadropEntry; - - Actor alliesbase; - Actor factory; - Actor barrack1; - - Actor drum1; - Actor drum2; - Actor drum3; - Actor FranceEntry; - Actor FranceRally; - Actor FranceparaEntry1; - Actor FranceparaEntry2; - Actor FranceparaEntry3; - - World world; - WorldRenderer worldRenderer; - - CountdownTimer survivalTimer; - CountdownTimerWidget survivalTimerWidget; - - const int timerTicks = 1500 * 10; - const int attackTicks = 1500 * 1; - const int sovietAttackGroupSize = 7; - const int SovietGroupSize = 4; - - const string Camera = "Camera"; - const string InfantryQueueName = "Infantry"; - const string Flare = "flare"; - - static readonly string[] FrenchSquad = { "2tnk", "2tnk", "mcv" }; - static readonly string[] SovietInfantry = { "e1", "e4", "e2" }; - static readonly string[] SovietVehicles = { "3tnk", "3tnk", "v2rl" }; - static readonly string[] SovietTanks = { "3tnk", "3tnk", "3tnk" }; - static readonly string[] squad = { "e1", "e1", "e2", "e4", "e4" }; - static readonly string[] platoon = { "e1", "e1", "e2", "e4", "e4", "e1", "e1", "e2", "e4", "e4" }; - - int ProduceAtFrame; - int ProduceAtFrameIncrement; - int attackAtFrame; - int attackAtFrameIncrement; - - void MissionAccomplished(string text) - { - MissionUtils.CoopMissionAccomplished(world, text, allies); - } - - void MissionFailed(string text) - { - MissionUtils.CoopMissionFailed(world, text, allies); - } - - void Message(string text) - { - Game.AddChatLine(Color.Aqua, "Incoming Report", text); - } - - void SetSovietUnitsToDefensiveStance() - { - foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && !a.IsDead() && a.HasTrait())) - actor.Trait().Stance = UnitStance.Defend; - } - - Actor FirstUnshroudedOrDefault(IEnumerable actors, World world, int shroudRange) - { - return actors.FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterPosition, WRange.FromCells(shroudRange)).All(a => !a.HasTrait())); - } - - void AttackNearestAlliedActor(Actor self) - { - var enemies = world.Actors.Where(u => u.AppearsHostileTo(self) && (u.Owner == allies) - && ((u.HasTrait() && !u.HasTrait()) || u.HasTrait()) && u.IsInWorld && !u.IsDead()); - - var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (self.CenterPosition - u.CenterPosition).LengthSquared), world, 20); - if (enemy != null) - self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3)))); - } - - void SpawnAndAttack(string[] squad, Player owner, CPos location) - { - for (int i = 0; i < squad.Length; i++) - { - var actor = world.CreateActor(squad[i], new TypeDictionary { new OwnerInit(owner), new LocationInit(location) }); - AttackNearestAlliedActor(actor); - } - } - - void SpawnFlare(Player owner, Actor location) - { - world.CreateActor(Flare, new TypeDictionary { new OwnerInit(owner), new LocationInit(location.Location) }); - } - - void FinalAttack() - { - SpawnAndAttack(SovietTanks, soviets, sovietEntry1.Location); - SpawnAndAttack(SovietTanks, soviets, sovietEntry1.Location); - SpawnAndAttack(SovietTanks, soviets, sovietEntry2.Location); - SpawnAndAttack(platoon, soviets, sovietEntry1.Location); - SpawnAndAttack(platoon, soviets, sovietEntry2.Location); - } - - void FrenchReinforcements() - { - worldRenderer.Viewport.Center(sovietrally1.CenterPosition); - MissionUtils.Parabomb(world, allies, FranceparaEntry1.Location, drum3.Location); - MissionUtils.Parabomb(world, allies, FranceparaEntry3.Location, drum2.Location); - MissionUtils.Parabomb(world, allies, FranceparaEntry2.Location, drum1.Location); - for (int i = 0; i < FrenchSquad.Length; i++) - { - var actor = world.CreateActor(FrenchSquad[i], new TypeDictionary { new OwnerInit(allies), new LocationInit(FranceEntry.Location) }); - actor.QueueActivity(new Move.Move(FranceRally.Location)); - } - } - - public void Tick(Actor self) - { - if (allies.WinState != WinState.Undefined) - return; - - survivalTimer.Tick(); - if (allies != null) - { - ManageSovietUnits(); - } - - var unitsAndBuildings = world.Actors.Where(a => !a.IsDead() && a.IsInWorld && (a.HasTrait() || (a.HasTrait() && !a.HasTrait()))); - if (!unitsAndBuildings.Any(a => a.Owner == soviets)) - { - objectives[destroySovietsID].Status = ObjectiveStatus.Completed; - MissionAccomplished("We have destroyed the remaining Soviet presence!"); - } - - if (world.FrameNumber == ProduceAtFrame) - { - ProduceAtFrame += ProduceAtFrameIncrement; - ProduceAtFrameIncrement = Math.Max(ProduceAtFrameIncrement - 5, 100); - InitializeSovietFactories(barrack1, sovietrally.Location); - BuildSovietUnits(factory, barrack1); - } - if (world.FrameNumber == attackAtFrame) - { - attackAtFrame += attackAtFrameIncrement; - attackAtFrameIncrement = Math.Max(attackAtFrameIncrement - 5, 100); - ManageSovietVehicles(); - if (producing) - { - BuildSovietVehicles(sovietentrypoints, sovietrallypoints); - } - else - BuildSovietVehicles(newsovietentrypoints, newsovietrallypoints); - } - if (world.FrameNumber == attackTicks) - { - SpawnAndAttack(squad, soviets, sovietrally5.Location); - SpawnAndAttack(squad, soviets, sovietrally6.Location); - } - if (world.FrameNumber == attackTicks * 3) - { - SpawnFlare(soviets, sovietparadrop3); - MissionUtils.Paradrop(world, soviets, squad, sovietparadropEntry.Location, sovietparadrop3.Location); - SpawnAndAttack(squad, soviets, sovietrally2.Location); - SpawnAndAttack(platoon, soviets, sovietrally5.Location); - SpawnAndAttack(platoon, soviets, sovietrally6.Location); - } - if (world.FrameNumber == attackTicks * 5) - { - SpawnFlare(soviets, sovietparadrop2); - MissionUtils.Paradrop(world, soviets, squad, sovietparadropEntry.Location, sovietparadrop2.Location); - } - if (world.FrameNumber == attackTicks * 7) - { - SpawnFlare(soviets, sovietparadrop1); - MissionUtils.Paradrop(world, soviets, squad, sovietparadropEntry.Location, sovietparadrop1.Location); - } - if (world.FrameNumber == attackTicks * 10) - { - SpawnFlare(soviets, sovietparadrop1); - MissionUtils.Paradrop(world, soviets, squad, sovietparadropEntry.Location, sovietparadrop1.Location); - ManageSovietUnits(); - } - if (world.FrameNumber == attackTicks * 12) - { - Sound.Play("reinfor1.aud"); - FrenchReinforcements(); - } - } - - void StartCountDownTimer() - { - Sound.Play("timergo1.aud"); - survivalTimer = new CountdownTimer(timerTicks, CountDownTimerExpired, true); - survivalTimerWidget = new CountdownTimerWidget(survivalTimer, "Time Until Soviet Reinforcements Arrive: {0}"); - Ui.Root.AddChild(survivalTimerWidget); - } - - void CountDownTimerExpired(CountdownTimer countDownTimer) - { - survivalTimerWidget.Visible = false; - Message("The Soviet reinforcements are approuching!"); - BuildSovietVehicles(newsovietentrypoints, newsovietrallypoints); - FinalAttack(); - producing = false; - objectives[maintainPresenceID].Status = ObjectiveStatus.Completed; - objectives[destroySovietsID].Status = ObjectiveStatus.InProgress; - OnObjectivesUpdated(true); - } - - void InitializeSovietFactories(Actor tent, CPos rally) - { - if (tent.IsInWorld && !tent.IsDead()) - { - var sbrp = tent.Trait(); - sbrp.rallyPoint = rally; - sbrp.nearEnough = 6; - } - } - - void BuildSovietUnit(string category, string unit) - { - var queueTent = MissionUtils.FindQueues(world, soviets, category).FirstOrDefault(q => q.CurrentItem() == null); - if (queueTent == null) return; - queueTent.ResolveOrder(queueTent.self, Order.StartProduction(queueTent.self, unit, 1)); - } - - void BuildSovietUnits(Actor factory, Actor tent) - { - if (barrack1.IsInWorld && !barrack1.IsDead()) - { - BuildSovietUnit(InfantryQueueName, SovietInfantry.Random(world.SharedRandom)); - } - } - - void ManageSovietUnits() - { - var units = world.FindAliveCombatantActorsInCircle(sovietrally.CenterPosition, WRange.FromCells(3)) - .Where(u => u.IsIdle && u.HasTrait() && u.HasTrait() && u.Owner == soviets); - if (units.Count() >= sovietAttackGroupSize) - { - foreach (var unit in units) - { - var route = world.SharedRandom.Next(sovietrallypoints.Length); - unit.QueueActivity(new Move.Move(sovietrally3.Location)); - unit.QueueActivity(new Wait(300)); - unit.QueueActivity(new Move.Move(sovietrallypoints[route])); - AttackNearestAlliedActor(unit); - } - } - } - - void BuildSovietVehicles(CPos[] spawnpoints, CPos[] rallypoints) - { - var route = world.SharedRandom.Next(spawnpoints.Length); - var spawnPoint = spawnpoints[route]; - var rally = world.SharedRandom.Next(rallypoints.Length); - var rallyPoint = rallypoints[rally]; - var unit = world.CreateActor(SovietVehicles.Random(world.SharedRandom), - new TypeDictionary - { - new LocationInit(spawnPoint), - new OwnerInit(soviets) - }); - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(rallyPoint, 3))); - } - - void ManageSovietVehicles() - { - foreach (var rallyPoint in sovietrallypoints) - { - var units = world.FindAliveCombatantActorsInCircle(rallyPoint.CenterPosition, WRange.FromCells(10)) - .Where(u => u.IsIdle && u.HasTrait() && u.HasTrait() && u.Owner == soviets); - if (units.Count() >= SovietGroupSize) - { - foreach (var unit in units) - AttackNearestAlliedActor(unit); - } - } - - var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait() && u.IsIdle && u.Owner == soviets) - .Except(world.WorldActor.Trait().Actors.Values) - .Except(sovietrallypoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(rp.CenterPosition, WRange.FromCells(10)))); - - foreach (var unit in scatteredUnits) - AttackNearestAlliedActor(unit); - } - - bool producing = true; - - public void WorldLoaded(World w, WorldRenderer wr) - { - world = w; - worldRenderer = wr; - - allies = w.Players.SingleOrDefault(p => p.InternalName == "Allies"); - if (allies != null) - { - ProduceAtFrame = 300; - ProduceAtFrameIncrement = 300; - attackAtFrame = 450; - attackAtFrameIncrement = 450; - } - soviets = w.Players.Single(p => p.InternalName == "Soviets"); - var actors = w.WorldActor.Trait().Actors; - sovietEntry1 = actors["SovietEntry1"]; - sovietEntry2 = actors["SovietEntry2"]; - sovietEntry3 = actors["SovietEntry3"]; - sovietentrypoints = new[] { sovietEntry1, sovietEntry2, sovietEntry3 }.Select(p => p.Location).ToArray(); - sovietrally = actors["SovietRally"]; - sovietrally1 = actors["SovietRally1"]; - sovietrally2 = actors["SovietRally2"]; - sovietrally3 = actors["SovietRally3"]; - sovietrally4 = actors["SovietRally4"]; - sovietrally5 = actors["SovietRally5"]; - sovietrally6 = actors["SovietRally6"]; - sovietrally8 = actors["SovietRally8"]; - sovietrallypoints = new[] { sovietrally2, sovietrally4, sovietrally5, sovietrally6 }.Select(p => p.Location).ToArray(); - alliesbase = actors["AlliesBase"]; - sovietparadropEntry = actors["SovietParaDropEntry"]; - sovietparadrop1 = actors["SovietParaDrop1"]; - sovietparadrop2 = actors["SovietParaDrop2"]; - sovietparadrop3 = actors["SovietParaDrop3"]; - barrack1 = actors["barrack1"]; - factory = actors["Factory"]; - drum1 = actors["drum1"]; - drum2 = actors["drum2"]; - drum3 = actors["drum3"]; - FranceEntry = actors["FranceEntry"]; - FranceRally = actors["FranceRally"]; - FranceparaEntry1 = actors["FranceparaEntry1"]; - FranceparaEntry2 = actors["FranceparaEntry2"]; - FranceparaEntry3 = actors["FranceparaEntry3"]; - newsovietentrypoints = new[] { sovietparadropEntry, sovietEntry3 }.Select(p => p.Location).ToArray(); - newsovietrallypoints = new[] { sovietrally3, sovietrally4, sovietrally8 }.Select(p => p.Location).ToArray(); - - worldRenderer.Viewport.Center(alliesbase.CenterPosition); - StartCountDownTimer(); - SetSovietUnitsToDefensiveStance(); - world.CreateActor(Camera, new TypeDictionary - { - new OwnerInit(allies), - new LocationInit(sovietrally1.Location), - }); - MissionUtils.PlayMissionMusic(); - } - } - -} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 5f830fa235..02aa8caf19 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -261,22 +261,9 @@ - - - - - - - - - - - - - @@ -407,7 +394,6 @@ - diff --git a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs index 93150f1faa..8530e855c0 100644 --- a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs +++ b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs @@ -17,7 +17,7 @@ using OpenRA.Effects; using OpenRA.FileFormats; using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Air; -using OpenRA.Mods.RA.Missions; +using OpenRA.Network; using OpenRA.Scripting; using OpenRA.Support; using OpenRA.Traits; @@ -245,7 +245,25 @@ namespace OpenRA.Mods.RA.Scripting [LuaGlobal] public void PlayRandomMusic() { - MissionUtils.PlayMissionMusic(); + if (!Rules.InstalledMusic.Any() || !Game.Settings.Sound.MapMusic) + return; + Game.ConnectionStateChanged += StopMusic; + PlayMusic(); + } + + void PlayMusic() + { + var track = Rules.InstalledMusic.Random(Game.CosmeticRandom); + Sound.PlayMusicThen(track.Value, PlayMusic); + } + + void StopMusic(OrderManager orderManager) + { + if (!orderManager.GameStarted) + { + Sound.StopMusic(); + Game.ConnectionStateChanged -= StopMusic; + } } [LuaGlobal] diff --git a/OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs deleted file mode 100644 index fd653e3988..0000000000 --- a/OpenRA.Mods.RA/Widgets/Logic/MissionObjectivesLogic.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 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.Linq; -using OpenRA.Mods.RA.Missions; -using OpenRA.Network; -using OpenRA.Widgets; - -namespace OpenRA.Mods.RA.Widgets.Logic -{ - public class MissionObjectivesLogic - { - IHasObjectives objectives; - Widget primaryPanel; - Widget secondaryPanel; - Widget primaryTemplate; - Widget secondaryTemplate; - ButtonWidget objectivesButton; - - [ObjectCreator.UseCtor] - public MissionObjectivesLogic(World world, Widget widget) - { - var gameRoot = Ui.Root.Get("INGAME_ROOT"); - primaryPanel = widget.Get("PRIMARY_OBJECTIVES"); - secondaryPanel = widget.Get("SECONDARY_OBJECTIVES"); - primaryTemplate = primaryPanel.Get("PRIMARY_OBJECTIVE_TEMPLATE"); - secondaryTemplate = secondaryPanel.Get("SECONDARY_OBJECTIVE_TEMPLATE"); - - objectives = world.WorldActor.TraitsImplementing().First(); - - objectivesButton = gameRoot.Get("OBJECTIVES_BUTTON"); - objectivesButton.IsHighlighted = () => Game.LocalTick % 50 < 25 && objectivesButton.Highlighted; - objectivesButton.OnClick += () => objectivesButton.Highlighted = false; - - objectives.OnObjectivesUpdated += UpdateObjectives; - UpdateObjectives(true); - Game.ConnectionStateChanged += RemoveHandlers; - } - - public void RemoveHandlers(OrderManager orderManager) - { - if (!orderManager.GameStarted) - { - Game.ConnectionStateChanged -= RemoveHandlers; - objectives.OnObjectivesUpdated -= UpdateObjectives; - } - } - - public void UpdateObjectives(bool notify) - { - if (notify) - objectivesButton.Highlighted = true; - - primaryPanel.RemoveChildren(); - secondaryPanel.RemoveChildren(); - - foreach (var o in objectives.Objectives.Where(o => o.Status != ObjectiveStatus.Inactive)) - { - var objective = o; - - Widget widget; - LabelWidget objectiveText; - LabelWidget objectiveStatus; - - if (objective.Type == ObjectiveType.Primary) - { - widget = primaryTemplate.Clone(); - objectiveText = widget.Get("PRIMARY_OBJECTIVE"); - objectiveStatus = widget.Get("PRIMARY_STATUS"); - SetupWidget(widget, objectiveText, objectiveStatus, objective); - primaryPanel.AddChild(widget); - } - else - { - widget = secondaryTemplate.Clone(); - objectiveText = widget.Get("SECONDARY_OBJECTIVE"); - objectiveStatus = widget.Get("SECONDARY_STATUS"); - SetupWidget(widget, objectiveText, objectiveStatus, objective); - secondaryPanel.AddChild(widget); - } - } - } - - void SetupWidget(Widget widget, LabelWidget objectiveText, LabelWidget objectiveStatus, Objective objective) - { - var font = Game.Renderer.Fonts[objectiveText.Font]; - var text = WidgetUtils.WrapText(objective.Text, objectiveText.Bounds.Width, font); - widget.Bounds.Height = objectiveText.Bounds.Height = objectiveStatus.Bounds.Height = font.Measure(text).Y; - objectiveText.GetText = () => text; - objectiveStatus.GetText = () => GetObjectiveStatusText(objective.Status); - } - - static string GetObjectiveStatusText(ObjectiveStatus status) - { - switch (status) - { - case ObjectiveStatus.InProgress: return "In Progress"; - case ObjectiveStatus.Completed: return "Completed"; - case ObjectiveStatus.Failed: return "Failed"; - default: return ""; - } - } - } -} diff --git a/mods/ra/maps/Fort-Lonestar/map.bin b/mods/ra/maps/Fort-Lonestar/map.bin deleted file mode 100644 index f3a2b6011f71315df4b64140ca5c7835ef5e3ac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46085 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 Zfh3Rwl0Xtj0!bhVB!MK51pe;?{tI~FfLH(k diff --git a/mods/ra/maps/Fort-Lonestar/map.yaml b/mods/ra/maps/Fort-Lonestar/map.yaml deleted file mode 100644 index 183929ed0b..0000000000 --- a/mods/ra/maps/Fort-Lonestar/map.yaml +++ /dev/null @@ -1,1249 +0,0 @@ -Selectable: True - -MapFormat: 6 - -RequiresMod: ra - -Title: Fort Lonestar - -Description: Survive 11 Waves with 4 mates. - -Author: Nuke'm Bro. - -Tileset: TEMPERAT - -MapSize: 96,96 - -Bounds: 8,8,48,48 - -UseAsShellmap: False - -Type: Minigame - -Options: - Fog: True - Shroud: True - AllyBuildRadius: False - FragileAlliances: False - StartingCash: 50 - ConfigurableStartingUnits: False - -Players: - PlayerReference@Neutral: - Name: Neutral - OwnsWorld: True - NonCombatant: True - Race: allies - PlayerReference@Multi0: - Name: Multi0 - Playable: True - AllowBots: False - LockTeam: True - Allies: Multi1,Multi2,Multi3 - Enemies: Soviets - PlayerReference@Multi1: - Name: Multi1 - Playable: True - AllowBots: False - LockTeam: True - Allies: Multi0,Multi2,Multi3 - Enemies: Soviets - PlayerReference@Multi2: - Name: Multi2 - Playable: True - AllowBots: False - LockTeam: True - Allies: Multi0,Multi1,Multi3 - Enemies: Soviets - PlayerReference@Multi3: - Name: Multi3 - Playable: True - AllowBots: False - LockTeam: True - Allies: Multi0,Multi1,Multi2 - Enemies: Soviets - PlayerReference@Soviets: - Name: Soviets - Race: soviet - ColorRamp: 0,255,128 - Enemies: Multi0,Multi1,Multi2,Multi3 - -Actors: - Actor76: t11 - Location: 47,27 - Owner: Neutral - Actor47: t12 - Location: 55,24 - Owner: Neutral - Actor25: tc03 - Location: 54,49 - Owner: Neutral - Actor14: tc04 - Location: 24,7 - Owner: Neutral - Actor10: tc04 - Location: 38,53 - Owner: Neutral - Actor0: t14 - Location: 32,16 - Owner: Neutral - Actor75: tc04 - Location: 45,25 - Owner: Neutral - Actor72: tc01 - Location: 49,16 - Owner: Neutral - Actor58: t10 - Location: 22,54 - Owner: Neutral - Actor26: tc01 - Location: 54,41 - Owner: Neutral - Actor37: tc01 - Location: 54,21 - Owner: Neutral - Actor60: tc05 - Location: 7,16 - Owner: Neutral - Actor69: t17 - Location: 23,8 - Owner: Neutral - Actor4: tc04 - Location: 29,45 - Owner: Neutral - Actor6: t17 - Location: 33,43 - Owner: Neutral - Actor16: tc04 - Location: 53,16 - Owner: Neutral - Actor21: tc03 - Location: 8,14 - Owner: Neutral - Actor8: t14 - Location: 49,37 - Owner: Neutral - Actor29: tc01 - Location: 8,42 - Owner: Neutral - Actor49: t15 - Location: 54,47 - Owner: Neutral - Actor62: tc05 - Location: 6,43 - Owner: Neutral - Actor73: tc05 - Location: 16,34 - Owner: Neutral - Actor30: barr - Location: 36,26 - Owner: Multi0 - Actor84: brik - Location: 35,25 - Owner: Neutral - Actor32: tc01 - Location: 8,24 - Owner: Neutral - Actor59: tc05 - Location: 7,39 - Owner: Neutral - Actor5: tc01 - Location: 44,44 - Owner: Neutral - Actor67: brik - Location: 29,25 - Owner: Neutral - Actor41: brik - Location: 25,25 - Owner: Neutral - Actor56: brik - Location: 26,25 - Owner: Neutral - Actor85: brik - Location: 39,26 - Owner: Neutral - Actor81: brik - Location: 38,25 - Owner: Neutral - Actor65: brik - Location: 27,25 - Owner: Neutral - Actor66: brik - Location: 28,25 - Owner: Neutral - Actor51: t08 - Location: 55,46 - Owner: Neutral - Actor57: t12 - Location: 19,54 - Owner: Neutral - Actor54: t11 - Location: 26,54 - Owner: Neutral - Actor33: tc01 - Location: 21,7 - Owner: Neutral - Actor27: tc01 - Location: 42,54 - Owner: Neutral - Actor23: tc03 - Location: 16,54 - Owner: Neutral - Actor15: tc04 - Location: 38,8 - Owner: Neutral - Actor19: tc03 - Location: 18,7 - Owner: Neutral - Actor17: tc03 - Location: 54,26 - Owner: Neutral - Actor83: brik - Location: 36,25 - Owner: Neutral - Actor197: brik - Location: 39,37 - Owner: Neutral - Actor11: tc04 - Location: 20,53 - Owner: Neutral - Actor9: tc04 - Location: 53,37 - Owner: Neutral - Actor7: tc02 - Location: 44,36 - Owner: Neutral - Actor3: t15 - Location: 19,25 - Owner: Neutral - Actor1: t05 - Location: 29,16 - Owner: Neutral - Actor82: brik - Location: 37,25 - Owner: Neutral - Actor86: brik - Location: 39,27 - Owner: Neutral - Actor80: brik - Location: 39,25 - Owner: Neutral - Actor71: tc02 - Location: 15,40 - Owner: Neutral - Actor64: t06 - Location: 18,16 - Owner: Neutral - Actor63: t14 - Location: 8,22 - Owner: Neutral - Actor53: t08 - Location: 41,55 - Owner: Neutral - Actor61: tc05 - Location: 54,39 - Owner: Neutral - Actor48: t01 - Location: 54,23 - Owner: Neutral - Actor50: t17 - Location: 54,44 - Owner: Neutral - Actor36: tc01 - Location: 42,8 - Owner: Neutral - Actor52: t12 - Location: 44,53 - Owner: Neutral - Actor87: brik - Location: 39,28 - Owner: Neutral - Actor91: brik - Location: 37,39 - Owner: Neutral - Actor196: brik - Location: 39,38 - Owner: Neutral - Actor195: brik - Location: 39,39 - Owner: Neutral - Actor45: brik - Location: 25,28 - Owner: Neutral - Actor92: brik - Location: 39,29 - Owner: Neutral - Actor194: brik - Location: 38,39 - Owner: Neutral - Actor55: brik - Location: 25,39 - Owner: Neutral - Actor200: brik - Location: 28,39 - Owner: Neutral - Actor233: brik - Location: 29,39 - Owner: Neutral - Actor240: brik - Location: 39,35 - Owner: Neutral - Actor199: brik - Location: 27,39 - Owner: Neutral - Actor78: mpspawn - Location: 36,28 - Owner: Neutral - Actor28: tc01 - Location: 24,54 - Owner: Neutral - Actor22: tc03 - Location: 7,46 - Owner: Neutral - Actor24: tc03 - Location: 45,54 - Owner: Neutral - Actor18: tc03 - Location: 45,8 - Owner: Neutral - Actor12: tc04 - Location: 7,37 - Owner: Neutral - Actor13: tc04 - Location: 8,19 - Owner: Neutral - Actor2: tc04 - Location: 14,23 - Owner: Neutral - Actor74: t06 - Location: 19,36 - Owner: Neutral - Actor46: t11 - Location: 54,19 - Owner: Neutral - Actor42: t16 - Location: 53,19 - Owner: Neutral - Actor68: tc05 - Location: 35,7 - Owner: Neutral - Actor239: brik - Location: 39,36 - Owner: Neutral - Actor89: brik - Location: 35,39 - Owner: Neutral - Actor90: brik - Location: 36,39 - Owner: Neutral - Actor40: oilb - Location: 32,30 - Owner: Multi0 - Actor237: brik - Location: 25,35 - Owner: Neutral - Actor236: brik - Location: 25,36 - Owner: Neutral - Actor235: brik - Location: 25,37 - Owner: Neutral - Actor234: brik - Location: 25,38 - Owner: Neutral - Actor44: brik - Location: 25,27 - Owner: Neutral - Actor43: brik - Location: 25,26 - Owner: Neutral - Actor198: brik - Location: 26,39 - Owner: Neutral - Actor88: brik - Location: 25,29 - Owner: Neutral - Entry1: waypoint - Location: 8,8 - Owner: Neutral - Entry2: waypoint - Location: 31,8 - Owner: Neutral - Entry3: waypoint - Location: 55,8 - Owner: Neutral - Entry4: waypoint - Location: 55,32 - Owner: Neutral - Entry5: waypoint - Location: 55,55 - Owner: Neutral - Entry6: waypoint - Location: 32,55 - Owner: Neutral - Entry7: waypoint - Location: 8,55 - Owner: Neutral - Entry8: waypoint - Location: 8,32 - Owner: Neutral - Paradrop1: waypoint - Location: 32,28 - Owner: Neutral - Paradrop2: waypoint - Location: 27,32 - Owner: Neutral - Paradrop3: waypoint - Location: 32,36 - Owner: Neutral - Paradrop4: waypoint - Location: 36,32 - Owner: Neutral - Patrol3: waypoint - Location: 32,46 - Owner: Neutral - Patrol4: waypoint - Location: 46,32 - Owner: Neutral - Actor20: apwr - Location: 37,4 - Owner: Soviets - Patrol2: waypoint - Location: 17,32 - Owner: Neutral - Patrol1: waypoint - Location: 32,18 - Owner: Neutral - Actor34: sniper - Location: 9,26 - Owner: Soviets - Actor35: sniper - Location: 10,21 - Owner: Soviets - Actor38: sniper - Location: 26,9 - Owner: Soviets - Actor39: sniper - Location: 40,10 - Owner: Soviets - Actor77: sniper - Location: 53,21 - Owner: Soviets - Actor79: sniper - Location: 54,25 - Owner: Soviets - Actor93: sniper - Location: 53,40 - Owner: Soviets - Actor94: sniper - Location: 54,43 - Owner: Soviets - Actor95: sniper - Location: 54,46 - Owner: Soviets - Actor96: sniper - Location: 43,53 - Owner: Soviets - Actor97: sniper - Location: 8,36 - Owner: Soviets - Actor98: sniper - Location: 28,55 - Owner: Soviets - Actor100: barr - Location: 27,26 - Owner: Multi3 - Actor99: barr - Location: 27,36 - Owner: Multi2 - Actor31: barr - Location: 36,36 - Owner: Multi1 - Actor101: oilb - Location: 32,32 - Owner: Multi1 - Actor102: oilb - Location: 30,32 - Owner: Multi2 - Actor103: oilb - Location: 30,30 - Owner: Multi3 - Actor104: mpspawn - Location: 27,28 - Owner: Neutral - Actor105: mpspawn - Location: 27,38 - Owner: Neutral - Actor106: mpspawn - Location: 36,38 - Owner: Neutral - -Smudges: - -Rules: - World: - CrateSpawner: - Maximum: 1 - SpawnInterval: 100 - -SpawnMPUnits: - -MPStartLocations: - FortLonestarScript: - CRATE: - -LevelUpCrateAction: - -GiveMcvCrateAction: - -RevealMapCrateAction: - -HideMapCrateAction: - -ExplodeCrateAction@nuke: - -ExplodeCrateAction@boom: - -ExplodeCrateAction@fire: - -GiveUnitCrateAction@jeep: - -GiveUnitCrateAction@arty: - -GiveUnitCrateAction@v2rl: - -GiveUnitCrateAction@1tnk: - -GiveUnitCrateAction@2tnk: - -GiveUnitCrateAction@3tnk: - -GiveUnitCrateAction@4tnk: - SupportPowerCrateAction@parabombs: - SelectionShares: 30 - HealUnitsCrateAction: - SelectionShares: 30 - GiveCashCrateAction: - Amount: 400 - UseCashTick: yes - SelectionShares: 30 - GiveUnitCrateAction@e7: - Unit: e7 - SelectionShares: 10 - Player: - ClassicProductionQueue@Infantry: - Type: Infantry - BuildSpeed: 1 - LowPowerSlowdown: 3 - ClassicProductionQueue@Defense: - Type: Defense - BuildSpeed: .4 - LowPowerSlowdown: 3 - OILB: - Health: - HP: 3000 - Armor: - Type: Wood - Bib: - RevealsShroud: - Range: 3c0 - ExternalCapturable: - ExternalCapturableBar: - EngineerRepairable: - CashTrickler: - Period: 250 - Amount: 50 - BARR: - Buildable: - Owner: allies,soviet - Building: - Power: 0 - Health: - HP: 1000 - Production: - Produces: Defense,Infantry - -Sellable: - BaseProvider: - Range: 16 - FTUR: - Building: - Power: 0 - Owner: soviet - Valued: - Cost: 400 - PBOX: - Building: - Power: 0 - Owner: allies - Prerequisites: barr,oilb - Valued: - Cost: 400 - Health: - HP: 200 - Armor: - Type: Heavy - TransformOnPassenger@MEDI: - PassengerTypes: MEDI - OnEnter: pbox.MEDI - OnExit: pbox - SkipMakeAnims: true - PBOX.E1: - Buildable: - Queue: Defense - Prerequisites: barr - Owner: allies - PBOX.MEDI: - Inherits: PBOX - Tooltip: - Name: Pillbox (Medic) - RenderBuilding: - Image: PBOX - RenderRangeCircle: - AutoTarget: - AttackTurreted: - PrimaryWeapon: Heal - PrimaryLocalOffset: 0,-11,0,0,0 - HBOX.E1: - Inherits: HBOX - Buildable: - Queue: Defense - BuildPaletteOrder: 20 - Prerequisites: barr - Owner: None - HBOX: - Building: - Owner: None - GUN: - Buildable: - Queue: Defense - Prerequisites: barr - Owner: None - SAM: - Buildable: - Owner: None - SBAG: - Buildable: - Owner: None - MSLO: - Buildable: - Owner: None - GAP: - Buildable: - Owner: None - IRON: - Buildable: - Owner: None - PDOX: - Buildable: - Owner: None - SPEN: - Buildable: - Owner: allies - DOME: - Buildable: - Owner: allies - PROC: - Buildable: - Owner: allies - SILO: - Buildable: - Owner: allies - AGUN: - Buildable: - Owner: None - TSLA: - Buildable: - Owner: None - APWR: - Buildable: - Owner: allies - STEK: - Buildable: - Owner: allies - FIX: - Buildable: - Owner: allies - POWR: - Buildable: - Owner: allies - MIG: - Buildable: - Owner: allies - Prerequisites: barr,afld - Valued: - Cost: 2000 - YAK: - Buildable: - Owner: allies - Prerequisites: barr,afld - Valued: - Cost: 150 - TRAN: - Buildable: - Owner: allies - Prerequisites: barr,hpad - Valued: - Cost: 150 - HIND: - Buildable: - Owner: allies - Prerequisites: barr,hpad - Valued: - Cost: 200 - HELI: - Buildable: - Owner: allies - Prerequisites: barr,hpad - Valued: - Cost: 200 - HPAD: - Building: - Power: 0 - Buildable: - Owner: allies - Prerequisites: barr - Valued: - Cost: 200 - FENC: - Buildable: - Queue: Building - Owner: None - Prerequisites: barr - Valued: - Cost: 10 - AFLD: - Building: - Power: 0 - Buildable: - Owner: allies - Prerequisites: barr - Valued: - Cost: 200 - DOG: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 20 - E1: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 20 - E2: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 40 - Explodes: - Weapon: UnitExplodeSmall - Chance: 20 - E3: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 60 - E4: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 100 - E6: - Buildable: - Owner: soviet,allies - Prerequisites: barr - Valued: - Cost: 100 - E7: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 750 - 3TNK: - Inherits: ^Tank - Buildable: - Queue: Vehicle - BuildPaletteOrder: 40 - Prerequisites: fix - Owner: soviet - Hotkey: h - Valued: - Cost: 1150 - Health: - HP: 700 - Armor: - Type: Heavy - Mobile: - Speed: 71 - Crushes: wall, atmine, crate, infantry - RevealsShroud: - Range: 7c0 - Turreted: - ROT: 5 - Armament: - Weapon: VolkNapalm - Recoil: 200 - RecoilRecovery: 38 - LocalOffset: 0,85,0, 0,-85,0 - AttackTurreted: - RenderUnit: - WithTurret: - AutoTarget: - Explodes: - Weapon: UnitExplodeSmall - EmptyWeapon: UnitExplodeSmall - Chance: 100 - LeavesHusk: - HuskActor: 3TNK.Husk - Selectable: - Bounds: 30,30 - MECH: - Buildable: - Owner: None - MEDI: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 100 - SHOK: - Buildable: - Owner: soviet,allies - Prerequisites: barr,oilb - Valued: - Cost: 150 - SNIPER: - Inherits: ^Infantry - Valued: - Cost: 200 - Buildable: - Queue: Infantry - BuildPaletteOrder: 80 - Owner: soviet, allies - Prerequisites: barr,oilb - Hotkey: n - Selectable: - Bounds: 12,17,0,-6 - Mobile: - Speed: 56 - Health: - HP: 200 - Passenger: - PipType: Red - RevealsShroud: - Range: 6c0 - AutoTarget: - InitialStance: Defend - Armament: - Weapon: Sniper - SPY: - Inherits: ^Infantry - Buildable: - Queue: Infantry - BuildPaletteOrder: 60 - Prerequisites: barr,oilb - Owner: allies, soviet - Valued: - Cost: 300 - Selectable: - Voice: SpyVoice - Bounds: 12,17,0,-9 - Health: - HP: 25 - Mobile: - Speed: 56 - RevealsShroud: - Range: 5c0 - Passenger: - PipType: Yellow - TakeCover: - Spy: - -AutoTarget: - -RenderInfantry: - RenderSpy: - IdleAnimations: idle1,idle2 - AttackFrontal: - PrimaryWeapon: SilencedPPK - FTRK: - Inherits: ^Vehicle - Valued: - Cost: 600 - Health: - HP: 150 - Armor: - Type: Light - Mobile: - ROT: 10 - Speed: 128 - RevealsShroud: - Range: 4c0 - Turreted: - ROT: 5 - Offset: -298,0,298 - Armament: - Weapon: FLAK-23 - Recoil: 85 - AttackTurreted: - RenderUnit: - WithTurret: - AutoTarget: - Explodes: - Weapon: UnitExplodeSmall - EmptyWeapon: UnitExplodeSmall - Selectable: - Bounds: 28,28,0,0 - APC: - Inherits: ^Tank - Health: - HP: 400 - Armor: - Type: Heavy - Mobile: - Speed: 142 - RevealsShroud: - Range: 5c0 - Armament: - Weapon: M60mg - LocalOffset: 0,0,171 - AttackFrontal: - RenderUnit: - WithMuzzleFlash: - AutoTarget: - Cargo: - Types: Infantry - MaxWeight: 5 - PipCount: 5 - ARTY: - Inherits: ^Tank - Buildable: - Queue: Vehicle - BuildPaletteOrder: 80 - Prerequisites: dome - Owner: allies - Valued: - Cost: 600 - Tooltip: - Name: Artillery - Description: Long-range artillery.\n Strong vs Infantry, Buildings\n Weak vs Tanks, Aircraft - Health: - HP: 75 - Armor: - Type: Light - Mobile: - ROT: 2 - Speed: 85 - RevealsShroud: - Range: 7c0 - AttackFrontal: - PrimaryWeapon: 155mm - SecondaryWeapon: 155mm - RenderUnit: - Explodes: - Weapon: UnitExplode - Chance: 50 - AutoTarget: - V2RL: - Inherits: ^Vehicle - Health: - HP: 100 - Armor: - Type: Light - Mobile: - Speed: 99 - RevealsShroud: - Range: 5c0 - Armament: - Weapon: SCUD - AttackFrontal: - RenderUnitReload: - AutoTarget: - Explodes: - Weapon: SCUD - EmptyWeapon: - 4TNK: - Inherits: ^Tank - Buildable: - Health: - HP: 2500 - Armor: - Type: Heavy - Mobile: - Speed: 56 - RevealsShroud: - Range: 14c0 - Turreted: - ROT: 1 - AttackTurreted: - PrimaryWeapon: 120mm - SecondaryWeapon: MammothTusk - PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - SecondaryLocalOffset: -7,2,0,0,25, 7,2,0,0,-25 - PrimaryRecoil: 8 - PrimaryRecoilRecovery: 0.7 - SecondaryRecoil: 2 - RenderUnit: - WithTurret: - AutoTarget: - Explodes: - Weapon: napalm - EmptyWeapon: napalm - LeavesHusk: - HuskActor: 4TNK.Husk - SelfHealing: - Step: 2 - Ticks: 1 - HealIfBelow: 40% - DamageCooldown: 150 - Selectable: - Bounds: 44,38,0,-4 - BRIK: - Inherits: ^Wall - Buildable: - Queue: Defense - BuildPaletteOrder: 1000 - Prerequisites: fact - Owner: None - Hotkey: w - Valued: - Cost: 100 - Health: - HP: 250 - Armor: - Type: Concrete - BADR.Bomber: - AttackBomber: - Armament: - Weapon: ParaBomb - Inherits: ^Plane - Health: - HP: 60 - Armor: - Type: Light - Plane: - ROT: 5 - Speed: 280 - LimitedAmmo: - Ammo: 30 - RenderUnit: - Image: mig - WithShadow: - IronCurtainable: - -Selectable: - -GainsExperience: - Tooltip: - Name: Mig Bomber - LeavesHusk: - HuskActor: BADR.Husk - -EjectOnDeath: - -GpsDot: - Contrail@1: - Offset: -598,-683,0 - Contrail@2: - Offset: -598,683,0 - SmokeTrailWhenDamaged: - Offset: -853,0,171 - Interval: 2 - BADR.Husk: - Inherits: ^PlaneHusk - Tooltip: - Name: Badger - RenderUnit: - Image: mig - WithShadow: - Plane: - ROT: 5 - Speed: 149 - SmokeTrailWhenDamaged: - Offset: -853,0,171 - Interval: 2 - MinDamage: Undamaged - -Sequences: - -VoxelSequences: - -Weapons: - 120mm: - ROF: 150 - Range: 10c0 - Report: CANNON1.AUD - Burst: 6 - Projectile: Bullet - Speed: 204 - High: true - Inaccuracy: 1c682 - Image: 120MM - ContrailLength: 50 - Warhead: - Spread: 256 - Versus: - None: 75% - Wood: 75% - Light: 75% - Concrete: 100% - Explosion: self_destruct - WaterExplosion: self_destruct - InfDeath: 4 - SmudgeType: Crater - Damage: 150 - MammothTusk: - ROF: 300 - Range: 10c0 - Report: MISSILE6.AUD - Burst: 2 - ValidTargets: Ground, Air - Projectile: Missile - Speed: 128 - Arm: 2 - High: true - Shadow: false - Trail: smokey - ContrailLength: 150 - Inaccuracy: 853 - Image: DRAGON - ROT: 10 - RangeLimit: 80 - Warhead: - Spread: 640 - Versus: - None: 125% - Wood: 110% - Light: 110% - Heavy: 100% - Concrete: 200% - Explosion: nuke - WaterExplosion: nuke - InfDeath: 3 - SmudgeType: Crater - Damage: 250 - VolkNapalm: - ROF: 40 - Range: 8c0 - Report: firebl3.aud - ValidTargets: Ground - Burst: 6 - BurstDelay: 1 - Projectile: Bullet - Speed: 426 - Image: 120MM - Inaccuracy: 2c512 - Trail: smokey - ContrailLength: 2 - Warhead: - Spread: 341 - Versus: - None: 90% - Wood: 170% - Light: 100% - Heavy: 100% - Concrete: 100% - Explosion: small_explosion - WaterExplosion: small_explosion - InfDeath: 4 - SmudgeType: Scorch - ImpactSound: firebl3 - Damage: 15 - ParaBomb: - ROF: 5 - Range: 5c0 - Report: CHUTE1.AUD - Projectile: GravityBomb - Image: BOMBLET - Warhead: - Spread: 426 - Versus: - None: 125% - Wood: 100% - Light: 60% - Concrete: 25% - Explosion: napalm - ImpactSound: firebl3.aud - WaterExplosion: napalm - InfDeath: 5 - SmudgeType: Crater - Damage: 200 - 155mm: - ROF: 10 - Range: 7c512 - Burst: 20 - MinRange: 3c0 - -Report: - Projectile: Bullet - Speed: 170 - Trail: fb4 - Image: fb3 - High: true - Angle: 62 - Inaccuracy: 1c682 - ContrailLength: 2 - Warhead: - Spread: 426 - Versus: - None: 80% - Wood: 100% - Light: 60% - Heavy: 75% - Concrete: 35% - Explosion: small_napalm - WaterExplosion: small_napalm - InfDeath: 5 - SmudgeType: Scorch - ImpactSound: firebl3.aud - Damage: 10 - FLAK-23: - ROF: 10 - Range: 8c0 - Report: AACANON3.AUD - ValidTargets: Air,Ground - Projectile: Bullet - Speed: 1c682 - High: true - Warhead: - Spread: 213 - Versus: - None: 35% - Wood: 30% - Light: 30% - Heavy: 40% - Concrete: 30% - Explosion: med_explosion - Damage: 25 - SCUD: - ROF: 280 - Range: 7c0 - MinRange: 3c0 - Report: MISSILE1.AUD - Projectile: Bullet - Speed: 170 - Arm: 10 - High: true - Shadow: false - Trail: smokey - Inaccuracy: 426 - Image: V2 - Angle: 62 - Warhead: - Spread: 853 - Versus: - None: 100% - Wood: 90% - Light: 80% - Heavy: 70% - Explosion: nuke - WaterExplosion: large_splash - InfDeath: 3 - SmudgeType: Crater - Damage: 500 - ImpactSound: kaboom1.aud - WaterImpactSound: kaboom1.aud - SilencedPPK: - ROF: 80 - Range: 2c512 - Report: silppk.aud - Projectile: Bullet - Speed: 1c682 - Warhead: - Spread: 128 - Versus: - Wood: 0% - Light: 0% - Heavy: 50% - Concrete: 0% - Explosion: piffs - InfDeath: 2 - Damage: 150 - -Voices: - -Notifications: - -Translations: diff --git a/mods/ra/maps/Survival01/map.bin b/mods/ra/maps/Survival01/map.bin deleted file mode 100644 index 942e6c2de72bd85c01ff8e69f4b095550e780057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30725 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 CEkq*# diff --git a/mods/ra/maps/Survival01/map.yaml b/mods/ra/maps/Survival01/map.yaml deleted file mode 100644 index 9739b49cae..0000000000 --- a/mods/ra/maps/Survival01/map.yaml +++ /dev/null @@ -1,1329 +0,0 @@ -Selectable: True - -MapFormat: 6 - -RequiresMod: ra - -Title: Survivial01 - -Description: Survive! - -Author: Nuke'm Bro. - -Tileset: TEMPERAT - -MapSize: 96,64 - -Bounds: 4,4,88,56 - -UseAsShellmap: False - -Type: Minigame - -Options: - Crates: False - Fog: True - Shroud: True - AllyBuildRadius: False - FragileAlliances: False - StartingCash: 5000 - ConfigurableStartingUnits: False - Difficulties: Easy,Normal,Hard - -Players: - PlayerReference@Neutral: - Name: Neutral - OwnsWorld: True - NonCombatant: True - Race: allies - PlayerReference@Creeps: - Name: Creeps - NonCombatant: True - Race: allies - PlayerReference@Allies: - Name: Allies - Playable: True - AllowBots: False - Required: True - LockRace: True - Race: allies - LockColor: True - ColorRamp: 115,240,130 - LockSpawn: True - LockTeam: True - Enemies: Soviets - PlayerReference@Soviets: - Name: Soviets - Race: soviet - ColorRamp: 0,255,128 - Enemies: Allies - -Actors: - Actor113: fenc - Location: 46,54 - Owner: Allies - Actor115: fenc - Location: 46,55 - Owner: Allies - Actor88: brik - Location: 48,54 - Owner: Allies - Actor84: hpad - Location: 66,47 - Owner: Allies - Actor5: brik - Location: 72,55 - Owner: Allies - Actor4: brik - Location: 72,54 - Owner: Allies - Actor6: brik - Location: 72,53 - Owner: Allies - Actor77: brik - Location: 67,57 - Owner: Allies - Actor8: brik - Location: 72,52 - Owner: Allies - Actor9: brik - Location: 72,51 - Owner: Allies - Actor13: brik - Location: 75,50 - Owner: Allies - Actor12: brik - Location: 75,51 - Owner: Allies - Actor11: brik - Location: 74,51 - Owner: Allies - Actor10: brik - Location: 73,51 - Owner: Allies - Actor14: brik - Location: 75,49 - Owner: Allies - Actor15: brik - Location: 75,48 - Owner: Allies - Actor16: brik - Location: 76,48 - Owner: Allies - Actor17: brik - Location: 76,47 - Owner: Allies - Actor18: brik - Location: 75,47 - Owner: Allies - Actor19: brik - Location: 75,41 - Owner: Allies - Actor20: brik - Location: 75,42 - Owner: Allies - Actor21: brik - Location: 76,42 - Owner: Allies - Actor22: brik - Location: 76,41 - Owner: Allies - Actor23: brik - Location: 74,41 - Owner: Allies - Actor24: brik - Location: 73,41 - Owner: Allies - Actor25: brik - Location: 72,41 - Owner: Allies - Actor26: brik - Location: 71,41 - Owner: Allies - Actor27: brik - Location: 71,40 - Owner: Allies - Actor28: brik - Location: 70,40 - Owner: Allies - Actor29: brik - Location: 70,41 - Owner: Allies - Actor30: brik - Location: 61,40 - Owner: Allies - Actor31: brik - Location: 61,41 - Owner: Allies - Actor83: hpad - Location: 57,48 - Owner: Allies - Actor33: brik - Location: 60,40 - Owner: Allies - Actor1: brik - Location: 57,56 - Owner: Allies - Actor35: brik - Location: 59,40 - Owner: Allies - Actor36: brik - Location: 58,40 - Owner: Allies - Actor37: brik - Location: 57,40 - Owner: Allies - Actor38: brik - Location: 57,41 - Owner: Allies - Actor39: brik - Location: 56,41 - Owner: Allies - Actor40: brik - Location: 55,41 - Owner: Allies - Actor41: brik - Location: 54,41 - Owner: Allies - Actor42: brik - Location: 53,41 - Owner: Allies - Actor43: brik - Location: 53,42 - Owner: Allies - Actor44: brik - Location: 52,42 - Owner: Allies - Actor45: brik - Location: 51,42 - Owner: Allies - Actor46: brik - Location: 50,42 - Owner: Allies - Actor47: brik - Location: 49,42 - Owner: Allies - Actor48: brik - Location: 48,42 - Owner: Allies - Actor49: brik - Location: 48,43 - Owner: Allies - Actor50: brik - Location: 49,43 - Owner: Allies - Actor51: brik - Location: 48,52 - Owner: Allies - Actor52: brik - Location: 48,51 - Owner: Allies - Actor53: brik - Location: 48,50 - Owner: Allies - Actor54: brik - Location: 48,49 - Owner: Allies - Actor55: brik - Location: 48,48 - Owner: Allies - Actor71: brik - Location: 64,56 - Owner: Allies - Actor58: brik - Location: 46,47 - Owner: Allies - Actor57: brik - Location: 46,48 - Owner: Allies - Actor56: brik - Location: 47,48 - Owner: Allies - Actor59: brik - Location: 47,47 - Owner: Allies - Actor72: brik - Location: 64,57 - Owner: Allies - Actor65: brik - Location: 51,57 - Owner: Allies - Actor66: brik - Location: 50,57 - Owner: Allies - Actor61: brik - Location: 55,57 - Owner: Allies - Actor2: brik - Location: 57,57 - Owner: Allies - Actor34: brik - Location: 56,57 - Owner: Allies - Actor62: brik - Location: 54,57 - Owner: Allies - Actor74: brik - Location: 63,56 - Owner: Allies - Actor79: brik - Location: 65,57 - Owner: Allies - Actor80: apwr - Location: 68,53 - Owner: Allies - Actor81: powr - Location: 65,53 - Owner: Allies - Actor63: brik - Location: 53,57 - Owner: Allies - Actor64: brik - Location: 52,57 - Owner: Allies - Actor68: brik - Location: 72,57 - Owner: Allies - Actor73: brik - Location: 63,57 - Owner: Allies - Actor69: brik - Location: 71,57 - Owner: Allies - Actor76: brik - Location: 68,57 - Owner: Allies - Actor78: brik - Location: 66,57 - Owner: Allies - Actor75: brik - Location: 69,57 - Owner: Allies - Actor70: brik - Location: 70,57 - Owner: Allies - Actor7: brik - Location: 72,56 - Owner: Allies - Actor60: brik - Location: 56,56 - Owner: Allies - Actor 408: weap - Location: 53,46 - Owner: Allies - Actor32: tent - Location: 62,47 - Owner: Allies - Actor0: brik - Location: 48,53 - Owner: Allies - Actor111: proc - Location: 43,55 - Owner: Allies - Actor112: fenc - Location: 45,54 - Owner: Allies - Actor116: fenc - Location: 46,56 - Owner: Allies - Actor89: fenc - Location: 65,46 - Owner: Allies - Actor90: fenc - Location: 66,46 - Owner: Allies - Actor91: fenc - Location: 67,46 - Owner: Allies - Actor92: fenc - Location: 68,46 - Owner: Allies - Actor93: fenc - Location: 68,47 - Owner: Allies - Actor94: fenc - Location: 68,48 - Owner: Allies - Actor95: fenc - Location: 68,49 - Owner: Allies - Actor96: fenc - Location: 57,47 - Owner: Allies - Actor97: fenc - Location: 58,47 - Owner: Allies - Actor98: fenc - Location: 59,47 - Owner: Allies - Actor99: fenc - Location: 59,48 - Owner: Allies - Actor100: fenc - Location: 59,49 - Owner: Allies - Actor101: fix - Location: 50,52 - Owner: Allies - Actor102: dome - Location: 55,53 - Owner: Allies - Actor103: powr - Location: 58,41 - Owner: Allies - Actor104: apwr - Location: 71,47 - Owner: Allies - Actor105: fact - Location: 59,51 - Owner: Allies - Actor106: powr - Location: 55,42 - Owner: Allies - Actor107: gun - Location: 64,42 - Owner: Allies - Actor108: pbox.e1 - Location: 67,42 - Owner: Allies - Actor109: pbox.e1 - Location: 74,45 - Owner: Allies - Actor110: gun - Location: 50,45 - Owner: Allies - Actor114: fenc - Location: 44,54 - Owner: Allies - Actor118: fenc - Location: 42,57 - Owner: Allies - Actor117: fenc - Location: 46,57 - Owner: Allies - Actor67: brik - Location: 49,57 - Owner: Allies - Actor82: brik - Location: 48,57 - Owner: Allies - Actor85: brik - Location: 48,56 - Owner: Allies - Actor87: brik - Location: 48,55 - Owner: Allies - Actor86: brik - Location: 49,56 - Owner: Allies - Actor119: fenc - Location: 42,56 - Owner: Allies - Actor120: mine - Location: 30,58 - Owner: Neutral - Actor121: oilb - Location: 43,38 - Owner: Neutral - Actor122: oilb - Location: 36,37 - Owner: Neutral - Actor124: oilb - Location: 88,46 - Owner: Allies - Actor123: oilb - Location: 80,46 - Owner: Allies - Actor130: fenc - Location: 88,48 - Owner: Neutral - Actor129: fenc - Location: 89,48 - Owner: Neutral - Actor125: fenc - Location: 90,45 - Owner: Neutral - Actor127: fenc - Location: 90,47 - Owner: Neutral - Actor126: fenc - Location: 90,46 - Owner: Neutral - Actor128: fenc - Location: 90,48 - Owner: Neutral - Actor131: fenc - Location: 87,48 - Owner: Neutral - Actor141: fenc - Location: 78,11 - Owner: Soviets - Actor403: sam - Location: 76,11 - Owner: Soviets - Actor134: afld - Location: 86,5 - Owner: Soviets - Actor133: afld - Location: 80,6 - Owner: Soviets - Actor132: afld - Location: 75,5 - Owner: Soviets - Actor160: fenc - Location: 77,4 - Owner: Soviets - Actor159: fenc - Location: 76,4 - Owner: Soviets - Actor162: fenc - Location: 74,4 - Owner: Soviets - Actor161: fenc - Location: 78,4 - Owner: Soviets - Actor136: fenc - Location: 75,11 - Owner: Soviets - Actor137: fenc - Location: 75,10 - Owner: Soviets - Actor138: fenc - Location: 76,10 - Owner: Soviets - Actor139: fenc - Location: 77,10 - Owner: Soviets - Actor140: fenc - Location: 78,10 - Owner: Soviets - Actor143: barl - Location: 79,6 - Owner: Soviets - Actor144: brl3 - Location: 74,5 - Owner: Soviets - Actor145: brl3 - Location: 75,7 - Owner: Soviets - Actor146: barl - Location: 74,6 - Owner: Soviets - Actor147: barl - Location: 80,5 - Owner: Soviets - Actor148: brl3 - Location: 84,6 - Owner: Soviets - Actor149: brl3 - Location: 85,5 - Owner: Soviets - Actor150: brl3 - Location: 83,6 - Owner: Soviets - Actor151: barl - Location: 84,5 - Owner: Soviets - Actor142: brl3 - Location: 79,5 - Owner: Soviets - Actor152: barl - Location: 82,6 - Owner: Soviets - Actor153: barl - Location: 84,7 - Owner: Soviets - Actor154: barl - Location: 85,6 - Owner: Soviets - Actor155: barl - Location: 89,5 - Owner: Soviets - Actor171: fenc - Location: 87,4 - Owner: Soviets - Actor172: fenc - Location: 88,4 - Owner: Soviets - Actor156: brl3 - Location: 90,5 - Owner: Soviets - Actor170: fenc - Location: 86,4 - Owner: Soviets - Actor169: fenc - Location: 85,4 - Owner: Soviets - Actor158: fenc - Location: 75,4 - Owner: Soviets - Actor168: fenc - Location: 84,4 - Owner: Soviets - Actor157: barl - Location: 90,6 - Owner: Soviets - Actor167: fenc - Location: 83,4 - Owner: Soviets - Actor166: fenc - Location: 82,4 - Owner: Soviets - Actor165: fenc - Location: 81,4 - Owner: Soviets - Actor164: fenc - Location: 80,4 - Owner: Soviets - Actor163: fenc - Location: 79,4 - Owner: Soviets - Actor173: fenc - Location: 89,4 - Owner: Soviets - Actor174: fenc - Location: 90,4 - Owner: Soviets - Actor175: fenc - Location: 91,4 - Owner: Soviets - Actor176: fenc - Location: 91,5 - Owner: Soviets - Actor177: fenc - Location: 91,6 - Owner: Soviets - Actor178: fenc - Location: 91,7 - Owner: Soviets - Actor179: fenc - Location: 91,8 - Owner: Soviets - Actor180: fenc - Location: 90,8 - Owner: Soviets - Actor181: fenc - Location: 90,7 - Owner: Soviets - Actor183: proc - Location: 81,11 - Owner: Soviets - Actor187: t11 - Location: 69,10 - Owner: Neutral - Actor186: t16 - Location: 58,6 - Owner: Neutral - Actor185: tc04 - Location: 57,8 - Owner: Neutral - Actor184: mine - Location: 85,22 - Owner: Neutral - Actor188: tc01 - Location: 69,6 - Owner: Neutral - Actor189: t12 - Location: 62,13 - Owner: Neutral - Actor193: fenc - Location: 75,16 - Owner: Soviets - Actor194: fenc - Location: 75,15 - Owner: Soviets - Actor191: fenc - Location: 74,15 - Owner: Soviets - Actor192: fenc - Location: 74,16 - Owner: Soviets - Actor195: ftur - Location: 78,17 - Owner: Soviets - Actor190: fenc - Location: 74,14 - Owner: Soviets - Actor198: apwr - Location: 88,12 - Owner: Soviets - Actor196: silo - Location: 84,13 - Owner: Soviets - Actor197: silo - Location: 84,12 - Owner: Soviets - Actor199: e1 - Location: 79,15 - Owner: Soviets - Actor200: e2 - Location: 81,17 - Owner: Soviets - Actor201: v2rl - Location: 76,15 - Owner: Soviets - Actor202: tc04 - Location: 4,15 - Owner: Soviets - Actor203: tc01 - Location: 7,17 - Owner: Soviets - Actor204: t15 - Location: 9,16 - Owner: Neutral - Actor205: tc05 - Location: 4,26 - Owner: Neutral - Actor206: tc02 - Location: 5,24 - Owner: Neutral - Actor207: tc04 - Location: 7,25 - Owner: Neutral - Actor208: tc03 - Location: 40,21 - Owner: Neutral - Sam1: sam - Location: 62,27 - Owner: Soviets - Actor210: tc04 - Location: 34,22 - Owner: Neutral - Actor211: tc02 - Location: 32,33 - Owner: Neutral - Actor212: t16 - Location: 35,33 - Owner: Neutral - Actor213: t11 - Location: 49,37 - Owner: Neutral - Actor214: tc04 - Location: 82,39 - Owner: Neutral - Actor215: tc01 - Location: 89,39 - Owner: Neutral - Actor216: tc05 - Location: 85,39 - Owner: Neutral - Actor217: t16 - Location: 80,41 - Owner: Neutral - Actor218: fenc - Location: 79,48 - Owner: Neutral - Actor219: fenc - Location: 80,48 - Owner: Neutral - Actor220: fenc - Location: 81,48 - Owner: Neutral - Actor221: fenc - Location: 82,48 - Owner: Neutral - Actor222: fenc - Location: 82,47 - Owner: Neutral - Actor223: tc02 - Location: 21,41 - Owner: Neutral - Actor224: tc04 - Location: 35,43 - Owner: Neutral - Actor225: tc02 - Location: 38,44 - Owner: Neutral - Actor226: t16 - Location: 38,42 - Owner: Neutral - Actor227: t13 - Location: 44,33 - Owner: Neutral - Actor228: t02 - Location: 39,31 - Owner: Neutral - Actor229: tc04 - Location: 54,13 - Owner: Neutral - Actor230: t07 - Location: 47,12 - Owner: Neutral - Actor235: brik - Location: 12,18 - Owner: Neutral - Actor267: brik - Location: 33,17 - Owner: Neutral - Actor237: brik - Location: 11,19 - Owner: Neutral - Actor231: brik - Location: 11,16 - Owner: Neutral - Actor238: brik - Location: 12,19 - Owner: Neutral - Actor232: brik - Location: 11,17 - Owner: Neutral - Actor243: ftur - Location: 23,16 - Owner: Soviets - Actor244: ftur - Location: 29,13 - Owner: Soviets - Actor307: v2rl - Location: 31,9 - Owner: Soviets - Actor306: v2rl - Location: 31,18 - Owner: Soviets - Actor241: dome - Location: 14,16 - Owner: Soviets - Actor239: apwr - Location: 24,5 - Owner: Soviets - Actor234: brik - Location: 12,16 - Owner: Neutral - Actor233: brik - Location: 12,17 - Owner: Neutral - Actor236: brik - Location: 11,18 - Owner: Neutral - Actor293: brik - Location: 25,4 - Owner: Neutral - Actor291: brik - Location: 26,4 - Owner: Neutral - Actor295: brik - Location: 23,4 - Owner: Neutral - Actor294: brik - Location: 24,4 - Owner: Neutral - Actor290: brik - Location: 27,4 - Owner: Neutral - Actor289: brik - Location: 28,4 - Owner: Neutral - Actor288: brik - Location: 29,4 - Owner: Neutral - Actor287: brik - Location: 30,4 - Owner: Neutral - Actor286: brik - Location: 31,4 - Owner: Neutral - Actor285: brik - Location: 32,5 - Owner: Neutral - Actor284: brik - Location: 32,4 - Owner: Neutral - Actor283: brik - Location: 33,4 - Owner: Neutral - Actor261: brik - Location: 29,19 - Owner: Neutral - Actor262: brik - Location: 30,19 - Owner: Neutral - Actor260: brik - Location: 28,19 - Owner: Neutral - Actor265: brik - Location: 32,18 - Owner: Neutral - Actor259: brik - Location: 27,19 - Owner: Neutral - Sam2: sam - Location: 17,31 - Owner: Soviets - Actor264: brik - Location: 32,19 - Owner: Neutral - Actor246: brik - Location: 14,19 - Owner: Neutral - Actor242: brik - Location: 13,19 - Owner: Neutral - Actor263: brik - Location: 31,19 - Owner: Neutral - Actor266: brik - Location: 33,18 - Owner: Neutral - Actor247: brik - Location: 15,19 - Owner: Neutral - Actor248: brik - Location: 16,19 - Owner: Neutral - Actor249: brik - Location: 17,19 - Owner: Neutral - Actor251: brik - Location: 19,19 - Owner: Neutral - Actor250: brik - Location: 18,19 - Owner: Neutral - Actor254: brik - Location: 19,18 - Owner: Neutral - Actor253: brik - Location: 20,18 - Owner: Neutral - Actor252: brik - Location: 20,19 - Owner: Neutral - Actor281: brik - Location: 33,6 - Owner: Neutral - Actor277: brik - Location: 33,9 - Owner: Neutral - Actor276: brik - Location: 32,10 - Owner: Neutral - Actor270: brik - Location: 33,15 - Owner: Neutral - Actor278: brik - Location: 33,8 - Owner: Neutral - Actor275: brik - Location: 33,10 - Owner: Neutral - Actor274: brik - Location: 33,11 - Owner: Neutral - Actor273: brik - Location: 32,15 - Owner: Neutral - Actor271: brik - Location: 32,16 - Owner: Neutral - Actor282: brik - Location: 33,5 - Owner: Neutral - Actor272: brik - Location: 32,11 - Owner: Neutral - Actor279: brik - Location: 33,7 - Owner: Neutral - Actor269: brik - Location: 33,16 - Owner: Neutral - Actor268: brik - Location: 33,19 - Owner: Neutral - Actor420: weap - Location: 22,12 - Owner: Soviets - Actor240: apwr - Location: 16,13 - Owner: Soviets - Actor258: brik - Location: 26,18 - Owner: Neutral - Actor255: brik - Location: 25,18 - Owner: Neutral - Actor256: brik - Location: 25,19 - Owner: Neutral - Actor257: brik - Location: 26,19 - Owner: Neutral - Actor309: e1 - Location: 52,44 - Owner: Allies - Barrack1: barr - Location: 28,7 - Owner: Soviets - Actor305: v2rl - Location: 17,18 - Owner: Soviets - Actor304: e3 - Location: 17,17 - Owner: Soviets - Actor303: e1 - Location: 29,15 - Owner: Soviets - Actor300: e1 - Location: 25,16 - Owner: Soviets - Actor301: e2 - Location: 21,17 - Owner: Soviets - Actor302: e3 - Location: 28,10 - Owner: Soviets - sovietRallyPoint3: waypoint - Location: 37,13 - Owner: Neutral - sovietRallyPoint2: waypoint - Location: 23,21 - Owner: Neutral - Actor404: sam - Location: 29,17 - Owner: Soviets - sovietRallyPoint1: waypoint - Location: 23,39 - Owner: Neutral - Actor310: e1 - Location: 50,47 - Owner: Allies - Actor311: e1 - Location: 62,43 - Owner: Allies - Actor312: e1 - Location: 64,44 - Owner: Allies - Actor313: e3 - Location: 66,44 - Owner: Allies - Actor314: e1 - Location: 69,43 - Owner: Allies - Actor315: e1 - Location: 73,43 - Owner: Allies - Actor316: jeep - Location: 54,49 - Owner: Allies - Actor317: 1tnk - Location: 69,45 - Owner: Allies - Actor318: 1tnk - Location: 52,46 - Owner: Allies - sovietEntryPoint1: waypoint - Location: 4,31 - Owner: Neutral - sovietEntryPoint2: waypoint - Location: 4,21 - Owner: Neutral - sovietEntryPoint3: waypoint - Location: 37,4 - Owner: Neutral - sovietEntryPoint4: waypoint - Location: 65,4 - Owner: Neutral - sovietEntryPoint5: waypoint - Location: 91,19 - Owner: Neutral - sovietEntryPoint7: waypoint - Location: 91,43 - Owner: Neutral - alliesEntryPoint: waypoint - Location: 60,59 - Owner: Neutral - Actor296: tc02 - Location: 73,32 - Owner: Neutral - Actor298: tc01 - Location: 77,34 - Owner: Neutral - Actor299: tc04 - Location: 83,35 - Owner: Neutral - Actor308: tc01 - Location: 86,35 - Owner: Neutral - Actor319: t07 - Location: 90,27 - Owner: Neutral - Actor320: tc01 - Location: 80,26 - Owner: Neutral - alliesbase1: waypoint - Location: 66,45 - Owner: Neutral - alliesbase2: waypoint - Location: 51,46 - Owner: Neutral - alliesbase3: waypoint - Location: 72,45 - Owner: Neutral - alliesbase: waypoint - Location: 60,48 - Owner: Neutral - sovietRallyPoint4: waypoint - Location: 65,13 - Owner: Neutral - sovietRallyPoint5: waypoint - Location: 80,19 - Owner: Neutral - Actor321: brik - Location: 60,41 - Owner: Allies - BadgerEntryPoint1: waypoint - Location: 1,54 - Owner: Neutral - BadgerEntryPoint2: waypoint - Location: 1,47 - Owner: Neutral - ParaDrop1: waypoint - Location: 54,51 - Owner: Neutral - ParaDrop2: waypoint - Location: 67,51 - Owner: Neutral - ParaBomb1: waypoint - Location: 69,54 - Owner: Neutral - ParaBomb2: waypoint - Location: 72,48 - Owner: Neutral - Actor135: e1 - Location: 63,39 - Owner: Soviets - Actor209: e2 - Location: 65,40 - Owner: Soviets - Actor280: e1 - Location: 68,40 - Owner: Soviets - Actor292: e1 - Location: 76,44 - Owner: Soviets - Actor322: e2 - Location: 78,46 - Owner: Soviets - Actor323: e1 - Location: 46,44 - Owner: Soviets - Actor324: e3 - Location: 45,46 - Owner: Soviets - Actor325: e3 - Location: 66,39 - Owner: Soviets - Actor326: v2rl - Location: 61,37 - Owner: Soviets - Actor327: brl3 - Location: 79,47 - Owner: Allies - Actor328: barl - Location: 79,46 - Owner: Allies - Actor329: brl3 - Location: 87,45 - Owner: Allies - Actor330: barl - Location: 87,46 - Owner: Allies - Actor331: barl - Location: 88,45 - Owner: Allies - Actor332: oilb - Location: 74,53 - Owner: Allies - Actor333: fenc - Location: 73,55 - Owner: Allies - Actor334: fenc - Location: 74,55 - Owner: Allies - Actor335: fenc - Location: 75,55 - Owner: Allies - Actor336: fenc - Location: 75,52 - Owner: Allies - Actor337: fenc - Location: 76,52 - Owner: Allies - Actor338: fenc - Location: 74,52 - Owner: Allies - Actor339: brl3 - Location: 73,53 - Owner: Allies - Actor340: barl - Location: 73,52 - Owner: Allies - Actor3: spef - Location: 13,9 - Owner: Soviets - Factory: waypoint - Location: 23,13 - Owner: Neutral - Actor297: brik - Location: 22,4 - Owner: Neutral - Actor341: brik - Location: 21,4 - Owner: Neutral - Actor342: brik - Location: 21,5 - Owner: Neutral - Actor343: brik - Location: 22,5 - Owner: Neutral - SovietInfantryEntry1: waypoint - Location: 28,9 - Owner: Neutral - SovietInfantryRally1: waypoint - Location: 23,26 - Owner: Neutral - Actor346: t15 - Location: 57,24 - Owner: Neutral - Actor1000: camera.large - Location: 1,1 - Owner: Soviets - -Smudges: - -Rules: - World: - -CrateSpawner: - -SpawnMPUnits: - -MPStartLocations: - Survival01Script: - MissionObjectivesPanel: - ObjectivesPanel: MISSION_OBJECTIVES - TENT: - ProvidesCustomPrerequisite: - Prerequisite: barracks - GUN: - Valued: - Cost: 1000 - BARR: - ProvidesCustomPrerequisite: - Prerequisite: barracks - Buildable: - Owner: None - MEDI: - Buildable: - Prerequisites: barracks - SPY: - Buildable: - Prerequisites: barracks, dome - MIG: - Buildable: - Owner: None - YAK: - Buildable: - Owner: None - HELI: - Buildable: - Owner: None - SS: - Buildable: - Owner: None - MSUB: - Buildable: - Owner: None - DD: - Buildable: - Owner: None - CA: - Buildable: - Owner: None - PT: - Buildable: - Owner: None - MSLO: - Buildable: - Owner: None - GAP: - Buildable: - Owner: None - SPEN: - Buildable: - Owner: None - SYRD: - Buildable: - Owner: None - IRON: - Buildable: - Owner: None - PDOX: - Buildable: - Owner: None - TSLA: - Buildable: - Owner: None - AGUN: - Buildable: - Owner: None - FTUR: - Buildable: - Owner: None - SAM: - Buildable: - Owner: None - ATEK: - Buildable: - Owner: None - AFLD: - Buildable: - Owner: None - STEK: - Buildable: - Owner: None - 4TNK: - Buildable: - Owner: None - MCV: - Buildable: - Owner: None - APC: - Buildable: - Owner: None - MNLY.AP: - Buildable: - Owner: None - MNLY.AT: - Buildable: - Owner: None - TTNK: - Buildable: - Owner: None - FTRK: - Buildable: - Owner: None - CTNK: - Buildable: - Owner: None - DOME: - Buildable: - Owner: None - BRIK: - Buildable: - Owner: None - MRJ: - Buildable: - Owner: None - CAMERA.Large: - Inherits: CAMERA - RevealsShroud: - Range: 1000c0 - -Sequences: - -VoxelSequences: - -Weapons: - -Voices: - -Notifications: - -Translations: diff --git a/mods/ra/maps/Survival02/map.bin b/mods/ra/maps/Survival02/map.bin deleted file mode 100644 index 13fdf929d5a7d1a50321276a5b4c3d3ce7005169..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32005 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 diff --git a/mods/ra/maps/allies-01/map.yaml b/mods/ra/maps/allies-01/map.yaml deleted file mode 100644 index 812dcfdb25..0000000000 --- a/mods/ra/maps/allies-01/map.yaml +++ /dev/null @@ -1,446 +0,0 @@ -Selectable: True - -MapFormat: 6 - -RequiresMod: ra - -Title: Allies 01 - -Description: Allies' first mission - -Author: Scott_NZ - -Tileset: SNOW - -MapSize: 48,64 - -Bounds: 8,8,32,38 - -UseAsShellmap: False - -Type: Campaign - -Options: - Crates: False - Fog: True - Shroud: True - AllyBuildRadius: False - FragileAlliances: False - StartingCash: 5000 - ConfigurableStartingUnits: False - Difficulties: Easy,Normal - -Players: - PlayerReference@Neutral: - Name: Neutral - OwnsWorld: True - NonCombatant: True - Race: allies - PlayerReference@Creeps: - Name: Creeps - NonCombatant: True - Race: allies - PlayerReference@Allies: - Name: Allies - Playable: True - AllowBots: False - Required: True - LockRace: True - Race: allies - LockColor: True - ColorRamp: 161,134,200 - LockSpawn: True - LockTeam: True - Allies: Creeps - Enemies: Soviets - PlayerReference@Soviets: - Name: Soviets - Race: soviet - ColorRamp: 3,255,127 - Enemies: Allies,Creeps - -Actors: - Actor1: tc01 - Location: 13,9 - Owner: Neutral - Actor10: oilb - Location: 17,19 - Owner: Soviets - Actor3: t13 - Location: 17,13 - Owner: Neutral - Actor5: t16 - Location: 25,9 - Owner: Neutral - Actor4: t17 - Location: 17,10 - Owner: Neutral - Actor8: brl3 - Location: 19,21 - Owner: Soviets - Actor7: barl - Location: 19,20 - Owner: Soviets - Actor2: brl3 - Location: 19,19 - Owner: Soviets - Actor6: brl3 - Location: 20,19 - Owner: Soviets - Actor71: t01 - Location: 33,31 - Owner: Neutral - Actor11: powr - Location: 20,20 - Owner: Soviets - Actor12: powr - Location: 24,20 - Owner: Soviets - Actor13: powr - Location: 26,20 - Owner: Soviets - Actor14: t08 - Location: 25,13 - Owner: Neutral - Actor15: fenc - Location: 27,18 - Owner: Soviets - Actor16: fenc - Location: 28,18 - Owner: Soviets - Actor17: fenc - Location: 27,17 - Owner: Soviets - Actor18: jeep - Location: 21,13 - Owner: Allies - Actor19: jeep - Location: 22,13 - Owner: Allies - Actor20: jeep - Location: 23,13 - Owner: Allies - Actor22: e2 - Location: 21,19 - Owner: Soviets - Actor23: e1 - Location: 17,23 - Owner: Soviets - Actor28: e1 - Location: 23,12 - Owner: Allies - Actor26: e1 - Location: 22,12 - Owner: Allies - Actor25: e1 - Location: 21,12 - Owner: Allies - Actor65: fenc - Location: 33,33 - Owner: Soviets - Actor31: mine - Location: 33,14 - Owner: Neutral - Actor32: tc03 - Location: 28,13 - Owner: Neutral - Actor33: v04 - Location: 35,8 - Owner: Neutral - Actor34: tsla - Location: 30,22 - Owner: Soviets - Actor35: proc - Location: 32,21 - Owner: Soviets - Actor37: e1 - Location: 23,24 - Owner: Soviets - Actor0: e2 - Location: 22,27 - Owner: Soviets - Actor21: e2 - Location: 20,27 - Owner: Soviets - Actor40: weap - Location: 24,25 - Owner: Soviets - Actor41: fact - Location: 28,25 - Owner: Soviets - Actor42: barr - Location: 20,28 - Owner: Soviets - Actor43: silo - Location: 18,28 - Owner: Soviets - Actor44: dome - Location: 26,28 - Owner: Soviets - Actor45: t12 - Location: 15,19 - Owner: Neutral - Actor46: t12 - Location: 15,25 - Owner: Neutral - Actor47: fenc - Location: 14,27 - Owner: Soviets - Actor48: fenc - Location: 14,28 - Owner: Soviets - Actor49: fenc - Location: 14,29 - Owner: Soviets - Actor50: fenc - Location: 14,30 - Owner: Soviets - Actor51: tsla - Location: 19,30 - Owner: Soviets - Actor52: tsla - Location: 26,30 - Owner: Soviets - Actor53: fenc - Location: 14,31 - Owner: Soviets - Actor54: fenc - Location: 15,31 - Owner: Soviets - Actor55: fenc - Location: 16,31 - Owner: Soviets - Actor56: fenc - Location: 17,31 - Owner: Soviets - Actor57: fenc - Location: 17,32 - Owner: Soviets - Actor70: fenc - Location: 35,33 - Owner: Soviets - Actor59: e1 - Location: 23,31 - Owner: Soviets - Actor60: e1 - Location: 21,31 - Owner: Soviets - Actor61: powr - Location: 34,30 - Owner: Soviets - Actor58: powr - Location: 36,27 - Owner: Soviets - Actor64: t05 - Location: 32,27 - Owner: Neutral - Actor62: powr - Location: 36,30 - Owner: Soviets - Actor63: fenc - Location: 32,33 - Owner: Soviets - Actor30: powr - Location: 34,27 - Owner: Soviets - Actor67: fenc - Location: 34,33 - Owner: Soviets - Actor68: c1 - Location: 28,16 - Owner: Creeps - Actor69: c2 - Location: 30,17 - Owner: Creeps - Actor72: e1 - Location: 35,29 - Owner: Soviets - Actor66: e1 - Location: 31,29 - Owner: Soviets - Actor9: barl - Location: 18,21 - Owner: Soviets - Actor74: tc02 - Location: 11,23 - Owner: Neutral - Actor73: tc03 - Location: 37,22 - Owner: Neutral - Actor75: t02 - Location: 29,31 - Owner: Neutral - Actor76: t02 - Location: 12,34 - Owner: Neutral - Actor79: fenc - Location: 14,21 - Owner: Soviets - Actor78: fenc - Location: 14,22 - Owner: Soviets - Actor77: fenc - Location: 14,23 - Owner: Soviets - Actor85: 3tnk - Location: 17,25 - Owner: Soviets - Facing: 0 - Actor92: wood - Location: 34,9 - Owner: Neutral - Actor94: c1 - Location: 19,24 - Owner: Soviets - Actor95: c2 - Location: 31,23 - Owner: Soviets - InsertionLZ: waypoint - Location: 22,10 - Owner: Neutral - Lab: stek.autotargetignore - Location: 20,24 - Owner: Soviets - Actor24: e2 - Location: 27,24 - Owner: Soviets - ShipSpawnPoint: waypoint - Location: 23,45 - Owner: Neutral - ShipMovePoint: waypoint - Location: 23,40 - Owner: Neutral - InsertionLZEntryPoint: waypoint - Location: 22,4 - Owner: Neutral - Actor27: e2 - Location: 27,27 - Owner: Soviets - ChinookExitPoint: waypoint - Location: 55,11 - Owner: Neutral - ExtractionLZEntryPoint: waypoint - Location: 31,48 - Owner: Neutral - SovietAttackEntryPoint2: waypoint - Location: 39,11 - Owner: Neutral - ExtractionLZ: waypoint - Location: 13,12 - Owner: Neutral - Actor36: e1 - Location: 20,12 - Owner: Allies - Actor38: e1 - Location: 24,12 - Owner: Allies - Actor39: e3 - Location: 21,11 - Owner: Allies - Actor80: e3 - Location: 22,11 - Owner: Allies - Actor81: e3 - Location: 23,11 - Owner: Allies - SovietAttackEntryPoint1: waypoint - Location: 8,30 - Owner: Neutral - Actor29: kenn - Location: 23,28 - Owner: Soviets - Actor1000: camera.large - Location: 1,1 - Owner: Soviets - -Smudges: - -Rules: - Player: - -ConquestVictoryConditions: - World: - -CrateSpawner: - -SpawnMPUnits: - -MPStartLocations: - Allies01Script: - MissionObjectivesPanel: - ObjectivesPanel: MISSION_OBJECTIVES - TRAN: - -Selectable: - RevealsShroud: - Range: 0c0 - E7: - AutoTarget: - InitialStance: Defend - Passenger: - Weight: 0 - EINSTEIN: - Passenger: - Weight: 0 - STEK.AutoTargetIgnore: - Inherits: STEK - RenderBuilding: - Image: STEK - Tooltip: - Icon: STEK - AutoTargetIgnore: - ^Vehicle: - GivesBounty: - Percentage: 0 - ^Tank: - GivesBounty: - Percentage: 0 - ^Infantry: - GivesBounty: - Percentage: 0 - ^Ship: - GivesBounty: - Percentage: 0 - ^Plane: - GivesBounty: - Percentage: 0 - ^Building: - GivesBounty: - Percentage: 0 - CAMERA.Large: - Inherits: CAMERA - RevealsShroud: - Range: 1000c0 - -Sequences: - -VoxelSequences: - -Weapons: - 8Inch: - ROF: 200 - Range: 25c0 - Burst: 2 - Report: TURRET1.AUD - Projectile: Bullet - Speed: 512 - High: true - Angle: 62 - Inaccuracy: 4c170 - Image: 120MM - ContrailLength: 10 - Warhead: - Spread: 213 - Versus: - None: 60% - Wood: 75% - Light: 60% - Heavy: 25% - Explosion: large_explosion - WaterExplosion: large_splash - InfDeath: 2 - SmudgeType: Crater - Damage: 500 - ImpactSound: kaboom12.aud - WaterImpactSound: splash9.aud - -Voices: - -Notifications: - -Translations: diff --git a/mods/ra/maps/allies-02/map.bin b/mods/ra/maps/allies-02/map.bin deleted file mode 100644 index d6e179289570e1893ac9b8b5dfa8a7f86fadba5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81925 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 diff --git a/mods/ra/maps/allies-02/map.yaml b/mods/ra/maps/allies-02/map.yaml deleted file mode 100644 index d904a22c3a..0000000000 --- a/mods/ra/maps/allies-02/map.yaml +++ /dev/null @@ -1,1947 +0,0 @@ -Selectable: True - -MapFormat: 6 - -RequiresMod: ra - -Title: Allies 02 - -Description: Allies' second mission - -Author: Scott_NZ - -Tileset: SNOW - -MapSize: 128,128 - -Bounds: 16,16,96,96 - -UseAsShellmap: False - -Type: Campaign - -Options: - Crates: False - Fog: True - Shroud: True - AllyBuildRadius: False - FragileAlliances: False - StartingCash: 5000 - ConfigurableStartingUnits: False - -Players: - PlayerReference@Neutral: - Name: Neutral - OwnsWorld: True - NonCombatant: True - Race: allies - PlayerReference@Allies1: - Name: Allies1 - Playable: True - AllowBots: False - Required: True - LockRace: True - Race: allies - LockColor: True - ColorRamp: 161,134,200 - LockSpawn: True - LockTeam: True - Allies: Allies2,Allies - Enemies: Soviets - PlayerReference@Allies2: - Name: Allies2 - Playable: True - AllowBots: False - LockRace: True - Race: allies - LockColor: True - ColorRamp: 76,196,190 - LockSpawn: True - LockTeam: True - Allies: Allies1,Allies - Enemies: Soviets - PlayerReference@Allies: - Name: Allies - Race: allies - ColorRamp: 115,115,143 - Allies: Allies1,Allies2 - Enemies: Soviets - PlayerReference@Soviets: - Name: Soviets - Race: soviet - ColorRamp: 3,255,127 - Enemies: Allies1,Allies2,Allies - -Actors: - Actor1: v07 - Location: 71,91 - Owner: Neutral - Actor2: v04 - Location: 77,90 - Owner: Neutral - Actor3: v03 - Location: 66,90 - Owner: Neutral - Actor4: v02 - Location: 73,94 - Owner: Neutral - Actor5: v01 - Location: 77,94 - Owner: Neutral - Actor6: v07 - Location: 77,87 - Owner: Neutral - Actor7: v09 - Location: 61,95 - Owner: Neutral - Actor8: v08 - Location: 60,91 - Owner: Neutral - Actor15: t16 - Location: 60,104 - Owner: Neutral - Actor33: t06 - Location: 59,95 - Owner: Neutral - Actor11: wood - Location: 68,100 - Owner: Neutral - Actor12: v05 - Location: 72,87 - Owner: Neutral - Actor20: t05 - Location: 74,76 - Owner: Neutral - Actor10: tc03 - Location: 60,99 - Owner: Neutral - Actor16: wood - Location: 67,100 - Owner: Neutral - Actor17: wood - Location: 66,100 - Owner: Neutral - Actor18: wood - Location: 66,99 - Owner: Neutral - Actor19: wood - Location: 66,98 - Owner: Neutral - Actor29: wood - Location: 65,96 - Owner: Neutral - Actor13: t06 - Location: 65,82 - Owner: Neutral - Actor22: v08 - Location: 83,94 - Owner: Neutral - Actor23: v04 - Location: 64,93 - Owner: Neutral - Actor24: v04 - Location: 83,91 - Owner: Neutral - Actor25: tc04 - Location: 93,86 - Owner: Neutral - Actor26: v12 - Location: 79,91 - Owner: Neutral - Actor31: wood - Location: 63,96 - Owner: Neutral - Actor30: wood - Location: 64,96 - Owner: Neutral - Actor194: sbag - Location: 94,50 - Owner: Soviets - Actor27: wood - Location: 66,97 - Owner: Neutral - Actor14: tc05 - Location: 59,101 - Owner: Neutral - Actor28: wood - Location: 66,96 - Owner: Neutral - Actor9: t12 - Location: 59,98 - Owner: Neutral - Actor34: t14 - Location: 68,98 - Owner: Neutral - Actor35: t11 - Location: 71,89 - Owner: Neutral - Actor36: t15 - Location: 83,95 - Owner: Neutral - Actor115: fenc - Location: 100,99 - Owner: Soviets - Actor38: t14 - Location: 89,97 - Owner: Neutral - Actor39: t15 - Location: 84,108 - Owner: Neutral - Engineer: e6 - Location: 68,86 - Owner: Neutral - Actor41: t01 - Location: 71,80 - Owner: Neutral - Actor43: t02 - Location: 79,102 - Owner: Neutral - Actor132: fenc - Location: 100,100 - Owner: Soviets - Actor45: tc04 - Location: 64,108 - Owner: Neutral - Actor46: tc01 - Location: 64,105 - Owner: Neutral - Actor47: t07 - Location: 77,107 - Owner: Neutral - Actor48: t05 - Location: 92,80 - Owner: Neutral - Actor49: t03 - Location: 87,88 - Owner: Neutral - Actor50: t06 - Location: 96,82 - Owner: Neutral - Actor669: fenc - Location: 95,79 - Owner: Soviets - Actor135: tc05 - Location: 106,109 - Owner: Neutral - Actor58: t06 - Location: 85,105 - Owner: Neutral - Actor125: e2 - Location: 99,86 - Owner: Soviets - Actor599: tc01 - Location: 70,32 - Owner: Neutral - Actor62: t12 - Location: 96,79 - Owner: Neutral - Actor66: t17 - Location: 85,71 - Owner: Neutral - Actor65: t14 - Location: 89,70 - Owner: Neutral - Actor87: t03 - Location: 69,34 - Owner: Neutral - Actor598: t08 - Location: 71,31 - Owner: Neutral - Actor82: e2 - Location: 73,109 - Owner: Soviets - Actor81: e2 - Location: 70,109 - Owner: Soviets - Actor86: e2 - Location: 74,110 - Owner: Soviets - Actor154: e1 - Location: 105,95 - Owner: Soviets - Actor149: sbag - Location: 92,50 - Owner: Soviets - Actor99: e1 - Location: 82,72 - Owner: Soviets - Actor75: t06 - Location: 73,64 - Owner: Neutral - Actor76: t14 - Location: 71,71 - Owner: Neutral - Actor77: tc04 - Location: 93,96 - Owner: Neutral - ChinookHusk: tran.husk2 - Location: 108,87 - Owner: Allies1 - Actor95: fenc - Location: 83,71 - Owner: Soviets - Actor642: t10 - Location: 66,29 - Owner: Neutral - Actor603: fenc - Location: 84,71 - Owner: Soviets - Einstein: einstein - Location: 66,85 - Owner: Neutral - Actor85: medi - Location: 110,86 - Owner: Allies1 - SAM1: sam - Location: 105,97 - Owner: Soviets - Tanya: e7 - Location: 106,86 - Owner: Allies1 - Actor60: e2 - Location: 77,96 - Owner: Soviets - Actor59: e2 - Location: 74,92 - Owner: Soviets - Actor89: e1 - Location: 71,99 - Owner: Soviets - Actor88: t07 - Location: 93,80 - Owner: Neutral - Actor469: e2 - Location: 97,20 - Owner: Soviets - Actor438: fenc - Location: 88,19 - Owner: Soviets - Actor56: e1 - Location: 78,74 - Owner: Soviets - Actor549: t16 - Location: 111,50 - Owner: Neutral - Actor242: fenc - Location: 88,50 - Owner: Soviets - Actor104: t10 - Location: 107,46 - Owner: Neutral - Actor163: e2 - Location: 109,96 - Owner: Soviets - Actor90: t02 - Location: 90,72 - Owner: Neutral - Actor106: fenc - Location: 111,94 - Owner: Soviets - Actor590: e1 - Location: 102,97 - Owner: Soviets - Actor64: e1 - Location: 96,93 - Owner: Soviets - Actor169: v2rl - Location: 53,20 - Owner: Soviets - Actor122: e1 - Location: 89,66 - Owner: Soviets - Actor137: t01 - Location: 111,92 - Owner: Neutral - Actor98: fenc - Location: 109,93 - Owner: Soviets - Actor105: fenc - Location: 110,94 - Owner: Soviets - Actor146: t16 - Location: 62,85 - Owner: Neutral - Actor159: brl3 - Location: 93,64 - Owner: Soviets - Actor160: tc05 - Location: 15,108 - Owner: Neutral - Actor155: t05 - Location: 110,40 - Owner: Neutral - Actor157: tc05 - Location: 91,36 - Owner: Neutral - Actor330: oilb - Location: 65,31 - Owner: Neutral - Actor114: fenc - Location: 100,98 - Owner: Soviets - Actor136: t15 - Location: 110,103 - Owner: Neutral - Actor226: fenc - Location: 97,39 - Owner: Soviets - Actor113: fenc - Location: 100,97 - Owner: Soviets - Actor110: fenc - Location: 98,97 - Owner: Soviets - Actor152: t01 - Location: 109,39 - Owner: Neutral - Actor439: fenc - Location: 88,18 - Owner: Soviets - Actor127: fenc - Location: 109,101 - Owner: Soviets - Actor153: t08 - Location: 108,58 - Owner: Neutral - Actor130: e1 - Location: 100,77 - Owner: Soviets - Actor118: fenc - Location: 109,102 - Owner: Soviets - Actor158: t07 - Location: 110,48 - Owner: Neutral - Actor126: t03 - Location: 107,79 - Owner: Neutral - Actor143: dome - Location: 102,74 - Owner: Soviets - Actor156: e1 - Location: 98,72 - Owner: Soviets - Actor142: e2 - Location: 101,69 - Owner: Soviets - Actor247: silo - Location: 39,33 - Owner: Soviets - Actor61: tc05 - Location: 87,109 - Owner: Neutral - Actor174: t06 - Location: 51,78 - Owner: Neutral - Actor711: e1 - Location: 74,36 - Owner: Soviets - Actor73: e1 - Location: 72,109 - Owner: Soviets - Actor306: apwr - Location: 54,65 - Owner: Soviets - Actor134: tc03 - Location: 110,107 - Owner: Neutral - Actor215: tc01 - Location: 16,62 - Owner: Neutral - Actor188: t02 - Location: 55,24 - Owner: Neutral - Actor37: fenc - Location: 99,97 - Owner: Soviets - Actor195: tc03 - Location: 16,16 - Owner: Neutral - Actor196: t17 - Location: 21,15 - Owner: Neutral - Actor198: tc03 - Location: 18,106 - Owner: Neutral - Actor200: tc01 - Location: 19,110 - Owner: Neutral - Actor203: t11 - Location: 45,91 - Owner: Neutral - Actor356: proc - Location: 26,90 - Owner: Allies - FreeActor: False - Actor147: mine - Location: 20,98 - Owner: Neutral - Actor459: tc01 - Location: 41,99 - Owner: Neutral - Actor216: tc05 - Location: 23,45 - Owner: Neutral - Actor217: t07 - Location: 49,32 - Owner: Neutral - Actor218: t16 - Location: 55,34 - Owner: Neutral - Actor53: e1 - Location: 109,89 - Owner: Allies1 - Actor182: tc02 - Location: 53,35 - Owner: Neutral - Actor52: e1 - Location: 106,88 - Owner: Allies1 - Actor239: t06 - Location: 48,75 - Owner: Neutral - Actor292: ftur - Location: 36,56 - Owner: Soviets - Actor71: e1 - Location: 86,102 - Owner: Soviets - Actor80: e1 - Location: 70,110 - Owner: Soviets - Actor44: t16 - Location: 87,105 - Owner: Neutral - Actor133: v04 - Location: 83,101 - Owner: Neutral - Actor259: tc01 - Location: 110,109 - Owner: Neutral - Actor140: t11 - Location: 110,82 - Owner: Neutral - Actor610: e2 - Location: 101,79 - Owner: Soviets - Actor109: fenc - Location: 111,95 - Owner: Soviets - Actor70: dog - Location: 87,99 - Owner: Soviets - Actor141: t13 - Location: 104,85 - Owner: Neutral - Actor236: 3tnk - Location: 91,45 - Owner: Soviets - Actor254: tc02 - Location: 89,34 - Owner: Neutral - Actor138: tc01 - Location: 104,82 - Owner: Neutral - Actor164: e1 - Location: 107,99 - Owner: Soviets - Actor442: e2 - Location: 91,19 - Owner: Soviets - Actor251: fenc - Location: 63,41 - Owner: Soviets - Actor199: t01 - Location: 108,49 - Owner: Neutral - Actor440: fenc - Location: 88,17 - Owner: Soviets - Actor222: fenc - Location: 94,63 - Owner: Soviets - Actor441: e1 - Location: 89,19 - Owner: Soviets - Actor287: fenc - Location: 93,63 - Owner: Soviets - Actor93: fenc - Location: 96,65 - Owner: Soviets - Actor223: e2 - Location: 94,64 - Owner: Soviets - Actor224: e2 - Location: 92,67 - Owner: Soviets - Actor437: fenc - Location: 98,21 - Owner: Soviets - Actor21: fenc - Location: 97,47 - Owner: Soviets - Actor227: fenc - Location: 96,39 - Owner: Soviets - Actor208: oilb - Location: 105,43 - Owner: Soviets - Actor231: fenc - Location: 94,38 - Owner: Soviets - Actor201: oilb - Location: 105,40 - Owner: Soviets - Actor210: powr - Location: 105,46 - Owner: Soviets - Actor78: barr - Location: 101,40 - Owner: Soviets - Actor151: fenc - Location: 97,45 - Owner: Soviets - Actor235: tc05 - Location: 106,51 - Owner: Neutral - Actor74: fenc - Location: 97,46 - Owner: Soviets - Actor234: tc03 - Location: 107,54 - Owner: Neutral - Actor219: fenc - Location: 97,41 - Owner: Soviets - Actor221: fenc - Location: 97,40 - Owner: Soviets - Actor228: fenc - Location: 95,39 - Owner: Soviets - Actor248: barl - Location: 100,41 - Owner: Soviets - Actor229: fenc - Location: 94,39 - Owner: Soviets - Actor245: e1 - Location: 101,43 - Owner: Soviets - Actor249: brl3 - Location: 100,40 - Owner: Soviets - Actor250: brl3 - Location: 101,39 - Owner: Soviets - Actor258: e2 - Location: 103,45 - Owner: Soviets - Actor443: e1 - Location: 97,105 - Owner: Soviets - Actor260: e1 - Location: 97,43 - Owner: Soviets - Actor108: e1 - Location: 99,47 - Owner: Soviets - Actor266: e1 - Location: 96,47 - Owner: Soviets - Actor279: brl3 - Location: 106,39 - Owner: Soviets - Actor280: barl - Location: 106,42 - Owner: Soviets - Actor331: e1 - Location: 36,88 - Owner: Soviets - Actor193: fenc - Location: 95,63 - Owner: Soviets - Actor192: fenc - Location: 95,64 - Owner: Soviets - Actor94: fenc - Location: 96,64 - Owner: Soviets - Actor640: tc04 - Location: 72,31 - Owner: Neutral - Actor641: t02 - Location: 71,29 - Owner: Neutral - Actor181: mine - Location: 109,76 - Owner: Neutral - Actor348: e3 - Location: 87,48 - Owner: Soviets - Actor244: fenc - Location: 86,50 - Owner: Soviets - Actor246: fenc - Location: 85,50 - Owner: Soviets - Actor243: fenc - Location: 87,50 - Owner: Soviets - Actor284: fenc - Location: 85,49 - Owner: Soviets - Actor366: e1 - Location: 88,51 - Owner: Soviets - Actor367: e1 - Location: 92,51 - Owner: Soviets - Actor368: e1 - Location: 91,49 - Owner: Soviets - Actor347: e3 - Location: 86,49 - Owner: Soviets - Actor370: e2 - Location: 94,49 - Owner: Soviets - Actor281: fenc - Location: 56,38 - Owner: Soviets - Actor376: e1 - Location: 107,89 - Owner: Allies1 - Actor377: e1 - Location: 108,89 - Owner: Allies1 - Actor378: e1 - Location: 110,88 - Owner: Allies1 - SAM2: sam - Location: 91,65 - Owner: Soviets - Actor327: t06 - Location: 37,73 - Owner: Neutral - Actor189: t13 - Location: 88,57 - Owner: Neutral - Actor328: t14 - Location: 26,57 - Owner: Neutral - Actor297: e1 - Location: 33,25 - Owner: Soviets - Actor124: mine - Location: 49,25 - Owner: Neutral - Actor112: e1 - Location: 98,87 - Owner: Soviets - Actor428: e1 - Location: 90,100 - Owner: Soviets - Actor298: e2 - Location: 33,23 - Owner: Soviets - Actor510: e1 - Location: 94,20 - Owner: Soviets - Actor508: e1 - Location: 79,19 - Owner: Soviets - Actor57: cycl - Location: 74,16 - Owner: Soviets - Actor511: sbag - Location: 96,19 - Owner: Soviets - Actor515: tc05 - Location: 108,17 - Owner: Neutral - Actor516: t13 - Location: 72,20 - Owner: Neutral - Actor121: cycl - Location: 75,23 - Owner: Soviets - Actor519: sbag - Location: 93,18 - Owner: Soviets - Actor489: apwr - Location: 76,19 - Owner: Soviets - Actor517: sbag - Location: 96,17 - Owner: Soviets - Actor520: sbag - Location: 93,19 - Owner: Soviets - Actor488: apwr - Location: 80,19 - Owner: Soviets - Actor116: cycl - Location: 74,20 - Owner: Soviets - Actor117: cycl - Location: 74,21 - Owner: Soviets - Actor107: oilb - Location: 68,29 - Owner: Neutral - Actor232: fenc - Location: 94,37 - Owner: Soviets - Actor102: spen - Location: 101,35 - Owner: Soviets - Actor487: apwr - Location: 80,16 - Owner: Soviets - Actor523: t17 - Location: 85,20 - Owner: Neutral - Actor522: t05 - Location: 90,16 - Owner: Neutral - Actor119: cycl - Location: 74,22 - Owner: Soviets - Actor120: cycl - Location: 74,23 - Owner: Soviets - Actor518: sbag - Location: 94,17 - Owner: Soviets - Actor521: sbag - Location: 93,17 - Owner: Soviets - Actor237: tc04 - Location: 99,53 - Owner: Neutral - Actor139: cycl - Location: 77,23 - Owner: Soviets - Actor123: cycl - Location: 76,23 - Owner: Soviets - Actor504: e2 - Location: 78,23 - Owner: Soviets - Actor505: e1 - Location: 84,18 - Owner: Soviets - Actor289: sbag - Location: 95,17 - Owner: Soviets - SAM3: sam - Location: 94,18 - Owner: Soviets - Actor512: sbag - Location: 96,18 - Owner: Soviets - Actor486: apwr - Location: 76,16 - Owner: Soviets - Actor514: tc03 - Location: 104,20 - Owner: Neutral - Actor307: apwr - Location: 54,59 - Owner: Soviets - Actor91: cycl - Location: 74,17 - Owner: Soviets - Actor103: cycl - Location: 74,18 - Owner: Soviets - Actor111: cycl - Location: 74,19 - Owner: Soviets - Actor413: e1 - Location: 104,38 - Owner: Soviets - Actor626: barl - Location: 80,72 - Owner: Soviets - Actor419: e1 - Location: 82,62 - Owner: Soviets - Actor150: sbag - Location: 93,50 - Owner: Soviets - Actor608: brl3 - Location: 81,72 - Owner: Soviets - Actor427: e1 - Location: 76,71 - Owner: Soviets - Actor429: e2 - Location: 78,70 - Owner: Soviets - Actor611: t05 - Location: 81,65 - Owner: Neutral - Actor336: fenc - Location: 90,20 - Owner: Soviets - Actor422: fenc - Location: 96,21 - Owner: Soviets - Actor335: fenc - Location: 89,20 - Owner: Soviets - Actor436: fenc - Location: 97,21 - Owner: Soviets - Actor421: fenc - Location: 91,20 - Owner: Soviets - Actor334: fenc - Location: 88,20 - Owner: Soviets - SAM4: sam - Location: 31,37 - Owner: Soviets - Actor295: e1 - Location: 28,25 - Owner: Soviets - Actor299: dog - Location: 31,23 - Owner: Soviets - Actor170: weap - Location: 23,103 - Owner: Allies - Actor460: t08 - Location: 40,110 - Owner: Neutral - Actor206: dome - Location: 35,99 - Owner: Allies - Actor204: apwr - Location: 37,107 - Owner: Allies - Actor92: powr - Location: 101,46 - Owner: Soviets - Actor84: fenc - Location: 110,93 - Owner: Soviets - Actor83: apwr - Location: 37,104 - Owner: Allies - Actor162: mine - Location: 20,91 - Owner: Neutral - ReinforcementsEntryPoint: waypoint - Location: 31,111 - Owner: Neutral - Actor96: fenc - Location: 82,71 - Owner: Soviets - Actor97: fenc - Location: 111,66 - Owner: Soviets - Actor79: e1 - Location: 80,87 - Owner: Soviets - Actor42: t07 - Location: 92,110 - Owner: Neutral - Actor558: v10 - Location: 64,90 - Owner: Neutral - ExtractionLZ: waypoint - Location: 30,38 - Owner: Neutral - ExtractionLZEntryPoint: waypoint - Location: 9,9 - Owner: Neutral - Actor414: t13 - Location: 74,43 - Owner: Neutral - Actor361: silo - Location: 25,89 - Owner: Allies - Actor446: spen - Location: 58,17 - Owner: Soviets - Actor273: t13 - Location: 45,38 - Owner: Neutral - Actor253: gun - Location: 27,88 - Owner: Allies - Actor534: 1tnk - Location: 37,90 - Owner: Allies - Facing: 0 - Actor398: 1tnk - Location: 36,90 - Owner: Allies - Facing: 0 - BadgerDropPoint1: waypoint - Location: 19,96 - Owner: Neutral - BadgerEntryPoint1: waypoint - Location: 40,12 - Owner: Neutral - Actor485: tc03 - Location: 41,101 - Owner: Neutral - Actor495: tc02 - Location: 40,102 - Owner: Neutral - Actor51: t13 - Location: 66,80 - Owner: Neutral - Allies2BasePoint: waypoint - Location: 34,96 - Owner: Neutral - FlamersEntryPoint: waypoint - Location: 16,74 - Owner: Neutral - Actor873: brl3 - Location: 45,79 - Owner: Neutral - Actor171: tsla - Location: 41,56 - Owner: Soviets - Actor570: oilb - Location: 43,80 - Owner: Neutral - Actor263: dome - Location: 61,45 - Owner: Soviets - Actor584: tc04 - Location: 52,70 - Owner: Neutral - Actor586: tc01 - Location: 45,70 - Owner: Neutral - Actor587: t17 - Location: 31,84 - Owner: Neutral - SovietRallyPoint: waypoint - Location: 36,65 - Owner: Neutral - Actor605: barl - Location: 91,68 - Owner: Soviets - Actor498: barl - Location: 94,65 - Owner: Soviets - Actor67: tc01 - Location: 97,65 - Owner: Neutral - Actor462: t02 - Location: 65,89 - Owner: Neutral - Actor529: fenc - Location: 107,102 - Owner: Soviets - Actor588: e1 - Location: 69,93 - Owner: Neutral - Actor535: fenc - Location: 101,100 - Owner: Soviets - Actor524: e1 - Location: 69,89 - Owner: Neutral - Actor513: e1 - Location: 67,88 - Owner: Neutral - Actor211: e1 - Location: 105,107 - Owner: Soviets - Actor530: fenc - Location: 106,102 - Owner: Soviets - Actor591: e2 - Location: 104,101 - Owner: Soviets - Actor128: fenc - Location: 108,102 - Owner: Soviets - Actor592: dog - Location: 108,97 - Owner: Soviets - Actor525: e1 - Location: 70,88 - Owner: Neutral - Actor604: brl3 - Location: 90,67 - Owner: Soviets - Actor720: fenc - Location: 110,66 - Owner: Soviets - Actor556: e1 - Location: 110,89 - Owner: Allies1 - Actor600: barl - Location: 92,68 - Owner: Soviets - Actor647: fenc - Location: 84,72 - Owner: Soviets - Actor532: e1 - Location: 106,89 - Owner: Allies1 - SovietTownAttackPoint1: waypoint - Location: 72,110 - Owner: Neutral - Actor464: t05 - Location: 64,82 - Owner: Neutral - Actor463: tc04 - Location: 60,83 - Owner: Neutral - Actor714: e1 - Location: 73,90 - Owner: Neutral - Actor609: e2 - Location: 99,79 - Owner: Soviets - Actor721: fenc - Location: 109,66 - Owner: Soviets - Actor606: brl3 - Location: 89,67 - Owner: Soviets - Actor144: t01 - Location: 98,107 - Owner: Neutral - Actor594: e1 - Location: 73,88 - Owner: Neutral - Actor595: e1 - Location: 73,83 - Owner: Soviets - SovietTownAttackPoint2: waypoint - Location: 86,78 - Owner: Neutral - Actor129: e1 - Location: 102,78 - Owner: Soviets - Actor283: apwr - Location: 51,58 - Owner: Soviets - Actor72: dog - Location: 81,71 - Owner: Soviets - Actor617: truk - Location: 104,43 - Owner: Soviets - Actor220: sbag - Location: 92,48 - Owner: Soviets - Actor275: fenc - Location: 64,44 - Owner: Soviets - Actor225: fenc - Location: 84,49 - Owner: Soviets - Actor597: t16 - Location: 82,67 - Owner: Neutral - Actor596: tc01 - Location: 83,65 - Owner: Neutral - Actor559: tc02 - Location: 84,66 - Owner: Neutral - Actor418: tc04 - Location: 81,68 - Owner: Neutral - Actor32: tc05 - Location: 83,67 - Owner: Neutral - Actor496: 3tnk - Location: 86,20 - Owner: Soviets - Actor646: fenc - Location: 84,70 - Owner: Soviets - Actor649: fenc - Location: 86,70 - Owner: Soviets - Actor648: fenc - Location: 85,70 - Owner: Soviets - Actor100: e1 - Location: 87,61 - Owner: Soviets - Actor339: e1 - Location: 80,59 - Owner: Soviets - Actor589: dog - Location: 80,57 - Owner: Soviets - Actor340: e1 - Location: 77,58 - Owner: Soviets - Actor55: wood - Location: 79,94 - Owner: Neutral - Actor168: wood - Location: 79,95 - Owner: Neutral - Actor172: wood - Location: 79,96 - Owner: Neutral - Actor324: t05 - Location: 64,63 - Owner: Neutral - Actor265: tsla - Location: 61,64 - Owner: Soviets - Actor257: proc - Location: 35,28 - Owner: Soviets - Actor325: t12 - Location: 48,52 - Owner: Neutral - Actor661: tc03 - Location: 54,16 - Owner: Neutral - Actor326: t17 - Location: 34,50 - Owner: Neutral - Actor667: tc04 - Location: 88,106 - Owner: Neutral - Actor668: t16 - Location: 80,106 - Owner: Neutral - Actor670: fenc - Location: 95,78 - Owner: Soviets - Actor671: fenc - Location: 94,78 - Owner: Soviets - Actor672: fenc - Location: 93,78 - Owner: Soviets - Actor69: e1 - Location: 90,102 - Owner: Soviets - Actor68: e2 - Location: 92,102 - Owner: Soviets - Actor63: e1 - Location: 92,104 - Owner: Soviets - Actor673: wood - Location: 82,97 - Owner: Neutral - Actor674: wood - Location: 81,97 - Owner: Neutral - Actor176: tsla - Location: 56,36 - Owner: Soviets - Actor681: wood - Location: 70,100 - Owner: Neutral - Actor680: wood - Location: 69,100 - Owner: Neutral - Actor308: apwr - Location: 54,62 - Owner: Soviets - Actor262: t06 - Location: 20,51 - Owner: Neutral - Actor676: wood - Location: 79,97 - Owner: Neutral - Actor185: ftur - Location: 42,62 - Owner: Soviets - Actor675: wood - Location: 80,97 - Owner: Neutral - Actor686: brl3 - Location: 82,73 - Owner: Soviets - TownPoint: waypoint - Location: 70,89 - Owner: Neutral - Actor688: e1 - Location: 70,86 - Owner: Neutral - Actor689: e1 - Location: 69,84 - Owner: Neutral - Actor687: e1 - Location: 82,77 - Owner: Soviets - Actor690: e1 - Location: 85,76 - Owner: Soviets - Actor692: e1 - Location: 89,79 - Owner: Soviets - Actor695: e1 - Location: 84,79 - Owner: Soviets - Actor697: e1 - Location: 89,80 - Owner: Soviets - Actor699: e2 - Location: 86,77 - Owner: Soviets - Actor148: proc - Location: 40,36 - Owner: Soviets - Actor701: e1 - Location: 69,110 - Owner: Soviets - Actor702: e1 - Location: 74,109 - Owner: Soviets - Actor704: e1 - Location: 73,110 - Owner: Soviets - Actor705: e1 - Location: 71,109 - Owner: Soviets - Actor694: dog - Location: 87,79 - Owner: Soviets - Actor712: e1 - Location: 71,86 - Owner: Neutral - Actor713: e1 - Location: 68,91 - Owner: Neutral - Actor593: e1 - Location: 73,85 - Owner: Neutral - Actor707: v18 - Location: 68,97 - Owner: Neutral - Actor716: e3 - Location: 66,89 - Owner: Neutral - Actor717: e3 - Location: 66,87 - Owner: Neutral - Actor718: e3 - Location: 64,88 - Owner: Neutral - Actor612: t07 - Location: 80,67 - Owner: Neutral - Actor601: t11 - Location: 74,72 - Owner: Neutral - Actor627: t01 - Location: 84,59 - Owner: Neutral - Actor131: sbag - Location: 92,49 - Owner: Soviets - Actor639: 3tnk - Location: 84,77 - Owner: Soviets - SovietBarracks: barr - Location: 39,49 - Owner: Soviets - Actor264: t10 - Location: 17,45 - Owner: Neutral - Actor177: hpad - Location: 45,44 - Owner: Soviets - Actor179: tsla - Location: 25,52 - Owner: Soviets - Actor180: ftur - Location: 32,25 - Owner: Soviets - Actor700: tsla - Location: 55,17 - Owner: Soviets - Actor183: ftur - Location: 22,40 - Owner: Soviets - Actor708: v17 - Location: 69,97 - Owner: Neutral - Actor101: dog - Location: 98,74 - Owner: Soviets - Actor715: e2 - Location: 75,34 - Owner: Soviets - Actor0: silo - Location: 94,72 - Owner: Soviets - Actor602: fenc - Location: 99,80 - Owner: Soviets - Actor346: fenc - Location: 100,80 - Owner: Soviets - Actor166: fenc - Location: 101,80 - Owner: Soviets - Actor54: ftur - Location: 97,77 - Owner: Soviets - Actor725: fenc - Location: 75,74 - Owner: Soviets - Actor724: fenc - Location: 76,74 - Owner: Soviets - Actor726: fenc - Location: 74,74 - Owner: Soviets - Actor727: fenc - Location: 73,74 - Owner: Soviets - Actor728: fenc - Location: 72,74 - Owner: Soviets - Actor729: fenc - Location: 72,73 - Owner: Soviets - Actor730: fenc - Location: 72,72 - Owner: Soviets - Actor40: tran.husk1 - Location: 69,87 - Owner: Allies1 - Actor333: brl3 - Location: 21,73 - Owner: Neutral - Actor145: mine - Location: 44,29 - Owner: Neutral - Actor270: e1 - Location: 31,87 - Owner: Soviets - Actor573: 2tnk - Location: 34,92 - Owner: Allies - Facing: 0 - Actor577: tc02 - Location: 81,87 - Owner: Neutral - Actor329: e1 - Location: 41,87 - Owner: Soviets - Actor574: 2tnk - Location: 35,92 - Owner: Allies - Facing: 0 - Actor578: v11 - Location: 64,84 - Owner: Neutral - Actor546: 1tnk - Location: 38,90 - Owner: Allies - Facing: 0 - BadgerDropPoint2: waypoint - Location: 34,106 - Owner: Neutral - BadgerDropPoint3: waypoint - Location: 26,100 - Owner: Neutral - TanksEntryPoint: waypoint - Location: 16,86 - Owner: Neutral - Actor342: e1 - Location: 99,38 - Owner: Soviets - Actor286: e1 - Location: 104,67 - Owner: Soviets - Actor755: e1 - Location: 107,70 - Owner: Soviets - Actor756: e2 - Location: 107,67 - Owner: Soviets - Actor161: proc - Location: 108,69 - Owner: Soviets - Actor285: powr - Location: 102,68 - Owner: Soviets - Actor309: apwr - Location: 51,64 - Owner: Soviets - Actor316: fact - Location: 59,61 - Owner: Soviets - YakAttackPoint: waypoint - Location: 78,62 - Owner: Neutral - YakEntryPoint: waypoint - Location: 99,10 - Owner: Neutral - Actor323: t06 - Location: 29,43 - Owner: Neutral - BadgerEntryPoint2: waypoint - Location: 119,77 - Owner: Neutral - ParabombPoint1: waypoint - Location: 39,105 - Owner: Neutral - ParabombPoint2: waypoint - Location: 39,108 - Owner: Neutral - Actor722: t14 - Location: 67,52 - Owner: Neutral - Actor763: tsla - Location: 79,24 - Owner: Soviets - Actor764: e1 - Location: 95,59 - Owner: Soviets - Actor765: e1 - Location: 98,56 - Owner: Soviets - Actor207: fenc - Location: 61,39 - Owner: Soviets - Actor767: dog - Location: 95,57 - Owner: Soviets - Actor766: e1 - Location: 93,56 - Owner: Soviets - Actor205: fenc - Location: 60,39 - Owner: Soviets - Actor187: afld - Location: 35,37 - Owner: Soviets - Actor213: v2rl - Location: 52,44 - Owner: Soviets - Actor272: t16 - Location: 26,30 - Owner: Neutral - Actor214: fenc - Location: 62,41 - Owner: Soviets - Actor233: tc01 - Location: 29,53 - Owner: Neutral - Actor212: fenc - Location: 61,41 - Owner: Soviets - Actor776: e1 - Location: 74,69 - Owner: Soviets - Actor230: tc03 - Location: 16,55 - Owner: Neutral - Actor167: fix - Location: 57,50 - Owner: Soviets - Actor802: t06 - Location: 22,64 - Owner: Neutral - Actor165: mine - Location: 40,24 - Owner: Neutral - Actor322: tsla - Location: 48,64 - Owner: Soviets - Actor255: gun - Location: 42,91 - Owner: Allies - Actor268: e1 - Location: 33,90 - Owner: Allies - Actor269: e1 - Location: 34,90 - Owner: Allies - Actor267: pbox.e1 - Location: 30,90 - Owner: Allies - Actor882: barl - Location: 46,81 - Owner: Neutral - Actor202: kenn - Location: 45,49 - Owner: Soviets - Actor184: fenc - Location: 59,39 - Owner: Soviets - Actor256: fenc - Location: 64,42 - Owner: Soviets - Actor240: silo - Location: 38,34 - Owner: Soviets - Actor173: ftur - Location: 66,44 - Owner: Soviets - Actor305: ftur - Location: 46,21 - Owner: Soviets - SovietWarFactory: weap - Location: 51,47 - Owner: Soviets - Actor261: tc01 - Location: 42,77 - Owner: Neutral - Actor778: t05 - Location: 48,78 - Owner: Neutral - Actor831: t15 - Location: 47,82 - Owner: Neutral - Actor865: t08 - Location: 24,110 - Owner: Neutral - Actor864: t01 - Location: 33,109 - Owner: Neutral - Actor862: t07 - Location: 41,71 - Owner: Neutral - Actor867: t01 - Location: 16,68 - Owner: Neutral - Actor883: barl - Location: 44,79 - Owner: Neutral - Actor905: v01 - Location: 20,74 - Owner: Neutral - Actor209: fenc - Location: 61,40 - Owner: Soviets - Actor276: fenc - Location: 65,44 - Owner: Soviets - Actor197: tsla - Location: 55,44 - Owner: Soviets - Actor277: fenc - Location: 57,39 - Owner: Soviets - Actor288: apwr - Location: 51,61 - Owner: Soviets - Actor278: fenc - Location: 56,39 - Owner: Soviets - Actor274: fenc - Location: 64,43 - Owner: Soviets - Actor252: fenc - Location: 64,41 - Owner: Soviets - Actor906: v03 - Location: 16,72 - Owner: Neutral - Actor175: fenc - Location: 58,39 - Owner: Soviets - Actor271: v2rl - Location: 29,33 - Owner: Soviets - Facing: 0 - Actor186: afld - Location: 53,40 - Owner: Soviets - Actor238: silo - Location: 39,34 - Owner: Soviets - Actor241: silo - Location: 38,33 - Owner: Soviets - Actor178: e3 - Location: 37,43 - Owner: Soviets - Actor190: e3 - Location: 35,35 - Owner: Soviets - Actor191: e3 - Location: 38,52 - Owner: Soviets - Actor337: e3 - Location: 37,53 - Owner: Soviets - Actor338: e3 - Location: 45,58 - Owner: Soviets - Actor341: e3 - Location: 54,50 - Owner: Soviets - Actor343: e3 - Location: 66,49 - Owner: Soviets - Actor344: e3 - Location: 62,60 - Owner: Soviets - Actor345: e2 - Location: 42,51 - Owner: Soviets - Actor349: e2 - Location: 55,55 - Owner: Soviets - Actor350: e2 - Location: 43,35 - Owner: Soviets - Actor351: dog - Location: 43,55 - Owner: Soviets - Actor352: dog - Location: 45,60 - Owner: Soviets - Actor353: dog - Location: 41,42 - Owner: Soviets - Actor354: dog - Location: 57,46 - Owner: Soviets - Actor355: dog - Location: 40,31 - Owner: Soviets - Actor357: 3tnk - Location: 43,59 - Owner: Soviets - Facing: 90 - Actor358: 3tnk - Location: 38,55 - Owner: Soviets - Facing: 110 - Actor359: v2rl - Location: 44,53 - Owner: Soviets - Actor282: tent - Location: 40,94 - Owner: Allies - Actor290: pbox.e1 - Location: 39,92 - Owner: Allies - AlliedBaseBottomRight: waypoint - Location: 51,111 - Owner: Neutral - AlliedBaseTopLeft: waypoint - Location: 16,84 - Owner: Neutral - Actor1000: camera.large - Location: 1,1 - Owner: Soviets - -Smudges: - -Rules: - Player: - -ConquestVictoryConditions: - World: - -CrateSpawner: - -SpawnMPUnits: - -MPStartLocations: - Allies02Script: - MissionObjectivesPanel: - ObjectivesPanel: MISSION_OBJECTIVES - TRAN.Husk1: - Burns: - Damage: 0 - TRAN.Husk2: - Burns: - Damage: 0 - E7: - AutoTarget: - InitialStance: Defend - Passenger: - Weight: 0 - Buildable: - Owner: None - EINSTEIN: - Passenger: - Weight: 0 - V01: - ContainsCrate: - TRAN: - -Selectable: - Buildable: - Owner: None - RevealsShroud: - Range: 0c0 - TENT: - ProvidesCustomPrerequisite: - Prerequisite: barracks - BARR: - ProvidesCustomPrerequisite: - Prerequisite: barracks - Buildable: - Owner: None - MEDI: - Buildable: - Prerequisites: barracks - SPY: - Buildable: - Prerequisites: barracks, dome - MIG: - Buildable: - Owner: None - YAK: - Buildable: - Owner: None - HELI: - Buildable: - Owner: None - HIND: - Buildable: - Owner: None - SS: - Buildable: - Owner: None - MSUB: - Buildable: - Owner: None - DD: - Buildable: - Owner: None - CA: - Buildable: - Owner: None - PT: - Buildable: - Owner: None - MSLO: - Buildable: - Owner: None - GAP: - Buildable: - Owner: None - SPEN: - Buildable: - Owner: None - SYRD: - Buildable: - Owner: None - IRON: - Buildable: - Owner: None - PDOX: - Buildable: - Owner: None - TSLA: - Buildable: - Owner: None - AGUN: - Buildable: - Owner: None - FTUR: - Buildable: - Owner: None - SAM: - Buildable: - Owner: None - ATEK: - Buildable: - Owner: None - HPAD: - Buildable: - Owner: None - AFLD: - Buildable: - Owner: None - STEK: - Buildable: - Owner: None - 4TNK: - Buildable: - Owner: None - MCV: - Buildable: - Owner: None - ARTY: - Buildable: - Owner: None - APC: - Buildable: - Owner: None - MNLY.AP: - Buildable: - Owner: None - MNLY.AT: - Buildable: - Owner: None - TRUK: - Buildable: - Owner: None - TTNK: - Buildable: - Owner: None - FTRK: - Buildable: - Owner: None - CTNK: - Buildable: - Owner: None - MGG: - Buildable: - Owner: None - MRJ: - Buildable: - Owner: None - CRATE: - GiveCashCrateAction: - SelectionShares: 0 - LevelUpCrateAction: - SelectionShares: 0 - ExplodeCrateAction@fire: - SelectionShares: 0 - ExplodeCrateAction@boom: - SelectionShares: 0 - ExplodeCrateAction@nuke: - SelectionShares: 0 - HideMapCrateAction: - SelectionShares: 0 - HealUnitsCrateAction: - SelectionShares: 10000 - RevealMapCrateAction: - SelectionShares: 0 - SupportPowerCrateAction@parabombs: - SelectionShares: 0 - GiveMcvCrateAction: - SelectionShares: 0 - GiveUnitCrateAction@jeep: - SelectionShares: 0 - GiveUnitCrateAction@arty: - SelectionShares: 0 - GiveUnitCrateAction@v2rl: - SelectionShares: 0 - GiveUnitCrateAction@1tnk: - SelectionShares: 0 - GiveUnitCrateAction@2tnk: - SelectionShares: 0 - GiveUnitCrateAction@3tnk: - SelectionShares: 0 - GiveUnitCrateAction@4tnk: - SelectionShares: 0 - CAMERA.Large: - Inherits: CAMERA - RevealsShroud: - Range: 1000c0 - -Sequences: - -VoxelSequences: - -Weapons: - -Voices: - -Notifications: - -Translations: diff --git a/mods/ra/maps/allies-03/map.bin b/mods/ra/maps/allies-03/map.bin deleted file mode 100644 index 89ef1b5ec884b467ff073f2d671d5ab4c3ad2ca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92165 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 UED9_NED9_NED9_NTxJFSFBcRNx&QzG diff --git a/mods/ra/maps/allies-03/map.yaml b/mods/ra/maps/allies-03/map.yaml deleted file mode 100644 index 41f5342ce3..0000000000 --- a/mods/ra/maps/allies-03/map.yaml +++ /dev/null @@ -1,1580 +0,0 @@ -Selectable: True - -MapFormat: 6 - -RequiresMod: ra - -Title: Allies 03 - -Description: Allies' third mission - -Author: Scott_NZ - -Tileset: SNOW - -MapSize: 192,96 - -Bounds: 16,16,160,64 - -UseAsShellmap: False - -Type: Campaign - -Options: - Crates: False - Fog: True - Shroud: True - AllyBuildRadius: False - FragileAlliances: False - StartingCash: 5000 - ConfigurableStartingUnits: False - Difficulties: Easy,Normal,Hard - -Players: - PlayerReference@Neutral: - Name: Neutral - OwnsWorld: True - NonCombatant: True - Race: allies - PlayerReference@Allies1: - Name: Allies1 - Playable: True - AllowBots: False - Required: True - LockRace: True - Race: allies - LockColor: True - ColorRamp: 161,134,200 - LockSpawn: True - LockTeam: True - Allies: Allies2,Allies - Enemies: Soviets - PlayerReference@Allies2: - Name: Allies2 - Playable: True - AllowBots: False - LockRace: True - Race: allies - LockColor: True - ColorRamp: 76,196,190 - LockSpawn: True - LockTeam: True - Allies: Allies1,Allies - Enemies: Soviets - PlayerReference@Allies: - Name: Allies - Race: allies - ColorRamp: 115,115,143 - Allies: Allies1,Allies2 - Enemies: Soviets - PlayerReference@Soviets: - Name: Soviets - Race: soviet - ColorRamp: 3,255,127 - Enemies: Allies1,Allies2,Allies - -Actors: - Actor239: dog - Location: 169,60 - Owner: Soviets - Actor12: t08 - Location: 163,57 - Owner: Neutral - Actor14: t14 - Location: 148,59 - Owner: Neutral - Actor25: t07 - Location: 142,77 - Owner: Neutral - Actor29: t07 - Location: 165,78 - Owner: Neutral - Actor21: mine - Location: 169,71 - Owner: Neutral - Actor23: t08 - Location: 124,40 - Owner: Neutral - Actor10: tc04 - Location: 43,67 - Owner: Neutral - Actor28: t02 - Location: 151,51 - Owner: Neutral - Actor34: t17 - Location: 148,52 - Owner: Neutral - Actor36: tc04 - Location: 172,46 - Owner: Neutral - Actor37: t02 - Location: 169,46 - Owner: Neutral - Actor39: t02 - Location: 148,45 - Owner: Neutral - Actor42: t10 - Location: 151,47 - Owner: Neutral - Actor9: tc04 - Location: 33,41 - Owner: Neutral - Actor52: t05 - Location: 163,47 - Owner: Neutral - Actor53: tc03 - Location: 138,53 - Owner: Neutral - SovietAirfield5: afld - Location: 62,47 - Owner: Soviets - Actor57: tc04 - Location: 43,19 - Owner: Neutral - Actor58: tc04 - Location: 56,18 - Owner: Neutral - Actor59: tc04 - Location: 69,28 - Owner: Neutral - Actor60: tc05 - Location: 63,19 - Owner: Neutral - Actor61: tc05 - Location: 48,19 - Owner: Neutral - Actor62: tc05 - Location: 37,18 - Owner: Neutral - Actor63: tc05 - Location: 78,14 - Owner: Neutral - Actor64: tc03 - Location: 70,19 - Owner: Neutral - Actor65: tc03 - Location: 55,26 - Owner: Neutral - Actor66: tc03 - Location: 45,24 - Owner: Neutral - Actor67: tc03 - Location: 38,23 - Owner: Neutral - Actor68: tc02 - Location: 39,21 - Owner: Neutral - Actor69: tc02 - Location: 42,16 - Owner: Neutral - Actor70: tc02 - Location: 50,16 - Owner: Neutral - Actor71: tc02 - Location: 51,22 - Owner: Neutral - Actor72: tc02 - Location: 64,29 - Owner: Neutral - Actor73: tc02 - Location: 67,24 - Owner: Neutral - Actor74: tc02 - Location: 74,17 - Owner: Neutral - Actor75: tc01 - Location: 61,16 - Owner: Neutral - Actor76: tc01 - Location: 57,22 - Owner: Neutral - Actor77: tc01 - Location: 48,23 - Owner: Neutral - Actor78: tc01 - Location: 38,26 - Owner: Neutral - Actor79: t05 - Location: 38,20 - Owner: Neutral - Actor80: t05 - Location: 42,17 - Owner: Neutral - Actor81: t05 - Location: 47,20 - Owner: Neutral - Actor82: t05 - Location: 53,25 - Owner: Neutral - Actor83: t05 - Location: 57,16 - Owner: Neutral - Actor84: t05 - Location: 56,22 - Owner: Neutral - Actor85: t05 - Location: 64,27 - Owner: Neutral - Actor86: t05 - Location: 70,22 - Owner: Neutral - Actor87: t05 - Location: 68,15 - Owner: Neutral - Actor88: t05 - Location: 81,18 - Owner: Neutral - Actor89: t16 - Location: 79,18 - Owner: Neutral - Actor90: t16 - Location: 68,16 - Owner: Neutral - Actor91: t16 - Location: 67,22 - Owner: Neutral - Actor92: t16 - Location: 53,16 - Owner: Neutral - Actor93: t16 - Location: 51,23 - Owner: Neutral - Actor94: t16 - Location: 47,16 - Owner: Neutral - Actor95: t16 - Location: 42,27 - Owner: Neutral - Actor96: t16 - Location: 38,16 - Owner: Neutral - Actor97: t16 - Location: 34,20 - Owner: Neutral - Actor98: t02 - Location: 54,19 - Owner: Neutral - Actor99: t02 - Location: 64,24 - Owner: Neutral - Actor100: t02 - Location: 48,26 - Owner: Neutral - Actor101: t02 - Location: 42,18 - Owner: Neutral - Actor102: t02 - Location: 37,16 - Owner: Neutral - Actor103: t06 - Location: 42,24 - Owner: Neutral - Actor104: t06 - Location: 45,21 - Owner: Neutral - Actor105: t06 - Location: 58,16 - Owner: Neutral - Actor106: t06 - Location: 59,28 - Owner: Neutral - Actor107: t06 - Location: 63,24 - Owner: Neutral - Actor108: t06 - Location: 67,29 - Owner: Neutral - Actor109: t10 - Location: 66,17 - Owner: Neutral - Actor110: t10 - Location: 65,28 - Owner: Neutral - Actor111: t10 - Location: 54,22 - Owner: Neutral - Actor112: t11 - Location: 40,23 - Owner: Neutral - Actor113: t11 - Location: 52,26 - Owner: Neutral - Actor114: t11 - Location: 69,20 - Owner: Neutral - Actor115: t12 - Location: 68,30 - Owner: Neutral - Actor116: t12 - Location: 60,20 - Owner: Neutral - Actor117: t17 - Location: 44,17 - Owner: Neutral - Actor118: t17 - Location: 36,19 - Owner: Neutral - Actor119: t08 - Location: 52,20 - Owner: Neutral - Actor120: t08 - Location: 70,27 - Owner: Neutral - Actor121: t08 - Location: 48,16 - Owner: Neutral - Actor123: tc03 - Location: 17,25 - Owner: Neutral - Exit1BottomRight: waypoint - Location: 25,50 - Owner: Neutral - Exit1BottomLeft: waypoint - Location: 16,50 - Owner: Neutral - SovietAirfield4: afld - Location: 151,67 - Owner: Soviets - Actor127: t05 - Location: 17,21 - Owner: Neutral - Exit1TopLeft: waypoint - Location: 16,44 - Owner: Neutral - Actor48: fenc - Location: 29,27 - Owner: Allies - Actor130: t02 - Location: 28,16 - Owner: Neutral - Actor131: t06 - Location: 48,32 - Owner: Neutral - Actor132: t02 - Location: 30,35 - Owner: Neutral - Actor133: t03 - Location: 28,34 - Owner: Neutral - Actor134: t17 - Location: 55,31 - Owner: Neutral - Actor135: t03 - Location: 60,37 - Owner: Neutral - Actor136: t11 - Location: 64,38 - Owner: Neutral - Actor137: t10 - Location: 65,33 - Owner: Neutral - Actor140: tc05 - Location: 163,42 - Owner: Neutral - Actor51: t01 - Location: 48,62 - Owner: Neutral - Actor142: t05 - Location: 175,43 - Owner: Neutral - Actor143: t02 - Location: 173,41 - Owner: Neutral - Actor20: mine - Location: 158,26 - Owner: Neutral - Actor147: t10 - Location: 139,41 - Owner: Neutral - Actor148: t13 - Location: 129,40 - Owner: Neutral - Actor149: t17 - Location: 134,47 - Owner: Neutral - Actor156: t05 - Location: 139,44 - Owner: Neutral - Actor150: t05 - Location: 146,37 - Owner: Neutral - Actor162: t06 - Location: 126,37 - Owner: Neutral - Actor178: t16 - Location: 137,77 - Owner: Neutral - Actor370: tc02 - Location: 25,65 - Owner: Neutral - Actor165: tc03 - Location: 157,77 - Owner: Neutral - Actor181: t13 - Location: 137,71 - Owner: Neutral - Actor182: t16 - Location: 135,57 - Owner: Neutral - Actor184: tc01 - Location: 124,38 - Owner: Neutral - Actor363: t12 - Location: 81,50 - Owner: Neutral - Actor345: t08 - Location: 90,23 - Owner: Neutral - Actor364: t12 - Location: 83,27 - Owner: Neutral - Actor346: t08 - Location: 107,28 - Owner: Neutral - Actor153: apwr - Location: 55,43 - Owner: Soviets - Actor298: t06 - Location: 72,50 - Owner: Neutral - Actor30: t01 - Location: 173,61 - Owner: Neutral - Actor224: ftur - Location: 66,60 - Owner: Soviets - Actor203: t16 - Location: 54,41 - Owner: Neutral - Actor338: tc04 - Location: 28,76 - Owner: Neutral - Actor1: tc02 - Location: 95,73 - Owner: Neutral - Actor333: t07 - Location: 133,36 - Owner: Neutral - Actor238: t01 - Location: 111,60 - Owner: Neutral - Actor283: t05 - Location: 102,59 - Owner: Neutral - SovietAirfield6: afld - Location: 62,53 - Owner: Soviets - Actor284: t05 - Location: 82,70 - Owner: Neutral - Actor369: tc02 - Location: 30,60 - Owner: Neutral - Actor289: t05 - Location: 71,33 - Owner: Neutral - Actor157: tc05 - Location: 23,39 - Owner: Neutral - Actor226: tc01 - Location: 98,24 - Owner: Neutral - Actor194: tc05 - Location: 103,62 - Owner: Neutral - Actor371: tc02 - Location: 37,77 - Owner: Neutral - Actor367: tc03 - Location: 35,71 - Owner: Neutral - Actor236: ftur - Location: 62,61 - Owner: Soviets - Actor302: t06 - Location: 71,73 - Owner: Neutral - Actor329: t07 - Location: 97,28 - Owner: Neutral - Actor331: t07 - Location: 124,48 - Owner: Neutral - Actor296: t05 - Location: 63,63 - Owner: Neutral - Actor155: tc04 - Location: 18,37 - Owner: Neutral - Actor279: t03 - Location: 72,32 - Owner: Neutral - Actor274: t03 - Location: 71,78 - Owner: Neutral - Actor280: t03 - Location: 121,19 - Owner: Neutral - Actor315: t06 - Location: 88,17 - Owner: Neutral - Actor312: t06 - Location: 110,24 - Owner: Neutral - Actor314: t06 - Location: 125,20 - Owner: Neutral - Actor307: t06 - Location: 119,50 - Owner: Neutral - Actor310: t06 - Location: 80,41 - Owner: Neutral - Actor323: t07 - Location: 113,76 - Owner: Neutral - Actor322: t07 - Location: 112,65 - Owner: Neutral - Actor246: t06 - Location: 94,64 - Owner: Neutral - Actor303: t06 - Location: 101,69 - Owner: Neutral - Actor234: t01 - Location: 79,77 - Owner: Neutral - Actor354: t11 - Location: 73,71 - Owner: Neutral - Actor212: barr - Location: 69,57 - Owner: Soviets - Actor365: tc04 - Location: 18,56 - Owner: Neutral - Actor196: t06 - Location: 129,52 - Owner: Neutral - Actor356: t11 - Location: 119,43 - Owner: Neutral - Actor360: t11 - Location: 122,76 - Owner: Neutral - Actor187: tc04 - Location: 99,27 - Owner: Neutral - Actor186: tc04 - Location: 79,34 - Owner: Neutral - Actor179: tc05 - Location: 59,43 - Owner: Neutral - Actor350: t10 - Location: 87,22 - Owner: Neutral - Actor17: proc - Location: 168,62 - Owner: Soviets - Actor291: t05 - Location: 91,33 - Owner: Neutral - Actor254: t02 - Location: 72,63 - Owner: Neutral - Actor43: t05 - Location: 58,62 - Owner: Neutral - Actor257: t02 - Location: 119,53 - Owner: Neutral - Actor8: e1 - Location: 26,46 - Owner: Allies - Actor264: t02 - Location: 127,17 - Owner: Neutral - Actor269: t03 - Location: 84,37 - Owner: Neutral - Actor271: t03 - Location: 79,57 - Owner: Neutral - SovietEntryPoint4: waypoint - Location: 115,16 - Owner: Neutral - Actor278: t03 - Location: 122,33 - Owner: Neutral - Actor221: tc01 - Location: 113,73 - Owner: Neutral - Actor215: t05 - Location: 72,40 - Owner: Neutral - Actor267: t02 - Location: 123,62 - Owner: Neutral - Actor253: t02 - Location: 118,77 - Owner: Neutral - Actor220: tc01 - Location: 117,40 - Owner: Neutral - Actor158: tc01 - Location: 23,35 - Owner: Neutral - Actor160: t06 - Location: 21,40 - Owner: Neutral - Actor164: t16 - Location: 18,41 - Owner: Neutral - Actor163: t05 - Location: 20,35 - Owner: Neutral - Actor211: tc02 - Location: 75,74 - Owner: Neutral - Actor174: apwr - Location: 58,45 - Owner: Soviets - Actor214: tc02 - Location: 79,47 - Owner: Neutral - Actor38: t15 - Location: 30,52 - Owner: Neutral - Actor407: t13 - Location: 32,62 - Owner: Neutral - Actor139: t01 - Location: 111,35 - Owner: Neutral - Actor410: t15 - Location: 17,55 - Owner: Neutral - Actor141: t14 - Location: 36,56 - Owner: Neutral - Actor386: t07 - Location: 30,62 - Owner: Neutral - Actor2: tc05 - Location: 153,77 - Owner: Neutral - Actor54: t01 - Location: 56,76 - Owner: Neutral - Actor391: t06 - Location: 25,75 - Owner: Neutral - Actor403: t01 - Location: 34,74 - Owner: Neutral - Actor402: t02 - Location: 21,65 - Owner: Neutral - Actor175: tc01 - Location: 62,44 - Owner: Neutral - Actor375: tc01 - Location: 20,61 - Owner: Neutral - Actor712: t07 - Location: 170,34 - Owner: Neutral - Actor0: mine - Location: 160,27 - Owner: Neutral - Actor385: t07 - Location: 17,58 - Owner: Neutral - Actor401: t02 - Location: 30,74 - Owner: Neutral - Actor400: t05 - Location: 32,69 - Owner: Neutral - Actor382: t16 - Location: 27,60 - Owner: Neutral - Actor374: tc01 - Location: 34,68 - Owner: Neutral - Actor376: tc01 - Location: 16,65 - Owner: Neutral - Actor409: t15 - Location: 24,67 - Owner: Neutral - Actor405: t03 - Location: 24,58 - Owner: Neutral - Actor373: tc01 - Location: 25,68 - Owner: Neutral - Actor406: t13 - Location: 35,72 - Owner: Neutral - Actor55: t01 - Location: 37,37 - Owner: Neutral - Actor760: t03 - Location: 175,27 - Owner: Neutral - Actor399: t05 - Location: 22,68 - Owner: Neutral - Actor408: t14 - Location: 20,59 - Owner: Neutral - Actor390: t07 - Location: 18,72 - Owner: Neutral - Actor767: t10 - Location: 158,15 - Owner: Neutral - Actor381: t16 - Location: 23,65 - Owner: Neutral - Actor775: t02 - Location: 171,15 - Owner: Neutral - Actor392: t06 - Location: 31,70 - Owner: Neutral - Actor366: tc03 - Location: 17,68 - Owner: Neutral - Actor368: tc03 - Location: 25,56 - Owner: Neutral - Actor780: t03 - Location: 79,39 - Owner: Neutral - Actor398: t05 - Location: 32,64 - Owner: Neutral - Actor796: t02 - Location: 154,40 - Owner: Neutral - SovietAirfield3: afld - Location: 154,67 - Owner: Soviets - Actor383: t16 - Location: 22,52 - Owner: Neutral - Actor372: tc02 - Location: 20,77 - Owner: Neutral - Exit1TopRight: waypoint - Location: 25,44 - Owner: Neutral - SovietEntryPoint5: waypoint - Location: 130,79 - Owner: Neutral - Actor804: t13 - Location: 125,68 - Owner: Neutral - SovietAirfield8: afld - Location: 62,51 - Owner: Soviets - Actor268: t03 - Location: 95,23 - Owner: Neutral - Actor812: tc03 - Location: 133,25 - Owner: Neutral - Actor818: t16 - Location: 138,15 - Owner: Neutral - Actor819: t16 - Location: 139,29 - Owner: Neutral - Actor820: t02 - Location: 147,16 - Owner: Neutral - Actor396: t05 - Location: 27,70 - Owner: Neutral - Actor387: t07 - Location: 22,63 - Owner: Neutral - Actor393: t06 - Location: 25,61 - Owner: Neutral - Actor32: t05 - Location: 42,40 - Owner: Neutral - Actor378: t16 - Location: 26,73 - Owner: Neutral - Actor31: t05 - Location: 53,51 - Owner: Neutral - Actor395: t06 - Location: 35,78 - Owner: Neutral - Actor826: t01 - Location: 136,15 - Owner: Neutral - Actor827: t01 - Location: 142,24 - Owner: Neutral - Actor829: t03 - Location: 146,15 - Owner: Neutral - Actor379: t16 - Location: 37,74 - Owner: Neutral - Actor411: t15 - Location: 31,77 - Owner: Neutral - Actor397: t05 - Location: 21,58 - Owner: Neutral - Actor394: t06 - Location: 18,52 - Owner: Neutral - Actor13: tc02 - Location: 38,61 - Owner: Neutral - Actor27: t05 - Location: 41,55 - Owner: Neutral - Actor377: t16 - Location: 16,78 - Owner: Neutral - Actor380: t16 - Location: 31,66 - Owner: Neutral - Actor845: t14 - Location: 136,21 - Owner: Neutral - Actor16: tc02 - Location: 52,39 - Owner: Neutral - Actor404: t03 - Location: 24,71 - Owner: Neutral - Actor389: t07 - Location: 25,71 - Owner: Neutral - Actor388: t07 - Location: 37,68 - Owner: Neutral - Actor412: t15 - Location: 28,73 - Owner: Neutral - Actor384: t07 - Location: 22,67 - Owner: Neutral - Actor26: t05 - Location: 45,72 - Owner: Neutral - Actor856: t16 - Location: 133,23 - Owner: Neutral - Actor15: tc04 - Location: 144,73 - Owner: Neutral - Actor861: t16 - Location: 128,62 - Owner: Neutral - Exit1ExitPoint: waypoint - Location: 16,47 - Owner: Neutral - Actor7: e1 - Location: 27,50 - Owner: Allies - Actor5: gun - Location: 28,51 - Owner: Allies - Actor6: gun - Location: 28,44 - Owner: Allies - Actor47: powr - Location: 3,37 - Owner: Allies - Actor45: 2tnk - Location: 28,28 - Owner: Allies - Actor35: gun - Location: 29,29 - Owner: Allies - Actor24: gun - Location: 25,30 - Owner: Allies - Actor41: e1 - Location: 30,28 - Owner: Allies - Actor4: jeep - Location: 27,45 - Owner: Allies - Actor40: e1 - Location: 24,30 - Owner: Allies - Actor46: powr - Location: 1,37 - Owner: Allies - Actor49: fenc - Location: 28,27 - Owner: Allies - Actor50: fenc - Location: 27,27 - Owner: Allies - Actor122: fenc - Location: 30,27 - Owner: Allies - Actor124: fenc - Location: 31,27 - Owner: Allies - Actor125: fenc - Location: 32,27 - Owner: Allies - Actor126: fenc - Location: 32,25 - Owner: Allies - Actor128: fenc - Location: 32,26 - Owner: Allies - Actor129: fenc - Location: 33,25 - Owner: Allies - Actor145: fenc - Location: 34,25 - Owner: Allies - Actor146: fenc - Location: 35,25 - Owner: Allies - Allies1MovePoint: waypoint - Location: 149,24 - Owner: Neutral - Allies1EntryPoint: waypoint - Location: 149,16 - Owner: Neutral - Allies2EntryPoint: waypoint - Location: 175,38 - Owner: Neutral - Exit2TopRight: waypoint - Location: 35,16 - Owner: Neutral - Exit2BottomLeft: waypoint - Location: 16,30 - Owner: Neutral - Exit2BottomRight: waypoint - Location: 35,30 - Owner: Neutral - Exit2TopLeft: waypoint - Location: 16,16 - Owner: Neutral - Exit2ExitPoint: waypoint - Location: 16,29 - Owner: Neutral - Actor255: ftur - Location: 68,45 - Owner: Soviets - SovietEntryPoint3: waypoint - Location: 105,79 - Owner: Neutral - SovietEntryPoint2: waypoint - Location: 93,16 - Owner: Neutral - SovietEntryPoint1: waypoint - Location: 89,79 - Owner: Neutral - SovietRallyPoint2: waypoint - Location: 93,20 - Owner: Neutral - SovietRallyPoint1: waypoint - Location: 89,75 - Owner: Neutral - SovietRallyPoint3: waypoint - Location: 105,75 - Owner: Neutral - SovietRallyPoint4: waypoint - Location: 115,20 - Owner: Neutral - SovietRallyPoint5: waypoint - Location: 130,75 - Owner: Neutral - Actor152: brl3 - Location: 157,66 - Owner: Soviets - Actor151: barl - Location: 159,58 - Owner: Soviets - Actor138: brl3 - Location: 154,58 - Owner: Soviets - Actor144: brl3 - Location: 159,59 - Owner: Soviets - Actor19: oilb - Location: 154,59 - Owner: Soviets - Actor22: oilb - Location: 157,57 - Owner: Soviets - Actor154: oilb - Location: 169,18 - Owner: Neutral - Actor159: oilb - Location: 172,22 - Owner: Neutral - Actor166: brl3 - Location: 171,18 - Owner: Neutral - Actor167: barl - Location: 173,24 - Owner: Neutral - Actor168: powr - Location: 1,34 - Owner: Allies - Actor183: powr - Location: 3,34 - Owner: Allies - Actor185: apwr - Location: 154,72 - Owner: Soviets - Actor190: ftur - Location: 160,53 - Owner: Soviets - Actor227: e3 - Location: 157,54 - Owner: Soviets - Actor225: e3 - Location: 148,68 - Owner: Soviets - Actor223: e1 - Location: 163,55 - Owner: Soviets - Actor209: fenc - Location: 156,52 - Owner: Soviets - Actor200: e1 - Location: 171,61 - Owner: Soviets - Actor201: e2 - Location: 165,64 - Owner: Soviets - Actor222: e2 - Location: 154,53 - Owner: Soviets - Actor216: fenc - Location: 154,52 - Owner: Soviets - Actor217: fenc - Location: 153,52 - Owner: Soviets - Actor219: fenc - Location: 152,52 - Owner: Soviets - Actor210: fenc - Location: 155,52 - Owner: Soviets - Actor188: brl3 - Location: 160,54 - Owner: Soviets - Actor189: ftur - Location: 147,64 - Owner: Soviets - Actor191: barl - Location: 160,55 - Owner: Soviets - SovietAirfield1: afld - Location: 151,69 - Owner: Soviets - SovietAirfield2: afld - Location: 154,69 - Owner: Soviets - Actor228: e3 - Location: 158,66 - Owner: Soviets - Actor241: barl - Location: 157,67 - Owner: Soviets - Actor242: barr - Location: 159,61 - Owner: Soviets - Actor56: tc01 - Location: 145,71 - Owner: Neutral - Actor237: dog - Location: 151,62 - Owner: Soviets - Actor11: e1 - Location: 149,64 - Owner: Soviets - Actor192: fenc - Location: 147,65 - Owner: Soviets - Actor244: e1 - Location: 160,60 - Owner: Soviets - Actor206: fenc - Location: 158,53 - Owner: Soviets - Actor18: apwr - Location: 149,72 - Owner: Soviets - Actor230: 3tnk - Location: 157,60 - Owner: Soviets - Actor231: kenn - Location: 162,59 - Owner: Soviets - Actor235: waypoint - Location: 147,51 - Owner: Neutral - Actor205: fenc - Location: 159,53 - Owner: Soviets - Actor207: fenc - Location: 158,52 - Owner: Soviets - Actor208: fenc - Location: 157,52 - Owner: Soviets - Actor204: fenc - Location: 147,70 - Owner: Soviets - Actor193: fenc - Location: 147,66 - Owner: Soviets - Actor195: fenc - Location: 147,67 - Owner: Soviets - Actor197: fenc - Location: 146,67 - Owner: Soviets - Actor199: fenc - Location: 146,69 - Owner: Soviets - Actor198: fenc - Location: 146,68 - Owner: Soviets - Actor202: fenc - Location: 147,69 - Owner: Soviets - Actor292: e2 - Location: 165,59 - Owner: Soviets - Actor232: t01 - Location: 72,43 - Owner: Neutral - Actor176: tc05 - Location: 69,46 - Owner: Neutral - Actor170: mine - Location: 114,55 - Owner: Neutral - Actor169: mine - Location: 113,57 - Owner: Neutral - Allies2MovePoint: waypoint - Location: 167,38 - Owner: Neutral - Actor3: silo - Location: 172,59 - Owner: Soviets - Actor33: fact - Location: 162,67 - Owner: Soviets - SovietEntryPoint6: waypoint - Location: 53,79 - Owner: Neutral - SovietRallyPoint6: waypoint - Location: 53,75 - Owner: Neutral - Actor171: mine - Location: 168,73 - Owner: Neutral - Actor248: ftur - Location: 64,44 - Owner: Soviets - SovietAirfield7: afld - Location: 62,49 - Owner: Soviets - Actor256: ftur - Location: 74,57 - Owner: Soviets - Actor273: brik - Location: 72,61 - Owner: Soviets - Actor44: t11 - Location: 57,54 - Owner: Neutral - Actor249: t11 - Location: 98,58 - Owner: Neutral - Actor245: tc05 - Location: 106,43 - Owner: Neutral - Actor233: ftur - Location: 75,54 - Owner: Soviets - Actor287: brik - Location: 72,60 - Owner: Soviets - Actor258: brik - Location: 71,61 - Owner: Soviets - Actor293: brik - Location: 70,61 - Owner: Soviets - Actor177: tc04 - Location: 59,50 - Owner: Neutral - Actor294: brik - Location: 72,59 - Owner: Soviets - Actor213: tsla - Location: 71,59 - Owner: Soviets - Actor295: brik - Location: 73,59 - Owner: Soviets - Actor180: v01.sniper - Location: 100,29 - Owner: Soviets - Actor218: v03 - Location: 90,30 - Owner: Neutral - Actor243: v02 - Location: 95,30 - Owner: Neutral - Actor247: v04 - Location: 102,30 - Owner: Neutral - Actor250: v07 - Location: 104,33 - Owner: Neutral - Actor252: v13 - Location: 101,33 - Owner: Neutral - Actor251: truk - Location: 105,30 - Owner: Neutral - Actor259: v18 - Location: 105,28 - Owner: Neutral - Actor260: v09 - Location: 110,30 - Owner: Neutral - Actor261: v08 - Location: 109,33 - Owner: Neutral - Actor262: v17 - Location: 104,28 - Owner: Neutral - Actor263: e1 - Location: 108,34 - Owner: Soviets - Actor265: e1 - Location: 97,30 - Owner: Soviets - Actor266: e1 - Location: 92,34 - Owner: Soviets - Actor270: e2 - Location: 102,33 - Owner: Soviets - Actor272: e3 - Location: 94,30 - Owner: Soviets - Actor275: e3 - Location: 100,31 - Owner: Soviets - Actor276: 3tnk - Location: 107,30 - Owner: Soviets - Actor277: dome - Location: 165,56 - Owner: Soviets - Actor281: ftur - Location: 166,51 - Owner: Soviets - Actor282: ftur - Location: 147,58 - Owner: Soviets - Actor286: t12 - Location: 154,65 - Owner: Neutral - Actor285: t05 - Location: 148,76 - Owner: Neutral - Actor288: tc02 - Location: 168,51 - Owner: Neutral - Actor240: mine - Location: 159,27 - Owner: Neutral - Actor290: mine - Location: 159,26 - Owner: Neutral - Actor297: brik - Location: 69,61 - Owner: Soviets - Actor299: brik - Location: 73,58 - Owner: Soviets - Actor300: brik - Location: 69,60 - Owner: Soviets - Actor301: brik - Location: 68,60 - Owner: Soviets - Actor304: e1 - Location: 63,59 - Owner: Soviets - Actor305: e1 - Location: 71,56 - Owner: Soviets - Actor306: e1 - Location: 66,46 - Owner: Soviets - Actor308: e2 - Location: 63,57 - Owner: Soviets - Actor309: e2 - Location: 69,51 - Owner: Soviets - Actor311: e1 - Location: 68,58 - Owner: Soviets - Actor313: e1 - Location: 63,46 - Owner: Soviets - Actor316: oilb - Location: 91,50 - Owner: Soviets - Actor317: oilb - Location: 91,53 - Owner: Soviets - Actor318: oilb - Location: 94,50 - Owner: Soviets - Actor319: oilb - Location: 94,53 - Owner: Soviets - Actor320: sbag - Location: 91,56 - Owner: Soviets - Actor321: sbag - Location: 93,56 - Owner: Soviets - Actor324: sbag - Location: 94,56 - Owner: Soviets - Actor325: sbag - Location: 95,56 - Owner: Soviets - Actor326: sbag - Location: 96,56 - Owner: Soviets - Actor327: sbag - Location: 92,56 - Owner: Soviets - Actor328: sbag - Location: 97,56 - Owner: Soviets - Actor330: sbag - Location: 97,55 - Owner: Soviets - Actor332: sbag - Location: 97,54 - Owner: Soviets - Actor334: sbag - Location: 97,53 - Owner: Soviets - Actor335: sbag - Location: 97,52 - Owner: Soviets - Actor336: sbag - Location: 97,51 - Owner: Soviets - Actor337: sbag - Location: 97,50 - Owner: Soviets - Actor339: e1 - Location: 96,49 - Owner: Soviets - Actor340: e1 - Location: 93,47 - Owner: Soviets - Actor341: e1 - Location: 89,56 - Owner: Soviets - Actor342: e2 - Location: 88,55 - Owner: Soviets - Actor343: apc - Location: 91,48 - Owner: Soviets - Actor344: 3tnk - Location: 67,52 - Owner: Soviets - Actor161: brl3 - Location: 93,50 - Owner: Soviets - Actor172: barl - Location: 90,55 - Owner: Soviets - ParadropBoxBottomRight: waypoint - Location: 170,72 - Owner: Neutral - ParadropBoxTopLeft: waypoint - Location: 78,27 - Owner: Neutral - Actor1000: camera.large - Location: 1,1 - Owner: Soviets - -Smudges: - -Rules: - Player: - -ConquestVictoryConditions: - World: - -CrateSpawner: - -SpawnMPUnits: - -MPStartLocations: - Allies03Script: - MissionObjectivesPanel: - ObjectivesPanel: MISSION_OBJECTIVES - YAK: - Buildable: - Owner: soviet, allies - E7: - Buildable: - Owner: None - TRAN: - Buildable: - Owner: None - BARR: - Buildable: - Owner: None - MIG: - Buildable: - Owner: None - HELI: - Buildable: - Owner: None - HIND: - Buildable: - Owner: None - SS: - Buildable: - Owner: None - ARTY: - Buildable: - Owner: None - AGUN: - Buildable: - Owner: None - MSUB: - Buildable: - Owner: None - DD: - Buildable: - Owner: None - CA: - Buildable: - Owner: None - PT: - Buildable: - Owner: None - MSLO: - Buildable: - Owner: None - SPEN: - Buildable: - Owner: None - SYRD: - Buildable: - Owner: None - IRON: - Buildable: - Owner: None - PDOX: - Buildable: - Owner: None - TSLA: - Buildable: - Owner: None - FTUR: - Buildable: - Owner: None - SAM: - Buildable: - Owner: None - HPAD: - Buildable: - Owner: None - AFLD: - Buildable: - Owner: None - ATEK: - Buildable: - Owner: None - STEK: - Buildable: - Owner: None - 4TNK: - Buildable: - Owner: None - MCV: - Buildable: - Owner: None - APC: - Buildable: - Owner: None - MNLY.AP: - Buildable: - Owner: None - MNLY.AT: - Buildable: - Owner: None - TRUK: - Buildable: - Owner: None - TTNK: - Buildable: - Owner: None - FTRK: - Buildable: - Owner: None - CTNK: - Buildable: - Owner: None - MRJ: - Buildable: - Owner: None - MGG: - Buildable: - Owner: None - CreatesShroud: - Range: 6c0 - GAP: - Buildable: - Owner: None - CAMERA.Large: - Inherits: CAMERA - RevealsShroud: - Range: 1000c0 - -Sequences: - -VoxelSequences: - -Weapons: - -Voices: - -Notifications: - -Translations: diff --git a/mods/ra/maps/allies-04/map.bin b/mods/ra/maps/allies-04/map.bin deleted file mode 100644 index ea6cf8e118bc138a11c08b6056b99b59e7cd9785..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81925 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 YATSUZ2n+-U0t118z(8Oiu$RDp0~{aYfB*mh diff --git a/mods/ra/maps/allies-04/map.yaml b/mods/ra/maps/allies-04/map.yaml deleted file mode 100644 index b57b929b5e..0000000000 --- a/mods/ra/maps/allies-04/map.yaml +++ /dev/null @@ -1,2004 +0,0 @@ -Selectable: True - -MapFormat: 6 - -RequiresMod: ra - -Title: Allies 04 - -Description: Allies' fourth mission - -Author: Scott_NZ - -Tileset: TEMPERAT - -MapSize: 128,128 - -Bounds: 16,16,96,96 - -UseAsShellmap: False - -Type: Campaign - -Options: - Crates: False - Fog: True - Shroud: True - AllyBuildRadius: False - FragileAlliances: False - StartingCash: 5000 - ConfigurableStartingUnits: False - Difficulties: Easy,Normal,Hard - -Players: - PlayerReference@Neutral: - Name: Neutral - OwnsWorld: True - NonCombatant: True - Race: allies - PlayerReference@Creeps: - Name: Creeps - NonCombatant: True - Race: allies - Enemies: Soviets - PlayerReference@Allies1: - Name: Allies1 - Playable: True - AllowBots: False - Required: True - LockRace: True - Race: allies - LockColor: True - ColorRamp: 161,134,200 - LockSpawn: True - LockTeam: True - Allies: Allies2,Allies - Enemies: Soviets - PlayerReference@Allies2: - Name: Allies2 - Playable: True - AllowBots: False - LockRace: True - Race: allies - LockColor: True - ColorRamp: 76,196,190 - LockSpawn: True - LockTeam: True - Allies: Allies1,Allies - Enemies: Soviets - PlayerReference@Allies: - Name: Allies - Race: allies - ColorRamp: 115,115,143 - Allies: Allies1,Allies2 - Enemies: Soviets - PlayerReference@Soviets: - Name: Soviets - Race: soviet - ColorRamp: 3,255,127 - Enemies: Allies1,Allies2,Allies,Creeps - -Actors: - Actor2: v07 - Location: 58,83 - Owner: Creeps - Actor1: v05 - Location: 54,89 - Owner: Creeps - Actor56: t01 - Location: 68,97 - Owner: Neutral - Actor5: v03 - Location: 66,84 - Owner: Creeps - Actor25: t16 - Location: 69,64 - Owner: Neutral - Actor68: t08 - Location: 65,93 - Owner: Neutral - Actor26: tc04 - Location: 69,61 - Owner: Neutral - Actor27: t02 - Location: 68,63 - Owner: Neutral - Actor28: t07 - Location: 67,78 - Owner: Neutral - Actor30: t08 - Location: 81,88 - Owner: Neutral - Actor31: t14 - Location: 84,88 - Owner: Neutral - Actor33: t10 - Location: 73,83 - Owner: Neutral - Actor8: v07 - Location: 66,95 - Owner: Creeps - Actor0: v04 - Location: 58,90 - Owner: Creeps - Actor41: t12 - Location: 73,69 - Owner: Neutral - Actor44: t13 - Location: 83,78 - Owner: Neutral - Actor47: v01 - Location: 70,84 - Owner: Creeps - Actor10: v02 - Location: 73,90 - Owner: Creeps - Actor236: sbag - Location: 66,36 - Owner: Soviets - Actor233: sbag - Location: 66,35 - Owner: Soviets - Actor235: sbag - Location: 68,35 - Owner: Soviets - Actor234: sbag - Location: 67,35 - Owner: Soviets - Actor222: hpad - Location: 56,36 - Owner: Soviets - Actor57: t07 - Location: 74,64 - Owner: Neutral - Actor49: tc02 - Location: 63,79 - Owner: Neutral - Actor75: t17 - Location: 84,95 - Owner: Neutral - Actor48: t14 - Location: 63,90 - Owner: Neutral - Actor66: tc03 - Location: 87,89 - Owner: Neutral - Actor77: mine - Location: 96,85 - Owner: Neutral - Actor78: tc04 - Location: 103,78 - Owner: Neutral - Actor80: t07 - Location: 81,81 - Owner: Neutral - Actor81: t06 - Location: 111,82 - Owner: Neutral - Actor82: t03 - Location: 110,76 - Owner: Neutral - Actor84: tc02 - Location: 94,75 - Owner: Neutral - Actor9: v01 - Location: 64,94 - Owner: Creeps - Actor53: powr - Location: 86,65 - Owner: Soviets - Actor113: tc05 - Location: 86,59 - Owner: Neutral - Actor51: barr - Location: 93,70 - Owner: Soviets - Lab: miss - Location: 34,30 - Owner: Soviets - Actor45: brik - Location: 39,34 - Owner: Soviets - Actor43: brik - Location: 39,33 - Owner: Soviets - Actor42: brik - Location: 39,32 - Owner: Soviets - Actor39: brik - Location: 39,31 - Owner: Soviets - Actor38: brik - Location: 39,30 - Owner: Soviets - Actor34: brik - Location: 38,28 - Owner: Soviets - Actor36: brik - Location: 39,29 - Owner: Soviets - Actor494: e4 - Location: 98,38 - Owner: Soviets - Actor495: e4 - Location: 48,34 - Owner: Soviets - Actor58: brik - Location: 32,28 - Owner: Soviets - Actor35: brik - Location: 39,28 - Owner: Soviets - Actor110: e1 - Location: 33,28 - Owner: Soviets - Actor60: apwr - Location: 44,46 - Owner: Soviets - Actor22: brik - Location: 32,34 - Owner: Soviets - Actor95: brik - Location: 32,29 - Owner: Soviets - Actor97: brik - Location: 32,30 - Owner: Soviets - Actor98: brik - Location: 32,31 - Owner: Soviets - Actor100: brik - Location: 32,33 - Owner: Soviets - Actor263: 3tnk - Location: 37,35 - Owner: Soviets - Actor138: e2 - Location: 39,37 - Owner: Soviets - Actor99: brik - Location: 32,32 - Owner: Soviets - Actor106: hpad - Location: 34,42 - Owner: Soviets - Actor21: brik - Location: 33,34 - Owner: Soviets - Actor14: brik - Location: 32,35 - Owner: Soviets - Actor55: brik - Location: 32,26 - Owner: Soviets - Actor40: apwr - Location: 44,43 - Owner: Soviets - Actor69: barr - Location: 60,33 - Owner: Soviets - Actor96: barr - Location: 107,36 - Owner: Soviets - Actor94: barr - Location: 39,41 - Owner: Soviets - Actor102: ftur - Location: 46,39 - Owner: Soviets - Actor4: brik - Location: 38,34 - Owner: Soviets - Actor121: e1 - Location: 100,21 - Owner: Soviets - Actor59: sam - Location: 47,60 - Owner: Soviets - TurretFacing: 160 - Actor61: apwr - Location: 45,49 - Owner: Soviets - Actor62: apwr - Location: 46,52 - Owner: Soviets - Actor29: brik - Location: 35,26 - Owner: Soviets - Actor87: tsla - Location: 31,61 - Owner: Soviets - Actor76: ftur - Location: 78,22 - Owner: Soviets - Actor83: ftur - Location: 67,34 - Owner: Soviets - Actor73: spen - Location: 31,82 - Owner: Soviets - Actor37: dome - Location: 44,57 - Owner: Soviets - Actor65: sam - Location: 50,37 - Owner: Soviets - TurretFacing: 192 - Actor70: spen - Location: 39,71 - Owner: Soviets - Actor71: spen - Location: 25,68 - Owner: Soviets - Actor64: sam - Location: 28,43 - Owner: Soviets - TurretFacing: 48 - Actor72: spen - Location: 23,76 - Owner: Soviets - Actor88: tsla - Location: 49,25 - Owner: Soviets - Actor67: fact - Location: 42,52 - Owner: Soviets - Actor85: kenn - Location: 58,32 - Owner: Soviets - Actor86: tsla - Location: 49,32 - Owner: Soviets - Actor89: tsla - Location: 37,65 - Owner: Soviets - Actor90: tsla - Location: 40,37 - Owner: Soviets - Actor91: tsla - Location: 43,49 - Owner: Soviets - Actor103: afld - Location: 34,51 - Owner: Soviets - Actor20: fcom - Location: 39,50 - Owner: Soviets - Actor18: afld - Location: 34,45 - Owner: Soviets - Actor79: afld - Location: 34,47 - Owner: Soviets - Actor74: ftur - Location: 31,36 - Owner: Soviets - Actor32: brik - Location: 34,26 - Owner: Soviets - Actor104: tsla - Location: 28,80 - Owner: Soviets - Actor493: e4 - Location: 102,24 - Owner: Soviets - Actor274: e3 - Location: 34,41 - Owner: Soviets - Actor452: e4 - Location: 34,32 - Owner: Soviets - Actor112: fenc - Location: 96,39 - Owner: Soviets - Actor15: brik - Location: 33,35 - Owner: Soviets - Actor105: tsla - Location: 71,33 - Owner: Soviets - Actor126: e1 - Location: 109,22 - Owner: Soviets - Actor107: hpad - Location: 36,42 - Owner: Soviets - Actor129: kenn - Location: 110,37 - Owner: Soviets - Actor108: stek - Location: 38,55 - Owner: Soviets - Actor7: brik - Location: 38,35 - Owner: Soviets - Actor46: brik - Location: 33,26 - Owner: Soviets - Actor6: brik - Location: 39,35 - Owner: Soviets - Actor117: fenc - Location: 98,39 - Owner: Soviets - Actor116: fenc - Location: 97,39 - Owner: Soviets - Actor111: fenc - Location: 95,37 - Owner: Soviets - Actor16: fenc - Location: 95,38 - Owner: Soviets - Actor13: fenc - Location: 95,39 - Owner: Soviets - Actor120: e1 - Location: 107,41 - Owner: Soviets - Actor119: e1 - Location: 99,41 - Owner: Soviets - Actor279: dog - Location: 101,38 - Owner: Soviets - Actor151: fenc - Location: 111,39 - Owner: Soviets - Actor125: fenc - Location: 110,39 - Owner: Soviets - Actor124: fenc - Location: 109,39 - Owner: Soviets - Actor127: fenc - Location: 99,39 - Owner: Soviets - Actor148: e1 - Location: 92,20 - Owner: Soviets - Actor128: ftur - Location: 42,61 - Owner: Soviets - Actor93: afld - Location: 34,49 - Owner: Soviets - Actor101: kenn - Location: 41,47 - Owner: Soviets - Actor133: apwr - Location: 97,16 - Owner: Soviets - Actor131: apwr - Location: 107,16 - Owner: Soviets - Actor132: apwr - Location: 107,19 - Owner: Soviets - Actor130: apwr - Location: 101,16 - Owner: Soviets - Actor134: proc - Location: 106,30 - Owner: Soviets - Actor135: fix - Location: 102,25 - Owner: Soviets - Actor136: dome - Location: 107,25 - Owner: Soviets - HijackFactory: weap - Location: 98,32 - Owner: Soviets - Actor12: sam - Location: 34,27 - Owner: Soviets - Actor297: v08 - Location: 68,95 - Owner: Creeps - Actor142: fenc - Location: 91,16 - Owner: Soviets - Actor141: fenc - Location: 91,17 - Owner: Soviets - Actor140: fenc - Location: 91,18 - Owner: Soviets - Actor139: fenc - Location: 91,19 - Owner: Soviets - Actor145: ftur - Location: 90,23 - Owner: Soviets - Actor146: ftur - Location: 90,19 - Owner: Soviets - Actor147: e1 - Location: 92,23 - Owner: Soviets - Actor118: ftur - Location: 99,40 - Owner: Soviets - Actor149: fact - Location: 95,25 - Owner: Soviets - Actor304: 3tnk - Location: 106,38 - Owner: Soviets - Facing: 96 - Actor488: t02 - Location: 110,28 - Owner: Neutral - Actor123: fenc - Location: 108,39 - Owner: Soviets - Actor153: apwr - Location: 101,19 - Owner: Soviets - Actor154: apwr - Location: 93,16 - Owner: Soviets - Actor155: powr - Location: 45,41 - Owner: Soviets - Actor156: apwr - Location: 47,55 - Owner: Soviets - Actor157: tc02 - Location: 27,46 - Owner: Neutral - Actor158: t12 - Location: 26,46 - Owner: Neutral - Actor159: tc05 - Location: 23,45 - Owner: Neutral - Actor160: tc04 - Location: 23,43 - Owner: Neutral - Actor161: e1 - Location: 22,42 - Owner: Soviets - Actor162: t12 - Location: 22,39 - Owner: Neutral - Actor163: t03 - Location: 24,36 - Owner: Neutral - Actor164: t01 - Location: 23,38 - Owner: Neutral - Actor165: t15 - Location: 23,36 - Owner: Neutral - Actor166: tc05 - Location: 22,33 - Owner: Neutral - Actor167: t02 - Location: 25,31 - Owner: Neutral - Actor168: t03 - Location: 26,26 - Owner: Neutral - Actor169: tc04 - Location: 28,19 - Owner: Neutral - Actor170: t11 - Location: 25,28 - Owner: Neutral - Actor171: tc02 - Location: 23,30 - Owner: Neutral - Actor172: tc05 - Location: 26,24 - Owner: Neutral - Actor173: t01 - Location: 28,21 - Owner: Neutral - Actor174: t03 - Location: 31,20 - Owner: Neutral - Actor63: apwr - Location: 32,53 - Owner: Soviets - Actor176: tc02 - Location: 50,62 - Owner: Neutral - Actor177: tc01 - Location: 52,51 - Owner: Neutral - Actor178: t17 - Location: 51,44 - Owner: Neutral - Actor179: t07 - Location: 30,39 - Owner: Neutral - Actor175: sam - Location: 30,58 - Owner: Soviets - TurretFacing: 96 - Actor181: t12 - Location: 27,54 - Owner: Neutral - Actor182: t08 - Location: 28,56 - Owner: Neutral - Actor183: t06 - Location: 47,25 - Owner: Neutral - Actor184: t05 - Location: 41,26 - Owner: Neutral - Actor185: tc02 - Location: 43,22 - Owner: Neutral - Actor186: tc05 - Location: 49,20 - Owner: Neutral - Actor187: t15 - Location: 44,19 - Owner: Neutral - Actor188: tc05 - Location: 46,21 - Owner: Neutral - Actor189: tc04 - Location: 41,20 - Owner: Neutral - Actor190: t03 - Location: 37,20 - Owner: Neutral - Actor191: tc04 - Location: 54,38 - Owner: Neutral - Actor192: tc05 - Location: 59,38 - Owner: Neutral - Actor193: tc02 - Location: 49,45 - Owner: Neutral - Actor194: t03 - Location: 54,40 - Owner: Neutral - Actor195: t03 - Location: 35,72 - Owner: Neutral - Actor196: tc01 - Location: 30,71 - Owner: Neutral - Actor197: t08 - Location: 27,79 - Owner: Neutral - Actor198: t15 - Location: 52,57 - Owner: Neutral - Actor199: tc01 - Location: 49,34 - Owner: Neutral - Actor200: t11 - Location: 28,28 - Owner: Neutral - Actor201: t07 - Location: 38,64 - Owner: Neutral - Actor202: t06 - Location: 50,54 - Owner: Neutral - Actor203: t12 - Location: 60,31 - Owner: Neutral - Actor204: tc02 - Location: 74,16 - Owner: Neutral - Actor205: t07 - Location: 69,19 - Owner: Neutral - Actor206: tc04 - Location: 87,16 - Owner: Neutral - Actor207: tc05 - Location: 84,16 - Owner: Neutral - Actor208: tc03 - Location: 82,18 - Owner: Neutral - Actor209: t16 - Location: 84,18 - Owner: Neutral - Actor210: tc02 - Location: 82,15 - Owner: Neutral - Actor211: t02 - Location: 74,18 - Owner: Neutral - Actor212: t01 - Location: 92,29 - Owner: Neutral - Actor213: t16 - Location: 102,22 - Owner: Neutral - Actor214: silo - Location: 109,29 - Owner: Soviets - Actor215: t01 - Location: 96,36 - Owner: Neutral - Actor216: mine - Location: 103,57 - Owner: Neutral - Actor218: fenc - Location: 81,65 - Owner: Soviets - Actor219: fenc - Location: 81,66 - Owner: Soviets - Actor220: fenc - Location: 81,67 - Owner: Soviets - Actor221: 4tnk - Location: 39,46 - Owner: Soviets - Facing: 0 - Actor228: brik - Location: 102,34 - Owner: Soviets - Actor514: brik - Location: 103,34 - Owner: Soviets - Actor227: e1 - Location: 98,28 - Owner: Soviets - Actor226: fenc - Location: 95,35 - Owner: Soviets - Actor225: fenc - Location: 95,36 - Owner: Soviets - Actor224: 4tnk - Location: 103,30 - Owner: Soviets - Actor144: 4tnk - Location: 42,58 - Owner: Soviets - Actor52: hpad - Location: 83,65 - Owner: Soviets - Actor387: powr - Location: 89,64 - Owner: Soviets - Actor231: e1 - Location: 104,40 - Owner: Soviets - Actor238: sbag - Location: 65,37 - Owner: Soviets - Actor237: sbag - Location: 66,37 - Owner: Soviets - Actor229: v2rl - Location: 96,19 - Owner: Soviets - Facing: 64 - Actor137: e1 - Location: 66,34 - Owner: Soviets - Actor50: fenc - Location: 81,68 - Owner: Soviets - Actor242: ftur - Location: 90,74 - Owner: Soviets - Actor241: fenc - Location: 93,74 - Owner: Soviets - Actor240: fenc - Location: 94,74 - Owner: Soviets - Actor239: fenc - Location: 95,74 - Owner: Soviets - Actor232: fenc - Location: 96,74 - Owner: Soviets - Actor244: sbag - Location: 64,37 - Owner: Soviets - Actor245: e3 - Location: 67,36 - Owner: Soviets - Actor246: e3 - Location: 63,38 - Owner: Soviets - Actor247: e1 - Location: 69,34 - Owner: Soviets - Actor248: e1 - Location: 57,35 - Owner: Soviets - Actor249: e1 - Location: 59,33 - Owner: Soviets - Actor250: e1 - Location: 47,31 - Owner: Soviets - Actor251: e1 - Location: 42,38 - Owner: Soviets - Actor252: e1 - Location: 46,38 - Owner: Soviets - Actor253: e1 - Location: 49,27 - Owner: Soviets - Actor254: e1 - Location: 37,64 - Owner: Soviets - Actor255: e1 - Location: 32,63 - Owner: Soviets - Actor256: e1 - Location: 40,58 - Owner: Soviets - Actor257: e1 - Location: 44,61 - Owner: Soviets - Actor322: v2rl - Location: 36,57 - Owner: Soviets - Actor259: e1 - Location: 43,48 - Owner: Soviets - Actor260: e1 - Location: 37,45 - Owner: Soviets - Actor261: e1 - Location: 31,40 - Owner: Soviets - Actor262: e1 - Location: 37,31 - Owner: Soviets - Actor17: brik - Location: 37,28 - Owner: Soviets - Actor264: v2rl - Location: 50,36 - Owner: Soviets - Facing: 192 - Actor266: 3tnk - Location: 88,70 - Owner: Soviets - Actor268: dog - Location: 64,34 - Owner: Soviets - Actor269: dog - Location: 44,38 - Owner: Soviets - Actor180: apwr - Location: 31,59 - Owner: Soviets - Actor270: dog - Location: 43,60 - Owner: Soviets - Actor265: 3tnk - Location: 90,46 - Owner: Soviets - Actor271: dog - Location: 37,40 - Owner: Soviets - Actor122: fenc - Location: 107,39 - Owner: Soviets - Actor152: ftur - Location: 107,40 - Owner: Soviets - Actor275: tc02 - Location: 74,48 - Owner: Neutral - Actor276: t03 - Location: 91,43 - Owner: Neutral - Actor277: dog.patrol - Location: 37,32 - Owner: Soviets - Actor272: 3tnk - Location: 102,37 - Owner: Soviets - Facing: 160 - Actor280: t16 - Location: 87,41 - Owner: Neutral - Actor281: tc02 - Location: 85,42 - Owner: Neutral - Actor282: t02 - Location: 85,48 - Owner: Neutral - Actor283: t13 - Location: 72,54 - Owner: Neutral - Actor284: t03 - Location: 84,56 - Owner: Neutral - Actor285: tc02 - Location: 109,52 - Owner: Neutral - Actor286: t03 - Location: 110,61 - Owner: Neutral - Actor287: t07 - Location: 100,62 - Owner: Neutral - Actor288: t06 - Location: 91,53 - Owner: Neutral - Actor289: t13 - Location: 81,47 - Owner: Neutral - Actor290: t12 - Location: 110,42 - Owner: Neutral - Actor291: t02 - Location: 102,49 - Owner: Neutral - Actor292: tc04 - Location: 87,38 - Owner: Neutral - Actor293: t02 - Location: 86,40 - Owner: Neutral - Actor294: t11 - Location: 89,42 - Owner: Neutral - Actor295: t07 - Location: 84,40 - Owner: Neutral - PatrolPoint22: waypoint - Location: 92,49 - Owner: Neutral - Actor515: wood - Location: 66,100 - Owner: Neutral - Actor298: t01 - Location: 90,61 - Owner: Neutral - Actor299: t13 - Location: 108,66 - Owner: Neutral - Actor300: dog - Location: 41,49 - Owner: Soviets - Actor338: ss - Location: 57,64 - Owner: Soviets - Actor301: mine - Location: 101,55 - Owner: Neutral - Actor337: ss - Location: 19,80 - Owner: Soviets - Actor316: ss - Location: 32,92 - Owner: Soviets - Actor336: ss - Location: 46,80 - Owner: Soviets - Actor308: tc02 - Location: 78,104 - Owner: Neutral - Actor309: t15 - Location: 72,101 - Owner: Neutral - Actor310: oilb - Location: 77,17 - Owner: Soviets - Actor307: tc02 - Location: 82,97 - Owner: Neutral - Actor311: oilb - Location: 32,76 - Owner: Soviets - Actor114: c1 - Location: 69,84 - Owner: Creeps - Actor217: c3 - Location: 63,96 - Owner: Creeps - Actor54: c1 - Location: 67,99 - Owner: Creeps - Actor302: tsla - Location: 103,34 - Owner: Soviets - Actor317: e2 - Location: 106,26 - Owner: Soviets - Actor318: e2 - Location: 94,20 - Owner: Soviets - Actor319: e3 - Location: 97,29 - Owner: Soviets - Actor320: e3 - Location: 109,27 - Owner: Soviets - Actor321: e3 - Location: 48,36 - Owner: Soviets - Actor267: dog - Location: 35,61 - Owner: Soviets - Actor323: e3 - Location: 30,43 - Owner: Soviets - Actor324: e3 - Location: 38,30 - Owner: Soviets - Actor325: e2 - Location: 32,36 - Owner: Soviets - Actor326: e2 - Location: 62,35 - Owner: Soviets - Actor327: e2 - Location: 37,48 - Owner: Soviets - Actor329: e2 - Location: 46,28 - Owner: Soviets - Actor330: e2 - Location: 35,67 - Owner: Soviets - Actor331: e1 - Location: 27,78 - Owner: Soviets - Actor332: e2 - Location: 29,79 - Owner: Soviets - Actor333: e1 - Location: 75,22 - Owner: Soviets - Actor334: e2 - Location: 101,29 - Owner: Soviets - Actor335: e2 - Location: 77,20 - Owner: Soviets - SpyReinforcementsExitPoint: waypoint - Location: 48,111 - Owner: Neutral - Actor305: ss - Location: 19,101 - Owner: Soviets - Actor258: apwr - Location: 32,56 - Owner: Soviets - Actor340: v09 - Location: 72,86 - Owner: Creeps - Actor339: e1 - Location: 21,35 - Owner: Soviets - Actor342: v05 - Location: 68,88 - Owner: Creeps - Actor341: e1 - Location: 24,27 - Owner: Soviets - Actor344: v08 - Location: 65,99 - Owner: Creeps - Actor345: v16 - Location: 59,97 - Owner: Neutral - Actor346: v18 - Location: 60,97 - Owner: Neutral - Actor347: v17 - Location: 61,97 - Owner: Neutral - Actor348: v06 - Location: 60,96 - Owner: Creeps - Actor349: v14 - Location: 66,83 - Owner: Neutral - Actor351: t11 - Location: 62,100 - Owner: Neutral - Actor352: tc04 - Location: 55,94 - Owner: Neutral - Actor353: tc03 - Location: 56,96 - Owner: Neutral - Actor354: t12 - Location: 68,99 - Owner: Neutral - Actor355: tc01 - Location: 66,93 - Owner: Neutral - Actor356: tc02 - Location: 66,89 - Owner: Neutral - Actor357: t10 - Location: 60,88 - Owner: Neutral - Actor358: t14 - Location: 59,87 - Owner: Neutral - Actor359: tc04 - Location: 58,88 - Owner: Neutral - Actor360: tc02 - Location: 58,80 - Owner: Neutral - Actor361: tc01 - Location: 79,92 - Owner: Neutral - Actor362: t07 - Location: 77,89 - Owner: Neutral - Actor363: t02 - Location: 77,84 - Owner: Neutral - Actor364: t01 - Location: 73,91 - Owner: Neutral - Actor273: v10 - Location: 58,86 - Owner: Creeps - Actor343: e1 - Location: 28,49 - Owner: Soviets - Actor367: e1 - Location: 27,60 - Owner: Soviets - Actor368: t02 - Location: 75,92 - Owner: Neutral - Actor369: tc03 - Location: 75,84 - Owner: Neutral - Actor370: t16 - Location: 99,98 - Owner: Neutral - Actor371: t02 - Location: 110,92 - Owner: Neutral - Actor372: t08 - Location: 89,96 - Owner: Neutral - Actor373: tc03 - Location: 94,100 - Owner: Neutral - Actor374: wood - Location: 67,100 - Owner: Neutral - Actor375: e1 - Location: 89,47 - Owner: Soviets - Actor376: e1 - Location: 91,46 - Owner: Soviets - Actor377: dog - Location: 91,48 - Owner: Soviets - Actor378: t10 - Location: 81,74 - Owner: Neutral - Actor379: tc02 - Location: 100,75 - Owner: Neutral - Actor380: tc05 - Location: 99,72 - Owner: Neutral - Actor381: tc04 - Location: 103,74 - Owner: Neutral - Actor382: tc03 - Location: 104,72 - Owner: Neutral - Actor383: tc02 - Location: 109,65 - Owner: Neutral - Actor384: t07 - Location: 103,65 - Owner: Neutral - Actor385: t06 - Location: 91,64 - Owner: Neutral - Actor386: t05 - Location: 100,68 - Owner: Neutral - Actor243: ftur - Location: 81,69 - Owner: Soviets - Actor223: e3 - Location: 39,53 - Owner: Soviets - Actor278: ftur - Location: 37,58 - Owner: Soviets - Actor391: ftur - Location: 94,66 - Owner: Soviets - Actor392: e1 - Location: 83,69 - Owner: Soviets - Actor393: e1 - Location: 90,76 - Owner: Soviets - Actor394: e1 - Location: 92,67 - Owner: Soviets - Actor395: e2 - Location: 88,67 - Owner: Soviets - Actor396: e2 - Location: 85,75 - Owner: Soviets - Actor397: e1 - Location: 96,72 - Owner: Soviets - Actor398: e1 - Location: 89,71 - Owner: Soviets - Actor399: tsla - Location: 94,22 - Owner: Soviets - Actor400: e1 - Location: 49,66 - Owner: Soviets - Actor401: tsla - Location: 31,42 - Owner: Soviets - Actor402: ftur - Location: 26,40 - Owner: Soviets - Actor328: v2rl - Location: 27,37 - Owner: Soviets - Facing: 64 - Actor366: powr - Location: 35,54 - Owner: Soviets - Actor403: powr - Location: 56,31 - Owner: Soviets - SpyReinforcementsEntryPoint: waypoint - Location: 16,107 - Owner: Neutral - Actor404: ss - Location: 80,33 - Owner: Soviets - Actor405: ss - Location: 65,47 - Owner: Soviets - Actor406: ss - Location: 20,56 - Owner: Soviets - Actor312: t17 - Location: 88,100 - Owner: Neutral - PatrolPoint13: waypoint - Location: 81,86 - Owner: Neutral - PatrolPoint12: waypoint - Location: 74,78 - Owner: Neutral - PatrolPoint11: waypoint - Location: 77,70 - Owner: Neutral - PatrolPoint15: waypoint - Location: 88,73 - Owner: Neutral - PatrolPoint14: waypoint - Location: 91,83 - Owner: Neutral - PatrolPoint21: waypoint - Location: 105,45 - Owner: Neutral - PatrolPoint23: waypoint - Location: 78,53 - Owner: Neutral - PatrolPoint24: waypoint - Location: 92,56 - Owner: Neutral - PatrolPoint25: waypoint - Location: 106,53 - Owner: Neutral - Actor409: e1 - Location: 76,59 - Owner: Soviets - Actor410: v2rl - Location: 74,59 - Owner: Soviets - Actor3: dog - Location: 74,52 - Owner: Soviets - Actor416: dog - Location: 82,73 - Owner: Soviets - Actor413: sbag - Location: 75,60 - Owner: Soviets - Actor414: sbag - Location: 74,60 - Owner: Soviets - Actor412: proc - Location: 84,68 - Owner: Soviets - Actor472: brl3 - Location: 77,101 - Owner: Soviets - Actor417: sbag - Location: 73,60 - Owner: Soviets - Actor296: kenn - Location: 90,68 - Owner: Soviets - Actor303: e2 - Location: 100,38 - Owner: Soviets - Actor408: dog - Location: 108,42 - Owner: Soviets - Actor418: dog - Location: 109,74 - Owner: Soviets - Actor419: e1 - Location: 108,75 - Owner: Soviets - Actor420: e1 - Location: 110,75 - Owner: Soviets - Actor421: sbag - Location: 108,73 - Owner: Soviets - Actor422: sbag - Location: 109,73 - Owner: Soviets - Actor423: sbag - Location: 110,73 - Owner: Soviets - Actor424: sbag - Location: 111,73 - Owner: Soviets - PatrolPoint43: waypoint - Location: 109,51 - Owner: Neutral - PatrolPoint42: waypoint - Location: 109,44 - Owner: Neutral - PatrolPoint41: waypoint - Location: 102,41 - Owner: Neutral - PatrolPoint45: waypoint - Location: 93,42 - Owner: Neutral - PatrolPoint44: waypoint - Location: 96,53 - Owner: Neutral - Actor425: dog - Location: 79,22 - Owner: Soviets - Actor426: dog - Location: 93,19 - Owner: Soviets - Actor427: dog - Location: 104,24 - Owner: Soviets - HijackTruck: truk.hijackable - Location: 99,34 - Owner: Soviets - Facing: 160 - BaseGuard: e1 - Location: 63,36 - Owner: Soviets - Actor429: cycl - Location: 63,33 - Owner: Soviets - Actor428: cycl - Location: 63,34 - Owner: Soviets - Actor230: cycl - Location: 63,35 - Owner: Soviets - Actor430: sbag - Location: 68,34 - Owner: Soviets - Actor431: sbag - Location: 68,33 - Owner: Soviets - Actor432: cycl - Location: 63,32 - Owner: Soviets - Actor433: sbag - Location: 63,37 - Owner: Soviets - BaseGuardMovePos: waypoint - Location: 62,37 - Owner: Neutral - BaseGuardTruckPos: waypoint - Location: 64,36 - Owner: Neutral - Actor411: e2 - Location: 73,53 - Owner: Soviets - Actor434: e1 - Location: 94,54 - Owner: Soviets - Actor435: dog - Location: 95,54 - Owner: Soviets - Actor436: e1 - Location: 82,44 - Owner: Soviets - Actor437: e1 - Location: 80,43 - Owner: Soviets - Actor438: dog - Location: 81,43 - Owner: Soviets - Actor439: e1 - Location: 109,48 - Owner: Soviets - Actor440: dog - Location: 108,48 - Owner: Soviets - Actor441: 3tnk - Location: 108,47 - Owner: Soviets - Actor442: brl3 - Location: 82,65 - Owner: Soviets - Actor443: brl3 - Location: 82,66 - Owner: Soviets - Actor444: barl - Location: 83,67 - Owner: Soviets - Actor445: brl3 - Location: 88,65 - Owner: Soviets - Actor446: barl - Location: 89,66 - Owner: Soviets - Actor447: barl - Location: 87,67 - Owner: Soviets - Actor448: brl3 - Location: 89,67 - Owner: Soviets - Actor450: barl - Location: 109,28 - Owner: Soviets - Actor449: brl3 - Location: 107,27 - Owner: Soviets - Actor454: e2 - Location: 38,32 - Owner: Soviets - Actor451: barl - Location: 108,29 - Owner: Soviets - Actor453: brl3 - Location: 38,31 - Owner: Soviets - Actor11: truk - Location: 36,32 - Owner: Soviets - Actor455: silo - Location: 82,67 - Owner: Soviets - Actor456: e1 - Location: 85,66 - Owner: Soviets - Actor457: t06 - Location: 101,92 - Owner: Neutral - Actor115: c2 - Location: 56,89 - Owner: Creeps - Actor459: e1 - Location: 79,102 - Owner: Soviets - Actor460: sbag - Location: 80,103 - Owner: Soviets - Actor462: hpad - Location: 75,100 - Owner: Soviets - Actor463: sbag - Location: 79,103 - Owner: Soviets - Actor464: sbag - Location: 78,103 - Owner: Soviets - Actor465: sbag - Location: 77,103 - Owner: Soviets - Actor466: sbag - Location: 76,103 - Owner: Soviets - Actor467: sbag - Location: 76,102 - Owner: Soviets - Actor468: sbag - Location: 75,102 - Owner: Soviets - Actor469: sbag - Location: 74,102 - Owner: Soviets - Actor470: sbag - Location: 74,101 - Owner: Soviets - Actor471: powr - Location: 79,98 - Owner: Soviets - Actor415: sam - Location: 77,102 - Owner: Soviets - TurretFacing: 128 - Actor475: brl3 - Location: 79,97 - Owner: Soviets - Actor407: ftur - Location: 76,98 - Owner: Soviets - Actor473: barl - Location: 78,98 - Owner: Soviets - Actor461: e2 - Location: 78,97 - Owner: Soviets - Actor481: fenc - Location: 82,99 - Owner: Soviets - Actor482: fenc - Location: 82,100 - Owner: Soviets - Actor483: fenc - Location: 81,99 - Owner: Soviets - Actor484: fenc - Location: 81,98 - Owner: Soviets - ReinforcementsEntryPoint: waypoint - Location: 92,111 - Owner: Neutral - ReinforcementsUnloadPoint: waypoint - Location: 92,103 - Owner: Neutral - Actor474: mine - Location: 95,86 - Owner: Neutral - Actor480: fenc - Location: 87,74 - Owner: Soviets - Actor485: fenc - Location: 86,74 - Owner: Soviets - Actor486: fenc - Location: 85,74 - Owner: Soviets - Actor487: fenc - Location: 84,74 - Owner: Soviets - Actor313: c3 - Location: 65,86 - Owner: Creeps - Actor314: c4 - Location: 72,91 - Owner: Creeps - Actor315: c4 - Location: 58,92 - Owner: Creeps - Actor458: c8 - Location: 68,94 - Owner: Creeps - Actor476: c9 - Location: 59,98 - Owner: Creeps - Actor477: c10 - Location: 57,82 - Owner: Creeps - Actor478: c7 - Location: 69,89 - Owner: Creeps - Actor479: c6 - Location: 73,89 - Owner: Creeps - Actor150: silo - Location: 109,31 - Owner: Soviets - Actor489: silo - Location: 110,30 - Owner: Soviets - Actor490: silo - Location: 108,30 - Owner: Soviets - Actor306: e2 - Location: 43,56 - Owner: Soviets - Actor365: e3 - Location: 40,54 - Owner: Soviets - Actor388: e1 - Location: 38,50 - Owner: Soviets - Actor389: e1 - Location: 48,58 - Owner: Soviets - Actor390: e2 - Location: 42,43 - Owner: Soviets - Actor491: e1 - Location: 42,41 - Owner: Soviets - Actor492: e1 - Location: 35,35 - Owner: Soviets - BridgeTank: 3tnk - Location: 76,20 - Owner: Soviets - BridgeAttackPoint: waypoint - Location: 74,25 - Owner: Neutral - Actor19: brik - Location: 37,27 - Owner: Soviets - Actor23: brik - Location: 37,26 - Owner: Soviets - Actor24: brik - Location: 36,26 - Owner: Soviets - Actor109: brik - Location: 32,27 - Owner: Soviets - Actor496: e4 - Location: 57,38 - Owner: Soviets - Actor497: e4 - Location: 38,60 - Owner: Soviets - Actor498: apc - Location: 78,99 - Owner: Soviets - Actor499: 3tnk - Location: 106,23 - Owner: Soviets - Actor500: sbag - Location: 44,30 - Owner: Soviets - Actor501: sbag - Location: 44,31 - Owner: Soviets - Actor502: sbag - Location: 44,32 - Owner: Soviets - Actor503: sbag - Location: 44,33 - Owner: Soviets - Actor504: sbag - Location: 43,30 - Owner: Soviets - Actor505: e1 - Location: 43,32 - Owner: Soviets - Actor506: e3 - Location: 43,31 - Owner: Soviets - Actor507: brik - Location: 104,36 - Owner: Soviets - Actor508: brik - Location: 104,35 - Owner: Soviets - Actor509: brik - Location: 104,34 - Owner: Soviets - Actor510: brik - Location: 102,35 - Owner: Soviets - Actor511: brik - Location: 102,36 - Owner: Soviets - Actor512: brik - Location: 103,36 - Owner: Soviets - Actor513: e1 - Location: 110,34 - Owner: Soviets - PatrolPoint31: waypoint - Location: 79,71 - Owner: Neutral - PatrolPoint32: waypoint - Location: 78,46 - Owner: Neutral - PatrolPoint33: waypoint - Location: 100,48 - Owner: Neutral - PatrolPoint34: waypoint - Location: 92,70 - Owner: Neutral - Actor516: wood - Location: 65,100 - Owner: Neutral - Actor143: v11 - Location: 72,95 - Owner: Creeps - Actor517: wood - Location: 64,100 - Owner: Neutral - Actor518: wood - Location: 63,100 - Owner: Neutral - Actor519: wood - Location: 63,99 - Owner: Neutral - Actor520: wood - Location: 63,98 - Owner: Neutral - Actor521: v18 - Location: 59,96 - Owner: Neutral - TownAttacker6: e4 - Location: 70,97 - Owner: Soviets - TownAttacker4: e4 - Location: 70,91 - Owner: Soviets - TownAttacker1: e4 - Location: 70,82 - Owner: Soviets - TownAttacker2: e1 - Location: 70,87 - Owner: Soviets - TownAttacker5: e1 - Location: 70,93 - Owner: Soviets - TownAttacker3: 3tnk - Location: 74,87 - Owner: Soviets - TownAttacker7: 3tnk - Location: 73,97 - Owner: Soviets - SpyReinforcementsUnloadPoint: waypoint - Location: 52,94 - Owner: Neutral - Actor522: ss - Location: 43,100 - Owner: Soviets - Actor92: hosp - Location: 57,78 - Owner: Creeps - Actor523: v02 - Location: 56,87 - Owner: Creeps - Actor524: v03 - Location: 60,90 - Owner: Creeps - Actor525: c1 - Location: 55,90 - Owner: Creeps - Actor526: c9 - Location: 60,94 - Owner: Creeps - Actor527: v11 - Location: 59,94 - Owner: Creeps - Actor528: brl3 - Location: 60,95 - Owner: Neutral - Actor529: barl - Location: 59,95 - Owner: Neutral - Actor530: brl3 - Location: 58,94 - Owner: Neutral - Actor533: brl3 - Location: 54,88 - Owner: Neutral - Actor1000: camera.large - Location: 1,1 - Owner: Soviets - -Smudges: - -Rules: - Player: - -ConquestVictoryConditions: - World: - -CrateSpawner: - -SpawnMPUnits: - -MPStartLocations: - Allies04Script: - Allies04HazyPaletteEffect: - MissionObjectivesPanel: - ObjectivesPanel: MISSION_OBJECTIVES - ^Building: - Allies04MaintainBuilding: - Player: Soviets - MISS: - AutoTargetIgnore: - Allies04TransformOnLabInfiltrate: - ToActor: MISS - Infiltratable: - Type: Lab - LST.Unselectable: - Inherits: LST - Buildable: - Owner: None - RenderLandingCraft: - Image: LST - -Selectable: - LST.Unselectable.NoCargo: - Inherits: LST.Unselectable - Cargo: - MaxWeight: 0 - PipCount: 0 - SPY.Strong: - Inherits: SPY - Buildable: - Owner: None - RenderSpy: - Image: SPY - Health: - HP: 100 - RevealsShroud: - Range: 6c0 - Spy: - Infiltrates: - Types: Lab, Truck - DOG.Patrol: - Inherits: DOG - Buildable: - Owner: None - Mobile: - Speed: 56 - RenderInfantry: - Image: DOG - TRUK.Hijackable: - Inherits: TRUK - Buildable: - Owner: None - Cargo: - Types: Infantry - MaxWeight: 5 - PipCount: 5 - AutoTargetIgnore: - Infiltratable: - Type: Truck - Allies04Hijackable: - Allies04RenderHijacked: - Image: TRUK - -SupplyTruck: - -RenderUnit: - Selectable: - Voice: SpyVoice - RevealsShroud: - Range: 6c0 - BARL: - Allies04TrivialBuilding: - BRL3: - Allies04TrivialBuilding: - OILB: - Allies04TrivialBuilding: - E7: - Buildable: - Owner: None - TRAN: - Buildable: - Owner: None - BARR: - Buildable: - Owner: None - MIG: - Buildable: - Owner: None - HELI: - Buildable: - Owner: None - SS: - Buildable: - Owner: None - ARTY: - Buildable: - Owner: None - AGUN: - Buildable: - Owner: None - MSUB: - Buildable: - Owner: None - CA: - Buildable: - Owner: None - MSLO: - Buildable: - Owner: None - SPEN: - Buildable: - Owner: None - IRON: - Buildable: - Owner: None - PDOX: - Buildable: - Owner: None - TSLA: - Buildable: - Owner: None - FTUR: - Buildable: - Owner: None - SAM: - Buildable: - Owner: None - HPAD: - Buildable: - Owner: None - AFLD: - Buildable: - Owner: None - ATEK: - Buildable: - Owner: None - STEK: - Buildable: - Owner: None - 4TNK: - Buildable: - Owner: None - MCV: - Buildable: - Owner: None - APC: - Buildable: - Owner: None - MNLY.AP: - Buildable: - Owner: None - MNLY.AT: - Buildable: - Owner: None - TTNK: - Buildable: - Owner: None - FTRK: - Buildable: - Owner: None - CTNK: - Buildable: - Owner: None - MGG: - Buildable: - Owner: None - MRJ: - Buildable: - Owner: None - GAP: - Buildable: - Owner: None - CAMERA.Large: - Inherits: CAMERA - RevealsShroud: - Range: 1000c0 - -Sequences: - truk: - unload: - Start: 0 - Facings: 32 - -VoxelSequences: - -Weapons: - -Voices: - -Notifications: - -Translations: diff --git a/mods/ra/maps/monster-tank-madness/map.bin b/mods/ra/maps/monster-tank-madness/map.bin deleted file mode 100644 index 00599aec5ee9c97da50b4b30b768e2afc5f8d603..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81925 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