diff --git a/mods/ra/maps/production-disruption/map.bin b/mods/ra/maps/production-disruption/map.bin new file mode 100644 index 0000000000..353a2f3072 Binary files /dev/null and b/mods/ra/maps/production-disruption/map.bin differ diff --git a/mods/ra/maps/production-disruption/map.png b/mods/ra/maps/production-disruption/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/production-disruption/map.png differ diff --git a/mods/ra/maps/production-disruption/map.yaml b/mods/ra/maps/production-disruption/map.yaml new file mode 100644 index 0000000000..4e0d7ead47 --- /dev/null +++ b/mods/ra/maps/production-disruption/map.yaml @@ -0,0 +1,650 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Production Disruption + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 41,7,47,94 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@BadGuy: + Name: BadGuy + Faction: soviet + Color: FF1400 + Allies: USSR + Enemies: Greece + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Allies: BadGuy + Enemies: Greece + PlayerReference@Greece: + Name: Greece + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Enemies: USSR, BadGuy + +Actors: + Actor0: brik + Location: 49,37 + Owner: USSR + Actor1: brik + Location: 50,37 + Owner: USSR + Actor2: brik + Location: 74,37 + Owner: USSR + Actor3: brik + Location: 75,37 + Owner: USSR + Actor4: brik + Location: 49,38 + Owner: USSR + Actor5: brik + Location: 50,38 + Owner: USSR + Actor6: brik + Location: 74,38 + Owner: USSR + Actor7: brik + Location: 75,38 + Owner: USSR + Actor8: brik + Location: 49,39 + Owner: USSR + Actor9: brik + Location: 75,39 + Owner: USSR + Actor10: brik + Location: 49,40 + Owner: USSR + Actor11: brik + Location: 75,40 + Owner: USSR + Actor12: brik + Location: 49,41 + Owner: USSR + Actor13: brik + Location: 75,41 + Owner: USSR + Actor14: brik + Location: 49,42 + Owner: USSR + Actor15: brik + Location: 75,42 + Owner: USSR + Actor16: brik + Location: 49,43 + Owner: USSR + Actor17: brik + Location: 75,43 + Owner: USSR + Actor18: brik + Location: 49,44 + Owner: USSR + Actor19: brik + Location: 75,44 + Owner: USSR + Actor20: brik + Location: 49,45 + Owner: USSR + Actor21: brik + Location: 75,45 + Owner: USSR + Actor22: brik + Location: 49,46 + Owner: USSR + Actor23: brik + Location: 75,46 + Owner: USSR + Actor24: brik + Location: 49,47 + Owner: USSR + Actor25: brik + Location: 75,47 + Owner: USSR + Actor26: brik + Location: 49,48 + Owner: USSR + Actor27: brik + Location: 75,48 + Owner: USSR + Actor28: brik + Location: 49,49 + Owner: USSR + Actor29: brik + Location: 75,49 + Owner: USSR + Actor30: brik + Location: 49,50 + Owner: USSR + Actor31: brik + Location: 50,50 + Owner: USSR + Actor32: brik + Location: 51,50 + Owner: USSR + Actor33: brik + Location: 52,50 + Owner: USSR + Actor34: brik + Location: 53,50 + Owner: USSR + Actor35: brik + Location: 54,50 + Owner: USSR + Actor36: brik + Location: 55,50 + Owner: USSR + Actor37: brik + Location: 56,50 + Owner: USSR + Actor38: brik + Location: 57,50 + Owner: USSR + Actor39: brik + Location: 61,50 + Owner: USSR + Actor40: brik + Location: 62,50 + Owner: USSR + Actor41: brik + Location: 75,50 + Owner: USSR + Actor42: brik + Location: 56,51 + Owner: USSR + Actor43: brik + Location: 57,51 + Owner: USSR + Actor44: brik + Location: 61,51 + Owner: USSR + Actor45: brik + Location: 62,51 + Owner: USSR + Actor46: brik + Location: 63,51 + Owner: USSR + Actor47: brik + Location: 64,51 + Owner: USSR + Actor48: brik + Location: 65,51 + Owner: USSR + Actor49: brik + Location: 66,51 + Owner: USSR + Actor50: brik + Location: 67,51 + Owner: USSR + Actor51: brik + Location: 68,51 + Owner: USSR + Actor52: brik + Location: 69,51 + Owner: USSR + Actor53: brik + Location: 70,51 + Owner: USSR + Actor54: brik + Location: 71,51 + Owner: USSR + Actor55: brik + Location: 72,51 + Owner: USSR + Actor56: brik + Location: 73,51 + Owner: USSR + Actor57: brik + Location: 74,51 + Owner: USSR + Actor58: brik + Location: 75,51 + Owner: USSR + Actor60: brik + Location: 67,73 + Owner: BadGuy + Actor61: brik + Location: 68,73 + Owner: BadGuy + Actor62: brik + Location: 69,73 + Owner: BadGuy + Actor63: brik + Location: 70,73 + Owner: BadGuy + Actor64: brik + Location: 71,73 + Owner: BadGuy + Actor65: brik + Location: 72,73 + Owner: BadGuy + Actor66: brik + Location: 73,73 + Owner: BadGuy + Actor67: brik + Location: 74,73 + Owner: BadGuy + Actor68: brik + Location: 75,73 + Owner: BadGuy + Actor69: brik + Location: 76,73 + Owner: BadGuy + Actor70: brik + Location: 67,74 + Owner: BadGuy + Actor71: brik + Location: 68,74 + Owner: BadGuy + Actor72: brik + Location: 76,74 + Owner: BadGuy + Actor73: brik + Location: 76,75 + Owner: BadGuy + Actor74: brik + Location: 76,76 + Owner: BadGuy + Actor75: brik + Location: 67,77 + Owner: BadGuy + Actor76: brik + Location: 68,77 + Owner: BadGuy + Actor77: brik + Location: 76,77 + Owner: BadGuy + Actor78: brik + Location: 67,78 + Owner: BadGuy + Actor79: brik + Location: 68,78 + Owner: BadGuy + Actor80: brik + Location: 69,78 + Owner: BadGuy + Actor81: brik + Location: 70,78 + Owner: BadGuy + Actor82: brik + Location: 71,78 + Owner: BadGuy + Actor83: brik + Location: 72,78 + Owner: BadGuy + Actor84: brik + Location: 73,78 + Owner: BadGuy + Actor85: brik + Location: 74,78 + Owner: BadGuy + Actor86: brik + Location: 75,78 + Owner: BadGuy + Actor87: brik + Location: 76,78 + Owner: BadGuy + Actor88: t01 + Location: 46,67 + Owner: Neutral + Actor89: tc04 + Location: 46,63 + Owner: Neutral + Actor90: tc05 + Location: 50,71 + Owner: Neutral + Actor91: tc05 + Location: 80,92 + Owner: Neutral + Actor92: tc04 + Location: 67,69 + Owner: Neutral + Actor93: tc02 + Location: 66,79 + Owner: Neutral + Actor94: tc04 + Location: 49,86 + Owner: Neutral + Actor95: tc03 + Location: 50,88 + Owner: Neutral + Actor96: tc01 + Location: 54,77 + Owner: Neutral + Actor97: t17 + Location: 64,73 + Owner: Neutral + Actor98: t16 + Location: 61,86 + Owner: Neutral + Actor99: t15 + Location: 57,89 + Owner: Neutral + Actor100: t13 + Location: 71,93 + Owner: Neutral + Actor101: t14 + Location: 80,84 + Owner: Neutral + Actor102: tc04 + Location: 47,58 + Owner: Neutral + Actor103: tc05 + Location: 78,57 + Owner: Neutral + Actor104: tc03 + Location: 79,60 + Owner: Neutral + Actor105: tc02 + Location: 49,59 + Owner: Neutral + Actor106: tc03 + Location: 45,46 + Owner: Neutral + Actor107: tc04 + Location: 53,50 + Owner: Neutral + Actor108: tc05 + Location: 78,37 + Owner: Neutral + Actor109: tc02 + Location: 75,51 + Owner: Neutral + Actor110: tc01 + Location: 71,58 + Owner: Neutral + Actor111: tc02 + Location: 80,68 + Owner: Neutral + Actor112: tsla + Location: 70,94 + Owner: BadGuy + SubPen: spen + Location: 67,37 + Owner: BadGuy + Actor114: kenn + Location: 61,45 + Owner: USSR + Actor115: barr + Location: 56,46 + Owner: USSR + Actor116: apwr + Location: 53,44 + Owner: USSR + Actor117: apwr + Location: 51,47 + Owner: USSR + Actor118: apwr + Location: 62,47 + Owner: USSR + Actor119: dome + Location: 70,47 + Owner: USSR + Actor120: apwr + Location: 71,41 + Owner: USSR + Actor121: fcom + Location: 51,40 + Owner: USSR + Actor122: apwr + Location: 73,74 + Owner: BadGuy + Actor123: apwr + Location: 69,74 + Owner: BadGuy + FlameTower1: ftur + Location: 62,66 + Owner: USSR + FlameTower2: ftur + Location: 65,66 + Owner: USSR + Actor126: ftur + Location: 57,52 + Owner: USSR + Actor127: ftur + Location: 61,52 + Owner: USSR + Actor128: sam + Location: 55,49 + Owner: USSR + Actor129: sam + Location: 63,50 + Owner: USSR + Actor130: tsla + Location: 63,92 + Owner: BadGuy + Actor131: weap + Location: 66,45 + Owner: USSR + ObjectiveDome: dome + Location: 77,61 + Owner: BadGuy + Church: v01 + Location: 51,58 + Owner: USSR + Actor134: v02 + Location: 49,60 + Owner: USSR + Actor135: v03 + Location: 53,61 + Owner: USSR + Actor136: v05 + Location: 50,63 + Owner: USSR + Actor137: v06 + Location: 55,64 + Owner: USSR + Actor138: v07 + Location: 51,65 + Owner: USSR + Actor139: v08 + Location: 47,63 + Owner: USSR + Actor140: apwr + Location: 85,8 + Owner: BadGuy + Heavy1: 3tnk + Location: 70,45 + Owner: USSR + Facing: 95 + Heavy2: 3tnk + Location: 58,45 + Owner: USSR + Facing: 159 + Actor143: e2 + Location: 67,49 + Owner: USSR + SubCell: 1 + Actor144: dog + Location: 61,47 + Owner: USSR + Facing: 95 + SubCell: 2 + Actor145: e1 + Location: 68,59 + Owner: USSR + Facing: 127 + SubCell: 0 + Actor146: e1 + Location: 67,75 + Owner: BadGuy + Facing: 31 + SubCell: 1 + Actor147: e1 + Location: 67,76 + Owner: BadGuy + Facing: 95 + SubCell: 3 + Actor148: e1 + Location: 71,77 + Owner: BadGuy + Facing: 31 + SubCell: 4 + Actor149: e1 + Location: 74,76 + Owner: BadGuy + Facing: 127 + SubCell: 1 + Actor150: e1 + Location: 72,75 + Owner: BadGuy + Facing: 95 + SubCell: 0 + Actor151: e1 + Location: 77,64 + Owner: USSR + Facing: 159 + SubCell: 1 + Actor152: e1 + Location: 76,62 + Owner: USSR + Facing: 95 + SubCell: 4 + Actor153: e1 + Location: 54,40 + Owner: USSR + SubCell: 3 + Actor154: e1 + Location: 69,40 + Owner: USSR + SubCell: 0 + Actor155: e1 + Location: 68,43 + Owner: USSR + SubCell: 1 + Actor156: e1 + Location: 61,49 + Owner: USSR + SubCell: 1 + Actor157: e1 + Location: 51,44 + Owner: USSR + SubCell: 1 + Actor158: e2 + Location: 54,48 + Owner: USSR + SubCell: 0 + Actor159: e2 + Location: 60,44 + Owner: USSR + SubCell: 2 + Actor160: e2 + Location: 71,39 + Owner: USSR + SubCell: 4 + Rifle1: e1 + Location: 78,81 + Owner: USSR + SubCell: 2 + Rifle2: e1 + Location: 78,79 + Owner: USSR + SubCell: 3 + Rifle3: e1 + Location: 77,80 + Owner: USSR + SubCell: 4 + Rifle4: e1 + Location: 47,71 + Owner: USSR + SubCell: 4 + Rifle5: e1 + Location: 49,71 + Owner: USSR + SubCell: 3 + Rifle6: e1 + Location: 49,70 + Owner: USSR + SubCell: 3 + DefaultCameraPosition: waypoint + Location: 58,86 + Owner: Neutral + TeslaCam: waypoint + Location: 66,94 + Owner: Neutral + LZ: waypoint + Location: 54,85 + Owner: Neutral + Beach1: waypoint + Location: 65,90 + Owner: Neutral + WaterEntry1: waypoint + Location: 66,100 + Owner: Neutral + FlameCam: waypoint + Location: 64,66 + Owner: Neutral + RadarCam: waypoint + Location: 77,63 + Owner: Neutral + ChurchCrate: waypoint + Location: 51,59 + Owner: Neutral + ChronoSpawn1: waypoint + Location: 62,59 + Owner: Neutral + ChronoSpawn2: waypoint + Location: 61,59 + Owner: Neutral + ChronoSpawn3: waypoint + Location: 62,60 + Owner: Neutral + Beach2: waypoint + Location: 83,59 + Owner: Neutral + Beach3: waypoint + Location: 84,64 + Owner: Neutral + WaterEntry2: waypoint + Location: 87,61 + Owner: Neutral + EasyCamera: waypoint + Location: 62,36 + Owner: Neutral + MissileSubSpawn: waypoint + Location: 66,38 + Owner: Neutral + SubPath1: waypoint + Location: 66,33 + Owner: Neutral + SubPath2: waypoint + Location: 63,28 + Owner: Neutral + SubPath3: waypoint + Location: 63,13 + Owner: Neutral + Mammoth: waypoint + Location: 77,39 + Owner: Neutral + V2: waypoint + Location: 66,43 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, rules.yaml diff --git a/mods/ra/maps/production-disruption/production-disruption.lua b/mods/ra/maps/production-disruption/production-disruption.lua new file mode 100644 index 0000000000..3b1ebc0c63 --- /dev/null +++ b/mods/ra/maps/production-disruption/production-disruption.lua @@ -0,0 +1,268 @@ +--[[ + Copyright 2007-2020 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, either version 3 of + the License, or (at your option) any later version. For more + information, see COPYING. +]] +TimerTicks = DateTime.Minutes(12) +LSTType = "lst.reinforcement" +RifleSquad1 = { Rifle1, Rifle2, Rifle3 } +RifleSquad2 = { Rifle4, Rifle5, Rifle6 } +Heavys = { Heavy1, Heavy2 } +FlameTowerWall = { FlameTower1, FlameTower2 } +DemoEngiPath = { WaterEntry1.Location, Beach1.Location } +DemoEngiTeam = { "dtrk", "dtrk", "e6", "e6", "e6" } +SovietWaterEntry1 = { WaterEntry2.Location, Beach2.Location } +SovietWaterEntry2 = { WaterEntry2.Location, Beach3.Location } +SovietSquad = { "e1", "e1", "e1", "e4", "e4" } +V2Squad = { "v2rl", "v2rl" } +SubEscapePath = { SubPath1, SubPath2, SubPath3 } + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +MissionStart = function() + LZCamera = Actor.Create("camera", true, { Owner = Greece, Location = LZ.Location }) + Chalk1.TargetParatroopers(LZ.CenterPosition, Angle.New(740)) + if Map.LobbyOption("difficulty") == "normal" then + Actor.Create("tsla", true, { Owner = USSR, Location = EasyCamera.Location }) + Actor.Create("4tnk", true, { Owner = USSR, Facing = Angle.South, Location = Mammoth.Location }) + Actor.Create("4tnk", true, { Owner = USSR, Facing = Angle.South, Location = Mammoth.Location + CVec.New(1,0) }) + Actor.Create("v2rl", true, { Owner = USSR, Facing = Angle.South, Location = V2.Location }) + end + + Trigger.AfterDelay(DateTime.Seconds(1), function() + Chalk2.TargetParatroopers(LZ.CenterPosition, Angle.New(780)) + end) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + UnitsArrived = true + TeslaCamera = Actor.Create("camera", true, { Owner = Greece, Location = TeslaCam.Location }) + end) + + Trigger.AfterDelay(DateTime.Seconds(10), function() + LZCamera.Destroy() + Utils.Do(RifleSquad1, function(actor) + if not actor.IsDead then + actor.AttackMove(LZ.Location) + IdleHunt(actor) + end + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(15), function() + TeslaCamera.Destroy() + Utils.Do(RifleSquad2, function(actor) + if not actor.IsDead then + actor.AttackMove(LZ.Location) + IdleHunt(actor) + end + end) + end) +end + +SetupTriggers = function() + Trigger.OnDamaged(SubPen, function() + Utils.Do(Heavys, function(actor) + if not actor.IsDead then + IdleHunt(actor) + end + end) + end) + + Trigger.OnKilled(Church, function() + Actor.Create("healcrate", true, { Owner = Greece, Location = ChurchCrate.Location }) + end) + + Trigger.OnKilled(ObjectiveDome, function() + if not DomeCaptured == true then + Greece.MarkFailedObjective(CaptureDome) + end + end) + + Trigger.OnAllKilled(FlameTowerWall, function() + DomeCam = Actor.Create("camera", true, { Owner = Greece, Location = RadarCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(5), function() + DomeCam.Destroy() + end) + end) + + Trigger.OnKilledOrCaptured(SubPen, function() + Greece.MarkCompletedObjective(StopProduction) + end) +end + +PowerDown = false +PowerDownTeslas = function() + if not PowerDown then + CaptureDome = Greece.AddObjective("Capture the enemy radar dome.", "Secondary", false) + Greece.MarkCompletedObjective(PowerDownTeslaCoils) + Media.PlaySpeechNotification(Greece, "ReinforcementsArrived") + PowerDown = true + + local bridge = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge1" end)[1] + if not bridge.IsDead then + bridge.Kill() + end + + local demoEngis = Reinforcements.ReinforceWithTransport(Greece, LSTType, DemoEngiTeam, DemoEngiPath, { DemoEngiPath[1] })[2] + Trigger.OnAllRemovedFromWorld(Utils.Where(demoEngis, function(a) return a.Type == "e6" end), function() + if not DomeCaptured then + Greece.MarkFailedObjective(CaptureDome) + end + if not DomeCaptured and bridge.IsDead then + Greece.MarkFailedObjective(StopProduction) + end + end) + + Trigger.OnCapture(ObjectiveDome, function() + DomeCaptured = true + Greece.MarkCompletedObjective(CaptureDome) + SendChronos() + end) + + FlameTowersCam = Actor.Create("camera", true, { Owner = Greece, Location = FlameCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + FlameTowersCam.Destroy() + end) + end +end + +SendChronos = function() + Trigger.AfterDelay(DateTime.Seconds(3), function() + local sovietWaterSquad1 = Reinforcements.ReinforceWithTransport(USSR, "lst", SovietSquad, { WaterEntry2.Location, Beach2.Location }, { WaterEntry2.Location })[2] + Utils.Do(sovietWaterSquad1, function(a) + Trigger.OnAddedToWorld(a, function() + IdleHunt(a) + end) + end) + + Actor.Create("ctnk", true, { Owner = Greece, Location = ChronoSpawn1.Location }) + Actor.Create("ctnk", true, { Owner = Greece, Location = ChronoSpawn2.Location }) + Actor.Create("ctnk", true, { Owner = Greece, Location = ChronoSpawn3.Location }) + Actor.Create("camera", true, { Owner = Greece, Location = EasyCamera.Location }) + Media.PlaySound("chrono2.aud") + end) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + local sovietWaterSquad2 = Reinforcements.ReinforceWithTransport(USSR, "lst", SovietSquad, { WaterEntry2.Location, Beach3.Location }, { WaterEntry2.Location })[2] + Utils.Do(sovietWaterSquad2, function(a) + Trigger.OnAddedToWorld(a, function() + a.AttackMove(FlameCam.Location) + IdleHunt(a) + end) + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(13), function() + local sovietWaterSquad2 = Reinforcements.ReinforceWithTransport(USSR, "lst", V2Squad, { WaterEntry2.Location, Beach2.Location }, { WaterEntry2.Location })[2] + Utils.Do(sovietWaterSquad2, function(a) + Trigger.OnAddedToWorld(a, function() + a.AttackMove(FlameCam.Location) + IdleHunt(a) + end) + end) + end) +end + +MissileSubEscape = function() + local missileSub = Actor.Create("msub", true, { Owner = USSR, Location = MissileSubSpawn.Location }) + Actor.Create("camera", true, { Owner = Greece, Location = SubPath2.Location }) + DestroySub = Greece.AddPrimaryObjective("Destroy the submarine before it escapes!.") + + Utils.Do(SubEscapePath, function(waypoint) + missileSub.Move(waypoint.Location) + end) + + Trigger.OnEnteredFootprint({ SubPath3.Location }, function(a, id) + if a.Owner == USSR and a.Type == "msub" then + Trigger.RemoveFootprintTrigger(id) + USSR.MarkCompletedObjective(EscapeWithSub) + end + end) + + Trigger.OnKilled(missileSub, function() + Greece.MarkCompletedObjective(DestroySub) + end) +end + +FinishTimer = function() + for i = 0, 5 do + local c = TimerColor + if i % 2 == 0 then + c = HSLColor.White + end + + Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("The sub is heading for open sea!", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(6), function() UserInterface.SetMissionText("") end) +end + +UnitsArrived = false +TimerFinished = false +ticked = TimerTicks +Tick = function() + if BadGuy.PowerState ~= "Normal" then + PowerDownTeslas() + end + + if Greece.HasNoRequiredUnits() and UnitsArrived then + USSR.MarkCompletedObjective(EscapeWithSub) + end + + if ticked > 0 then + UserInterface.SetMissionText("Submarine completes in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 and not TimerFinished then + MissileSubEscape() + TimerFinished = true + end +end + +WorldLoaded = function() + Greece = Player.GetPlayer("Greece") + USSR = Player.GetPlayer("USSR") + BadGuy = Player.GetPlayer("BadGuy") + + EscapeWithSub = USSR.AddObjective("Get a missile sub to open waters.") + StopProduction = Greece.AddObjective("Destroy the Soviet sub pen.") + PowerDownTeslaCoils = Greece.AddObjective("Take down power to the tesla coils.") + + Trigger.OnObjectiveAdded(Greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(Greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(Greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerLost(Greece, function() + Media.PlaySpeechNotification(Greece, "Lose") + end) + Trigger.OnPlayerWon(Greece, function() + Media.PlaySpeechNotification(Greece, "Win") + end) + + Trigger.AfterDelay(DateTime.Minutes(2), function() + Media.PlaySpeechNotification(Greece, "TenMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(7), function() + Media.PlaySpeechNotification(Greece, "WarningFiveMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(9), function() + Media.PlaySpeechNotification(Greece, "WarningThreeMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(11), function() + Media.PlaySpeechNotification(Greece, "WarningOneMinuteRemaining") + end) + + Camera.Position = DefaultCameraPosition.CenterPosition + TimerColor = USSR.Color + Chalk1 = Actor.Create("chalk1", false, { Owner = Greece }) + Chalk2 = Actor.Create("chalk2", false, { Owner = Greece }) + MissionStart() + SetupTriggers() +end diff --git a/mods/ra/maps/production-disruption/rules.yaml b/mods/ra/maps/production-disruption/rules.yaml new file mode 100644 index 0000000000..b84753ae52 --- /dev/null +++ b/mods/ra/maps/production-disruption/rules.yaml @@ -0,0 +1,42 @@ +World: + LuaScript: + Scripts: production-disruption.lua + MissionData: + WinVideo: battle.vqa + LossVideo: slntsrvc.vqa + Briefing: The Soviets are beginning construction of a new class of submarine capable of launching sea-to-ground missiles. We don't have to tell you the amount of devestation these could cause.\n\nTake a small squad of troops and infiltrate their power grid. When it is down, additional reinforcements will be sent in. When ready, head north and destroy their Sub pen, preventing further construction of these subs.\n\nIf any are built, they must not be allowed to escape! + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + Default: easy + +CHALK1: + ParatroopersPower: + DisplayBeacon: False + DropItems: E1, E1, E1, E1, E1 + AlwaysVisible: + +CHALK2: + ParatroopersPower: + DisplayBeacon: False + DropItems: E3, E3, E3, E3, MEDI + AlwaysVisible: + +LST.Reinforcement: + Inherits: LST + RejectsOrders: + -Buildable: + -Selectable: + RenderSprites: + Image: lst + Interactable: + +MSUB: + -Cloak: + -GrantConditionOnDamageState@UNCLOAK: + -Targetable@UNDERWATER: + Targetable: + -RequiresCondition: diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 4273251e2f..53881f7610 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -29,6 +29,7 @@ Counterstrike: soviet-soldier-volkov-n-chitzkoi top-o-the-world Aftermath: + production-disruption monster-tank-madness OpenRA Originals: evacuation