diff --git a/OpenRA.Mods.RA/LimitedAmmo.cs b/OpenRA.Mods.RA/LimitedAmmo.cs index 2360889c17..f09d9776fb 100644 --- a/OpenRA.Mods.RA/LimitedAmmo.cs +++ b/OpenRA.Mods.RA/LimitedAmmo.cs @@ -1,4 +1,4 @@ -#region Copyright & License Information +#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 @@ -41,10 +41,16 @@ namespace OpenRA.Mods.RA ++ammo; return true; } + public bool TakeAmmo() + { + if (ammo <= 0) return false; + --ammo; + return true; + } public int ReloadTimePerAmmo() { return Info.ReloadTicks; } - public void Attacking(Actor self, Target target) { --ammo; } + public void Attacking(Actor self, Target target) { TakeAmmo(); } public IEnumerable GetPips(Actor self) { diff --git a/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs b/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs new file mode 100644 index 0000000000..1540bbb8e2 --- /dev/null +++ b/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OpenRA.Traits; +using System.Drawing; +using OpenRA.Mods.RA.Move; +using OpenRA.Mods.RA.Buildings; +using OpenRA.Network; +using OpenRA.Scripting; +using OpenRA.FileFormats; +using OpenRA.Mods.RA.Air; +using OpenRA.Mods.RA.Activities; + +namespace OpenRA.Mods.RA.Missions +{ + class Soviet01ClassicScriptInfo : TraitInfo, Requires { } + + class Soviet01ClassicScript : IHasObjectives, IWorldLoaded, ITick + { + public event ObjectivesUpdatedEventHandler OnObjectivesUpdated = notify => { }; + + public IEnumerable Objectives { get { return objectives.Values; } } + + Dictionary objectives = new Dictionary + { + { DestroyID, new Objective(ObjectiveType.Primary, Destroy, ObjectiveStatus.InProgress) } + }; + + const int DestroyID = 0; + const string Destroy = "A pitiful excuse for resistance has blockaded itself in this village. Stalin has decided to make an example of them. Kill them all and destroy their homes. You will have Yak aircraft to use in teaching these rebels a lesson."; + + World world; + + Player ussr; + Player france; + + Actor startJeep; + Actor startJeepMovePoint; + + Actor airfield1; + Actor airfield2; + Actor airfield3; + Actor[] airfields; + + void MissionFailed() + { + if (ussr.WinState != WinState.Undefined) + { + return; + } + ussr.WinState = WinState.Lost; + foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == ussr && !a.IsDead())) + { + actor.Kill(actor); + } + Sound.Play("misnlst1.aud"); + } + + void MissionAccomplished() + { + if (ussr.WinState != WinState.Undefined) + { + return; + } + ussr.WinState = WinState.Won; + Sound.Play("misnwon1.aud"); + } + + public void Tick(Actor self) + { + var unitsAndBuildings = world.Actors.Where(a => !a.IsDead() && a.IsInWorld && (a.HasTrait() || (a.HasTrait() && !a.HasTrait()))); + if (!unitsAndBuildings.Any(a => a.Owner == france)) + { + objectives[DestroyID].Status = ObjectiveStatus.Completed; + MissionAccomplished(); + } + else if (!unitsAndBuildings.Any(a => a.Owner == ussr)) + { + objectives[DestroyID].Status = ObjectiveStatus.Failed; + MissionFailed(); + } + } + + void LandYaks() + { + foreach (var airfield in airfields) + { + var entry = airfield.Location - new CVec(10, 0); + var yak = world.CreateActor("yak", new TypeDictionary + { + new OwnerInit(ussr), + new LocationInit(entry), + new FacingInit(Util.GetFacing(airfield.Location - entry, 0)), + new AltitudeInit(Rules.Info["yak"].Traits.Get().CruiseAltitude) + }); + while (yak.Trait().TakeAmmo()) { } + yak.QueueActivity(new ReturnToBase(yak, airfield)); + yak.QueueActivity(new ResupplyAircraft()); + } + } + + void MoveJeep() + { + startJeep.QueueActivity(new MoveAdjacentTo(Target.FromActor(startJeepMovePoint))); + startJeep.QueueActivity(new CallFunc(() => + { + var bridge = world.Actors + .Where(a => a.HasTrait() && !a.IsDead()) + .OrderBy(a => (startJeep.CenterLocation - a.CenterLocation).LengthSquared) + .First(); + Combat.DoExplosion(bridge, "Demolish", bridge.CenterLocation, 0); + world.WorldActor.Trait().AddEffect(15, bridge.CenterLocation.ToFloat2(), 6); + bridge.Kill(bridge); + })); + } + + public void WorldLoaded(World w) + { + world = w; + ussr = w.Players.Single(p => p.InternalName == "USSR"); + france = w.Players.Single(p => p.InternalName == "France"); + var actors = w.WorldActor.Trait().Actors; + startJeep = actors["StartJeep"]; + startJeepMovePoint = actors["StartJeepMovePoint"]; + airfield1 = actors["Airfield1"]; + airfield2 = actors["Airfield2"]; + airfield3 = actors["Airfield3"]; + airfields = new[] { airfield1, airfield2, airfield3 }; + Game.MoveViewport(startJeep.Location.ToFloat2()); + Game.ConnectionStateChanged += StopMusic; + Media.PlayFMVFullscreen(w, "soviet1.vqa", () => + { + PlayMusic(); + LandYaks(); + MoveJeep(); + }); + } + + void PlayMusic() + { + if (!Rules.InstalledMusic.Any()) + { + return; + } + var track = Rules.InstalledMusic.Random(Game.CosmeticRandom); + Sound.PlayMusicThen(track.Value, PlayMusic); + } + + void StopMusic(OrderManager orderManager) + { + if (!orderManager.GameStarted) + { + Sound.StopMusic(); + Game.ConnectionStateChanged -= StopMusic; + } + } + } +} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 44b945aedf..c88eb29ed0 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -247,6 +247,7 @@ + diff --git a/mods/ra/maps/soviet-01-classic/map.bin b/mods/ra/maps/soviet-01-classic/map.bin new file mode 100644 index 0000000000..93624ab355 Binary files /dev/null and b/mods/ra/maps/soviet-01-classic/map.bin differ diff --git a/mods/ra/maps/soviet-01-classic/map.yaml b/mods/ra/maps/soviet-01-classic/map.yaml new file mode 100644 index 0000000000..1cb85964b0 --- /dev/null +++ b/mods/ra/maps/soviet-01-classic/map.yaml @@ -0,0 +1,920 @@ +Selectable: True + +MapFormat: 5 + +RequiresMod: ra + +Title: Soviet 01 (Classic) + +Description: Lesson in Blood + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 32,47,32,38 + +UseAsShellmap: False + +Type: Campaign + +Players: + PlayerReference@GoodGuy: + Name: GoodGuy + Race: allies + ColorRamp: 161,134,236,30 + Allies: France,Germany,Turkey + Enemies: USSR + PlayerReference@France: + Name: France + Race: allies + ColorRamp: 115,115,143,16 + Allies: GoodGuy,Germany,Turkey + Enemies: USSR + PlayerReference@Germany: + Name: Germany + Race: allies + ColorRamp: 0,0,80,5 + Allies: GoodGuy,France,Turkey + Enemies: USSR + PlayerReference@USSR: + Name: USSR + Playable: True + AllowBots: False + LockRace: True + Race: soviet + LockColor: True + ColorRamp: 3,255,127,28 + LockSpawn: True + LockTeam: True + Enemies: GoodGuy,France,Germany,Turkey + PlayerReference@Turkey: + Name: Turkey + Race: allies + ColorRamp: 14,123,167,28 + Allies: GoodGuy,France,Germany + Enemies: USSR + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: allies + +Actors: + Actor0: wood + Location: 44,50 + Owner: Neutral + Actor1: wood + Location: 44,51 + Owner: Neutral + Actor2: wood + Location: 44,52 + Owner: Neutral + Actor3: wood + Location: 44,53 + Owner: Neutral + Actor4: wood + Location: 45,53 + Owner: Neutral + Actor5: wood + Location: 56,65 + Owner: Neutral + Actor6: v14 + Location: 54,66 + Owner: Neutral + Actor7: v14 + Location: 55,66 + Owner: Neutral + Actor8: wood + Location: 56,66 + Owner: Neutral + Actor9: wood + Location: 53,67 + Owner: Neutral + Actor10: wood + Location: 55,67 + Owner: Neutral + Actor11: wood + Location: 56,67 + Owner: Neutral + Actor12: wood + Location: 45,69 + Owner: Neutral + Actor13: wood + Location: 46,69 + Owner: Neutral + Actor14: wood + Location: 47,69 + Owner: Neutral + Actor15: wood + Location: 45,70 + Owner: Neutral + Actor16: wood + Location: 51,70 + Owner: Neutral + Actor17: wood + Location: 53,71 + Owner: Neutral + Actor18: wood + Location: 52,72 + Owner: Neutral + Actor19: wood + Location: 53,72 + Owner: Neutral + Actor20: t16 + Location: 53,52 + Owner: Neutral + Actor21: tc03 + Location: 60,61 + Owner: Neutral + Actor22: tc01 + Location: 48,47 + Owner: Neutral + Actor23: t06 + Location: 73,59 + Owner: Neutral + Actor24: t01 + Location: 49,74 + Owner: Neutral + Actor25: t14 + Location: 60,69 + Owner: Neutral + Actor26: t16 + Location: 59,72 + Owner: Neutral + Actor27: t14 + Location: 60,72 + Owner: Neutral + Actor28: t07 + Location: 62,72 + Owner: Neutral + Actor29: t10 + Location: 54,74 + Owner: Neutral + Actor30: tc02 + Location: 46,49 + Owner: Neutral + Actor31: t01 + Location: 53,57 + Owner: Neutral + Actor32: tc05 + Location: 41,51 + Owner: Neutral + Actor33: t06 + Location: 44,53 + Owner: Neutral + Actor34: t01 + Location: 44,70 + Owner: Neutral + Actor35: t16 + Location: 52,72 + Owner: Neutral + Actor36: tc02 + Location: 32,51 + Owner: Neutral + Actor37: tc04 + Location: 32,55 + Owner: Neutral + Actor38: tc05 + Location: 32,60 + Owner: Neutral + Actor39: tc02 + Location: 42,57 + Owner: Neutral + Actor40: tc02 + Location: 43,68 + Owner: Neutral + Actor41: tc01 + Location: 42,67 + Owner: Neutral + Actor42: tc04 + Location: 32,72 + Owner: Neutral + Actor43: tc03 + Location: 51,77 + Owner: Neutral + Actor44: tc01 + Location: 39,72 + Owner: Neutral + Actor45: t17 + Location: 35,76 + Owner: Neutral + Actor46: t15 + Location: 59,75 + Owner: Neutral + Actor47: tc03 + Location: 35,65 + Owner: Neutral + Actor48: t01 + Location: 35,56 + Owner: Neutral + Actor49: t10 + Location: 47,59 + Owner: Neutral + Actor50: t08 + Location: 48,64 + Owner: Neutral + Actor51: barl + Location: 33,54 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor52: brl3 + Location: 57,53 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor53: v08 + Location: 41,54 + Owner: France + Health: 0.5195313 + Facing: 0 + Actor54: v07 + Location: 54,65 + Owner: France + Health: 0.4375 + Facing: 0 + Actor55: v07 + Location: 38,52 + Owner: France + Health: 0.4375 + Facing: 0 + Actor56: v06 + Location: 46,51 + Owner: France + Health: 0.9921875 + Facing: 0 + Actor57: v05 + Location: 36,55 + Owner: France + Health: 0.5 + Facing: 0 + Actor58: v04 + Location: 35,51 + Owner: France + Health: 0.3515625 + Facing: 0 + Actor59: v02 + Location: 36,57 + Owner: France + Health: 0.5625 + Facing: 0 + Actor60: brl3 + Location: 34,52 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor61: barl + Location: 57,54 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor62: barl + Location: 55,54 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor63: brl3 + Location: 51,72 + Owner: Germany + Health: 1 + Facing: 0 + Actor64: brl3 + Location: 51,71 + Owner: Germany + Health: 1 + Facing: 0 + Actor65: brl3 + Location: 47,71 + Owner: Germany + Health: 1 + Facing: 0 + Actor66: barl + Location: 46,71 + Owner: Germany + Health: 1 + Facing: 0 + Actor67: barl + Location: 47,70 + Owner: Germany + Health: 1 + Facing: 0 + Actor68: brl3 + Location: 43,50 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor69: brl3 + Location: 45,52 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor70: barl + Location: 41,51 + Owner: France + Health: 1 + Facing: 0 + Actor71: barl + Location: 50,72 + Owner: Germany + Health: 1 + Facing: 0 + Actor72: barl + Location: 42,50 + Owner: GoodGuy + Health: 1 + Facing: 0 + Airfield1: afld.noproduction + Location: 35,81 + Owner: USSR + Health: 1 + Facing: 0 + Actor74: powr + Location: 43,82 + Owner: USSR + Health: 1 + Facing: 0 + Actor75: barl + Location: 56,53 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor76: barl + Location: 58,53 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor77: brl3 + Location: 59,53 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor78: brl3 + Location: 54,53 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor79: barl + Location: 59,56 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor80: brl3 + Location: 48,66 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor81: barl + Location: 45,65 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor82: barl + Location: 34,57 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor83: brl3 + Location: 35,58 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor84: barl + Location: 46,67 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor85: barl + Location: 48,67 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor86: brl3 + Location: 38,65 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor87: barl + Location: 40,52 + Owner: GoodGuy + Health: 0.09765625 + Facing: 0 + Actor88: barl + Location: 39,64 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor89: brl3 + Location: 41,53 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor90: brl3 + Location: 46,66 + Owner: GoodGuy + Health: 1 + Facing: 0 + Airfield2: afld.noproduction + Location: 39,77 + Owner: USSR + Health: 1 + Facing: 0 + Actor92: powr + Location: 45,82 + Owner: USSR + Health: 1 + Facing: 0 + Airfield3: afld.noproduction + Location: 37,79 + Owner: USSR + Health: 1 + Facing: 0 + Actor94: barl + Location: 35,56 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor95: brl3 + Location: 38,64 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor96: brl3 + Location: 34,55 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor97: barl + Location: 35,55 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor98: barl + Location: 45,50 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor99: v04 + Location: 58,54 + Owner: France + Health: 0.4140625 + Facing: 0 + Actor100: v02 + Location: 56,54 + Owner: France + Health: 0.7070313 + Facing: 0 + Actor101: dome + Location: 45,79 + Owner: USSR + Health: 1 + Facing: 0 + Actor102: barl + Location: 46,61 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor103: brl3 + Location: 43,66 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor104: barl + Location: 43,67 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor105: brl3 + Location: 59,57 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor106: barl + Location: 57,58 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor107: barl + Location: 58,58 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor108: brl3 + Location: 59,58 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor109: brl3 + Location: 56,58 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor110: barl + Location: 56,59 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor111: barl + Location: 56,60 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor112: barl + Location: 41,68 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor113: barl + Location: 42,67 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor114: brl3 + Location: 49,55 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor115: barl + Location: 48,55 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor116: barl + Location: 47,56 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor117: brl3 + Location: 46,56 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor118: pbox + Location: 46,55 + Owner: France + Health: 1 + Facing: 0 + Actor119: pbox + Location: 48,54 + Owner: France + Health: 1 + Facing: 0 + Actor120: barl + Location: 34,51 + Owner: GoodGuy + Health: 1 + Facing: 0 + Actor121: v05 + Location: 48,62 + Owner: France + Health: 0.4140625 + Facing: 0 + Actor122: v01 + Location: 40,63 + Owner: France + Health: 0.5390625 + Facing: 0 + Actor123: jeep + Location: 46,52 + Owner: France + Health: 0.6640625 + Facing: 96 + StartJeep: jeep + Location: 44,76 + Owner: France + Health: 0.5195313 + Facing: 32 + Actor125: jeep + Location: 55,57 + Owner: France + Health: 1 + Facing: 160 + Actor126: jeep + Location: 39,65 + Owner: France + Health: 0.625 + Facing: 64 + Actor127: c9 + Location: 50,64 + Owner: France + Health: 1 + Facing: 192 + SubCell: 1 + Actor128: c8 + Location: 47,61 + Owner: France + Health: 1 + Facing: 0 + SubCell: 3 + Actor129: c8 + Location: 41,50 + Owner: Turkey + Health: 1 + Facing: 224 + SubCell: 3 + Actor130: c6 + Location: 46,61 + Owner: France + Health: 1 + Facing: 128 + SubCell: 2 + Actor131: c5 + Location: 46,61 + Owner: France + Health: 1 + Facing: 0 + SubCell: 1 + Actor132: c4 + Location: 44,67 + Owner: France + Health: 1 + Facing: 96 + SubCell: 1 + Actor133: c2 + Location: 40,54 + Owner: France + Health: 1 + Facing: 160 + SubCell: 2 + Actor134: c2 + Location: 45,61 + Owner: France + Health: 1 + Facing: 64 + SubCell: 4 + Actor135: e1 + Location: 54,60 + Owner: France + Health: 1 + Facing: 160 + SubCell: 4 + Actor136: e1 + Location: 49,60 + Owner: France + Health: 1 + Facing: 128 + SubCell: 2 + Actor137: c5 + Location: 45,51 + Owner: France + Health: 1 + Facing: 224 + SubCell: 0 + Actor138: e1 + Location: 34,58 + Owner: France + Health: 1 + Facing: 96 + SubCell: 0 + Actor139: e1 + Location: 53,54 + Owner: France + Health: 1 + Facing: 128 + SubCell: 2 + Actor140: e1 + Location: 58,56 + Owner: France + Health: 1 + Facing: 128 + SubCell: 1 + Actor141: e1 + Location: 58,52 + Owner: France + Health: 1 + Facing: 160 + SubCell: 0 + Actor142: e1 + Location: 54,64 + Owner: France + Health: 1 + Facing: 160 + SubCell: 3 + Actor143: c7 + Location: 56,54 + Owner: France + Health: 1 + Facing: 0 + SubCell: 3 + Actor144: e1 + Location: 40,51 + Owner: France + Health: 1 + Facing: 160 + SubCell: 0 + Actor145: e1 + Location: 35,53 + Owner: France + Health: 1 + Facing: 96 + SubCell: 1 + Actor146: e1 + Location: 35,54 + Owner: France + Health: 1 + Facing: 0 + SubCell: 4 + Actor147: e1 + Location: 43,64 + Owner: France + Health: 1 + Facing: 96 + SubCell: 0 + Actor148: e1 + Location: 56,63 + Owner: France + Health: 1 + Facing: 192 + SubCell: 2 + Actor149: e1 + Location: 40,67 + Owner: France + Health: 1 + Facing: 32 + SubCell: 4 + Actor150: e1 + Location: 42,81 + Owner: USSR + Health: 0.1367188 + Facing: 0 + SubCell: 2 + waypoint3: waypoint + Location: 47,51 + Owner: Neutral + waypoint6: waypoint + Location: 58,55 + Owner: Neutral + waypoint10: waypoint + Location: 48,62 + Owner: Neutral + waypoint14: waypoint + Location: 66,47 + Owner: Neutral + waypoint15: waypoint + Location: 58,54 + Owner: Neutral + waypoint16: waypoint + Location: 47,66 + Owner: Neutral + StartJeepMovePoint: waypoint + Location: 49,68 + Owner: Neutral + waypoint18: waypoint + Location: 54,64 + Owner: Neutral + waypoint19: waypoint + Location: 55,64 + Owner: Neutral + waypoint20: waypoint + Location: 67,65 + Owner: Neutral + waypoint21: waypoint + Location: 58,57 + Owner: Neutral + waypoint22: waypoint + Location: 66,73 + Owner: Neutral + waypoint23: waypoint + Location: 49,51 + Owner: Neutral + waypoint24: waypoint + Location: 54,60 + Owner: Neutral + waypoint25: waypoint + Location: 35,59 + Owner: Neutral + waypoint37: waypoint + Location: 61,68 + Owner: Neutral + waypoint44: waypoint + Location: 34,47 + Owner: Neutral + waypoint57: waypoint + Location: 38,57 + Owner: Neutral + waypoint67: waypoint + Location: 39,59 + Owner: Neutral + waypoint72: waypoint + Location: 47,70 + Owner: Neutral + waypoint78: waypoint + Location: 39,67 + Owner: Neutral + waypoint79: waypoint + Location: 52,60 + Owner: Neutral + waypoint81: waypoint + Location: 42,82 + Owner: Neutral + waypoint82: waypoint + Location: 44,77 + Owner: Neutral + waypoint84: waypoint + Location: 32,70 + Owner: Neutral + waypoint94: waypoint + Location: 47,65 + Owner: Neutral + waypoint95: waypoint + Location: 47,67 + Owner: Neutral + waypoint96: waypoint + Location: 37,58 + Owner: Neutral + waypoint98: waypoint + Location: 44,79 + Owner: Neutral + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + PlayerResources: + InitialCash: 0 + World: + -CrateDrop: + -SpawnMPUnits: + -MPStartLocations: + Soviet01ClassicScript: + MissionObjectivesPanel: + ObjectivesPanel: MISSION_OBJECTIVES + V01: + ContainsCrate: + CRATE: + GiveCashCrateAction: + SelectionShares: 0 + LevelUpCrateAction: + SelectionShares: 0 + ExplodeCrateAction@fire: + SelectionShares: 0 + ExplodeCrateAction@boom: + SelectionShares: 0 + ExplodeCrateAction@nuke: + SelectionShares: 0 + HideMapCrateAction: + SelectionShares: 0 + HealUnitsCrateAction: + SelectionShares: 10000 + RevealMapCrateAction: + SelectionShares: 0 + SupportPowerCrateAction@parabombs: + SelectionShares: 0 + GiveMcvCrateAction: + SelectionShares: 0 + GiveUnitCrateAction@jeep: + SelectionShares: 0 + GiveUnitCrateAction@arty: + SelectionShares: 0 + GiveUnitCrateAction@v2rl: + SelectionShares: 0 + GiveUnitCrateAction@1tnk: + SelectionShares: 0 + GiveUnitCrateAction@2tnk: + SelectionShares: 0 + GiveUnitCrateAction@3tnk: + SelectionShares: 0 + GiveUnitCrateAction@4tnk: + SelectionShares: 0 + AFLD.NoProduction: + Inherits: ^Building + Valued: + Cost: 500 + Tooltip: + Name: Airfield + Building: + Power: -20 + Footprint: xxx xxx + Dimensions: 3,2 + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 7 + Exit@1: + SpawnOffset: 0,4 + ExitCell: 1,1 + Facing: 192 + RenderBuilding: + Image: AFLD + BelowUnits: + Reservable: + YAK: + Plane: + RearmBuildings: afld.noproduction + +Sequences: + +Weapons: + +Voices: + +Notifications: