From d2039a14e1bc0ac273ed65ca27c83cbed8a85cff Mon Sep 17 00:00:00 2001 From: Smittytron Date: Mon, 22 Feb 2021 15:15:46 -0600 Subject: [PATCH] Add Counterstrike mission Fall of Greece 2: Evacuation --- .../evacuation-AI.lua | 130 ++ .../evacuation.lua | 278 +++++ .../maps/fall-of-greece-2-evacuation/map.bin | Bin 0 -> 81937 bytes .../maps/fall-of-greece-2-evacuation/map.png | Bin 0 -> 17580 bytes .../maps/fall-of-greece-2-evacuation/map.yaml | 1046 +++++++++++++++++ .../fall-of-greece-2-evacuation/rules.yaml | 107 ++ mods/ra/missions.yaml | 1 + 7 files changed, 1562 insertions(+) create mode 100644 mods/ra/maps/fall-of-greece-2-evacuation/evacuation-AI.lua create mode 100644 mods/ra/maps/fall-of-greece-2-evacuation/evacuation.lua create mode 100644 mods/ra/maps/fall-of-greece-2-evacuation/map.bin create mode 100644 mods/ra/maps/fall-of-greece-2-evacuation/map.png create mode 100644 mods/ra/maps/fall-of-greece-2-evacuation/map.yaml create mode 100644 mods/ra/maps/fall-of-greece-2-evacuation/rules.yaml diff --git a/mods/ra/maps/fall-of-greece-2-evacuation/evacuation-AI.lua b/mods/ra/maps/fall-of-greece-2-evacuation/evacuation-AI.lua new file mode 100644 index 0000000000..d21f732df4 --- /dev/null +++ b/mods/ra/maps/fall-of-greece-2-evacuation/evacuation-AI.lua @@ -0,0 +1,130 @@ +--[[ + 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 = { } +SovietInfantry = { "e1", "e2" } +SovietVehicles = { "3tnk", "3tnk", "v2rl" } +SovietAircraftType = { "yak" } +Yaks = { } +AttackPaths = { AttackRight, AttackLeft } + +AttackGroupSizes = +{ + easy = 8, + normal = 9, + hard = 10 +} + +ProductionInterval = +{ + easy = DateTime.Seconds(20), + normal = DateTime.Seconds(10), + hard = DateTime.Seconds(5) +} + +SendAttackGroup = function() + if #AttackGroup < AttackGroupSize then + return + end + + local path = Utils.Random(AttackPaths) + Utils.Do(AttackGroup, function(unit) + if not unit.IsDead then + unit.AttackMove(path.Location) + Trigger.OnIdle(unit, unit.Hunt) + end + end) + + AttackGroup = { } +end + +ProduceInfantry = function() + if USSRRax.IsDead or USSRRax.Owner ~= USSR then + return + end + + USSR.Build({ Utils.Random(SovietInfantry) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceInfantry) + end) +end + +ProduceVehicles = 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")], ProduceVehicles) + 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) + + local alive = Utils.Where(Yaks, function(y) return not y.IsDead end) + if #alive < 2 then + Trigger.AfterDelay(DateTime.Seconds(ProductionInterval[Map.LobbyOption("difficulty")] / 2), ProduceAircraft) + end + + InitializeAttackAircraft(yak, Allies) + end) +end + +ParadropDelays = +{ + easy = { DateTime.Minutes(1), DateTime.Minutes(2) }, + normal = { DateTime.Seconds(45), DateTime.Seconds(105) }, + hard = { DateTime.Seconds(30), DateTime.Seconds(90) } +} + +ParadropLZs = { ParaLZ1.CenterPosition, ParaLZ2.CenterPosition, ParaLZ3.CenterPosition, ParaLZ4.CenterPosition } + +Paradrop = function() + if Airfield.IsDead or Airfield.Owner ~= USSR then + return + end + + local aircraft = StandardDrop.TargetParatroopers(Utils.Random(ParadropLZs)) + Utils.Do(aircraft, function(a) + Trigger.OnPassengerExited(a, function(t, p) + IdleHunt(p) + end) + end) + + Trigger.AfterDelay(Utils.RandomInteger(ParadropDelay[1], ParadropDelay[2]), Paradrop) +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) + + ParadropDelay = ParadropDelays[Difficulty] + AttackGroupSize = AttackGroupSizes[Difficulty] + Trigger.AfterDelay(DateTime.Seconds(30), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(3), ProduceVehicles) + Trigger.AfterDelay(DateTime.Minutes(4), Paradrop) + Trigger.AfterDelay(DateTime.Minutes(5), ProduceAircraft) +end diff --git a/mods/ra/maps/fall-of-greece-2-evacuation/evacuation.lua b/mods/ra/maps/fall-of-greece-2-evacuation/evacuation.lua new file mode 100644 index 0000000000..3a319dc840 --- /dev/null +++ b/mods/ra/maps/fall-of-greece-2-evacuation/evacuation.lua @@ -0,0 +1,278 @@ +--[[ + 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. +]] +Difficulty = Map.LobbyOption("difficulty") +AlliedReinforcementsA = { "jeep", "jeep" } +AlliedReinforcementsB = { "e1", "e1", "e1", "e3", "e3" } +AlliedReinforcementsC = { "jeep", "mcv" } +IslandPatrol = { SubPatrol1.Location, SubPatrol2.Location, SubPatrol3.Location, SubPatrol4.Location } +Submarines = { Sub1, Sub2, Sub3, Sub4, Sub5, Sub6, Sub7, Sub8 } +RifleSquad = { Rifle1, Rifle2, Rifle3 } +NWVillageTrigger = { CPos.New(31, 64), CPos.New(32, 64), CPos.New(34, 51), CPos.New(35, 51), CPos.New(36, 51) } +SWVillageTrigger = { CPos.New(44, 97), CPos.New(45, 97), CPos.New(46, 97), CPos.New(47, 97) } +MiddleVillageTrigger = { CPos.New(52, 70), CPos.New(53, 70), CPos.New(54, 70) } +EastVillageTrigger = { CPos.New(78, 61), CPos.New(79, 61), CPos.New(80, 61), CPos.New(81, 61), CPos.New(82, 61) } +CivilianTypes = { "c2", "c3", "c4", "c5", "c6", "c8", "c9", "c10", "c11" } +NWVillage = { NWChurch, NWHouse1, NWHouse2, NWHouse3 } +SWVillage = { SWChurch, SWHouse1, SWHouse2, SWHouse3, SWHouse4 } +MiddleVillage = { MiddleChurch, MiddleHouse1, MiddleHouse2, MiddleHouse3, MiddleHouse4 } +EastVillage = { EastChurch, EastHouse1, EastHouse2, EastHouse3 } +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +MissionStart = function() + Reinforcements.Reinforce(Allies, AlliedReinforcementsA, { AlliedSpawn.Location, AlliedBase.Location }, 5) + Trigger.AfterDelay(DateTime.Seconds(2), function() + AlliesArrived = true + Reinforcements.Reinforce(Allies, AlliedReinforcementsB, { AlliedSpawn.Location, AlliedBase.Location }, 2) + Utils.Do(RifleSquad, function(actor) + if not actor.IsDead then + actor.AttackMove(AlliedBase.Location) + actor.Hunt() + end + end) + end) + + Sub1.Patrol(IslandPatrol, true, 1) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + Reinforcements.Reinforce(Allies, AlliedReinforcementsC, { AlliedSpawn.Location, AlliedBase.Location }, 5) + end) + + Trigger.OnKilled(NWChurch, function() + if not NWChurchEmpty then + CiviliansKilled = CiviliansKilled + 5 + end + end) + Trigger.OnKilled(EastChurch, function() + if not EastChurchEmpty then + CiviliansKilled = CiviliansKilled + 5 + end + end) + Trigger.OnKilled(MiddleChurch, function() + if not MiddleChurchEmpty then + CiviliansKilled = CiviliansKilled + 5 + end + end) + Trigger.OnKilled(SWChurch, function() + if not SWChurchEmpty then + CiviliansKilled = CiviliansKilled + 5 + end + end) + + Trigger.OnAllKilled(Submarines, function() + Allies.MarkCompletedObjective(ClearWaterway) + end) +end + +VillageSetup = function() + local foot1Triggered + Trigger.OnEnteredFootprint(NWVillageTrigger, function(actor, id) + if actor.Owner == Allies and not foot1Triggered then + Trigger.RemoveFootprintTrigger(id) + foot1Triggered = true + + Utils.Do(NWVillage, function(building) + building.Owner = Allies + end) + + Civs1 = Reinforcements.Reinforce(Allies, Utils.Take(5, Utils.Shuffle(CivilianTypes)), { ChurchNorthwest.Location, VillageNorthwest.Location }, 0) + if not NWChurch.IsDead then + Utils.Do(Civs1, function(civ) + Trigger.OnKilled(civ, function() + CiviliansKilled = CiviliansKilled + 1 + end) + end) + NWChurchEmpty = true + end + end + + Trigger.AfterDelay(DateTime.Seconds(30), function() + local nwAttackers = Reinforcements.Reinforce(USSR, { "3tnk", "3tnk", "3tnk" }, { NWVillageAttack.Location, VillageNorthwest.Location }, 20) + Utils.Do(nwAttackers, IdleHunt) + end) + end) + + local foot2Triggered + Trigger.OnEnteredFootprint(EastVillageTrigger, function(actor, id) + if actor.Owner == Allies and not foot2Triggered then + Trigger.RemoveFootprintTrigger(id) + foot2Triggered = true + + Utils.Do(EastVillage, function(building) + building.Owner = Allies + end) + + Civs2 = Reinforcements.Reinforce(Allies, Utils.Take(5, Utils.Shuffle(CivilianTypes)), { ChurchEast.Location, VillageEast.Location }, 0) + if not EastChurch.IsDead then + Utils.Do(Civs2, function(civ) + Trigger.OnKilled(civ, function() + CiviliansKilled = CiviliansKilled + 1 + end) + end) + EastChurchEmpty = true + end + + local villageDrop = FlamerDrop.TargetParatroopers(VillageEast.CenterPosition, Angle.North) + Utils.Do(villageDrop, function(a) + Trigger.OnPassengerExited(a, function(t, p) + IdleHunt(p) + end) + end) + end + end) + + local foot3Triggered + Trigger.OnEnteredFootprint(MiddleVillageTrigger, function(actor, id) + if actor.Owner == Allies and not foot3Triggered then + Trigger.RemoveFootprintTrigger(id) + foot3Triggered = true + + Utils.Do(MiddleVillage, function(building) + building.Owner = Allies + end) + + Civs3 = Reinforcements.Reinforce(Allies, Utils.Take(5, Utils.Shuffle(CivilianTypes)), { ChurchMiddle.Location, VillageMiddle.Location }, 0) + if not MiddleChurch.IsDead then + Utils.Do(Civs3, function(civ) + Trigger.OnKilled(civ, function() + CiviliansKilled = CiviliansKilled + 1 + end) + end) + MiddleChurchEmpty = true + end + + local proxy = Actor.Create("powerproxy.parabombs", false, { Owner = USSR }) + proxy.TargetAirstrike(ChurchMiddle.CenterPosition, Angle.NorthWest) + end + end) + + local foot4Triggered + Trigger.OnEnteredFootprint(SWVillageTrigger, function(actor, id) + if actor.Owner == Allies and not foot4Triggered then + Trigger.RemoveFootprintTrigger(id) + foot4Triggered = true + + Utils.Do(SWVillage, function(building) + building.Owner = Allies + end) + + Civs4 = Reinforcements.Reinforce(Allies, Utils.Take(5, Utils.Shuffle(CivilianTypes)), { ChurchSouthwest.Location, VillageSouthwest.Location }, 0) + if not SWChurch.IsDead then + Utils.Do(Civs4, function(civ) + Trigger.OnKilled(civ, function() + CiviliansKilled = CiviliansKilled + 1 + end) + end) + SWChurchEmpty = true + end + end + + Trigger.AfterDelay(DateTime.Seconds(30), function() + local swAttackers = Reinforcements.Reinforce(USSR, { "3tnk", "3tnk", "3tnk", "ttnk", "e4", "e4", "e4" }, { SWVillageAttack.Location, VillageSouthwest.Location }, 20) + Utils.Do(swAttackers, IdleHunt) + end) + end) +end + +CiviliansEvacuatedThreshold = +{ + hard = 20, + normal = 15, + easy = 10 +} +CiviliansKilledThreshold = +{ + hard = 1, + normal = 6, + easy = 11 +} +CiviliansEvacuated = 0 +CiviliansKilled = 0 +EvacuateCivilians = function() + Trigger.OnInfiltrated(SafeHouse, function() + CiviliansEvacuated = CiviliansEvacuated + 1 + UserInterface.SetMissionText(CiviliansEvacuated .. "/" .. CiviliansEvacuatedThreshold .. " civilians evacuated.", TextColor) + end) + + Trigger.OnKilled(SafeHouse, function() + USSR.MarkCompletedObjective(SovietObj) + end) + + local enemyBase = Utils.Where(USSR.GetActors(), function(actor) + return + actor.HasProperty("Sell") and + actor.Type ~= "brik" + end) + + Trigger.OnAllKilled(enemyBase, function() + Media.PlaySoundNotification(Allies, "AlertBleep") + Media.DisplayMessage("Alfa Niner this is Pegasus. We are on site and ready to assist with the evacuation.", "Chinook pilot") + Reinforcements.Reinforce(Allies, { "tran" }, { ChinookEntry.Location, ChinookLZ.Location }) + end) +end + +Tick = function() + USSR.Cash = 10000 + if CiviliansEvacuated >= CiviliansEvacuatedThreshold then + Allies.MarkCompletedObjective(RescueCivilians) + end + + if CiviliansKilled >= CiviliansKilledThreshold then + Allies.MarkFailedObjective(RescueCivilians) + end + + if AlliesArrived and Allies.HasNoRequiredUnits() then + USSR.MarkCompletedObjective(SovietObj) + end +end + +WorldLoaded = function() + Allies = Player.GetPlayer("Allies") + USSR = Player.GetPlayer("USSR") + + Trigger.OnObjectiveAdded(Allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + if Map.LobbyOption("difficulty") == "easy" then + RescueCivilians = Allies.AddObjective("Evacuate at least half of the civilians to the island\nshelter.") + elseif Map.LobbyOption("difficulty") == "normal" then + RescueCivilians = Allies.AddObjective("Evacuate at least three quarters of the civilians to\nthe island shelter.") + else + RescueCivilians = Allies.AddObjective("Evacuate all civilians to the island shelter.") + end + + ClearWaterway = Allies.AddObjective("Clear the area of enemy submarine activity.", "Secondary", false) + SovietObj = USSR.AddObjective("Defeat Allies.") + + Trigger.OnObjectiveCompleted(Allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(Allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(Allies, function() + Media.PlaySpeechNotification(Allies, "Lose") + end) + Trigger.OnPlayerWon(Allies, function() + Media.PlaySpeechNotification(Allies, "Win") + end) + + CiviliansEvacuatedThreshold = CiviliansEvacuatedThreshold[Difficulty] + CiviliansKilledThreshold = CiviliansKilledThreshold[Difficulty] + TextColor = Allies.Color + UserInterface.SetMissionText(CiviliansEvacuated .. "/" .. CiviliansEvacuatedThreshold .. " civilians evacuated.", TextColor) + StandardDrop = Actor.Create("paradrop", false, { Owner = USSR }) + FlamerDrop = Actor.Create("flamerdrop", false, { Owner = USSR }) + Camera.Position = DefaultCameraPosition.CenterPosition + MissionStart() + VillageSetup() + EvacuateCivilians() + ActivateAI() +end diff --git a/mods/ra/maps/fall-of-greece-2-evacuation/map.bin b/mods/ra/maps/fall-of-greece-2-evacuation/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..dc9bb6f4f44e742172d4a20924b6185b272b9020 GIT binary patch literal 81937 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