From 60fb45c90950f38549ff7c49df7ad56dfb4736d0 Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Sat, 11 Aug 2012 19:49:57 +1200 Subject: [PATCH] Move the sam site around to make a new outpost on the top left, add engineer rescue --- OpenRA.Mods.RA/Missions/Allies01Script.cs | 12 +- OpenRA.Mods.RA/Missions/Allies02Script.cs | 40 +++- mods/ra/maps/allies-02/map.bin | Bin 81925 -> 81925 bytes mods/ra/maps/allies-02/map.yaml | 211 +++++++--------------- 4 files changed, 105 insertions(+), 158 deletions(-) diff --git a/OpenRA.Mods.RA/Missions/Allies01Script.cs b/OpenRA.Mods.RA/Missions/Allies01Script.cs index b010380022..b183836d8a 100644 --- a/OpenRA.Mods.RA/Missions/Allies01Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies01Script.cs @@ -46,8 +46,8 @@ namespace OpenRA.Mods.RA.Missions Actor einsteinChinook; Actor tanya; Actor attackEntryPoint1; - Actor attackEntryPoint2; - + Actor attackEntryPoint2; + World world; static readonly string[] taunts = { "laugh1.aud", "lefty1.aud", "cmon1.aud", "gotit1.aud" }; @@ -124,7 +124,7 @@ namespace OpenRA.Mods.RA.Missions { SpawnSignalFlare(); Sound.Play("flaren1.aud"); - SpawnEinsteinAtLab(); // spawn Einstein once the area is clear + SpawnEinsteinAtLab(); SendShips(); currentObjective++; DisplayObjective(); @@ -152,7 +152,7 @@ namespace OpenRA.Mods.RA.Missions FlyEinsteinFromExtractionLZ(); } } - if (einsteinChinook != null && !world.Map.IsInMap(einsteinChinook.Location) && einsteinChinook.Trait().Passengers.Contains(einstein)) + if (einsteinChinook != null && !einsteinChinook.IsDead() && !world.Map.IsInMap(einsteinChinook.Location) && einsteinChinook.Trait().Passengers.Contains(einstein)) { MissionAccomplished("Einstein was rescued."); } @@ -263,8 +263,8 @@ namespace OpenRA.Mods.RA.Missions chinook.QueueActivity(new RemoveSelf()); } - public void WorldLoaded(World w) - { + public void WorldLoaded(World w) + { world = w; allies = w.Players.Single(p => p.InternalName == "Allies"); soviets = w.Players.Single(p => p.InternalName == "Soviets"); diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs index 5d52459dc7..7c23302f1b 100644 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies02Script.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Collections.Generic; using System.Drawing; using System.Linq; using OpenRA.FileFormats; @@ -37,13 +38,15 @@ namespace OpenRA.Mods.RA.Missions Actor sam4; Actor tanya; Actor einstein; + Actor engineer; + + Actor engineerMiss; Actor chinookHusk; Actor allies2BasePoint; Actor reinforcementsEntryPoint; Actor extractionLZEntryPoint; Actor extractionLZ; - Actor extractionLZExitPoint; Actor einsteinChinook; @@ -56,6 +59,8 @@ namespace OpenRA.Mods.RA.Missions static readonly string[] reinforcements = { "1tnk", "1tnk", "jeep", "mcv" }; const string ChinookName = "tran"; const string SignalFlareName = "flare"; + const string EngineerName = "e6"; + const int EngineerMissClearRange = 5; void DisplayObjective() { @@ -95,20 +100,25 @@ namespace OpenRA.Mods.RA.Missions { StartReinforcementsTimer(); } + if (!engineerMiss.Destroyed && engineer == null && AlliesControlMiss()) + { + SpawnEngineerAtMiss(); + engineerMiss.QueueActivity(new Demolish(engineerMiss, 0)); + } if (currentObjective == 0) { if (sam1.Destroyed && sam2.Destroyed && sam3.Destroyed && sam4.Destroyed) { currentObjective++; DisplayObjective(); - Sound.Play("flaren1.aud"); SpawnSignalFlare(); - Game.RunAfterDelay(150, StartChinookTimer); + Sound.Play("flaren1.aud"); + Game.RunAfterDelay(25 * 10, StartChinookTimer); } } else if (currentObjective == 1) { - if (einsteinChinook != null && !world.Map.IsInMap(einsteinChinook.Location) && einsteinChinook.Trait().Passengers.Contains(einstein)) + if (einsteinChinook != null && !einsteinChinook.IsDead() && !world.Map.IsInMap(einsteinChinook.Location) && einsteinChinook.Trait().Passengers.Contains(einstein)) { MissionAccomplished("Einstein was rescued."); } @@ -185,10 +195,28 @@ namespace OpenRA.Mods.RA.Missions einsteinChinook.QueueActivity(new HeliLand(true)); einsteinChinook.QueueActivity(new WaitFor(() => einsteinChinook.Trait().Passengers.Contains(einstein))); einsteinChinook.QueueActivity(new Wait(150)); - einsteinChinook.QueueActivity(new HeliFly(extractionLZExitPoint.CenterLocation)); + einsteinChinook.QueueActivity(new HeliFly(extractionLZEntryPoint.CenterLocation)); einsteinChinook.QueueActivity(new RemoveSelf()); } + IEnumerable UnitsNearActor(Actor actor, int range) + { + return world.FindUnitsInCircle(actor.CenterLocation, Game.CellSize * range) + .Where(a => a.IsInWorld && a != world.WorldActor && !a.Destroyed && a.HasTrait() && !a.Owner.NonCombatant); + } + + bool AlliesControlMiss() + { + var units = UnitsNearActor(engineerMiss, EngineerMissClearRange); + return units.Any() && units.All(a => a.Owner == allies1); + } + + void SpawnEngineerAtMiss() + { + engineer = world.CreateActor(EngineerName, new TypeDictionary { new OwnerInit(allies1), new LocationInit(engineerMiss.Location) }); + engineer.QueueActivity(new Move.Move(engineerMiss.Location + new CVec(5, 0))); + } + public void WorldLoaded(World w) { world = w; @@ -207,7 +235,7 @@ namespace OpenRA.Mods.RA.Missions reinforcementsEntryPoint = actors["ReinforcementsEntryPoint"]; extractionLZ = actors["ExtractionLZ"]; extractionLZEntryPoint = actors["ExtractionLZEntryPoint"]; - extractionLZExitPoint = actors["ExtractionLZExitPoint"]; + engineerMiss = actors["EngineerMiss"]; w.WorldActor.Trait().Explore(w, sam1.Location, 2); w.WorldActor.Trait().Explore(w, sam2.Location, 2); w.WorldActor.Trait().Explore(w, sam3.Location, 2); diff --git a/mods/ra/maps/allies-02/map.bin b/mods/ra/maps/allies-02/map.bin index f84bcdce361321c8192adf109df6340e8ed67315..f9aa7f5cd8756e1a213535d58ca51ce8825445e6 100644 GIT binary patch delta 353 zcmX|+Pbh;OOF@I6CrkaeJOV^?7=BbI#qIvpN|x3q%ESAQ|yWI+$S;VB@t{ z$y=)~*EvfPp$*1TQQ>~al$Z7u#@D5V*nU8=o%4*sTqYw={6mEAo`4t;P4yn;x`LQ0dT^Vu<+wNUzYX`9 zUq1V08Cyw((>)Vc=N2X!Z7g^AalfeKII0!l3kwfTwtNgMu&L!IL=qp|#nqFz)IonBxZH2E;orbJ>Xwkt#x;u<+>Uls~X!A7<5Y0dN zkhIX`gh`y6^R&W1eD)p&#vTUddlMDKCp#AlZD!VS1S|8eVVfMIB{WfiZSvs~q0P;@ z5MeuSxyj7>KxO(6KEyPh$sRL=Chtw<-#p1cA7mTU)TD`uBAeeC27`pSx)>O`7?_e6 z82?X>)6|@NAcJS~Bx6U$$?GObY<_JL!^k$5fnhEK^JZVOaz@TMAU5M%2A0id&B0tC zn`tfs>t;_6}p5%)3~6@&sl6 a&Bne-kbsda;Mu&vFA1oMXR}