diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs index 260abf5f00..3bf7d3f03a 100644 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies02Script.cs @@ -236,10 +236,10 @@ namespace OpenRA.Mods.RA.Missions } if (objectives[DestroySamSitesID].Status == ObjectiveStatus.InProgress) { - if ((sam1.Destroyed || sam1.Owner != soviets) && - (sam2.Destroyed || sam2.Owner != soviets) && - (sam3.Destroyed || sam3.Owner != soviets) && - (sam4.Destroyed || sam4.Owner != soviets)) + if ((sam1.Destroyed || sam1.Owner != soviets) + && (sam2.Destroyed || sam2.Owner != soviets) + && (sam3.Destroyed || sam3.Owner != soviets) + && (sam4.Destroyed || sam4.Owner != soviets)) { objectives[DestroySamSitesID].Status = ObjectiveStatus.Completed; objectives[ExtractEinsteinID].Status = ObjectiveStatus.InProgress; diff --git a/OpenRA.Mods.RA/Missions/Allies03Script.cs b/OpenRA.Mods.RA/Missions/Allies03Script.cs index 0dce6a6cac..9cdce8b569 100644 --- a/OpenRA.Mods.RA/Missions/Allies03Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies03Script.cs @@ -64,12 +64,14 @@ namespace OpenRA.Mods.RA.Missions 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 sovietAirfield1; @@ -78,8 +80,9 @@ namespace OpenRA.Mods.RA.Missions Actor sovietAirfield4; static readonly string[] SovietVehicles = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "ftrk", "ftrk", "apc", "apc", "apc" }; - const int SovietAttackGroupSize = 5; - const int YakTicks = 2000; + const int SovietAttackGroupSize = 3; + const int YakSpawnTicks = 2000; + const int MaxNumberYaks = 4; int attackAtFrame; int attackAtFrameIncrement; @@ -127,7 +130,7 @@ namespace OpenRA.Mods.RA.Missions } if (world.FrameNumber == 1) { - SpawnAlliedUnits(); + SpawnAlliedMcvs(); evacuateWidget = new InfoWidget("", new float2(Game.viewport.Width * 0.35f, Game.viewport.Height * 0.9f)); Ui.Root.AddChild(evacuateWidget); UpdateUnitsEvacuated(); @@ -138,11 +141,16 @@ namespace OpenRA.Mods.RA.Missions attackAtFrame += attackAtFrameIncrement; attackAtFrameIncrement = Math.Max(attackAtFrameIncrement - 5, 100); } - if (world.FrameNumber % YakTicks == 1 && objectives[AirbaseID].Status != ObjectiveStatus.Completed) + if (world.FrameNumber % YakSpawnTicks == 0 && SovietAircraft().Count() < MaxNumberYaks) { - AirStrafe(YakName); + SpawnSovietAircraft(); + } + if (objectives[AirbaseID].Status != ObjectiveStatus.Completed) + { + ManageSovietAircraft(); } ManageSovietUnits(); + ManageSovietAircraft(); ManageSovietOre(); EvacuateAlliedUnits(exit1TopLeft.CenterLocation, exit1BottomRight.CenterLocation, exit1ExitPoint.Location); EvacuateAlliedUnits(exit2TopLeft.CenterLocation, exit2BottomRight.CenterLocation, exit2ExitPoint.Location); @@ -160,51 +168,72 @@ namespace OpenRA.Mods.RA.Missions res.TakeCash(res.Cash); } - void AirStrafe(string withActor) + void ManageSovietAircraft() { - var spawnPoint = world.ChooseRandomEdgeCell(); - var aircraft = world.Actors.Where( - a => a.HasTrait() && a.Trait().FullAmmo() && a.Trait().Altitude == 0 - && a.Owner == soviets && a.IsIdle && a.IsInWorld); - if (aircraft.Count() < 4) + var enemies = world.Actors.Where(u => (u.Owner == allies1 || u.Owner == allies2) && ((u.HasTrait() && !u.HasTrait()) || u.HasTrait()) && u.IsInWorld && !u.IsDead()); + foreach (var a in SovietAircraft()) { - var a = world.CreateActor(withActor, new TypeDictionary - { - new LocationInit(spawnPoint), - new OwnerInit(soviets), - new AltitudeInit(Rules.Info[withActor].Traits.Get().CruiseAltitude) - }); - aircraft = aircraft.Concat(new[] { a }); - } - foreach (var a in aircraft) - { - AirStrafe(a); + var plane = a.Trait(); + var ammo = a.Trait(); + if ((plane.Altitude == 0 && ammo.FullAmmo()) || (plane.Altitude != 0 && ammo.HasAmmo())) + { + if (!a.IsIdle && a.GetCurrentActivity().GetType() != typeof(FlyAttack)) + { + a.CancelActivity(); + } + var enemy = enemies.OrderBy(u => (a.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault(); + if (enemy != null) + { + if (plane.Altitude == 0) + { + plane.UnReserve(); + } + a.QueueActivity(new FlyAttack(Target.FromActor(enemy))); + } + } + else if (plane.Altitude != 0 && !LandIsQueued(a)) + { + a.CancelActivity(); + a.QueueActivity(new ReturnToBase(a, null)); + a.QueueActivity(new ResupplyAircraft()); + } } } - void AirStrafe(Actor self) + bool LandIsQueued(Actor actor) { - var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == allies1 || u.Owner == allies2) && ((u.HasTrait() && !u.HasTrait()) || u.HasTrait())); - var targetEnemy = enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault(); - if (targetEnemy != null && self.Trait().HasAmmo()) + var a = actor.GetCurrentActivity(); + for (;;) { - self.QueueActivity(new FlyAttack(Target.FromActor(targetEnemy))); - self.QueueActivity(new CallFunc(() => AirStrafe(self))); - } - else - { - self.QueueActivity(new FlyOffMap()); - self.QueueActivity(new RemoveSelf()); + if (a == null) { return false; } + if (a.GetType() == typeof(ReturnToBase) || a.GetType() == typeof(Land)) { return true; } + a = a.NextActivity; } } + void SpawnSovietAircraft() + { + var spawnPoint = world.ChooseRandomEdgeCell(); + world.CreateActor(YakName, new TypeDictionary + { + new LocationInit(spawnPoint), + new OwnerInit(soviets), + new AltitudeInit(Rules.Info[YakName].Traits.Get().CruiseAltitude) + }); + } + + IEnumerable SovietAircraft() + { + return world.Actors.Where(a => a.HasTrait() && a.Owner == soviets && a.IsInWorld && !a.IsDead()); + } + void CheckSovietAirbase() { - if (objectives[AirbaseID].Status != ObjectiveStatus.Completed && - (sovietAirfield1.Destroyed || sovietAirfield1.Owner != soviets) && - (sovietAirfield2.Destroyed || sovietAirfield2.Owner != soviets) && - (sovietAirfield3.Destroyed || sovietAirfield3.Owner != soviets) && - (sovietAirfield4.Destroyed || sovietAirfield4.Owner != soviets)) + if (objectives[AirbaseID].Status != ObjectiveStatus.Completed + && (sovietAirfield1.Destroyed || sovietAirfield1.Owner != soviets) + && (sovietAirfield2.Destroyed || sovietAirfield2.Owner != soviets) + && (sovietAirfield3.Destroyed || sovietAirfield3.Owner != soviets) + && (sovietAirfield4.Destroyed || sovietAirfield4.Owner != soviets)) { objectives[AirbaseID].Status = ObjectiveStatus.Completed; OnObjectivesUpdated(true); @@ -255,7 +284,7 @@ namespace OpenRA.Mods.RA.Missions } } - void SpawnAlliedUnits() + void SpawnAlliedMcvs() { var unit = world.CreateActor(McvName, new TypeDictionary { @@ -317,14 +346,14 @@ namespace OpenRA.Mods.RA.Missions allies2 = w.Players.SingleOrDefault(p => p.InternalName == "Allies2"); if (allies2 != null) { - attackAtFrame = 400; - attackAtFrameIncrement = 400; + attackAtFrame = 500; + attackAtFrameIncrement = 500; } else { allies2 = allies1; - attackAtFrame = 500; - attackAtFrameIncrement = 500; + attackAtFrame = 600; + attackAtFrameIncrement = 600; } allies = w.Players.Single(p => p.InternalName == "Allies"); soviets = w.Players.Single(p => p.InternalName == "Soviets"); @@ -344,13 +373,15 @@ namespace OpenRA.Mods.RA.Missions sovietEntryPoint3 = actors["SovietEntryPoint3"]; sovietEntryPoint4 = actors["SovietEntryPoint4"]; sovietEntryPoint5 = actors["SovietEntryPoint5"]; - sovietEntryPoints = new[] { sovietEntryPoint1, sovietEntryPoint2, sovietEntryPoint3, sovietEntryPoint4, sovietEntryPoint5 }.Select(p => p.Location).ToArray(); + 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"]; - sovietRallyPoints = new[] { sovietRallyPoint1, sovietRallyPoint2, sovietRallyPoint3, sovietRallyPoint4, sovietRallyPoint5 }.Select(p => p.Location).ToArray(); + sovietRallyPoint6 = actors["SovietRallyPoint6"]; + sovietRallyPoints = new[] { sovietRallyPoint1, sovietRallyPoint2, sovietRallyPoint3, sovietRallyPoint4, sovietRallyPoint5, sovietRallyPoint6 }.Select(p => p.Location).ToArray(); sovietAirfield1 = actors["SovietAirfield1"]; sovietAirfield2 = actors["SovietAirfield2"]; sovietAirfield3 = actors["SovietAirfield3"]; diff --git a/mods/ra/maps/allies-03/map.bin b/mods/ra/maps/allies-03/map.bin index 577ad8f61d..4badf81d61 100644 Binary files a/mods/ra/maps/allies-03/map.bin and b/mods/ra/maps/allies-03/map.bin differ diff --git a/mods/ra/maps/allies-03/map.yaml b/mods/ra/maps/allies-03/map.yaml index 7cc48942b6..898329510f 100644 --- a/mods/ra/maps/allies-03/map.yaml +++ b/mods/ra/maps/allies-03/map.yaml @@ -114,8 +114,8 @@ Actors: Actor53: tc03 Location: 138,53 Owner: Neutral - Actor2: tc04 - Location: 53,43 + Actor2: tc05 + Location: 64,44 Owner: Neutral Actor57: tc04 Location: 43,19 @@ -528,11 +528,8 @@ Actors: Actor322: t07 Location: 112,65 Owner: Neutral - Actor321: t07 - Location: 93,59 - Owner: Neutral - Actor320: t07 - Location: 95,51 + Actor246: t06 + Location: 94,64 Owner: Neutral Actor303: t06 Location: 101,69 @@ -558,9 +555,6 @@ Actors: Actor360: t11 Location: 122,76 Owner: Neutral - Actor173: oilb - Location: 146,46 - Owner: Neutral Actor187: tc04 Location: 99,27 Owner: Neutral @@ -570,21 +564,12 @@ Actors: Actor203: tc05 Location: 67,64 Owner: Neutral - Actor172: barl - Location: 74,60 - Owner: Neutral - Actor295: t05 - Location: 89,54 - Owner: Neutral Actor350: t10 Location: 87,22 Owner: Neutral Actor17: proc Location: 168,62 Owner: Soviets - Actor170: oilb - Location: 72,58 - Owner: Neutral Actor291: t05 Location: 91,33 Owner: Neutral @@ -606,15 +591,9 @@ Actors: Actor269: t03 Location: 84,37 Owner: Neutral - Actor256: t02 - Location: 106,42 - Owner: Neutral Actor271: t03 Location: 79,57 Owner: Neutral - Actor352: t10 - Location: 88,57 - Owner: Neutral SovietEntryPoint4: waypoint Location: 115,16 Owner: Neutral @@ -624,8 +603,8 @@ Actors: Actor221: tc01 Location: 113,73 Owner: Neutral - Actor224: tc01 - Location: 65,42 + Actor215: t05 + Location: 72,40 Owner: Neutral Actor267: t02 Location: 123,62 @@ -636,9 +615,6 @@ Actors: Actor220: tc01 Location: 117,40 Owner: Neutral - Actor218: tc01 - Location: 89,63 - Owner: Neutral Actor158: tc01 Location: 23,35 Owner: Neutral @@ -654,8 +630,8 @@ Actors: Actor211: tc02 Location: 75,74 Owner: Neutral - Actor215: tc02 - Location: 71,38 + Actor213: tc04 + Location: 55,43 Owner: Neutral Actor214: tc02 Location: 79,47 @@ -663,9 +639,6 @@ Actors: Actor38: t15 Location: 30,52 Owner: Neutral - Actor44: t01 - Location: 55,56 - Owner: Neutral Actor407: t13 Location: 32,62 Owner: Neutral @@ -741,9 +714,6 @@ Actors: Actor55: t01 Location: 37,37 Owner: Neutral - Actor56: t01 - Location: 94,41 - Owner: Neutral Actor760: t03 Location: 175,27 Owner: Neutral @@ -777,9 +747,6 @@ Actors: Actor780: t03 Location: 79,39 Owner: Neutral - Actor171: brl3 - Location: 74,59 - Owner: Neutral Actor398: t05 Location: 32,64 Owner: Neutral @@ -999,26 +966,8 @@ Actors: Exit2ExitPoint: waypoint Location: 16,29 Owner: Neutral - Actor174: oilb - Location: 143,46 - Owner: Neutral - Actor169: oilb - Location: 72,54 - Owner: Neutral - Actor175: brl3 - Location: 148,47 - Owner: Neutral - Actor176: barl - Location: 142,47 - Owner: Neutral - Actor177: brl3 - Location: 142,46 - Owner: Neutral - Actor179: barl - Location: 145,48 - Owner: Neutral - Actor180: barl - Location: 74,56 + Actor177: oilb + Location: 86,52 Owner: Neutral SovietEntryPoint3: waypoint Location: 105,79 @@ -1030,19 +979,19 @@ Actors: Location: 89,79 Owner: Neutral SovietRallyPoint2: waypoint - Location: 94,33 + Location: 93,20 Owner: Neutral SovietRallyPoint1: waypoint - Location: 83,61 + Location: 89,75 Owner: Neutral SovietRallyPoint3: waypoint - Location: 112,49 + Location: 105,75 Owner: Neutral SovietRallyPoint4: waypoint - Location: 116,30 + Location: 115,20 Owner: Neutral SovietRallyPoint5: waypoint - Location: 131,63 + Location: 130,75 Owner: Neutral Actor152: brl3 Location: 157,66 @@ -1158,9 +1107,6 @@ Actors: Actor244: e1 Location: 160,60 Owner: Soviets - Actor245: fenc - Location: 63,33 - Owner: Soviets Actor206: fenc Location: 158,53 Owner: Soviets @@ -1206,220 +1152,242 @@ Actors: Actor202: fenc Location: 147,69 Owner: Soviets - Actor258: fenc - Location: 63,34 - Owner: Soviets - Actor259: fenc - Location: 63,35 - Owner: Soviets - Actor260: fenc - Location: 63,36 - Owner: Soviets - Actor261: fenc - Location: 64,36 - Owner: Soviets - Actor262: fenc - Location: 64,37 - Owner: Soviets - Actor263: fenc - Location: 65,37 - Owner: Soviets - Actor265: fenc - Location: 66,37 - Owner: Soviets - Actor266: fenc - Location: 66,38 - Owner: Soviets - Actor270: fenc - Location: 66,39 - Owner: Soviets - Actor272: fenc - Location: 66,40 - Owner: Soviets - Actor275: fenc - Location: 66,41 - Owner: Soviets - Actor276: fenc - Location: 65,41 - Owner: Soviets - Actor277: fenc - Location: 64,41 - Owner: Soviets - Actor281: fenc - Location: 64,42 - Owner: Soviets - Actor282: ftur - Location: 68,38 - Owner: Soviets - Actor285: e1 - Location: 67,41 - Owner: Soviets - Actor286: e1 - Location: 68,35 - Owner: Soviets - Actor288: e2 - Location: 64,34 - Owner: Soviets - Actor290: dog - Location: 67,42 - Owner: Soviets Actor292: e2 Location: 165,59 Owner: Soviets - Actor293: fenc - Location: 61,63 - Owner: Soviets - Actor297: fenc - Location: 61,65 - Owner: Soviets - Actor299: fenc - Location: 62,65 - Owner: Soviets - Actor300: fenc - Location: 62,66 - Owner: Soviets - Actor294: fenc - Location: 61,64 - Owner: Soviets - Actor308: dog - Location: 61,67 - Owner: Soviets - Actor304: fenc - Location: 62,70 - Owner: Soviets - Actor305: fenc - Location: 62,71 - Owner: Soviets - Actor306: fenc - Location: 62,72 - Owner: Soviets - Actor301: ftur - Location: 64,66 - Owner: Soviets - Actor309: e1 - Location: 63,69 - Owner: Soviets - Actor311: e1 - Location: 62,67 - Owner: Soviets - Actor313: ftur - Location: 130,29 - Owner: Soviets - Actor318: v02 - Location: 91,54 + Actor232: t01 + Location: 72,43 Owner: Neutral - Actor317: v01.sniper - Location: 96,54 - Owner: Soviets - Actor316: e1 - Location: 130,31 - Owner: Soviets - Actor319: fenc - Location: 127,27 - Owner: Soviets - Actor324: fenc - Location: 127,28 - Owner: Soviets - Actor325: fenc - Location: 127,29 - Owner: Soviets - Actor328: fenc - Location: 127,30 - Owner: Soviets - Actor330: v04 - Location: 101,54 + Actor224: tc02 + Location: 58,46 Owner: Neutral - Actor332: v05 - Location: 102,51 + Actor170: mine + Location: 114,55 Owner: Neutral - Actor334: v06 - Location: 91,60 - Owner: Neutral - Actor336: v04 - Location: 87,56 - Owner: Neutral - Actor337: v07 - Location: 106,55 - Owner: Neutral - Actor339: v09 - Location: 92,53 - Owner: Neutral - Actor340: v10 - Location: 94,53 - Owner: Neutral - Actor341: wood - Location: 100,49 - Owner: Neutral - Actor342: wood - Location: 99,49 - Owner: Neutral - Actor343: wood - Location: 98,49 - Owner: Neutral - Actor344: wood - Location: 97,49 - Owner: Neutral - Actor347: wood - Location: 96,49 - Owner: Neutral - Actor348: wood - Location: 95,49 - Owner: Neutral - Actor349: wood - Location: 94,49 - Owner: Neutral - Actor351: wood - Location: 93,49 - Owner: Neutral - Actor353: wood - Location: 92,49 - Owner: Neutral - Actor355: wood - Location: 91,49 - Owner: Neutral - Actor358: v17 - Location: 91,62 - Owner: Neutral - Actor357: tc05 - Location: 88,48 + Actor169: mine + Location: 113,57 Owner: Neutral Allies2MovePoint: waypoint Location: 167,38 Owner: Neutral - Actor359: powr - Location: 104,4 - Owner: Soviets - Actor361: powr - Location: 106,4 - Owner: Soviets - Actor362: powr - Location: 104,7 - Owner: Soviets - Actor413: powr - Location: 106,7 - Owner: Soviets - Actor414: e1 - Location: 98,58 - Owner: Soviets - Actor415: e1 - Location: 90,56 - Owner: Soviets - Actor416: dog - Location: 97,57 - Owner: Soviets - Actor417: e1 - Location: 98,52 - Owner: Soviets Actor3: silo Location: 172,59 Owner: Soviets Actor33: kenn 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 + Actor176: brl3 + Location: 84,51 + Owner: Neutral + Actor172: t10 + Location: 61,50 + Owner: Neutral + Actor256: barl + Location: 88,56 + Owner: Neutral + Actor255: barl + Location: 87,51 + Owner: Neutral + Actor44: t11 + Location: 57,54 + Owner: Neutral + Actor249: t11 + Location: 98,58 + Owner: Neutral + Actor245: tc05 + Location: 106,43 + Owner: Neutral + Actor179: barl + Location: 84,52 + Owner: Neutral + Actor236: brl3 + Location: 87,55 + Owner: Neutral + Actor258: brl3 + Location: 88,51 + Owner: Neutral + Actor212: oilb + Location: 86,56 + Owner: Neutral + Actor174: brl3 + Location: 84,55 + Owner: Neutral + Actor175: barl + Location: 83,55 + Owner: Neutral + Actor173: oilb + Location: 82,56 + Owner: Neutral + Actor56: oilb + Location: 82,52 + Owner: Neutral + 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 Smudges: Rules: + 1TNK.evac: + Inherits: ^Tank + Valued: + Cost: 700 + Tooltip: + Name: Light Tank + Health: + HP: 220 + Armor: + Type: Heavy + Mobile: + Speed: 4 + RevealsShroud: + Range: 4 + Turreted: + ROT: 5 + AttackTurreted: + PrimaryWeapon: 25mm + PrimaryRecoil: 2 + PrimaryRecoilRecovery: 0.5 + RenderUnitTurreted: + Image: 1TNK + AutoTarget: + Explodes: + Weapon: UnitExplodeSmall + EmptyWeapon: UnitExplodeSmall + LeavesHusk: + HuskActor: 1TNK.Husk + 2TNK.evac: + Inherits: ^Tank + Valued: + Cost: 850 + Tooltip: + Name: Medium Tank + Health: + HP: 450 + Armor: + Type: Heavy + Mobile: + Speed: 4 + Crushes: wall, atmine, crate, infantry + RevealsShroud: + Range: 5 + Turreted: + ROT: 5 + AttackTurreted: + PrimaryWeapon: 90mm + PrimaryRecoil: 3 + PrimaryRecoilRecovery: 0.9 + RenderUnitTurreted: + Image: 2TNK + AutoTarget: + Explodes: + Weapon: UnitExplodeSmall + EmptyWeapon: UnitExplodeSmall + LeavesHusk: + HuskActor: 2TNK.Husk + Selectable: + Bounds: 30,30 + TRUK.evac: + Inherits: ^Vehicle + Valued: + Cost: 500 + Tooltip: + Name: Supply Truck + Health: + HP: 110 + Armor: + Type: Light + Mobile: + Speed: 4 + RevealsShroud: + Range: 3 + RenderUnit: + Image: TRUK + AttackMove: + JustMove: yes + JEEP.evac: + Inherits: ^Vehicle + Valued: + Cost: 500 + Tooltip: + Name: Ranger + Health: + HP: 150 + Armor: + Type: Light + Mobile: + Speed: 4 + RevealsShroud: + Range: 8 + Turreted: + ROT: 10 + AttackTurreted: + PrimaryWeapon: M60mg + PrimaryOffset: 0,0,0,-2 + WithMuzzleFlash: + RenderUnitTurreted: + Image: JEEP + AutoTarget: Player: -ConquestVictoryConditions: World: @@ -1468,9 +1436,6 @@ Rules: MSLO: Buildable: Owner: None - GAP: - Buildable: - Owner: None SPEN: Buildable: Owner: None @@ -1492,9 +1457,6 @@ Rules: SAM: Buildable: Owner: None - ATEK: - Buildable: - Owner: None HPAD: Buildable: Owner: None @@ -1531,6 +1493,12 @@ Rules: CTNK: Buildable: Owner: None + MGG: + Buildable: + Queue: Vehicle + BuildPaletteOrder: 150 + Prerequisites: atek + Owner: allies Sequences: