Skip to content

Commit

Permalink
Add Allies13
Browse files Browse the repository at this point in the history
  • Loading branch information
Smittytron committed Aug 26, 2023
1 parent d9787b1 commit 174cf9e
Show file tree
Hide file tree
Showing 8 changed files with 1,555 additions and 0 deletions.
9 changes: 9 additions & 0 deletions mods/ra/languages/lua/en.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,15 @@ get-engineers-to-consoles = Get your engineers to each launch control center.
spare-the-scientists = Spare the scientists. They are more valuable as
prisoners of war.
## allies-13
place-explosive-charges = Place explosive charges on all generators.
steal-supplies = Secure the base's supply cache.
explosive-charge-placed = Explosive charge placed.
engineer = Engineer
old-flametowers = Commander, the flame towers in this base are older models. We should be able to get closer.
be-sneaky = Be careful, we don't want to alert these guys.
soldier = Soldier
## ant-01
allied-forces-have-arrived = Allied forces have arrived!
defend-outpost-until-reinforcements-arrive = Defend outpost until reinforcements arrive.
Expand Down
301 changes: 301 additions & 0 deletions mods/ra/maps/allies-13/allies13.lua
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 added mods/ra/maps/allies-13/map.bin
Binary file not shown.
Binary file added mods/ra/maps/allies-13/map.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 174cf9e

Please sign in to comment.