diff --git a/mods/ra/maps/allies-05b/allies05b-AI.lua b/mods/ra/maps/allies-05b/allies05b-AI.lua new file mode 100644 index 0000000000..bf2c640ed2 --- /dev/null +++ b/mods/ra/maps/allies-05b/allies05b-AI.lua @@ -0,0 +1,102 @@ +--[[ + Copyright 2007-2021 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. +]] +AttackGroup = { } +AttackGroupSize = 10 + +SovietInfantry = { "e1", "e1", "e2", "e4" } +SovietVehicles = { "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "apc" } +SovietAircraftType = { "yak" } +Planes = { } +SovietProduction = { Conyard, USSRBarracks, USSRWarFactory } + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +ProductionInterval = +{ + easy = DateTime.Seconds(25), + normal = DateTime.Seconds(15), + hard = DateTime.Seconds(5) +} + +SendAttackGroup = function() + if #AttackGroup < AttackGroupSize then + return + end + + Utils.Do(AttackGroup, function(unit) + if not unit.IsDead then + Trigger.OnIdle(unit, unit.Hunt) + end + end) + + AttackGroup = { } +end + +ProduceUSSRInfantry = function() + if USSRBarracks.IsDead or USSRBarracks.Owner ~= USSR then + return + end + + USSR.Build({ Utils.Random(SovietInfantry) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceUSSRInfantry) + end) +end + +ProduceUSSRVehicles = function() + if USSRWarFactory.IsDead or USSRWarFactory.Owner ~= USSR then + return + end + + USSR.Build({ Utils.Random(SovietVehicles) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceUSSRVehicles) + end) +end + +ProduceAircraft = function() + if (Airfield1.IsDead or Airfield1.Owner ~= USSR) and (Airfield2.IsDead or Airfield2.Owner ~= USSR) then + return + end + + USSR.Build(SovietAircraftType, function(units) + local plane = units[1] + Planes[#Planes + 1] = plane + + Trigger.OnKilled(plane, ProduceAircraft) + + local alive = Utils.Where(Planes, function(y) return not y.IsDead end) + if #alive < 2 then + Trigger.AfterDelay(DateTime.Seconds(ProductionInterval[Map.LobbyOption("difficulty")] / 2), ProduceAircraft) + end + + InitializeAttackAircraft(plane, Greece) + end) +end + +ActivateAI = function() + 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) + + ProduceUSSRInfantry() + Trigger.AfterDelay(DateTime.Minutes(1), ProduceUSSRVehicles) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceAircraft) + + Trigger.OnAllKilled(SovietProduction, function() + Utils.Do(USSR.GetGroundAttackers(), IdleHunt) + end) +end diff --git a/mods/ra/maps/allies-05b/allies05b.lua b/mods/ra/maps/allies-05b/allies05b.lua new file mode 100644 index 0000000000..85fd166ea2 --- /dev/null +++ b/mods/ra/maps/allies-05b/allies05b.lua @@ -0,0 +1,433 @@ +--[[ + Copyright 2007-2021 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. +]] +SpyType = { "spy" } +SpyEntryPath = { SpyEntry.Location, SpyLoadout.Location } +InsertionTransport = "lst.in" +TrukPath1 = { SpyCamera1, TrukWaypoint1, TrukWaypoint2, TrukWaypoint3, TrukWaypoint4 } +TrukPath2 = { TruckWaypoint5, TruckCrash } + +ExtractionHeliType = "tran" +ExtractionPath = { ExtractionEntry.Location, ExtractionLZ.Location } + +GreeceReinforcements = +{ + { types = { "e3", "e3", "e1", "e1", "e1" }, entry = { SpyEntry.Location, SpyLoadout.Location } }, + { types = { "jeep", "1tnk", "1tnk", "2tnk", "2tnk" }, entry = { GreeceEntry1.Location, GreeceLoadout1.Location } }, + { types = { "e6", "e6", "e6", "e6", "e6" }, entry = { GreeceEntry2.Location, GreeceLoadout2.Location } } +} + +FlameTowerDogs = { FlameTowerDog1, FlameTowerDog2 } + +PatrolA = { PatrolA1, PatrolA2, PatrolA3 } +PatrolB = { PatrolB1, PatrolB2, PatrolB3 } +PatrolC = { PatrolC1, PatrolC2, PatrolC3 } + +PatrolAPath = { APatrol1.Location, CPatrol1.Location, APatrol2.Location } +PatrolBPath = { BPatrol1.Location, BPatrol2.Location, SpyCamera2.Location } +PatrolCPath = { CPatrol1.Location, CPatrol2.Location, CPatrol3.Location } + +CheckpointDogs = { CheckpointDog1, CheckpointDog2 } +CheckpointRifles = { CheckpointRifle1, CheckpointRifle2 } +BridgePatrol = { CheckpointDog1, CheckpointDog2, CheckpointRifle1, CheckpointRifle2 } +BridgePatrolPath = { TrukWaypoint4.Location, BridgePatrolWay.Location } + +TanyaVoices = { "tuffguy", "bombit", "laugh", "gotit", "lefty", "keepem" } +SpyVoice = "sking" +CivVoice = "guyokay" +DogBark = "dogy" +SamSites = { Sam1, Sam2, Sam3, Sam4 } + +SendSpy = function() + Camera.Position = SpyEntry.CenterPosition + Spy = Reinforcements.ReinforceWithTransport(Greece, InsertionTransport, SpyType, SpyEntryPath, { SpyEntryPath[1] })[2][1] + + Trigger.OnKilled(Spy, function() USSR.MarkCompletedObjective(USSRObj) end) + + Trigger.AfterDelay(DateTime.Seconds(3), function() + Media.DisplayMessage("Commander! You have to disguise me in order to get through the enemy patrols.", "Spy") + if SpecialCameras then + SpyCameraA = Actor.Create("camera", true, { Owner = Greece, Location = SpyCamera1.Location }) + SpyCameraB = Actor.Create("camera", true, { Owner = Greece, Location = SpyCamera2.Location }) + SpyCameraC = Actor.Create("camera", true, { Owner = Greece, Location = BPatrol2.Location }) + else + SpyCameraHard = Actor.Create("camera.small", true, { Owner = Greece, Location = FlameTowerDogRally.Location + CVec.New(2, 0) }) + end + end) +end + +ChurchFootprint = function() + Trigger.OnEnteredProximityTrigger(ChurchSpawn.CenterPosition, WDist.FromCells(2), function(actor, id) + if actor.Type == "spy" and not Greece.IsObjectiveCompleted(MainObj) then + Trigger.RemoveProximityTrigger(id) + ChurchSequence() + end + end) +end + +ChurchSequence = function() + Media.PlaySoundNotification(Greece, CivVoice) + Hero = Actor.Create("c1", true, { Owner = GoodGuy, Location = ChurchSpawn.Location }) + Hero.Attack(TargetBarrel) + + Trigger.OnKilled(ResponseBarrel, function() + if not Hero.IsDead then + Hero.Stop() + Hero.Move(SouthVillage.Location) + BarrelsTower.Kill() + Utils.Do(FlameTowerDogs, function(dogs) + if not dogs.IsDead then + dogs.Stop() + dogs.AttackMove(SouthVillage.Location) + end + end) + Utils.Do(PatrolA, function(patrol1) + if not patrol1.IsDead then + patrol1.Stop() + patrol1.AttackMove(SouthVillage.Location) + end + end) + Utils.Do(PatrolB, function(patrol2) + if not patrol2.IsDead then + patrol2.Stop() + patrol2.AttackMove(SouthVillage.Location) + end + end) + end + end) +end + +ActivatePatrols = function() + Utils.Do(FlameTowerDogs, function(dogs) + dogs.AttackMove(FlameTowerDogRally.Location) + end) + + Trigger.AfterDelay(DateTime.Seconds(3), function() + GroupPatrol(PatrolA, PatrolAPath, DateTime.Seconds(7)) + GroupPatrol(PatrolB, PatrolBPath, DateTime.Seconds(6)) + GroupPatrol(PatrolC, PatrolCPath, DateTime.Seconds(6)) + end) +end + +GroupPatrol = function(units, waypoints, delay) + local i = 1 + local stop = false + + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function() + if stop then + return + end + + if unit.Location == waypoints[i] then + local bool = Utils.All(units, function(actor) return actor.IsIdle end) + + if bool then + stop = true + + i = i + 1 + if i > #waypoints then + i = 1 + end + + Trigger.AfterDelay(delay, function() stop = false end) + end + else + unit.AttackMove(waypoints[i]) + end + end) + end) +end + +WarfactoryInfiltrated = function() + FollowTruk = true + Truk.GrantCondition("hijacked") + + Truk.Wait(DateTime.Seconds(1)) + Utils.Do(TrukPath1, function(waypoint) + Truk.Move(waypoint.Location) + end) + + Trigger.AfterDelay(DateTime.Seconds(2), function() + if SpecialCameras then + SpyCameraA.Destroy() + SpyCameraB.Destroy() + SpyCameraC.Destroy() + else + SpyCameraHard.Destroy() + end + end) + + Trigger.OnEnteredProximityTrigger(TrukWaypoint4.CenterPosition, WDist.FromCells(1), function(actor, id) + if actor.Type == "truk.mission" then + Trigger.RemoveProximityTrigger(id) + Utils.Do(CheckpointDogs, function(dog) + dog.Move(TrukInspect.Location) + end) + end + end) + Trigger.OnEnteredProximityTrigger(TrukWaypoint4.CenterPosition, WDist.FromCells(1), function(actor, id) + if actor.Type == "dog" then + Trigger.RemoveProximityTrigger(id) + Media.PlaySoundNotification(Greece, DogBark) + Utils.Do(CheckpointRifles, function(guard) + guard.Move(TrukInspect.Location) + end) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Utils.Do(TrukPath2, function(waypoint) + Truk.Move(waypoint.Location) + end) + end) + end + end) + Trigger.OnEnteredFootprint({ SpyJumpOut.Location }, function(a, id) + if a == Truk then + Trigger.RemoveFootprintTrigger(id) + + Spy = Actor.Create("spy", true, { Owner = Greece, Location = SpyJumpOut.Location }) + Spy.DisguiseAsType("e1", USSR) + Spy.Move(TruckWaypoint5.Location) + Spy.Infiltrate(Prison) + Media.PlaySoundNotification(Greece, SpyVoice) + + FollowTruk = false + + if SpecialCameras then + PrisonCamera = Actor.Create("camera", true, { Owner = Greece, Location = SpyJumpOut.Location }) + else + PrisonCamera = Actor.Create("camera.small", true, { Owner = Greece, Location = Prison.Location + CVec.New(1, 1) }) + end + + Trigger.OnKilled(Spy, function() USSR.MarkCompletedObjective(USSRObj) end) + end + end) + Trigger.OnEnteredFootprint({ TruckCrash.Location }, function(a, id) + if a == Truk then + Trigger.RemoveFootprintTrigger(id) + Truk.Stop() + Truk.Kill() + CrashTower.Kill() + CrashBarrel.Kill() + end + end) +end + +MissInfiltrated = function() + for i = 0, 5, 1 do + local sound = Utils.Random(TanyaVoices) + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(Greece, sound) + end) + end + Prison.Attack(Prison) + + Trigger.AfterDelay(DateTime.Seconds(6), FreeTanya) +end + +FreeTanya = function() + Prison.Stop() + Tanya = Actor.Create(TanyaType, true, { Owner = Greece, Location = Prison.Location + CVec.New(1, 1) }) + Tanya.Demolish(Prison) + Tanya.Move(Tanya.Location + CVec.New(Utils.RandomInteger(-1, 2), 1)) + + GroupPatrol(BridgePatrol, BridgePatrolPath, DateTime.Seconds(7)) + + if TanyaType == "e7.noautotarget" then + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.DisplayMessage("According to the rules of engagement I need your explicit orders to fire, Commander!", "Tanya") + end) + end + + local escapeResponse1 = Reinforcements.Reinforce(USSR, { "e1", "e2", "e2" }, { RaxSpawn.Location, TrukWaypoint4.Location }) + Utils.Do(escapeResponse1, function(units) + IdleHunt(units) + end) + Trigger.AfterDelay(DateTime.Seconds(10), function() + local escapeResponse2 = Reinforcements.Reinforce(USSR, { "e1", "e2", "e2" }, { RaxSpawn.Location, TrukWaypoint4.Location }) + Utils.Do(escapeResponse2, function(units) + IdleHunt(units) + end) + end) + + KillSams = Greece.AddObjective("Destroy all four SAM sites that block\nthe extraction helicopter.") + Trigger.OnKilled(Tanya, function() USSR.MarkCompletedObjective(USSRObj) end) + + if not SpecialCameras and PrisonCamera and PrisonCamera.IsInWorld then + PrisonCamera.Destroy() + end +end + +SendReinforcements = function() + GreeceReinforcementsArrived = true + Camera.Position = SpyLoadout.CenterPosition + Greece.Cash = Greece.Cash + ReinforceCash + + Utils.Do(GreeceReinforcements, function(reinforcements) + Reinforcements.ReinforceWithTransport(Greece, InsertionTransport, reinforcements.types, reinforcements.entry, { SpyEntry.Location }) + end) + + Media.PlaySpeechNotification(Greece, "AlliedReinforcementsArrived") + + ActivateAI() +end + +ExtractUnits = function(extractionUnit, pos, after) + if extractionUnit.IsDead or not extractionUnit.HasPassengers then + return + end + + extractionUnit.Move(pos) + extractionUnit.Destroy() + + Trigger.OnRemovedFromWorld(extractionUnit, after) +end + +InitTriggers = function() + Trigger.OnInfiltrated(Warfactory, function() + if Greece.IsObjectiveCompleted(InfWarfactory) then + return + elseif Truk.IsDead then + if not Greece.IsObjectiveCompleted(MainObj) then + USSR.MarkCompletedObjective(USSRObj) + end + + return + end + + Trigger.ClearAll(Spy) + Greece.MarkCompletedObjective(InfWarfactory) + WarfactoryInfiltrated() + end) + + Trigger.OnKilled(Truk, function() + if not Greece.IsObjectiveCompleted(InfWarfactory) then + Greece.MarkFailedObjective(InfWarfactory) + elseif FollowTruk then + USSR.MarkCompletedObjective(USSRObj) + end + end) + + Trigger.OnInfiltrated(Prison, function() + if Greece.IsObjectiveCompleted(MainObj) then + return + end + + if not Greece.IsObjectiveCompleted(InfWarfactory) then + Media.DisplayMessage("Good work! But next time skip the heroics!", "Battlefield Control") + Greece.MarkCompletedObjective(InfWarfactory) + end + + if not PrisonCamera then + if SpecialCameras then + PrisonCamera = Actor.Create("camera", true, { Owner = Greece, Location = SpyJumpOut.Location }) + else + PrisonCamera = Actor.Create("camera.small", true, { Owner = Greece, Location = Prison.Location + CVec.New(1, 1) }) + end + end + + if SpecialCameras and SpyCameraA and not SpyCameraA.IsDead then + SpyCameraA.Destroy() + SpyCameraB.Destroy() + SpyCameraC.Destroy() + end + + Trigger.ClearAll(Spy) + Trigger.AfterDelay(DateTime.Seconds(2), MissInfiltrated) + end) + + Trigger.OnAllKilled(SamSites, function() + Greece.MarkCompletedObjective(KillSams) + + local flare = Actor.Create("flare", true, { Owner = Greece, Location = ExtractionPath[2] + CVec.New(0, -1) }) + Trigger.AfterDelay(DateTime.Seconds(7), flare.Destroy) + Media.PlaySpeechNotification(Greece, "SignalFlare") + + ExtractionHeli = Reinforcements.ReinforceWithTransport(Greece, ExtractionHeliType, nil, ExtractionPath)[1] + local exitPos = CPos.New(ExtractionPath[1].X, ExtractionPath[2].Y) + + Trigger.OnKilled(ExtractionHeli, function() USSR.MarkCompletedObjective(USSRObj) end) + Trigger.OnRemovedFromWorld(Tanya, function() + ExtractUnits(ExtractionHeli, exitPos, function() + Media.PlaySpeechNotification(Greece, "TanyaRescued") + Greece.MarkCompletedObjective(MainObj) + Trigger.AfterDelay(DateTime.Seconds(2), function() + SendReinforcements() + end) + + if PrisonCamera and PrisonCamera.IsInWorld then + PrisonCamera.Destroy() + end + end) + end) + end) +end + +Tick = function() + if FollowTruk and not Truk.IsDead then + Camera.Position = Truk.CenterPosition + end + + if USSR.HasNoRequiredUnits() then + Greece.MarkCompletedObjective(KillAll) + end + + if GreeceReinforcementsArrived and Greece.HasNoRequiredUnits() then + USSR.MarkCompletedObjective(USSRObj) + end +end + +WorldLoaded = function() + Greece = Player.GetPlayer("Greece") + USSR = Player.GetPlayer("USSR") + GoodGuy = Player.GetPlayer("GoodGuy") + + Trigger.OnObjectiveAdded(Greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + USSRObj = USSR.AddObjective("Deny the Allies.") + MainObj = Greece.AddObjective("Rescue Tanya.") + KillAll = Greece.AddObjective("Eliminate all Soviet units in this area.") + InfWarfactory = Greece.AddObjective("Infiltrate the Soviet warfactory.", "Secondary", false) + + 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) + + InitTriggers() + SendSpy() + ChurchFootprint() + + if Map.LobbyOption("difficulty") == "easy" then + TanyaType = "e7" + ReinforceCash = 5000 + USSR.Cash = 8000 + SpecialCameras = true + elseif Map.LobbyOption("difficulty") == "normal" then + TanyaType = "e7.noautotarget" + ReinforceCash = 2250 + USSR.Cash = 15000 + SpecialCameras = true + else + TanyaType = "e7.noautotarget" + ReinforceCash = 1500 + USSR.Cash = 25000 + end + + Trigger.AfterDelay(DateTime.Seconds(3), ActivatePatrols) +end diff --git a/mods/ra/maps/allies-05b/map.bin b/mods/ra/maps/allies-05b/map.bin new file mode 100644 index 0000000000..7b26725bb5 Binary files /dev/null and b/mods/ra/maps/allies-05b/map.bin differ diff --git a/mods/ra/maps/allies-05b/map.png b/mods/ra/maps/allies-05b/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/allies-05b/map.png differ diff --git a/mods/ra/maps/allies-05b/map.yaml b/mods/ra/maps/allies-05b/map.yaml new file mode 100644 index 0000000000..c4fc31b7e6 --- /dev/null +++ b/mods/ra/maps/allies-05b/map.yaml @@ -0,0 +1,1196 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 05b: Tanya's Tale + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 18,40,92,55 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Allies: BadGuy + Enemies: Greece, GoodGuy + PlayerReference@BadGuy: + Name: BadGuy + Bot: campaign + Faction: soviet + Color: FF1400 + Allies: USSR + Enemies: Greece, GoodGuy + PlayerReference@GoodGuy: + Name: GoodGuy + Bot: campaign + Faction: allies + Color: E2E6F6 + Allies: Greece + Enemies: USSR, BadGuy + PlayerReference@Greece: + Name: Greece + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F6 + LockSpawn: True + LockTeam: True + Allies: GoodGuy + Enemies: USSR, BadGuy + +Actors: + Actor0: cycl + Location: 90,48 + Owner: BadGuy + Actor1: cycl + Location: 91,48 + Owner: BadGuy + Actor2: cycl + Location: 92,48 + Owner: BadGuy + Actor3: cycl + Location: 93,48 + Owner: BadGuy + Actor4: cycl + Location: 94,48 + Owner: BadGuy + Actor5: cycl + Location: 95,48 + Owner: BadGuy + Actor6: cycl + Location: 96,48 + Owner: BadGuy + Actor7: cycl + Location: 97,48 + Owner: BadGuy + Actor8: cycl + Location: 98,48 + Owner: BadGuy + Actor9: cycl + Location: 90,49 + Owner: BadGuy + Actor10: cycl + Location: 93,49 + Owner: BadGuy + Actor11: cycl + Location: 98,49 + Owner: BadGuy + Actor12: cycl + Location: 21,50 + Owner: BadGuy + Actor13: cycl + Location: 22,50 + Owner: BadGuy + Actor14: cycl + Location: 90,50 + Owner: BadGuy + Actor15: cycl + Location: 98,50 + Owner: BadGuy + Actor16: cycl + Location: 21,51 + Owner: BadGuy + Actor17: cycl + Location: 30,51 + Owner: BadGuy + Actor18: cycl + Location: 31,51 + Owner: BadGuy + Actor19: cycl + Location: 32,51 + Owner: BadGuy + Actor20: cycl + Location: 33,51 + Owner: BadGuy + Actor21: cycl + Location: 34,51 + Owner: BadGuy + Actor22: cycl + Location: 35,51 + Owner: BadGuy + Actor23: cycl + Location: 36,51 + Owner: BadGuy + Actor24: cycl + Location: 37,51 + Owner: BadGuy + Actor25: cycl + Location: 38,51 + Owner: BadGuy + Actor26: cycl + Location: 39,51 + Owner: BadGuy + Actor27: cycl + Location: 40,51 + Owner: BadGuy + Actor28: cycl + Location: 41,51 + Owner: BadGuy + Actor29: cycl + Location: 42,51 + Owner: BadGuy + Actor30: cycl + Location: 90,51 + Owner: BadGuy + Actor31: cycl + Location: 93,51 + Owner: BadGuy + Actor32: cycl + Location: 98,51 + Owner: BadGuy + Actor33: cycl + Location: 21,52 + Owner: BadGuy + Actor34: cycl + Location: 30,52 + Owner: BadGuy + Actor35: cycl + Location: 42,52 + Owner: BadGuy + Actor36: cycl + Location: 90,52 + Owner: BadGuy + Actor37: cycl + Location: 91,52 + Owner: BadGuy + Actor38: cycl + Location: 92,52 + Owner: BadGuy + Actor39: cycl + Location: 93,52 + Owner: BadGuy + Actor40: cycl + Location: 94,52 + Owner: BadGuy + Actor41: cycl + Location: 95,52 + Owner: BadGuy + Actor42: cycl + Location: 97,52 + Owner: BadGuy + Actor43: cycl + Location: 98,52 + Owner: BadGuy + Actor44: cycl + Location: 21,53 + Owner: BadGuy + Actor45: cycl + Location: 42,53 + Owner: BadGuy + Actor46: cycl + Location: 21,54 + Owner: BadGuy + Actor47: cycl + Location: 42,54 + Owner: BadGuy + Actor48: cycl + Location: 21,55 + Owner: BadGuy + Actor49: cycl + Location: 42,55 + Owner: BadGuy + Actor50: cycl + Location: 21,56 + Owner: BadGuy + Actor51: cycl + Location: 42,56 + Owner: BadGuy + Actor52: cycl + Location: 21,57 + Owner: BadGuy + Actor53: cycl + Location: 21,58 + Owner: BadGuy + Actor54: cycl + Location: 21,59 + Owner: BadGuy + Actor55: cycl + Location: 21,60 + Owner: BadGuy + Actor56: cycl + Location: 21,61 + Owner: BadGuy + Actor57: cycl + Location: 42,61 + Owner: BadGuy + Actor58: cycl + Location: 21,62 + Owner: BadGuy + Actor59: cycl + Location: 42,62 + Owner: BadGuy + Actor60: cycl + Location: 21,63 + Owner: BadGuy + Actor61: cycl + Location: 22,63 + Owner: BadGuy + Actor62: cycl + Location: 23,63 + Owner: BadGuy + Actor63: cycl + Location: 24,63 + Owner: BadGuy + Actor64: cycl + Location: 25,63 + Owner: BadGuy + Actor65: cycl + Location: 26,63 + Owner: BadGuy + Actor66: cycl + Location: 27,63 + Owner: BadGuy + Actor67: cycl + Location: 28,63 + Owner: BadGuy + Actor68: cycl + Location: 29,63 + Owner: BadGuy + Actor69: cycl + Location: 35,63 + Owner: BadGuy + Actor70: cycl + Location: 36,63 + Owner: BadGuy + Actor71: cycl + Location: 37,63 + Owner: BadGuy + Actor72: cycl + Location: 38,63 + Owner: BadGuy + Actor73: cycl + Location: 39,63 + Owner: BadGuy + Actor74: cycl + Location: 40,63 + Owner: BadGuy + Actor75: cycl + Location: 41,63 + Owner: BadGuy + Actor76: cycl + Location: 42,63 + Owner: BadGuy + Actor77: brik + Location: 71,76 + Owner: USSR + Actor78: brik + Location: 72,76 + Owner: USSR + Actor79: brik + Location: 73,76 + Owner: USSR + Actor80: brik + Location: 74,76 + Owner: USSR + Actor81: brik + Location: 75,76 + Owner: USSR + Actor82: brik + Location: 76,76 + Owner: USSR + Actor83: brik + Location: 77,76 + Owner: USSR + Actor84: brik + Location: 78,76 + Owner: USSR + Actor85: brik + Location: 82,76 + Owner: USSR + Actor86: brik + Location: 83,76 + Owner: USSR + Actor87: brik + Location: 84,76 + Owner: USSR + Actor88: brik + Location: 85,76 + Owner: USSR + Actor89: brik + Location: 86,76 + Owner: USSR + Actor90: brik + Location: 87,76 + Owner: USSR + Actor91: brik + Location: 88,76 + Owner: USSR + Actor92: brik + Location: 89,76 + Owner: USSR + Actor93: brik + Location: 90,76 + Owner: USSR + Actor94: brik + Location: 91,76 + Owner: USSR + Actor95: brik + Location: 92,76 + Owner: USSR + Actor96: brik + Location: 93,76 + Owner: USSR + Actor97: brik + Location: 94,76 + Owner: USSR + Actor98: brik + Location: 95,76 + Owner: USSR + Actor99: brik + Location: 71,77 + Owner: USSR + Actor100: brik + Location: 72,77 + Owner: USSR + Actor101: brik + Location: 77,77 + Owner: USSR + Actor102: brik + Location: 78,77 + Owner: USSR + Actor103: brik + Location: 82,77 + Owner: USSR + Actor104: brik + Location: 83,77 + Owner: USSR + Actor105: brik + Location: 94,77 + Owner: USSR + Actor106: brik + Location: 95,77 + Owner: USSR + Actor107: brik + Location: 95,78 + Owner: USSR + Actor108: brik + Location: 95,79 + Owner: USSR + Actor109: brik + Location: 95,80 + Owner: USSR + Actor110: brik + Location: 71,81 + Owner: USSR + Actor111: brik + Location: 72,81 + Owner: USSR + Actor112: brik + Location: 95,81 + Owner: USSR + Actor113: brik + Location: 71,82 + Owner: USSR + Actor114: brik + Location: 72,82 + Owner: USSR + Actor115: brik + Location: 95,82 + Owner: USSR + Actor116: brik + Location: 71,83 + Owner: USSR + Actor117: brik + Location: 95,83 + Owner: USSR + Actor118: brik + Location: 71,84 + Owner: USSR + Actor119: brik + Location: 72,84 + Owner: USSR + Actor120: brik + Location: 95,84 + Owner: USSR + Actor121: brik + Location: 71,85 + Owner: USSR + Actor122: brik + Location: 72,85 + Owner: USSR + Actor123: brik + Location: 95,85 + Owner: USSR + Actor124: brik + Location: 95,86 + Owner: USSR + Actor125: brik + Location: 95,87 + Owner: USSR + Actor126: brik + Location: 95,88 + Owner: USSR + Actor127: brik + Location: 95,89 + Owner: USSR + Actor128: brik + Location: 71,90 + Owner: USSR + Actor129: brik + Location: 72,90 + Owner: USSR + Actor130: brik + Location: 95,90 + Owner: USSR + Actor131: brik + Location: 71,91 + Owner: USSR + Actor132: brik + Location: 72,91 + Owner: USSR + Actor133: brik + Location: 95,91 + Owner: USSR + Actor134: brik + Location: 71,92 + Owner: USSR + Actor135: brik + Location: 95,92 + Owner: USSR + Actor136: brik + Location: 71,93 + Owner: USSR + Actor137: brik + Location: 72,93 + Owner: USSR + Actor138: brik + Location: 94,93 + Owner: USSR + Actor139: brik + Location: 95,93 + Owner: USSR + Actor140: brik + Location: 71,94 + Owner: USSR + Actor141: brik + Location: 72,94 + Owner: USSR + Actor142: brik + Location: 73,94 + Owner: USSR + Actor143: brik + Location: 74,94 + Owner: USSR + Actor144: brik + Location: 75,94 + Owner: USSR + Actor145: brik + Location: 76,94 + Owner: USSR + Actor146: brik + Location: 77,94 + Owner: USSR + Actor147: brik + Location: 78,94 + Owner: USSR + Actor148: brik + Location: 79,94 + Owner: USSR + Actor149: brik + Location: 80,94 + Owner: USSR + Actor150: brik + Location: 81,94 + Owner: USSR + Actor151: brik + Location: 82,94 + Owner: USSR + Actor152: brik + Location: 83,94 + Owner: USSR + Actor153: brik + Location: 84,94 + Owner: USSR + Actor154: brik + Location: 85,94 + Owner: USSR + Actor155: brik + Location: 86,94 + Owner: USSR + Actor156: brik + Location: 87,94 + Owner: USSR + Actor157: brik + Location: 88,94 + Owner: USSR + Actor158: brik + Location: 89,94 + Owner: USSR + Actor159: brik + Location: 90,94 + Owner: USSR + Actor160: brik + Location: 91,94 + Owner: USSR + Actor161: brik + Location: 92,94 + Owner: USSR + Actor162: brik + Location: 93,94 + Owner: USSR + Actor163: brik + Location: 94,94 + Owner: USSR + Actor164: brik + Location: 95,94 + Owner: USSR + Actor165: tc05 + Location: 91,68 + Owner: Neutral + Actor166: tc04 + Location: 83,66 + Owner: Neutral + Actor167: tc05 + Location: 55,66 + Owner: Neutral + Actor168: tc04 + Location: 49,66 + Owner: Neutral + Actor169: tc01 + Location: 47,66 + Owner: Neutral + Actor170: tc02 + Location: 56,64 + Owner: Neutral + Actor171: tc05 + Location: 49,73 + Owner: Neutral + Actor172: tc01 + Location: 55,72 + Owner: Neutral + Actor173: tc01 + Location: 77,74 + Owner: Neutral + Actor174: tc02 + Location: 75,77 + Owner: Neutral + Actor175: t12 + Location: 52,74 + Owner: Neutral + Actor176: tc05 + Location: 96,77 + Owner: Neutral + Actor177: tc02 + Location: 72,82 + Owner: Neutral + Actor178: tc01 + Location: 78,82 + Owner: Neutral + Actor179: tc04 + Location: 73,91 + Owner: Neutral + Actor180: tc03 + Location: 73,84 + Owner: Neutral + Actor181: tc05 + Location: 79,91 + Owner: Neutral + Actor182: t01 + Location: 93,59 + Owner: Neutral + Actor183: tc05 + Location: 46,51 + Owner: Neutral + Actor184: tc04 + Location: 50,49 + Owner: Neutral + Actor185: tc02 + Location: 55,53 + Owner: Neutral + Actor186: tc01 + Location: 53,49 + Owner: Neutral + Actor187: tc02 + Location: 70,56 + Owner: Neutral + Actor188: tc01 + Location: 63,57 + Owner: Neutral + Actor189: tc05 + Location: 67,62 + Owner: Neutral + Actor190: t01 + Location: 42,81 + Owner: Neutral + Actor191: tc01 + Location: 48,85 + Owner: Neutral + Actor192: t15 + Location: 39,83 + Owner: Neutral + Actor193: tc04 + Location: 32,70 + Owner: Neutral + Actor194: tc04 + Location: 60,86 + Owner: Neutral + Actor195: tc01 + Location: 32,73 + Owner: Neutral + Actor196: tc04 + Location: 30,89 + Owner: Neutral + Actor197: tc01 + Location: 31,91 + Owner: Neutral + Actor198: t01 + Location: 43,62 + Owner: Neutral + Actor199: tc01 + Location: 27,63 + Owner: Neutral + Actor200: tc01 + Location: 87,59 + Owner: Neutral + Actor201: t07 + Location: 103,48 + Owner: Neutral + Actor202: t07 + Location: 83,68 + Owner: Neutral + Actor203: tc04 + Location: 99,50 + Owner: Neutral + Actor204: tc05 + Location: 102,54 + Owner: Neutral + Actor205: tc05 + Location: 18,60 + Owner: Neutral + Actor206: ftur + Location: 70,85 + Owner: USSR + Actor207: ftur + Location: 70,81 + Owner: USSR + Prison: miss + Location: 95,49 + Owner: USSR + Sam2: sam + Location: 102,47 + Owner: USSR + Sam1: sam + Location: 89,47 + Owner: USSR + Church: v01 + Location: 48,69 + Owner: Neutral + Actor212: v03 + Location: 51,76 + Owner: Neutral + Actor213: v04 + Location: 50,71 + Owner: Neutral + Actor214: v05 + Location: 56,74 + Owner: Neutral + Actor215: v06 + Location: 56,76 + Owner: Neutral + Actor216: v07 + Location: 59,76 + Owner: Neutral + Actor217: spen + Location: 27,46 + Owner: BadGuy + Warfactory: weap.infiltratable + Location: 31,52 + Owner: BadGuy + Actor219: ftur + Location: 29,64 + Owner: BadGuy + BarrelsTower: ftur + Location: 35,64 + Owner: BadGuy + Actor221: ftur + Location: 43,61 + Owner: BadGuy + Actor222: ftur + Location: 43,56 + Owner: BadGuy + Actor223: fact + Location: 23,51 + Owner: BadGuy + Actor224: powr + Location: 24,56 + Owner: BadGuy + Actor225: powr + Location: 26,56 + Owner: BadGuy + Actor226: barr + Location: 35,55 + Owner: BadGuy + Actor227: kenn + Location: 35,62 + Owner: BadGuy + Actor228: silo + Location: 37,52 + Owner: BadGuy + Actor229: silo + Location: 36,52 + Owner: BadGuy + Actor230: brl3 + Location: 26,51 + Owner: BadGuy + Actor231: barl + Location: 25,50 + Owner: BadGuy + Actor232: barl + Location: 27,52 + Owner: BadGuy + Actor233: barl + Location: 26,53 + Owner: BadGuy + Actor234: barl + Location: 26,50 + Owner: BadGuy + Actor235: brl3 + Location: 95,53 + Owner: USSR + CrashBarrel: brl3 + Location: 97,53 + Owner: USSR + Actor237: barl + Location: 101,46 + Owner: USSR + Actor238: barl + Location: 94,53 + Owner: USSR + CrashTower: ftur + Location: 96,52 + Faction: allies + Owner: USSR + Conyard: fact + Location: 91,77 + Owner: USSR + Actor241: kenn + Location: 79,84 + Owner: USSR + Actor242: powr + Location: 90,81 + Owner: USSR + Actor243: powr + Location: 90,84 + Owner: USSR + Actor244: silo + Location: 88,84 + Owner: USSR + Actor245: silo + Location: 88,85 + Owner: USSR + Actor246: silo + Location: 86,84 + Owner: USSR + Actor247: silo + Location: 86,85 + Owner: USSR + Actor248: ftur + Location: 70,90 + Owner: USSR + Actor249: ftur + Location: 70,77 + Owner: USSR + Actor250: dome + Location: 84,77 + Owner: USSR + Sam3: sam + Location: 89,59 + Owner: USSR + Sam4: sam + Location: 100,59 + Owner: USSR + Actor253: brl3 + Location: 36,64 + Owner: BadGuy + Actor254: barl + Location: 43,62 + Owner: BadGuy + TargetBarrel: barl + Location: 36,65 + Owner: BadGuy + ResponseBarrel: brl3 + Location: 34,63 + Owner: BadGuy + Actor257: v01 + Location: 29,88 + Owner: Neutral + Actor258: v03 + Location: 33,89 + Owner: Neutral + Actor259: v06 + Location: 31,91 + Owner: Neutral + Actor260: brl3 + Location: 85,69 + Owner: USSR + Actor261: brl3 + Location: 90,68 + Owner: USSR + Actor262: barl + Location: 91,68 + Owner: USSR + Actor263: barl + Location: 84,69 + Owner: USSR + Actor264: brl3 + Location: 103,48 + Owner: USSR + Actor265: brl3 + Location: 102,46 + Owner: USSR + Actor266: brl3 + Location: 101,47 + Owner: USSR + Actor267: ftur + Location: 84,68 + Owner: USSR + Actor268: ftur + Location: 90,69 + Owner: USSR + USSRWarFactory: weap + Location: 87,78 + Owner: USSR + USSRBarracks: barr + Location: 82,80 + Owner: USSR + Actor271: proc + Location: 82,84 + Owner: USSR + Actor272: silo + Location: 87,84 + Owner: USSR + Actor273: silo + Location: 87,85 + Owner: USSR + Actor274: powr + Location: 93,81 + Owner: USSR + Actor275: powr + Location: 93,84 + Owner: USSR + Actor276: brl3 + Location: 102,48 + Owner: USSR + Actor277: brl3 + Location: 86,68 + Owner: USSR + Actor278: powr + Location: 93,87 + Owner: USSR + Actor279: powr + Location: 90,87 + Owner: USSR + Actor280: brl3 + Location: 91,59 + Owner: USSR + Actor281: brl3 + Location: 89,58 + Owner: USSR + Actor282: brl3 + Location: 88,59 + Owner: USSR + Actor283: barl + Location: 90,58 + Owner: USSR + Actor284: barl + Location: 90,57 + Owner: USSR + Actor285: brl3 + Location: 22,51 + Owner: BadGuy + Actor286: brl3 + Location: 26,52 + Owner: BadGuy + Actor287: brl3 + Location: 24,50 + Owner: BadGuy + Actor288: brl3 + Location: 23,50 + Owner: BadGuy + Actor289: barl + Location: 24,49 + Owner: BadGuy + Actor290: 3tnk + Location: 79,76 + Owner: USSR + Facing: 127 + Actor291: 3tnk + Location: 81,76 + Owner: USSR + Facing: 127 + Truk: truk.mission + Location: 32,54 + Owner: BadGuy + Facing: 520 + Actor293: v2rl + Location: 40,52 + Owner: BadGuy + Facing: 95 + Actor294: 3tnk + Location: 77,92 + Owner: USSR + Facing: 31 + Actor295: v2rl + Location: 92,81 + Owner: USSR + Facing: 95 + Actor296: v2rl + Location: 92,89 + Owner: USSR + Facing: 191 + Actor297: 3tnk + Location: 87,91 + Owner: USSR + Facing: 31 + Harvester: harv + Location: 84,90 + Owner: USSR + CheckpointRifle2: e1 + Location: 80,76 + Owner: USSR + SubCell: 3 + Facing: 127 + CheckpointDog1: dog + Location: 77,79 + Owner: USSR + SubCell: 4 + Facing: 63 + CheckpointDog2: dog + Location: 77,79 + Owner: USSR + SubCell: 2 + Facing: 63 + CheckpointRifle1: e1 + Location: 80,76 + Owner: USSR + SubCell: 4 + Facing: 127 + FlameTowerDog1: dog + Location: 25,70 + Owner: BadGuy + SubCell: 4 + FlameTowerDog2: dog + Location: 26,71 + Owner: BadGuy + SubCell: 1 + Actor305: dog + Location: 33,64 + Owner: BadGuy + Facing: 127 + SubCell: 2 + Actor306: dog + Location: 34,64 + Owner: BadGuy + Facing: 127 + SubCell: 3 + PatrolA1: e1 + Location: 26,67 + Owner: BadGuy + Facing: 191 + SubCell: 2 + PatrolA2: dog + Location: 27,67 + Owner: BadGuy + Facing: 191 + SubCell: 3 + PatrolA3: dog + Location: 27,66 + Owner: BadGuy + Facing: 191 + SubCell: 3 + PatrolC1: e1 + Location: 64,55 + Owner: BadGuy + Facing: 127 + SubCell: 2 + PatrolC2: dog + Location: 64,55 + Owner: BadGuy + Facing: 127 + SubCell: 4 + PatrolC3: dog + Location: 64,55 + Owner: BadGuy + Facing: 127 + SubCell: 3 + Actor313: dog + Location: 73,91 + Owner: USSR + Facing: 31 + SubCell: 1 + Actor314: dog + Location: 72,87 + Owner: USSR + Facing: 63 + SubCell: 4 + Actor315: dog + Location: 75,81 + Owner: USSR + Facing: 31 + SubCell: 3 + Actor316: dog + Location: 61,88 + Owner: USSR + Facing: 95 + SubCell: 2 + Actor317: e1 + Location: 98,53 + SubCell: 3 + Faction: allies + Facing: 127 + Owner: USSR + Actor318: c5 + Location: 32,89 + Owner: GoodGuy + SubCell: 2 + Actor319: c6 + Location: 30,88 + Owner: GoodGuy + SubCell: 2 + Actor320: c2 + Location: 36,88 + Owner: GoodGuy + SubCell: 3 + Actor321: c8 + Location: 34,87 + Owner: GoodGuy + SubCell: 2 + PatrolB1: e1 + Location: 41,56 + Owner: USSR + SubCell: 2 + PatrolB2: dog + Location: 40,55 + Owner: USSR + SubCell: 4 + PatrolB3: dog + Location: 41,55 + Owner: USSR + SubCell: 3 + Airfield1: afld + Faction: allies + Location: 91,90 + Owner: USSR + Airfield2: afld + Faction: allies + Location: 91,92 + Owner: USSR + SpyEntry: waypoint + Location: 18,85 + Owner: Neutral + SpyLoadout: waypoint + Location: 24,77 + Owner: Neutral + SpyCamera1: waypoint + Location: 32,69 + Owner: Neutral + SpyCamera2: waypoint + Location: 38,59 + Owner: Neutral + FlameTowerDogRally: waypoint + Location: 30,64 + Owner: Neutral + APatrol1: waypoint + Location: 44,65 + Owner: Neutral + APatrol2: waypoint + Location: 27,67 + Owner: Neutral + BPatrol1: waypoint + Location: 41,55 + Owner: Neutral + BPatrol2: waypoint + Location: 27,55 + Owner: Neutral + CPatrol1: waypoint + Location: 46,56 + Owner: Neutral + CPatrol2: waypoint + Location: 57,61 + Owner: Neutral + CPatrol3: waypoint + Location: 64,56 + Owner: Neutral + ChurchSpawn: waypoint + Location: 48,70 + Owner: Neutral + SouthVillage: waypoint + Location: 33,88 + Owner: Neutral + TrukWaypoint1: waypoint + Location: 38,69 + Owner: Neutral + TrukWaypoint2: waypoint + Location: 48,79 + Owner: Neutral + TrukWaypoint3: waypoint + Location: 80,79 + Owner: Neutral + TrukWaypoint4: waypoint + Location: 80,77 + Owner: Neutral + TrukInspect: waypoint + Location: 80,78 + Owner: Neutral + TruckWaypoint5: waypoint + Location: 96,60 + Owner: Neutral + SpyJumpOut: waypoint + Location: 96,58 + Owner: Neutral + TruckCrash: waypoint + Location: 96,53 + Owner: Neutral + BridgePatrolWay: waypoint + Location: 90,66 + Owner: Neutral + RaxSpawn: waypoint + Location: 82,81 + Owner: Neutral + ExtractionLZ: waypoint + Location: 91,50 + Owner: Neutral + ExtractionEntry: waypoint + Location: 108,60 + Owner: Neutral + GreeceEntry1: waypoint + Location: 20,94 + Owner: Neutral + GreeceEntry2: waypoint + Location: 25,94 + Owner: Neutral + GreeceLoadout1: waypoint + Location: 21,77 + Owner: Neutral + GreeceLoadout2: waypoint + Location: 27,77 + Owner: Neutral + Actor357: fix + Owner: USSR + Location: 86,87 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml + +Notifications: notifications.yaml diff --git a/mods/ra/maps/allies-05b/notifications.yaml b/mods/ra/maps/allies-05b/notifications.yaml new file mode 100644 index 0000000000..8eecd58a81 --- /dev/null +++ b/mods/ra/maps/allies-05b/notifications.yaml @@ -0,0 +1,11 @@ +Sounds: + Notifications: + bombit: bombit1 + laugh: laugh1 + gotit: gotit1 + lefty: lefty1 + keepem: keepem1 + tuffguy: tuffguy1 + sking: sking1 + guyokay: guyokay1 + dogy: dogy1 diff --git a/mods/ra/maps/allies-05b/rules.yaml b/mods/ra/maps/allies-05b/rules.yaml new file mode 100644 index 0000000000..6f29bb9a6b --- /dev/null +++ b/mods/ra/maps/allies-05b/rules.yaml @@ -0,0 +1,175 @@ +World: + LuaScript: + Scripts: allies05b.lua, allies05b-AI.lua, campaign-global.lua + MissionData: + BriefingVideo: ally5.vqa + WinVideo: tanya2.vqa + LossVideo: grvestne.vqa + StartVideo: tanya1.vqa + Briefing: Rescue Tanya.\n\nOnce disguised, your spy can move past any enemy unit, except dogs, without being detected. Direct him into the weapons factory located at a nearby Soviet Base where he will hijack a truck and free Tanya.\n\nWith Tanya's help, take out the air defenses on the island and a Chinook will arrive to rescue her.\n\nThen destroy all remaining Soviet buildings and units. + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +Camera.Small: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +LST.IN: + Inherits: LST + RejectsOrders: + -Buildable: + -Selectable: + RenderSprites: + Image: lst + Interactable: + +TRAN: + -Selectable: + RevealsShroud: + Range: 4c0 + Targetable@GROUND: + TargetTypes: GroundActor + Interactable: + +TRAN.IN: + Inherits: TRAN + RenderSprites: + Image: TRAN + Cargo: + Types: disabled + +TRUK.mission: + Inherits: TRUK + Buildable: + Prerequisites: ~disabled + WithFacingSpriteBody: + -SpawnActorOnDeath: + RevealsShroud: + Range: 4c0 + ValidRelationships: Ally, Enemy + RequiresCondition: hijacked + ExternalCondition@hijacked: + Condition: hijacked + RenderSprites: + Image: TRUK + +TRUK: + Buildable: + Prerequisites: ~disabled + +SPY: + Infiltrates: + Types: Mission Objectives + +WEAP: + -InfiltrateForSupportPower: + Targetable: + TargetTypes: GroundActor, C4, DetonateAttack, Structure + +WEAP.infiltratable: + Inherits: WEAP + Buildable: + Prerequisites: ~disabled + Targetable@Spy: + TargetTypes: GroundActor, C4, DetonateAttack, Structure, Mission Objectives + RenderSprites: + Image: WEAP + ProvidesPrerequisite: + Prerequisite: weap + +MISS: + Tooltip: + Name: Prison + Targetable: + TargetTypes: GroundActor, C4, DetonateAttack, Structure, Mission Objectives + AttackOmni: + Armament: + Weapon: PrisonColt + +AFLD: + AirstrikePower@spyplane: + Prerequisites: ~disabled + ParatroopersPower@paratroopers: + Prerequisites: ~disabled + +FCOM: + MustBeDestroyed: + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +DTRK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +SS: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +THF: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ra/maps/allies-05b/weapons.yaml b/mods/ra/maps/allies-05b/weapons.yaml new file mode 100644 index 0000000000..d1ef8983b4 --- /dev/null +++ b/mods/ra/maps/allies-05b/weapons.yaml @@ -0,0 +1,13 @@ +PrisonColt: + ValidTargets: Ground, GroundActor + ReloadDelay: 7 + Report: gun5.aud + Projectile: InstantHit + Warhead@1Dam: SpreadDamage + AffectsParent: true + ValidTargets: Ground, GroundActor + +Pistol: + Range: 5c0 + Warhead@1Dam: SpreadDamage + Damage: 1000 diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 836988e8c1..cacfabaa62 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -5,6 +5,7 @@ Allied Campaign: allies-03b allies-04 allies-05a + allies-05b allies-06a allies-06b allies-07