diff --git a/OpenRA.sln b/OpenRA.sln index 779e5be68a..6770938a14 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -68,6 +68,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\allies-03b\allies03b.lua = mods\ra\maps\allies-03b\allies03b.lua mods\ra\maps\allies-05a\allies05a-AI.lua = mods\ra\maps\allies-05a\allies05a-AI.lua 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\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-06a/allies06a-AI.lua b/mods/ra/maps/allies-06a/allies06a-AI.lua new file mode 100644 index 0000000000..d5a8c9f1a8 --- /dev/null +++ b/mods/ra/maps/allies-06a/allies06a-AI.lua @@ -0,0 +1,226 @@ + +WTransWays = +{ + { WaterUnloadEntry1.Location, WaterUnload1.Location }, + { WaterUnloadEntry2.Location, WaterUnload2.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"}, + { "e2", "e1", "e1"}, + { "e4", "e4", "e1"} +} + +AttackRallyPoints = +{ + { SovietOreAttackStart.Location, SovietOreAttack1.Location }, + { SovietBaseAttack.Location }, + { SovietOreAttack2.Location } +} + +ImportantBuildings = { WeaponsFactory, Airfield, dome2, SovietConyard } +SovietAircraftType = { "yak" } +Yaks = { } +IdlingUnits = { } +IdlingTanks = { tank1, tank2, tank3, tank4, tank5, tank6, tank7, tank8 } +IdlingNavalUnits = { } + +InitialiseAttack = function() + Utils.Do(ImportantBuildings, function(a) + Trigger.OnDamaged(a, function() + Utils.Do(IdlingTanks, function(unit) + if not unit.IsDead then + unit.Hunt() + 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 AttackTnk1.IsDead then + units[#units + 1] = AttackTnk1 + elseif Attack == 4 and not AttackTnk2.IsDead then + units[#units + 1] = AttackTnk2 + end + + SendAttack(units, Utils.Random(AttackRallyPoints)) + Trigger.AfterDelay(DateTime.Seconds(BuildDelays), ProduceInfantry) + end) +end + +ProduceVehicles = function() + if WeaponsFactory.IsDead or WeaponsFactory.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 + + 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(), { Harbor.Location }) + end) + end + end) +end + +ProduceAircraft = function() + if Airfield.IsDead or Airfield.Owner ~= ussr then + return + end + + ussr.Build(SovietAircraftType, function(units) + local yak = units[1] + Yaks[#Yaks + 1] = yak + + Trigger.OnKilled(yak, ProduceAircraft) + if #Yaks == 1 then + Trigger.AfterDelay(DateTime.Seconds(BuildDelays), 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") end) + if #enemies > 0 then + target = Utils.Random(enemies) + else + yak.Wait(DateTime.Seconds(5)) + end + end + + if target and yak.AmmoCount() > 0 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) + 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(UnitBStopLocation.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(10), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(10), function() + ProduceAircraft() + ProduceVehicles() + end) + + WeaponsFactory.RallyPoint = WeaponMeetPoint.Location + SubPen.RallyPoint = SubMeetPoint.Location + Trigger.AfterDelay(DateTime.Minutes(5) + DateTime.Seconds(10), ProduceNaval) + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end diff --git a/mods/ra/maps/allies-06a/allies06a.lua b/mods/ra/maps/allies-06a/allies06a.lua new file mode 100644 index 0000000000..e73c0e93df --- /dev/null +++ b/mods/ra/maps/allies-06a/allies06a.lua @@ -0,0 +1,220 @@ +AlliedReinforcementsA = { "e1", "e1", "e1", "e1", "e1" } +AlliedReinforcementsB = { "e3", "e3", "e3", "e3", "e3" } +BadGuys = { BadGuy1, BadGuy2, BadGuy3 } + +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, TnkPatrol7.Location, TnkPatrol8.Location }, + { TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location, TnkPatrol8.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location }, + { TnkPatrol8.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location } +} + +SovietSubPath = { SubPatrol3_1.Location, SubPatrol3_2.Location, SubPatrol3_3.Location } + +ParadropWaypoints = +{ + easy = { UnitBStopLocation }, + normal = { UnitBStopLocation, UnitAStopLocation }, + hard = { UnitBStopLocation, MCVStopLocation, UnitAStopLocation } +} + +SovietTechLabs = { TechLab1, TechLab2, TechLab3 } +TechLabCams = { TechCam1, TechCam2, TechCam3 } + +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 + 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({ SubPatrol1_1.Location, SubPatrol1_2.Location }) + Patrol2Sub.Patrol({ SubPatrol2_1.Location, SubPatrol2_2.Location }) + Patrol3Sub1.Patrol(SovietSubPath) + Patrol3Sub2.Patrol(SovietSubPath) +end + +InitialAlliedReinforcements = function() + local camera = Actor.Create("Camera", true, { Owner = player, Location = DefaultCameraPosition.Location }) + Trigger.AfterDelay(DateTime.Seconds(30), camera.Destroy) + + Reinforcements.Reinforce(player, AlliedReinforcementsA, { AlliedEntry1.Location, UnitBStopLocation.Location }, 2) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Reinforcements.Reinforce(player, AlliedReinforcementsB, { AlliedEntry2.Location, UnitAStopLocation.Location }, 2) + end) + Trigger.AfterDelay(DateTime.Seconds(5), function() + Reinforcements.Reinforce(player, { "mcv" }, { AlliedEntry3.Location, MCVStopLocation.Location }) + end) +end + +CaptureRadarDome = function() + Trigger.OnKilled(Radar, function() + player.MarkFailedObjective(CaptureRadarDomeObj) + end) + + Trigger.OnCapture(Radar, function() + player.MarkCompletedObjective(CaptureRadarDomeObj) + end) +end + +infiltrated = false +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) + + local Proxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr }) + Utils.Do(ParadropWaypoints[Map.LobbyOption("difficulty")], function(waypoint) + Proxy.SendParatroopers(waypoint.CenterPosition, false, Facing.South) + end) + Proxy.Destroy() + end) + end) + + Trigger.OnAllKilled(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.OnKilled(Refinery, function() + if not player.IsObjectiveCompleted(InfiltrateRefObj) then + player.MarkFailedObjective(InfiltrateRefObj) + end + end) +end + +Tick = function() + if DateTime.GameTime > DateTime.Seconds(10) and 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.") + 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 + 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 + + Utils.Do(BadGuys, function(a) + a.AttackMove(MCVStopLocation.Location) + end) + + Trigger.AfterDelay(DateTime.Seconds(1), function() + InitialAlliedReinforcements() + InitialSovietPatrols() + end) + + Trigger.OnEnteredProximityTrigger(SovietMiniBaseCam.CenterPosition, WDist.New(1024 * 6), 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-06a/map.bin b/mods/ra/maps/allies-06a/map.bin new file mode 100644 index 0000000000..451ec95764 Binary files /dev/null and b/mods/ra/maps/allies-06a/map.bin differ diff --git a/mods/ra/maps/allies-06a/map.png b/mods/ra/maps/allies-06a/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/allies-06a/map.png differ diff --git a/mods/ra/maps/allies-06a/map.yaml b/mods/ra/maps/allies-06a/map.yaml new file mode 100644 index 0000000000..3e542cf78a --- /dev/null +++ b/mods/ra/maps/allies-06a/map.yaml @@ -0,0 +1,642 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 06a: Cripple Iron Curtain research + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 3,61,94,54 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Enemies: USSR, 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: + Actor176: camera + Owner: USSR + Location: 19,66 + Actor0: sbag + Location: 22,81 + Owner: USSR + Actor1: sbag + Location: 23,81 + Owner: USSR + Actor2: sbag + Location: 24,81 + Owner: USSR + Actor3: sbag + Location: 22,82 + Owner: USSR + Actor4: sbag + Location: 24,82 + Owner: USSR + Actor5: sbag + Location: 22,83 + Owner: USSR + Actor6: sbag + Location: 23,83 + Owner: USSR + Actor7: sbag + Location: 24,83 + Owner: USSR + Actor8: sbag + Location: 12,84 + Owner: USSR + Actor9: sbag + Location: 13,84 + Owner: USSR + Actor10: sbag + Location: 14,84 + Owner: USSR + Actor11: sbag + Location: 12,85 + Owner: USSR + Actor12: sbag + Location: 14,85 + Owner: USSR + Actor13: sbag + Location: 12,86 + Owner: USSR + Actor14: sbag + Location: 13,86 + Owner: USSR + Actor15: sbag + Location: 14,86 + Owner: USSR + Actor16: t08 + Location: 88,68 + Owner: Neutral + Actor17: t08 + Location: 26,72 + Owner: Neutral + Actor18: tc02 + Location: 52,92 + Owner: Neutral + Actor19: tc01 + Location: 57,96 + Owner: Neutral + Actor20: t15 + Location: 3,76 + Owner: Neutral + Actor21: tc05 + Location: 11,74 + Owner: Neutral + Actor22: t15 + Location: 74,81 + Owner: Neutral + Actor23: t08 + Location: 77,85 + Owner: Neutral + Actor24: tc05 + Location: 94,106 + Owner: Neutral + Actor25: tc03 + Location: 84,94 + Owner: Neutral + Actor26: t16 + Location: 83,94 + Owner: Neutral + Actor27: t08 + Location: 85,96 + Owner: Neutral + Actor28: tc01 + Location: 62,105 + Owner: Neutral + Actor29: tc01 + Location: 89,98 + Owner: Neutral + Actor30: tc02 + Location: 85,100 + Owner: Neutral + Actor31: tc03 + Location: 87,99 + Owner: Neutral + Actor32: t17 + Location: 89,99 + Owner: Neutral + Actor33: t16 + Location: 85,99 + Owner: Neutral + Actor34: t13 + Location: 86,98 + Owner: Neutral + Actor35: tc04 + Location: 15,74 + Owner: Neutral + Actor36: tc01 + Location: 24,73 + Owner: Neutral + Actor37: t17 + Location: 27,71 + Owner: Neutral + Actor38: t13 + Location: 36,69 + Owner: Neutral + Actor39: t12 + Location: 34,70 + Owner: Neutral + Actor40: t11 + Location: 23,84 + Owner: Neutral + Actor41: t08 + Location: 9,78 + Owner: Neutral + Actor42: t05 + Location: 12,89 + Owner: Neutral + Actor43: tc03 + Location: 12,82 + Owner: Neutral + Actor44: t17 + Location: 5,82 + Owner: Neutral + Actor45: tc02 + Location: 9,95 + Owner: Neutral + Actor46: tc03 + Location: 7,94 + Owner: Neutral + Actor47: tc05 + Location: 9,109 + Owner: Neutral + Actor48: tc04 + Location: 3,100 + Owner: Neutral + Actor49: tc02 + Location: 3,110 + Owner: Neutral + Actor50: tc01 + Location: 6,105 + Owner: Neutral + Actor51: t17 + Location: 12,106 + Owner: Neutral + Actor52: t16 + Location: 8,107 + Owner: Neutral + Actor53: t14 + Location: 11,100 + Owner: Neutral + Actor54: t01 + Location: 29,102 + Owner: Neutral + Actor55: t03 + Location: 36,104 + Owner: Neutral + Actor56: t06 + Location: 25,104 + Owner: Neutral + Actor57: t08 + Location: 38,100 + Owner: Neutral + Actor58: tc03 + Location: 95,72 + Owner: Neutral + Actor59: mine + Location: 5,68 + Owner: Neutral + Actor60: mine + Location: 9,104 + Owner: Neutral + Actor61: mine + Location: 5,113 + Owner: Neutral + Actor70: kenn + Location: 91,94 + Owner: USSR + Actor71: kenn + Location: 71,83 + Owner: USSR + Actor74: kenn + Location: 77,101 + Owner: USSR + Actor75: ftur + Location: 16,82 + Owner: USSR + Actor76: ftur + Location: 19,82 + Owner: USSR + Actor77: tsla + Location: 60,97 + Owner: USSR + Actor78: apwr + Location: 79,108 + Owner: USSR + Actor79: apwr + Location: 82,109 + Owner: USSR + Actor81: apwr + Location: 82,106 + Owner: USSR + Actor82: apwr + Location: 81,112 + Owner: USSR + Actor83: silo + Location: 94,104 + Owner: USSR + Actor84: silo + Location: 94,105 + Owner: USSR + Actor85: silo + Location: 95,104 + Owner: USSR + Actor86: silo + Location: 95,105 + Owner: USSR + Actor87: silo + Location: 85,102 + Owner: USSR + Actor88: silo + Location: 85,93 + Owner: USSR + Actor89: apwr + Location: 87,101 + Owner: USSR + Actor90: ftur + Location: 80,87 + Owner: USSR + Actor105: jeep + Location: 19,64 + Owner: Greece + Facing: 127 + Actor109: e2 + Location: 13,85 + Owner: USSR + Facing: 223 + SubCell: 2 + Actor110: e2 + Location: 23,82 + Owner: USSR + Facing: 31 + SubCell: 3 + Actor111: e1 + Location: 20,64 + Owner: Greece + Facing: 159 + SubCell: 2 + Actor112: e1 + Location: 19,65 + Owner: Greece + Facing: 127 + SubCell: 0 + Actor113: e1 + Location: 18,64 + Owner: Greece + Facing: 127 + SubCell: 1 + Actor114: e1 + Location: 23,82 + Owner: USSR + SubCell: 2 + Actor115: e1 + Location: 13,85 + Owner: USSR + Facing: 63 + SubCell: 3 + Actor117: dog + Location: 79,100 + Owner: USSR + Facing: 191 + SubCell: 0 + Actor126: ss + Location: 59,102 + Owner: USSR + Facing: 95 + Actor130: ss + Location: 74,113 + Owner: USSR + Facing: 63 + Actor177: mine + Owner: Neutral + Location: 56,94 + Actor178: mine + Owner: Neutral + Location: 64,108 + Actor180: mine + Owner: Neutral + Location: 93,84 + SovietConyard: fact + Location: 69,96 + Owner: USSR + dome2: dome + Location: 90,109 + Owner: USSR + harv: harv + Location: 82,94 + Owner: USSR + Facing: 31 + tank1: 3tnk + Location: 69,90 + Owner: USSR + Facing: 95 + tank2: 3tnk + Location: 93,102 + Owner: USSR + Facing: 31 + tank3: 3tnk + Location: 85,90 + Owner: USSR + tank4: 3tnk + Location: 93,106 + Owner: USSR + Facing: 63 + tank5: 3tnk + Location: 73,100 + Owner: USSR + Facing: 63 + tank6: v2rl + Location: 80,90 + Owner: USSR + Facing: 223 + tank7: v2rl + Location: 70,91 + Owner: USSR + Facing: 95 + tank8: v2rl + Location: 74,101 + Owner: USSR + Facing: 63 + SubPatrol3_1: waypoint + Location: 48,114 + Owner: Neutral + SubPatrol3_2: waypoint + Location: 48,98 + Owner: Neutral + SubPatrol3_3: waypoint + Location: 79,71 + Owner: Neutral + Patrol3Sub1: ss + Location: 46,105 + Owner: USSR + Facing: 63 + Patrol3Sub2: ss + Location: 77,71 + Owner: USSR + Facing: 63 + Patrol1Sub: ss + Location: 46,71 + Owner: USSR + Facing: 127 + Patrol2Sub: ss + Location: 52,85 + Owner: USSR + Facing: 63 + SubPatrol1_1: waypoint + Location: 42,71 + Owner: Neutral + SubPatrol1_2: waypoint + Location: 58,84 + Owner: Neutral + SubPatrol2_1: waypoint + Location: 56,87 + Owner: Neutral + SubPatrol2_2: waypoint + Location: 40,74 + Owner: Neutral + SubMeetPoint: waypoint + Location: 48,105 + Owner: Neutral + SovietBaseAttack: waypoint + Location: 18,68 + Owner: Neutral + Patrol1: waypoint + Location: 92,108 + Owner: Neutral + Patrol2: waypoint + Location: 76,103 + Owner: Neutral + Patrol3: waypoint + Location: 65,110 + Owner: Neutral + Patrol4: waypoint + Location: 68,101 + Owner: Neutral + Patrol5: waypoint + Location: 68,93 + Owner: Neutral + Patrol6: waypoint + Location: 72,84 + Owner: Neutral + Patrol7: waypoint + Location: 79,88 + Owner: Neutral + Patrol8: waypoint + Location: 90,94 + Owner: Neutral + TnkPatrol1: waypoint + Location: 52,100 + Owner: Neutral + TnkPatrol2: waypoint + Location: 65,94 + Owner: Neutral + TnkPatrol3: waypoint + Location: 65,78 + Owner: Neutral + TnkPatrol4: waypoint + Location: 84,82 + Owner: Neutral + TnkPatrol5: waypoint + Location: 79,92 + Owner: Neutral + TnkPatrol6: waypoint + Location: 77,106 + Owner: Neutral + TnkPatrol7: waypoint + Location: 61,107 + Owner: Neutral + TnkPatrol8: waypoint + Location: 70,100 + Owner: Neutral + Mammoth1: 4tnk + Location: 63,94 + Owner: USSR + Facing: 63 + Mammoth2: 4tnk + Location: 82,87 + Owner: USSR + Facing: 223 + Mammoth3: 4tnk + Location: 76,105 + Owner: USSR + Facing: 31 + AttackTnk1: 3tnk + Location: 18,85 + Owner: USSR + Facing: 31 + AttackTnk2: 3tnk + Location: 17,82 + Owner: USSR + Facing: 223 + BadGuy1: e1 + Location: 20,69 + Owner: USSR + SubCell: 3 + BadGuy2: e1 + Location: 19,70 + Owner: USSR + SubCell: 0 + BadGuy3: e1 + Location: 24,67 + Owner: USSR + Facing: 63 + SubCell: 3 + Patrol_1_e1: e1 + Location: 71,84 + Owner: USSR + SubCell: 4 + Patrol_1_dog: dog + Location: 72,84 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_2_e1: e1 + Location: 89,94 + Owner: USSR + SubCell: 0 + Patrol_2_dog: dog + Location: 89,93 + Owner: USSR + Facing: 95 + SubCell: 4 + Patrol_3_e1: e1 + Location: 92,108 + Owner: USSR + SubCell: 1 + Patrol_3_dog: dog + Location: 92,108 + Owner: USSR + SubCell: 3 + Patrol_4_e1: e1 + Location: 76,102 + Owner: USSR + SubCell: 4 + Patrol_4_dog: dog + Location: 77,102 + Owner: USSR + Facing: 95 + SubCell: 4 + WaterUnloadEntry1: waypoint + Location: 22,114 + Owner: Neutral + WaterUnloadEntry2: waypoint + Location: 43,114 + Owner: Neutral + WaterUnload1: waypoint + Location: 15,108 + Owner: Neutral + WaterUnload2: waypoint + Location: 30,93 + Owner: Neutral + SovietOreAttackStart: waypoint + Location: 5,73 + Owner: Neutral + SovietOreAttack1: waypoint + Location: 3,65 + Owner: Neutral + SovietOreAttack2: waypoint + Location: 36,67 + Owner: Neutral + Harbor: waypoint + Location: 19,92 + Owner: Neutral + UnitAStopLocation: waypoint + Location: 16,64 + Owner: Neutral + MCVStopLocation: waypoint + Location: 23,64 + Owner: Neutral + UnitBStopLocation: waypoint + Location: 19,63 + Owner: Neutral + DefaultCameraPosition: waypoint + Location: 19,64 + Owner: Neutral + SovietMiniBaseCam: waypoint + Location: 18,83 + Owner: Neutral + Weapcam: waypoint + Location: 76,94 + Owner: Neutral + TechCam1: waypoint + Location: 69,83 + Owner: Neutral + TechCam2: waypoint + Location: 94,94 + Owner: Neutral + TechCam3: waypoint + Owner: Neutral + Location: 94,109 + AlliedEntry1: waypoint + Location: 19,61 + Owner: Neutral + AlliedEntry2: waypoint + Location: 14,61 + Owner: Neutral + AlliedEntry3: waypoint + Location: 23,61 + Owner: Neutral + SubPen: spen + Location: 63,99 + Owner: USSR + TechLab1: stek + Location: 93,93 + Owner: USSR + TechLab2: stek + Location: 68,82 + Owner: USSR + TechLab3: stek + Location: 93,108 + Owner: USSR + SovietBarracks: barr + Location: 15,83 + Owner: USSR + WeaponsFactory: weap + Location: 75,93 + Owner: USSR + Airfield: afld + Location: 74,86 + Owner: USSR + Refinery: proc + Location: 81,90 + Owner: USSR + Radar: dome + Location: 20,83 + Owner: USSR + WeaponMeetPoint: waypoint + Owner: Neutral + Location: 73,90 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ra/maps/allies-06a/rules.yaml b/mods/ra/maps/allies-06a/rules.yaml new file mode 100644 index 0000000000..14b682e4e9 --- /dev/null +++ b/mods/ra/maps/allies-06a/rules.yaml @@ -0,0 +1,98 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: allies06a.lua, allies06a-AI.lua + MissionData: + 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. + BriefingVideo: ally6.vqa + WinVideo: allymorf.vqa + LossVideo: overrun.vqa + StartVideo: mcv.vqa + 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 + +TSLA: + Power: + Amount: -150 + +3TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +ARTY: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +STEK: + Targetable: + TargetTypes: Ground, Water, Structure, C4, DetonateAttack, SpyInfiltrate + +TECH.CAM: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + Type: CenterPosition + +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 + diff --git a/mods/ra/maps/allies-06a/weapons.yaml b/mods/ra/maps/allies-06a/weapons.yaml new file mode 100644 index 0000000000..d2b5afea76 --- /dev/null +++ b/mods/ra/maps/allies-06a/weapons.yaml @@ -0,0 +1,7 @@ +M60mg: + Range: 5c0 + ReloadDelay: 20 + Burst: 1 + Warhead: SpreadDamage + Damage: 20 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index a79ad082ac..734283463a 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -5,6 +5,7 @@ Allied Campaign: ./mods/ra/maps/allies-03b ./mods/ra/maps/allies-04 ./mods/ra/maps/allies-05a + ./mods/ra/maps/allies-06a Soviet Campaign: ./mods/ra/maps/soviet-01 ./mods/ra/maps/soviet-02a