# Joint Operations — Patched Executables v3 (September 2026)

Drop-in replacements for the stock v1.7.5.7 `jointops.exe`. Three server builds and one client build,
in two flavours: a **512MB** folder for normal use and a **1GB** folder for anyone who wants more headroom.
Everything from v1 and v2 is still in here; v3 corrects the memory patch (see below).

**Every patch in this pack is documented, with a script that reproduces it byte for byte from a retail exe:**
https://github.com/BadgerLove/jo-server-patches

---

## What's new in v3 — the memory patch, done properly

The "2 GB memory cap" carried since v1 was wrong, and this pack is the correction. The four bytes it changed
were not memory at all: a shader flag, an event-trigger constant, a camera angle clamp and a minimap colour.
The game's real limit is one number: the size of the **mission memory arena**, which retail sets to **192 MB**.
That is what the SYSDUMP `Memory Usage  Allocated:` line reports, and what "Mission is too large" checks.

v3 puts the four bogus bytes back to retail and sets the real arena instead:

| Folder | Arena | Who it is for |
|---|---|---|
| `512MB/` | 512 MB (2.7x retail) | **Everyone.** The FMJ server has run at 512 MB since 2026 and a busy map uses about 210 MB of it. |
| `1GB/` | 1 GB (5.3x retail) | Anyone who wants the headroom, big custom missions, or just likes big numbers. Needs 64-bit Windows (LAA is already set). |

Both folders contain the same four files otherwise. Pick one folder; do not mix.

**Why not 2 GB?** A 32-bit process cannot reserve a contiguous 2 GB block, Large Address Aware or not
(the ceiling on 64-bit Windows measures at about 1.9 GB, and that lands the arena above the 2 GB line where the
game's signed arithmetic breaks). 1 GB is the ceiling we ship, and it is already five times what a full server uses.
There is no 2 GB build any more; the reasons are written up in patch 04 on the GitHub repo.

**Client note:** the v2 client carried an unintended side effect of the bogus patch (a camera clamp widened
from ±45° to ±180°). The v3 client is built without it.

**Running onHook (`binkw32.dll` proxy)?** Keep using the v2 exes. onHook locates the arena by scanning for the
retail 192 MB value and refuses to start if it is not there; it sets the arena size itself.

---

## What's in each folder — at a glance

| Fix | 32Hz server | 64Hz server | 125Hz server | Client |
|---|---|---|---|---|
| Mission arena 512 MB or 1 GB (was mis-patched in v1/v2) | v3 | v3 | v3 | v3 |
| Large Address Aware | v1 | v1 | v1 | v2 |
| Admin-port crash fix (empty-server SYSDUMP) | v2 | v2 | v2 | — |
| Configurable spawn protection (`e_spawn_protection`) | v2 | v2 | v2 | — |
| 125 FPS lock, CPU drops to idle (`lock_framerate = 7`) | — | — | v2 | — |
| Vehicle weapon restore fix (20-year-old bug) | — | — | — | v2 |
| Bigbuf 256KB network buffers | v1 | v1 | v1 | — |
| NWU hole-skip fix | — | v1 | v1 (tuned) | — |

Two of the server fixes need one line each in `game.cfg`. Read **"Config lines you need"** below — it is the only setup there is.

---

## The files (names below are the `512MB/` ones; the `1GB/` folder has `_1gb_` in place of `_512mb_`)

### `jointops_32hz_512mb_v3.exe` — 32Hz server
Admin-port crash fix, configurable spawn protection, LAA, bigbuf, ~16 packets/sec each way per player (hold-off 4).
No NWU fix (not needed at this rate). Best for: slow hosts and high-ping player bases.

### `jointops_64hz_nwu_512mb_v3.exe` — 64Hz server
Admin-port crash fix, configurable spawn protection, LAA, bigbuf, NWU hole-skip, ~31 packets/sec each way per player
(hold-off 2, the retail cadence). Best for: the community standard. VPS or modest hardware.

### `jointops_125hz_nwu_512mb_v3.exe` — 125Hz server
Admin-port crash fix, configurable spawn protection, **125 FPS lock**, LAA, bigbuf, NWU tuned for the fast rate,
~62 packets/sec 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 loop 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).

### `jointops_LAA_vwfix_512mb_v3.exe` — CLIENT (players)
Not for running a server.
- **Vehicle weapon restore fix.** Since 2004: get into a vehicle seat, get out, and you are holding the weapon you last
  *died* with instead of the one you had. Fixed at the dismount, four bytes. Works on any server, patched or not.
- **Mission arena 512 MB (or 1 GB) + LAA.** Retail is 192 MB. Fewer "Mission is too large" refusals on big custom maps,
  and LAA lets the 32-bit process use more than 2 GB overall.
Rename to `jointops.exe` in your game folder (keep a copy of the original). Grass/visual mods are not in this file.

---
## 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
```

Seconds of post-respawn invulnerability ("CEASE FIRE"). Retail is a fixed ~10 s baked into the exe; now it is a config line.

- The server adds the line automatically on first start as `e_spawn_protection = 0`. `0` (or no line) = retail ~10 s, so nothing changes until you set it.
- `5` gives 5 seconds. Firing still ends protection early, as always.
- **The name must be exactly `e_spawn_protection`** including the leading `e_`. The config parser only looks at keys under their first letter, and this key lives under `e` (it reuses the slot of the client-only `enable_keyboardtips`). If the server writes it back as `= 0` after you set it, the key name was wrong.
- If you had an `enable_keyboardtips` line, it is now ignored. It did nothing on a dedicated server anyway.

### 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 ~1 ms, which is why it is 7 and not 8).

| `lock_framerate` | Result |
|---|---|
| `0` | throttle off: unlimited FPS, one core at 100% (the old v1 behaviour) |
| `7` | **~125 FPS, CPU idle. Use this.** |
| `8` | ~112 FPS |
| `16` | retail 62.5 FPS |

**Warning for anyone with an old config:** `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.

---

## Admin-port crash fix (all servers) — what it is

If your **empty** server crashed with a SYSDUMP every one to four days, this was it. The remote-admin console on TCP 4000 (used by WolfRAT, server monitors, any admin tool) keeps a table of connected clients. When the table grew, the server allocated it correctly but copied only one sixteenth of the old contents, leaving garbage pointers that later crashed 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.

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

Companion note 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; details in patch 01 of the repo.

---

## How to use

1. Pick the server 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.
4. Start the server once. 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.

---

## Test status (honest version)

- LAA, bigbuf, NWU and the packet-rate builds: running on community servers since July 2026.
- 512 MB arena: the FMJ server has run at exactly this value (set by onHook) since 2026, players on, SYSDUMP-verified.
- 1 GB arena: started and ran the FMJ server on 9 September 2026 (via onHook, 1.2 GB process). Days, not weeks. Send SYSDUMPs.
- Admin-port crash fix, 125 FPS lock, configurable spawn protection: running on the FMJ dedicated server since 7 September 2026, with players, verified by packet capture and in play. If your server SYSDUMPs on v2, send the dump (EIP + code bytes) to the repo issues.
- Vehicle weapon fix: confirmed in play on every seat-exit case.

## SHA-256

```
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
```

Rebuild them yourself: take the v2 exes, put the four `patch_memory_2gb.py` sites back to their original bytes, then
run `patch_fastmem_arena.py` with `--size 512` or `--size 1024`. Same hashes out.

## Credits

- **Kattoor, Big Baked Bean, biggy, SPAGHETTI, DUZ (hunterz), 51.pl, Dmonic** — community 64Hz patch and binary analysis
- **Spaghetti** — NWU hole-skip fix, tick-rate stability analysis
- **Bone (вᴏɴᴇ-)** — LAN testing, stability verification
- **BadgerLove / FMJ Squad** — v2 patches: admin-port crash, FPS lock, configurable spawn protection, vehicle weapon fix
- **Patch library + scripts:** https://github.com/BadgerLove/jo-server-patches
- **Community site:** https://jointops2024.com
- **Discussion:** https://novahq.net/forum/showthread.php?t=62971
- **Downloads / tools (WolfRAT, JO Monitor):** https://fmj-squad.com
