github Cahb/fallout2-ce-coop v0.4
Fallout 2 Dedicated Server (co-op) v0.4 Latest

one month ago

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_server
REM 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.exe

artemple.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_server
REM Windows
set F2_SERVER_LOAD=8
set F2_SERVER_NET=9200
set F2_SERVER_CMD=9201
set F2_SERVER_PACE_MS=100
f2_server.exe

Set 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-ce
REM 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.exe

Replace 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_server image and mounts a separately owned Fallout 2 installation for assets,
    saves, and maps. The admin port stays loopback-only by default. See DOCKER.md.
  • Server-owned difficulty. F2_GAME_DIFFICULTY and F2_COMBAT_DIFFICULTY choose
    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 All could 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. O and the HUD Options control open the local
    Preferences page directly, avoiding the server-owned save/load menu.
  • gethere fallback. 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_gunfight and arvillag_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.

Don't miss a new fallout2-ce-coop release

NewReleases is sending notifications on new releases.