Add Counterstrike mission Fall of Greece 1: Personal War
This commit is contained in:
BIN
mods/ra/maps/fall-of-greece-1-personal-war/map.bin
Normal file
BIN
mods/ra/maps/fall-of-greece-1-personal-war/map.bin
Normal file
Binary file not shown.
BIN
mods/ra/maps/fall-of-greece-1-personal-war/map.png
Normal file
BIN
mods/ra/maps/fall-of-greece-1-personal-war/map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
1310
mods/ra/maps/fall-of-greece-1-personal-war/map.yaml
Normal file
1310
mods/ra/maps/fall-of-greece-1-personal-war/map.yaml
Normal file
File diff suppressed because it is too large
Load Diff
534
mods/ra/maps/fall-of-greece-1-personal-war/personal-war.lua
Normal file
534
mods/ra/maps/fall-of-greece-1-personal-war/personal-war.lua
Normal file
@@ -0,0 +1,534 @@
|
||||
--[[
|
||||
Copyright 2007-2020 The OpenRA Developers (see AUTHORS)
|
||||
This file is part of OpenRA, which is free software. It is made
|
||||
available to you under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation, either version 3 of
|
||||
the License, or (at your option) any later version. For more
|
||||
information, see COPYING.
|
||||
]]
|
||||
FootprintTrigger1 = { CPos.New(77, 85), CPos.New(77, 86), CPos.New(77, 87), CPos.New(77, 88) }
|
||||
Trigger1Rifles = { Rifle1, Rifle2, Rifle3, Rifle4 }
|
||||
DoomedHeliPath = { DoomedHeliEntry.Location, DoomedHeli.Location }
|
||||
FootprintTrigger2 = { CPos.New(90, 82), CPos.New(91, 82), CPos.New(93, 82), CPos.New(94, 82), CPos.New(95, 82), CPos.New(96, 82), CPos.New(97, 82), CPos.New(98, 82), CPos.New(99, 82), CPos.New(102, 82) }
|
||||
Grenadiers = { "e2", "e2", "e2", "e2", "e2" }
|
||||
FootprintTrigger3 = { CPos.New(88, 77), CPos.New(88, 76), CPos.New(91, 75), CPos.New(92, 75), CPos.New(93, 75), CPos.New(94, 75), CPos.New(95, 75), CPos.New(96, 75), CPos.New(97, 75), CPos.New(98, 75), CPos.New(99, 75), CPos.New(100, 75) }
|
||||
Trigger3Team = { Gren1, Gren2, Gren3, Gren4, Gren5, VillageMammoth }
|
||||
FootprintTrigger4 = { CPos.New(94, 60), CPos.New(95, 60), CPos.New(96, 60), CPos.New(97, 60), CPos.New(98, 60), CPos.New(99, 60), CPos.New(100, 60), CPos.New(101, 60), CPos.New(102, 60), CPos.New(103, 60), CPos.New(104, 60) }
|
||||
CivilianSquad1 = { "c1", "c2", "c3", "c4", "c5" }
|
||||
CivilianSquad2 = { "c6", "c7", "c8", "c9", "c10" }
|
||||
FootprintTrigger5 = { CPos.New(99, 53), CPos.New(100, 53), CPos.New(101, 53), CPos.New(102, 53), CPos.New(103, 53), CPos.New(104, 53) }
|
||||
Trigger5Team = { TeamFive1, TeamFive2, TeamFive3, TeamFive4, TeamFive5, TeamFive6, TeamFive7 }
|
||||
TentTeam = { "e1", "e1", "e1", "e1", "e3", "e3" }
|
||||
Doggos = { "dog", "dog", "dog" }
|
||||
SovietAttackers = { "3tnk", "e2", "e2", "e2", "v2rl" }
|
||||
MigEntryPath = { BaseAttackersSpawn, GuideSpawn }
|
||||
FootprintTrigger6 = { CPos.New(81, 57), CPos.New(81, 58), CPos.New(81, 59), CPos.New(81, 60), CPos.New(81, 61) }
|
||||
FootprintTrigger7 = { CPos.New(73, 58), CPos.New(73, 59), CPos.New(73, 60), CPos.New(73, 61) }
|
||||
FootprintTrigger8 = { CPos.New(51, 83), CPos.New(51, 84), CPos.New(51, 85), CPos.New(51, 86), CPos.New(51, 87), CPos.New(51, 88) }
|
||||
FootprintTrigger9 = { CPos.New(28, 77), CPos.New(29, 77), CPos.New(30, 77), CPos.New(31, 77), CPos.New(32, 77), CPos.New(33, 77), CPos.New(34, 77), CPos.New(35, 77), CPos.New(36, 77), CPos.New(37, 77), CPos.New(38, 77) }
|
||||
BridgeMammoths = { BridgeMammoth1, BridgeMammoth2 }
|
||||
FootprintTrigger10 = { CPos.New(24, 83), CPos.New(24, 84), CPos.New(24, 85) }
|
||||
FootprintTrigger11 = { CPos.New(20, 65), CPos.New(21, 65), CPos.New(22, 65) }
|
||||
SovBase = { SovFact, SovPower1, SovPower2, SovRax, SovWarFactory, SovFlame1, SovFlame2, SovTesla }
|
||||
SovBaseTeam = { SovBaseTeam1, SovBaseTeam2, SovBaseTeam3, SovBaseTeam4, SovBaseTeam5, SovBaseTeam6 }
|
||||
RaxTeam = { "e1", "e2", "e2", "e4", "e4", "shok" }
|
||||
FootprintTrigger12 = { CPos.New(35, 39), CPos.New(35, 40), CPos.New(35, 41), CPos.New(35, 42) }
|
||||
ExtractionHelicopterType = "tran"
|
||||
ExtractionPath = { ChinookEntry.Location, ExtractionPoint.Location }
|
||||
|
||||
lstReinforcements =
|
||||
{
|
||||
first =
|
||||
{
|
||||
actors = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk" },
|
||||
entryPath = { BoatSpawn.Location, BoatUnload1.Location },
|
||||
exitPath = { BoatSpawn.Location }
|
||||
},
|
||||
second =
|
||||
{
|
||||
actors = { "1tnk", "1tnk", "2tnk", "2tnk", "2tnk" },
|
||||
entryPath = { BoatSpawn.Location, BoatUnload2.Location },
|
||||
exitPath = { BoatSpawn.Location }
|
||||
}
|
||||
}
|
||||
|
||||
IdleHunt = function(actor) if not actor.IsDead then Trigger.OnIdle(actor, actor.Hunt) end end
|
||||
|
||||
VIPs = { }
|
||||
MissionStart = function()
|
||||
FlareBoy.Move(LightFlare.Location)
|
||||
|
||||
Trigger.OnEnteredFootprint({ LightFlare.Location }, function(actor, id)
|
||||
if actor.Owner == Greece then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
local insertionFlare = Actor.Create("flare", true, { Owner = Allies, Location = LightFlare.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(2), function()
|
||||
FlareBoy.AttackMove(FlareBoyAttack.Location)
|
||||
if Map.LobbyOption("difficulty") == "normal" then
|
||||
local normalDrop = InsertionDrop.TargetParatroopers(InsertionPoint.CenterPosition, Angle.New(892))
|
||||
Utils.Do(normalDrop, function(a)
|
||||
Trigger.OnPassengerExited(a, function(t,p)
|
||||
VIPs[#VIPs + 1] = p
|
||||
FailTrigger()
|
||||
end)
|
||||
end)
|
||||
else
|
||||
local hardDrop = InsertionDropHard.TargetParatroopers(InsertionPoint.CenterPosition, Angle.New(892))
|
||||
Utils.Do(hardDrop, function(a)
|
||||
Trigger.OnPassengerExited(a, function(t,p)
|
||||
VIPs[#VIPs + 1] = p
|
||||
FailTrigger()
|
||||
end)
|
||||
end)
|
||||
Trigger.AfterDelay(DateTime.Seconds(6), function()
|
||||
Media.DisplayMessage("Commander, there are several civilians in the area.\nWe'll need you to call out targets.", "Tanya")
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(20), function()
|
||||
insertionFlare.Destroy()
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
FailTrigger = function()
|
||||
Trigger.OnAnyKilled(VIPs, function()
|
||||
Allies.MarkFailedObjective(ProtectVIPs)
|
||||
end)
|
||||
end
|
||||
|
||||
FootprintTriggers = function()
|
||||
local foot1Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger1, function(actor, id)
|
||||
if actor.Owner == Allies and not foot1Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot1Triggered = true
|
||||
|
||||
local trig1cam = Actor.Create("camera", true, { Owner = Allies, Location = Trigger1Cam.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
trig1cam.Destroy()
|
||||
end)
|
||||
|
||||
Utils.Do(Trigger1Rifles, function(actor)
|
||||
if not actor.IsDead then
|
||||
actor.AttackMove(Trigger1Move.Location)
|
||||
end
|
||||
end)
|
||||
|
||||
DoomedHeli = Reinforcements.ReinforceWithTransport(Greece, ExtractionHelicopterType, nil, DoomedHeliPath)[1]
|
||||
end
|
||||
end)
|
||||
|
||||
local foot2Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger2, function(actor, id)
|
||||
if actor.Owner == Allies and not foot2Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot2Triggered = true
|
||||
|
||||
local drop1 = RifleDropS.TargetParatroopers(VillageParadrop.CenterPosition, Angle.SouthWest)
|
||||
Utils.Do(drop1, function(a)
|
||||
Trigger.OnPassengerExited(a, function(t, p)
|
||||
IdleHunt(p)
|
||||
end)
|
||||
end)
|
||||
|
||||
local grens = Reinforcements.Reinforce(USSR, Grenadiers, { GrenEntry.Location }, 0)
|
||||
Utils.Do(grens, IdleHunt)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot3Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger3, function(actor, id)
|
||||
if actor.Owner == Allies and not foot3Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot3Triggered = true
|
||||
|
||||
Trig3House.Owner = Civilians
|
||||
local camera3 = Actor.Create("camera", true, { Owner = Allies, Location = Trigger3Cam.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
camera3.Destroy()
|
||||
end)
|
||||
|
||||
if not GuideHut.IsDead then
|
||||
local guide = Actor.Create("c6", true, { Owner = Greece, Location = GuideSpawn.Location })
|
||||
guide.Move(SafePath1.Location)
|
||||
guide.Move(SafePath2.Location)
|
||||
guide.Move(CivilianRally.Location)
|
||||
end
|
||||
|
||||
Utils.Do(Trigger3Team, function(actor)
|
||||
if not actor.IsDead then
|
||||
actor.AttackMove(GuideSpawn.Location)
|
||||
IdleHunt(actor)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot4Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger4, function(actor, id)
|
||||
if actor.Owner == Allies and not foot4Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot4Triggered = true
|
||||
|
||||
Trig4House.Owner = Civilians
|
||||
Reinforcements.Reinforce(Greece, CivilianSquad1, { CivFlee1.Location, CivilianRally.Location }, 0)
|
||||
Reinforcements.Reinforce(Greece, CivilianSquad2, { CivFlee2.Location, CivilianRally.Location }, 0)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot5Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger5, function(actor, id)
|
||||
if actor.Owner == Allies and not foot5Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot5Triggered = true
|
||||
|
||||
Media.PlaySoundNotification(Allies, "AlertBleep")
|
||||
Media.DisplayMessage("Alfa Niner this is Lima One Six. Be advised, Soviet aircraft and armor moving into your AO.", "Headquarters")
|
||||
Utils.Do(Trigger5Team, function(actor)
|
||||
if not actor.IsDead then
|
||||
actor.AttackMove(TacticalNuke1.Location)
|
||||
end
|
||||
end)
|
||||
|
||||
SendMig(MigEntryPath)
|
||||
local barrelcam1 = Actor.Create("camera", true, { Owner = USSR, Location = TacticalNuke1.Location })
|
||||
local barrelcam2 = Actor.Create("camera", true, { Owner = USSR, Location = TacticalNuke2.Location })
|
||||
local wave1 = Reinforcements.Reinforce(USSR, SovietAttackers, { BaseAttackersSpawn.Location, SovietAttack.Location })
|
||||
Utils.Do(wave1, IdleHunt)
|
||||
local drop2 = RifleDropS.TargetParatroopers(SovietAttack.CenterPosition, Angle.East)
|
||||
Utils.Do(drop2, function(a)
|
||||
Trigger.OnPassengerExited(a, function(t, p)
|
||||
IdleHunt(p)
|
||||
end)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(20), function()
|
||||
Media.PlaySoundNotification(Allies, "AlertBuzzer")
|
||||
Media.DisplayMessage("Extraction point is compromised. Evacuate the base!", "Headquarters")
|
||||
local defenders = Reinforcements.Reinforce(Greece, TentTeam, { Tent.Location, TentMove.Location }, 0)
|
||||
Utils.Do(defenders, IdleHunt)
|
||||
if Map.LobbyOption("difficulty") == "hard" then
|
||||
Trigger.AfterDelay(DateTime.Seconds(30), function()
|
||||
local wave2 = Reinforcements.Reinforce(USSR, SovietAttackers, { BaseAttackersSpawn.Location, SovietAttack.Location })
|
||||
Utils.Do(wave2, IdleHunt)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(35), function()
|
||||
local dogs = Reinforcements.Reinforce(USSR, Doggos, { GrenEntry.Location }, 0)
|
||||
Utils.Do(dogs, IdleHunt)
|
||||
Media.PlaySpeechNotification(Allies, "AbombLaunchDetected")
|
||||
local proxy = Actor.Create("powerproxy.parabombs", false, { Owner = USSR })
|
||||
proxy.TargetAirstrike(TacticalNuke1.CenterPosition, Angle.NorthWest)
|
||||
Trigger.AfterDelay(DateTime.Seconds(5), function()
|
||||
Media.PlaySpeechNotification(Allies, "AbombLaunchDetected")
|
||||
proxy.TargetAirstrike(TacticalNuke2.CenterPosition, Angle.NorthWest)
|
||||
end)
|
||||
proxy.Destroy()
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(50), function()
|
||||
Media.DisplayMessage("We've set up a new extraction point to the Northwest.", "Headquarters")
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot6Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger6, function(actor, id)
|
||||
if actor.Owner == Allies and not foot6Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot6Triggered = true
|
||||
|
||||
local reinforcement = lstReinforcements.first
|
||||
Media.PlaySpeechNotification(Allies, "ReinforcementsArrived")
|
||||
Reinforcements.ReinforceWithTransport(Allies, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot7Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger7, function(actor, id)
|
||||
if actor.Owner == Allies and not foot7Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot7Triggered = true
|
||||
|
||||
local drop3 = RifleDropS.TargetParatroopers(TacticalNuke3.CenterPosition, Angle.West)
|
||||
Utils.Do(drop3, function(a)
|
||||
Trigger.OnPassengerExited(a, function(t, p)
|
||||
IdleHunt(p)
|
||||
end)
|
||||
end)
|
||||
|
||||
local trig7camera1 = Actor.Create("camera", true, { Owner = Allies, Location = MammothCam.Location })
|
||||
local trig7camera2 = Actor.Create("camera", true, { Owner = Allies, Location = TacticalNuke3.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(30), function()
|
||||
trig7camera1.Destroy()
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(20), function()
|
||||
Media.PlaySpeechNotification(Allies, "AbombLaunchDetected")
|
||||
local proxy = Actor.Create("powerproxy.parabombs", false, { Owner = USSR })
|
||||
proxy.TargetAirstrike(TacticalNuke3.CenterPosition, Angle.SouthWest)
|
||||
proxy.Destroy()
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(26), function()
|
||||
Reinforcements.Reinforce(Greece, CivilianSquad1, { House1.Location, TacticalNuke3.Location }, 0)
|
||||
Reinforcements.Reinforce(Greece, CivilianSquad2, { House2.Location, TacticalNuke3.Location }, 0)
|
||||
Reinforcements.Reinforce(Greece, CivilianSquad1, { House3.Location, TacticalNuke3.Location }, 0)
|
||||
Reinforcements.Reinforce(Greece, CivilianSquad2, { House4.Location, TacticalNuke3.Location }, 0)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(15), function()
|
||||
trig7camera2.Destroy()
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot8Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger8, function(actor, id)
|
||||
if actor.Owner == Allies and not foot8Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot8Triggered = true
|
||||
|
||||
local trig8camera = Actor.Create("camera", true, { Owner = Allies, Location = TeslaCam.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
trig8camera.Destroy()
|
||||
end)
|
||||
|
||||
Media.PlaySpeechNotification(Allies, "ReinforcementsArrived")
|
||||
RifleDropA.TargetParatroopers(TeslaDrop.CenterPosition, Angle.New(124))
|
||||
end
|
||||
end)
|
||||
|
||||
local foot9Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger9, function(actor, id)
|
||||
if actor.Owner == Allies and not foot9Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot9Triggered = true
|
||||
|
||||
local trig9camera = Actor.Create("camera", true, { Owner = Allies, Location = BridgeCam.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
trig9camera.Destroy()
|
||||
end)
|
||||
|
||||
Utils.Do(BridgeMammoths, function(actor)
|
||||
actor.AttackMove(MammysGo.Location)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot10Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger10, function(actor, id)
|
||||
if actor.Owner == Allies and not foot10Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot10Triggered = true
|
||||
|
||||
local trig10camera = Actor.Create("camera", true, { Owner = Allies, Location = TruckCam.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
trig10camera.Destroy()
|
||||
end)
|
||||
|
||||
Media.PlaySpeechNotification(Allies, "SignalFlareNorth")
|
||||
Actor.Create("camera", true, { Owner = Allies, Location = ExtractionPoint.Location })
|
||||
SendExtractionHelicopter()
|
||||
|
||||
HealCrateTruck.Move(TruckGo.Location)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot11Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger11, function(actor, id)
|
||||
if actor.Owner == Allies and not foot11Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot11Triggered = true
|
||||
|
||||
local trig11camera = Actor.Create("camera", true, { Owner = Allies, Location = SovBaseCam.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
trig11camera.Destroy()
|
||||
end)
|
||||
|
||||
local reinforcement = lstReinforcements.second
|
||||
Media.PlaySpeechNotification(Allies, "ReinforcementsArrived")
|
||||
Reinforcements.ReinforceWithTransport(Allies, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath)
|
||||
end
|
||||
end)
|
||||
|
||||
local foot12Triggered
|
||||
Trigger.OnEnteredFootprint(FootprintTrigger12, function(actor, id)
|
||||
if (actor.Type == "gnrl" or actor.Type == "gnrl.noautotarget") and not foot12Triggered then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
foot12Triggered = true
|
||||
|
||||
Media.PlaySoundNotification(Allies, "AlertBleep")
|
||||
Media.DisplayMessage("Stalin will pay for what he has done today!\nI will bury him with my own hands!", "Stavros")
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
SetupTriggers = function()
|
||||
Utils.Do(USSR.GetGroundAttackers(), function(unit)
|
||||
Trigger.OnDamaged(unit, function() IdleHunt(unit) end)
|
||||
end)
|
||||
|
||||
Trigger.OnKilled(BridgeBarrel1, function()
|
||||
local bridge = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge2" end)[1]
|
||||
if not bridge.IsDead then
|
||||
bridge.Kill()
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnKilled(BridgeBarrel2, function()
|
||||
local bridgepart1 = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "br2" end)[1]
|
||||
local bridgepart2 = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "br3" end)[1]
|
||||
if not bridgepart1.IsDead then
|
||||
bridgepart1.Kill()
|
||||
end
|
||||
if not bridgepart2.IsDead then
|
||||
bridgepart2.Kill()
|
||||
end
|
||||
end)
|
||||
|
||||
local trukEscaped
|
||||
Trigger.OnEnteredFootprint({ TruckGo.Location }, function(actor, id)
|
||||
if actor.Type == "truk" and not trukEscaped then
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
trukEscaped = true
|
||||
actor.Destroy()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
ChurchAttack = function()
|
||||
if not ChurchDamaged then
|
||||
local churchPanicTeam = Reinforcements.Reinforce(Greece, CivilianSquad1, { ChurchSpawn.Location }, 0)
|
||||
Utils.Do(churchPanicTeam, function(a)
|
||||
a.Move(a.Location + CVec.New(-1,-1))
|
||||
a.Panic()
|
||||
end)
|
||||
end
|
||||
ChurchDamaged = true
|
||||
end
|
||||
|
||||
SendMig = function(waypoints)
|
||||
local MigEntryPath = { waypoints[1].Location, waypoints[2].Location }
|
||||
local Mig1 = Reinforcements.Reinforce(USSR, { "mig" }, MigEntryPath)
|
||||
if not BridgeBarrel1.IsDead then
|
||||
Utils.Do(Mig1, function(mig)
|
||||
mig.Attack(BridgeBarrel1)
|
||||
end)
|
||||
end
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(5), function()
|
||||
local Mig2 = Reinforcements.Reinforce(USSR, { "mig" }, MigEntryPath)
|
||||
local Mig3 = Reinforcements.Reinforce(USSR, { "mig" }, MigEntryPath)
|
||||
if not CivBarrel.IsDead then
|
||||
Utils.Do(Mig2, function(mig)
|
||||
mig.Attack(CivBarrel)
|
||||
end)
|
||||
end
|
||||
if not DoomedHeli.IsDead then
|
||||
Utils.Do(Mig3, function(mig)
|
||||
mig.Attack(DoomedHeli)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
SovBaseAttack = function()
|
||||
if not BaseDamaged then
|
||||
local drop4 = RifleDropS.TargetParatroopers(SovBaseDrop.CenterPosition, Angle.East)
|
||||
Utils.Do(drop4, function(a)
|
||||
Trigger.OnPassengerExited(a, function(t, p)
|
||||
IdleHunt(p)
|
||||
end)
|
||||
end)
|
||||
|
||||
Utils.Do(SovBaseTeam, function(actor)
|
||||
if not actor.IsDead then
|
||||
IdleHunt(actor)
|
||||
end
|
||||
end)
|
||||
|
||||
if Map.LobbyOption("difficulty") == "hard" then
|
||||
local barracksTeam = Reinforcements.Reinforce(USSR, RaxTeam, { SovRaxSpawn.Location, SovBaseCam.Location }, 0)
|
||||
Utils.Do(barracksTeam, IdleHunt)
|
||||
end
|
||||
end
|
||||
BaseDamaged = true
|
||||
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
|
||||
|
||||
SendExtractionHelicopter = function()
|
||||
ExtractionHeli = Reinforcements.ReinforceWithTransport(Allies, ExtractionHelicopterType, nil, ExtractionPath)[1]
|
||||
local exitPos = CPos.New(ExtractionPath[1].X, ExtractionPath[2].Y)
|
||||
|
||||
Trigger.OnKilled(ExtractionHeli, function() USSR.MarkCompletedObjective(SovietObj) end)
|
||||
Trigger.OnAllRemovedFromWorld(VIPs, function()
|
||||
ExtractUnits(ExtractionHeli, exitPos, function()
|
||||
Allies.MarkCompletedObjective(ProtectVIPs)
|
||||
Allies.MarkCompletedObjective(ExtractStavros)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
WorldLoaded = function()
|
||||
Allies = Player.GetPlayer("Allies")
|
||||
USSR = Player.GetPlayer("USSR")
|
||||
BadGuy = Player.GetPlayer("BadGuy")
|
||||
Greece = Player.GetPlayer("Greece")
|
||||
Civilians = Player.GetPlayer("GreekCivilians")
|
||||
|
||||
Trigger.OnObjectiveAdded(Allies, function(p, id)
|
||||
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
|
||||
end)
|
||||
|
||||
SovietObj = USSR.AddObjective("Kill Stavros.")
|
||||
ProtectVIPs = Allies.AddObjective("Keep Stavros and Tanya alive.")
|
||||
ExtractStavros = Allies.AddObjective("Get Stavros and Tanya to the extraction helicopter.")
|
||||
|
||||
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)
|
||||
|
||||
InsertionDrop = Actor.Create("insertiondrop", false, { Owner = Allies })
|
||||
InsertionDropHard = Actor.Create("insertiondrophard", false, { Owner = Allies })
|
||||
RifleDropA = Actor.Create("rifledrop", false, { Owner = Allies })
|
||||
RifleDropS = Actor.Create("rifledrop", false, { Owner = USSR })
|
||||
Camera.Position = LightFlare.CenterPosition
|
||||
|
||||
MissionStart()
|
||||
FootprintTriggers()
|
||||
SetupTriggers()
|
||||
Trigger.OnDamaged(Church, ChurchAttack)
|
||||
OnAnyDamaged(SovBase, SovBaseAttack)
|
||||
end
|
||||
|
||||
OnAnyDamaged = function(actors, func)
|
||||
Utils.Do(actors, function(actor)
|
||||
Trigger.OnDamaged(actor, func)
|
||||
end)
|
||||
end
|
||||
98
mods/ra/maps/fall-of-greece-1-personal-war/rules.yaml
Normal file
98
mods/ra/maps/fall-of-greece-1-personal-war/rules.yaml
Normal file
@@ -0,0 +1,98 @@
|
||||
World:
|
||||
LuaScript:
|
||||
Scripts: personal-war.lua
|
||||
MissionData:
|
||||
WinVideo: toofar.vqa
|
||||
LossVideo: bmap.vqa
|
||||
Briefing: With the fighting fast approaching Athens, Stavros has insisted that he be allowed to survey the damage in his own hometown in Greece.\n\nYou must escort Stavros through the town and to a nearby friendly outpost. Once you reach it, evacuate Stavros to safety.\n\nIf anything should happen, get Stavros to safety any way possible. He must be kept alive.
|
||||
ScriptLobbyDropdown@difficulty:
|
||||
ID: difficulty
|
||||
Label: Difficulty
|
||||
Values:
|
||||
normal: Normal
|
||||
hard: Hard
|
||||
Default: normal
|
||||
|
||||
INSERTIONDROP:
|
||||
ParatroopersPower:
|
||||
DisplayBeacon: False
|
||||
DropItems: E7, GNRL
|
||||
AlwaysVisible:
|
||||
|
||||
INSERTIONDROPHARD:
|
||||
ParatroopersPower:
|
||||
DisplayBeacon: False
|
||||
DropItems: E7.noautotarget, GNRL.noautotarget
|
||||
AlwaysVisible:
|
||||
|
||||
RIFLEDROP:
|
||||
ParatroopersPower:
|
||||
DisplayBeacon: False
|
||||
DropItems: E1, E1, E1, E1, E1
|
||||
AlwaysVisible:
|
||||
|
||||
LST.Reinforcement:
|
||||
Inherits: LST
|
||||
RejectsOrders:
|
||||
-Buildable:
|
||||
-Selectable:
|
||||
RenderSprites:
|
||||
Image: lst
|
||||
Interactable:
|
||||
|
||||
GNRL:
|
||||
Valued:
|
||||
Cost: 1000
|
||||
Tooltip:
|
||||
Name: Stavros
|
||||
Armament:
|
||||
Weapon: SilencedPPK
|
||||
Passenger:
|
||||
CargoType: VIP
|
||||
|
||||
GNRL.noautotarget:
|
||||
Inherits: GNRL
|
||||
-AutoTarget:
|
||||
-AutoTargetPriority@DEFAULT:
|
||||
-AutoTargetPriority@ATTACKANYTHING:
|
||||
AttackMove:
|
||||
-AssaultMoveCondition:
|
||||
RenderSprites:
|
||||
Image: GNRL
|
||||
|
||||
E7:
|
||||
Passenger:
|
||||
CargoType: VIP
|
||||
|
||||
TRUK:
|
||||
SpawnActorOnDeath:
|
||||
Actor: healcrate
|
||||
|
||||
HEALCRATE:
|
||||
Crate:
|
||||
Lifetime: 0
|
||||
|
||||
TRAN:
|
||||
-Selectable:
|
||||
RevealsShroud:
|
||||
Range: 4c0
|
||||
Targetable@GROUND:
|
||||
TargetTypes: GroundActor
|
||||
Interactable:
|
||||
Health:
|
||||
HP: 5000
|
||||
Cargo:
|
||||
Types: VIP
|
||||
MaxWeight: 2
|
||||
|
||||
BADR.Bomber:
|
||||
Aircraft:
|
||||
Speed: 373
|
||||
Tooltip:
|
||||
Name: Strategic Bomber
|
||||
RenderSprites:
|
||||
Image: U2
|
||||
|
||||
MIG:
|
||||
Aircraft:
|
||||
IdleBehavior: LeaveMap
|
||||
59
mods/ra/maps/fall-of-greece-1-personal-war/weapons.yaml
Normal file
59
mods/ra/maps/fall-of-greece-1-personal-war/weapons.yaml
Normal file
@@ -0,0 +1,59 @@
|
||||
SilencedPPK:
|
||||
Range: 4c0
|
||||
|
||||
ParaBomb:
|
||||
ReloadDelay: 50
|
||||
ValidTargets: Ground, Water, GroundActor, WaterActor, Underwater, AirborneActor, Trees
|
||||
Warhead@1Dam_impact: SpreadDamage
|
||||
Spread: 1c0
|
||||
Damage: 15000
|
||||
Falloff: 1000, 368, 135, 50, 18, 7, 0
|
||||
ValidTargets: GroundActor, WaterActor, Underwater, AirborneActor, Trees
|
||||
Versus:
|
||||
Wood: 1000
|
||||
Concrete: 25
|
||||
DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary
|
||||
Warhead@3Smu_impact: LeaveSmudge
|
||||
SmudgeType: Scorch
|
||||
ValidTargets: Ground, Infantry
|
||||
Size: 1
|
||||
Warhead@4Eff_impact: CreateEffect
|
||||
Explosions: nuke
|
||||
ImpactSounds: kaboom1.aud
|
||||
ImpactActors: false
|
||||
ValidTargets: Ground, Water, Air
|
||||
Warhead@5Dam_areanuke1: SpreadDamage
|
||||
Spread: 2c0
|
||||
Damage: 6000
|
||||
Falloff: 1000, 368, 135, 50, 18, 7, 0
|
||||
Delay: 5
|
||||
ValidTargets: GroundActor, WaterActor, Underwater, AirborneActor, Trees
|
||||
Versus:
|
||||
Wood: 1000
|
||||
Concrete: 25
|
||||
DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary
|
||||
Warhead@7Smu_areanuke1: LeaveSmudge
|
||||
SmudgeType: Scorch
|
||||
ValidTargets: Ground, Infantry
|
||||
Size: 2
|
||||
Delay: 5
|
||||
Warhead@8Eff_areanuke1: CreateEffect
|
||||
ImpactSounds: kaboom22.aud
|
||||
Delay: 5
|
||||
ImpactActors: false
|
||||
Warhead@9Dam_areanuke2: SpreadDamage
|
||||
Spread: 3c0
|
||||
Damage: 6000
|
||||
Falloff: 1000, 368, 135, 50, 18, 7, 0
|
||||
Delay: 10
|
||||
ValidTargets: GroundActor, Trees, WaterActor, Underwater, AirborneActor
|
||||
Versus:
|
||||
Wood: 50
|
||||
Tree: 200
|
||||
Concrete: 25
|
||||
DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary
|
||||
Warhead@12Smu_areanuke2: LeaveSmudge
|
||||
SmudgeType: Scorch
|
||||
ValidTargets: Ground, Infantry
|
||||
Size: 3
|
||||
Delay: 10
|
||||
Reference in New Issue
Block a user