mirror of
https://gitlab.com/the-no-frauds-club/cosmonarchy-bw-prerelease.git
synced 2026-09-17 01:01:12 +00:00
299 lines
9.0 KiB
Lua
299 lines
9.0 KiB
Lua
---@class ZergOpeners
|
|
local Openers = {}
|
|
|
|
-- Shared opener still used unmodified by a personality whose own build order
|
|
-- never repositions an attack/expand trigger within this phase.
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.quazeth_pool_check_then_expand(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergQuazethPool, 110, true)
|
|
town:wait_build(1, UnitId.ZergQuazethPool, false)
|
|
melee_ai:start_expanding()
|
|
end
|
|
|
|
-- Assault
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.three_base_hydrith(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(5))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.two_base_zorkiz(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(5))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.two_base_hydrith_quazeth(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(5))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
melee_ai:start_attacking()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.two_base_alkag(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:multirun(function()
|
|
town:wait_build(1, UnitId.ZergHydrithDen)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergSkibactScab, 90, true)
|
|
melee_ai:dynamic_wait(mins(1) + secs(40))
|
|
town:build(1, UnitId.ZergTethvithSwamp, 90, true)
|
|
town:wait_build(1, UnitId.ZergIrolIris)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
town:build(1, UnitId.ZergAlkagIteth, 90, true)
|
|
town:build(1, UnitId.ZergOthstolOviform, 90, true)
|
|
end)
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
melee_ai:start_expanding()
|
|
end
|
|
|
|
--- Shared by Potency and Earthen Tides (identical build up to this point).
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.hydrith_den_start(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergHydrithDen, 110, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
melee_ai:start_attacking()
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
end
|
|
|
|
-- Swarm
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.three_base_flood(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergQuazethPool, 110, true)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
melee_ai:start_attacking()
|
|
melee_ai:dynamic_wait(secs(15))
|
|
melee_ai:start_expanding()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.three_base_ultrav(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(50))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(mins(1) + secs(15))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
melee_ai:start_attacking()
|
|
melee_ai:dynamic_wait(secs(40))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.instant_quazeth(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
town:build(1, UnitId.ZergQuazethPool, 110, true)
|
|
melee_ai:dynamic_wait(secs(5))
|
|
town:wait_build(1, UnitId.ZergQuazethPool, false)
|
|
melee_ai:dynamic_wait(secs(5))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
town:wait_build(1, UnitId.ZergQuazethPool)
|
|
melee_ai:start_attacking()
|
|
wait(secs(4))
|
|
town:build(4, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(mins(1) + secs(20))
|
|
melee_ai:start_expanding()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.three_base_othstol(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(mins(1) + secs(55))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.gates_of_hell(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(mins(1) + secs(55))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergZorkizShroud, 90, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
melee_ai:start_attacking()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.primitive_pressure(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(50))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
melee_ai:start_attacking()
|
|
end
|
|
|
|
-- Sunblot
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.big_and_little(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergVornathPond, 90, true)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_attacking()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.the_triad(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.skittering_duo(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(mins(1))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
melee_ai:start_attacking()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.early_birds(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(30))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(mins(1) + secs(25))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.flying_feint(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergQuazethPool, 110, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
melee_ai:start_attacking()
|
|
melee_ai:dynamic_wait(secs(30))
|
|
melee_ai:start_expanding()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.descending_horizon(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
town:build(1, UnitId.ZergQuazethPool, 110, true)
|
|
melee_ai:dynamic_wait(secs(25))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(mins(1) + secs(50))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(20))
|
|
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(25))
|
|
melee_ai:start_attacking()
|
|
melee_ai:dynamic_wait(mins(1))
|
|
end
|
|
|
|
-- General
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.sleeping_giant(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(30))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.shrieking_swarm(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergQuazethPool, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
melee_ai:start_attacking()
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.subjugation(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(30))
|
|
town:build(1, UnitId.ZergDroleth, 100)
|
|
melee_ai:dynamic_wait(secs(5))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.before_the_storm(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergQuazethPool, 110, true)
|
|
town:wait_build(1, UnitId.ZergQuazethPool, false)
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(25))
|
|
town:build(1, UnitId.ZergDroleth, 100)
|
|
melee_ai:dynamic_wait(secs(50))
|
|
town:build(2, UnitId.ZergHachirosk, 115)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergZorkizShroud, 90, true)
|
|
melee_ai:dynamic_wait(secs(15))
|
|
melee_ai:start_attacking()
|
|
melee_ai:dynamic_wait(mins(2) + secs(30))
|
|
end
|
|
|
|
---@param melee_ai MeleeAI
|
|
---@param town Town
|
|
function Openers.time_after_time(melee_ai, town)
|
|
melee_ai:dynamic_wait(secs(45))
|
|
melee_ai:start_expanding()
|
|
melee_ai:dynamic_wait(secs(40))
|
|
town:build(1, UnitId.ZergHydrithDen, 90, true)
|
|
melee_ai:dynamic_wait(secs(40))
|
|
melee_ai:start_attacking()
|
|
end
|
|
|
|
return Openers
|