diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs index bdc7eddc5c..40a70e4ed4 100644 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies02Script.cs @@ -69,6 +69,7 @@ namespace OpenRA.Mods.RA.Missions Actor parabombPoint; Actor sovietRallyPoint; Actor flamersEntryPoint; + Actor tanksEntryPoint; Actor townPoint; Actor sovietTownAttackPoint1; Actor sovietTownAttackPoint2; @@ -110,6 +111,9 @@ namespace OpenRA.Mods.RA.Missions static readonly string[] Flamers = { "e4", "e4", "e4", "e4", "e4" }; const string ApcName = "apc"; + const int TanksTicks = 1500 * 11; + static readonly string[] Tanks = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk" }; + const string SignalFlareName = "flare"; const int AlliedTownTransferRange = 15; @@ -176,6 +180,10 @@ namespace OpenRA.Mods.RA.Missions { RushSovietFlamers(); } + if (world.FrameNumber == TanksTicks) + { + RushSovietTanks(); + } if (world.FrameNumber == ParabombTicks) { MissionUtils.Parabomb(world, soviets, badgerEntryPoint.Location, parabombPoint.Location); @@ -217,12 +225,14 @@ namespace OpenRA.Mods.RA.Missions if (einsteinChinook.Destroyed) { objectives[ExtractEinsteinID].Status = ObjectiveStatus.Failed; + objectives[MaintainPresenceID].Status = ObjectiveStatus.Failed; ObjectivesUpdated(); MissionFailed("The extraction helicopter was destroyed."); } else if (!world.Map.IsInMap(einsteinChinook.Location) && einsteinChinook.Trait().Passengers.Contains(einstein)) { objectives[ExtractEinsteinID].Status = ObjectiveStatus.Completed; + objectives[MaintainPresenceID].Status = ObjectiveStatus.Completed; ObjectivesUpdated(); MissionAccomplished("Einstein was rescued."); } @@ -286,7 +296,7 @@ namespace OpenRA.Mods.RA.Missions foreach (var unit in idleSovietUnitsAtRP) { unit.Trait().Nudge(unit, unit, true); - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(closestAlliedBuilding.Location, 3))); + unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Attack(Target.FromActor(closestAlliedBuilding), 3))); } } } @@ -297,7 +307,7 @@ namespace OpenRA.Mods.RA.Missions var closestAlliedBuilding = ClosestAlliedBuilding(unit, 40); if (closestAlliedBuilding != null) { - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(closestAlliedBuilding.Location, 3))); + unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Attack(Target.FromActor(closestAlliedBuilding), 3))); } } } @@ -343,6 +353,24 @@ namespace OpenRA.Mods.RA.Missions Ui.Root.AddChild(reinforcementsTimerWidget); } + void RushSovietTanks() + { + var closestAlliedBuilding = ClosestAlliedBuilding(badgerDropPoint1, 40); + if (closestAlliedBuilding == null) + { + return; + } + foreach (var tank in Tanks) + { + var unit = world.CreateActor(tank, new TypeDictionary + { + new OwnerInit(soviets), + new LocationInit(tanksEntryPoint.Location) + }); + unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Attack(Target.FromActor(closestAlliedBuilding), 3))); + } + } + void RushSovietFlamers() { var closestAlliedBuilding = ClosestAlliedBuilding(badgerDropPoint1, 40); @@ -446,6 +474,7 @@ namespace OpenRA.Mods.RA.Missions sovietWarFactory = actors["SovietWarFactory"]; sovietRallyPoint = actors["SovietRallyPoint"]; flamersEntryPoint = actors["FlamersEntryPoint"]; + tanksEntryPoint = actors["TanksEntryPoint"]; townPoint = actors["TownPoint"]; sovietTownAttackPoint1 = actors["SovietTownAttackPoint1"]; sovietTownAttackPoint2 = actors["SovietTownAttackPoint2"]; diff --git a/mods/ra/maps/allies-02/map.yaml b/mods/ra/maps/allies-02/map.yaml index 92dbce3e21..57342c9e6b 100644 --- a/mods/ra/maps/allies-02/map.yaml +++ b/mods/ra/maps/allies-02/map.yaml @@ -2261,6 +2261,9 @@ Actors: ParabombPoint: waypoint Location: 38,107 Owner: Neutral + TanksEntryPoint: waypoint + Location: 16,86 + Owner: Neutral Smudges: