diff --git a/OpenRA.sln b/OpenRA.sln index 0e8fe23a49..41c2f0e55b 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -66,6 +66,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\allies-05a\allies05a.lua = mods\ra\maps\allies-05a\allies05a.lua mods\ra\maps\allies-06a\allies06a-AI.lua = mods\ra\maps\allies-06a\allies06a-AI.lua mods\ra\maps\allies-06a\allies06a.lua = mods\ra\maps\allies-06a\allies06a.lua + mods\ra\maps\allies-06b\allies06b.lua = mods\ra\maps\allies-06b\allies06b.lua + mods\ra\maps\allies-06b\allies06b-AI.lua = mods\ra\maps\allies-06b\allies06b-AI.lua mods\ra\maps\desert-shellmap\desert-shellmap.lua = mods\ra\maps\desert-shellmap\desert-shellmap.lua mods\ra\maps\evacuation\evacuation.lua = mods\ra\maps\evacuation\evacuation.lua mods\ra\maps\exodus\exodus.lua = mods\ra\maps\exodus\exodus.lua diff --git a/mods/ra/maps/allies-06b/allies06b-AI.lua b/mods/ra/maps/allies-06b/allies06b-AI.lua new file mode 100644 index 0000000000..8af0df8b4b --- /dev/null +++ b/mods/ra/maps/allies-06b/allies06b-AI.lua @@ -0,0 +1,248 @@ +--[[ + Copyright 2007-2017 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 = +{ + { WaterUnloadEntry1.Location, WaterUnload1.Location }, + { WaterUnloadEntry2.Location, WaterUnload2.Location }, + { WaterUnloadEntry3.Location, WaterUnload3.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", "e2", "3tnk" } } +} + +WTransDelays = +{ + easy = 4, + normal = 3, + hard = 1 +} + +BuildDelays = +{ + easy = 90, + normal = 60, + hard = 30 +} + +WaterAttacks = +{ + easy = 1, + normal = 2, + hard = 3 +} + +WaterAttackTypes = +{ + easy = { "ss" }, + normal = { "ss", "ss" }, + hard = { "ss", "ss", "ss" } +} + +VehicleTypes = { "v2rl", "3tnk", "3tnk", "3tnk", "3tnk", "harv" } + +InfTypes = +{ + { "e1", "e1", "e1", "e1", "e1"}, + { "e2", "e2", "e1", "e1", "e1"}, + { "e4", "e4", "e4", "e1", "e1"} +} + +AttackRallyPoints = +{ + { SovietSideAttack1.Location, SovietBaseAttack.Location }, + { SovietBaseAttack.Location }, + { SovietSideAttack2.Location, SovietBaseAttack.Location } +} + +ImportantBuildings = { WarFactory, Airfield1, Airfield2, Radar2, Refinery, SovietConyard } +SovietAircraftType = { "yak" } +Yaks = { } +IdlingUnits = { } +IdlingTanks = { tank1, tank2, tank3, tank4, tank5, tank6, tank7 } +IdlingNavalUnits = { } + +InitialiseAttack = function() + Utils.Do(ImportantBuildings, function(a) + Trigger.OnDamaged(a, function() + Utils.Do(IdlingTanks, function(unit) + if not unit.IsDead then + IdleHunt(unit) + end + end) + end) + Trigger.OnCapture(a, function() + Utils.Do(IdlingTanks, function(unit) + if not unit.IsDead then + IdleHunt(unit) + end + end) + end) + end) +end + +Attack = 0 +ProduceInfantry = function() + if SovietBarracks.IsDead or SovietBarracks.Owner ~= ussr then + return + end + + Attack = Attack + 1 + local toBuild = Utils.Random(InfTypes) + ussr.Build(toBuild, function(units) + if Attack == 2 and not AttackTank1.IsDead then + units[#units + 1] = AttackTank1 + elseif Attack == 4 and not AttackTank2.IsDead then + units[#units + 1] = AttackTank2 + end + + SendAttack(units, Utils.Random(AttackRallyPoints)) + Trigger.AfterDelay(DateTime.Seconds(BuildDelays), ProduceInfantry) + end) +end + +ProduceVehicles = function() + if WarFactory.IsDead or WarFactory.Owner ~= ussr then + return + end + ussr.Build(VehicleTypes, function(units) + Utils.Do(units, function(unit) + if unit.Type ~= "harv" then + IdlingTanks[#IdlingTanks + 1] = unit + end + end) + end) +end + +ProduceNaval = function() + if SubPen.IsDead or SubPen.Owner ~= ussr then + return + end + + if not shouldProduce and #Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.Type == "syrd" end) < 1 then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceNaval) + return + end + + shouldProduce = true + + ussr.Build(WaterAttackTypes, function(units) + Utils.Do(units, function(unit) + IdlingNavalUnits[#IdlingNavalUnits + 1] = unit + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(40), ProduceNaval) + if #IdlingNavalUnits >= WaterAttacks then + Trigger.AfterDelay(DateTime.Seconds(20), function() + SendAttack(SetupNavalAttackGroup(), { SubPatrol1_2.Location }) + end) + end + 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 yak = units[1] + Yaks[#Yaks + 1] = yak + + Trigger.OnKilled(yak, ProduceAircraft) + + local alive = Utils.Where(Yaks, function(y) return not y.IsDead end) + if #alive < 2 then + Trigger.AfterDelay(DateTime.Seconds(BuildDelays / 2), ProduceAircraft) + end + + TargetAndAttack(yak) + end) +end + +TargetAndAttack = function(yak, target) + if not target or target.IsDead or (not target.IsInWorld) then + local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") and yak.CanTarget(self) end) + if #enemies > 0 then + target = Utils.Random(enemies) + end + end + + if target and yak.AmmoCount() > 0 and yak.CanTarget(target) then + yak.Attack(target) + else + yak.ReturnToBase() + end + + yak.CallFunc(function() + TargetAndAttack(yak, target) + end) +end + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +SendAttack = function(units, path) + Utils.Do(units, function(unit) + unit.Patrol(path, false) + IdleHunt(unit) + end) +end + +SetupNavalAttackGroup = function() + local units = { } + for i = 0, 3 do + if #IdlingNavalUnits == 0 then + return units + end + + local number = Utils.RandomInteger(1, #IdlingNavalUnits + 1) + if IdlingNavalUnits[number] and not IdlingNavalUnits[number].IsDead then + units[i] = IdlingNavalUnits[number] + table.remove(IdlingNavalUnits, number) + end + end + + return units +end + +WTransWaves = function() + 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(SovietBaseAttack.Location) + IdleHunt(a) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end + +ActivateAI = function() + local difficulty = Map.LobbyOption("difficulty") + WaterAttackTypes = WaterAttackTypes[difficulty] + WaterAttacks = WaterAttacks[difficulty] + WTransUnits = WTransUnits[difficulty] + WTransDelays = WTransDelays[difficulty] + BuildDelays = BuildDelays[difficulty] + + InitialiseAttack() + Trigger.AfterDelay(DateTime.Seconds(40), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(10), ProduceAircraft) + Trigger.AfterDelay(DateTime.Minutes(2) + DateTime.Seconds(10), ProduceVehicles) + + WarFactory.RallyPoint = WeaponMeetPoint.Location + Trigger.AfterDelay(DateTime.Minutes(4) + DateTime.Seconds(10), ProduceNaval) + Trigger.AfterDelay(DateTime.Minutes(WTransDelays + 1) + DateTime.Seconds(30), WTransWaves) +end diff --git a/mods/ra/maps/allies-06b/allies06b.lua b/mods/ra/maps/allies-06b/allies06b.lua new file mode 100644 index 0000000000..63253c46a1 --- /dev/null +++ b/mods/ra/maps/allies-06b/allies06b.lua @@ -0,0 +1,269 @@ +--[[ + Copyright 2007-2017 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. +]] +AlliedReinforcementsA = { "e1", "e1", "e1", "e1", "e1" } +AlliedReinforcementsB = { "e1", "e1", "e3", "e3", "e3" } +AlliedBoatReinforcements = { "pt", "pt" } +BadGuys = { BadGuy1, BadGuy2, BadGuy3, BadGuy4 } + +SovietDogPatrols = +{ + { Patrol_1_e1, Patrol_1_dog }, + { Patrol_2_e1, Patrol_2_dog }, + { Patrol_3_e1, Patrol_3_dog }, + { Patrol_4_e1, Patrol_4_dog } +} + +SovietDogPatrolPaths = +{ + { Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location }, + { Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location }, + { Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location }, + { Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location } +} + +Mammoths = { Mammoth1, Mammoth2, Mammoth3 } + +SovietMammothPaths = +{ + { TnkPatrol1.Location, TnkPatrol2.Location,TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location, TnkPatrol6.Location }, + { TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location }, + { TnkPatrol6.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location } +} + +SubPaths = { + { SubPatrol1_1.Location, SubPatrol1_2.Location }, + { SubPatrol2_1.Location, SubPatrol2_2.Location }, + { SubPatrol3_1.Location, SubPatrol3_2.Location }, + { SubPatrol4_1.Location, SubPatrol4_2.Location }, + { SubPatrol5_1.Location, SubPatrol5_2.Location } +} + +ParadropWaypoints = +{ + easy = { UnitBStopLocation }, + normal = { UnitBStopLocation, UnitAStopLocation }, + hard = { UnitBStopLocation, UnitCStopLocation, UnitAStopLocation } +} + +SovietTechLabs = { TechLab1, TechLab2 } + +TechLabCams = { TechCam1, TechCam2 } + +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 + +InitialSovietPatrols = function() + -- Dog Patrols + BeachDog.Patrol({ BeachPatrol1.Location, BeachPatrol2.Location, BeachPatrol3.Location }) + for i = 1, 4 do + GroupPatrol(SovietDogPatrols[i], SovietDogPatrolPaths[i], DateTime.Seconds(5)) + end + + -- Mammoth Patrols + for i = 1, 3 do + Trigger.AfterDelay(DateTime.Seconds(6 * (i - 1)), function() + Trigger.OnIdle(Mammoths[i], function() + Mammoths[i].Patrol(SovietMammothPaths[i]) + end) + end) + end + + -- Sub Patrols + Patrol1Sub.Patrol(SubPaths[1]) + Patrol2Sub.Patrol(SubPaths[2]) + Patrol3Sub.Patrol(SubPaths[3]) + Patrol4Sub.Patrol(SubPaths[4]) + Patrol5Sub.Patrol(SubPaths[5]) +end + +InitialAlliedReinforcements = function() + local camera = Actor.Create("Camera", true, { Owner = player, Location = DefaultCameraPosition.Location }) + Trigger.AfterDelay(DateTime.Seconds(30), camera.Destroy) + + Trigger.AfterDelay(DateTime.Seconds(1), function() + Reinforcements.Reinforce(player, AlliedReinforcementsA, { AlliedEntry3.Location, UnitCStopLocation.Location }, 2) + Reinforcements.Reinforce(player, AlliedReinforcementsB, { AlliedEntry2.Location, UnitAStopLocation.Location }, 2) + end) + Trigger.AfterDelay(DateTime.Seconds(3), function() + Reinforcements.Reinforce(player, { "mcv" }, { AlliedEntry1.Location, UnitBStopLocation.Location }) + Reinforcements.Reinforce(player, AlliedBoatReinforcements, { AlliedBoatEntry.Location, AlliedBoatStop.Location }) + end) +end + +CaptureRadarDome = function() + Trigger.OnKilled(Radar, function() + player.MarkFailedObjective(CaptureRadarDomeObj) + end) + + Trigger.OnCapture(Radar, function() + player.MarkCompletedObjective(CaptureRadarDomeObj) + Beacon.New(player, TechLab1.CenterPosition) + Beacon.New(player, TechLab2.CenterPosition) + Media.DisplayMessage("Coordinates of the Soviet tech centers discovered.") + if Map.LobbyOption("difficulty") ~= "hard" then + Utils.Do(TechLabCams, function(a) + Actor.Create("TECH.CAM", true, { Owner = player, Location = a.Location }) + end) + + if Map.LobbyOption("difficulty") == "easy" then + Actor.Create("Camera", true, { Owner = player, Location = Weapcam.Location }) + end + end + end) +end + +InfiltrateTechCenter = function() + Utils.Do(SovietTechLabs, function(a) + Trigger.OnInfiltrated(a, function() + if infiltrated then + return + end + infiltrated = true + DestroySovietsObj = player.AddPrimaryObjective("Destroy all Soviet buildings and units in the area.") + player.MarkCompletedObjective(InfiltrateTechCenterObj) + end) + + Trigger.OnCapture(a, function() + if not infiltrated then + Media.DisplayMessage("Do not capture the tech centers! Infiltrate one with a spy.") + end + end) + end) + + Trigger.OnAllKilledOrCaptured(SovietTechLabs, function() + if not player.IsObjectiveCompleted(InfiltrateTechCenterObj) then + player.MarkFailedObjective(InfiltrateTechCenterObj) + end + end) +end + +InfiltrateRef = function() + Trigger.OnInfiltrated(Refinery, function() + player.MarkCompletedObjective(InfiltrateRefObj) + end) + Trigger.OnCapture(Refinery, function() + player.MarkCompletedObjective(InfiltrateRefObj) + end) + Trigger.OnKilled(Refinery, function() + if not player.IsObjectiveCompleted(InfiltrateRefObj) then + player.MarkFailedObjective(InfiltrateRefObj) + end + end) +end + +Tick = function() + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(InfiltrateTechCenterObj) + end + + if DestroySovietsObj and ussr.HasNoRequiredUnits() then + player.MarkCompletedObjective(DestroySovietsObj) + end +end + +WorldLoaded = function() + player = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + InfiltrateTechCenterObj = player.AddPrimaryObjective("Infiltrate one of the Soviet tech centers with a spy.") + CaptureRadarDomeObj = player.AddSecondaryObjective("Capture the Radar Dome at the shore.") + InfiltrateRefObj = player.AddSecondaryObjective("Infiltrate the Refinery for money.") + + Camera.Position = DefaultCameraPosition.CenterPosition + + if Map.LobbyOption("difficulty") ~= "hard" then + Trigger.OnEnteredProximityTrigger(SovietDefenseCam.CenterPosition, WDist.New(1024 * 7), function(a, id) + if a.Owner == player then + Trigger.RemoveProximityTrigger(id) + local cam1 = Actor.Create("TECH.CAM", true, { Owner = player, Location = SovietDefenseCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam1.Destroy) + if not DefenseFlame1.IsDead then + local cam2 = Actor.Create("TECH.CAM", true, { Owner = player, Location = DefenseFlame1.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam2.Destroy) + end + if not DefenseFlame2.IsDead then + local cam3 = Actor.Create("TECH.CAM", true, { Owner = player, Location = DefenseFlame2.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam3.Destroy) + end + end + end) + + if Map.LobbyOption("difficulty") == "easy" then + Trigger.OnKilled(DefBrl1, function(a, b) + DefenseFlame1.Kill() + end) + Trigger.OnKilled(DefBrl2, function(a, b) + DefenseFlame2.Kill() + end) + end + end + + Utils.Do(BadGuys, function(a) + a.AttackMove(UnitCStopLocation.Location) + end) + + InitialAlliedReinforcements() + Trigger.AfterDelay(DateTime.Seconds(1), function() + InitialSovietPatrols() + end) + + Trigger.OnEnteredProximityTrigger(SovietMiniBaseCam.CenterPosition, WDist.New(1024 * 14), function(a, id) + if a.Owner == player then + Trigger.RemoveProximityTrigger(id) + local cam = Actor.Create("Camera", true, { Owner = player, Location = SovietMiniBaseCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy) + end + end) + CaptureRadarDome() + InfiltrateTechCenter() + InfiltrateRef() + Trigger.AfterDelay(0, ActivateAI) +end diff --git a/mods/ra/maps/allies-06b/map.bin b/mods/ra/maps/allies-06b/map.bin new file mode 100644 index 0000000000..36d149b4e7 Binary files /dev/null and b/mods/ra/maps/allies-06b/map.bin differ diff --git a/mods/ra/maps/allies-06b/map.png b/mods/ra/maps/allies-06b/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/allies-06b/map.png differ diff --git a/mods/ra/maps/allies-06b/map.yaml b/mods/ra/maps/allies-06b/map.yaml new file mode 100644 index 0000000000..b1defd7af6 --- /dev/null +++ b/mods/ra/maps/allies-06b/map.yaml @@ -0,0 +1,851 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 06b: Cripple Iron Curtain research + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 20,34,83,78 + +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 + Faction: soviet + Color: FF1400 + Enemies: Greece + PlayerReference@Greece: + Name: Greece + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F6 + LockSpawn: True + LockTeam: True + Enemies: USSR + +Actors: + Actor245: sbag + Owner: Neutral + Location: 69,83 + Actor0: sbag + Location: 69,80 + Owner: Neutral + Actor1: sbag + Location: 70,80 + Owner: Neutral + Actor2: sbag + Location: 71,80 + Owner: Neutral + Actor3: sbag + Location: 72,80 + Owner: Neutral + Actor4: sbag + Location: 73,80 + Owner: Neutral + Actor5: sbag + Location: 74,80 + Owner: Neutral + Actor6: sbag + Location: 75,80 + Owner: Neutral + Actor7: sbag + Location: 76,80 + Owner: Neutral + Actor8: sbag + Location: 77,80 + Owner: Neutral + Actor9: sbag + Location: 69,81 + Owner: Neutral + Actor10: sbag + Location: 75,81 + Owner: Neutral + Actor11: sbag + Location: 77,81 + Owner: Neutral + Actor12: sbag + Location: 69,82 + Owner: Neutral + Actor13: sbag + Location: 75,82 + Owner: Neutral + Actor14: sbag + Location: 76,82 + Owner: Neutral + Actor15: sbag + Location: 77,82 + Owner: Neutral + Actor17: sbag + Location: 69,84 + Owner: Neutral + Actor18: sbag + Location: 85,84 + Owner: Neutral + Actor19: sbag + Location: 86,84 + Owner: Neutral + Actor20: sbag + Location: 87,84 + Owner: Neutral + Actor21: sbag + Location: 85,85 + Owner: Neutral + Actor22: sbag + Location: 87,85 + Owner: Neutral + Actor23: sbag + Location: 85,86 + Owner: Neutral + Actor24: sbag + Location: 86,86 + Owner: Neutral + Actor25: sbag + Location: 87,86 + Owner: Neutral + Actor26: sbag + Location: 87,87 + Owner: Neutral + Actor27: sbag + Location: 87,88 + Owner: Neutral + Actor28: sbag + Location: 87,89 + Owner: Neutral + Actor29: sbag + Location: 69,90 + Owner: Neutral + Actor30: sbag + Location: 87,90 + Owner: Neutral + Actor31: sbag + Location: 69,91 + Owner: Neutral + Actor32: sbag + Location: 87,91 + Owner: Neutral + Actor33: sbag + Location: 69,92 + Owner: Neutral + Actor34: sbag + Location: 74,92 + Owner: Neutral + Actor35: sbag + Location: 75,92 + Owner: Neutral + Actor36: sbag + Location: 76,92 + Owner: Neutral + Actor37: sbag + Location: 81,92 + Owner: Neutral + Actor38: sbag + Location: 82,92 + Owner: Neutral + Actor39: sbag + Location: 83,92 + Owner: Neutral + Actor40: sbag + Location: 87,92 + Owner: Neutral + Actor41: sbag + Location: 69,93 + Owner: Neutral + Actor42: sbag + Location: 74,93 + Owner: Neutral + Actor43: sbag + Location: 76,93 + Owner: Neutral + Actor44: sbag + Location: 81,93 + Owner: Neutral + Actor45: sbag + Location: 83,93 + Owner: Neutral + Actor46: sbag + Location: 87,93 + Owner: Neutral + Actor47: sbag + Location: 69,94 + Owner: Neutral + Actor48: sbag + Location: 70,94 + Owner: Neutral + Actor49: sbag + Location: 71,94 + Owner: Neutral + Actor50: sbag + Location: 72,94 + Owner: Neutral + Actor51: sbag + Location: 73,94 + Owner: Neutral + Actor52: sbag + Location: 74,94 + Owner: Neutral + Actor53: sbag + Location: 75,94 + Owner: Neutral + Actor54: sbag + Location: 76,94 + Owner: Neutral + Actor55: sbag + Location: 81,94 + Owner: Neutral + Actor56: sbag + Location: 82,94 + Owner: Neutral + Actor57: sbag + Location: 83,94 + Owner: Neutral + Actor58: sbag + Location: 84,94 + Owner: Neutral + Actor59: sbag + Location: 85,94 + Owner: Neutral + Actor60: sbag + Location: 86,94 + Owner: Neutral + Actor61: sbag + Location: 87,94 + Owner: Neutral + Actor62: tc05 + Location: 54,109 + Owner: Neutral + Actor63: tc02 + Location: 46,103 + Owner: Neutral + Actor64: t08 + Location: 43,103 + Owner: Neutral + Actor65: t08 + Location: 46,109 + Owner: Neutral + Actor66: t01 + Location: 52,102 + Owner: Neutral + Actor67: t11 + Location: 72,94 + Owner: Neutral + Actor68: tc05 + Location: 89,89 + Owner: Neutral + Actor69: tc04 + Location: 84,95 + Owner: Neutral + Actor70: tc03 + Location: 78,97 + Owner: Neutral + Actor71: tc01 + Location: 73,97 + Owner: Neutral + Actor72: t17 + Location: 76,95 + Owner: Neutral + Actor73: t16 + Location: 77,102 + Owner: Neutral + Actor74: tc02 + Location: 76,40 + Owner: Neutral + Actor75: tc05 + Location: 72,47 + Owner: Neutral + Actor76: tc04 + Location: 72,45 + Owner: Neutral + Actor77: t08 + Location: 75,49 + Owner: Neutral + Actor78: t08 + Location: 75,40 + Owner: Neutral + Actor79: tc02 + Location: 39,34 + Owner: Neutral + Actor80: t08 + Location: 38,36 + Owner: Neutral + Actor81: tc05 + Location: 93,43 + Owner: Neutral + Actor82: tc03 + Location: 93,42 + Owner: Neutral + Actor83: tc01 + Location: 91,45 + Owner: Neutral + Actor84: t08 + Location: 93,45 + Owner: Neutral + Actor85: tc02 + Location: 42,38 + Owner: Neutral + Actor86: tc04 + Location: 42,41 + Owner: Neutral + Actor87: tc05 + Location: 46,39 + Owner: Neutral + Actor88: t17 + Location: 46,42 + Owner: Neutral + Actor89: tc01 + Location: 51,104 + Owner: Neutral + Actor90: t17 + Location: 47,106 + Owner: Neutral + Actor91: t16 + Location: 53,107 + Owner: Neutral + Actor92: t08 + Location: 50,109 + Owner: Neutral + Actor93: t08 + Location: 51,106 + Owner: Neutral + Actor94: t08 + Location: 87,95 + Owner: Neutral + Actor95: tc04 + Location: 88,93 + Owner: Neutral + Actor96: tc05 + Location: 88,95 + Owner: Neutral + Actor97: t01 + Location: 36,110 + Owner: Neutral + Actor98: t07 + Location: 38,110 + Owner: Neutral + Actor99: t07 + Location: 34,100 + Owner: Neutral + Actor100: t08 + Location: 33,105 + Owner: Neutral + Actor101: mine + Location: 42,108 + Owner: Neutral + Actor102: mine + Location: 77,105 + Owner: Neutral + Actor103: mine + Location: 84,104 + Owner: Neutral + Actor104: mine + Location: 31,108 + Owner: Neutral + Actor106: ftur + Location: 69,89 + Owner: USSR + Actor107: ftur + Location: 69,85 + Owner: USSR + Actor108: powr + Location: 80,87 + Owner: USSR + Actor109: powr + Location: 78,85 + Owner: USSR + Actor114: ftur + Location: 57,45 + Owner: USSR + Actor115: ftur + Location: 62,45 + Owner: USSR + Actor118: silo + Location: 68,35 + Owner: USSR + Actor119: silo + Location: 71,34 + Owner: USSR + Actor120: silo + Location: 67,34 + Owner: USSR + Actor121: silo + Location: 72,35 + Owner: USSR + Actor124: apwr + Location: 81,46 + Owner: USSR + Actor125: apwr + Location: 58,59 + Owner: USSR + Actor126: apwr + Location: 75,46 + Owner: USSR + Actor127: apwr + Location: 78,46 + Owner: USSR + Actor128: apwr + Location: 50,59 + Owner: USSR + Actor131: kenn + Location: 52,45 + Owner: USSR + Actor132: kenn + Location: 75,41 + Owner: USSR + Actor133: tsla + Location: 77,64 + Owner: USSR + Actor134: tsla + Location: 33,44 + Owner: USSR + Actor135: tsla + Location: 72,60 + Owner: USSR + Actor136: kenn + Location: 72,50 + Owner: USSR + Actor137: brl3 + Location: 52,91 + Owner: USSR + Actor138: barl + Location: 52,90 + Owner: USSR + Actor139: brl3 + Location: 47,90 + Owner: USSR + Actor140: barl + Location: 46,91 + Owner: USSR + Actor143: barl + Location: 52,92 + Owner: USSR + Actor146: barl + Location: 46,90 + Owner: USSR + Actor148: 3tnk + Location: 49,91 + Owner: USSR + Facing: 127 + Actor158: harv + Location: 78,37 + Owner: USSR + Facing: 223 + Actor161: v2rl + Location: 85,55 + Owner: USSR + Facing: 63 + Actor165: e1 + Location: 75,93 + Owner: USSR + SubCell: 3 + Actor166: e1 + Location: 82,93 + Owner: USSR + SubCell: 3 + Actor167: e1 + Location: 86,85 + Owner: USSR + SubCell: 2 + Actor168: e1 + Location: 76,81 + Owner: USSR + SubCell: 1 + Actor169: e2 + Location: 75,93 + Owner: USSR + SubCell: 2 + Actor170: e2 + Location: 82,93 + Owner: USSR + SubCell: 2 + Actor171: e2 + Location: 86,85 + Owner: USSR + SubCell: 3 + Actor172: e2 + Location: 76,81 + Owner: USSR + SubCell: 3 + Actor182: e1 + Location: 54,105 + Owner: Greece + SubCell: 1 + Actor183: e1 + Location: 53,106 + Owner: Greece + Facing: 31 + SubCell: 2 + Actor184: e1 + Location: 55,105 + Owner: Greece + Facing: 223 + SubCell: 4 + Actor186: ss + Location: 67,62 + Owner: USSR + Facing: 127 + Actor236: mine + Owner: Neutral + Location: 88,35 + Actor237: mine + Owner: Neutral + Location: 40,52 + Actor238: mine + Owner: Neutral + Location: 28,36 + Actor244: camera + Owner: USSR + Location: 49,107 + SovietBaseAttack: waypoint + Owner: Neutral + Location: 49,87 + SovietSideAttack1: waypoint + Owner: Neutral + Location: 66,93 + SovietSideAttack2: waypoint + Owner: Neutral + Location: 66,82 + AttackTank1: 3tnk + Location: 71,87 + Owner: USSR + Facing: 63 + AttackTank2: 3tnk + Location: 80,84 + Owner: USSR + Facing: 95 + AlliedEntry1: waypoint + Location: 49,111 + Owner: Neutral + AlliedEntry2: waypoint + Location: 46,111 + Owner: Neutral + AlliedEntry3: waypoint + Location: 52,111 + Owner: Neutral + AlliedBoatEntry: waypoint + Location: 60,111 + Owner: Neutral + UnitAStopLocation: waypoint + Location: 49,108 + Owner: Neutral + UnitBStopLocation: waypoint + Location: 47,108 + Owner: Neutral + UnitCStopLocation: waypoint + Location: 51,108 + Owner: Neutral + AlliedBoatStop: waypoint + Location: 60,108 + Owner: Neutral + WaterUnload1: waypoint + Location: 79,109 + Owner: Neutral + WaterUnload2: waypoint + Location: 26,107 + Owner: Neutral + WaterUnload3: waypoint + Location: 83,82 + Owner: Neutral + WaterUnloadEntry1: waypoint + Location: 102,108 + Owner: Neutral + WaterUnloadEntry2: waypoint + Owner: Neutral + Location: 20,68 + WaterUnloadEntry3: waypoint + Location: 102,53 + Owner: Neutral + DefaultCameraPosition: waypoint + Location: 54,107 + Owner: Neutral + SovietMiniBaseCam: waypoint + Location: 77,87 + Owner: Neutral + SovietDefenseCam: waypoint + Owner: Neutral + Location: 49,91 + TechCam1: waypoint + Owner: Neutral + Location: 55,58 + TechCam2: waypoint + Owner: Neutral + Location: 91,43 + Weapcam: waypoint + Owner: Neutral + Location: 53,47 + TechLab1: stek + Location: 54,57 + Owner: USSR + TechLab2: stek + Location: 90,42 + Owner: USSR + Airfield1: afld + Location: 60,48 + Owner: USSR + Airfield2: afld + Location: 58,41 + Owner: USSR + WarFactory: weap + Location: 52,46 + Owner: USSR + WeaponMeetPoint: waypoint + Owner: Neutral + Location: 65,46 + SovietConyard: fact + Location: 70,54 + Owner: USSR + Refinery: proc + Location: 68,35 + Owner: USSR + Radar: dome + Location: 75,86 + Owner: USSR + Radar2: dome + Location: 59,44 + Owner: USSR + SovietBarracks: barr + Location: 73,83 + Owner: USSR + SubPen: spen + Location: 72,62 + Owner: USSR + BadGuy1: e1 + Location: 48,95 + Owner: USSR + Facing: 95 + SubCell: 4 + BadGuy2: e1 + Location: 50,98 + Owner: USSR + Facing: 95 + SubCell: 1 + BadGuy3: e1 + Location: 50,96 + Owner: USSR + Facing: 95 + SubCell: 1 + BadGuy4: e1 + Location: 48,97 + Owner: USSR + Facing: 95 + SubCell: 4 + Patrol1Sub: ss + Location: 96,58 + Owner: USSR + Facing: 127 + SubPatrol1_1: waypoint + Location: 96,58 + Owner: Neutral + SubPatrol1_2: waypoint + Location: 86,77 + Owner: Neutral + Patrol2Sub: ss + Location: 39,70 + Owner: USSR + Facing: 95 + SubPatrol2_1: waypoint + Location: 42,63 + Owner: Neutral + SubPatrol2_2: waypoint + Location: 22,72 + Owner: Neutral + Patrol3Sub: ss + Location: 22,64 + Owner: USSR + Facing: 191 + SubPatrol3_1: waypoint + Location: 41,75 + Owner: Neutral + SubPatrol3_2: waypoint + Location: 22,64 + Owner: Neutral + Patrol4Sub: ss + Location: 79,51 + Owner: USSR + Facing: 191 + SubPatrol4_1: waypoint + Location: 79,51 + Owner: Neutral + SubPatrol4_2: waypoint + Location: 102,51 + Owner: Neutral + Patrol5Sub: ss + Owner: USSR + Location: 94,75 + Facing: 125 + SubPatrol5_1: waypoint + Location: 94,94 + Owner: Neutral + SubPatrol5_2: waypoint + Location: 94,75 + Owner: Neutral + Mammoth1: 4tnk + Location: 69,43 + Owner: USSR + Facing: 63 + Mammoth2: 4tnk + Location: 43,40 + Owner: USSR + Facing: 63 + Mammoth3: 4tnk + Location: 54,37 + Owner: USSR + Facing: 63 + TnkPatrol1: waypoint + Location: 69,43 + Owner: Neutral + TnkPatrol2: waypoint + Location: 69,55 + Owner: Neutral + TnkPatrol3: waypoint + Location: 56,55 + Owner: Neutral + TnkPatrol4: waypoint + Location: 41,44 + Owner: Neutral + TnkPatrol5: waypoint + Location: 42,37 + Owner: Neutral + TnkPatrol6: waypoint + Location: 62,37 + Owner: Neutral + DefenseFlame1: ftur + Location: 51,91 + Owner: USSR + DefenseFlame2: ftur + Location: 47,91 + Owner: USSR + DefBrl1: brl3 + Location: 51,90 + Owner: USSR + DefBrl2: brl3 + Location: 46,89 + Owner: USSR + Patrol_1_e1: e1 + Location: 40,44 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_1_dog: dog + Location: 40,43 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_2_e1: e1 + Location: 41,37 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_2_dog: dog + Location: 41,37 + Owner: USSR + Facing: 63 + SubCell: 3 + Patrol_3_e1: e1 + Location: 84,43 + Owner: USSR + Facing: 63 + SubCell: 2 + Patrol_3_dog: dog + Location: 86,43 + Owner: USSR + Facing: 63 + SubCell: 0 + Patrol_4_e1: e1 + Location: 67,51 + Owner: USSR + Facing: 95 + SubCell: 1 + Patrol_4_dog: dog + Location: 66,50 + Owner: USSR + Facing: 95 + SubCell: 3 + Patrol1: waypoint + Location: 85,43 + Owner: Neutral + Patrol2: waypoint + Location: 66,50 + Owner: Neutral + Patrol3: waypoint + Location: 53,55 + Owner: Neutral + Patrol4: waypoint + Location: 46,49 + Owner: Neutral + Patrol5: waypoint + Location: 40,44 + Owner: Neutral + Patrol6: waypoint + Location: 41,37 + Owner: Neutral + Patrol7: waypoint + Location: 54,37 + Owner: Neutral + Patrol8: waypoint + Location: 71,43 + Owner: Neutral + tank1: 3tnk + Location: 81,56 + Owner: USSR + Facing: 95 + tank2: 3tnk + Location: 77,54 + Owner: USSR + Facing: 95 + tank3: 3tnk + Location: 64,43 + Owner: USSR + Facing: 159 + tank4: 3tnk + Location: 45,43 + Owner: USSR + Facing: 127 + tank5: 3tnk + Location: 51,56 + Owner: USSR + tank6: v2rl + Location: 46,41 + Owner: USSR + Facing: 95 + tank7: v2rl + Location: 62,42 + Owner: USSR + Facing: 159 + BeachDog: dog + Location: 75,54 + Owner: USSR + Facing: 95 + SubCell: 1 + BeachPatrol1: waypoint + Owner: Neutral + Location: 68,59 + BeachPatrol2: waypoint + Owner: Neutral + Location: 75,54 + BeachPatrol3: waypoint + Location: 77,58 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml \ No newline at end of file diff --git a/mods/ra/maps/allies-06b/rules.yaml b/mods/ra/maps/allies-06b/rules.yaml new file mode 100644 index 0000000000..649b7b3911 --- /dev/null +++ b/mods/ra/maps/allies-06b/rules.yaml @@ -0,0 +1,93 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: allies06b.lua, allies06b-AI.lua + MissionData: + BriefingVideo: ally6.vqa + WinVideo: allymorf.vqa + LossVideo: overrun.vqa + StartVideo: mcv.vqa + Briefing: Priority one is to establish a base and get your spy into one of the Soviet Tech Centers in the base across the gulf.\nData on the Iron Curtain is in there and we need it.\n\nOnce you get the data complete your mission...\nWipe out everything. + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E4,E4 + +3TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +ARTY: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +TECH.CAM: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + Type: CenterPosition + +STEK: + Targetable: + TargetTypes: Ground, Water, Structure, C4, DetonateAttack, SpyInfiltrate + +APWR: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +DD: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +SS: + AutoTarget: + InitialStanceAI: AttackAnything \ No newline at end of file diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 734283463a..4d4ae2d8e6 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -6,6 +6,7 @@ Allied Campaign: ./mods/ra/maps/allies-04 ./mods/ra/maps/allies-05a ./mods/ra/maps/allies-06a + ./mods/ra/maps/allies-06b Soviet Campaign: ./mods/ra/maps/soviet-01 ./mods/ra/maps/soviet-02a