Two fair-map matches showed MRP annihilating Stream by ~5min. Build-order telemetry (new BALTYPES histogram in balance.lua) found the cause: Stream's podfarm arrived at 5.8min vs MRP's merchtable at 1.7min, so the cheap-swarm faction fielded 1 bufferbot against 17 djgrunts, and Stream spent 1500cr on the Algorithm superweapon before it had an army. Fixes: * BuildingFractions: barracks 1 -> 10, factories 1 -> 6 so army buildings come before tech. Result: podfarm 5.8min -> 2.5min, algorithm 3.3min -> 5.8min, and Stream survived to 9.5min with 13 buildings instead of being wiped at 5.2. * BuildingDelays on mastering/algorithm (4500) — no superweapon before an army. * UnitsToBuild shares normalised. Reading UnitBuilderBotModule showed these are PERCENTAGES of army composition, and mine summed to 233% per faction, which made unit selection collapse to iteration order and starved Stream of infantry. balance_report.py now emits a verdict (flatline / runaway / stalled production) and refuses to judge matches under 5 minutes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
113 lines
3.0 KiB
YAML
113 lines
3.0 KiB
YAML
player:
|
|
ModularBot@WaxAI:
|
|
Name: bot-wax-ai.name
|
|
Type: wax
|
|
GrantConditionOnBotOwner@wax:
|
|
Condition: enable-wax-ai
|
|
Bots: wax
|
|
HarvesterBotModule:
|
|
RequiresCondition: enable-wax-ai
|
|
HarvesterTypes: digger, scraper
|
|
RefineryTypes: pressplant, transcoder
|
|
McvManagerBotModule:
|
|
RequiresCondition: enable-wax-ai
|
|
McvTypes: popupvan, streamvan
|
|
ConstructionYardTypes: popupshop, streamhub
|
|
McvFactoryTypes: garage, printfarm
|
|
BaseBuilderBotModule:
|
|
RequiresCondition: enable-wax-ai
|
|
MinimumExcessPower: 40
|
|
MaximumExcessPower: 160
|
|
ExcessPowerIncrement: 40
|
|
ExcessPowerIncreaseThreshold: 4
|
|
ConstructionYardTypes: popupshop, streamhub
|
|
RefineryTypes: pressplant, transcoder
|
|
PowerTypes: ampstack, datacentre
|
|
BarracksTypes: merchtable, podfarm
|
|
VehiclesFactoryTypes: garage, printfarm
|
|
ProductionTypes: merchtable, podfarm, garage, printfarm
|
|
SiloTypes: vault
|
|
DefenseTypes: hornpit, adblocker
|
|
BuildingLimits:
|
|
pressplant: 3
|
|
transcoder: 3
|
|
merchtable: 1
|
|
podfarm: 1
|
|
garage: 1
|
|
printfarm: 1
|
|
mastering: 1
|
|
algorithm: 1
|
|
launchramp: 1
|
|
droneport: 1
|
|
BuildingFractions:
|
|
pressplant: 30
|
|
transcoder: 30
|
|
hornpit: 8
|
|
adblocker: 8
|
|
# barracks first: infantry is the cheapest army and both sides need
|
|
# it early. Telemetry showed Stream getting its podfarm at 5.8min
|
|
# (1 bufferbot fielded) vs MRP's merchtable at 1.7min (17 djgrunts).
|
|
merchtable: 10
|
|
podfarm: 10
|
|
garage: 6
|
|
printfarm: 6
|
|
launchramp: 2
|
|
droneport: 2
|
|
mastering: 1
|
|
algorithm: 1
|
|
BuildingDelays:
|
|
# no superweapon building before there is an army to protect it
|
|
mastering: 4500
|
|
algorithm: 4500
|
|
UnitBuilderBotModule:
|
|
RequiresCondition: enable-wax-ai
|
|
UnitsToBuild:
|
|
# these are PERCENTAGES of army composition, not weights: the AI
|
|
# builds whatever sits furthest below its share. They previously
|
|
# summed to 233% per faction, which made selection arbitrary and
|
|
# starved Stream of infantry entirely.
|
|
# MRP ~98
|
|
digger: 8
|
|
djgrunt: 28
|
|
roadie: 3
|
|
spinner: 14
|
|
stacktank: 20
|
|
basscannon: 7
|
|
boombike: 6
|
|
flyer45: 10
|
|
selector: 2
|
|
# Stream ~98
|
|
scraper: 8
|
|
bufferbot: 34
|
|
crawler: 4
|
|
drmwalker: 26
|
|
compressor: 24
|
|
curator: 2
|
|
UnitLimits:
|
|
digger: 4
|
|
scraper: 4
|
|
roadie: 2
|
|
boombike: 3
|
|
crawler: 2
|
|
selector: 1
|
|
curator: 1
|
|
SupportPowerBotModule:
|
|
RequiresCondition: enable-wax-ai
|
|
Decisions:
|
|
thedrop:
|
|
OrderName: NukePowerInfoOrder
|
|
MinimumAttractiveness: 3000
|
|
Consideration@1:
|
|
Against: Enemy
|
|
Types: Structure
|
|
Attractiveness: 1
|
|
TargetMetric: Value
|
|
CheckRadius: 5c0
|
|
SquadManagerBotModule:
|
|
RequiresCondition: enable-wax-ai
|
|
SquadSize: 8
|
|
AirUnitsTypes: flyer45, compressor
|
|
ExcludeFromSquadsTypes: digger, scraper, popupvan, streamvan, roadie, crawler
|
|
ConstructionYardTypes: popupshop, streamhub
|
|
ProtectionTypes: launchramp, droneport, digger, scraper, popupvan, streamvan, pressplant, transcoder, popupshop, streamhub, ampstack, datacentre, vault, merchtable, podfarm, garage, printfarm, mastering
|