diff --git a/OpenRA.Mods.RA/Missions/Allies01Script.cs b/OpenRA.Mods.RA/Missions/Allies01Script.cs index 039fc5254b..98d2389e69 100644 --- a/OpenRA.Mods.RA/Missions/Allies01Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies01Script.cs @@ -75,7 +75,6 @@ namespace OpenRA.Mods.RA.Missions const int LabClearRange = 5; const string EinsteinName = "einstein"; const string TanyaName = "e7"; - const string ChinookName = "tran"; const string SignalFlareName = "flare"; void MissionFailed(string text) diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs index bb24fe9ecf..bdc7eddc5c 100644 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies02Script.cs @@ -63,7 +63,10 @@ namespace OpenRA.Mods.RA.Missions Actor extractionLZEntryPoint; Actor extractionLZ; Actor badgerEntryPoint; - Actor badgerDropPoint; + Actor badgerDropPoint1; + Actor badgerDropPoint2; + Actor badgerDropPoint3; + Actor parabombPoint; Actor sovietRallyPoint; Actor flamersEntryPoint; Actor townPoint; @@ -96,17 +99,17 @@ namespace OpenRA.Mods.RA.Missions static readonly string[] Reinforcements = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", "jeep", "e1", "e1", "e1", "e1", "e3", "e3", "mcv" }; const int ReinforcementsCash = 2000; - const int ParatroopersTicks = 1500 * 10; - static readonly string[] Paratroopers = { "e1", "e1", "e1", "e2", "3tnk" }; - const string BadgerName = "badr"; + const int ParatroopersTicks = 1500 * 8; + 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 int FlamersTicks = 1500 * 7; + const int ParabombTicks = 1500 * 5; + + const int FlamersTicks = 1500 * 2; static readonly string[] Flamers = { "e4", "e4", "e4", "e4", "e4" }; const string ApcName = "apc"; - const int HintPowerTicks = 1500 * 6; - - const string ChinookName = "tran"; const string SignalFlareName = "flare"; const int AlliedTownTransferRange = 15; @@ -165,12 +168,18 @@ namespace OpenRA.Mods.RA.Missions reinforcementsTimer.Tick(); if (world.FrameNumber == ParatroopersTicks) { - ParadropSovietUnits(); + MissionUtils.Paradrop(world, soviets, Badger1Passengers, badgerEntryPoint.Location, badgerDropPoint1.Location); + MissionUtils.Paradrop(world, soviets, Badger2Passengers, badgerEntryPoint.Location, badgerDropPoint2.Location); + MissionUtils.Paradrop(world, soviets, Badger3Passengers, badgerEntryPoint.Location, badgerDropPoint3.Location); } if (world.FrameNumber == FlamersTicks) { RushSovietFlamers(); } + if (world.FrameNumber == ParabombTicks) + { + MissionUtils.Parabomb(world, soviets, badgerEntryPoint.Location, parabombPoint.Location); + } if (world.FrameNumber == SovietVehicleAdditionsTicks) { sovietVehicles.AddRange(SovietVehicleAdditions); @@ -334,27 +343,9 @@ namespace OpenRA.Mods.RA.Missions Ui.Root.AddChild(reinforcementsTimerWidget); } - void ParadropSovietUnits() - { - var badger = world.CreateActor(BadgerName, new TypeDictionary - { - new LocationInit(badgerEntryPoint.Location), - new OwnerInit(soviets), - new FacingInit(Util.GetFacing(badgerDropPoint.Location - badgerEntryPoint.Location, 0)), - new AltitudeInit(Rules.Info[BadgerName].Traits.Get().CruiseAltitude), - }); - badger.QueueActivity(new FlyAttack(Target.FromCell(badgerDropPoint.Location))); - badger.Trait().SetLZ(badgerDropPoint.Location); - var cargo = badger.Trait(); - foreach (var unit in Paratroopers) - { - cargo.Load(badger, world.CreateActor(false, unit, new TypeDictionary { new OwnerInit(soviets) })); - } - } - void RushSovietFlamers() { - var closestAlliedBuilding = ClosestAlliedBuilding(badgerDropPoint, 40); + var closestAlliedBuilding = ClosestAlliedBuilding(badgerDropPoint1, 40); if (closestAlliedBuilding == null) { return; @@ -447,7 +438,10 @@ namespace OpenRA.Mods.RA.Missions extractionLZ = actors["ExtractionLZ"]; extractionLZEntryPoint = actors["ExtractionLZEntryPoint"]; badgerEntryPoint = actors["BadgerEntryPoint"]; - badgerDropPoint = actors["BadgerDropPoint"]; + badgerDropPoint1 = actors["BadgerDropPoint1"]; + badgerDropPoint2 = actors["BadgerDropPoint2"]; + badgerDropPoint3 = actors["BadgerDropPoint3"]; + parabombPoint = actors["ParabombPoint"]; sovietBarracks = actors["SovietBarracks"]; sovietWarFactory = actors["SovietWarFactory"]; sovietRallyPoint = actors["SovietRallyPoint"]; diff --git a/OpenRA.Mods.RA/Missions/MissionUtils.cs b/OpenRA.Mods.RA/Missions/MissionUtils.cs index bc905cf79b..f6734a1688 100644 --- a/OpenRA.Mods.RA/Missions/MissionUtils.cs +++ b/OpenRA.Mods.RA/Missions/MissionUtils.cs @@ -62,6 +62,39 @@ namespace OpenRA.Mods.RA.Missions return Pair.New(chinook, unit); } + public static void Paradrop(World world, Player owner, IEnumerable units, CPos entry, CPos location) + { + var badger = world.CreateActor("badr", new TypeDictionary + { + new LocationInit(entry), + new OwnerInit(owner), + new FacingInit(Util.GetFacing(location - entry, 0)), + new AltitudeInit(Rules.Info["badr"].Traits.Get().CruiseAltitude), + }); + 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 badger = world.CreateActor("badr.bomber", new TypeDictionary + { + new LocationInit(entry), + new OwnerInit(owner), + new FacingInit(Util.GetFacing(location - entry, 0)), + new AltitudeInit(Rules.Info["badr.bomber"].Traits.Get().CruiseAltitude), + }); + badger.Trait().SetTarget(location); + badger.QueueActivity(Fly.ToCell(location)); + badger.QueueActivity(new FlyOffMap()); + badger.QueueActivity(new RemoveSelf()); + } + public static bool AreaSecuredWithUnits(World world, Player player, PPos location, int range) { var units = world.FindAliveCombatantActorsInCircle(location, range).Where(a => a.HasTrait()); diff --git a/mods/ra/maps/allies-02/map.yaml b/mods/ra/maps/allies-02/map.yaml index 1deceaf284..92dbce3e21 100644 --- a/mods/ra/maps/allies-02/map.yaml +++ b/mods/ra/maps/allies-02/map.yaml @@ -1620,11 +1620,11 @@ Actors: Actor457: fenc Location: 42,93 Owner: Allies2 - BadgerDropPoint: waypoint + BadgerDropPoint1: waypoint Location: 19,96 Owner: Neutral BadgerEntryPoint: waypoint - Location: 33,12 + Location: 40,12 Owner: Neutral Actor485: tc03 Location: 41,101 @@ -2252,6 +2252,15 @@ Actors: Location: 38,90 Owner: Allies2 Facing: 0 + BadgerDropPoint2: waypoint + Location: 34,106 + Owner: Neutral + BadgerDropPoint3: waypoint + Location: 26,100 + Owner: Neutral + ParabombPoint: waypoint + Location: 38,107 + Owner: Neutral Smudges: