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

162 lines
5.4 KiB
Lua

local Basic = require("melee.terran.build.basic")
local Openers = require("melee.terran.build.openers")
local Tier1 = require("melee.terran.build.tier1")
local Tier2 = require("melee.terran.build.tier2")
local Tier3 = require("melee.terran.build.tier3")
local expansion_build_order = {
Basic.build_expansion,
Tier2.general_expansion_tail,
}
local attack_wave_cost_bias = 0.5
return {
---@type AIPersonality
two_fulcrum_mech = {
name = "General: 2 Fulcrum Mech",
unit_composition = {
-- signature units (Mantle x2)
[UnitId.TerranPhalanxTankMode] = 2,
[UnitId.TerranRamesses] = 2,
[UnitId.TerranDurendal] = 2,
[UnitId.TerranCataphract] = 2,
-- filler units
[UnitId.TerranBlackjack] = 1,
[UnitId.TerranMadrigalImperiosoMode] = 1,
},
main_build_order = {
Openers.two_fulcrum_mech,
Tier1.two_fulcrum_mech,
Tier2.acquire,
Tier2.general_scrapyard_palladium_mantle,
Tier3.acquire,
},
expansion_build_order = expansion_build_order,
build_anti_ground_defenses = Basic.build_anti_ground,
build_anti_air_defenses = Basic.build_anti_air,
attack_wave_cost_bias = attack_wave_cost_bias,
},
---@type AIPersonality
early_riser = {
name = "General: Early Riser",
unit_composition = {
-- signature unit
[UnitId.TerranMaverick] = 2,
-- healers
[UnitId.TerranCleric] = 1,
-- filler units
[UnitId.TerranCyclops] = 1,
},
main_build_order = {
Openers.expand_first_very_slow,
Tier1.general_stockade_fulcrum_vestry_palladium_starpad,
Tier2.acquire,
Tier3.acquire,
},
expansion_build_order = expansion_build_order,
build_anti_ground_defenses = Basic.build_anti_ground,
build_anti_air_defenses = Basic.build_anti_air,
attack_wave_cost_bias = attack_wave_cost_bias,
},
---@type AIPersonality
the_cube = {
name = "General: The Cube",
unit_composition = {
-- signature unit
[UnitId.TerranMaverick] = 2,
-- filler units
[UnitId.TerranVulture] = 1,
[UnitId.TerranPhalanxTankMode] = 1,
[UnitId.TerranSalamander] = 1,
},
main_build_order = {
Openers.fulcrum_start_medium,
Tier1.general_stockade_starpad,
Tier2.general_vestry_palladium_starport_rotary,
Tier2.acquire,
Tier2.general_fulcrum_follow_up,
Tier3.acquire,
},
expansion_build_order = expansion_build_order,
build_anti_ground_defenses = Basic.build_anti_ground,
build_anti_air_defenses = Basic.build_anti_air,
attack_wave_cost_bias = attack_wave_cost_bias,
},
---@type AIPersonality
doubling_up = {
name = "General: Doubling Up",
unit_composition = {
-- signature units
[UnitId.TerranMaverick] = 2,
[UnitId.TerranGoliath] = 2,
-- healers
[UnitId.TerranShamanSupportMode] = 1,
-- filler units
[UnitId.TerranCyclops] = 1,
[UnitId.TerranBlackjack] = 1,
},
main_build_order = {
Openers.doubling_up,
Tier1.doubling_up,
Tier2.acquire,
Tier2.general_fulcrum_follow_up,
Tier3.acquire,
},
expansion_build_order = expansion_build_order,
build_anti_ground_defenses = Basic.build_anti_ground,
build_anti_air_defenses = Basic.build_anti_air,
attack_wave_cost_bias = attack_wave_cost_bias,
},
---@type AIPersonality
mech_into_air = {
name = "General: Mech into Air",
unit_composition = {
-- signature units (the mech-into-air transition)
[UnitId.TerranPhalanxTankMode] = 2,
[UnitId.TerranMinotaur] = 2,
-- filler units
[UnitId.TerranMatadorTankMode] = 1,
[UnitId.TerranSalamander] = 1,
[UnitId.TerranSeraph] = 1,
[UnitId.TerranHippogriff] = 1,
[UnitId.TerranPhobos] = 1,
},
main_build_order = {
Openers.mech_into_air,
Tier2.acquire,
Tier2.general_mega_tech_buildup,
Tier3.acquire,
Tier3.general_starport_scaling,
},
expansion_build_order = expansion_build_order,
build_anti_ground_defenses = Basic.build_anti_ground,
build_anti_air_defenses = Basic.build_anti_air,
attack_wave_cost_bias = attack_wave_cost_bias,
},
---@type AIPersonality
observant = {
name = "General: Observant",
unit_composition = {
-- signature unit
[UnitId.TerranCyprian] = 2,
-- filler units
[UnitId.TerranSeraph] = 1,
[UnitId.TerranBlackjack] = 1,
},
main_build_order = {
Openers.observant,
Tier2.general_vestry_scrapyard_palladium_starport_commandment,
Tier3.acquire,
},
expansion_build_order = expansion_build_order,
build_anti_ground_defenses = Basic.build_anti_ground,
build_anti_air_defenses = Basic.build_anti_air,
attack_wave_cost_bias = attack_wave_cost_bias,
},
}