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

169 lines
6.1 KiB
Lua

---@class ZergTier3
local Tier3 = {}
--- Requests Othstol Oviform and waits for it. The generic tier-3 tech
--- transition, for personalities without bespoke tier-3 content.
---@param melee_ai MeleeAI
---@param town Town
function Tier3.acquire(melee_ai, town)
town:build(1, UnitId.ZergOthstolOviform, 65, true)
melee_ai:dynamic_wait(secs(25))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier3.hydrith_othstol_hachirosk(melee_ai, town)
town:build(1, UnitId.ZergOthstolOviform, 65, true)
melee_ai:dynamic_wait(secs(25))
town:build(4, UnitId.ZergHachirosk, 115)
melee_ai:dynamic_wait(secs(25))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier3.potency_othstol_settle(melee_ai, town)
town:build(1, UnitId.ZergOthstolOviform, 65, true)
melee_ai:dynamic_wait(secs(25))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier3.horizon_othstol(melee_ai, town)
town:multirun(function()
melee_ai:dynamic_wait(mins(1) + secs(15))
town:build(1, UnitId.ZergOthstolOviform, 65, true)
end)
end
---@param melee_ai MeleeAI
---@param town Town
function Tier3.giant_othstol_gathtelosk(melee_ai, town)
town:multirun(function()
town:build(1, UnitId.ZergOthstolOviform, 65, true)
end)
melee_ai:dynamic_wait(secs(50))
town:build(1, UnitId.ZergGathtelosk, 50)
melee_ai:dynamic_wait(secs(15))
end
-- Category expansion tails: reuse the same shared node-acquisition pattern per
-- category, run once a new town is expanded into.
---@param melee_ai MeleeAI
---@param town Town
function Tier3.assault_expansion(melee_ai, town)
town:build(1, UnitId.ZergIrolIris, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergCaphrolosk, 70)
town:build(1, UnitId.ZergQuazethPool, 70, true)
town:build(1, UnitId.ZergKalkiirLake, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergHachirosk, 70)
melee_ai:dynamic_wait(secs(5))
town:build(1, UnitId.ZergHydrithDen, 70, true)
town:build(1, UnitId.ZergTethvithSwamp, 70, true)
melee_ai:dynamic_wait(secs(20))
town:build(1, UnitId.ZergMutathSpire, 70, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergMatravilNest, 70, true)
town:build(1, UnitId.ZergOthstolOviform, 65, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergZorkizShroud, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergGathtelosk, 50)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergAlmakisAntre, 70, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergUlgorgCavern, 70, true)
melee_ai:dynamic_wait(secs(40))
town:build(1, UnitId.ZergTosvrolHaunt, 70, true)
melee_ai:dynamic_wait(secs(50))
town:build(1, UnitId.ZergGeszkathGrotto, 50, true)
end
---@param melee_ai MeleeAI
---@param town Town
function Tier3.swarm_expansion(melee_ai, town)
melee_ai:dynamic_wait(secs(5))
town:build(1, UnitId.ZergIrolIris, 70, true)
town:build(1, UnitId.ZergMutathSpire, 70, true)
melee_ai:dynamic_wait(secs(50))
town:build(1, UnitId.ZergMatravilNest, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergHydrithDen, 70, true)
town:build(1, UnitId.ZergTethvithSwamp, 70, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergZorkizShroud, 70, true)
melee_ai:dynamic_wait(secs(5))
town:build(1, UnitId.ZergTosvrolHaunt, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergOthstolOviform, 65, true)
town:build(1, UnitId.ZergGathtelosk, 50)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergAlmakisAntre, 70, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergUlgorgCavern, 70, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergGeszkathGrotto, 50, true)
end
---@param melee_ai MeleeAI
---@param town Town
function Tier3.sunblot_expansion(melee_ai, town)
town:build(1, UnitId.ZergIrolIris, 70, true)
town:build(1, UnitId.ZergQuazethPool, 70, true)
town:build(1, UnitId.ZergMutathSpire, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergHydrithDen, 70, true)
town:build(1, UnitId.ZergTethvithSwamp, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergTosvrolHaunt, 70, true)
town:build(1, UnitId.ZergKalkiirLake, 70, true)
melee_ai:dynamic_wait(secs(40))
town:build(1, UnitId.ZergMatravilNest, 70, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergOthstolOviform, 65, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergAlmakisAntre, 70, true)
melee_ai:dynamic_wait(secs(5))
town:build(1, UnitId.ZergGathtelosk, 50)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergGeszkathGrotto, 50, true)
melee_ai:dynamic_wait(secs(20))
town:build(1, UnitId.ZergZorkizShroud, 70, true)
melee_ai:dynamic_wait(secs(40))
town:build(1, UnitId.ZergUlgorgCavern, 70, true)
melee_ai:dynamic_wait(secs(25))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier3.general_expansion(melee_ai, town)
town:build(1, UnitId.ZergHydrithDen, 70, true)
melee_ai:dynamic_wait(secs(20))
town:build(1, UnitId.ZergQuazethPool, 70, true)
town:build(1, UnitId.ZergKalkiirLake, 70, true)
town:build(1, UnitId.ZergIrolIris, 70, true)
melee_ai:dynamic_wait(secs(5))
town:build(1, UnitId.ZergMutathSpire, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergZorkizShroud, 70, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergTethvithSwamp, 70, true)
melee_ai:dynamic_wait(secs(40))
town:build(1, UnitId.ZergOthstolOviform, 65, true)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergGathtelosk, 50)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.ZergUlgorgCavern, 70, true)
melee_ai:dynamic_wait(secs(40))
town:build(1, UnitId.ZergTosvrolHaunt, 70, true)
melee_ai:dynamic_wait(secs(25))
town:build(1, UnitId.ZergMatravilNest, 70, true)
town:build(1, UnitId.ZergAlmakisAntre, 70, true)
melee_ai:dynamic_wait(secs(50))
town:build(1, UnitId.ZergGeszkathGrotto, 50, true)
end
return Tier3