Fallout 2 Dedicated Server (co-op) v0.4
v0.4 is about making the authority boundary hold under pressure: the server is the
source of truth for difficulty, combat turns, positions, inventory, and map-transition
rewards, while a lagging viewer is repaired rather than allowed to silently lose an action.
Quick start
Unpack the archive into your Fallout 2 directory, next to master.dat, and run it from
there. There is nothing to opt into. Combat presentation, recorded animation, smooth
walking, live dialogue, barter, worldmap travel and cutscenes are all on by default; the
F2_* variables below are the only ones an operator normally sets, and the rest exist as
kill switches for debugging (set one to 0 to turn that feature off — see
DEDICATED_HOWTO.md §2.4).
Start a new server. A map, two ports, and a real-time pace:
# Linux
cd /path/to/FO2
env F2_SERVER_MAP=artemple.map F2_SERVER_NET=9200 F2_SERVER_CMD=9201 \
F2_SERVER_PACE_MS=100 ./f2_serverREM Windows
cd C:\Games\Fallout2
set F2_SERVER_MAP=artemple.map
set F2_SERVER_NET=9200
set F2_SERVER_CMD=9201
set F2_SERVER_PACE_MS=100
f2_server.exeartemple.map is the Temple of Trials, where the game starts. F2_SERVER_NET is the port
players connect to; F2_SERVER_CMD is the operator command port, which should stay on
loopback or behind a firewall. The server waits at startup until the first client connects.
Load a save instead of starting fresh. F2_SERVER_LOAD and F2_SERVER_MAP are
alternatives — set one, never both:
# Linux — restore slot 8 (11-15 are the autosave window)
env F2_SERVER_LOAD=8 F2_SERVER_NET=9200 F2_SERVER_CMD=9201 \
F2_SERVER_PACE_MS=100 ./f2_serverREM Windows
set F2_SERVER_LOAD=8
set F2_SERVER_NET=9200
set F2_SERVER_CMD=9201
set F2_SERVER_PACE_MS=100
f2_server.exeSet neither and the server starts in a lobby: connect to the command port and use saves to
list slots, then load 8 or new artemple.map to pick the world at runtime.
Join with the client. fallout2-ce is the ordinary game; it becomes a network client
only when F2_CLIENT_CONNECT is set:
# Linux
env F2_CLIENT_CONNECT=127.0.0.1:9200 F2_PLAYER_NAME=YourName \
F2_PLAYER_CREATE=ask F2_WINDOWED=1 ./fallout2-ceREM Windows
set F2_CLIENT_CONNECT=127.0.0.1:9200
set F2_PLAYER_NAME=YourName
set F2_PLAYER_CREATE=ask
set F2_WINDOWED=1
fallout2-ce.exeReplace 127.0.0.1 with the server's address for a remote game. F2_PLAYER_CREATE=ask
opens the normal character creation screen and only matters the first time the server sees
that name — reconnecting later with the same command line rejoins the same character, so
one line works for both. Leave it out entirely and a new name joins as a copy of the host
body. Every player needs their own name; two clients on one machine need nothing extra.
Optional, and new in 0.4: F2_GAME_DIFFICULTY / F2_COMBAT_DIFFICULTY (below),
F2_AUTOSAVE_SECS=300 for periodic autosaves rotating through slots 11-15, and
F2_REQUIRE_TOKEN=1 with F2_PLAYER_TOKEN on the client to gate a public server. Full
reference, including the admin and control verbs, is in DEDICATED_HOWTO.md.
Dedicated-server deployment
- Docker Compose deployment. A small, hardened Compose setup now builds a static
f2_serverimage and mounts a separately owned Fallout 2 installation for assets,
saves, and maps. The admin port stays loopback-only by default. SeeDOCKER.md. - Server-owned difficulty.
F2_GAME_DIFFICULTYandF2_COMBAT_DIFFICULTYchoose
Easy/Normal/Hard and Wimpy/Normal/Rough respectively. Values are validated at boot
and reapplied after a save load, so a client's local Preferences screen cannot change
the whole session's simulation.
Co-op fixes
- Combat no longer accepts actions for a future turn. The server rejects movement,
interactions, attacks, and end-turn requests from the wrong actor immediately and
emits a current-turn checkpoint to repair the viewer. Repeated keypresses cannot bank
an end-turn or end-combat command for a later round. - Combat starts from the server's geometry. Combat-enter now carries an authoritative
position fence for every replicated critter on the elevation, closing the free-roam
animation lag that could put targeting range out of agreement. Turn checkpoints also
repair AP and ownership immediately. - A lagging client can still ask to attack. Its local range, AP, and ammo checks are
advisory; the server makes the real decision and can now explain a rejection instead
of the click disappearing locally. - Player revival in co-op. A healing item, successful First Aid, or successful Doctor
can revive a dead player character. The ordinary skill roll, time cost, daily-use
limits, and XP path still apply; NPC corpses retain vanilla behaviour. - Barter protects equipped gear. A dedicated server now stages and restores worn
armour and held weapons around trade, preventing equipped items from being offered
while their flags and art stayed behind. - Fresh corpse loot streams immediately. Loot created by a death script is reconciled
before the corpse is opened, so an apparently empty corpse no longer hides items that
Take Allcould already transfer. - Shared story XP reaches the whole transitioning party. Map-enter scripts award
their authored XP to every player captured in that group transition, while ordinary
script XP remains attributed to its acting player. - Elevator travel keeps the rider. Elevator transitions now preserve the player who
initiated them, rather than losing that identity after the deferred request drains. - Options works on connected clients.
Oand the HUD Options control open the local
Preferences page directly, avoiding the server-owned save/load menu. getherefallback. The control protocol can pick up one loose item from the
authoritative tile under the player, useful when scenery makes a normal click awkward.
Verification
- Linux and Windows x86_64 Release builds completed successfully.
- Dedicated-server control and combat-wire probes pass.
- The deterministic golden suite has two known divergences:
arvillag_gunfightandarvillag_aimshot. Both differ only in the recorded RNG state
and three hostile positions. The remaining server golden scenarios pass. The client
golden runner was not reached because the server runner exits non-zero on those two
divergences.
Upgrading
Back up saves before upgrading. v0.4 deliberately reasserts configured server difficulty
after loading a save; set the two F2_*_DIFFICULTY variables explicitly if you need a
particular campaign setting.