Files
OpenRA/mods/ra/maps/ant-01/ant-01.lua
2023-03-28 11:45:15 +02:00

174 lines
5.5 KiB
Lua

--[[
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.
]]
--Boolean Vars
baseDiscovered = false
AtEndGame = false
--Basic Vars
TimerColor = Player.GetPlayer("Spain").Color
InsertionHelicopterType = "tran.insertion"
TimerTicks = DateTime.Minutes(18) -- 18 minutes is roughly 30 mins in the original game
Ticks = TimerTicks
--Table Vars
TankPath = { waypoint12.Location, waypoint13.Location }
InsertionPath = { waypoint12.Location, waypoint0.Location }
AlliedBase = { WarFactory, PillBox1, PillBox2, Refinery, PowerPlant1, PowerPlant2, RepairPad, OreSilo, Barracks, RadarDome }
AlliedForces = { "2tnk" , "2tnk", "mcv" }
ChopperTeam = { "e1r1", "e1r1", "e2", "e2", "e1r1" }
SendTanks = function()
Media.PlaySpeechNotification(Allies, "ReinforcementsArrived")
Reinforcements.Reinforce(Allies, AlliedForces, TankPath, DateTime.Seconds(1))
end
SendInsertionHelicopter = function()
Media.PlaySpeechNotification(Allies, "AlliedReinforcementsSouth")
Reinforcements.ReinforceWithTransport(Allies, InsertionHelicopterType, ChopperTeam, InsertionPath, { waypoint4.Location })
end
AlliedForcesHaveArrived = UserInterface.Translate("allied-forces-have-arrived")
FinishTimer = function()
for i = 0, 9, 1 do
local c = TimerColor
if i % 2 == 0 then
c = HSLColor.White
end
Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText(AlliedForcesHaveArrived, c) end)
end
Trigger.AfterDelay(DateTime.Seconds(10), function() UserInterface.SetMissionText("") end)
end
TimerExpired = function()
Allies.MarkCompletedObjective(SurviveObjective)
end
DiscoveredAlliedBase = function(actor, discoverer)
if (not baseDiscovered and discoverer.Owner == Allies) then
baseDiscovered = true
Media.PlaySpeechNotification(Allies, "ObjectiveReached")
Utils.Do(AlliedBase, function(building)
building.Owner = Allies
end)
--Need to delay this so we don't fail mission before obj added
Trigger.AfterDelay(DateTime.Seconds(1), function()
SurviveObjective = AddPrimaryObjective(Allies, "defend-outpost-until-reinforcements-arrive")
SetupTimeNotifications()
Trigger.OnAllRemovedFromWorld(AlliedBase, function()
Allies.MarkFailedObjective(SurviveObjective)
end)
Media.PlaySpeechNotification(Allies, "TimerStarted")
Trigger.AfterDelay(DateTime.Seconds(2), function() Allies.MarkCompletedObjective(DiscoverObjective) end)
Creeps.GetActorsByType("harv")[1].FindResources()
Creeps.GetActorsByType("harv")[1].Owner = Allies
end)
end
end
SetupTimeNotifications = function()
Trigger.AfterDelay(DateTime.Minutes(8), function()
Media.PlaySpeechNotification(Allies, "TenMinutesRemaining")
end)
Trigger.AfterDelay(DateTime.Minutes(13), function()
Media.PlaySpeechNotification(Allies, "WarningFiveMinutesRemaining")
end)
Trigger.AfterDelay(DateTime.Minutes(14), function()
Media.PlaySpeechNotification(Allies, "WarningFourMinutesRemaining")
end)
Trigger.AfterDelay(DateTime.Minutes(15), function()
Media.PlaySpeechNotification(Allies, "WarningThreeMinutesRemaining")
end)
Trigger.AfterDelay(DateTime.Minutes(16), function()
Media.PlaySpeechNotification(Allies, "WarningTwoMinutesRemaining")
end)
Trigger.AfterDelay(DateTime.Minutes(17), function()
Media.PlaySpeechNotification(Allies, "WarningOneMinuteRemaining")
end)
Trigger.AfterDelay(DateTime.Minutes(17) + DateTime.Seconds(40), function()
Media.PlaySpeechNotification(Allies, "AlliedForcesApproaching")
end)
end
GetTicks = function()
return Ticks
end
Tick = function()
if SurviveObjective ~= nil then
if Ticks > 0 then
if Ticks == DateTime.Minutes(17) then
StartAntAttack()
elseif Ticks == DateTime.Minutes(15) then
SendInsertionHelicopter()
elseif Ticks == DateTime.Minutes(12) then
StartAntAttack()
elseif Ticks == DateTime.Minutes(6) then
StartAntAttack()
elseif Ticks == DateTime.Minutes(1) then
EndAntAttack()
end
Ticks = Ticks - 1;
if (Ticks % DateTime.Seconds(1)) == 0 then
Timer = UserInterface.Translate("reinforcements-arrive-in", { ["time"] = Utils.FormatTime(Ticks) })
UserInterface.SetMissionText(Timer, TimerColor)
end
else
if not AtEndGame then
Media.PlaySpeechNotification(Allies, "SecondObjectiveMet")
AtEndGame = true
FinishTimer()
Camera.Position = waypoint13.CenterPosition
SendTanks()
Trigger.AfterDelay(DateTime.Seconds(2), function() TimerExpired() end)
end
Ticks = Ticks - 1
end
end
end
AddObjectives = function()
InitObjectives(Allies)
DiscoverObjective = AddPrimaryObjective(Allies, "find-outpost")
Utils.Do(AlliedBase, function(actor)
Trigger.OnEnteredProximityTrigger(actor.CenterPosition, WDist.FromCells(8), function(discoverer, id)
DiscoveredAlliedBase(actor, discoverer)
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1), function()
Creeps.GetActorsByType("harv")[1].Stop()
end)
Camera.Position = Ranger.CenterPosition
end
WorldLoaded = function()
Allies = Player.GetPlayer("Spain")
AntMan = Player.GetPlayer("AntMan")
Creeps = Player.GetPlayer("Creeps")
AddObjectives()
Trigger.OnKilled(MoneyDerrick, function()
Actor.Create("moneycrate", true, { Owner = Allies, Location = MoneyDerrick.Location + CVec.New(1,0) })
end)
Trigger.OnKilled(MoneyBarrel, function()
Actor.Create("moneycrate", true, { Owner = Allies, Location = MoneyBarrel.Location})
end)
end