Files
Country-Game---The-Desk/docs/BALANCE.md
T

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.