mirror of
https://gitlab.com/the-no-frauds-club/cosmonarchy-bw-prerelease.git
synced 2026-09-17 01:01:12 +00:00
230 lines
7.0 KiB
Lua
230 lines
7.0 KiB
Lua
---@class ZergTier1
|
|
local Tier1 = {}
|
|
|
|
--- Saturated hatchery/larva production ramp, reused by every category's main build order.
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.saturated_production(melee_ai, town)
|
|
town:multirun(function()
|
|
town:wait_build(1, UnitId.ZergIrolIris)
|
|
town:build(5, UnitId.ZergLarvoskCesiant, 90)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
town:build(6, UnitId.ZergHachirosk, 90)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
town:build(6, UnitId.ZergCaphrolosk, 90)
|
|
town:wait_build(1, UnitId.ZergOthstolOviform)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
town:build(6, UnitId.ZergGathtelosk, 50)
|
|
end)
|
|
end
|
|
|
|
-- Assault (scale-up after the opener; unlisted personalities fold entirely
|
|
-- into their opener and skip tier1)
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.three_base_hydrith(melee_ai, town)
|
|
melee_ai:dynamic_wait(mins(1) + secs(30))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergSkibactScab, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.two_base_zorkiz(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(55))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.two_base_hydrith_quazeth(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
end
|
|
|
|
--- Shared by Potency and Earthen Tides (identical build up to this point).
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.hachirosk_zorkiz_skibact_quazeth_scaleup(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergZorkizShroud, 90, true)
|
|
melee_ai:dynamic_wait(mins(1) + secs(30))
|
|
town:build(1, UnitId.ZergSkibactScab, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
end
|
|
|
|
-- Swarm
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.three_base_flood(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.instant_quazeth(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(mins(1) + secs(55))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(mins(2) + secs(45))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.three_base_othstol(melee_ai, town)
|
|
melee_ai:dynamic_wait(mins(1) + secs(15))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.gates_of_hell(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(55))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.primitive_pressure(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(mins(1) + secs(30))
|
|
town:build(1, UnitId.ZergZorkizShroud, 90, true)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
end
|
|
|
|
-- Sunblot
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.big_and_little(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
town:build(1, UnitId.ZergZorkizShroud, 90, true)
|
|
melee_ai:dynamic_wait(mins(1) + secs(55))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.the_triad(melee_ai, town)
|
|
melee_ai:dynamic_wait(mins(1) + secs(10))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergZorkizShroud, 90, true)
|
|
melee_ai:dynamic_wait(mins(1))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.skittering_duo(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(75))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergSkibactScab, 90, true)
|
|
melee_ai:dynamic_wait(mins(2) + secs(20))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.early_birds(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(55))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.flying_feint(melee_ai, town)
|
|
melee_ai:dynamic_wait(mins(1))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
end
|
|
|
|
-- General
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.sleeping_giant(melee_ai, town)
|
|
melee_ai:dynamic_wait(mins(1))
|
|
town:wait_build(15, UnitId.ZergDroleth)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.shrieking_swarm(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.subjugation(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergSkibactScab, 90, true)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.time_after_time(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(75))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(75))
|
|
town:build(1, UnitId.ZergSkibactScab, 90, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergZorkizShroud, 90, true)
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Tier1.coil_buildup(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergDroleth, 100)
|
|
wait(secs(1))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(mins(1) + secs(40))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(mins(1))
|
|
end
|
|
|
|
return Tier1
|