diff --git a/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs b/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs new file mode 100644 index 0000000000..8d34c3df9b --- /dev/null +++ b/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs @@ -0,0 +1,245 @@ +#region Copyright & License Information +/* + * Copyright 2007-2011 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 OpenRA.FileFormats; +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 DesertShellmapScriptInfo : TraitInfo, Requires { } + + class DesertShellmapScript : ITick, IWorldLoaded + { + World world; + Player allies; + Player soviets; + Player neutral; + + List viewportTargets = new List(); + int2 viewportTarget; + int viewportTargetNumber; + int2 viewportOrigin; + float mul; + float div = 400; + int waitTicks = 0; + + int nextCivilianMove = 1; + + Actor attackLocation; + Actor coastWP1; + Actor coastWP2; + int coastUnitsLeft; + static readonly string[] CoastUnits = { "e1", "e1", "e2", "e3", "e4" }; + + Actor paradropLZ; + Actor paradropEntry; + static readonly string[] ParadropUnits = { "e1", "e1", "e1", "e2", "e2" }; + + Actor offmapAttackerSpawn1; + Actor offmapAttackerSpawn2; + Actor offmapAttackerSpawn3; + Actor[] offmapAttackerSpawns; + static readonly string[] OffmapAttackers = { "ftrk", "apc", "ttnk", "1tnk" }; + static readonly string[] AttackerCargo = { "e1", "e2", "e3", "e4" }; + + static readonly string[] HeavyTanks = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk" }; + Actor heavyTankSpawn; + Actor heavyTankWP; + static readonly string[] MediumTanks = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "2tnk" }; + Actor mediumTankChronoSpawn; + + Dictionary mapActors; + + Actor chronosphere; + Actor ironCurtain; + + CPos[] mig1Waypoints; + CPos[] mig2Waypoints; + + public void Tick(Actor self) + { + if (world.FrameNumber % 100 == 0) + { + var actor = OffmapAttackers.Random(world.SharedRandom); + var spawn = offmapAttackerSpawns.Random(world.SharedRandom); + var u = world.CreateActor(actor, soviets, spawn.Location, Util.GetFacing(attackLocation.Location - spawn.Location, 0)); + var cargo = u.TraitOrDefault(); + if (cargo != null) + { + while (cargo.HasSpace(1)) + cargo.Load(u, world.CreateActor(false, AttackerCargo.Random(world.SharedRandom), soviets, null, null)); + } + u.QueueActivity(new AttackMove.AttackMoveActivity(u, new Move.Move(attackLocation.Location, 0))); + } + + if (world.FrameNumber % 25 == 0) + foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.IsIdle && !a.IsDead() + && a.HasTrait() && a.HasTrait()).Except(mapActors.Values)) + MissionUtils.AttackNearestLandActor(true, actor, actor.Owner == soviets ? allies : soviets); + + if (world.FrameNumber % 20 == 0 && coastUnitsLeft-- > 0) + { + var u = world.CreateActor(CoastUnits.Random(world.SharedRandom), soviets, coastWP1.Location, null); + u.QueueActivity(new Move.Move(coastWP2.Location, 0)); + u.QueueActivity(new AttackMove.AttackMoveActivity(u, new Move.Move(attackLocation.Location, 0))); + } + + if (world.FrameNumber == nextCivilianMove) + { + var civilians = world.Actors.Where(a => !a.IsDead() && a.IsInWorld && a.Owner == neutral && a.HasTrait()); + if (civilians.Any()) + { + var civilian = civilians.Random(world.SharedRandom); + civilian.Trait().Nudge(civilian, civilian, true); + nextCivilianMove += world.SharedRandom.Next(1, 75); + } + } + + if (world.FrameNumber == 1) + MissionUtils.Paradrop(world, soviets, ParadropUnits, paradropEntry.Location, paradropLZ.Location); + + if (--waitTicks <= 0) + { + if (++mul <= div) + Game.MoveViewport(float2.Lerp(viewportOrigin, viewportTarget, mul / div)); + else + { + mul = 0; + viewportOrigin = viewportTarget; + viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Count)]; + waitTicks = 100; + + if (viewportTargetNumber == 0) + coastUnitsLeft = 15; + if (viewportTargetNumber == 1) + MissionUtils.Paradrop(world, soviets, ParadropUnits, paradropEntry.Location, paradropLZ.Location); + if (viewportTargetNumber == 2) + { + AttackWithHeavyTanks(); + ChronoSpawnMediumTanks(); + } + if (viewportTargetNumber == 4) + { + FlyMigs(mig1Waypoints); + FlyMigs(mig2Waypoints); + } + } + } + + MissionUtils.CapOre(soviets); + } + + void AttackWithHeavyTanks() + { + foreach (var tank in HeavyTanks) + { + var u = world.CreateActor(tank, soviets, heavyTankSpawn.Location, Util.GetFacing(heavyTankWP.Location - heavyTankSpawn.Location, 0)); + u.QueueActivity(new AttackMove.AttackMoveActivity(u, new Move.Move(heavyTankWP.Location, 0))); + } + ironCurtain.Trait().Activate(ironCurtain, new Order { TargetLocation = heavyTankSpawn.Location }); + } + + void ChronoSpawnMediumTanks() + { + var chronoInfo = new List>(); + foreach (var tank in MediumTanks.Select((x, i) => new { x, i })) + { + var u = world.CreateActor(tank.x, allies, mediumTankChronoSpawn.Location, Util.GetFacing(heavyTankWP.Location - mediumTankChronoSpawn.Location, 0)); + chronoInfo.Add(Pair.New(u, new CPos(mediumTankChronoSpawn.Location.X + tank.i, mediumTankChronoSpawn.Location.Y))); + } + RASpecialPowers.Chronoshift(world, chronoInfo, chronosphere, -1, false); + foreach (var tank in chronoInfo) + tank.First.QueueActivity(new AttackMove.AttackMoveActivity(tank.First, new Move.Move(heavyTankSpawn.Location, 0))); + } + + void FlyMigs(CPos[] waypoints) + { + var m = world.CreateActor("mig", new TypeDictionary + { + new OwnerInit(soviets), + new LocationInit(waypoints[0]), + new FacingInit(Util.GetFacing(waypoints[1] - waypoints[0], 0)) + }); + foreach (var waypoint in waypoints) + m.QueueActivity(Fly.ToCell(waypoint)); + m.QueueActivity(new RemoveSelf()); + } + + public void WorldLoaded(World w) + { + world = w; + + allies = w.Players.Single(p => p.InternalName == "Allies"); + soviets = w.Players.Single(p => p.InternalName == "Soviets"); + neutral = w.Players.Single(p => p.InternalName == "Neutral"); + + mapActors = w.WorldActor.Trait().Actors; + + attackLocation = mapActors["AttackLocation"]; + coastWP1 = mapActors["CoastWP1"]; + coastWP2 = mapActors["CoastWP2"]; + paradropLZ = mapActors["ParadropLZ"]; + paradropEntry = mapActors["ParadropEntry"]; + + var t1 = mapActors["ViewportTarget1"]; + var t2 = mapActors["ViewportTarget2"]; + var t3 = mapActors["ViewportTarget3"]; + var t4 = mapActors["ViewportTarget4"]; + var t5 = mapActors["ViewportTarget5"]; + viewportTargets = new[] { t1, t2, t3, t4, t5 }.Select(t => t.Location.ToInt2()).ToList(); + + offmapAttackerSpawn1 = mapActors["OffmapAttackerSpawn1"]; + offmapAttackerSpawn2 = mapActors["OffmapAttackerSpawn2"]; + offmapAttackerSpawn3 = mapActors["OffmapAttackerSpawn3"]; + offmapAttackerSpawns = new[] { offmapAttackerSpawn1, offmapAttackerSpawn2, offmapAttackerSpawn3 }; + + heavyTankSpawn = mapActors["HeavyTankSpawn"]; + heavyTankWP = mapActors["HeavyTankWP"]; + mediumTankChronoSpawn = mapActors["MediumTankChronoSpawn"]; + + chronosphere = mapActors["Chronosphere"]; + ironCurtain = mapActors["IronCurtain"]; + + mig1Waypoints = new[] { mapActors["Mig11"], mapActors["Mig12"], mapActors["Mig13"], mapActors["Mig14"] }.Select(a => a.Location).ToArray(); + mig2Waypoints = new[] { mapActors["Mig21"], mapActors["Mig22"], mapActors["Mig23"], mapActors["Mig24"] }.Select(a => a.Location).ToArray(); + + foreach (var actor in mapActors.Values.Where(a => a.Owner == allies || a.HasTrait())) + { + if (actor.Owner == allies && actor.HasTrait()) + actor.Trait().stance = UnitStance.Defend; + actor.AddTrait(new Invulnerable()); + } + + viewportOrigin = viewportTargets[0]; + viewportTargetNumber = 1; + viewportTarget = viewportTargets[1]; + Game.viewport.Center(viewportOrigin); + Sound.SoundVolumeModifier = 0.25f; + } + } + + class DesertShellmapAutoUnloadInfo : TraitInfo, Requires { } + + class DesertShellmapAutoUnload : INotifyDamage + { + public void Damaged(Actor self, AttackInfo e) + { + var cargo = self.Trait(); + if (!cargo.IsEmpty(self) && !(self.GetCurrentActivity() is UnloadCargo)) + self.QueueActivity(false, new UnloadCargo(true)); + } + } +} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 6909ff4a35..12509ac1d7 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -241,6 +241,7 @@ + diff --git a/mods/ra/maps/desert-shellmap/map.bin b/mods/ra/maps/desert-shellmap/map.bin new file mode 100644 index 0000000000..528047942b Binary files /dev/null and b/mods/ra/maps/desert-shellmap/map.bin differ diff --git a/mods/ra/maps/desert-shellmap/map.yaml b/mods/ra/maps/desert-shellmap/map.yaml new file mode 100644 index 0000000000..1e240cfc5f --- /dev/null +++ b/mods/ra/maps/desert-shellmap/map.yaml @@ -0,0 +1,870 @@ +Selectable: False + +MapFormat: 5 + +RequiresMod: ra + +Title: Desert Shellmap + +Description: Desert Shellmap + +Author: Scott_NZ + +Tileset: DESERT + +MapSize: 128,128 + +Bounds: 1,1,126,126 + +UseAsShellmap: True + +Type: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + Allies: Allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: allies + PlayerReference@Allies: + Name: Allies + Race: allies + ColorRamp: 161,134,200,30 + Allies: Neutral + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Race: soviet + ColorRamp: 3,255,127,28 + Enemies: Allies + +Actors: + Actor0: rock6 + Location: 51,30 + Owner: Neutral + Actor1: rock4 + Location: 38,30 + Owner: Neutral + Actor2: rock5 + Location: 64,20 + Owner: Neutral + Actor3: rock1 + Location: 31,20 + Owner: Neutral + Actor4: rock4 + Location: 25,45 + Owner: Neutral + Actor6: rock2 + Location: 34,42 + Owner: Neutral + Actor5: rock6 + Location: 34,45 + Owner: Neutral + Actor7: t08 + Location: 46,34 + Owner: Neutral + Actor8: oilb + Location: 27,51 + Owner: Neutral + Actor9: tc01 + Location: 97,69 + Owner: Neutral + Actor10: t08 + Location: 63,71 + Owner: Neutral + Actor11: oilb + Location: 24,53 + Owner: Neutral + Actor12: oilb + Location: 49,42 + Owner: Neutral + Actor13: oilb + Location: 60,46 + Owner: Neutral + Actor14: oilb + Location: 67,51 + Owner: Neutral + Actor15: oilb + Location: 59,33 + Owner: Neutral + Actor16: oilb + Location: 41,46 + Owner: Neutral + Actor17: brl3 + Location: 51,42 + Owner: Neutral + Actor18: barl + Location: 43,48 + Owner: Neutral + Actor19: barl + Location: 60,48 + Owner: Neutral + Actor20: barl + Location: 59,48 + Owner: Neutral + Actor21: brl3 + Location: 59,49 + Owner: Neutral + Actor22: barl + Location: 27,54 + Owner: Neutral + Actor23: brl3 + Location: 25,56 + Owner: Neutral + Actor24: barl + Location: 25,55 + Owner: Neutral + Actor25: barl + Location: 69,53 + Owner: Neutral + Actor26: barl + Location: 63,35 + Owner: Neutral + Actor27: barl + Location: 42,45 + Owner: Neutral + Actor28: v20 + Location: 43,66 + Owner: Neutral + Actor29: v24 + Location: 62,74 + Owner: Neutral + Actor30: v27 + Location: 53,66 + Owner: Neutral + Actor31: v23 + Location: 55,66 + Owner: Neutral + Actor32: v21 + Location: 51,66 + Owner: Neutral + Actor33: v29 + Location: 63,65 + Owner: Neutral + Actor34: miss + Location: 54,60 + Owner: Neutral + Actor35: v30 + Location: 51,71 + Owner: Neutral + Actor36: v28 + Location: 50,71 + Owner: Neutral + Actor92: brl3 + Location: 57,55 + Owner: Neutral + Actor38: v28 + Location: 59,68 + Owner: Neutral + Actor39: v27 + Location: 63,68 + Owner: Neutral + Actor40: dome + Location: 55,19 + Owner: Soviets + Actor41: brl3 + Location: 56,43 + Owner: Neutral + Actor42: v25 + Location: 49,68 + Owner: Neutral + Actor43: v29 + Location: 61,71 + Owner: Neutral + Actor44: tc01 + Location: 51,74 + Owner: Neutral + Actor45: v28.gun + Location: 47,63 + Owner: Allies + Actor46: v22.gun + Location: 61,63 + Owner: Allies + Actor47: v27 + Location: 55,65 + Owner: Neutral + Actor48: v27 + Location: 52,69 + Owner: Neutral + Actor49: v26 + Location: 57,71 + Owner: Neutral + Actor51: rock5 + Location: 52,56 + Owner: Neutral + Actor50: apwr + Location: 51,14 + Owner: Soviets + Actor153: apwr + Location: 87,84 + Owner: Allies + Actor63: tsla + Location: 48,31 + Owner: Soviets + Actor56: v23 + Location: 24,36 + Owner: Neutral + Actor57: v27 + Location: 25,34 + Owner: Neutral + Actor59: v29 + Location: 21,28 + Owner: Neutral + Actor58: v21 + Location: 13,26 + Owner: Neutral + Actor61: powr + Location: 36,19 + Owner: Soviets + Actor60: hpad + Location: 46,28 + Owner: Soviets + Actor69: kenn + Location: 43,29 + Owner: Soviets + Actor68: ftur + Location: 34,23 + Owner: Soviets + Actor70: afld + Location: 47,24 + Owner: Soviets + Actor79: barr + Location: 41,27 + Owner: Soviets + Actor80: proc + Location: 37,20 + Owner: Soviets + Actor81: rock7 + Location: 53,19 + Owner: Neutral + Actor73: 2tnk + Location: 61,58 + Owner: Allies + Facing: 190 + Actor85: powr + Location: 49,14 + Owner: Soviets + Actor83: fcom + Location: 42,18 + Owner: Soviets + Actor52: powr + Location: 54,14 + Owner: Soviets + Actor72: 1tnk + Location: 48,62 + Owner: Allies + Facing: 60 + Actor88: t08 + Location: 87,47 + Owner: Neutral + Actor71: 2tnk + Location: 50,57 + Owner: Allies + Facing: 40 + Actor74: 1tnk + Location: 62,62 + Owner: Allies + Facing: 180 + Actor87: tc01 + Location: 92,50 + Owner: Neutral + Actor86: mine + Location: 30,42 + Owner: Neutral + ViewportTarget1: waypoint + Location: 37,76 + Owner: Neutral + ViewportTarget2: waypoint + Location: 70,78 + Owner: Neutral + ViewportTarget3: waypoint + Location: 85,55 + Owner: Neutral + ViewportTarget4: waypoint + Location: 59,33 + Owner: Neutral + ViewportTarget5: waypoint + Location: 38,55 + Owner: Neutral + Actor55: bio + Location: 55,54 + Owner: Neutral + Actor62: apwr + Location: 38,17 + Owner: Soviets + Actor75: 2tnk + Location: 52,63 + Owner: Allies + Facing: 100 + Actor76: 2tnk + Location: 58,64 + Owner: Allies + Facing: 140 + Actor78: jeep + Location: 49,60 + Owner: Allies + Facing: 50 + Actor82: jeep + Location: 61,60 + Owner: Allies + Facing: 190 + Actor89: arty + Location: 56,56 + Owner: Allies + Actor90: arty + Location: 54,56 + Owner: Allies + Actor116: mine + Location: 82,36 + Owner: Neutral + Actor93: ca + Location: 20,86 + Owner: Allies + Facing: 64 + Actor94: ca + Location: 40,90 + Owner: Allies + Facing: 64 + Actor95: rock6 + Location: 10,76 + Owner: Neutral + Actor97: rock2 + Location: 12,75 + Owner: Neutral + AttackLocation: waypoint + Location: 55,61 + Owner: Neutral + CoastWP1: waypoint + Location: 1,79 + Owner: Neutral + CoastWP2: waypoint + Location: 36,81 + Owner: Neutral + Actor64: e1 + Location: 51,63 + Owner: Allies + Actor65: e1 + Location: 53,64 + Owner: Allies + Actor66: e1 + Location: 57,65 + Owner: Allies + Actor77: e1 + Location: 59,64 + Owner: Allies + Actor37: rock5 + Location: 35,43 + Owner: Neutral + Actor67: t08 + Location: 25,44 + Owner: Neutral + Actor109: stek + Location: 113,32 + Owner: Soviets + Actor102: proc + Location: 94,28 + Owner: Soviets + Actor103: apwr + Location: 118,36 + Owner: Soviets + Actor101: apwr + Location: 115,38 + Owner: Soviets + Actor105: silo + Location: 35,21 + Owner: Soviets + Actor110: fcom + Location: 106,44 + Owner: Soviets + Actor111: silo + Location: 96,28 + Owner: Soviets + Actor106: fact + Location: 114,43 + Owner: Soviets + Actor104: apwr + Location: 115,35 + Owner: Soviets + Actor91: apwr + Location: 118,39 + Owner: Soviets + Actor108: tsla + Location: 95,33 + Owner: Soviets + Actor112: ftur + Location: 93,29 + Owner: Soviets + Actor113: ftur + Location: 90,33 + Owner: Soviets + Actor114: ftur + Location: 37,28 + Owner: Soviets + Actor115: tsla + Location: 40,24 + Owner: Soviets + IronCurtain: iron + Location: 110,40 + Owner: Soviets + Actor117: fix + Location: 106,34 + Owner: Soviets + Actor118: weap + Location: 106,29 + Owner: Soviets + Actor119: barr + Location: 102,30 + Owner: Soviets + Actor136: v2rl + Location: 91,40 + Owner: Soviets + Facing: 90 + Actor122: afld + Location: 116,49 + Owner: Soviets + Actor107: hpad + Location: 112,49 + Owner: Soviets + Actor126: tsla + Location: 110,27 + Owner: Soviets + Actor124: dome + Location: 118,46 + Owner: Soviets + Actor125: tsla + Location: 111,43 + Owner: Soviets + Actor127: rock2 + Location: 103,54 + Owner: Neutral + Actor128: rock6 + Location: 99,59 + Owner: Neutral + Actor129: hpad + Location: 99,28 + Owner: Soviets + Actor130: apwr + Location: 119,33 + Owner: Soviets + Actor131: t08 + Location: 121,43 + Owner: Neutral + Actor132: apwr + Location: 116,32 + Owner: Soviets + Actor133: oilb + Location: 76,37 + Owner: Soviets + Actor134: e1 + Location: 74,37 + Owner: Soviets + Actor135: e1 + Location: 77,39 + Owner: Soviets + Actor137: 4tnk + Location: 105,33 + Owner: Soviets + Facing: 100 + Actor123: afld + Location: 119,49 + Owner: Soviets + Actor138: 4tnk + Location: 112,46 + Owner: Soviets + Actor139: 3tnk + Location: 89,32 + Owner: Soviets + Facing: 64 + Actor140: 3tnk + Location: 92,29 + Owner: Soviets + Facing: 20 + Actor141: 3tnk + Location: 36,23 + Owner: Soviets + Actor142: e1 + Location: 40,27 + Owner: Soviets + Actor143: e1 + Location: 49,17 + Owner: Soviets + Actor144: e1 + Location: 113,40 + Owner: Soviets + Actor145: e1 + Location: 102,33 + Owner: Soviets + Actor146: rock2 + Location: 125,37 + Owner: Neutral + Actor147: rock1 + Location: 118,54 + Owner: Neutral + Actor154: pbox.e1 + Location: 70,77 + Owner: Allies + Actor148: pbox.e1 + Location: 70,89 + Owner: Allies + Actor180: pbox.e1 + Location: 83,72 + Owner: Allies + Actor152: 1tnk + Location: 69,85 + Owner: Allies + Facing: 110 + Actor155: apwr + Location: 84,84 + Owner: Allies + ParadropEntry: waypoint + Location: 62,126 + Owner: Neutral + ParadropLZ: waypoint + Location: 62,86 + Owner: Neutral + Actor149: pbox.e1 + Location: 67,84 + Owner: Allies + Actor156: pbox.e1 + Location: 94,91 + Owner: Allies + Actor162: sbag + Location: 76,70 + Owner: Allies + Actor186: 3tnk + Location: 107,50 + Owner: Soviets + Facing: 80 + Actor174: tc01 + Location: 98,37 + Owner: Neutral + Actor184: atek + Location: 75,87 + Owner: Allies + Actor166: sbag + Location: 73,71 + Owner: Allies + Actor168: sbag + Location: 72,72 + Owner: Allies + Actor164: sbag + Location: 74,70 + Owner: Allies + Actor160: agun + Location: 83,80 + Owner: Allies + Facing: 30 + Actor165: sbag + Location: 73,70 + Owner: Allies + Actor161: hpad + Location: 74,72 + Owner: Allies + Actor167: sbag + Location: 73,72 + Owner: Allies + Actor163: sbag + Location: 75,70 + Owner: Allies + Actor169: barr + Location: 109,48 + Owner: Soviets + Actor170: kenn + Location: 104,41 + Owner: Soviets + Actor179: gun + Location: 87,76 + Owner: Allies + Facing: 0 + Actor182: rock6 + Location: 96,45 + Owner: Neutral + Actor120: gun + Location: 77,70 + Owner: Allies + Facing: 20 + Chronosphere: pdox + Location: 78,91 + Owner: Allies + Actor159: tent + Location: 70,81 + Owner: Allies + Actor177: dome + Location: 76,80 + Owner: Allies + Actor178: pbox.e1 + Location: 101,81 + Owner: Allies + Actor181: sbag + Location: 72,74 + Owner: Allies + Actor157: gap + Location: 81,92 + Owner: Allies + Actor187: ftur + Location: 104,47 + Owner: Soviets + Actor176: gun + Location: 71,74 + Owner: Allies + Facing: 30 + Actor175: sbag + Location: 72,73 + Owner: Allies + Actor198: tent + Location: 82,74 + Owner: Allies + Actor188: ftur + Location: 107,52 + Owner: Soviets + Actor54: agun + Location: 76,92 + Owner: Allies + Facing: 150 + Actor172: apwr + Location: 81,87 + Owner: Allies + Actor171: gun + Location: 68,80 + Owner: Allies + Facing: 55 + Actor195: 2tnk + Location: 71,78 + Owner: Allies + Facing: 64 + Actor196: pt + Location: 55,92 + Owner: Allies + Facing: 160 + Actor183: rock2 + Location: 93,41 + Owner: Neutral + Actor185: 3tnk + Location: 105,47 + Owner: Soviets + Actor197: dd + Location: 30,88 + Owner: Allies + Facing: 64 + Actor150: apwr + Location: 81,84 + Owner: Allies + Actor199: e1 + Location: 72,83 + Owner: Allies + Actor200: e1 + Location: 81,73 + Owner: Allies + Actor151: apwr + Location: 87,87 + Owner: Allies + Actor173: apwr + Location: 84,87 + Owner: Allies + Actor84: apwr + Location: 38,9 + Owner: Soviets + Actor96: apwr + Location: 38,12 + Owner: Soviets + Actor98: apwr + Location: 34,12 + Owner: Soviets + Actor99: apwr + Location: 34,9 + Owner: Soviets + Actor100: apwr + Location: 30,12 + Owner: Soviets + Actor189: apwr + Location: 30,9 + Owner: Soviets + Actor190: apwr + Location: 26,12 + Owner: Soviets + Actor191: apwr + Location: 26,9 + Owner: Soviets + Actor192: c1 + Location: 58,67 + Owner: Neutral + Actor193: c2 + Location: 48,68 + Owner: Neutral + Actor194: c3 + Location: 61,73 + Owner: Neutral + Actor201: chan + Location: 56,71 + Owner: Neutral + Actor202: delphi + Location: 54,67 + Owner: Neutral + Actor204: c10 + Location: 53,73 + Owner: Neutral + Actor205: c9 + Location: 51,65 + Owner: Neutral + Actor206: mgg + Location: 52,60 + Owner: Allies + Facing: 200 + Actor207: tran.husk2 + Location: 43,80 + Owner: Allies + Actor208: e7 + Location: 39,81 + Owner: Allies + Facing: 64 + Actor209: e1 + Location: 41,79 + Owner: Allies + Actor210: e1 + Location: 46,80 + Owner: Allies + Actor211: jeep + Location: 41,82 + Owner: Allies + Facing: 90 + Actor212: flare + Location: 43,79 + Owner: Neutral + OffmapAttackerSpawn1: waypoint + Location: 10,1 + Owner: Neutral + OffmapAttackerSpawn2: waypoint + Location: 84,1 + Owner: Neutral + OffmapAttackerSpawn3: waypoint + Location: 1,50 + Owner: Neutral + Actor213: 2tnk + Location: 79,70 + Owner: Allies + Facing: 0 + Actor214: 2tnk + Location: 80,70 + Owner: Allies + Facing: 0 + HeavyTankWP: waypoint + Location: 79,69 + Owner: Neutral + Actor221: powr + Location: 74,84 + Owner: Allies + Actor215: 2tnk + Location: 82,71 + Owner: Allies + Facing: 0 + HeavyTankSpawn: waypoint + Location: 80,50 + Owner: Neutral + Actor216: arty + Location: 74,71 + Owner: Allies + Facing: 0 + MediumTankChronoSpawn: waypoint + Location: 80,65 + Owner: Neutral + Actor220: powr + Location: 76,84 + Owner: Allies + Actor219: gun + Location: 85,70 + Owner: Allies + Actor53: gap + Location: 76,71 + Owner: Allies + Mig11: waypoint + Location: 94,1 + Owner: Neutral + Mig12: waypoint + Location: 68,33 + Owner: Neutral + Mig22: waypoint + Location: 70,35 + Owner: Neutral + Mig13: waypoint + Location: 41,38 + Owner: Neutral + Mig14: waypoint + Location: 1,26 + Owner: Neutral + Mig23: waypoint + Location: 41,40 + Owner: Neutral + Mig24: waypoint + Location: 1,28 + Owner: Neutral + Actor227: 2tnk + Location: 45,62 + Owner: Allies + Facing: 0 + Actor230: e1 + Location: 64,63 + Owner: Allies + Actor229: e1 + Location: 47,62 + Owner: Allies + Actor228: 2tnk + Location: 65,63 + Owner: Allies + Facing: 0 + Mig21: waypoint + Location: 96,3 + Owner: Neutral + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + World: + -CrateDrop: + -SpawnMPUnits: + -MPStartLocations: + DesertShellmapScript: + TRAN.Husk2: + Burns: + Damage: 0 + V22.Gun: + Inherits: V22 + RenderBuilding: + Image: V22 + AutoTarget: + Armament: + Weapon: Dragon + Turreted: + AttackTurreted: + V28.Gun: + Inherits: V28 + RenderBuilding: + Image: V28 + AutoTarget: + Armament: + Weapon: Dragon + Turreted: + AttackTurreted: + APC: + DesertShellmapAutoUnload: + MIG: + Plane: + Speed: 30 + +Sequences: + +Weapons: + 8Inch: + Report: tank6 + 2Inch: + Range: 10 + +Voices: + +Notifications: