Learning quake3 modding

I have tried to look into quake3 modding and currently I’m following this tutorial but I had to stop.
I use linux.
I have not been able to compile the original quake3 source (output of Q3AGameSource.exe) because cons throws some error and at some point something complained about glibc and gcc version.
Compiling ioquake works.
I’m confused, where does the engine end and game source start?
lcc not providing it’s own standard headers created bad errors messages, “/tmp/ could not be read”.

So the questions…
What is the most up to date guide for starting modding for somebody who already knows C? Googling is hard because there are lot of dead links.

Should mod be started using everything found in ioquake code directory? I assume that’s the whole game and just mod should not need stuff from there?

Is there somewhere base project for linux with makefile that contains only bare necessaries for making working mod?

Does q3lcc with better error messages exists somewhere?

I would start from ioquake3 repo. There isn’t a maintained ioq3 SDK as far as I know. ioquake3 receives bug fixes and improvements to the mod code as well.

The mod code is in ioquake3 code/game, code/cgame, code/q3_ui (baseq3), code/ui (Team Arena), code/qcommon/q_shared.*, code/qcommon/q_math.*. The code/qcommon/q_* files are code/game/q_* in the Q3 SDK.

You can disable building the ioquake3 server and client executable using make BUILD_SERVER=0 BUILD_CLIENT=0 (or setting those in Makefile). The ioquake3 Makefile also has the benefit of building mod DLLs using gcc or clang which have better error messages and can be used with a debugger (gdb, lldb). It shouldn’t be too difficult to build the Q3 1.32 SDK code using ioquake3’s Makefile and lcc (code/tools).

By default QVMs built using ioquake3 Makefile cannot run on the original Quake 3 engine (due to slightly modified QVM format). To run on original Quake 3 (and ioquake3) you need to pass -vq3 (vanilla q3) to $(Q3ASM) in Makefile when linking QVMs.

Q3AGameSource.exe is the name of the older Quake 3 1.1x SDK source code which incompatible with final patched Quake 3 1.32 (Quake 3 1.32b engine source code and ioquake3). The final patched Quake 3 1.32 SDK is Q3A_TA_GameSource_132.exe.

The main consideration is which license you want to use for you mod. Q3 SDK license (Q3A_TA_GameSource_132.exe) or GNU GPLv2+ (Quake 3 1.32b source code / ioquake3).

GNU GPLv2+ requires your mod source code to be available to anyone with binaries (QVMs/DLLs). The Q3 SDK license and GPL license are incompatible. So whichever you pick there is Quake 3 code out there you cannot use. If you use the GPL license, you cannot add code with no license or Q3 SDK license. If you use Q3 SDK license, you cannot add code with GNU GPL license.

Personally I would use the mod code from ioquake3 since it has additional bug fixes and improvements over the original Quake 3 1.32, licensed under the GPL which is needed for standalone games, and allows using code from other GPL games/mods. However if you want to add Challenge Pro-Mode (CPM) physics (or other tutorials that have a large amount of complex code and no license) you need to use the Q3 SDK license. I don’t know what license the majority of new mods are using.


Hey thanks for the answer.

Ok so I have modified files in code/* and built it and run it.
Is there some simple steps dynamically reload mods?
Say the game is running, I modify the code and rebuild some qvm. Is there way to reload the qvm?
Always compiling and restarting is slow.
I think I need to make some kind of testing map that has everything when loaded.

Yeah, the vid_restart command will reload cgame and ui QVMs and map command reloads qagame QVM.