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

160 lines
5.3 KiB
Lua

local Basic = require("melee.protoss.build.basic")
local Openers = require("melee.protoss.build.openers")
local Tier1 = require("melee.protoss.build.tier1")
local Tier2 = require("melee.protoss.build.tier2")
local Tier3 = require("melee.protoss.build.tier3")
local Tier4 = require("melee.protoss.build.tier4")
local expansion_build_order = {
Basic.build_expansion,
Tier4.ranger_expansion,
}
local attack_wave_cost_bias = 0.5
return {
---@type AIPersonality
two_gate_strider = {
name = "Ranger: 2 Gate Strider",
unit_composition = {
-- signature units
[UnitId.ProtossVassal] = 2,
[UnitId.ProtossDracadin] = 2,
-- filler units
[UnitId.ProtossIdol] = 1,
[UnitId.ProtossAccantor] = 1,
},
main_build_order = {
Openers.two_gate_strider,
Tier1.two_gate_strider,
Tier2.strider_lattice_library_gateway,
Tier3.acquire,
Tier4.emissary_synthetic_synod,
},
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
emissary_squared = {
name = "Ranger: Emissary Squared",
unit_composition = {
-- signature units (Synthetic Synod)
[UnitId.ProtossAnalogue] = 2,
[UnitId.ProtossDemiurge] = 2,
[UnitId.ProtossEmpress] = 2,
-- filler units
[UnitId.ProtossVassal] = 1,
[UnitId.ProtossGolem] = 1,
[UnitId.ProtossAccantor] = 1,
[UnitId.ProtossDracadin] = 1,
},
main_build_order = {
Openers.emissary_squared,
Tier2.emissary_ardent_lattice_gateway,
Tier3.acquire,
Tier4.emissary_synthetic_synod,
},
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
one_gate_authority = {
name = "Ranger: 1 Gate Authority",
unit_composition = {
-- signature unit
[UnitId.ProtossManifold] = 2,
-- filler units (Prostration Stage)
[UnitId.ProtossPariah] = 1,
[UnitId.ProtossPotentate] = 1,
[UnitId.ProtossSycophant] = 1,
[UnitId.ProtossMindTyrant] = 1,
[UnitId.ProtossIdol] = 1,
[UnitId.ProtossAccantor] = 1,
},
main_build_order = {
Openers.one_gate_authority,
Tier1.one_gate_authority,
Tier2.authority_ardent_gateway_expand_lattice,
Tier3.authority_prostration_ardent2,
Tier4.authority_synthetic_synod,
},
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
lattice_expo = {
name = "Ranger: Lattice Expo",
unit_composition = {
-- signature unit
[UnitId.ProtossSimulacrum] = 2,
-- filler units
[UnitId.ProtossIdol] = 1,
[UnitId.ProtossDracadin] = 1,
},
main_build_order = {
Openers.lattice_expo,
Tier2.expo_ardent_authority,
Tier3.acquire,
Tier4.emissary_synthetic_synod,
},
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
simulant_swarm = {
name = "Ranger: Simulant Swarm",
unit_composition = {
-- signature unit
[UnitId.ProtossSimulacrum] = 2,
-- filler units
[UnitId.ProtossIdol] = 1,
[UnitId.ProtossEcclesiast] = 1,
},
main_build_order = {
Openers.simulant_swarm,
Tier1.simulant_swarm,
Tier2.acquire,
Tier3.acquire,
Tier4.emissary_synthetic_synod,
},
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_registry = {
name = "Ranger: The Registry",
unit_composition = {
-- signature unit
[UnitId.ProtossManifold] = 2,
-- filler units
[UnitId.ProtossIdol] = 1,
[UnitId.ProtossAccantor] = 1,
},
main_build_order = {
Openers.the_registry,
Tier1.the_registry,
Tier2.acquire,
Tier3.acquire,
Tier4.emissary_synthetic_synod,
},
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,
},
}