JOexeFIX v3

Patched server and client executables for Joint Operations: Typhoon Rising (v1.7.5.7)

What is it?

Drop-in replacements for the stock jointops.exe. Three server builds (32Hz, 64Hz and 125Hz packet rates) and one client build for players, in two folders: 512MB for everyone and 1GB for anyone who wants more headroom. Each one is the retail 1.7.5.7 executable with a handful of small, verified binary fixes applied โ€” no DLLs, no injectors, no launchers. Rename, drop in, start.

v3 (9 September 2026) corrects the memory patch. The "2 GB memory cap" carried since v1 turned out not to be memory at all; the game's real limit is one number, the size of the mission memory arena, which retail sets to 192 MB. v3 restores the four mistaken bytes and sets the real arena to 512 MB (the 512MB folder) or 1 GB (the 1GB folder). The v3 client also drops a camera-clamp side effect the bogus patch had. See the arena section.

v2 (September 2026) added three server fixes and a client fix on top of the July v1 pack. The big ones: an empty-server crash that has been killing dedicated servers every few days for twenty years, a 125 FPS lock that takes the 125Hz server from a pinned CPU core to idle, spawn protection you can set in game.cfg, and the vehicle weapon bug fixed on the client.

Open recipe: every patch in this pack is documented with the exact bytes and a Python script that reproduces it from a retail exe, at github.com/BadgerLove/jo-server-patches. You never have to trust a binary from a stranger โ€” build it yourself and compare the hashes below.

Download

๐Ÿ”ง JOexeFIX-v3.zip โ€” 9 September 2026

Two folders, four files each. 512MB/: jointops_32hz_512mb_v3.exe, jointops_64hz_nwu_512mb_v3.exe, jointops_125hz_nwu_512mb_v3.exe, jointops_LAA_vwfix_512mb_v3.exe. 1GB/: the same four with _1gb_. Plus README.txt (the same notes as this page) and SHA256SUMS.txt. Pick one folder; do not mix.

โฌ‡ Download JOexeFIX-v3.zip ๐Ÿ™ Patch scripts on GitHub
Windows โ€ข ~16.1 MB (zip) โ€ข โ€” downloads

What's in each folder โ€” at a glance

Fix32Hz server64Hz server125Hz serverClient
Mission arena 512 MB or 1 GB (mis-patched in v1/v2, corrected)v3v3v3v3
Admin-port crash fix (empty-server SYSDUMP)v2v2v2โ€”
Configurable spawn protection (e_spawn_protection)v2v2v2โ€”
125 FPS lock, CPU drops to idle (lock_framerate = 7)โ€”โ€”v2โ€”
Vehicle weapon restore fixโ€”โ€”โ€”v2
Large Address Awarev1v1v1v2
Bigbuf 256 KB network buffersv1v1v1โ€”
NWU hole-skip fixโ€”v1v1 (tuned)โ€”
Packets/sec to each player (each direction)~16~31 (retail)~62โ€”

The files

Names below are the 512MB/ ones; the 1GB/ folder has _1gb_ in place of _512mb_ and is otherwise identical.

jointops_32hz_512mb_v3.exe SERVER

Admin-port crash fix, configurable spawn protection, mission arena 512 MB (or 1 GB).

From v1: LAA, bigbuf, ~16 packets a second each way per player (hold-off 4). No NWU fix, because the reorder stall it guards against does not trigger at this rate. Frame loop unchanged from v1.

Best for: slow hosts and high-ping player bases. Fewer packets in flight means fewer drops and kicks for players on bad lines.

jointops_64hz_nwu_512mb_v3.exe SERVER

Admin-port crash fix, configurable spawn protection, mission arena 512 MB (or 1 GB).

From v1: LAA, bigbuf, NWU hole-skip, ~31 packets a second each way per player (hold-off 2, the retail cadence). Frame loop unchanged from v1.

Best for: the community standard. A VPS or modest hardware.

jointops_125hz_nwu_512mb_v3.exe SERVER

Admin-port crash fix, configurable spawn protection, 125 FPS lock, mission arena 512 MB (or 1 GB).

From v1: LAA, bigbuf, NWU tuned for the fast rate, ~62 packets a second each way per player (hold-off 1). This is the code the FMJ dedicated server runs; FMJ sets its arena through onHook at runtime, so its exe hash is the v2 one.

The FPS lock replaces v1's "Sleep removed, 285 FPS, 100% of one core". The main loop now runs a steady ~125 FPS and sleeps between frames, so CPU use drops from a pinned core to near idle. Requires lock_framerate = 7 in game.cfg โ€” see below.

Best for: dedicated hardware, or honestly any box now that it idles.

jointops_LAA_vwfix_512mb_v3.exe CLIENT

A client build for players. Not for running a server.

Rename to jointops.exe in your game folder (keep a copy of the original). Grass and visual mods are not in this file. If you only want the vehicle fix and LAA without the arena change, the JointOps-LAA download is that.

Config lines you need

Both keys are written into game.cfg by the server itself, so after the first start with a v3 exe you will find them there. Edit, save, restart the server. Values are read at startup only.

1. Spawn protection โ€” all three servers

e_spawn_protection = 5

2. Frame rate lock โ€” 125Hz server ONLY

lock_framerate = 7

lock_framerate is now the frame target in milliseconds, not an on/off switch. 7 gives ~125 FPS (each Sleep overshoots by about a millisecond, which is why it is 7 and not 8).

lock_framerateResult
0Throttle off: unlimited FPS, one core at 100% (the old v1 behaviour)
7~125 FPS, CPU idle. Use this.
8~112 FPS
16Retail 62.5 FPS

โš ๏ธ Old configs: lock_framerate = 1 used to mean "on". On the v3 125Hz exe it means a 1 ms target, which is nearly unthrottled again. Set it to 7 explicitly. This line only matters on the 125Hz build; the 32Hz and 64Hz builds ignore it as before.

Installation

  1. Pick the build for your hardware and player base (or the client build if you are a player).
  2. Back up your current jointops.exe.
  3. Rename the chosen file to jointops.exe and drop it into the game folder, replacing the original.
  4. Start the server once, then stop it. Open game.cfg.
  5. Set e_spawn_protection = 5 (or the seconds you want). On the 125Hz build also set lock_framerate = 7.
  6. Start the server. Done.

Upgrading from v1 or v2: same steps, nothing to remove. Running onHook (the binkw32.dll proxy)? Keep the v2 exes: onHook finds the arena by scanning for the retail 192 MB value, refuses to start if it is not there, and sets the arena size itself.

The fixes, explained

Admin-port crash fix (all servers) โ€” new in v2

If your empty server crashed with a SYSDUMP every one to four days, this was it. The remote-admin console on TCP port 4000 (used by WolfRAT, server monitors, any admin tool) keeps a table of connected clients. When that table grows, the server allocates the new one correctly but copies only one sixteenth of the old contents, leaving garbage pointers that later crash in either the command logger or the disconnect free. A populated server rarely lived long enough between map cycles to hit it; an empty one being polled by a monitor for days always did. Both crash signatures seen in years of dumps come from this one bug.

Four bytes fixed. The FMJ server has been on it since 7 September 2026 with its monitor and WolfRAT connected.

For tool authors: the server only reaps an admin slot when the socket errors, not on a polite close. Tools that poll port 4000 should close abortively (SO_LINGER 0). WolfRAT 2.5+ and JO Monitor 1.3+ already do, and with both sides fixed the table never grows into the buggy code at all โ€” which also protects a server that cannot be patched. Details in patch 01.

125 FPS lock (125Hz server) โ€” new in v2

Retail caps the main loop at 62.5 FPS. The v1 "unlimited FPS" hack removed the throttle entirely, so the server busy-looped at ~285 FPS and burned a whole core. The v1 notes said Sleep(1) cost 15 ms; that was wrong. There were three separate obstacles: a 16 ms frame target hardcoded as a shift instruction, a clock (GetTickCount) that only advances in 15.6 ms steps so it could never see 8 ms pass, and the removed Sleep. v2 fixes all three: the loop now reads a 1 ms clock, takes its target in milliseconds from lock_framerate, and sleeps between frames. Measured 126-127 FPS on the FMJ server with the core near idle. Details in patch 11.

Configurable spawn protection (all servers) โ€” new in v2

The post-respawn "CEASE FIRE" window was a fixed 620 ticks (~10 s) written at six places in the exe. v2 routes all six through a tiny routine that reads a config variable instead, borrowing the unused enable_keyboardtips slot under the name e_spawn_protection. Absent or zero means retail, so it is a safe drop-in. Details in patch 12.

Vehicle weapon restore fix (client) โ€” new in v2

When you leave a vehicle seat the game re-mounts a cached weapon. That cache is written on spawn and by the kit screen, but not by the number-key or mouse-wheel weapon switch, so it still holds your spawn loadout weapon โ€” "the one you last died with". The fix makes the dismount use the live weapon slot instead. Four bytes, client-side, confirmed in play on every seat-exit case. Details in patch 02.

Mission memory arena, 512 MB or 1 GB (all files) โ€” corrected in v3

Joint Operations keeps all mission data in one fixed-size arena reserved at start-up. Its size is a single number the exe sets to 192 MB; the SYSDUMP line Memory Usage Allocated: prints it, and "Mission is too large / Remove some object types and re-export" fires when the free part drops under 12 MB. That one number is the cap.

What v1 and v2 got wrong. The "2 GB memory cap" changed four bytes that each held the value 0x20000000, on the assumption they were a 512 MB limit. With the exe fully decompiled they turn out to be a D3DX shader flag, an event-trigger constant, a ยฑ45ยฐ camera angle clamp and a minimap colour. Harmless on a server, an unintended ยฑ180ยฐ clamp on the client, and no effect on memory either way. The real arena stayed at 192 MB in every v1/v2 exe. (The FMJ server has been at 512 MB throughout because onHook rewrites the real number at runtime.)

v3 restores those four bytes to retail and sets the real arena: 512 MB in the 512MB folder, 1 GB in the 1GB folder. A busy 125Hz server uses about 210 MB, so 512 MB is plenty for everyone; 1 GB is there for big custom missions or anyone who wants the headroom (64-bit Windows; LAA is already set on every file). Why not 2 GB: a 32-bit process cannot reserve a contiguous 2 GB block, LAA or not. The measured ceiling is about 1.9 GB, and that lands the arena above the 2 GB line where the game's signed arithmetic breaks. There is no 2 GB build any more. 1 GB is the ceiling we ship; the full reasoning is in patch 04 on GitHub. Details in patch 04.

Bigbuf 256 KB network buffers (servers) โ€” from v1

Expands the stock 64 KB send/receive buffers to 256 KB. Reduces packet loss and "NET INCOMING/OUTGOING PACKET ERROR" on busy servers.

NWU hole-skip fix (64Hz and 125Hz) โ€” from v1

Spaghetti's fix for the server freezing when NovaWorld UDP packets arrive out of order. The 125Hz build uses tighter thresholds (reorder โ‰ฅ 6, lag > 32) so it kicks in before the server stalls on dozens of newer packets.

Packet send rate (servers) โ€” from v1, correctly explained in v2

The game logic steps every 16 ms in every build; the "Hz" in the file names is the network send cadence, set by one byte. Per direction, per player: ~16 (32Hz build), ~31 (64Hz, the retail value) or ~62 (125Hz) packets a second. Earlier notes called this byte a "tick divisor" and quoted rates with both directions added together; both were wrong and are corrected in patch 07.

Full changelog

v3 โ€” 9 September 2026

v2 โ€” 7 September 2026

v1 โ€” 15 July 2026

Test status

Verify your download

SHA-256 of each file in the zip. Rebuild them yourself from the public scripts and you get the same hashes.

d1eec1078ddb740911f82a3e78e6d5257b2353bc1a11291a024647bf4be2b69f  512MB/jointops_32hz_512mb_v3.exe
77d8b29d4e749ac1a868afa81911d043b415fd7594b17f86e77e2529f6dc200d  1GB/jointops_32hz_1gb_v3.exe
5e057cee2b2120f42fe52d536256659a7a793305f3e9b5749415591c56fd9158  512MB/jointops_64hz_nwu_512mb_v3.exe
df98a869bcc795fd2e71334424dec37aa3924fb9c9eb763fefcb60ddab8faabc  1GB/jointops_64hz_nwu_1gb_v3.exe
4ac96f58b520ec21c7c75d95a2f7c6dd3acf5859aa60afc0529a698e1e3ee8b6  512MB/jointops_125hz_nwu_512mb_v3.exe
6bbe83f1c383d9ed20920fd5a836a9cfea2717fa3660a2b18f7ff47d395f8f49  1GB/jointops_125hz_nwu_1gb_v3.exe
40a56baf454033dcc4260ce190d8cc51be1814ad264fb88e8d46f9294d44a27f  512MB/jointops_LAA_vwfix_512mb_v3.exe
09c8d4d34fda75659b3f4539e9843eac4eb545b7d452bcb08f77a2898236aadd  1GB/jointops_LAA_vwfix_1gb_v3.exe

Credits

Found an issue? If a v2 server SYSDUMPs, keep the dump โ€” the EIP and the "code bytes at EIP" lines are what we need. Report it to BadgerLove on the FMJ Squad Discord or open an issue on GitHub.