ZERO HOUR STATS

How the opening scores are made — the Aggressive, Greedy and Defensive numbers behind the Opening posture tab, the Leaning on the Win rates tab and the posture filters

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 prices

Every 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.

LinePostureWhat lands on it
Units sent outAggressiveunits that crossed the three-quarter line into the opponent’s side, or were posted forward by 2:00
Barracks and factories forwardAggressiveproduction buildings placed past the halfway line
Defenses in the opponent’s baseAggressivedefensive structures on their side
Tunnels forwardAggressivetunnel networks past the halfway line
Supply centersGreedyevery supply center, stash or drop zone
Extra gatherersGreedychinooks, trucks and workers beyond the ones a supply center brings
Capture-building upgradeGreedythe upgrade itself
Capturers at derricks and tech buildingsGreedyinfantry with the capture ability sent to a derrick or a tech building
Defenses on the own sideDefensivedefensive structures at home
Tunnels on the own sideDefensivetunnel networks at home
Units kept on the own sideDefensiveunits that had not left the own side by 4:00
Base infrastructureUncommittedpower, home production, tech buildings, the command center
Fakes and other structuresUncommittedeverything else that stands
Other upgradesUncommittedupgrades other than capture-building
Other units at derricks and tech buildingsUncommittednon-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 them

Dollars 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

  1. 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.
  2. 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.
  3. 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.