IW4x is a community-driven project that aims to revitalize and enhance the Call of Duty: Modern Warfare 2 (2009) multiplayer experience by providing a stable platform with support for dedicated servers and modding.
A Steam installation of Modern Warfare 2 is required to run IW4x, copies from the Microsoft Store are not compatible.
IW4x is distributed through the IW4x Launcher.
Important
Clone the git repository instead of downloading the ZIP, as the latter will not work.
- Clone the repository -
git clone https://github.com/iw4x/iw4x-client.git - Run
generate.batto initialize and update submodules and generate the Visual Studio solution - Open/build the generated solution file
build\iw4x.slnwith Visual Studio
To use the iw4x.dll, you must have a valid Modern Warfare 2 installation with the IW4x Rawfiles installed.
Development Setup
- Right-click the IW4x solution in Visual Studio
- Select Properties
- Set the output directory to your MW2 install path
- Right-click the IW4x solution in Visual Studio
- Select Properties
- Select Debugging
- Set the Command value to the path of your
iw4x.exeinside your MW2 game files
Tip:
- Switch to Windowed mode in-game, as breakpoints will lock the window.
- Pressing
F5will launch the game and attach the debugger.- The default hotkey for stopping the debugger is
Shift+F5.
| Argument | Description |
|---|---|
--copy-to=PATH |
Optional, copy the DLL to a custom folder after build, define the path here if wanted. |
--copy-pdb |
Copy debug information for binaries as well to the path given via --copy-to. |
--disable-binary-check |
Do not perform integrity checks on the exe. |
--sentry-dsn=URL |
Submit crash reports to this Sentry DSN. Crash reporting is compiled out when it is not given. |
| Argument | Description |
|---|---|
-entries |
Print to the console a list of every asset as they are loaded from zonefiles. |
-stdout |
Redirect all logging output to the terminal iw4x is started from, or if there is none, creates a new terminal window to write log information in. |
-console |
Allow the game to display its own separate interactive console window. |
-dedicated |
Starts the game as a headless dedicated server. |
-dump |
Write info of loaded assets to the raw folder as they are being loaded. |
-nointro |
Skip game's cinematic intro. |
-version |
Print IW4x build info on startup. |
-steam |
Enable friends feature and other Steam integrations. |
-unprotect-dvars |
Allow the server to modify saved/archive dvars. |
-zonebuilder |
Start the interactive zonebuilder tool console instead of starting the game. |
-original-str-parsing |
(ZoneBuilder mode only) Parse .str files in the same manner as the CoD4 Mod Tools. |
-disable-notifies |
Disable "Anti-CFG" checks |
-disable-mongoose |
Disable Mongoose HTTP server |
-disable-rate-limit-check |
Disable RCon rate limit checks |
-disable-mod-unloading |
Disable automatic mod (fs_game) unloading when disconnecting |
-sentryfull |
Capture full process memory in crash reports rather than the stack and its surroundings. |
-sentrystack |
Capture only stack memory in crash reports. |
-sentrydebug |
Print the crash reporter's own diagnostics to the console. |
Crash reports are submitted to Sentry through the
Sentry Native SDK, using its
out-of-process native backend. Three binaries make up the client side of it:
| Binary | Role |
|---|---|
iw4x.dll |
Holds the SDK, the scope and the in-process crash handler. |
sentry-crash.exe |
Started at launch and parked until a crash. Writes the minidump against the crashed game from the outside and uploads it, so a corrupted heap or an exhausted stack cannot take the report down with it. |
sentry-wer.dll |
Registered with Windows Error Reporting. Catches fail-fast exceptions, stack buffer overruns and heap corruption, none of which reach a top level exception filter. |
All three are published with each release and must be installed side by side.
Crash reporting is compiled out unless a DSN is passed to premake, so it is off by default and release builds take the DSN from a repository secret. To point a local build at Sentry, copy the example configuration and fill in the DSN:
cp sentry.bash.example sentry.bash
sh generate-linux.sh releaseNote that sentry.bash is ignored by git and is picked up automatically
by generate-linux.sh, which passes the DSN on to premake and exports
the rest of the file so sentry-cli can upload debug symbols from the
same shell.
On Windows the same is done with a user script, which git ignores as well.
Create user.bat next to generate.bat containing:
@echo off
call generate.bat --sentry-dsn=https://...This software has been created purely for the purposes of academic research. It is not intended to be used to attack other systems. Project maintainers are not responsible or liable for misuse of the software. Use responsibly.

