Door Setup — Running Immortal Barons¶
This guide is for the BBS operator (the sysop). It explains how to set up the game on your board, and how to join an inter-BBS league. Players do not need to read this.
What you need¶
The game is one program: immortal-barons. It runs as a native door under BBS
software on any platform Go supports.
The game keeps all its files in one data directory (default ./data). Point
the -data option at it.
Run immortal-barons -help to see all the command-line options.
First-time setup¶
The game runs from built-in defaults, so you can register the door and let your
first caller start a game without any setup step. To choose the rules ahead of
time, use the same -reset command you would use to start a fresh game later:
immortal-barons -reset -data /path/to/data
This opens the Configuration Editor: a menu of every game rule (turns per
day, protection turns, land and market settings, interest and investment rates,
tax and region limits, costs and attack settings, number of AI barons, game
length, and more). Change what you like, then press S to save config.json
and start a fresh game, or Q to cancel. On a brand-new install there is
nothing to clear, so this just writes your config and seeds the starting world.
See "Starting a fresh game" below — it is the same command.
Registering the door¶
Set up the game as an external program (a "door") in your BBS software.
- The game reads DOOR32.SYS (the dropfile most BBS software writes) or
DOOR.SYS. Point the game at it with
-dropfile, or let it search the current directory. - The caller's handle from the dropfile becomes the name of their realm.
A typical command line (use the full path to immortal-barons only if it is not
installed on your PATH):
/path/to/immortal-barons -dropfile /path/to/DOOR32.SYS -data /path/to/data
Example: Mystic BBS¶
In Mystic's menu editor, add a command of type D3 (Exec DOOR32 program) and
set its Data field to the command line below. Mystic writes the dropfile
into each node's own temporary directory and gives you %P for that directory
(with a trailing slash), so the same line works for every node:
/path/to/immortal-barons -dropfile %Pdoor32.sys -data /path/to/game-data
Two things to note. Mystic writes the file name in lower case (door32.sys),
which matters on Linux because file names there are case-sensitive. And the
game's data directory should be a separate directory from the BBS's own files.
Before the first caller connects, seed the game:
/path/to/immortal-barons -reset -data /path/to/game-data
This opens the settings editor (see "First-time setup" above); when you save
with S, it creates the data directory if it does not exist and writes
config.json and the starting world into it.
How the game talks to the caller¶
The game connects to the caller in one of two ways, chosen automatically:
- On Linux, macOS, and the BSDs, it reads and writes the caller through standard input and output. Synchronet (in its EX_STDIO mode) and Mystic hand the connection to the door this way, so this is the normal case. You do not need to set anything up for it.
- On Windows, it attaches directly to the caller's socket. The socket
handle is on line 2 of
DOOR32.SYS(a Windows "winsock" handle). This is how a Windows door normally works.
Serial (FOSSIL) doors are not supported. Configure your BBS for a socket or stdio door.
Note: the Windows socket path is built but has not yet been tested against a live BBS. If you run the game as a Windows door, please report how it goes.
Daily maintenance¶
Run maintenance once a day (a nightly event is the usual place):
immortal-barons -maint -data /path/to/data
This advances the game one day for every day that passed, lets the AI barons take their turns, and refreshes each player's turns.
Starting a fresh game (reset)¶
To reconfigure and start the game over, run:
immortal-barons -reset -data /path/to/data
This opens the Configuration Editor (adjust any rules, then
S to save or Q to cancel). After you save, it clears all empires (players
re-create their realm the next time they log in) and re-seeds the AI barons on a
fresh day one. It does not pick a winner. The old world is saved to
world.json.bak in the data directory first, so you can restore it if you reset
by mistake. Cancelling with Q leaves the game untouched.
Inter-BBS (league) play¶
A league is a group of boards whose players compete against each other. To join one, turn on inter-BBS play and give your board a name.
Edit config.json and set:
"IBBS": true— turn on the inter-BBS menus."BoardID"— a short unique name for your board (your "planet")."InboundDir"— the directory where packets from other boards arrive."OutboundDir"— the directory where the game writes packets for other boards.
Ask your League Coordinator for the node list and add it to your data directory
as ibnodes.dat (see the format below).
How packets move (you choose the schedule)¶
The game never moves files between boards. It only reads and writes packet files in your inbound and outbound directories. Moving the files between boards is your job, and you choose how often it happens.
The inter-BBS step is:
immortal-barons -planetary -data /path/to/data
It reads every packet in your inbound directory, applies it, and writes new
packets to your outbound directory. It also runs automatically inside -maint
when inter-BBS play is on.
A common setup:
- A caller plays the game.
- After the caller exits, or on a schedule you pick, run
-planetary. - Your transport script copies each file from your outbound directory to the inbound directory of every other board (over FidoNet, a sync tool, scp, a shared mount — whatever you use).
- The next
-planetaryrun on each board reads and applies those files.
Run it as often as you like. More often means shorter travel times between planets. The in-game "Travel Times" screen shows players how recently packets have arrived, so they know how fast operations move.
The node list: ibnodes.dat¶
The node list names every board in the league. It uses the same simple layout
as the original BRE BRNODES.DAT. Each board is six lines, and a blank line
separates boards:
1
Avalon
363/277
Orlando
FL
USA
2
Pier 7
106/477
Houston
TX
USA
The six lines are: node number, board (planet) name, network address, city, state or province, and country. Board number 1 is the League Coordinator.
League-wide rules (Coordinator only)¶
The League Coordinator sets the rules that must match across the whole league.
These are all the fields marked with a star in the Configuration Editor: turns
per day, protection turns, game length, land market and daily land, interest
and investment rates, tax and region and player limits, buy-military mode, and
the cost, damage, and reward levels. Set them in the Coordinator's own
config.json, then broadcast them to every board:
immortal-barons -league-config -data /path/to/data
This writes a settings packet to your outbound directory. Each member board
adopts the settings on its next -planetary run. Member boards accept these
settings only from the Coordinator's board (node 1), so no one else can change
the league rules. Only the Coordinator's board may send this packet.
The Coordinator¶
There are two different "coordinator" ideas, and they are not the same thing:
- League Coordinator — the sysop of board number 1. This person keeps the node list and hands it out to the other boards.
- BBS Coordinator — a player your board elects. Players vote in the System menu, and the player with the most votes gets the Coordinator menu. Votes can change at any time.