cosmonarchy-bw-prerelease/mpq/lua/melee/zerg/build/tier1.lua
2026-09-09 10:52:21 -04:00

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