Files
great-powers/README.md
T
jcoffey-dev 38f69e9aa6 Harnesses for retreating and the winter
All 176 published cases now parse and run. Retreating passes 18 of 18,
building 7 of 7, civil disorder 13 of 13; movement is unchanged at 133 of
139.

The retreat and winter engine code was written before these cases and mostly
held up, but civil disorder was wrong in a way playing would never have shown.

It measured distance to a power's *home* centres. The rule is distance to the
centres it owns -- a Russia driven out of Moscow and holding Sweden measures
from Sweden -- so every power that had lost a home centre was disbanding the
wrong unit.

And it measured over the graph each unit moves on, which is wrong in both
directions. An army counts sea provinces it would have to be convoyed across,
so Albania is two steps from Naples rather than unreachable. A fleet counts
inland provinces it could never enter, so the Baltic is two from Warsaw. That
reads as nonsense until you notice what is being measured: not how the unit
would get home, but how far out of the way it is. A fleet in the Baltic is
still in the middle of Russia's business; one in the North Atlantic is not.

Civil disorder also only applies to the shortfall. A power that disbanded one
of the two it owed has half answered, and the automatic rule picks from what
is left rather than from what it started with.
2026-09-09 06:41:28 -07:00

126 lines
6.1 KiB
Markdown

# Great Powers
A browser rebuild of the classic seven-power negotiation game: one human
against six computer powers, in one sitting.
Not the name you expect, and [NOTICE.md](NOTICE.md) will make the argument at
length once there is more to notice. The short version is the one the
starship game already made on this site: the rules are free to rebuild, the
trademark and the published artwork are not. "Great Powers" is what those
seven were called at the time.
## What this is, and what it is not
**One human, six computer powers, one sitting.** The original is seven people
over weeks. A hub with no traffic cannot deliver that, and nobody is going to
wait months for six strangers — so the other six are played by the machine
and a game is finished in an evening.
**It still has to be a negotiation game.** A version where you simply write
orders is a good movement puzzle and not this game. So:
- **Both sides open.** Bots approach you with proposals; you approach them.
Neither waits for the other.
- **On real terms.** Offers are concrete and about this turn or the next few
— support this move, keep out of that province, no attack until 1903 — and
are accepted or refused on their merits, not by a die roll.
- **Betrayal is a move, not a bug.** A bot can agree to support you and then
not do it, and so can you. Bots remember who kept their word, tell each
other, and price you accordingly. That is the game.
The press is **structured rather than free text**: typed offers, deterministic
reasoning, and no model anywhere in it. That makes betrayal auditable — you
can read exactly why a power turned on you — and testable, which free text
would not be.
## The look and the sound
**Cartoony.** Flat cel fills and one heavy outline, the same house style the
other three games use, on a map generated from the topology in
`src/game/map.ts` rather than traced from anybody's board.
**It gets the whole screen.** The other three games live in a four-by-three
cabinet because the machines they are rebuilding did. This one is not
rebuilding a machine, and seventy-five provinces plus somebody trying to talk
you out of Galicia do not fit in a letterbox. The map takes the viewport.
**The music is not cartoony, and that is the point.** It is 1914: serious,
and intense. The joke of this game is that something charming to look at is
the cruellest thing on the site, and the score is what says so.
**And the turn should be heard.** Orders resolve in silence in every online
version of this game, which is a waste of the one moment anybody cares
about. Armies grinding into each other, guns at sea, a convoy escorting
something across, a unit being built, a unit falling back -- each of those is
a different noise, generated by the synth like everything else on this site.
**The endings get their own.** This game does not end in a win or a loss, it
ends in one of four things, and they do not sound alike:
- **the solo** -- eighteen centres, and the only unambiguous victory there is;
- **elimination** -- your last centre gone, which can happen in 1903 and
leaves you watching;
- **the draw** -- nobody reaches eighteen and the survivors agree to stop.
This is what actually happens most of the time, and it is neither a win nor
a loss, so it cannot borrow either of their tunes;
- **somebody else's solo** -- you are still on the board and it is over
anyway, which is the bleakest of the four and should sound like it.
## The board
Seventy-five provinces, two adjacency graphs — an army walks the land, a
fleet follows the water — and three provinces with two coasts that do not
connect, where a fleet has to say which one it is on.
The topology is a fact about a published game and free to use. The artwork is
not, and there is none here: the map this game draws is generated from the
data, the way the cave game's dodecahedron is.
`npm test` checks the board against itself. The one that earns its keep is
symmetry: an adjacency list this size is typed by hand once and wrong in
three places unless something looks. It found the Skagerrak wired to the
Baltic on the first run — which would have quietly opened a back door into
the Baltic and made Denmark worthless.
## The published test cases
`tools/datc.py` turns the Diplomacy Adjudicator Test Cases into
`src/game/datc.json` -- the orders and their annotated outcomes, not the
document's prose, which is Lucas Kruijswijk's writing. Every one of the 176
published cases is parsed and run.
| Section | | Passing |
| --- | --- | --- |
| 6.A - 6.G | movement | 133 / 139 |
| 6.H | retreating | 18 / 18 |
| 6.I | building | 7 / 7 |
| 6.J | civil disorder | 13 / 13 |
They are the reason this adjudicator is worth trusting: they found that
orders were never validated, that the paradox rule did not terminate, that
civil disorder was measuring the wrong distance, and that five of my own
hand-written cases rested on a support Paris cannot give.
Three cases are excluded rather than failed. 6.A.6, 6.B.10 and 6.B.11 state
their setup in prose -- "Germany has a fleet in London" -- and the fixture is
built from order lines, so it cannot carry a unit nobody ordered.
Six are known deviations, written down so they are not rediscovered as
surprises:
| Case | What it is |
| --- | --- |
| 6.A.5, 6.D.8 | The document distinguishes an `invalid` order from an `illegal` one, and the two cases disagree about whether a unit whose move was refused keeps its hold support. Guessing at the distinction cost four passing cases to buy one, so it is left until it can be read properly. |
| 6.F.22, 6.F.28, 6.F.29 | Second and sixth order paradoxes. The resolver settles them by Szykman's rule and reaches a different answer than the document's. These are positions nobody assembles by accident. |
| 6.G.19 | Whether an unnecessary fleet in a convoy chain signals intent. The document notes this one depends on which edition of the rules is used. |
Sections H, I and J -- retreating and the winter -- have engine code but no
harness yet; their cases are shaped differently and need one.
## Still to build
- the adjudicator, and the DATC cases that prove it
- the press: offers, memory, and the arithmetic of betrayal
- the bots' actual play
- the map, the orders, the music