Files

5.0 KiB

Balance guide (M8)

How hard the game is, what makes it hard, and how to retune it without breaking the shape.

Intended difficulty

Hard, but a competent player wins; bold play is rewarded up to a point; extremes end in a fall.

Player What it does Expected result
random never touches the budget, coin-flips every card about 80 % reach the end, grade D
randomRescue same, but reacts when a danger warning opens the emergency session about 95 % survive
plannerHuman balanced plan: growth sectors up, order up late, taxes up a few points; answers cards with 30 % mistakes survives, grade B (A in about 1 run in 6)
plannerOracle same plan, reads the real card effects survives, grade A, S about 1 run in 12
planner05 / 15 / 2 / 3 the same plan, 0.5x / 1.5x / 2x / 3x as bold 100 % / 100 % (more A grades) / about 60 % / default every time
spendthrift, ruin, welfare borrow to spend default in most runs
starve, deepCuts, austerity cut everything revolution
tyrant, policeState, militarist repression and arms impeachment, revolution or a bad grade
neglectArmy army at 10 % coup
austerityMild, taxMild, policeMild, spendMild, welfareMild milder versions of the above playable (75 to 100 % survive)

The same table, with numeric bands, lives in TARGETS in tools/balance-check.mjs.

Tools

  • node tools/balance-check.mjs [seeds] [player,...] plays full terms and prints survival, score, grades, endings and final averages. --check runs every band in TARGETS and exits with an error when one is out of band (24 seeds, about 30 s). --set path=value overrides a balance.json value in memory: --set gain=3.4 --set debt.premiumCoef=0.0006.
  • node tools/balance-search.mjs [iterations] [seeds] hill-climbs the best two-phase budget (early and late multipliers per sector group and per tax). It shows the ceiling: about 63 to 65 with human-like card answers. Its output was the basis for the planner player.
  • node tools/bal-edit.mjs path=value ... edits balance.json and keeps its compact layout.
  • node tools/card-stats.mjs for the card pool; node tools/engine-check.mjs for the engine rules.

Workflow for a change: edit with --set first, read the table, commit the value with bal-edit, run --check, then go test ./server and node tools/engine-check.mjs.

What makes the game hard (all values in balance.json)

  • Drift (indicators.*.drift, scaled by driftScale): each indicator's target slides every year (opinion fades, order and stability erode, unrest creeps up). Standing still loses ground, so passive play slides toward a revolution.
  • Needs grow (needGrowth, per sector per year): the tick in the ledger moves; a frozen budget buys less quality.
  • World cycle (world): a slow global business cycle plus shocks. It moves growth and inflation, and fiscal.growthSens makes receipts follow growth, so a slump becomes a deficit. Newspaper headlines announce it.
  • Debt (debt.premiumCoef, gameOver.default): the interest premium is steep above 100 % of GDP. Default at 165 %, warning at 135 %. Bond-panic and rating cards fire on the way.
  • Gain (gain): how strongly sector quality moves the indicators. High enough that the budget visibly matters.
  • Score (score.lastYearShare): the last year counts for half of the average, so a boom bought on credit does not pay.

What rewards audacity

  • Excellence terms (indicators.*.excess, vars.growth.excess): extra payoff above a sector quality of 70 to 75 (research, education, infrastructure, industry for growth; health and social for opinion; culture and foreign affairs for soft power). Quality 75 needs a budget of about 1.6x the need, so it is a real commitment. Neglect terms (short) punish the opposite.
  • Windfall cards (cri_wf_*): fire only when a sector quality is high for long enough.

What punishes extremes

  • Backlash cards (cri_bk_*): fire on the player's own choices, through the condition keys ratio:<sector> (budget over need) and tax:<id> (rate): police state, arms race, tax strikes, capital flight, rating downgrades, hospital wards closing.
  • Game overs: revolution (unrest above 62 and opinion below 28), coup (army loyalty under 35 with stability under 50, or under 18 alone), impeachment, default. The chance grows each day in the zone (0.004 per day of presence).
  • Emergency session: a new danger warning opens the budget ledger at once (at most once per 45 days) so the player can react before the next quarter.

Known soft spots

  • S is rare by design (score 73). The best human-like runs reach about 71.
  • Unrest runs about +0.25 in the card pool because "no" answers lean toward unrest.
  • Blanket austerity (x0.75 everywhere) is fatal; targeted austerity (cut culture, foreign affairs, administration, research and raise VAT) is survivable but scores poorly (grade D or F). That is deliberate: austerity costs political capital.