-
Notifications
You must be signed in to change notification settings - Fork 1
Installation
The basic concept to operation is for QMM to be loaded as if it were the mod dll, and then it loads the original mod dll file.
Each game uses a different filename for the mod. Refer to this list when you are asked to rename the QMM DLL in step 2:
Game | Windows DLL | Linux SO | QVM |
---|---|---|---|
Quake 3 Arena | qagamex86.dll | qagamei386.so | qagamex86_64.dll |
Return to Castle Wolfenstein (Multiplayer) | qagame_mp_x86.dll | qagame.mp.i386.so | |
Wolfenstein: Enemy Territory | qagame_mp_x86.dll | qagame.mp.i386.so | |
Return to Castle Wolfenstein (Singleplayer) | qagamex86.dll | qagamei386.so | |
Jedi Knight 2: Jedi Outcast | jk2mpgamex86.dll | jk2mpgamei386.so | vm/jk2mpgame.qvm |
Jedi Knight: Jedi Academy | jampgamex86.dll | jampgamei386.so | |
Star Trek Voyager: Elite Force (Holomatch) | qagamex86.dll | qagamei386.so | vm/qagame.qvm |
Star Trek: Elite Force II | gamex86.dll | gamei386.so | |
Medal of Honor: Allied Assault | gamex86.dll | gamei386.so | |
Medal of Honor: Spearhead | gamex86.dll | gamei386.so | |
Medal of Honor: Breakthrough | gamex86.dll | gamei386.so | |
Soldier of Fortune II: Double Helix (MP) | sof2mp_gamex86.dll | sof2mp_gamei386.so | vm/sof2mp_game.qvm |
Quake 2 Remastered | game_x64.dll | ||
Quake 2 | gamex86.dll | gamei386.dll |
- Locate the mod file (listed above) in the mod directory and rename it to
qmm_<name>
. Skip this step for QVM mods. - Place
qmm2.dll
/qmm2.so
into the mod directory and rename it to the old mod file name (listed above) - Place
qmm2.json
into the mod directory - Configure
qmm2.json
(see Configuration section for details)
Note for Jedi Academy (standard mod) on Windows: You will have to run a server without QMM first to extract the original
jampgamex86.dll
file from the .pk3 files, so that you can rename it toqmm_jampgamex86.dll
in step 1. JA stores the .dll file inside .pk3s, but it must be outside a .pk3 in order for Windows to load it, so JA will read it from the .pk3 and write it to disk.Also, for step 2, place the
zzz_qmm_jamp.pk3
file in the mod directory instead of the qmm2.dll. This is necessary because Quake 3-based games will load files from .pk3 files BEFORE real files, and the .pk3s are loaded in alphabetical order. This means that the zzz_qmm_jamp.pk3 file will be loaded last, ensuring it contains the jampgamex86.dll file that gets loaded by the server.
The configuration for QMM primarily comes from the qmm2.json file. This should be placed in the mod directory, the same place the qmm DLL is located. Other than the plugins
list, most settings generally aren't needed and QMM will load with default settings in all tested game engines.
The QMM config contains several options:
-
game
- valid options:- auto (default) = attempt to automatically determine engine
- Q3A = Quake 3 Arena
- RTCWSP = Return to Castle Wolfenstein (Singleplayer)
- RTCWMP = Return to Castle Wolfenstein (Multiplayer)
- WET = Wolfenstein: Enemy Territory
- JK2MP = Jedi Knight II: Jedi Outcast
- JAMP = Jedi Knight: Jedi Academy
- STVOYHM = Star Trek Voyager: Elite Force (Holomatch)
- STEF2 = Star Trek: Elite Force II
- MOHAA = Medal of Honor: Allied Assault
- MOHSH = Medal of Honor: Spearhead
- MOHBT = Medal of Honor: Breakthrough
- Q2R = Quake 2 Remastered
- QUAKE2 = Quake 2 Remastered
- SOF2MP = Soldier of Fortune II: Double Helix (Multiplayer)
-
mod
- path to mod file. specify "auto" to attempt to automatically determine mod filename based on the game engine. default = "auto" -
execcfg
- name of Quake config file to execute after QMM and plugins are loaded. specify an empty string to explicitly disable this function. default = "qmmexec.cfg" -
plugins
- list of plugin filenames to load -
logseverity
- severity of logging. valid options:- TRACE - all calls into QMM (including GetGameAPI hooks, excluding G_PRINT)
- DEBUG - all calls into QMM except mod funcs that happen every frame (GAME_RUN_FRAME, etc)
- INFO - information during config/mod/plugin loading and engine detection steps
- NOTICE - information regarding final status of config/mod/plugin loading and engine detection
- WARNING - NoCrash code detected msgboom behavior, plugin fails to set a result flag
- ERROR - error while loading mod, plugin sets QMM_ERROR result flag
- FATAL - unable to detect engine or load mod, error during QVM execution
- [blank] - use default. the default for the release build is INFO and the default for the debug build is DEBUG
-
qvmstacksize
- size (in MiB) of the QVM stack for QVM mods. default = 1
Quake 3 engine games will generally attempt to load game files from 2 locations:
- home directory: from
<home>/.q3a/
(i.e.C:\Users\user\.q3a\
or/home/user/.q3a/
) - game directory: where the game/server .exe file is (i.e.
C:\Program Files\Quake 3 Arena\
or/opt/q3server/
)
QMM will attempt to load files from various paths in order to best work with these multiple locations.
In the following lists, you will see these placeholders used:
-
<qmmdir>
- the directory where the QMM DLL is located -
<exedir>
- the directory where the game executable is located -
<moddir>
- the mod the game is running (i.e. "baseq3", "main", etc) -
<mod>
- the "mod" setting in the config file -
<qvmname>
- the default name of a QVM mod for the game engine -
<dllname>
- the default name of a DLL mod for the game engine -
<plugin>
- a plugin file string given in the "plugins" list in the config file
The config file will be loaded from the following locations in order:
<qmmdir>/qmm2.json
<exedir>/<moddir>/qmm2.json
./<moddir>/qmm2.json
The mod file can be specified in the config either as an absolute or relative path, or as "auto" (the default).
If an absolute path is given, only that path is loaded.
If a relative path is given, the mod file will be loaded from the following locations in order:
<mod>
<qmmdir>/<mod>
<exedir>/<moddir>/<mod>
./<moddir>/<mod>
If "auto" is used, the mod file will loaded from the following locations in order:
-
<qvmname>
(if the game engine supports QVM mods) <qmmdir>/qmm_<dllname>
<exedir>/<moddir>/qmm_<dllname>
<exedir>/<moddir>/<dllname>
./<moddir>/qmm_<dllname>
If QMM is unable to load a mod after checking all the above locations, it will exit with an error.
QMM will not attempt to load a mod file if it thinks it is QMM itself.
A plugin file can be specified in the config either as an absolute or relative path.
If an absolute path is given, only that path is loaded.
If a relative path is given, the plugin file will be loaded from the following locations in order:
<qmmdir>/<plugin>
<exedir>/<moddir>/<plugin>
./<moddir>/<plugin>
In the event your mod uses a QVM (Quake Virtual Machine) file (the default mods do), you must set the vm_game
cvar to 0
in order for the QMM dll to be loaded. You can do this by adding the following to <mod>/autoexec.cfg
(create it if it does not exist):
seta vm_game 0
You can get rid of the DLL "Security Warning" message by setting the com_blindlyLoadDLLs
cvar to 1
. You can do this by adding the following to <mod>/autoexec.cfg
(create it if it does not exist):
seta com_blindlyLoadDLLs 1