---@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