diff --git a/OpenRA.Mods.RA/Power/Player/PowerManager.cs b/OpenRA.Mods.RA/Power/Player/PowerManager.cs index 2ef7790bca..05f2a38512 100644 --- a/OpenRA.Mods.RA/Power/Player/PowerManager.cs +++ b/OpenRA.Mods.RA/Power/Player/PowerManager.cs @@ -17,6 +17,8 @@ namespace OpenRA.Mods.RA.Power public class PowerManagerInfo : ITraitInfo, Requires { public readonly int AdviceInterval = 250; + public readonly string SpeechNotification = "LowPower"; + public object Create(ActorInitializer init) { return new PowerManager(init.self, this); } } @@ -118,7 +120,7 @@ namespace OpenRA.Mods.RA.Power if (--nextPowerAdviceTime <= 0) { if (lowPower) - Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", "LowPower", self.Owner.Country.Race); + Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.SpeechNotification, self.Owner.Country.Race); nextPowerAdviceTime = info.AdviceInterval; } diff --git a/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs index d56e8211eb..d459b77d52 100644 --- a/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs +++ b/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs @@ -26,6 +26,13 @@ namespace OpenRA.Mods.RA.Scripting { self.QueueActivity(new Fly(self, Target.FromCell(self.World, cell))); } + + [ScriptActorPropertyActivity] + [Desc("Return to the base, which is either the airfield given, or an auto-selected one otherwise.")] + public void ReturnToBase(Actor airfield = null) + { + self.QueueActivity(new ReturnToBase(self, airfield)); + } } [ScriptPropertyGroup("Combat")] diff --git a/OpenRA.sln b/OpenRA.sln index 77c477abd4..3674cc4943 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -25,22 +25,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Renderer.Sdl2", "Ope EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Mods.Common", "OpenRA.Mods.Common\OpenRA.Mods.Common.csproj", "{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common Lua scripts", "Common Lua scripts", "{FCA943AB-E622-415E-8A61-639D97F62EEC}" - ProjectSection(SolutionItems) = preProject - mods\common\lua\actor.lua = mods\common\lua\actor.lua - mods\common\lua\facing.lua = mods\common\lua\facing.lua - mods\common\lua\map.lua = mods\common\lua\map.lua - mods\common\lua\media.lua = mods\common\lua\media.lua - mods\common\lua\mission.lua = mods\common\lua\mission.lua - mods\common\lua\openra.lua = mods\common\lua\openra.lua - mods\common\lua\production.lua = mods\common\lua\production.lua - mods\common\lua\reinforcements.lua = mods\common\lua\reinforcements.lua - mods\common\lua\rules.lua = mods\common\lua\rules.lua - mods\common\lua\supportpowers.lua = mods\common\lua\supportpowers.lua - mods\common\lua\team.lua = mods\common\lua\team.lua - mods\common\lua\utils.lua = mods\common\lua\utils.lua - EndProjectSection -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tiberian Dawn Lua scripts", "Tiberian Dawn Lua scripts", "{62FCD0D0-6D24-435D-9DD8-3CCADCF7ECAB}" ProjectSection(SolutionItems) = preProject mods\cnc\maps\gdi01\gdi01.lua = mods\cnc\maps\gdi01\gdi01.lua @@ -59,6 +43,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\allies-01\allies01.lua = mods\ra\maps\allies-01\allies01.lua mods\ra\maps\allies-02\allies02.lua = mods\ra\maps\allies-02\allies02.lua mods\ra\maps\allies-03a\allies03a.lua = mods\ra\maps\allies-03a\allies03a.lua + mods\ra\maps\soviet-01\soviet01.lua = mods\ra\maps\soviet-01\soviet01.lua mods\ra\maps\desert-shellmap\desert-shellmap.lua = mods\ra\maps\desert-shellmap\desert-shellmap.lua mods\ra\maps\intervention\intervention.lua = mods\ra\maps\intervention\intervention.lua mods\ra\maps\fort-lonestar\fort-lonestar.lua = mods\ra\maps\fort-lonestar\fort-lonestar.lua diff --git a/mods/ra/maps/soviet-01/map.bin b/mods/ra/maps/soviet-01/map.bin new file mode 100644 index 0000000000..93624ab355 Binary files /dev/null and b/mods/ra/maps/soviet-01/map.bin differ diff --git a/mods/ra/maps/soviet-01/map.png b/mods/ra/maps/soviet-01/map.png new file mode 100644 index 0000000000..e92632f70f Binary files /dev/null and b/mods/ra/maps/soviet-01/map.png differ diff --git a/mods/ra/maps/soviet-01/map.yaml b/mods/ra/maps/soviet-01/map.yaml new file mode 100644 index 0000000000..0aa80801f7 --- /dev/null +++ b/mods/ra/maps/soviet-01/map.yaml @@ -0,0 +1,852 @@ +Selectable: False + +MapFormat: 6 + +RequiresMod: ra + +Title: Soviet 01: Lesson in Blood + +Description: A pitiful excuse for resistance has blockaded itself in this village.\n\nStalin 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. + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 32,47,32,38 + +UseAsShellmap: False + +Type: Campaign + +PreviewVideo: soviet1.vqa + +Options: + Crates: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 0 + ConfigurableStartingUnits: False + +Players: + PlayerReference@France: + Name: France + Race: allies + ColorRamp: 115,115,143 + Allies: Germany, Turkey + Enemies: USSR + PlayerReference@Germany: + Name: Germany + Race: allies + ColorRamp: 0,0,80 + Allies: France, Turkey + Enemies: USSR + NonCombatant: True + PlayerReference@USSR: + Name: USSR + Playable: True + AllowBots: False + Required: True + LockRace: True + Race: soviet + LockColor: True + ColorRamp: 3,255,127 + LockSpawn: True + LockTeam: True + Enemies: France, Germany, Turkey + PlayerReference@Turkey: + Name: Turkey + Race: allies + ColorRamp: 14,123,167 + Allies: France, Germany + Enemies: USSR + NonCombatant: True + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + 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: Germany + Health: 1 + Facing: 0 + Actor52: brl3 + Location: 57,53 + Owner: Germany + 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: Germany + Health: 1 + Facing: 0 + Actor61: barl + Location: 57,54 + Owner: Germany + Health: 1 + Facing: 0 + Actor62: barl + Location: 55,54 + Owner: Germany + 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 + BridgeBarrel: 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: Germany + Health: 1 + Facing: 0 + Actor69: brl3 + Location: 45,52 + Owner: Germany + 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: Germany + Health: 1 + Facing: 0 + Airfield3: afld + Location: 35,81 + Owner: USSR + Health: 1 + Facing: 0 + Powerplant1: powr + Location: 43,82 + Owner: USSR + Health: 1 + Facing: 0 + Actor75: barl + Location: 56,53 + Owner: Germany + Health: 1 + Facing: 0 + Actor76: barl + Location: 58,53 + Owner: Germany + Health: 1 + Facing: 0 + Actor77: brl3 + Location: 59,53 + Owner: Germany + Health: 1 + Facing: 0 + Actor78: brl3 + Location: 54,53 + Owner: Germany + Health: 1 + Facing: 0 + Actor79: barl + Location: 59,56 + Owner: Germany + Health: 1 + Facing: 0 + Actor80: brl3 + Location: 48,66 + Owner: Germany + Health: 1 + Facing: 0 + Actor81: barl + Location: 45,65 + Owner: Germany + Health: 1 + Facing: 0 + Actor82: barl + Location: 34,57 + Owner: Germany + Health: 1 + Facing: 0 + Actor83: brl3 + Location: 35,58 + Owner: Germany + Health: 1 + Facing: 0 + Actor84: barl + Location: 46,67 + Owner: Germany + Health: 1 + Facing: 0 + Actor85: barl + Location: 48,67 + Owner: Germany + Health: 1 + Facing: 0 + Actor86: brl3 + Location: 38,65 + Owner: Germany + Health: 1 + Facing: 0 + Actor87: barl + Location: 40,52 + Owner: Germany + Health: 1 + Facing: 0 + Actor88: barl + Location: 39,64 + Owner: Germany + Health: 1 + Facing: 0 + Actor89: brl3 + Location: 41,53 + Owner: Germany + Health: 1 + Facing: 0 + Actor90: brl3 + Location: 46,66 + Owner: Germany + Health: 1 + Facing: 0 + Airfield1: afld + Location: 39,77 + Owner: USSR + Health: 1 + Facing: 0 + Powerplant2: powr + Location: 45,82 + Owner: USSR + Health: 1 + Facing: 0 + Airfield2: afld + Location: 37,79 + Owner: USSR + Health: 1 + Facing: 0 + Actor94: barl + Location: 35,56 + Owner: Germany + Health: 1 + Facing: 0 + Actor95: brl3 + Location: 38,64 + Owner: Germany + Health: 1 + Facing: 0 + Actor96: brl3 + Location: 34,55 + Owner: Germany + Health: 1 + Facing: 0 + Actor97: barl + Location: 35,55 + Owner: Germany + Health: 1 + Facing: 0 + Actor98: barl + Location: 45,50 + Owner: Germany + 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: Germany + Health: 1 + Facing: 0 + Actor103: brl3 + Location: 43,66 + Owner: Germany + Health: 1 + Facing: 0 + Actor104: barl + Location: 43,67 + Owner: Germany + Health: 1 + Facing: 0 + Actor105: brl3 + Location: 59,57 + Owner: Germany + Health: 1 + Facing: 0 + Actor106: barl + Location: 57,58 + Owner: Germany + Health: 1 + Facing: 0 + Actor107: barl + Location: 58,58 + Owner: Germany + Health: 1 + Facing: 0 + Actor108: brl3 + Location: 59,58 + Owner: Germany + Health: 1 + Facing: 0 + Actor109: brl3 + Location: 56,58 + Owner: Germany + Health: 1 + Facing: 0 + Actor110: barl + Location: 56,59 + Owner: Germany + Health: 1 + Facing: 0 + Actor111: barl + Location: 56,60 + Owner: Germany + Health: 1 + Facing: 0 + Actor112: barl + Location: 41,68 + Owner: Germany + Health: 1 + Facing: 0 + Actor113: barl + Location: 42,67 + Owner: Germany + Health: 1 + Facing: 0 + Actor114: brl3 + Location: 49,55 + Owner: Germany + Health: 1 + Facing: 0 + Actor115: barl + Location: 48,55 + Owner: Germany + Health: 1 + Facing: 0 + Actor116: barl + Location: 47,56 + Owner: Germany + Health: 1 + Facing: 0 + Actor117: brl3 + Location: 46,56 + Owner: Germany + 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: Germany + Health: 1 + Facing: 0 + Actor121: v05 + Location: 48,62 + Owner: France + Health: 0.4140625 + Facing: 0 + Church: 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 + LonelyGuard: e1 + Location: 42,81 + Owner: USSR + Health: 0.1367188 + Facing: 0 + SubCell: 2 + StartJeepMovePoint: waypoint + Location: 47,66 + Owner: Neutral + ParadropEntryPoint1: waypoint + Location: 67,65 + Owner: Neutral + BridgeWaypoint: waypoint + Location: 47,70 + Owner: Neutral + YakEntry: waypoint + Location: 51,84 + Owner: Neutral + Flare: flare + Location: 47,65 + Owner: France + ParadropPoint1: waypoint + Location: 47,67 + Owner: Neutral + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + LuaScript: + Scripts: soviet01.lua + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + -StartGameNotification: + V01: + LeavesHusk: + HuskActor: healcrate + HEALCRATE: + Tooltip: + GenericStancePrefix: false + GenericVisibility: Enemy + ShowOwnerRow: false + ^CivInfantry: + MustBeDestroyed: + ^CivBuilding: + MustBeDestroyed: + ^Plane: + MustBeDestroyed: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Vehicle: + MustBeDestroyed: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Infantry: + MustBeDestroyed: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Husk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + PBOX: + MustBeDestroyed: + JEEP: + Explodes: + JamsRadar: + Range: 10 + YAK: + Buildable: + Prerequisites: ~disabled + MIG: + Buildable: + Prerequisites: ~disabled + AFLD: + AirstrikePower: + Prerequisites: ~disabled + ParatroopersPower: + ChargeTime: 60 + DropItems: E1,E1,E1,E2,E2 + #-RallyPoint: # TODO https://github.com/OpenRA/OpenRA/issues/6818 + +Sequences: + +VoxelSequences: + +Weapons: + +Voices: + +Notifications: + +Translations: \ No newline at end of file diff --git a/mods/ra/maps/soviet-01/soviet01.lua b/mods/ra/maps/soviet-01/soviet01.lua new file mode 100644 index 0000000000..60b8e60fd2 --- /dev/null +++ b/mods/ra/maps/soviet-01/soviet01.lua @@ -0,0 +1,83 @@ +Yaks = { "yak", "yak", "yak" } +Airfields = { Airfield1, Airfield2, Airfield3 } + +InsertYaks = function() + local i = 1 + Utils.Do(Yaks, function(yakType) + local start = YakEntry.CenterPosition + WVec.New(0, (i - 1) * 1536, Actor.CruiseAltitude(yakType)) + local dest = StartJeep.Location + CVec.New(0, 2 * i) + local yak = Actor.Create(yakType, true, { CenterPosition = start, Owner = player, Facing = (Map.CenterOfCell(dest) - start).Facing }) + yak.Move(dest) + yak.ReturnToBase(Airfields[i]) + i = i + i + end) +end + +JeepDemolishingBridge = function() + StartJeep.Move(StartJeepMovePoint.Location) + + Trigger.OnIdle(StartJeep, function() + if not BridgeBarrel.IsDead then + BridgeBarrel.Kill() + end + + local bridge = Map.ActorsInBox(BridgeWaypoint.CenterPosition, Airfield1.CenterPosition, + function(self) return self.Type == "bridge1" end)[1] + + if not bridge.IsDead then + bridge.Kill() + end + end) +end + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + france = Player.GetPlayer("France") + germany = Player.GetPlayer("Germany") + turkey = Player.GetPlayer("Turkey") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Media.PlayMovieFullscreen("flare.vqa", function() + CivilProtectionObjective = france.AddPrimaryObjective("Protect the civilians.") + VillageRaidObjective = player.AddPrimaryObjective("Raze the village.") + JeepDemolishingBridge() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "StartGame") + end) + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlayMovieFullscreen("snstrafe.vqa") + end) + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlayMovieFullscreen("sfrozen.vqa") + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(2), InsertYaks) +end + +Tick = function() + if france.HasNoRequiredUnits() and germany.HasNoRequiredUnits() and turkey.HasNoRequiredUnits() then + player.MarkCompletedObjective(VillageRaidObjective) + end + + if player.HasNoRequiredUnits() then + france.MarkCompletedObjective(CivilProtectionObjective) + end +end \ No newline at end of file diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 603ff73be6..31e303af5c 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -2,3 +2,6 @@ Allied Campaign: ./mods/ra/maps/allies-01 ./mods/ra/maps/allies-02 ./mods/ra/maps/allies-03a +Soviet Campaign: + ./mods/ra/maps/soviet-01 +