Friday 7 August 2009

Complete Guide: Configure and Customise ioQuake 3 in Linux

Following the article on configuring Urban Terror, a popular first-person shooter game based on the ioQuake3 engine, here is a guide for configuring the original ioQuake3 game, including customisation of cvars, using new maps, weapons and characters models, and more. This guide will also successfully apply to the newer OpenArena game, which is practically ioQuake3 with changed weapons, maps and models.

What is ioQuake3?
id Software released the Quake 3 source code to the public and licensed it under the GNU GPL, which allows anyone to modify the source code, create derivative games and do whatever they please with it, as long as the license is still attached and the source code for the distributed new product is made available.


ioQuake3 is the active project who maintains the Quake 3 source code, fixing bugs and making improvements to the engine. It's practically the starting point for all the other game projects like OpenArena.

I must say, together with Wolfenstein: Enemy Territory, OpenArena, Nexuiz, Unreal Tournament 2004 and Tremulous, ioQuake3 is still one of the most popular shooters out there for Linux. Of course, there are Quake 4 or ET: Quake Wars too, and while the first gets less attention now probably than even Quake 3, the latter is very active and servers are usually full of players. But they both seem to miss something from the awesomeness of the older, classic games. It may be because Quake 3 (together with UT) were probably once the defining shooter games, with few rivals at that time.

In this tutorial I'll presume you have ioQuake3 up and running, so I won't give details on installing it. To make it short, you can download the installation script from here (both the engine and data installer), make it executable (chmod 755 ioquake3-1.36-7.1.i386.run), install it as root, then copy the pk0.pk3, pk1.pk3 etc. from your Quake 3 CD inside the baseq3 directory from the installation directory, which by default is /usr/local/games/ioquake3/baseq3. If you don't own the Quake 3 CD, you can still download OpenArena and copy their pk0.pk3. This seems to work for me, but I'm not familiar with the insides of this method so I can't tell for sure whether this can cause problems in time or not. (If somebody cares for an explanation, I'd be glad if they can share it)

Configuration
ioQuake3 will execute automatically all the commands and settings found in the autoexec.cfg file, which is usually located in the ~/.q3a/baseq3 directory, where ~ is your home folder. There are two ways to add configuration options: either add all of them in autoexec.cfg, or make separate files like config_cg.cfg, config_cl.cfg, scripts.cfg and then automatically execute them by adding lines like these inside autoexec.cfg:

exec config_cg.cfg exec config_cl.cfg exec scripts.cfg

And so on. Without further ado, let's start putting our configuration settings inside autoexec.cfg. First there is the configuration setting which you can put inside autoexec.cfg (and adjust where necessary) and then the explanation follows. Notice that you can insert comments after the double slash characters (applies only for that line). Default values are provided too.

set name "^5MyNickname" // default "UnnamedPlayer"
This will set up the player nickname. Notice the ^5 character code, which will colour the nickname in light blue. For other colour codes, see the following:

set r_smp "1" // default "0"
This will enable the use of symmetric multiprocessing option for CPUs like Intel Core 2 Duo for example.

set r_mode "7" // default "3"
This will set resolution. For each number there is a corresponding resolution:
5 is 1024x768
7 is 1152x864
8 is 1280x1024
-1 is custom
If you set your resolution to -1 (custom), then you will have to specify the INS and INS variables, like this:
set r_customwidth "1152"
set r_customheight "864"

set r_gamma "1.25" // default "1"
Will set the gamma (colours brightness). Players tend to increase gamma since visibility will be more clear on dark maps, so customise this to your likings. A high gamma will definitely help spot enemies easier and play better, but on the other hand the beauty of Quake 3 will be a little altered because of the high brightness. I prefer here a middle value, even though this can make play a little worse.

set r_picmip "0" // default "1"
Texture resolution and detail. 0 is the best quality, while 3 is the lowest. Set this to 3 if you want to gain FPS, set it to 0 if you have a powerful enough computer.

set r_stencilbits "8" // default "8"
Quality of shadows. Decrease it to gain a few more FPS.

set r_drawsun "1" // default "0"
Enable/disable sun. Leave to 0 for performance.

set r_detailtextures "1" // default "1"
Use detailed textures. This is one of the cvars which have a non-negligeble impact on performance, so tweak it to 0 to gain FPS.

set r_finish "1" // default "0"
Synchronize rendered frames. Set to 0 for performance.

set r_colorbits "16" // default "0"
Set colour bits. Use 16 for performance, 32 for high quality.

set r_texturebits "16" // default "0"
Set texture bits. Use 16 for performance, 32 for high quality. Notice that both r_colorbits and r_texturebits have impact on performance, so you may want to set these to 16 to gain a few more FPS.

set r_dynamiclight "1" // default "1"
Turn on/off dynamic light (e.g. light around rockets etc). Set to 0 for performance.

set r_lodbias "0" // default "0"
Change the geometric level of detail, can be between 0-2. Use 2 for performance.

set r_subdivisions "1" // default "4"
Set level of detail.

set r_mapoverBrightBits "2" // default "2"
Make shady areas of the map less shady. A value of 4 will show less shadows.

set r_fastsky "0" // default "0"
Sky has less detail. Use 1 for performance.

set r_texturemode "GL_LINEAR_MIPMAP_LINEAR" // default "GL_LINEAR_MIPMAP_NEAREST"
Texture mode, use LINEAR for better quality or NEAREST for performance.

set s_musicvolume "0" // default "0.25"
Should be self-explanatory.

set s_volume "0.20" // default "0.8"
Set game volume.

set bot_nochat "1" // default "0"
If set to 1, this will disable bot chat.

set cg_draw3dicons "1" // default "1"
If set to 1, this will show 3D icons in the HUD (head-up display). If set to 0, it will show 2D icons. Set it to 0 for performance and see the screenshots below.

cg_draw3dicons "1"

cg_draw3dicons "0"

set cg_autoswitch "0" // default "1"
Prevents automatic switching to weapons picked up from the ground.

set cg_drawfps "1" // default "1"
Show the current frames per seconds.

set cg_fov "100" // default "90"
Change the field of view. A value of 90 or 100 should be normal, some recommend values of 110 or 120, and there are players who even like 160. See the screenshots below.

cg_fov "90"

cg_fov 130

set cl_punkbuster "0" // default "0"
Disable PunkBuster. Notice that ioQuake3 does not support PunkBuster (and according to their website they never will), so leave this to 0.

set cl_allowdownload "1" // default "0"
Allow automatic downloading of maps and mods.

set com_maxfps "76" // default "85"
Cap FPS at a value of 76. Values of 125 are best for trickjumps, but if you use vertical sync, then this value shouldn't be greater than the refresh rate of your screen.

set com_blood "0" // default "1"
No blood when enemies get shot. Use 0 for performance.

set sensitivity "15" // default "5"
Change mouse sensitivity. Most players will use scripts for changing the sensitivity for each weapon type separately. For example:

bind t "weapon 5; sensitivity 9" // bind rocket launcher to T key, when T is pressed, rocket launcher will be selected and the sensitivity will be automatically changed
bind g "weapon 8; sensitivity 15" // when G is pressed, plasma gun will be selected and the sensitivity will be automatically changed to 15

What follows next are a few simple scripts which do some stuff:

// Toggle mouse sensitivity 7, 9 or 12
set sens1 "sensitivity 7; bind n vstr sens2; echo *** Sensitivity set to 7"
set sens2 "sensitivity 9; bind n vstr sens3; echo *** Sensitivity set to 9"

set sens3 "sensitivity 12; bind n vstr sens1; echo *** Sensitivity set to 12"

bind n vstr sens1 // Personal script for customising various vars
set j0 "set r_gamma 1.2; echo *** r_gamma set to 1.2"
set j1 "set r_gamma 1.3; echo *** r_gamma set to 1.3"
set j2 "set r_gamma 1.4; echo *** r_gamma set to 1.4"
set j3 "set r_gamma 1.6; echo *** r_gamma set to 1.6"
set jmsg0 "echo *** Active: r_gamma 1.2; bind j vstr jmsg1; bind ENTER vstr j0"
set jmsg1 "echo *** Active: r_gamma 1.3; bind j vstr jmsg2; bind ENTER vstr j1" set jmsg2 "echo *** Active: r_gamma 1.4; bind j vstr jmsg3; bind ENTER vstr j2" set jmsg3 "echo *** Active: r_gamma 1.6; bind j vstr jmsg0; bind ENTER vstr j3" bind j vstr jmsg0
set k0 "set cg_fov 100; echo *** cg_fov set to 100"
set k1 "set cg_fov 110; echo *** cg_fov set to 110"
set k2 "set cg_fov 130; echo *** cg_fov set to 130"
set kmsg0 "echo *** Active: cg_fov 100; bind k vstr kmsg1; bind ENTER vstr k0" set kmsg1 "echo *** Active: cg_fov 110; bind k vstr kmsg2; bind ENTER vstr k1" set kmsg2 "echo *** Active: cg_fov 130; bind k vstr kmsg0; bind ENTER vstr k2" bind k vstr kmsg0
set n0 "sensitivity 7; echo *** sensitivity set to 7"
set n1 "sensitivity 9; echo *** sensitivity set to 9"
set n2 "sensitivity 12; echo *** sensitivity set to 12"
set n3 "sensitivity 15; echo *** sensitivity set to 15"
set nmsg0 "echo *** Active: sensitivity 7; bind n vstr nmsg1; bind ENTER vstr n0"
set nmsg1 "echo *** Active: sensitivity 9; bind n vstr nmsg2; bind ENTER vstr n1"
set nmsg2 "echo *** Active: sensitivity 12; bind n vstr nmsg3; bind ENTER vstr n2"
set nmsg3 "echo *** Active: sensitivity 15; bind n vstr nmsg0; bind ENTER vstr n3"
bind n vstr nmsg0

Notice that you will want to adjust these for your liking. Isn't this cheating? Short answer: no, absolutely not. Most of the Quake players out there consider this part of the game. Of course, some would say binding stuff like a rocket jump to a single keyboard shortcut can be considered cheating, but this depends. In Quake 3, it can be done by anyone, so it shouldn't be a cheat. Here are some keyboard bindings for weapons and movement. Notice that you may have to adjust these depending on personal preference:

bind e "+forward"
bind s "+moveleft"
bind d "+back"
bind f "+moveright"
bind SHIFT "+movedown"
bind SPACE "+moveup"
bind TAB "+scores"
bind MOUSE1 "+attack"
bind MOUSE2 "+zoom"
bind MOUSE3 "+zoom"
bind 1 "weapon 1" // gauntlet
bind 2 "weapon 2"
bind 3 "weapon 3"
bind 4 "weapon 4"
bind 5 "weapon 5" // rocket launcher
bind 6 "weapon 6"
bind 7 "weapon 7"
bind 8 "weapon 8"
bind 9 "weapon 9" // bfg
bind 0 "weapon 10"
bind v "weapon 1"
bind t "weapon 5"
bind a "weapon 6"
bind w "weapon 7"
bind g "weapon 8"
bind q "weapon 9"

Maps and mods
You can easily install new maps and models by copying the respective pk3 files inside your ~/.q3a/baseq3 directory. There are many places to download maps from. To mention two, take a look here and here.

You can download models for characters and weapons from here, so just download, uncompress and copy them inside ~/.q3a/baseq3/.

Help sites
There are many Quake 3 help sites, some of those being:
Commander Keen's Quake 3 Arena Console Page
Planet Quake

No comments: