diff --git a/mods/ra/maps/allies-09a/allies09a-AI.lua b/mods/ra/maps/allies-09a/allies09a-AI.lua new file mode 100644 index 0000000000..5a9bf796fd --- /dev/null +++ b/mods/ra/maps/allies-09a/allies09a-AI.lua @@ -0,0 +1,209 @@ +--[[ + 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. +]] + +WTransWays = +{ + { USSRRFEntry.Location, USSRUnload1.Location }, + { USSRRFEntry.Location, USSRUnload2.Location } +} +WTransUnits = +{ + hard = { { "3tnk", "3tnk", "3tnk", "v2rl", "v2rl" }, { "v2rl", "v2rl", "e4", "e4", "3tnk" } }, + normal = { { "e1", "e1", "3tnk", "3tnk", "v2rl" }, { "e4", "e4", "e4", "e4", "v2rl" } }, + easy = { { "e1", "e1", "e1", "e2", "e2" }, { "e2", "3tnk", "3tnk" } } +} +WTransDelays = +{ + easy = 7, + normal = 6, + hard = 5 +} +SubAttackGroupSize = +{ + easy = 1, + normal = 2, + hard = 3 +} +InfantryUnits = +{ + hard = { "e1", "e2", "e2", "e4", "e4" }, + normal = { "e1", "e1", "e2", "e2", "e4" }, + easy = { "e1", "e1", "e1", "e2", "e2" } +} +ProductionInterval = +{ + easy = DateTime.Seconds(60), + normal = DateTime.Seconds(40), + hard = DateTime.Seconds(20) +} +ParadropDelay = +{ + easy = 7, + normal = 6, + hard = 5 +} + +InfantryAttackGroup = { } +InfantryAttackGroupSize = 5 +VehicleAttackGroup = { } +VehicleAttackGroupSize = 3 +SubAttackGroup = { } +SovietAircraftType = { "yak" } +SovietSSType = { "ss" } +VehicleUnits = { "3tnk", "3tnk", "3tnk", "v2rl" } + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +SendInfantryAttackGroup = function() + if #InfantryAttackGroup < InfantryAttackGroupSize then + return + end + Utils.Do(InfantryAttackGroup, IdleHunt) + InfantryAttackGroup = { } +end + +SendVehicleAttackGroup = function() + if #VehicleAttackGroup < VehicleAttackGroupSize then + return + end + Utils.Do(VehicleAttackGroup, IdleHunt) + VehicleAttackGroup = { } +end + +SendSubAttackGroup = function() + if #SubAttackGroup < SubAttackGroupSize then + return + end + Utils.Do(SubAttackGroup, IdleHunt) + SubAttackGroup = { } +end + +ProduceSovietInfantry = function() + if (Barracks.IsDead or Barracks.Owner ~= USSR) and (BarracksA.IsDead or BarracksA.Owner ~= USSR) then + return + end + USSR.Build({ Utils.Random(InfantryUnits) }, function(units) + table.insert(InfantryAttackGroup, units[1]) + SendInfantryAttackGroup() + Trigger.AfterDelay(ProductionInterval, ProduceSovietInfantry) + end) +end + +ProduceSovietVehicle = function() + if WarFactory.IsDead or WarFactory.Owner ~= USSR then + return + end + USSR.Build({ Utils.Random(VehicleUnits) }, function(units) + table.insert(VehicleAttackGroup, units[1]) + SendVehicleAttackGroup() + Trigger.AfterDelay(ProductionInterval, ProduceSovietVehicle) + end) +end + +ProduceSovietSub = function() + if SubPen.IsDead or SubPen.Owner ~= USSR then + return + end + USSR.Build(SovietSSType, function(units) + table.insert(SubAttackGroup, units[1]) + SendSubAttackGroup() + Trigger.AfterDelay(ProductionInterval, ProduceSovietSub) + end) +end + +ProduceAircraft = function() + if Airfield.IsDead or Airfield.Owner ~= USSR then + return + end + USSR.Build(SovietAircraftType, function(units) + local yak = units[1] + Trigger.OnKilled(yak, ProduceAircraft) + InitializeAttackAircraft(yak, Greece) + end) +end + +WTransWaves = function() + if SubPen.IsDead or SubPen.Owner ~= USSR then + return + end + local way = Utils.Random(WTransWays) + local units = Utils.Random(WTransUnits) + local attackUnits = Reinforcements.ReinforceWithTransport(USSR, "lst", units , way, { way[2], way[1] })[2] + Utils.Do(attackUnits, function(a) + Trigger.OnAddedToWorld(a, function() + a.AttackMove(KosyginExtractPoint.Location) + IdleHunt(a) + end) + end) + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end + +MMGroupGuardGate = function() + if not MM1.IsDead then + MM1.AttackMove(WP78.Location) + end + if not MM2.IsDead then + MM2.AttackMove(WP79.Location) + end + if not MM1.IsDead then + MM3.AttackMove(WP80.Location) + end +end + +TankGroupWallGuard = function() + if not WGTank01.IsDead then + WGTank01.AttackMove(WP72.Location) + end + if not WGTank02.IsDead then + WGTank02.AttackMove(WP72.Location) + end + if not WGV2.IsDead then + WGV2.AttackMove(WP72.Location) + end +end + +Paradrop = function() + if Airfield.IsDead or Airfield.Owner ~= USSR then + return + end + local aircraft = PowerProxy.TargetParatroopers(KosyginExtractPoint.CenterPosition) + Utils.Do(aircraft, function(a) + Trigger.OnPassengerExited(a, function(t, p) + IdleHunt(p) + end) + end) + Trigger.AfterDelay(DateTime.Minutes(ParadropDelay), Paradrop) +end + +ActivateAI = function() + local difficulty = Map.LobbyOption("difficulty") + WTransUnits = WTransUnits[difficulty] + WTransDelays = WTransDelays[difficulty] + SubAttackGroupSize = SubAttackGroupSize[difficulty] + InfantryUnits = InfantryUnits[difficulty] + ProductionInterval = ProductionInterval[difficulty] + ParadropDelay = ParadropDelay[difficulty] + PowerProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = USSR }) + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == USSR and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == USSR and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + end) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceAircraft) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceSovietInfantry) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceSovietVehicle) + Trigger.AfterDelay(DateTime.Minutes(4), ProduceSovietSub) + Trigger.AfterDelay(DateTime.Minutes(5), MMGroupGuardGate) + Trigger.AfterDelay(DateTime.Minutes(5), TankGroupWallGuard) + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) + Trigger.AfterDelay(DateTime.Minutes(ParadropDelay), Paradrop) +end diff --git a/mods/ra/maps/allies-09a/allies09a.lua b/mods/ra/maps/allies-09a/allies09a.lua new file mode 100644 index 0000000000..d5aac05a1b --- /dev/null +++ b/mods/ra/maps/allies-09a/allies09a.lua @@ -0,0 +1,184 @@ +--[[ + 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. +]] + +lstReinforcements = +{ + actors = { "mcv" }, + entryPath = { AlliedMCVEntry.Location, Unload1.Location }, + exitPath = { AlliedMCVEntry.Location } +} + +ExtractionHelicopterType = "tran.extraction" +ExtractionPath = { HeliWP01.Location, HeliWP02.Location, HeliWP03.Location } +Dog5PatrolPath = { WP94.Location, WP93.Location } +Dog6PatrolPath = { WP90.Location, WP91.Location, WP92.Location, WP91.Location } +TankGroup10 = { TankGroup101, TankGroup102 } +TankGroup10PatrolPath = { WP81.Location, WP82.Location, WP83.Location, WP84.Location, WP85.Location, WP84.Location, WP83.Location, WP82.Location } +HuntDogsGroup = { Dog701, Dog702, Dog703, Dog704, Dog705, Dog706 } + +KosyginType = "gnrl" +KosyginContacted = false + +MissionAccomplished = function() + Media.PlaySpeechNotification(Greece, "MissionAccomplished") +end + +MissionFailed = function() + Media.PlaySpeechNotification(Greece, "MissionFailed") +end + +InitialAlliedReinforcements = function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(Greece, "ReinforcementsArrived") + Reinforcements.ReinforceWithTransport(Greece, "lst.reinforcement", lstReinforcements.actors, lstReinforcements.entryPath, lstReinforcements.exitPath) + end) +end + +RescueFailed = function() + Media.PlaySpeechNotification(Greece, "ObjectiveNotMet") + Greece.MarkFailedObjective(KosyginSurviveObjective) +end + +InitialSovietPatrols = function() + Dog5.Patrol(Dog5PatrolPath, true, DateTime.Seconds(60)) + Dog6.Patrol(Dog6PatrolPath, true, DateTime.Seconds(90)) + for i = 1, 2 do + TankGroup10[i].Patrol(TankGroup10PatrolPath, true, DateTime.Seconds(30)) + end +end + +CreateKosygin = function() + Greece.MarkCompletedObjective(UseSpyObjective) + Media.PlaySpeechNotification(Greece, "ObjectiveMet") + local kosygin = Actor.Create(KosyginType, true, { Location = KosyginSpawnPoint.Location, Owner = Greece }) + Trigger.OnKilled(kosygin, RescueFailed) + ExtractObjective = Greece.AddObjective("Extract Kosygin and\nget him back to your base.") + Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(Greece, "TargetFreed") end) +end + +DogsGuardGates = function() + if not Dog707.IsDead then + Dog707.AttackMove(WP89.Location) + end + if not Dog708.IsDead then + Dog708.AttackMove(WP81.Location) + end + if not Dog709.IsDead then + Dog709.AttackMove(WP79.Location) + end +end + +InfiltrateForwardCenter = function() + Trigger.OnInfiltrated(USSRFC, function() + if not KosyginContacted then + KosyginContacted = true + CreateKosygin() + DogsGuardGates() + end + end) + + Trigger.OnKilledOrCaptured(USSRFC, function() + if not Greece.IsObjectiveCompleted(UseSpyObjective) then + Greece.MarkFailedObjective(UseSpyObjective) + end + end) +end + +Tick = function() + USSR.Cash = 5000 + if Greece.HasNoRequiredUnits() then + USSR.MarkCompletedObjective(USSRObj) + end +end + +TriggerHuntKosygin = function() + Trigger.OnEnteredProximityTrigger(WP79.CenterPosition, WDist.FromCells(4), function(actor, triggerflee) + if actor.Type == KosyginType then + Trigger.RemoveProximityTrigger(triggerflee) + for i = 1, 6 do + if not HuntDogsGroup[i].IsDead then + HuntDogsGroup[i].Attack(actor) + end + end + end + end) + Trigger.OnEnteredProximityTrigger(WP81.CenterPosition, WDist.FromCells(4), function(actor, triggerflee) + if actor.Type == KosyginType then + Trigger.RemoveProximityTrigger(triggerflee) + for i = 1, 6 do + if not HuntDogsGroup[i].IsDead then + HuntDogsGroup[i].Attack(actor) + end + end + end + end) + Trigger.OnEnteredProximityTrigger(WP89.CenterPosition, WDist.FromCells(4), function(actor, triggerflee) + if actor.Type == KosyginType then + Trigger.RemoveProximityTrigger(triggerflee) + for i = 1, 6 do + if not HuntDogsGroup[i].IsDead then + HuntDogsGroup[i].Attack(actor) + end + end + end + end) +end + +TriggerRevealUSSRBase = function() + Trigger.OnEnteredProximityTrigger(LowerBaseWP.CenterPosition, WDist.FromCells(10), function(a, id) + if a.Owner == Greece then + Trigger.RemoveProximityTrigger(id) + local cam = Actor.Create("Camera", true, { Owner = Greece, Location = RevealLowerBase.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy) + end + end) +end + +TriggerRevealUSSRFC = function() + Trigger.OnEnteredProximityTrigger(UpperBaseWP.CenterPosition, WDist.FromCells(10), function(a, id) + if a.Owner == Greece then + Trigger.RemoveProximityTrigger(id) + local cam = Actor.Create("Camera", true, { Owner = Greece, Location = KosyginSpawnPoint.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy) + end + end) +end + +TriggerExtractKosygin = function() + Trigger.OnEnteredProximityTrigger(KosyginExtractPoint.CenterPosition, WDist.FromCells(10), function(actor, triggerflee) + if actor.Type == KosyginType then + Reinforcements.ReinforceWithTransport(Greece, ExtractionHelicopterType, nil, ExtractionPath) + Trigger.RemoveProximityTrigger(triggerflee) + Trigger.AfterDelay(DateTime.Seconds(10), function() + Greece.MarkCompletedObjective(KosyginSurviveObjective) + Greece.MarkCompletedObjective(ExtractObjective) + Media.PlaySpeechNotification(Greece, "ObjectiveMet") + end) + end + end) +end + +WorldLoaded = function() + Greece = Player.GetPlayer("Greece") + USSR = Player.GetPlayer("USSR") + Camera.Position = DefaultCameraPosition.CenterPosition + UseSpyObjective = Greece.AddObjective("Infiltrate the Soviet command center and\ncontact Kosygin.") + KosyginSurviveObjective = Greece.AddObjective("Kosygin must survive.") + USSRObj = USSR.AddObjective("Eliminate all Allied forces.") + Trigger.OnPlayerLost(Greece, MissionFailed) + Trigger.OnPlayerWon(Greece, MissionAccomplished) + InitialAlliedReinforcements() + InfiltrateForwardCenter() + InitialSovietPatrols() + TriggerRevealUSSRBase() + TriggerRevealUSSRFC() + TriggerExtractKosygin() + TriggerHuntKosygin() + ActivateAI() +end diff --git a/mods/ra/maps/allies-09a/map.bin b/mods/ra/maps/allies-09a/map.bin new file mode 100644 index 0000000000..7db6734d77 Binary files /dev/null and b/mods/ra/maps/allies-09a/map.bin differ diff --git a/mods/ra/maps/allies-09a/map.png b/mods/ra/maps/allies-09a/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/allies-09a/map.png differ diff --git a/mods/ra/maps/allies-09a/map.yaml b/mods/ra/maps/allies-09a/map.yaml new file mode 100644 index 0000000000..cd6e1ad63c --- /dev/null +++ b/mods/ra/maps/allies-09a/map.yaml @@ -0,0 +1,975 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 09a: Evacuate Kosygin + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 86,72 + +Bounds: 1,1,84,70 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + PlayerReference@USSR: + Name: USSR + Bot: campaign + Faction: soviet + Color: FF1400 + Enemies: Greece + PlayerReference@Greece: + Name: Greece + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F5 + Enemies: USSR + +Actors: + Actor0: t17 + Owner: Neutral + Location: 18,21 + Health: 100 + Actor1: tc02 + Owner: Neutral + Location: 7,33 + Actor2: tc04 + Owner: Neutral + Location: 1,28 + Actor3: t08 + Owner: Neutral + Location: 6,29 + Actor4: tc04 + Owner: Neutral + Location: 9,27 + Health: 100 + Actor5: tc05 + Owner: Neutral + Location: 12,27 + Actor6: tc03 + Owner: Neutral + Location: 11,29 + Actor7: tc05 + Owner: Neutral + Location: 67,11 + Actor8: t16 + Owner: Neutral + Location: 73,10 + Actor9: t12 + Owner: Neutral + Location: 67,8 + Actor10: t02 + Owner: Neutral + Location: 67,4 + Actor11: t17 + Owner: Neutral + Location: 69,1 + Actor12: t14 + Owner: Neutral + Location: 71,3 + Actor13: t03 + Owner: Neutral + Location: 72,7 + Actor14: t12 + Owner: Neutral + Location: 59,19 + Actor15: mine + Owner: Neutral + Location: 69,57 + Actor16: t08 + Owner: Neutral + Location: 65,52 + Actor17: tc02 + Owner: Neutral + Location: 61,50 + Actor18: t07 + Owner: Neutral + Location: 60,53 + Actor19: tc01 + Owner: Neutral + Location: 55,53 + Actor20: mine + Owner: Neutral + Location: 43,58 + Actor21: t10 + Owner: Neutral + Location: 29,63 + Actor22: t08 + Owner: Neutral + Location: 28,63 + Actor23: t07 + Owner: Neutral + Location: 30,62 + Actor24: tc05 + Owner: Neutral + Location: 22,49 + Actor25: tc04 + Owner: Neutral + Location: 25,49 + Actor26: tc03 + Owner: Neutral + Location: 11,58 + Actor28: tc02 + Owner: Neutral + Location: 13,60 + Actor30: t11 + Owner: Neutral + Location: 12,59 + Actor29: tc01 + Owner: Neutral + Location: 15,61 + Actor31: tc04 + Owner: Neutral + Location: 22,27 + Health: 100 + Actor32: tc04 + Owner: Neutral + Location: 19,31 + Actor33: tc03 + Owner: Neutral + Location: 24,31 + Actor34: tc04 + Owner: Neutral + Location: 26,31 + Actor35: t10 + Owner: Neutral + Location: 26,28 + Actor36: tc02 + Owner: Neutral + Location: 31,25 + Health: 100 + Actor37: tc01 + Owner: Neutral + Location: 46,36 + Actor38: t11 + Owner: Neutral + Location: 44,35 + Actor39: t16 + Owner: Neutral + Location: 48,35 + Actor40: t11 + Owner: Neutral + Location: 45,31 + Actor41: t13 + Owner: Neutral + Location: 41,27 + Actor42: tc05 + Owner: Neutral + Location: 35,38 + Actor43: tc01 + Owner: Neutral + Location: 33,39 + Actor44: tc02 + Owner: Neutral + Location: 38,37 + Actor46: t17 + Owner: Neutral + Location: 38,31 + Actor47: t15 + Owner: Neutral + Location: 35,31 + Actor48: t16 + Owner: Neutral + Location: 38,29 + Actor49: brik + Owner: USSR + Location: 1,1 + Actor50: brik + Owner: USSR + Location: 1,1 + Actor51: brik + Owner: USSR + Location: 1,2 + Actor52: brik + Owner: USSR + Location: 1,3 + Actor53: brik + Owner: USSR + Location: 1,4 + Actor54: brik + Owner: USSR + Location: 1,5 + Actor55: brik + Owner: USSR + Location: 1,6 + Actor56: brik + Owner: USSR + Location: 1,7 + Actor57: brik + Owner: USSR + Location: 1,8 + Actor58: brik + Owner: USSR + Location: 1,10 + Actor59: brik + Owner: USSR + Location: 1,9 + Actor60: brik + Owner: USSR + Location: 1,11 + Actor61: brik + Owner: USSR + Location: 1,12 + Actor62: brik + Owner: USSR + Location: 1,13 + Actor63: brik + Owner: USSR + Location: 1,14 + Actor64: brik + Owner: USSR + Location: 1,15 + Actor65: brik + Owner: USSR + Location: 1,16 + Actor66: brik + Owner: USSR + Location: 1,17 + Actor67: brik + Owner: USSR + Location: 1,18 + Actor68: brik + Owner: USSR + Location: 1,19 + Actor69: brik + Owner: USSR + Location: 2,19 + Actor76: brik + Owner: USSR + Location: 8,19 + Actor77: brik + Owner: USSR + Location: 9,19 + Actor81: brik + Owner: USSR + Location: 24,19 + Actor82: brik + Owner: USSR + Location: 23,19 + Actor83: brik + Owner: USSR + Location: 24,20 + Actor84: brik + Owner: USSR + Location: 23,20 + Actor85: brik + Owner: USSR + Location: 22,20 + Actor86: brik + Owner: USSR + Location: 21,20 + Actor87: brik + Owner: USSR + Location: 20,20 + Actor88: brik + Owner: USSR + Location: 19,20 + Actor89: brik + Owner: USSR + Location: 18,20 + Actor90: brik + Owner: USSR + Location: 17,20 + Actor91: brik + Owner: USSR + Location: 17,19 + Actor92: brik + Owner: USSR + Location: 18,19 + Actor93: brik + Owner: USSR + Location: 27,10 + Actor94: brik + Owner: USSR + Location: 27,9 + Actor95: brik + Owner: USSR + Location: 26,10 + Actor96: brik + Owner: USSR + Location: 26,9 + Actor97: brik + Owner: USSR + Location: 26,8 + Actor98: brik + Owner: USSR + Location: 27,8 + Actor99: brik + Owner: USSR + Location: 26,7 + Actor100: brik + Owner: USSR + Location: 27,7 + Actor101: brik + Owner: USSR + Location: 26,1 + Actor102: brik + Owner: USSR + Location: 26,2 + Actor103: brik + Owner: USSR + Location: 27,1 + Actor104: brik + Owner: USSR + Location: 27,2 + Actor105: brik + Owner: USSR + Location: 25,1 + Actor106: brik + Owner: USSR + Location: 24,1 + Actor107: brik + Owner: USSR + Location: 23,1 + Actor108: brik + Owner: USSR + Location: 23,1 + Actor109: brik + Owner: USSR + Location: 22,1 + Actor110: brik + Owner: USSR + Location: 21,1 + Actor111: brik + Owner: USSR + Location: 20,1 + Actor112: brik + Owner: USSR + Location: 20,1 + Actor113: brik + Owner: USSR + Location: 19,1 + Actor114: brik + Owner: USSR + Location: 18,1 + Actor115: brik + Owner: USSR + Location: 17,1 + Actor116: brik + Owner: USSR + Location: 17,1 + Actor117: brik + Owner: USSR + Location: 16,1 + Actor118: brik + Owner: USSR + Location: 15,1 + Actor119: brik + Owner: USSR + Location: 14,1 + Actor120: brik + Owner: USSR + Location: 13,1 + Actor121: brik + Owner: USSR + Location: 12,1 + Actor122: brik + Owner: USSR + Location: 11,1 + Actor123: brik + Owner: USSR + Location: 10,1 + Actor124: brik + Owner: USSR + Location: 9,1 + Actor125: brik + Owner: USSR + Location: 8,1 + Actor126: brik + Owner: USSR + Location: 7,1 + Actor127: brik + Owner: USSR + Location: 7,1 + Actor128: brik + Owner: USSR + Location: 6,1 + Actor129: brik + Owner: USSR + Location: 6,1 + Actor130: brik + Owner: USSR + Location: 4,1 + Actor131: brik + Owner: USSR + Location: 5,1 + Actor132: brik + Owner: USSR + Location: 3,1 + Actor133: brik + Owner: USSR + Location: 2,1 + Actor134: fenc + Owner: USSR + Location: 2,2 + Health: 100 + Actor135: fenc + Owner: USSR + Location: 3,2 + Actor136: fenc + Owner: USSR + Location: 4,2 + Actor137: fenc + Owner: USSR + Location: 5,2 + Actor138: fenc + Owner: USSR + Location: 5,3 + Actor139: fenc + Owner: USSR + Location: 2,3 + Actor140: fenc + Owner: USSR + Location: 2,4 + Actor141: fenc + Owner: USSR + Location: 2,4 + Actor142: fenc + Owner: USSR + Location: 2,5 + Actor143: fenc + Owner: USSR + Location: 3,5 + Dog703: dog + Location: 4,3 + SubCell: 3 + Health: 100 + Facing: 384 + Owner: USSR + Dog702: dog + Location: 3,3 + SubCell: 3 + Owner: USSR + Health: 100 + Facing: 384 + Dog706: dog + Location: 4,4 + SubCell: 3 + Owner: USSR + Health: 100 + Facing: 384 + Dog705: dog + Location: 3,4 + SubCell: 3 + Owner: USSR + Health: 100 + Facing: 384 + Dog704: dog + Location: 4,4 + SubCell: 1 + Owner: USSR + Health: 100 + Facing: 384 + Dog701: dog + SubCell: 1 + Location: 3,3 + Health: 100 + Facing: 384 + Owner: USSR + Actor150: apwr + Owner: USSR + Location: 6,2 + Actor151: apwr + Owner: USSR + Location: 9,2 + Kennel: kenn + Owner: USSR + Location: 12,2 + Actor153: apwr + Owner: USSR + Location: 22,2 + Actor154: apwr + Owner: USSR + Location: 19,2 + Actor155: stek + Owner: USSR + Location: 16,1 + Actor156: apwr + Owner: USSR + Location: 6,6 + Actor157: fact + Owner: USSR + Location: 6,9 + Airfield: afld + Owner: USSR + Location: 2,10 + Actor161: proc + Owner: USSR + Location: 23,7 + Actor171: fenc + Owner: USSR + Location: 18,18 + Actor172: fenc + Owner: USSR + Location: 17,18 + Actor173: fenc + Owner: USSR + Location: 16,18 + Actor174: fenc + Owner: USSR + Location: 16,18 + Actor175: fenc + Owner: USSR + Location: 15,18 + Actor176: fenc + Owner: USSR + Location: 15,17 + Actor177: brik + Owner: USSR + Location: 1,20 + Actor178: brik + Owner: USSR + Location: 2,20 + Actor179: brik + Owner: USSR + Location: 3,20 + Actor180: brik + Owner: USSR + Location: 4,20 + Actor181: brik + Owner: USSR + Location: 5,20 + Actor182: brik + Owner: USSR + Location: 6,20 + Actor183: brik + Owner: USSR + Location: 6,20 + Actor184: brik + Owner: USSR + Location: 7,20 + Actor185: brik + Owner: USSR + Location: 8,20 + Actor186: brik + Owner: USSR + Location: 9,20 + Actor187: tsla + Owner: USSR + Location: 9,17 + Actor188: ftur + Owner: USSR + TurretFacing: 384 + Location: 10,17 + Actor189: fenc + Owner: USSR + Location: 11,17 + Actor190: fenc + Owner: USSR + Location: 8,18 + Actor191: fenc + Owner: USSR + Location: 9,18 + Actor192: fenc + Owner: USSR + Location: 10,18 + Actor193: fenc + Owner: USSR + Location: 11,18 + Actor194: apwr + Owner: USSR + Location: 7,14 + Actor195: apwr + Owner: USSR + Location: 2,14 + Actor196: ftur + Owner: USSR + TurretFacing: 384 + Location: 16,17 + Actor197: tsla + Owner: USSR + Location: 17,17 + Actor199: fenc + Owner: USSR + Location: 24,18 + Actor200: fenc + Owner: USSR + Location: 24,17 + Actor201: fenc + Owner: USSR + Location: 24,16 + Actor202: fenc + Owner: USSR + Location: 23,18 + Actor203: fenc + Owner: USSR + Location: 22,18 + Actor204: fenc + Owner: USSR + Location: 21,18 + Actor205: fenc + Owner: USSR + Location: 21,17 + Actor206: fenc + Owner: USSR + Location: 21,16 + Dog709: dog + Location: 22,17 + SubCell: 3 + Owner: USSR + Health: 100 + Facing: 384 + Dog710: dog + Location: 23,17 + SubCell: 3 + Health: 100 + Facing: 384 + Owner: USSR + Dog708: dog + Location: 23,16 + SubCell: 3 + Owner: USSR + Health: 100 + Facing: 384 + Dog707: dog + Location: 22,16 + SubCell: 3 + Owner: USSR + Health: 100 + Facing: 384 + Actor211: tsla + Owner: USSR + Location: 37,15 + Actor212: ftur + Owner: USSR + TurretFacing: 384 + Location: 29,17 + Actor213: ftur + Owner: USSR + TurretFacing: 384 + Location: 29,13 + Actor214: kenn + Owner: USSR + Location: 26,11 + Actor215: dome + Owner: USSR + Location: 22,12 + Barracks: barr + Owner: USSR + Location: 17,12 + Health: 100 + BarracksA: barr + Owner: USSR + Location: 20,7 + Health: 100 + Actor218: tsla + Owner: USSR + Location: 30,4 + WarFactory: weap + Owner: USSR + Location: 12,9 + Health: 100 + USSRFC: fcom + Owner: USSR + Location: 13,4 + SubPen: spen + Owner: USSR + Location: 33,10 + Actor222: ss + Owner: USSR + Location: 57,13 + Facing: 612 + Actor223: ss + Owner: USSR + Location: 58,13 + Facing: 632 + Actor224: ss + Owner: USSR + Location: 60,13 + Facing: 652 + Actor225: ss + Owner: USSR + Location: 61,12 + Facing: 668 + Actor226: ss + Owner: USSR + Location: 60,11 + Facing: 632 + Actor227: harv + Owner: USSR + Location: 39,3 + Facing: 0 + TankGroup101: 3tnk + Owner: USSR + Location: 27,3 + TurretFacing: 0 + Health: 100 + Facing: 753 + TankGroup102: 3tnk + Owner: USSR + Location: 28,4 + TurretFacing: 0 + Health: 100 + Facing: 761 + Actor230: dog + Owner: USSR + SubCell: 3 + Location: 26,3 + Health: 100 + Facing: 716 + Actor231: dog + Owner: USSR + SubCell: 3 + Location: 26,5 + Health: 100 + Facing: 769 + Actor232: e1 + Owner: USSR + SubCell: 3 + Location: 25,4 + Health: 100 + Facing: 756 + TurretFacing: 756 + Actor233: v2rl + Owner: USSR + Location: 19,6 + Health: 100 + Facing: 531 + Actor234: v2rl + Owner: USSR + Location: 17,8 + Health: 100 + Facing: 515 + Actor235: 3tnk + Owner: USSR + Location: 18,7 + TurretFacing: 0 + Health: 100 + Facing: 507 + WGV2: v2rl + Owner: USSR + Location: 9,5 + Health: 100 + Facing: 504 + Actor237: v2rl + Owner: USSR + Location: 11,7 + Health: 100 + Facing: 520 + Actor238: 3tnk + Owner: USSR + Location: 10,6 + Health: 100 + Facing: 512 + TurretFacing: 0 + MM2: 4tnk + Owner: USSR + Location: 13,13 + TurretFacing: 0 + Health: 100 + Facing: 528 + MM1: 4tnk + Owner: USSR + Location: 12,15 + TurretFacing: 0 + Health: 100 + Facing: 508 + MM3: 4tnk + Owner: USSR + Location: 14,15 + TurretFacing: 0 + Health: 100 + Facing: 528 + WGTank01: 3tnk + Owner: USSR + Location: 5,12 + TurretFacing: 0 + Health: 100 + Facing: 604 + WGTank02: 3tnk + Owner: USSR + Location: 6,16 + TurretFacing: 0 + Health: 100 + Facing: 636 + Actor244: dog + Owner: USSR + SubCell: 3 + Location: 12,22 + Health: 100 + Facing: 539 + Actor245: dog + Owner: USSR + SubCell: 3 + Location: 14,22 + Health: 100 + Facing: 507 + Actor246: e1 + Owner: USSR + SubCell: 3 + Location: 13,21 + Health: 100 + Facing: 384 + TurretFacing: 384 + Actor247: 3tnk + Owner: USSR + Location: 18,16 + Health: 100 + Facing: 384 + TurretFacing: 0 + Actor248: 3tnk + Owner: USSR + Location: 15,2 + TurretFacing: 0 + Health: 100 + Facing: 523 + Actor249: e1 + Owner: Greece + SubCell: 3 + Location: 17,60 + Health: 100 + Facing: 634 + TurretFacing: 634 + Actor250: e1 + Owner: Greece + SubCell: 3 + Location: 23,62 + Health: 100 + TurretFacing: 29 + Facing: 29 + AlliedMCVEntry: waypoint + Owner: Neutral + Location: 19,70 + Unload1: waypoint + Owner: Neutral + Location: 19,63 + DefaultCameraPosition: waypoint + Owner: Neutral + Location: 21,60 + HeliLandZone: waypoint + Owner: Neutral + Location: 21,62 + KosyginSpawnPoint: waypoint + Owner: Neutral + Location: 14,6 + KosyginExtractPoint: waypoint + Owner: Neutral + Location: 25,57 + HeliWP01: waypoint + Owner: Neutral + Location: 58,70 + HeliWP02: waypoint + Owner: Neutral + Location: 58,66 + HeliWP03: waypoint + Owner: Neutral + Location: 16,55 + LowerBaseWP: waypoint + Owner: Neutral + Location: 13,25 + USSRUnload1: waypoint + Owner: Neutral + Location: 53,53 + USSRRFEntry: waypoint + Owner: Neutral + Location: 80,1 + RevealLowerBase: waypoint + Owner: Neutral + Location: 13,19 + Harbor: waypoint + Owner: Neutral + Location: 22,43 + USSRUnload2: waypoint + Owner: Neutral + Location: 55,63 + WP92: waypoint + Owner: Neutral + Location: 20,31 + WP91: waypoint + Owner: Neutral + Location: 22,27 + WP90: waypoint + Owner: Neutral + Location: 31,25 + Dog6: dog + Owner: USSR + SubCell: 3 + Location: 22,31 + Health: 100 + Facing: 384 + Dog5: dog + Owner: USSR + SubCell: 3 + Location: 10,25 + Health: 100 + Facing: 384 + WP93: waypoint + Owner: Neutral + Location: 9,27 + WP94: waypoint + Owner: Neutral + Location: 1,28 + WP88: waypoint + Owner: Neutral + Location: 13,23 + WP81: waypoint + Owner: Neutral + Location: 27,4 + WP82: waypoint + Owner: Neutral + Location: 37,4 + WP83: waypoint + Owner: Neutral + Location: 46,8 + WP84: waypoint + Owner: Neutral + Location: 52,11 + WP85: waypoint + Owner: Neutral + Location: 60,2 + WP89: waypoint + Owner: Neutral + Location: 30,15 + WP79: waypoint + Owner: Neutral + Location: 13,18 + WP78: waypoint + Owner: Neutral + Location: 12,18 + WP80: waypoint + Owner: Neutral + Location: 14,18 + WPHNTG: waypoint + Owner: Neutral + Location: 15,9 + WP4: waypoint + Owner: Neutral + Location: 19,13 + WP76: waypoint + Owner: Neutral + Location: 56,7 + WP72: waypoint + Owner: Neutral + Location: 5,18 + WP18: waypoint + Owner: Neutral + Location: 42,9 + WP17: waypoint + Owner: Neutral + Location: 47,12 + UpperBaseWP: waypoint + Owner: Neutral + Location: 13,8 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ra/maps/allies-09a/rules.yaml b/mods/ra/maps/allies-09a/rules.yaml new file mode 100644 index 0000000000..d87b9c5bb6 --- /dev/null +++ b/mods/ra/maps/allies-09a/rules.yaml @@ -0,0 +1,148 @@ +Player: + PlayerResources: + DefaultCash: 10000 + +World: + LuaScript: + Scripts: campaign-global.lua, allies09a.lua, allies09a-AI.lua + MissionData: + Briefing: One of Stalin's top atomic strategists, Vladimir Kosygin, wishes to defect. His knowledge of Stalin's atomic strategies is invaluable to us. We will extract him from the Riga compound where he is stationed.\n\nUse a spy to infiltrate the Soviet command center and contact Kosygin. Once he is out of the building, guide him back to your base any way you can. + StartVideo: + WinVideo: + LossVideo: + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: normal + +LST.Reinforcement: + Inherits: LST + RejectsOrders: + -Buildable: + -Selectable: + RenderSprites: + Image: lst + Interactable: + +TRAN.Extraction: + Inherits: TRAN + RejectsOrders: + -Selectable: + RenderSprites: + Image: tran + Interactable: + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 + +MCV: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +3TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +V2RL: + Buildable: + Prerequisites: ~vehicles.soviet + +4TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +QTNK: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +THF: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +E7.noautotarget: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +FCOM: + Targetable: + TargetTypes: GroundActor, Structure, C4, DetonateAttack, SpyInfiltrate + +GNRL: + Targetable: + TargetTypes: Kosygin + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: HoldFire + +DOG: + AutoTargetPriority@DEFAULT: + ValidTargets: Infantry, Kosygin diff --git a/mods/ra/maps/allies-09a/weapons.yaml b/mods/ra/maps/allies-09a/weapons.yaml new file mode 100644 index 0000000000..25f7ecec57 --- /dev/null +++ b/mods/ra/maps/allies-09a/weapons.yaml @@ -0,0 +1,4 @@ +DogJaw: + ValidTargets: Infantry, Kosygin + Warhead@1Dam: TargetDamage + ValidTargets: Infantry, Kosygin diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 19bea9753e..6cd510f58c 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -10,6 +10,7 @@ Allied Campaign: allies-07 allies-08a allies-08b + allies-09a Soviet Campaign: soviet-01 soviet-02a