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

323 lines
12 KiB
Lua

---@class TerranTier2
local Tier2 = {}
--- Requests Atlas and waits for it. The generic tier-2 tech transition.
---@param melee_ai MeleeAI
---@param town Town
function Tier2.acquire(melee_ai, town)
town:multirun(function()
wait(secs(1))
town:build(1, UnitId.TerranAtlas, 70, true)
end)
end
--- Requests a bare Starport once Atlas exists, for base air units.
---@param melee_ai MeleeAI
---@param town Town
function Tier2.starport(melee_ai, town)
melee_ai:dynamic_wait(secs(40))
town:build(1, UnitId.TerranStarport, 69, true)
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.stockade_requeue(melee_ai, town)
melee_ai:dynamic_wait(mins(1))
town:build(1, UnitId.TerranStockade, 70)
melee_ai:dynamic_wait(secs(25))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.starport_commandment_buildup(melee_ai, town)
town:multirun(function()
town:wait_build(1, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranScrapyard, 69)
town:wait_build(2, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranPalladium, 69)
town:wait_build(3, UnitId.TerranFulcrum)
town:build(2, UnitId.TerranPalladium, 69)
wait(secs(2))
town:wait_build(1, UnitId.TerranAtlas)
town:build(1, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport)
town:build(1, UnitId.TerranCommandment, 69)
end)
melee_ai:dynamic_wait(secs(25))
town:wait_build(2, UnitId.TerranFulcrum, false)
melee_ai:dynamic_wait(secs(70) + secs(25))
town:build(5, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(mins(2) + secs(15))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.fulcrum_scaling(melee_ai, town)
melee_ai:dynamic_wait(secs(20))
town:build(4, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(25))
town:build(5, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(5))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.fulcrum_buildup(melee_ai, town)
melee_ai:dynamic_wait(secs(25))
town:build(3, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(5))
town:wait_build(2, UnitId.TerranFulcrum)
town:wait_build(3, UnitId.TerranFulcrum, false)
wait(secs(1))
town:wait_build(1, UnitId.TerranAtlas)
melee_ai:dynamic_wait(secs(20))
town:build(4, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(20))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.raider_vestry_covenant_buildup(melee_ai, town)
melee_ai:dynamic_wait(secs(15))
town:multirun(function()
town:wait_build(1, UnitId.TerranStockade)
town:build(1, UnitId.TerranVestry, 69)
town:wait_build(2, UnitId.TerranStockade)
town:build(2, UnitId.TerranVestry, 69)
town:wait_build(3, UnitId.TerranStockade)
town:build(1, UnitId.TerranCovenant, 69)
town:wait_build(4, UnitId.TerranStockade)
town:build(2, UnitId.TerranCovenant, 69)
end)
melee_ai:dynamic_wait(secs(25))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.raider_stockade_requeue(melee_ai, town)
melee_ai:dynamic_wait(secs(15))
town:build(4, UnitId.TerranStockade, 70)
melee_ai:dynamic_wait(secs(40))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.raider_vestry_starport_rotary(melee_ai, town)
melee_ai:dynamic_wait(secs(5))
town:multirun(function()
town:wait_build(1, UnitId.TerranStockade)
town:build(1, UnitId.TerranVestry, 69)
town:wait_build(1, UnitId.TerranAtlas)
town:build(1, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport)
town:build(1, UnitId.TerranRotary, 69)
end)
melee_ai:dynamic_wait(secs(15))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.orbital_starport_rotary_commandment(melee_ai, town)
town:multirun(function()
town:wait_build(1, UnitId.TerranAtlas)
town:build(1, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport)
town:build(1, UnitId.TerranRotary, 69)
town:build(2, UnitId.TerranStarport, 70)
town:wait_build(2, UnitId.TerranStarport)
town:build(2, UnitId.TerranRotary, 69)
town:build(3, UnitId.TerranStarport, 70)
town:wait_build(3, UnitId.TerranStarport)
town:build(1, UnitId.TerranCommandment, 69)
end)
melee_ai:dynamic_wait(secs(40))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.orbital_covenant_anvil_starport_rotary(melee_ai, town)
melee_ai:dynamic_wait(secs(20))
town:multirun(function()
town:build(1, UnitId.TerranCovenant, 69)
town:wait_build(1, UnitId.TerranCovenant)
town:build(1, UnitId.TerranAnvil, 69)
wait(secs(1))
town:wait_build(1, UnitId.TerranAtlas)
town:build(1, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport)
town:build(1, UnitId.TerranRotary, 69)
town:build(2, UnitId.TerranStarport, 70)
town:wait_build(2, UnitId.TerranStarport)
town:build(2, UnitId.TerranRotary, 69)
melee_ai:dynamic_wait(secs(50))
end)
melee_ai:dynamic_wait(secs(40))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.orbital_vestry_starport_rotary_x4(melee_ai, town)
town:multirun(function()
town:wait_build(2, UnitId.TerranStockade)
town:build(1, UnitId.TerranVestry, 69)
town:wait_build(1, UnitId.TerranAtlas)
town:build(1, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport, false)
town:build(4, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport)
town:build(1, UnitId.TerranRotary, 69)
town:wait_build(2, UnitId.TerranStarport)
town:build(2, UnitId.TerranRotary, 69)
town:wait_build(3, UnitId.TerranStarport)
town:build(3, UnitId.TerranRotary, 69)
town:wait_build(4, UnitId.TerranStarport)
town:build(4, UnitId.TerranRotary, 69)
melee_ai:dynamic_wait(secs(15))
end)
melee_ai:dynamic_wait(mins(1) + secs(15))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.general_expansion_tail(melee_ai, town)
melee_ai:dynamic_wait(secs(20))
town:build(1, UnitId.TerranStarpad, 69, true)
melee_ai:dynamic_wait(secs(15))
Tier2.acquire(melee_ai, town)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.TerranStockade, 69, true)
melee_ai:dynamic_wait(secs(5))
town:build(1, UnitId.TerranCovenant, 69, true)
melee_ai:dynamic_wait(mins(1))
town:build(1, UnitId.TerranStarport, 69, true)
melee_ai:dynamic_wait(mins(1) + secs(15))
town:multirun(function()
wait(secs(1))
town:wait_build(1, UnitId.TerranAtlas)
town:build(1, UnitId.TerranDaedala, 65, true)
end)
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.general_scrapyard_palladium_mantle(melee_ai, town)
melee_ai:dynamic_wait(secs(25))
town:multirun(function()
town:wait_build(1, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranScrapyard, 69)
town:wait_build(2, UnitId.TerranFulcrum)
town:build(2, UnitId.TerranScrapyard, 69)
town:wait_build(3, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranPalladium, 69)
town:wait_build(4, UnitId.TerranFulcrum)
town:build(2, UnitId.TerranPalladium, 69)
end)
melee_ai:dynamic_wait(secs(40) + secs(40))
town:build(2, UnitId.TerranMantle, 70)
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.general_vestry_palladium_starport_rotary(melee_ai, town)
town:multirun(function()
town:wait_build(1, UnitId.TerranStockade)
town:build(1, UnitId.TerranVestry, 69)
town:wait_build(1, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranPalladium, 69)
town:wait_build(1, UnitId.TerranAtlas)
wait(secs(1))
town:build(1, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport)
town:build(1, UnitId.TerranRotary, 69)
end)
melee_ai:dynamic_wait(secs(40) + secs(25) + secs(50))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.general_fulcrum_follow_up(melee_ai, town)
melee_ai:dynamic_wait(secs(20))
town:build(3, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(45))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.general_mega_tech_buildup(melee_ai, town)
town:multirun(function()
town:wait_build(1, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranScrapyard, 69)
town:wait_build(2, UnitId.TerranFulcrum)
town:build(2, UnitId.TerranScrapyard, 69)
town:build(1, UnitId.TerranQuarry, 69)
town:wait_build(3, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranPalladium, 69)
town:wait_build(4, UnitId.TerranFulcrum)
town:build(2, UnitId.TerranPalladium, 69)
town:wait_build(1, UnitId.TerranAtlas)
town:build(2, UnitId.TerranStarport, 70)
town:wait_build(1, UnitId.TerranStarport)
town:build(1, UnitId.TerranRotary, 69)
town:wait_build(2, UnitId.TerranStarport)
town:build(2, UnitId.TerranRotary, 69)
town:wait_build(5, UnitId.TerranFulcrum)
town:build(3, UnitId.TerranPalladium, 69)
town:wait_build(6, UnitId.TerranFulcrum)
town:build(4, UnitId.TerranPalladium, 69)
town:wait_build(3, UnitId.TerranStarport)
town:build(3, UnitId.TerranRotary, 69)
town:wait_build(4, UnitId.TerranStarport)
town:build(4, UnitId.TerranRotary, 69)
town:wait_build(5, UnitId.TerranStarport)
town:build(5, UnitId.TerranRotary, 69)
town:wait_build(1, UnitId.TerranDaedala)
town:wait_build(6, UnitId.TerranStarport)
town:build(1, UnitId.TerranCommandment, 69)
town:wait_build(7, UnitId.TerranStarport)
town:build(2, UnitId.TerranCommandment, 69)
town:wait_build(8, UnitId.TerranStarport)
town:build(3, UnitId.TerranCommandment, 69)
town:build(2, UnitId.TerranNaniteAssembly, 69)
town:wait_build(1, UnitId.TerranNaniteAssembly)
town:build(1, UnitId.TerranHadron, 69)
end)
melee_ai:dynamic_wait(mins(1) + secs(15))
town:build(1, UnitId.TerranStarpad, 70)
melee_ai:dynamic_wait(secs(15) + mins(1) + secs(15))
town:build(6, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(mins(1) + secs(40))
end
---@param melee_ai MeleeAI
---@param town Town
function Tier2.general_vestry_scrapyard_palladium_starport_commandment(melee_ai, town)
town:multirun(function()
town:wait_build(1, UnitId.TerranStockade)
town:build(1, UnitId.TerranVestry, 69)
town:wait_build(1, UnitId.TerranFulcrum)
town:build(1, UnitId.TerranScrapyard, 69)
town:wait_build(2, UnitId.TerranFulcrum)
town:build(2, UnitId.TerranPalladium, 69)
town:wait_build(3, UnitId.TerranFulcrum)
wait(secs(1))
town:wait_build(1, UnitId.TerranAtlas)
town:build(2, UnitId.TerranStarport, 70)
town:wait_build(2, UnitId.TerranStarport)
town:build(2, UnitId.TerranCommandment, 69)
town:wait_build(1, UnitId.TerranCommandment)
melee_ai:dynamic_wait(secs(15))
end)
melee_ai:dynamic_wait(secs(15))
town:build(1, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(5) + secs(35))
town:build(1, UnitId.TerranStarpad, 70)
melee_ai:dynamic_wait(secs(30))
town:build(2, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(25) + secs(50))
Tier2.acquire(melee_ai, town)
town:build(3, UnitId.TerranFulcrum, 70)
melee_ai:dynamic_wait(secs(50))
end
return Tier2