diff --git a/mods/ra/maps/siberian-conflict-1-fresh-tracks/fresh-tracks.lua b/mods/ra/maps/siberian-conflict-1-fresh-tracks/fresh-tracks.lua new file mode 100644 index 0000000000..01a2fea450 --- /dev/null +++ b/mods/ra/maps/siberian-conflict-1-fresh-tracks/fresh-tracks.lua @@ -0,0 +1,282 @@ +--[[ + 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(8) +Squad1 = { FirstSquad1, FirstSquad2, FirstSquad3 } +Squad2 = { SecondSquad1, SecondSquad2, SecondSquad3 } +PatrolMammothPath = { Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location } +ConvoyEscape = { CPos.New(113, 42), CPos.New(117, 71) } + +IdleHunt = function(actor) if not actor.IsDead then Trigger.OnIdle(actor, actor.Hunt) end end + +ConvoyUnits = +{ + easy = { { "e2", "e2", "e2", "truk", "truk", "truk" }, { "3tnk", "3tnk", "truk", "truk", "truk" } }, + normal = { { "3tnk", "3tnk", "3tnk", "truk", "truk", "truk" }, { "3tnk", "v2rl", "e2", "e1", "e1", "truk", "truk", "truk" } }, + hard = { { "3tnk", "3tnk", "3tnk", "3tnk", "truk", "truk", "truk" }, { "3tnk", "v2rl", "v2rl", "e1", "e1", "e4", "e4", "truk", "truk", "truk", "4tnk" }, { "ttnk", "ttnk", "ttnk", "shok", "shok", "shok", "shok", "truk", "truk", "truk" } } +} + +BaseConvoyUnits = { "3tnk", "ttnk", "ttnk", "ttnk", "truk", "truk", "truk" } +FinalConvoyUnits = { "3tnk", "3tnk", "3tnk", "3tnk", "truk", "truk", "truk", "4tnk" } + +AttackPaths = +{ + { ExitNorth.Location }, + { ExitEast.Location }, + { AttackEntry1.Location }, + { AttackEntry2.Location } +} + +AttackWaveUnits = { { "3tnk", "3tnk" }, { "e1", "e1", "e1", "e2", "e2", "e4", "e4" }, { "shok", "shok", "shok", "shok", "shok" }, { "ttnk", "ttnk" }, { "4tnk", "e1", "e1", "e2" }, { "v2rl", "v2rl", "ftrk", "ftrk", "ftrk" } } + +ConvoyPaths = +{ + { NorthwestEntry.Location, NorthwestPath1.Location, NorthwestBridge.Location, Patrol7.Location, Patrol6.Location, NortheastBridge.Location, NorthwestPath3.Location, ExitNorth.Location }, + { CenterEntry.Location, CenterPath1.Location, CenterPath2.Location, Patrol1.Location, Patrol7.Location, Patrol6.Location, NortheastBridge.Location, NorthwestPath3.Location, ExitNorth.Location }, + { CenterEntry.Location, CenterPath1.Location, CenterPath2.Location, Patrol1.Location, Patrol2.Location, SouthPath2.Location, SoutheastBridge.Location, SouthPath3.Location, ExitEast.Location }, + { SouthEntry.Location, SouthPath1.Location, Patrol2.Location, SouthPath2.Location, SoutheastBridge.Location, SouthPath3.Location, ExitEast.Location } +} + +BaseConvoyPath = { BaseEntry.Location, BasePath1.Location, CenterPath2.Location, Patrol1.Location, Patrol7.Location, Patrol6.Location, NortheastBridge.Location, NorthwestPath3.Location, ExitNorth.Location } +FinalConvoyPath = { NorthEntry.Location, Patrol7.Location, Patrol6.Location, Patrol5.Location, FinalConvoy1.Location, ExitEast.Location } + +OpeningMoves = function() + Utils.Do(Squad1, function(actor) + actor.AttackMove(AlliedBase.Location) + end) + + Utils.Do(Squad2, function(actor) + actor.AttackMove(AlliedBase.Location) + end) + + PatrolMammoth.Patrol(PatrolMammothPath, true, 10) +end + +AttackWaveDelays = +{ + easy = { DateTime.Seconds(40), DateTime.Seconds(80) }, + normal = { DateTime.Seconds(30), DateTime.Seconds(60) }, + hard = { DateTime.Seconds(20), DateTime.Seconds(40) } +} + +AttackWaves = function() + local attackpath = Utils.Random(AttackPaths) + local attackers = Reinforcements.Reinforce(USSR, Utils.Random(AttackWaveUnits), { attackpath[1] }) + Utils.Do(attackers, function(unit) + Trigger.OnAddedToWorld(unit, function() + unit.AttackMove(AlliedBase.Location) + IdleHunt(unit) + end) + end) + + Trigger.AfterDelay(Utils.RandomInteger(AttackWaveDelay[1], AttackWaveDelay[2]), AttackWaves) +end + +ConvoyWaves = +{ + easy = 2, + normal = 3, + hard = 4 +} +ConvoysPassed = 0 + +SendConvoys = function() + ConvoysSent = true + Media.PlaySpeechNotification(Allies, "ConvoyApproaching") + local path = Utils.Random(ConvoyPaths) + local units = Reinforcements.Reinforce(USSR, Utils.Random(ConvoyUnits), { path[1] }) + local lastWaypoint = path[#path] + Utils.Do(units, function(unit) + Trigger.OnAddedToWorld(unit, function() + if unit.Type == "truk" then + Utils.Do(path, function(waypoint) + unit.Move(waypoint) + end) + + Trigger.OnIdle(unit, function() + unit.Move(lastWaypoint) + end) + else + unit.Patrol(path) + Trigger.OnIdle(unit, function() + unit.AttackMove(lastWaypoint) + end) + end + end) + end) + + ConvoysPassed = ConvoysPassed + 1 + if ConvoysPassed <= ConvoyWaves[Map.LobbyOption("difficulty")] then + Trigger.AfterDelay(DateTime.Seconds(90), SendConvoys) + else + FinalTrucks() + end +end + +FinalTrucks = function() + Trigger.AfterDelay(DateTime.Minutes(1), function() + Media.PlaySpeechNotification(Allies, "ConvoyApproaching") + local basePath = BaseConvoyPath + local baseWaypoint = basePath[#basePath] + local baseConvoy = Reinforcements.Reinforce(USSR, BaseConvoyUnits, { basePath[1] }) + Utils.Do(baseConvoy, function(unit) + Trigger.OnAddedToWorld(unit, function() + Utils.Do(basePath, function(waypoint) + unit.Move(waypoint) + end) + + Trigger.OnIdle(unit, function() + unit.Move(baseWaypoint) + end) + end) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(2), function() + Media.PlaySpeechNotification(Allies, "ConvoyApproaching") + local finalPath = FinalConvoyPath + local finalWaypoint = finalPath[#finalPath] + local finalConvoy = Reinforcements.Reinforce(USSR, FinalConvoyUnits, { finalPath[1] }) + Utils.Do(finalConvoy, function(unit) + Trigger.OnAddedToWorld(unit, function() + Utils.Do(finalPath, function(waypoint) + unit.Move(waypoint) + end) + + Trigger.OnIdle(unit, function() + unit.Move(finalWaypoint) + end) + end) + end) + + Trigger.OnAllKilled(Utils.Where(finalConvoy, function(a) return a.Type == "truk" end), function() + Allies.MarkCompletedObjective(StopTrucks) + end) + end) +end + +ConvoyExit = function() + Trigger.OnEnteredFootprint(ConvoyEscape, function(actor, id) + if actor.Owner == USSR and actor.Type == "truk" then + actor.Stop() + actor.Destroy() + Allies.MarkFailedObjective(StopTrucks) + elseif actor.Owner == USSR and actor.Type ~= "truk" then + actor.Stop() + actor.Destroy() + end + end) +end + +BridgeTriggers = function() + Trigger.OnKilled(BridgeBarrel1, function() + local theNorthEastBridge = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge2" end)[1] + if not theNorthEastBridge.IsDead then + theNorthEastBridge.Kill() + end + end) + + Trigger.OnKilled(BridgeBarrel2, function() + local theNorthwestBridge = Map.ActorsInBox(NorthwestPath1.CenterPosition, NorthEntry.CenterPosition, function(self) return self.Type == "bridge1" end)[1] + if not theNorthwestBridge.IsDead then + theNorthwestBridge.Kill() + end + end) + + Trigger.OnKilled(BridgeBarrel3, function() + local theSoutheastBridge = Map.ActorsInBox(SoutheastBridge.CenterPosition, SouthPath3.CenterPosition, function(self) return self.Type == "bridge1" end)[1] + if not theSoutheastBridge.IsDead then + theSoutheastBridge.Kill() + end + end) + + AllThreeBridges = Utils.Where(Map.ActorsInWorld, function(actor) + return + actor.Type == "bridge1" or + actor.Type == "bridge2" + end) + + Trigger.OnAllKilled(AllThreeBridges, function() + Allies.MarkCompletedObjective(DestroyBridges) + 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 first trucks are entering your AO.", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(6), function() UserInterface.SetMissionText("") end) +end + +ticked = TimerTicks +ConvoysSent = false +Tick = function() + if ticked > 0 then + UserInterface.SetMissionText("First trucks arrive in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 and not ConvoysSent then + SendConvoys() + FinishTimer() + end + + if Allies.HasNoRequiredUnits() then + USSR.MarkCompletedObjective(SovietObj) + end +end + +WorldLoaded = function() + Allies = Player.GetPlayer("Allies") + USSR = Player.GetPlayer("USSR") + + SovietObj = USSR.AddObjective("Defeat the Allies.") + StopTrucks = Allies.AddObjective("Destroy all Soviet convoy trucks.") + DestroyBridges = Allies.AddObjective("Destroy the nearby bridges to slow the\nconvoys down.", "Secondary", false) + + Trigger.OnObjectiveAdded(Allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(Allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(Allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerLost(Allies, function() + Media.PlaySpeechNotification(Allies, "Lose") + end) + Trigger.OnPlayerWon(Allies, function() + Media.PlaySpeechNotification(Allies, "Win") + end) + + Trigger.AfterDelay(DateTime.Minutes(3), function() + Media.PlaySpeechNotification(Allies, "WarningFiveMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(5), function() + Media.PlaySpeechNotification(Allies, "WarningThreeMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(7), function() + Media.PlaySpeechNotification(Allies, "WarningOneMinuteRemaining") + end) + + Camera.Position = AlliedBase.CenterPosition + TimerColor = Allies.Color + OpeningMoves() + Trigger.AfterDelay(DateTime.Seconds(30), AttackWaves) + ConvoyExit() + BridgeTriggers() + + local difficulty = Map.LobbyOption("difficulty") + ConvoyUnits = ConvoyUnits[difficulty] + AttackWaveDelay = AttackWaveDelays[difficulty] +end diff --git a/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.bin b/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.bin new file mode 100644 index 0000000000..458e15ad67 Binary files /dev/null and b/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.bin differ diff --git a/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.png b/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.png differ diff --git a/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.yaml b/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.yaml new file mode 100644 index 0000000000..cec1cd38eb --- /dev/null +++ b/mods/ra/maps/siberian-conflict-1-fresh-tracks/map.yaml @@ -0,0 +1,672 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Siberian Conflict 1: Fresh Tracks + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 28,42,90,46 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + PlayerReference@Allies: + Name: Allies + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: England + Enemies: USSR + PlayerReference@England: + Name: England + Faction: allies + Color: A0F08C + Allies: Allies + Enemies: USSR + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Enemies: Allies, England + +Actors: + Actor0: brik + Location: 39,72 + Owner: Allies + Actor1: brik + Location: 40,72 + Owner: Allies + Actor2: brik + Location: 41,72 + Owner: Allies + Actor3: brik + Location: 42,72 + Owner: Allies + Actor4: brik + Location: 43,72 + Owner: Allies + Actor5: brik + Location: 44,72 + Owner: Allies + Actor6: brik + Location: 45,72 + Owner: Allies + Actor7: brik + Location: 46,72 + Owner: Allies + Actor8: brik + Location: 47,72 + Owner: Allies + Actor9: brik + Location: 48,72 + Owner: Allies + Actor10: brik + Location: 39,73 + Owner: Allies + Actor11: brik + Location: 40,73 + Owner: Allies + Actor12: brik + Location: 47,73 + Owner: Allies + Actor13: brik + Location: 48,73 + Owner: Allies + Actor14: brik + Location: 48,74 + Owner: Allies + Actor15: brik + Location: 47,75 + Owner: Allies + Actor16: brik + Location: 48,75 + Owner: Allies + Actor17: brik + Location: 47,76 + Owner: Allies + Actor18: brik + Location: 48,76 + Owner: Allies + Actor19: brik + Location: 47,82 + Owner: Allies + Actor20: brik + Location: 48,82 + Owner: Allies + Actor21: brik + Location: 47,83 + Owner: Allies + Actor22: brik + Location: 48,83 + Owner: Allies + Actor23: brik + Location: 47,84 + Owner: Allies + Actor24: brik + Location: 48,84 + Owner: Allies + Actor25: brik + Location: 47,85 + Owner: Allies + Actor26: brik + Location: 48,85 + Owner: Allies + Actor27: tc05 + Location: 42,85 + Owner: Neutral + Actor28: tc04 + Location: 28,68 + Owner: Neutral + Actor29: t16 + Location: 28,60 + Owner: Neutral + Actor30: t15 + Location: 30,71 + Owner: Neutral + Actor31: tc03 + Location: 32,86 + Owner: Neutral + Actor32: tc01 + Location: 28,86 + Owner: Neutral + Actor33: t01 + Location: 28,80 + Owner: Neutral + Actor34: tc05 + Location: 30,49 + Owner: Neutral + Actor35: tc03 + Location: 28,51 + Owner: Neutral + Actor36: tc03 + Location: 105,85 + Owner: Neutral + Actor37: tc04 + Location: 81,83 + Owner: Neutral + Actor38: tc05 + Location: 73,43 + Owner: Neutral + Actor39: tc04 + Location: 64,42 + Owner: Neutral + Actor40: tc05 + Location: 84,85 + Owner: Neutral + Actor41: t15 + Location: 104,41 + Owner: Neutral + Actor42: tc03 + Location: 74,86 + Owner: Neutral + Actor43: tc05 + Location: 56,54 + Owner: Neutral + Actor44: tc04 + Location: 70,58 + Owner: Neutral + Actor45: tc02 + Location: 71,47 + Owner: Neutral + Actor46: tc04 + Location: 50,43 + Owner: Neutral + Actor47: tc04 + Location: 44,54 + Owner: Neutral + Actor48: tc04 + Location: 88,54 + Owner: Neutral + Actor49: tc03 + Location: 83,54 + Owner: Neutral + Actor50: tc03 + Location: 112,51 + Owner: Neutral + Actor51: tc01 + Location: 115,53 + Owner: Neutral + Actor52: tc05 + Location: 88,72 + Owner: Neutral + Actor53: tc04 + Location: 82,72 + Owner: Neutral + Actor54: tc02 + Location: 86,74 + Owner: Neutral + Actor55: tc02 + Location: 101,71 + Owner: Neutral + Actor56: tc03 + Location: 102,73 + Owner: Neutral + Actor57: tc05 + Location: 96,79 + Owner: Neutral + Actor58: tc03 + Location: 51,56 + Owner: Neutral + Actor59: tc02 + Location: 52,57 + Owner: Neutral + Actor60: t14 + Location: 97,61 + Owner: Neutral + Actor61: tc01 + Location: 28,77 + Owner: Neutral + Actor62: tc03 + Location: 28,42 + Owner: Neutral + Actor63: tc04 + Location: 31,45 + Owner: Neutral + Actor64: tc04 + Location: 31,60 + Owner: Neutral + Actor65: t01 + Location: 89,42 + Owner: Neutral + Actor66: tc05 + Location: 99,42 + Owner: Neutral + Actor67: t15 + Location: 109,78 + Owner: Neutral + Actor68: tc05 + Location: 112,79 + Owner: Neutral + Actor69: tc03 + Location: 113,82 + Owner: Neutral + Actor70: tc01 + Location: 52,66 + Owner: Neutral + Actor71: t14 + Location: 53,69 + Owner: Neutral + Actor72: t02 + Location: 92,46 + Owner: Neutral + Actor73: tc02 + Location: 77,84 + Owner: Neutral + Actor74: t06 + Location: 74,60 + Owner: Neutral + Actor75: tc04 + Location: 107,81 + Owner: Neutral + Actor76: t16 + Location: 110,83 + Owner: Neutral + Actor77: t07 + Location: 88,50 + Owner: Neutral + Actor78: t01 + Location: 77,80 + Owner: Neutral + Actor79: tc05 + Location: 115,56 + Owner: Neutral + Actor80: tc02 + Location: 113,75 + Owner: Neutral + Actor81: tc02 + Location: 107,54 + Owner: Neutral + Actor82: t16 + Location: 117,43 + Owner: Neutral + Actor83: t14 + Location: 108,51 + Owner: Neutral + Actor84: t06 + Location: 115,63 + Owner: Neutral + Actor85: t10 + Location: 45,41 + Owner: Neutral + Actor86: tc01 + Location: 48,68 + Owner: Neutral + Actor87: t17 + Location: 50,69 + Owner: Neutral + Actor88: tc01 + Location: 70,65 + Owner: Neutral + Actor183: proc + Location: 44,73 + Owner: Allies + Actor184: proc + Location: 41,73 + Owner: Allies + Actor90: tent + Location: 39,74 + Owner: Allies + Actor91: apwr + Location: 32,81 + Owner: Allies + Actor92: hbox + Location: 38,72 + Owner: Allies + Actor93: hbox + Location: 48,77 + Owner: Allies + Actor94: weap + Location: 43,80 + Owner: Allies + Actor95: pbox + Location: 39,80 + Owner: Allies + Actor96: gun + Location: 48,81 + Owner: Allies + Facing: 159 + Actor97: gun + Location: 34,72 + Owner: Allies + Facing: 223 + Actor100: fix + Location: 39,82 + Owner: Allies + Actor102: dome + Location: 36,78 + Owner: Allies + Actor103: apwr + Location: 35,82 + Owner: Allies + Actor104: gun + Location: 41,79 + Owner: Allies + Facing: 191 + BridgeBarrel3: brl3 + Location: 105,78 + Owner: USSR + Actor106: barl + Location: 104,77 + Owner: USSR + Actor107: v19 + Location: 104,78 + Owner: Neutral + Actor108: hpad + Location: 33,77 + Owner: Allies + BridgeBarrel2: brl3 + Location: 42,45 + Owner: USSR + Actor110: v19 + Location: 41,45 + Owner: Neutral + Actor111: barl + Location: 41,44 + Owner: USSR + Actor112: brl3 + Location: 89,51 + Owner: USSR + Actor113: barl + Location: 88,52 + Owner: USSR + Actor114: barl + Location: 90,50 + Owner: USSR + BridgeBarrel1: brl3 + Location: 91,47 + Owner: USSR + Actor116: barl + Location: 91,46 + Owner: USSR + Actor117: v19 + Location: 91,45 + Owner: Neutral + Actor118: v19 + Location: 89,52 + Owner: Neutral + Actor119: barl + Location: 90,45 + Owner: USSR + Actor121: jeep + Location: 45,83 + Owner: Allies + Facing: 159 + Actor122: jeep + Location: 43,83 + Owner: Allies + Facing: 95 + Actor123: 3tnk + Location: 73,75 + Owner: USSR + Facing: 95 + Actor124: 3tnk + Location: 89,46 + Owner: USSR + Facing: 95 + Actor125: 3tnk + Location: 41,49 + Owner: USSR + Facing: 95 + PatrolMammoth: 4tnk + Location: 56,59 + Owner: USSR + Facing: 159 + Actor127: 3tnk + Location: 105,83 + Owner: USSR + Facing: 95 + Actor128: 1tnk + Location: 44,78 + Owner: Allies + Facing: 191 + Actor129: e1 + Location: 38,73 + Owner: Allies + Facing: 127 + SubCell: 1 + Actor130: e1 + Location: 47,77 + Owner: Allies + Facing: 191 + SubCell: 0 + Actor131: e1 + Location: 39,76 + Owner: Allies + Facing: 159 + SubCell: 4 + Actor132: e1 + Location: 104,83 + Owner: USSR + Facing: 95 + SubCell: 1 + Actor133: e2 + Location: 106,83 + Owner: USSR + SubCell: 2 + Actor134: e2 + Location: 105,77 + Owner: USSR + Facing: 159 + SubCell: 2 + Actor135: e2 + Location: 106,78 + Owner: USSR + Facing: 223 + SubCell: 1 + Actor136: e1 + Location: 109,78 + Owner: USSR + Facing: 95 + SubCell: 2 + Actor137: e1 + Location: 110,78 + Owner: USSR + Facing: 159 + SubCell: 2 + Actor138: e1 + Location: 84,49 + Owner: USSR + Facing: 31 + SubCell: 2 + Actor139: e1 + Location: 83,51 + Owner: USSR + Facing: 95 + SubCell: 2 + Actor140: e2 + Location: 85,50 + Owner: USSR + Facing: 159 + SubCell: 1 + Actor141: e2 + Location: 84,51 + Owner: USSR + Facing: 31 + SubCell: 2 + Actor142: e2 + Location: 91,51 + Owner: USSR + Facing: 159 + SubCell: 1 + Actor143: e2 + Location: 91,52 + Owner: USSR + Facing: 223 + SubCell: 3 + Actor144: e1 + Location: 90,52 + Owner: USSR + Facing: 191 + SubCell: 1 + Actor145: e1 + Location: 93,49 + Owner: USSR + Facing: 159 + SubCell: 0 + SecondSquad1: e1 + Location: 59,72 + Owner: USSR + Facing: 95 + SubCell: 4 + SecondSquad3: e1 + Location: 60,73 + Owner: USSR + Facing: 95 + SubCell: 1 + FirstSquad1: e2 + Location: 36,63 + Owner: USSR + SubCell: 0 + SecondSquad2: e2 + Location: 60,72 + Owner: USSR + Facing: 95 + SubCell: 4 + FirstSquad3: e1 + Location: 38,63 + Owner: USSR + SubCell: 1 + FirstSquad2: e1 + Location: 37,64 + Owner: USSR + SubCell: 1 + Actor152: e1 + Location: 40,77 + Owner: Allies + SubCell: 1 + Actor153: e1 + Location: 47,80 + Owner: Allies + Facing: 63 + SubCell: 2 + Actor154: e1 + Location: 34,73 + Owner: Allies + Facing: 223 + SubCell: 0 + Actor201: mine + Owner: Neutral + Location: 70,84 + Actor202: mine + Owner: Neutral + Location: 68,66 + Actor194: heli + Owner: Allies + Location: 34,79 + Facing: 217 + AlliedBase: waypoint + Location: 40,79 + Owner: Neutral + Patrol1: waypoint + Location: 58,61 + Owner: Neutral + Patrol2: waypoint + Location: 58,74 + Owner: Neutral + Patrol3: waypoint + Location: 71,76 + Owner: Neutral + Patrol4: waypoint + Location: 77,71 + Owner: Neutral + Patrol5: waypoint + Location: 79,60 + Owner: Neutral + Patrol6: waypoint + Location: 76,52 + Owner: Neutral + Patrol7: waypoint + Location: 65,52 + Owner: Neutral + NorthwestEntry: waypoint + Owner: Neutral + Location: 32,42 + CenterEntry: waypoint + Owner: Neutral + Location: 28,57 + BaseEntry: waypoint + Owner: Neutral + Location: 28,76 + SouthEntry: waypoint + Owner: Neutral + Location: 53,87 + NorthEntry: waypoint + Owner: Neutral + Location: 58,42 + ExitEast: waypoint + Owner: Neutral + Location: 117,71 + ExitNorth: waypoint + Owner: Neutral + Location: 113,42 + NortheastBridge: waypoint + Location: 87,46 + Owner: Neutral + NorthwestBridge: waypoint + Location: 41,48 + Owner: Neutral + SoutheastBridge: waypoint + Location: 103,82 + Owner: Neutral + NorthwestPath1: waypoint + Location: 38,49 + Owner: Neutral + NorthwestPath2: waypoint + Location: 81,48 + Owner: Neutral + NorthwestPath3: waypoint + Location: 99,50 + Owner: Neutral + BasePath1: waypoint + Location: 35,76 + Owner: Neutral + CenterPath1: waypoint + Location: 37,57 + Owner: Neutral + CenterPath2: waypoint + Location: 37,61 + Owner: Neutral + SouthPath1: waypoint + Location: 53,75 + Owner: Neutral + SouthPath2: waypoint + Location: 92,80 + Owner: Neutral + SouthPath3: waypoint + Location: 110,69 + Owner: Neutral + FinalConvoy1: waypoint + Location: 88,62 + Owner: Neutral + AttackEntry1: waypoint + Location: 81,42 + Owner: Neutral + AttackEntry2: waypoint + Location: 92,87 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, rules.yaml diff --git a/mods/ra/maps/siberian-conflict-1-fresh-tracks/rules.yaml b/mods/ra/maps/siberian-conflict-1-fresh-tracks/rules.yaml new file mode 100644 index 0000000000..401b4c79a8 --- /dev/null +++ b/mods/ra/maps/siberian-conflict-1-fresh-tracks/rules.yaml @@ -0,0 +1,69 @@ +World: + LuaScript: + Scripts: fresh-tracks.lua + MissionData: + WinVideo: sovbatl.vqa + LossVideo: overrun.vqa + Briefing: Soviet activity in Siberia is increasing. A large shipment of atomic material is on its way through this area, and we need it stopped. Destroy all of the Soviet convoy trucks and prevent the Soviets from furthering their atomic testing.\n\nBe careful of the convoy truck cargo -- atomic material is highly unstable.\n\nThe mission is complete when all the convoy trucks from each convoy have been destroyed. + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: normal + +Player: + PlayerResources: + DefaultCash: 2100 + +MONEYCRATE: + Crate: + Lifetime: 0 + ExplodeCrateAction: + Weapon: MiniNuke + Tooltip: + Name: Atomic Material + RenderSprites: + Image: wcrate + +SPY: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +TRAN: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~hpad + +MRJ: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +2TNK: + Buildable: + Prerequisites: ~disabled + +ARTY: + Buildable: + Prerequisites: ~disabled + +MH60: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index b9484b694f..4a9c489d94 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -27,6 +27,7 @@ Counterstrike: sarin-gas-1-crackdown sarin-gas-2-down-under fall-of-greece-1-personal-war + siberian-conflict-1-fresh-tracks soviet-soldier-volkov-n-chitzkoi top-o-the-world Aftermath: