Engine
Darkplaces is a Quake I source port / engine; it has real-time rendering of shadows and lights, supports high resolutions, have bloom settings, enhanced particle effects, sound interpolation, experimental ODE physics implementation, doesn't have VoIP support... Supports DPM, IQM, ZYM, MD3, MDL model files. More info
here.
There are some engines modified from ioQuake3, in terms of rendering and implementation topics. Nowadays, ioQuake3 has VoIP support (you need Mumble program (client and server) and if you want to open a server from the game, a Mumble server should be opened to use voice chat too), OpenAL support, PNG support; supports MD3 and IQM (for character models) model files, ... ioQuake3 engine code is cleaner than
id tech 3 (original engine), has fixed several bugs and tons of stuff changed to enhance the engine, more info look this
README.
Hardware requirements
Quake 3 can run fine with a Pentium CPU and 512MB RAM. According to
Focus on Mod Programming for Quake III Arena book says that:
The required specifications for Quake III modding are as follows:
■ Processor. Pentium II 300+ MHz (Pentium III 500 MHz+ recommended)
■ Operating system. Windows 95/98/ME/2000/XP
■ Video card. 8MB RAM (3D graphics card recommended)
■ Memory. 64MB (128MB recommended)
■ Hard disk. 500MB minimum for installation of Quake III and tools
■ Compiler. Visual C++ recommended
Xonotic, now, can run with a minimum of 2GB RAM, recommended at 4GB RAM, a 1.6 GHz single-core CPU and a minimum of 2GB HDD space required. It can run the following platforms: Windows 7 or newer (x86 or x86-64), Linux with glibc (libc6) 2.29 or newer (x86-64), macOS (x86-64).
Compiled files (gamecode)
In Quake 3, the compiled files of gamecode part are
cgame.qvm,
qagame.qvm and
ui.qvm. Additionally, there is something new in ioQuake 3, now you can obtain compiled DLL files (
cgamex86_64.dll,
qagamex86_64.dll and
uix86_64.dll) instead QVM files, even you obtain both after compiling. QVMs are compiled by a modified version of
LCC.
In Xonotic, you obtain
csprogs.dat,
progs.dat and
menu.dat programs after compiling, similar to the compiled files from Quake I.
More info:
Programming QuakeC stuff in Xonotic - section 1
Programming in the gamecode
In Quake 3, the game logic is written in
C 1989 Standard (ANSI C) with C++ style comments and incomplete reimplemented C standard library.
In Xonotic, the game logic is written in
QuakeC but looks like closer to C without pointers and structs, and has some little differences from Quake I gamecode, moreover uses
gmqcc compiler.
Cvar declaration in the gamecode
In Quake 3, when you need to declare some cvar in the code, you've to do like in this example:
- In
game/g_main.c, add this where you can see the
vmCvar_t list:
Code:
vmCvar_t g_disableGauntlet;
After, inside
static cvarTable_t gameCvarTable[] = { add this line under
g_gametype one:
Code:
{ &g_disableGauntlet, "g_disableGauntlet", "0", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH, 0, qfalse },
And in
G_RegisterCvars function, add this after
g_gametype conditional if:
Code:
if ( g_disableGauntlet.integer >= 1 )
{
G_Printf( "Gauntlet weapon disabled, to enable: 'g_disableGauntlet 0' and restart \n" );
va("print \"Gauntlet weapon disabled, to enable: 'g_disableGauntlet 0' and restart.\n\"");
trap_Cvar_Set( "g_disableGauntlet", "1" );
trap_Cvar_Update( &g_disableGauntlet );
}
- In
game/g_local.h, add this in
extern vmCvar_t list:
Code:
extern vmCvar_t g_disableGauntlet;
- And finally in
game/g_client.c, inside
ClientSpawn() you will see these lines:
Code:
client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_GAUNTLET );
client->ps.ammo[WP_GAUNTLET] = -1;
Then replace to this:
Code:
if( g_disableGauntlet.integer <= 0 )
{
client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_GAUNTLET );
client->ps.ammo[WP_GAUNTLET] = -1;
}
Finally, compile the code, copy the compiled qvm, run the game (you can launch quickly typing
quake.exe +map q3dm17), in console write and execute the cvar:
\g_disableGauntlet 1
restart and enjoy without the gauntlet!
REFERENCE:
Quake3World forums - Programming Discussion - thread 1077266
In Xonotic, the cvar declaration is direct and automatic. Simply, write this in the code:
Code:
bool autocvar_g_something;
After, if you want to detail cvar description, you've to open some cfg (like mutators.cfg, xonotic-server.cfg, ...) and write the following line:
Code:
set g_something 0 "Displays something"
And alternatively when you want to create the described cvar only by code, there is a AUTOCVAR function in a
library. Write in a lin
e:
Code:
AUTOCVAR(g_something, bool, false, "Display something");
Map support and shaders
Quake 3 and Xonotic, both support BSP maps. Maps can be built in
NetRadiant /
gtkRadiant tools. Xonotic can use
Darkplaces shader system and
Q3A shader system.
While Quake 3 can use Q3A shader system, but it doesn't look compatible with Darkplaces shaders. Q3 shader manual isn't up to date with the shaders used in Darkplaces.
Both support pk3dir feature; paths in a game directory with the extension ".pk3dir" are treated like pk3 files. This means you can keep all files specific to your map in one directory tree and easily zip this folder for distribution.