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:
93
mods/ra/maps/ant-01/ant-attack.lua
Normal file
93
mods/ra/maps/ant-01/ant-attack.lua
Normal file
@@ -0,0 +1,93 @@
|
||||
--[[
|
||||
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.
|
||||
]]
|
||||
timeTracker = 0
|
||||
amount = 1
|
||||
SendAnts = true
|
||||
|
||||
AttackAngles = {
|
||||
{ waypoint4.Location, waypoint18.Location, waypoint5.Location, waypoint15.Location },
|
||||
{ waypoint20.Location, waypoint2.Location },
|
||||
{ waypoint21.Location, waypoint10.Location, waypoint2.Location },
|
||||
{ waypoint7.Location, waypoint17.Location, waypoint1.Location },
|
||||
{ waypoint8.Location, waypoint9.Location, waypoint19.Location }
|
||||
}
|
||||
|
||||
AttackInterval = {
|
||||
easy = DateTime.Seconds(40),
|
||||
normal = DateTime.Seconds(30),
|
||||
hard = DateTime.Seconds(25)
|
||||
}
|
||||
|
||||
AntTypes = {
|
||||
"scoutant",
|
||||
"fireant"
|
||||
}
|
||||
|
||||
MaxAnts = {
|
||||
easy = 3,
|
||||
normal = 5,
|
||||
hard = 6
|
||||
}
|
||||
|
||||
MaxFireAnts = {
|
||||
easy = 2,
|
||||
normal = 3,
|
||||
hard = 4
|
||||
}
|
||||
|
||||
StartAntAttack = function()
|
||||
local path = Utils.Random(AttackAngles)
|
||||
local antType = "scoutant"
|
||||
local index = 0
|
||||
local amount = 1
|
||||
local timeTracker = GetTicks()
|
||||
|
||||
if timeTracker > DateTime.Minutes(6) then
|
||||
antType = Utils.Random(AntTypes)
|
||||
end
|
||||
|
||||
if antType == "warriorant" and Difficulty == "easy" then
|
||||
antType = "scoutant"
|
||||
end
|
||||
|
||||
if Difficulty == "normal" and timeTracker < DateTime.Minutes(6) and antType == "scoutant" then
|
||||
antType = "warriorant"
|
||||
elseif Difficulty == "hard" and timeTracker < DateTime.Minutes(8) and antType == "scoutant" then
|
||||
antType = "warriorant"
|
||||
end
|
||||
|
||||
local max = MaxAnts[Difficulty] - math.ceil(timeTracker / DateTime.Minutes(6))
|
||||
if timeTracker > DateTime.Minutes(3) and antType == "fireant" then
|
||||
amount = Utils.RandomInteger(1, MaxFireAnts[Difficulty])
|
||||
elseif timeTracker > 15 and antType == "fireant" then
|
||||
antType = "scoutant"
|
||||
else
|
||||
amount = Utils.RandomInteger(1, max)
|
||||
end
|
||||
|
||||
for i = 0,amount,1 do
|
||||
Reinforcements.Reinforce(AntMan, { antType }, path, DateTime.Seconds(5), function(actor)
|
||||
actor.AttackMove(CPos.New(65, 65))
|
||||
Trigger.OnIdle(actor, function()
|
||||
actor.Hunt()
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
-- Setup next wave
|
||||
if SendAnts then
|
||||
Trigger.AfterDelay(AttackInterval[Difficulty], function()
|
||||
StartAntAttack()
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
EndAntAttack = function()
|
||||
SendAnts = false
|
||||
end
|
||||
Reference in New Issue
Block a user