Commit Graph
5 Commits
Author SHA1 Message Date
jcoffey-dev 69adcc8f89 The press, in front of the player
The board is the game being played now rather than a picture of the opening:
the loop runs, powers approach you before every set of orders, and what you
agree is judged when the orders come in.

Approaches arrive as sentences with Agree and Refuse under them, because a
proposal is a thing somebody said and should not look like a row in a form.
Asking is done from an order already written -- I am going there, help me --
which is the only shape this request has ever taken, and the answer comes
back immediately in the power's own words.

Those words are now written for a person. A power that turns you down saying
'austria is worth more to me than boh' is telling the truth in a voice
nobody uses; it says Austria, and Bohemia, and puts a full stop on the end.
The turn log too.

Nothing in the panel enforces anything. Agreeing writes no order and stops no
order being written, and the gap between what was agreed and what was ordered
is the whole game -- which is why the panel also shows, per power, how many
promises you have kept and broken and how far each of them now believes you.

Retreats and builds are still taken for the player automatically, the same
way a computer power's are. Choosing them is the next piece.
2026-09-09 08:46:24 -07:00
jcoffey-dev 4c1ebbab4a Bots that attack, units that look like units
The planner worked one unit at a time, picking each one's best destination
independently. That is why nothing was ever taken: a defended province is
attacked by a single unit, bounces, and is attacked again next year for ever.
It now works the other way round -- list what is worth having, work out how
many units it takes, and commit that many or none. A province you cannot take
is not worth one unit.

Three things came out of that. A single unit still walks at an *empty*
province, since the worst case is a bounce and it might be free, but never at
a garrison. Garrisoning now needs two neighbours rather than one, because one
unit cannot dislodge another -- with one counting as a threat, almost every
centre on a crowded board was threatened, almost every unit stood still, and
nothing happened for two centuries. And an attack is priced at two units
unless the defender has two friends near enough to prop it up; assuming one
was enough meant almost every attack was priced at three, which nobody can
afford.

Asking for help now works from what a power wanted and could not have. It
used to read the moves already planned, which was exactly backwards once the
planner learned not to attack what it cannot take: the target is no longer in
the plan, so the bot stopped asking precisely when it needed to.

The game is now called at the end of 1912. This game has no clock of its own
and seven cautious powers will hold a standoff for ever -- a run to 2198 had
the board still alive and nobody near eighteen. Eighteen wins outright and
otherwise the survivors draw, which is a proper ending here and the commonest
way real games finish.

Units are a soldier and a ship rather than two wedges. A helmet and square
shoulders read as troops at any size; a triangle above a curved hull is a
boat before anybody has decided to look. Both in the power's colour with one
flat highlight, and a shadow so they sit on the ground instead of floating
over a border.
2026-09-09 08:40:51 -07:00
jcoffey-dev 75104e2614 The turn loop, and two bugs it found
Spring orders, retreats, autumn orders, retreats, then the winter -- the only
phase that changes who owns anything. Everybody talks before the orders:
computer powers approach each other, answer on the merits, and what they
agree binds that turn and is judged at the end of it on the orders that were
given rather than on how the turn came out.

The loop has no interface attached on purpose. A whole game can be played out
in a test, which is the only way to ask the question that matters about the
bots -- not whether an order looks sensible but whether seven powers left
alone get anywhere.

Asking it found two things nothing else would have.

Every bot was submitting orders for all twenty-two units on the board rather
than its own three. The validator fills in a hold for every unit, which is
right for adjudication and wrong as an answer to what one power does this
turn; it only showed up when seven powers were asked at once.

And fifteen of nineteen units held in Spring 1901, when in this game every
unit moves. An empty province was priced by asking what the unit standing in
it could reach -- and there is no unit standing in it -- so every empty
non-centre scored zero and every move to one was skipped as worthless. It is
sixteen of nineteen now.

What the loop still does not do is finish. Played to 2149 the board is alive
and nobody has soloed: the powers take the neutrals and then hold each other
off. Taking a defended centre needs two units on it and the bots do not
reliably arrange that. That is the next piece of work and the test says so
rather than pretending otherwise.
2026-09-09 08:34:27 -07:00
jcoffey-dev efbecf6425 Bots that open the conversation
A bot that only answers is not negotiating, it is a form to fill in. propose()
works from the plan the power has already made: what it wants this turn, where
that will not work alone, and who could make it work. Help taking something
defended first, then a quiet border over ground neither of them owns, then
peace when a neighbour is over your centres and your ambitions are elsewhere.
Three a turn at most, or six powers talking at once is a mailstorm.

Each overture carries what the power says, so it reaches a human as a message
rather than as a form.

A power will offer a quiet border to somebody it is attacking somewhere else,
and that is on purpose. Marching on French Belgium while suggesting both
sides leave Burgundy alone is not a lie and not incoherent -- a promise about
Burgundy is a promise about Burgundy, and it will be kept to the letter by
somebody robbing you at the same moment. A test asserted the opposite and the
test was wrong: refusing that offer would be playing a politer game than this
one. Asking the power you are attacking to help you, or offering it peace
while your orders say otherwise, are different things and are both refused.

Nothing here promises any of it will be kept. Whether the power still wants
the deal when orders are due is settled in settleUp, and the answer is
sometimes no.
2026-09-09 07:30:59 -07:00
jcoffey-dev 16d047ea81 The bots
A position is worth its centres, and almost nothing else: units are how you
get them and are worth nothing in themselves. Every other term is a small
correction on that one fact.

Orders are a greedy plan taken in order of what is worth most, with a second
unit put behind the first when the prize is worth two units -- a bot that
never doubles up is not playing this game. Agreements are applied after the
plan rather than as a constraint on it, on purpose: the plan has to know what
it is giving up before it can decide whether the promise is worth keeping.

Three things the tests taught it. It garrisons a threatened centre it is
already standing on, because scoring only moves had it defending Berlin by
marching the Munich garrison there. It never shoves at its own countryman,
which has no strength and wastes two units. And the price of breaking a
promise is how far it trusts the partner, not how far the partner trusts it
-- the other way round gives a power that has been lied to four times a high
cost of retaliating, because it has been scrupulous and is still well thought
of, which is exactly backwards.

Every decision comes back as a sentence. When a power turns on you it says
what the province was worth and what it thought you were worth, because being
betrayed should be infuriating rather than mysterious.
2026-09-09 07:09:38 -07:00