Jaymod 2.2.0 (ET Legacy / GCC)
Jaymod 2.2.0 — ET Legacy + GCC compatibility release
This release is based on the original Jaymod 2.2.0 source with fixes to make it compile and run correctly with GCC (MinGW) and ET Legacy dedicated servers.
Downloads
jaymod-2.2.0-windows.zip— Full Windows package:qagame_mp_x86.dll+jaymod-2.2.0.pk3+ sample configs and map scriptsqagame.mp.i386.so— Linux game module (32-bit ELF, built with GCC on Ubuntu 22.04)jaymod-2.2.0.pk3— Mod content only (cross-platform — use alongside the game module for your platform)
Installation
Windows (ET Legacy dedicated server):
- Extract
jaymod-2.2.0-windows.zipinto your ET Legacy server'sjaymod/mod folder - Set
omnibot_pathinjaymod.cfgto point to your OmniBot installation - Set
omnibot_enable 1and start the server
Linux:
- Copy
qagame.mp.i386.soandjaymod-2.2.0.pk3into your ET Legacy server'sjaymod/mod folder - Configure
jaymod.cfgas needed
Key fixes over the original MSVC build
OmniBot ABI fix — The original qagame_mp_x86.dll was built with MSVC. When recompiled with GCC (MinGW), bots crashed immediately on connect due to a calling-convention mismatch for C++ virtual functions returning GameEntity by value:
this |
hidden return ptr | |
|---|---|---|
| MSVC | ECX |
[EBP+8] |
| GCC | [EBP+8] |
ECX |
Five affected virtual functions (GetLocalGameEntity, EntityFromID, EntityByName, GetEntityOwner, FindEntityInSphere) are replaced with __attribute__((naked)) assembly thunks that explicitly implement MSVC's calling convention and delegate to plain extern "C" helpers. On Linux, where OmniBot is also GCC-compiled, the thunks are omitted and the helpers are called directly.
Additional fixes:
- Portable
#pragma pack(push, 4)in OmniBot message headers (was MSVC-only syntax) - Null guard in
UpdateBotInputto prevent a crash before the client is fully connected libwinpthreadstatically linked — no extra runtime DLLs needed alongsideqagame_mp_x86.dll- Linux build pinned to
gnu++14to avoidstd::byteconflict with GCC 11+