forked from OpenRA/OpenRA
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d9787b1
commit 174cf9e
Showing
8 changed files
with
1,555 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,301 @@ | ||
--[[ | ||
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. | ||
]] | ||
Engineers = { Engi1, Engi2, Engi3, Engi4 } | ||
HeavyTankCamFootprint = { CPos.New(11, 46), CPos.New(12, 47), CPos.New(12, 48), CPos.New(12, 49) } | ||
TankRifles = { TankRifle1, TankRifle2, TankRifle3 } | ||
MRJCamFootprint = { CPos.New(16, 53), CPos.New(16, 54), CPos.New(16, 55) } | ||
DoomRoomFootprint = { CPos.New(78,70), CPos.New(79,70), CPos.New(80,70) } | ||
V2RoomFootprint = { CPos.New(64,71), CPos.New(65,71), CPos.New(66,71) } | ||
CoreRoomFootprint = { CPos.New(55,60), CPos.New(55,61), CPos.New(55,62), CPos.New(65,52), CPos.New(66,52), CPos.New(67,52), CPos.New(75,58), CPos.New(75,59), CPos.New(75,60) } | ||
CoreRoomPath = { CorePathA.Location, CorePathB.Location, CorePathC.Location, CorePathD.Location } | ||
CoreRoomPatrol = { CorePatrol1, CorePatrol2, CorePatrol3 } | ||
DogPatrolAPath = { PatrolPath1.Location, MRJCamera.Location, PatrolPath2.Location, PatrolPath3.Location } | ||
DogPatrolA = { DogPatrolA1, DogPatrolA2, DogPatrolA3 } | ||
DogPatrolBPath = { PatrolPath4.Location, DoomRoomCam.Location, PatrolPath5.Location, DoomRoomCam.Location, PatrolPath4.Location, CorePathA.Location } | ||
DogPatrolB = { DogPatrolB1, DogPatrolB2, DogPatrolB3 } | ||
RiflePatrolAPath = { PatrolPath6.Location, PatrolPath7.Location, PatrolPath2.Location, MRJCamera.Location, PatrolPath1.Location, PatrolPath3.Location, PatrolPath7.Location, CorePathC.Location } | ||
RiflePatrolA = { RiflePatrolA1, RiflePatrolA2 } | ||
RiflePatrolBPath = { PatrolPath8.Location, Generator4.Location, PatrolPath8.Location, CorePathB.Location } | ||
RiflePatrolB = { RiflePatrolB1, RiflePatrolB2 } | ||
RiflePatrolCPath = { PatrolPath9.Location, PatrolPath10.Location, CorePathD.Location, PatrolPath11.Location } | ||
RiflePatrolC = { RiflePatrolC1, RiflePatrolC2 } | ||
Generators = { Generator1, Generator2, Generator3, Generator4, Generator5, Generator6, Generator7, Generator8 } | ||
ChargePlaced = { Charge1Placed, Charge2Placed, Charge3Placed, Charge4Placed, Charge5Placed, Charge6Placed, Charge7Placed, Charge8Placed } | ||
FlameConsoles = { FlameConsole1, FlameConsole2, FlameConsole3, FlameConsole4, FlameConsole5, FlameConsole6, FlameConsole7, FlameConsole8 } | ||
FlameTowers = { FlameTower1, FlameTower2, FlameTower3, FlameTower4, FlameTower5, FlameTower6, FlameTower7, FlameTower8 } | ||
DualTowerActors = { DualTower1, DualTower2, DoomBarrel } | ||
DoomFootprint = { CPos.New(75,77), CPos.New(76,77), CPos.New(77,77), CPos.New(78,77), CPos.New(79,77), CPos.New(80,77), CPos.New(81,77) } | ||
DoomPatrol = { DoomGren1, DoomGren2, DoomGren3, DoomGren4, DoomGren5, DoomRifle1, DoomRifle2, DoomRifle3, DoomRifle4, DoomRifle5, DoomFlamer1, DoomFlamer2, DoomFlamer3, DoomFlamer4, DoomFlamer5 } | ||
V2s = { V21, V22, V23, V24, V25, V26, V27, V28 } | ||
|
||
TimerLength = | ||
{ | ||
easy = DateTime.Minutes(0), | ||
normal = DateTime.Minutes(5), | ||
hard = DateTime.Minutes(10) | ||
} | ||
|
||
MissionTriggers = function() | ||
Trigger.OnAllKilled(Engineers, function() | ||
USSR.MarkCompletedObjective(StopAllies) | ||
end) | ||
|
||
Trigger.OnAllKilled(V2s, function() | ||
Reinforcements.Reinforce(Greece, { "e1", "e1", "e1", "medi" }, { ReinforcementsSouth.Location, SouthTeamStop.Location }, 0) | ||
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived") | ||
end) | ||
|
||
local doomTriggered | ||
Trigger.OnEnteredFootprint(DoomFootprint, function(actor, id) | ||
if actor.Owner == Greece and not doomTriggered then | ||
Trigger.RemoveFootprintTrigger(id) | ||
doomTriggered = true | ||
|
||
Utils.Do(DoomPatrol, function(actor) | ||
if not actor.IsDead then | ||
IdleHunt(actor) | ||
end | ||
end) | ||
end | ||
end) | ||
|
||
Trigger.OnEnteredProximityTrigger(MoneyCrates.CenterPosition, WDist.FromCells(1), function(actor, id) | ||
if actor.Owner == Greece then | ||
Trigger.RemoveProximityTrigger(id) | ||
Greece.MarkCompletedObjective(TakeMoney) | ||
end | ||
end) | ||
|
||
local flamers = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == USSR and self.Type == "ftur" end) | ||
Utils.Do(flamers, function(actor) | ||
Trigger.OnDamaged(actor, function(building) | ||
if building.Health < building.MaxHealth * 9/10 then | ||
building.StartBuildingRepairs() | ||
end | ||
end) | ||
end) | ||
|
||
Trigger.OnTimerExpired(function() | ||
DateTime.TimeLimit = 0 | ||
Trigger.AfterDelay(1, function() UserInterface.SetMissionText("We're too late!", USSR.Color) end) | ||
USSR.MarkCompletedObjective(HoldOut) | ||
end) | ||
end | ||
|
||
PlaceCharges = function() | ||
for generatorID = 1, 8 do | ||
Trigger.OnEnteredProximityTrigger(Generators[generatorID].CenterPosition, WDist.FromCells(1), function(actor, id) | ||
if actor.Type == "e6" then | ||
Trigger.RemoveProximityTrigger(id) | ||
ChargePlaced[generatorID] = true | ||
Actor.Create("flare", true, { Owner = Greece, Location = Generators[generatorID].Location + CVec.New(0,-1) }) | ||
Media.PlaySpeechNotification(Greece, "ExplosiveChargePlaced") | ||
Media.DisplayMessage(UserInterface.Translate("explosive-charge-placed"), UserInterface.Translate("engineer")) | ||
end | ||
end) | ||
end | ||
end | ||
|
||
FlameTowerTriggers = function() | ||
for flameID = 1, 8 do | ||
Trigger.OnEnteredProximityTrigger(FlameConsoles[flameID].CenterPosition, WDist.FromCells(1), function(actor, id) | ||
if actor.Type == "e6" then | ||
Trigger.RemoveProximityTrigger(id) | ||
if not FlameTowers[flameID].IsDead then | ||
Media.DisplayMessage(UserInterface.Translate("flame-turret-deactivated"), UserInterface.Translate("console")) | ||
FlameTowers[flameID].Kill() | ||
end | ||
end | ||
end) | ||
end | ||
|
||
Trigger.OnEnteredProximityTrigger(TurncoatConsole.CenterPosition, WDist.FromCells(1), function(actor, id) | ||
if actor.Type == "e6" then | ||
Trigger.RemoveProximityTrigger(id) | ||
Actor.Create("ftur", true, { Owner = Turkey, Location = TurncoatFlameTurret.Location }) | ||
end | ||
end) | ||
|
||
Trigger.OnEnteredProximityTrigger(TwoTowerConsole.CenterPosition, WDist.FromCells(1), function(actor, id) | ||
if actor.Type == "e6" then | ||
Trigger.RemoveProximityTrigger(id) | ||
|
||
Media.DisplayMessage(UserInterface.Translate("flame-turret-deactivated"), UserInterface.Translate("console")) | ||
Utils.Do(DualTowerActors, function(actor) | ||
if not actor.IsDead then | ||
actor.Kill() | ||
end | ||
end) | ||
end | ||
end) | ||
end | ||
|
||
CameraTriggers = function() | ||
local heavyCamTriggered | ||
Trigger.OnEnteredFootprint(HeavyTankCamFootprint, function(actor, id) | ||
if actor.Owner == Greece and not heavyCamTriggered then | ||
Trigger.RemoveFootprintTrigger(id) | ||
heavyCamTriggered = true | ||
|
||
local heavyCam = Actor.Create("camera", true, { Owner = Greece, Location = HeavyTankCam.Location }) | ||
Media.DisplayMessage(UserInterface.Translate("old-flametowers"), UserInterface.Translate("engineer")) | ||
Utils.Do(TankRifles, function(a) | ||
IdleHunt(a) | ||
end) | ||
Trigger.AfterDelay(DateTime.Minutes(1), function() | ||
heavyCam.Destroy() | ||
end) | ||
end | ||
end) | ||
|
||
local mrjCamTriggered | ||
Trigger.OnEnteredFootprint(MRJCamFootprint, function(actor, id) | ||
if actor.Owner == Greece and not mrjCamTriggered then | ||
Trigger.RemoveFootprintTrigger(id) | ||
mrjCamTriggered = true | ||
|
||
local mrjCam = Actor.Create("camera", true, { Owner = Greece, Location = MRJCamera.Location }) | ||
--The original had the Mobile Radar Jammers attempt to escape. Excluding that for now as MRJs in OpenRA can take much more damage than the original. | ||
Trigger.AfterDelay(DateTime.Minutes(1), function() | ||
mrjCam.Destroy() | ||
end) | ||
end | ||
end) | ||
|
||
local v2CamTriggered | ||
Trigger.OnEnteredFootprint(V2RoomFootprint, function(actor, id) | ||
if actor.Owner == Greece and not v2CamTriggered then | ||
Trigger.RemoveFootprintTrigger(id) | ||
v2CamTriggered = true | ||
|
||
local v2Cam = Actor.Create("camera", true, { Owner = Greece, Location = TurncoatFlameTurret.Location }) | ||
Trigger.AfterDelay(DateTime.Minutes(1), function() | ||
v2Cam.Destroy() | ||
end) | ||
end | ||
end) | ||
|
||
local coreCamTriggered | ||
Trigger.OnEnteredFootprint(CoreRoomFootprint, function(actor, id) | ||
if actor.Owner == Greece and not coreCamTriggered then | ||
Trigger.RemoveFootprintTrigger(id) | ||
coreCamTriggered = true | ||
|
||
Actor.Create("camera", true, { Owner = Greece, Location = GasSpawn.Location + CVec.New(1,0) }) | ||
end | ||
end) | ||
|
||
local doomCamTriggered | ||
Trigger.OnEnteredFootprint(DoomRoomFootprint, function(actor, id) | ||
if actor.Owner == Greece and not doomCamTriggered then | ||
Trigger.RemoveFootprintTrigger(id) | ||
doomCamTriggered = true | ||
|
||
local doomCam = Actor.Create("camera", true, { Owner = Greece, Location = DoomRoomCam.Location }) | ||
Media.PlaySoundNotification(Greece, "AlertBleep") | ||
Media.DisplayMessage(UserInterface.Translate("be-sneaky"), UserInterface.Translate("soldier")) | ||
Trigger.AfterDelay(DateTime.Minutes(1), function() | ||
doomCam.Destroy() | ||
end) | ||
end | ||
end) | ||
end | ||
|
||
SendRifles = function() | ||
RiflesSent = true | ||
Trigger.AfterDelay(DateTime.Seconds(2), function() | ||
Reinforcements.Reinforce(Greece, { "e1", "e1", "e1" }, { ReinforcementsWest.Location, MRJCamera.Location }, 0) | ||
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived") | ||
end) | ||
end | ||
|
||
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 | ||
|
||
Tick = function() | ||
USSR.Cash = 5000 | ||
|
||
if ChargePlaced[1] and ChargePlaced[2] and ChargePlaced[3] and ChargePlaced[4] and ChargePlaced[5] and ChargePlaced[6] and ChargePlaced[7] and ChargePlaced[8] then | ||
Greece.MarkCompletedObjective(PlaceExplosives) | ||
if not Greece.IsObjectiveCompleted(TakeMoney) then | ||
Greece.MarkFailedObjective(TakeMoney) | ||
end | ||
end | ||
|
||
if ChargePlaced[1] and ChargePlaced[2] and not RiflesSent then | ||
SendRifles() | ||
end | ||
end | ||
|
||
WorldLoaded = function() | ||
Greece = Player.GetPlayer("Greece") | ||
USSR = Player.GetPlayer("USSR") | ||
Turkey = Player.GetPlayer("Turkey") | ||
England = Player.GetPlayer("England") | ||
|
||
InitObjectives(Greece) | ||
|
||
PlaceExplosives = AddPrimaryObjective(Greece, "place-explosive-charges") | ||
TakeMoney = AddSecondaryObjective(Greece, "steal-supplies") | ||
StopAllies = AddPrimaryObjective(USSR, "") | ||
|
||
Trigger.AfterDelay(DateTime.Minutes(7), function() | ||
Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(1,0) }) | ||
Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(0,-1) }) | ||
end) | ||
Trigger.AfterDelay(DateTime.Minutes(17), function() | ||
Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(2,0) }) | ||
Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(2,-1) }) | ||
end) | ||
Trigger.AfterDelay(DateTime.Minutes(22), function() | ||
Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(1,-1) }) | ||
Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location}) | ||
end) | ||
|
||
Camera.Position = DefaultCameraPosition.CenterPosition | ||
MissionTriggers() | ||
PlaceCharges() | ||
FlameTowerTriggers() | ||
CameraTriggers() | ||
GroupPatrol(CoreRoomPatrol, CoreRoomPath, DateTime.Seconds(5)) | ||
GroupPatrol(DogPatrolA, DogPatrolAPath, DateTime.Seconds(5)) | ||
GroupPatrol(DogPatrolB, DogPatrolBPath, DateTime.Seconds(5)) | ||
GroupPatrol(RiflePatrolA, RiflePatrolAPath, DateTime.Seconds(8)) | ||
GroupPatrol(RiflePatrolB, RiflePatrolBPath, DateTime.Seconds(8)) | ||
GroupPatrol(RiflePatrolC, RiflePatrolCPath, DateTime.Seconds(8)) | ||
|
||
DateTime.TimeLimit = (DateTime.Minutes(32) - TimerLength[Difficulty]) | ||
end |
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.