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