Skip to content

Repository files navigation

TpF2 Multiplayer — Transport Fever 2 multiplayer mod

The dev 192ecd4d integration advances the native package, lobby handshake and panel to 0.7.1.5. Completed save and terrain transfers release the host loop’s temporary references each pass. The CrossOver loader-hook fix is retained; Linux already uses guarded Vulkan dispatcher slots. All peers, including dedicated servers, must update.

The dev a459ff1c integration fixes Linux release packaging to accept the menu’s existing Tpf2mpLastGameUiTick export. Release remains 0.7.1.4; gameplay code is unchanged.

The dev 4487d7cd integration advances the native package, lobby handshake and panel to 0.7.1.4. All peers must update. The menu library now exports a monotonic gameplay-update timestamp, cleared at the title menu. The Windows MSI warning-page fix is retained. Native Linux uses a different terrain paging policy; no new loading-speed result is claimed.

The dev c4754f26 integration retains the Windows installer’s folder-refusal dialog. Native Linux already prints the reason to stderr and exits with an error; four installer regressions cover that behavior. Release remains 0.7.1.3.

The dev 721ac61f integration moves save reading, hashing and mod discovery to a lobby worker. Joiners wait 30 seconds for a silent host; mesh routing still bypasses it after 12 seconds. Shared lobby; release remains 0.7.1.3.

The dev 262353d7 integration merges housekeeping and correctness fixes for replay, vehicle/line identity, lobby transfers, and network input handling. Native bridge epoch handling and kill-switch readers are covered by Linux regressions; release remains 0.7.1.3.

The dev 528294b1 integration asks for a fresh host save when a late joiner would receive one over two minutes old, with fallback if no new save arrives. Host-loop stalls no longer count as peer silence. Shared lobby; release remains 0.7.1.2.

The dev 304a4e28 integration adds catch-up progress logging about every 20 seconds: remaining gap, closing rate, local and session rates, and an ETA when the gap is closing. Shared Lua; release remains 0.7.1.2.

The dev 86f806df integration keeps terrain streams running across later STARTs, avoiding replacement while a joiner reads the same sidecar. Shared Linux/Windows lobby; release 0.7.1.2.

The dev effa7243 integration prevents repeat save transfers while a joining player’s mods are packing, queued or being delivered. The shared lobby fix applies to native Linux and Windows; release remains 0.7.1.2.

Current release integration: 0.7.1.5, Windows dev 192ecd4d; see the integration and validation record. All peers, including dedicated servers, must update. Existing native Sandbox town-tool capture, minimap and cargo-filter limitations remain. Upstream performance measurements were not repeated locally; matching release numbers do not establish gameplay parity. Completed TCP transfers no longer stay in lobby memory through listener registrations; active transfers retain their handlers until they finish. Catching-up peers retain recently heard leader clocks when stamping commands and defer spare-line requests until catch-up completes. Dedicated servers pause while players join an otherwise empty server, and cap the voted speed at 1x while someone joins existing players. A joiner stops holding the session after about 20 minutes without a change in joining count. Below 1x, command delay follows session speed with a ramp margin; recovery from a slow session rises in steps, and excess delay falls faster. Native terrain sidecars are on by default from dev 71549cff in 0.7.1.2; terrain_sidecar=0 disables them. Live ownership and load-completion checks remain outstanding; material-index acceleration remains unported. Enabling sidecars does not establish new native performance results.

License: MIT

Website: silver2127.github.io/tpf2-multiplayer · Download the launcher (Windows) · Linux · Privacy policy

Join The Discord: https://discord.gg/7VhmtUstqQ ·

Multiplayer for Transport Fever 2 (Steam, Windows, build 35924). Several players build in one world at the same time: the roads, track, stations, depots, vehicles and lines one player makes appear for everyone, applied at the same moment of the simulation on every machine. Play one shared company together, or separate companies with their own money on the same map.

It is unofficial, reverse-engineered without the engine's source, and experimental. Sessions of up to four players have been run, on one PC and between PCs on different networks. Read docs/KNOWN_ISSUES.md before relying on it.

This branch also contains a native Linux build-35924 port, with a native dedicated server. Its current integration includes Windows release 0.7 plus dev 8c3c02a5: Linux installation · current integration and test evidence · dedicated server setup. The Windows MSI instructions below apply to the Windows version.

  • Settings must match Windows peers. Loaded-game lifetime and cross-platform validation remain outstanding; matching versions do not establish gameplay parity.
  • Canonical simulation ordering is on by default (TPF2MP_ORDER_CANON=0 disables it); see the dev ad3d66e4 integration.
  • Native terrain compression is on by default, and bridge lobby identity is fixed; the release version remains 0.7 (dev 0a35d0a8).
  • The native terrain pager has recency, automatic memory headroom and fault-rate logging; loaded-big-map performance validation remains outstanding (dev ea35eb8a).
  • The Windows autosave-sidecar fix is retained (dev 60d237c5); native terrain sidecars are available experimentally in dev 2b4fd093, then enabled by default in dev 71549cff. Live lifetime validation remains outstanding.

How it works

The game has no network code, so this adds lockstep multiplayer from outside. A forwarding alut.dll loads a few DLLs into the game at start-up: one captures each command a player issues and cancels it before it applies, one carries commands between the game and a separate lobby process, and one draws the Multiplayer panel on the title menu. A Lua game-script mod stamps every command with a future simulation step, sends it to everyone, and replays it through the game's scripting API on every machine at that step, including the player's own. Everyone starts from the same save, so the worlds stay identical; a detector compares them continuously. The lobby handles NAT traversal, encryption and sending the save. docs/ARCHITECTURE.md has the details.

Install

Download the launcher from the latest release: TpF2Multiplayer-Launcher-Windows-Setup.exe or, on Linux and Steam Deck, TpF2Multiplayer-Launcher-Linux.AppImage. Run it and press Update & play. It installs the mod, keeps it up to date and starts the game. Everyone in a session needs the same version.

The launcher downloads the install files from tpf2-multiplayer-packages (the release with the same tag); to install by hand, take TpF2Multiplayer.msi from there, close the game and run it. For versions using the two-launcher layout, the Latest page v<version> carries the two launchers; the mod repository also carries install files on <version> (without v). Launchers up to 1.2.0 must be updated before installing these versions.

The installer finds the game folder through Steam, keeps the game's alut.dll as alut_real.dll and puts the proxy in its place, adds the DLLs, the lobby (the netpunch\ folder) and the Transport Fever 2 Multiplayer mod, and switches the game to the Windows Segment Heap, which makes very large maps load far faster. Runtime files go to %LOCALAPPDATA%\tpf2mp\data\. It installs alongside TpF2 Big Maps in either order. Details: installer/README.md.

Linux and Steam Deck (the Windows game under Proton), by hand: download install_proton.sh from the packages release and run sh install_proton.sh (no Python needed; install_proton.py is the Python equivalent); it installs the same files into the Proton game. Details, including the lobby repair Wine needs: docs/proton/INSTALL.md. The native Linux game has its own build on the linux-native branch.

To uninstall, use Apps → TpF2 Multiplayer → Uninstall, or run the MSI again and choose Remove; the game's own alut.dll is put back. Steam's "Verify integrity of game files" also restores it, which removes the Multiplayer entry until you run the MSI's Repair.

Every release is built by GitHub Actions from the tagged source (.github/workflows/build-msi.yml); SHA256SUMS.txt in the matching packages release (also on the mod repository's <version> update-files release) lists the files it produced. The lobby is a Python program frozen with PyInstaller, and unsigned software of that kind is sometimes flagged by antivirus heuristics. The checksums and the build log are how to check that what you downloaded is what the source builds.

Play

  1. Title menu → Multiplayer → HOST GAME. The code is copied to your clipboard: send it to your friends, or tick PUBLIC to list the game. A password locks the code.
  2. Friends open Multiplayer, paste the code and press JOIN GAME, or click your game in PUBLIC GAMES.
  3. Press START GAME. Your newest save is sent to everyone; when it is ready, everyone opens LOAD GAME and picks mp_shared.

The host needs UDP port 29471 reachable from the internet (the lobby tries UPnP). If that is not possible, use a the dedicated server in the PUBLIC GAMES list, where nobody needs an open port. New games have the multiplayer mod enabled automatically; for an existing save, enable it once in the save's Mods panel. The full guide, including the in-game window, companies and troubleshooting, is docs/PLAYING.md.

Privacy

Nothing leaves your PC except the session itself. Your player name, chat, game commands, network address and the host's save go to the other players in the session, directly or through the dedicated server. The project's server provides the public games list, which lists your game only while PUBLIC is ticked, and carries a joining player's encrypted address note to the host so the two can connect. There is no telemetry, no usage statistics and no automatic bug or crash reporting: the in-game updater, the session count and the desync-report upload of earlier versions were removed in 0.6.1.11. When something goes wrong, the logs stay in %LOCALAPPDATA%\tpf2mp\logs and you send them yourself if you report a bug. The full text is the privacy policy.

Documentation

document covers
docs/PLAYING.md hosting, joining, relays, the in-game window, speed, companies, troubleshooting
docs/HOSTING_A_SERVER.md running a dedicated server: on a Windows PC, or on a Linux server or VPS
docs/ARCHITECTURE.md the components, a command's path, time and pacing, sessions, files
docs/REPLICATION.md what replicates and how, per action, and how divergence is detected
docs/NETWORKING.md lobby protocol, join codes, save transfer, dedicated relay, master server
docs/SECURITY.md the threat model: what is protected and what is not
docs/CONFIGURATION.md every setting
docs/DEVELOPMENT.md building, deploying, the multi-instance rig, logs, tests, releases
docs/KNOWN_ISSUES.md open bugs, replication gaps, plans that were not built
docs/TESTING.md the manual test plan: what to check before pushing, and before a release
docs/re/ the engine reference for build 35924 that the hooks rest on
installer/README.md the MSI: what it changes, upgrades, building it
docs/proton/INSTALL.md Linux and Steam Deck: installing into the Windows game under Proton
netpunch/README.md the lobby's source

Repository layout

path contents
native/ the DLLs (build.bat <target>); src/plugin/ is the plugin host and its ABI
native/linux/, tools/linux/ native Linux libraries, tests, Steam Runtime builds and .run/tarball packaging
bigmap/ Big Maps, shipped in the same Windows MSI and native Linux package; Linux feature limits: port record
mod/mp_lockstep_1/ the game-script mod
netpunch/ the lobby (the dedicated server runs it too) and the master server (Python)
installer/ the WiX package
tools/ deploy, rig, soak-test and check scripts; tools/ghidra/ and tools/re/ for reverse engineering
docs/ the documentation

Contributing and credits

Issues and pull requests are welcome, especially reproductions with logs from every player (what to collect). Please keep the project's conventions (docs/DEVELOPMENT.md): destructive replication channels are validated on the rig before they merge, and a field identification counts only when a differential capture confirms it.

  • Companies mode is inspired by, and reuses engine mechanisms proven in, Swiss's Multiplayer Companies Workshop mod (item 3710243057): runtime addPlayer, setPlayer, bookJournalEntry to a specific player, setBulldozeable.
  • TpF2 Big Maps grew out of this project.
  • Licensed under the MIT License. Third-party material is listed in THIRD_PARTY_NOTICES.md.

Disclaimer. This project is not affiliated with or endorsed by Urban Games. It replaces a file inside your Transport Fever 2 installation (alut.dll, kept as alut_real.dll) and patches game code in memory while the game runs. Use it at your own risk and keep backups of your saves. Multiplayer saves are ordinary .sav files; the mod adds its company assignment to the save's script state.

The dev a42dab6c integration keeps hot-join save requests pending while the host world loads, then takes the save when the game UI is ready. Version remains 0.7.

The dev 7cacbaaf integration removes full mapping-table scans from family guards on Linux 6.11+ and retains a faster snapshot fallback for older kernels. Version remains 0.7.

The dev 2c05099a integration adds the remaining supplied Windows RNG seed/distribution/engine compatibility modules, enabled by default. TPF2MP_SIM_SEED=0 and TPF2MP_ENGINE_PARITY=0 disable them for diagnosis. Static ELF checks and 65 native tests pass; the lab launch was blocked before the game started, so cross-platform gameplay validation remains outstanding.

The dev 582a380 integration makes native dedicated restarts prefer a newer autosave of the hosted mp_shared world over the configured save. Version remains 0.7.

The dev e63ceefc integration retains upstream's dedicated-server performance report; runtime code is unchanged.

The dev cf5f8a0e integration makes load-time company switches wait for entity queries to answer and reuses live saved player entities. Version remains 0.7; loaded-world validation is still outstanding.

The dev b4b629a2 integration prevents per-frame script state sync from rewinding the town-growth clock. Shared Lua and native tests pass; live growth validation remains outstanding. Version remains 0.7.

The dev 522a303b integration reports the slowest hash's lane breakdown and the cost of post-hash broadcast, drift and comparison work. Shared Lua regression tests pass; no live performance measurement is claimed. Version remains 0.7.

The dev bd69b864 integration adds native UCRT math parity, octree depth 12/13, target-record indexing and the 0.7.0.2 TCP/resync UI. Placement-distance and attempt-budget parity remain unported; the lab launch was blocked before game startup.

The dev aaae03f8 integration retains the Windows GOG octree fallback and batch deployment fixes. Native Steam depths 11/12/13 keep their existing verified patches and ceiling checks.

The dev 7469fce7 integration incorporates Big Maps Windows GOG documentation; native runtime behavior is unchanged.

The dev 63a3b8df integration records upstream depth-13 gameplay and native dedicated multiplayer results. Native defaults and placement limits remain unchanged; no local live run was repeated.

The dev 4616c16a integration adds upstream's Big Maps performance catalog with native feature/default scope. Runtime behavior is unchanged; the listed gains are upstream measurements.

The dev c9ac009d integration retains the standalone Big Maps sync and unified Windows MSI documentation while preserving native Linux guidance. Runtime behavior is unchanged.

The dev 0610033 integration fixes native family ordering to recognize all 28 node lists and adds the opt-in town trace. Static and fixture checks pass; live validation was blocked at lab startup.

The dev e43d01dd integration carries upstream's per-tick EDEMO node index and the stop-replay registration that stops a catch-up scan re-shipping replayed signals and stops. Both are shared Lua; the native Linux slice already emits the EDEMO and STOPX/STOPXDEL records they rely on, so no native change was needed. No local live run was possible.

The dev d8a3ce57 integration is upstream's release 0.7.0.3 and carries no code. It stamps the native release 0.7.0.3 (installer/VERSION, which tools/linux/build_release.sh reads for the .run installer, and the shared LOBBY_VERSION handshake), advances the Lua verifier and the release provenance line to this target, and stages the two missing integration records. Each Linux claim the notes make -- all 28 sorted node lists, the extra RNG sites, Windows float math, TPF2MP_TOWN_TRACE=1, octree depths 12/13, terrain compression on by default -- was rechecked against the unmodified game ELF and passes. No local live run was possible.

The dev 122a0ce9 integration adds the native resync view’s in-game x. Closing a running resync hides its view while recovery continues; Manage Lobby reopens it. Errors and unanswered Ready requests bring it back automatically. Saving/loading suppresses the x.

The dev 45183ac6 integration adds native OPEN LOGS version/ELF identities, state/config snapshots and masked lobby streams, and retains five archives per kind. Version remains 0.7.0.3.

The dev 96795a8b integration expands the native public browser to eight games per page and up to 32 games, and completes archive runtime/boot metadata and standalone collector credential masking.

The dev 01044521 integration expands the native public browser to twelve games per page and up to 48 games, and removes the legacy panel renderer. Closing a running resync leaves the game visible.

The release 0.7.0.4 integration advances the native package and shared lobby handshake to 0.7.0.4. All peers, including dedicated servers, must update. This release stamps the previously integrated hot-join, menu and log fixes; existing native feature and live-validation limits remain.

The dev c74a7b4e integration fixes TCP save routing after joining through the master's UDP relay: the joiner tries the host's advertised addresses, or continues on UDP when none are available. The shared lobby implements this on Linux and Windows; version remains 0.7.0.4.

The dev f6e47ef9 integration adds the master's TCP pipe fallback for slow save/mod transfers, shared by Linux and Windows. Native shutdown cleanup is preserved; version remains 0.7.0.4.

The release 0.7.0.5 integration advances the native package and shared lobby handshake to 0.7.0.5, stamping the previously integrated relay address fix and TCP pipe fallback. All peers, including dedicated servers, must update. Existing native feature and live-validation limits remain unchanged.

The dev ba1fa26e integration refuses native hosting and joining unless tpf2_bridge_mp.so is loaded. The menu shows an amber explanation and directs players to the loader log.

The dev 4e1e486c integration moves install assets to the packages repository while the mod release carries the launchers. Native builds now emit the publisher's -native assets and checksums; see manual native installation. Version remains 0.7.0.5.

The dev e12ed657 integration adds separate launcher-v<version> releases without moving the Latest mod release. The shared publisher supports Linux AppImages; native version remains 0.7.0.5.

The dev 2f65bae3 integration adds compressed terrain edits with checksum validation to native capture and replay. Every peer needs this build; the unchanged 0.7.0.5 version handshake does not detect older terrain readers. Uncompressed version-1 edits remain readable.

The dev 616191b1 integration makes native OPEN LOGS include the newest startup archive’s game log and crash_* files as previous_run_*, so a restart does not hide the crashed run’s dumps. Copies remain subject to the archive budget. Version remains 0.7.0.5.

The dev 363c38cc integration retains the Windows terrain-sidecar concurrent-release fix. Native sidecar capture/serving remains unported; native pager and alignment batching behavior is unchanged.

The dev 8978635d integration keeps launchers on the Latest <version> page and install files on v<version> and the packages repository. Native release version remains 0.7.0.5.

The dev e2957841 integration adds page v<version> to migrate an already published release to this layout, including 0.7.0.5, while preserving its install-file assets.

The dev 9abb2af1 integration adds annotated launcher-page tags and explicit --replace-page, and removes an earlier migration note when recreating a page. Native version remains 0.7.0.5.

The dev 8e0a0c00 integration supersedes those earlier release layouts: launchers now stay on v<version> (Latest), with update files on <version> and the packages repository's v<version>. Launcher-only releases no longer recreate a mod release. Version remains 0.7.0.5.

The dev ceee11b1 integration wraps native lobby chat to its measured width and retains the newest messages that fit. Shared in-game chat now wraps at 52 bytes. Offline rendering tests pass; the lab launch was blocked before game startup.

The dev 0047c19f integration adds shared cargo-filter replay records. Native filter capture remains unported: Linux line edits can still lose filters. The lab could not start for the required property/ABI probe; this integration is partial.

The dev 06188ea5 integration keeps command stamps ahead of the fastest peer while a joiner catches up, with a 600-unit sanity cutoff. Shared Lua tests cover the change; no live multiplayer result is claimed. Version remains 0.7.0.5.

The dev f9d34252 integration retains Windows’ corrected packed cargo-flag reader and tests shared numeric flag transport. Native Linux cargo capture remains unported: static layout evidence was rechecked, but the lab failed before startup. Linux line edits can still lose stop filters. Version remains 0.7.0.5.

The dev bef70213 integration makes native OPEN LOGS include the newest startup archive’s mod *.log files as previous_run_*, so the crashed run’s host, terrain and bridge diagnostics accompany its dumps. Version remains 0.7.0.5.

The dev ad36a976 integration replaces Lua cargo-filter setters with a native replay request. The Windows writer is retained; the Linux writer remains unported after static RE and a lab startup failure. Native cargo capture and replay can still lose stop filters. This supersedes the earlier 4ccdde5d mock-based replay claim. Version remains 0.7.0.5.

The release 0.7.0.6 integration advances the native package and shared lobby handshake to 0.7.0.6. All peers, including dedicated servers, must update. This commit only stamps earlier changes: native cargo filter capture/replay and terrain-sidecar capture/serving remain unported. The upstream cargo-filter and repeated-load validation does not establish native Linux support; existing gameplay-validation limits still apply.

The dev 4617fb6f integration advances native Linux to 0.7.0.7 / FPT6, retains commands owed to quiet members, adds adaptive retransmission and pacing fixes, and displays the version in the native panel. All peers must update. Direct installers now accompany the launchers on the version page. Existing native feature limits remain.

The dev 6584fd03 integration moves Fantasia terrain-buffer reuse into the native Big Maps plugin, enabled by generator_memory=1. No additional mod is needed. Offline checks cover all three climates; native rendered output and peak memory remain unmeasured. Version remains 0.7.0.7.

The dev 46ca48ef integration adds Fantasia generator size/layer/buffer diagnostics and optimizer refusal reasons to both native Linux and Windows. Version remains 0.7.0.7.

The dev 15ba4df5 integration fixes Fantasia buffer reuse to measure generator dimensions in heightmap samples. 128 x 128 tiles remain unchanged; larger sample areas use the optimizer. Native build and symbolic pipeline tests pass; live memory savings remain unmeasured. Version remains 0.7.0.7.

The dev 5d73f324 integration adds Fantasia generator memory budgeting on native Linux, allowing extra buffers for parallelism. Release remains 0.7.0.7; native generation timing and peak memory validation remain outstanding.

The dev cc0981bb integration adds the dedicated-server archive and hosting guide, spreads shared construction checks across updates, and ports the resync hold fix to Linux: no ten-second deadline, game-local SDL gesture diagnostics, and focus-loss cleanup. Version remains 0.7.0.7. Offline regression tests cover these changes; no new live gameplay result is claimed.

The dev 3cc80874 integration records upstream merging the completed Linux ports through cc0981bb back into Windows history. Its source tree is identical to the previous Linux integration; runtime behavior and version 0.7.0.7 are unchanged. Lua now matches upstream without exceptions.

The dev d9196011 integration preserves the release tag when publishing and checks the returned tag afterward, failing loudly on a mismatch. This shared tooling change leaves native runtime behavior and version 0.7.0.7 unchanged. Publication checks are tested offline.

The dev 24b8f636 integration guards shared Fences compatibility loading so a missing or failing module disables multiplayer without aborting game loading. Offline Lua and native tests pass; no live gameplay result is claimed. Version remains 0.7.0.7.

The dev ea15a156 integration batches native guarded page reads and avoids scanning whole-world vectors for a single road edge. Name slot pairs are copied in one guarded read. Version remains 0.7.0.7; local validation uses memory fixtures and ELF checks, with no in-game timing claim.

The dev 491716c3 integration retains upstream's dedicated-server measurements for the road-entry guarded-read fix. Runtime behavior and version 0.7.0.7 are unchanged; no local performance measurement is claimed.

The dev 84058da7 integration adds native dedicated descriptor recycling and corrects its verified Vulkan dispatcher search boundary. Live activation remains unverified because lab startup failed.

The dev 52a1630a integration validates native dedicated descriptor recycling's reset slot at dispatcher +0xb28 and names failed lookups while retaining the Linux byte guard. Lab startup was blocked before game execution; runtime activation remains unvalidated.

The dev 4d03caf7 integration retains upstream's Sandbox tools and TownInfo research. This documentation-only change adds no town replication; its Windows measurements do not establish native or cross-platform town-creation determinism. Version remains 0.7.0.7.

The dev 02edb897 integration retains upstream's dedicated descriptor-recycler measurements. Runtime behavior and version 0.7.0.7 are unchanged; no local performance measurement is claimed.

The dev f0212c87 integration adds the shared multiplayer toolbar, pipe-idle and leader-loss fixes, and imports native road-read batching, threaded save compression, terrain page initialization and Steam poll throttling. Native town-tool capture and minimap extensions remain unported after static RE and blocked lab startup. Release remains 0.7.0.7.

The dev ac3b4be3 integration records upstream merging the completed Linux ports through 412aeb8e back into Windows history. Its source tree matches the preceding Linux integration; runtime behavior and release 0.7.1.1 are unchanged.

The dev bde31323 integration brings the company registry rewrite, rebuilt COMPANIES tab and native free-color tints. Release remains 0.7.1.1. Native and shared regression tests pass; the lab launch was blocked before game startup, so live gameplay validation remains outstanding.

The dev 0871bfa6 integration retains Windows' complete-sidecar alignment bypass. Native Linux sidecar serving and this bypass remain unported; Linux continues its existing alignment path. Static publication metadata was verified, but the lab failed before startup, preventing live lifetime proof.

The dev c8dd5157 integration adds Linux offline coverage for threaded terrain-sidecar encoding and POSIX file handling. Native game-side capture/serving remains unported; terrain_sidecar_threads has no native runtime effect. No native save-time improvement is claimed.

The dev fdfb79e8 integration retains Windows range tracking for multiple terrain versions. Native sidecar serving and alignment bypass remain unported after fresh static analysis and a lab startup failure; native alignment behavior is unchanged.

The dev 5b817efb integration keeps a terrain sidecar while another served terrain version awaits its pass. Each version skips only once; a pass that runs releases the file. Native sidecars remain experimental and default off. Live validation was blocked before game startup.

The dev 9602a389 integration adds experimental native terrain streaming during joiner loads and guarded save terrain selection. Sidecars remain disabled by default pending live lifetime and ownership validation; the lab launch failed before game startup.

The dev 40e12f76 integration adds terrain_sidecar_read_local=0 for stream-only testing when both peers can see the host's save folder. The default is 1; native sidecars remain experimental and require terrain_sidecar=1. With local reads and terrain_stream both off, the normal terrain computation runs. This switch does not disable sidecar writes.

The dev b6d73041 integration retains Windows’ 4 GiB maximum automatic free-commit threshold and commit_tight_mb override. Native terrain paging continues to use MemAvailable; this Windows setting has no native effect. Release remains 0.7.1.1.

The dev 5fd49a24 integration gives native terrain-sidecar lookups a cursor per thread, reset for each load and grid. Sidecars remain experimental and default off; no live speedup is claimed.

The dev 26564158 integration searches outward from each native terrain-sidecar worker's last hit and reports probes per lookup at load completion. Sidecars remain experimental and default off; fixture probe counts do not establish a live load-time improvement.

The dev 7e3d3bfa integration retains the Windows material-index optimization and DLL-map profiler support. Native material-index acceleration remains unported: the Linux selection loop is inlined, and the lab failed before startup, preventing buffer-lifetime proof. Release remains 0.7.1.1.

The dev 8066c58f integration retains the default-off Windows material-index measurement probe. Native material_index_probe remains unported after static investigation and a lab startup failure; Linux produces no material_probe.txt. Windows measurements do not establish native tile hashes or compression sizes. Release remains 0.7.1.1.

The dev 65302e5d integration adds native parallel sidecar decoding at the alignment pass and retains the file for both terrain versions. Sidecars remain experimental and off by default; fixture tests pass, but the lab could not start for live validation.

The dev a2e47f2c integration retains Windows profiler follow mode and ETW stack/wait readers as developer tools. Native runtime behavior and release 0.7.1.1 are unchanged.

The dev 7bace802 integration retains Windows load-speed findings, including the rejected material-index chunk-size experiment. These are upstream measurements; native runtime behavior and release 0.7.1.1 are unchanged.

The dev 0eb9eea2 integration lowers Windows’ automatic free-commit threshold to 2..3 GiB (unknown RAM: 3 GiB). Native terrain paging retains its existing MemAvailable policy; commit_tight_mb has no native effect. Release remains 0.7.1.1.

The dev a896a1cb integration fixes the native plugin host’s rejection of 5–13-byte hooks, including the terrain sidecar’s 13-byte AddTile hook. Release remains 0.7.1.2; local lab startup was blocked before the game ran.

About

Transport Fever 2 multiplayer mod: several players build one shared world at the same time. Free, open source, Windows (Steam) and Proton.

Topics

Resources

Security policy

Stars

17 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages