In One Paragraph
Every player-game gets three numbers for its first four minutes: how aggressive, how greedy and how defensive the opening was. Each is built from where the money went and when things happened, and each is expressed in standard deviations within the player’s own faction: an Aggressive score of +1 means “more aggressive than about 84% of openings by this faction”, 0 is the faction’s typical opening, −1 is a quiet one. The three are independent reads, not shares of one pie — a player can be high on two at once, and a Leaning is simply the highest of the three when it is over half a standard deviation (otherwise Balanced).
Only the opening is scored. What happened after 4:00 — who won, how long the game went — never feeds a score, which is why the scores can be put against win rates without circularity.
Step 1 — Where the Money Went
the opening budget, by 4:00, at sticker pricesEvery structure placed, unit made, gatherer bought and upgrade queued by 4:00 is priced from the game’s own tables and put on one of these lines. Where a structure stands and where a unit was sent decide the line, not what it is: a Barracks in the opponent’s half is aggressive money, the same Barracks at home is infrastructure.
| Line | Posture | What lands on it |
|---|---|---|
| Units sent out | Aggressive | units that crossed the three-quarter line into the opponent’s side, or were posted forward by 2:00 |
| Barracks and factories forward | Aggressive | production buildings placed past the halfway line |
| Defenses in the opponent’s base | Aggressive | defensive structures on their side |
| Tunnels forward | Aggressive | tunnel networks past the halfway line |
| Supply centers | Greedy | every supply center, stash or drop zone |
| Extra gatherers | Greedy | chinooks, trucks and workers beyond the ones a supply center brings |
| Capture-building upgrade | Greedy | the upgrade itself |
| Capturers at derricks and tech buildings | Greedy | infantry with the capture ability sent to a derrick or a tech building |
| Defenses on the own side | Defensive | defensive structures at home |
| Tunnels on the own side | Defensive | tunnel networks at home |
| Units kept on the own side | Defensive | units that had not left the own side by 4:00 |
| Base infrastructure | Uncommitted | power, home production, tech buildings, the command center |
| Fakes and other structures | Uncommitted | everything else that stands |
| Other upgrades | Uncommitted | upgrades other than capture-building |
| Other units at derricks and tech buildings | Uncommitted | non-capturers idling at a derrick |
The Uncommitted lines are part of the budget (they set the shares) but carry no posture. A unit posted at home and later sent out counts on both lines, defensive first, then aggressive.
Step 2 — The Signals
each posture is a block of signals; the budget share is one of themDollars alone miss timing and reach, so each block adds a few reads of when and how far. Earliness runs from 0 (did not happen by 4:00) to 1 (at the very start).
Aggressive
- Aggressive share of the budget
- First attack sortie — earliness
- Attack sorties by 4:00 — how many groups went at the opponent’s army or base
- Trick sorties — dozer, chinook, helix, supply truck or dragon tank sent over
- First raid sortie (at gatherers, dozers or power) — earliness, and raid sorties by 4:00
- Farthest own structure toward the opponent
- A single income source at 4:00 — all-in on the army
- Command center kept — counts against: selling it early is the all-in tell
Greedy
- Greedy share of the budget
- Second and third income source placed — earliness of each
- Income sources placed away from the start position
- Capture-building upgrade bought — earliness
- Capture orders on derricks by 4:00
Defensive
- Defensive share of the budget
- First defense on the own side — earliness
- Defenses placed on the own side by 4:00
- Share of early posts kept in base — where the first units were sent by 2:00
No block holds the negative of another block’s signal, so being aggressive is not measured as “not defensive”. The exact weight each signal ends up with is on the Opening posture tab’s Signals card.
Step 3 — From Signals to a Score
- Rank-normalize within the faction. Each signal is replaced by its rank among all openings of the same faction, mapped onto a normal curve. A Toxin general’s tunnel count is judged against other Toxin openings, not against USA. Factions with different toolkits become comparable, and one huge value cannot dominate.
- Weight the block. The signals of a block are combined as a weighted sum. The weights are not hand-picked: they are the loadings of the block’s first principal component, computed over the whole library — the direction along which the block’s signals move together most — clipped at zero so no signal can count backwards, and scaled to sum to one. A signal that rarely agrees with the rest of its block gets a small weight.
- Standardize. The weighted sum is centred and scaled to standard deviations within the group the tab compares against: by default the faction (the “Relative to” control on the Opening posture tab can switch to the side or to everyone, which is how factions are compared to each other).
The result is three scores per player-game. The triangle on the Opening posture tab is a composition of the three; the clusters and the “Leaning” are read off the same numbers.
What to Keep in Mind
- Opening only. A player who turtles to 4:00 and then attacks is scored defensive. The window is fixed at 4:00 so that every game is scored on the same stretch; a game that ended earlier is scored to its end against the full window.
- Relative, not absolute. A score of 0 is the faction’s norm, whatever that norm is. A vanilla GLA opening at 0 and a Laser opening at 0 may look nothing alike.
- Random picks are scored as the faction actually played, resolved from the replay.
- Correlation, not cause. Win rates along a score say what tends to win in the library, including what being ahead early lets a player do.
- Where the data comes from. Every input is read from the replay’s own order stream and the engine’s object records, re-simulated for the library; nothing is inferred from the result screen.