72 lines
5.0 KiB
Markdown
72 lines
5.0 KiB
Markdown
# 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.
|