Skip to content

Jaymod 2.2.0 (ET Legacy / GCC)

Choose a tag to compare

@martijndhondt martijndhondt released this 13 Apr 06:38
· 17 commits to master since this release

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 scripts
  • qagame.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):

  1. Extract jaymod-2.2.0-windows.zip into your ET Legacy server's jaymod/ mod folder
  2. Set omnibot_path in jaymod.cfg to point to your OmniBot installation
  3. Set omnibot_enable 1 and start the server

Linux:

  1. Copy qagame.mp.i386.so and jaymod-2.2.0.pk3 into your ET Legacy server's jaymod/ mod folder
  2. Configure jaymod.cfg as 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 UpdateBotInput to prevent a crash before the client is fully connected
  • libwinpthread statically linked — no extra runtime DLLs needed alongside qagame_mp_x86.dll
  • Linux build pinned to gnu++14 to avoid std::byte conflict with GCC 11+