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