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, }, }