Initial commit: OpenRA game engine
Fork from OpenRA/OpenRA with one-click launch script (start-ra.cmd) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
175
mods/ra/maps/allies-09a/allies09a.lua
Normal file
175
mods/ra/maps/allies-09a/allies09a.lua
Normal file
@@ -0,0 +1,175 @@
|
||||
--[[
|
||||
Copyright (c) The OpenRA Developers and Contributors
|
||||
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.
|
||||
]]
|
||||
|
||||
LstReinforcements =
|
||||
{
|
||||
actors = { "mcv" },
|
||||
entryPath = { AlliedMCVEntry.Location, Unload1.Location },
|
||||
exitPath = { AlliedMCVEntry.Location }
|
||||
}
|
||||
|
||||
ExtractionHelicopterType = "tran.extraction"
|
||||
ExtractionPath = { HeliWP01.Location, HeliWP02.Location, HeliWP03.Location }
|
||||
Dog5PatrolPath = { WP94.Location, WP93.Location }
|
||||
Dog6PatrolPath = { WP90.Location, WP91.Location, WP92.Location, WP91.Location }
|
||||
TankGroup10 = { TankGroup101, TankGroup102 }
|
||||
TankGroup10PatrolPath = { WP81.Location, WP82.Location, WP83.Location, WP84.Location, WP85.Location, WP84.Location, WP83.Location, WP82.Location }
|
||||
HuntDogsGroup = { Dog701, Dog702, Dog703, Dog704, Dog705, Dog706 }
|
||||
|
||||
KosyginType = "gnrl"
|
||||
KosyginContacted = false
|
||||
|
||||
InitialAlliedReinforcements = function()
|
||||
Trigger.AfterDelay(DateTime.Seconds(1), function()
|
||||
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived")
|
||||
Reinforcements.ReinforceWithTransport(Greece, "lst.reinforcement", LstReinforcements.actors, LstReinforcements.entryPath, LstReinforcements.exitPath)
|
||||
end)
|
||||
end
|
||||
|
||||
RescueFailed = function()
|
||||
Media.PlaySpeechNotification(Greece, "ObjectiveNotMet")
|
||||
Greece.MarkFailedObjective(KosyginSurviveObjective)
|
||||
end
|
||||
|
||||
InitialSovietPatrols = function()
|
||||
Dog5.Patrol(Dog5PatrolPath, true, DateTime.Seconds(60))
|
||||
Dog6.Patrol(Dog6PatrolPath, true, DateTime.Seconds(90))
|
||||
for i = 1, 2 do
|
||||
TankGroup10[i].Patrol(TankGroup10PatrolPath, true, DateTime.Seconds(30))
|
||||
end
|
||||
end
|
||||
|
||||
CreateKosygin = function()
|
||||
Greece.MarkCompletedObjective(UseSpyObjective)
|
||||
Media.PlaySpeechNotification(Greece, "ObjectiveMet")
|
||||
local kosygin = Actor.Create(KosyginType, true, { Location = KosyginSpawnPoint.Location, Owner = Greece })
|
||||
Trigger.OnKilled(kosygin, RescueFailed)
|
||||
ExtractObjective = AddPrimaryObjective(Greece, "extract-kosygin")
|
||||
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(Greece, "TargetFreed") end)
|
||||
end
|
||||
|
||||
DogsGuardGates = function()
|
||||
if not Dog707.IsDead then
|
||||
Dog707.AttackMove(WP89.Location)
|
||||
end
|
||||
if not Dog708.IsDead then
|
||||
Dog708.AttackMove(WP81.Location)
|
||||
end
|
||||
if not Dog709.IsDead then
|
||||
Dog709.AttackMove(WP79.Location)
|
||||
end
|
||||
end
|
||||
|
||||
InfiltrateForwardCenter = function()
|
||||
Trigger.OnInfiltrated(USSRFC, function()
|
||||
if not KosyginContacted then
|
||||
KosyginContacted = true
|
||||
CreateKosygin()
|
||||
DogsGuardGates()
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnKilledOrCaptured(USSRFC, function()
|
||||
if not Greece.IsObjectiveCompleted(UseSpyObjective) then
|
||||
Greece.MarkFailedObjective(UseSpyObjective)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
Tick = function()
|
||||
USSR.Cash = 5000
|
||||
if Greece.HasNoRequiredUnits() then
|
||||
USSR.MarkCompletedObjective(USSRObj)
|
||||
end
|
||||
end
|
||||
|
||||
TriggerHuntKosygin = function()
|
||||
Trigger.OnEnteredProximityTrigger(WP79.CenterPosition, WDist.FromCells(4), function(actor, triggerflee)
|
||||
if actor.Type == KosyginType then
|
||||
Trigger.RemoveProximityTrigger(triggerflee)
|
||||
for i = 1, 6 do
|
||||
if not HuntDogsGroup[i].IsDead then
|
||||
HuntDogsGroup[i].Attack(actor)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
Trigger.OnEnteredProximityTrigger(WP81.CenterPosition, WDist.FromCells(4), function(actor, triggerflee)
|
||||
if actor.Type == KosyginType then
|
||||
Trigger.RemoveProximityTrigger(triggerflee)
|
||||
for i = 1, 6 do
|
||||
if not HuntDogsGroup[i].IsDead then
|
||||
HuntDogsGroup[i].Attack(actor)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
Trigger.OnEnteredProximityTrigger(WP89.CenterPosition, WDist.FromCells(4), function(actor, triggerflee)
|
||||
if actor.Type == KosyginType then
|
||||
Trigger.RemoveProximityTrigger(triggerflee)
|
||||
for i = 1, 6 do
|
||||
if not HuntDogsGroup[i].IsDead then
|
||||
HuntDogsGroup[i].Attack(actor)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
TriggerRevealUSSRBase = function()
|
||||
Trigger.OnEnteredProximityTrigger(LowerBaseWP.CenterPosition, WDist.FromCells(10), function(a, id)
|
||||
if a.Owner == Greece then
|
||||
Trigger.RemoveProximityTrigger(id)
|
||||
local cam = Actor.Create("Camera", true, { Owner = Greece, Location = RevealLowerBase.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
TriggerRevealUSSRFC = function()
|
||||
Trigger.OnEnteredProximityTrigger(UpperBaseWP.CenterPosition, WDist.FromCells(10), function(a, id)
|
||||
if a.Owner == Greece then
|
||||
Trigger.RemoveProximityTrigger(id)
|
||||
local cam = Actor.Create("Camera", true, { Owner = Greece, Location = KosyginSpawnPoint.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
TriggerExtractKosygin = function()
|
||||
Trigger.OnEnteredProximityTrigger(KosyginExtractPoint.CenterPosition, WDist.FromCells(10), function(actor, triggerflee)
|
||||
if actor.Type == KosyginType then
|
||||
Reinforcements.ReinforceWithTransport(Greece, ExtractionHelicopterType, nil, ExtractionPath)
|
||||
Trigger.RemoveProximityTrigger(triggerflee)
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
Greece.MarkCompletedObjective(KosyginSurviveObjective)
|
||||
Greece.MarkCompletedObjective(ExtractObjective)
|
||||
Media.PlaySpeechNotification(Greece, "ObjectiveMet")
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
WorldLoaded = function()
|
||||
Greece = Player.GetPlayer("Greece")
|
||||
USSR = Player.GetPlayer("USSR")
|
||||
Camera.Position = DefaultCameraPosition.CenterPosition
|
||||
InitObjectives(Greece)
|
||||
UseSpyObjective = AddPrimaryObjective(Greece, "infiltrate-soviet-command-center-contact-kosygin")
|
||||
KosyginSurviveObjective = AddPrimaryObjective(Greece, "kosygin-must-survive")
|
||||
USSRObj = AddPrimaryObjective(USSR, "")
|
||||
InitialAlliedReinforcements()
|
||||
InfiltrateForwardCenter()
|
||||
InitialSovietPatrols()
|
||||
TriggerRevealUSSRBase()
|
||||
TriggerRevealUSSRFC()
|
||||
TriggerExtractKosygin()
|
||||
TriggerHuntKosygin()
|
||||
ActivateAI()
|
||||
end
|
||||
Reference in New Issue
Block a user