# Install any pre-requisites according to your distribution documentation. If you run into trouble here, please [http://community.ioquake.org/ ask for help on our forums] after attempting the next command and saving the output to [http://pastebin.com pastebin]

+

# Install any pre-requisites (<code>make</code>, <code>git</code>, <code>gcc</code>, etc) according to your distribution documentation. If you run into trouble here, please [http://community.ioquake.org/ ask for help on our forums] after attempting the next command and saving the output to [http://pastebin.com pastebin]

# Download the patch zip file [https://ioquake3.org/extras/patch-data/ from this page] and unzip the contents into your <code>baseq3</code> and <code>missionpack</code> sub-directories of <code>ioquake3</code>.

# Type <code>screen</code> and then <code>sh start_server.sh</code>. You can leave the screen at any time by pressing <code>Ctrl+a</code> then <code>d</code>, and then get access to your running server again by typing <code>screen -drU</code>

# Type <code>screen</code> and then <code>sh start_server.sh</code>. You can leave the screen at any time by pressing <code>Ctrl+a</code> then <code>d</code>, and then get access to your running server again by typing <code>screen -drU</code>

Line 29:

Line 32:

# Immediately upgrade to a [http://ioquake3.org/get-it/test-builds/ test build by downloading the zip file], extract the ioquake3.app from the zip file and place it inside your <code>/Applications/ioquake3</code> folder.

# Immediately upgrade to a [http://ioquake3.org/get-it/test-builds/ test build by downloading the zip file], extract the ioquake3.app from the zip file and place it inside your <code>/Applications/ioquake3</code> folder.

# Download the patch zip file [https://ioquake3.org/extras/patch-data/ from this page] and unzip the contents into your <code>baseq3</code> and <code>missionpack</code> sub-folders of your <code>ioquake3</code> folder.

# Open <code>Terminal.app</code>

# Open <code>Terminal.app</code>

# Type this and press enter, do the same for the next few lines: <code>cd /Applications/ioquake3/</code>

# Type this and press enter, do the same for the next few lines: <code>cd /Applications/ioquake3/</code>

# Type <code>screen</code> and then <code>sh start_server.sh</code>. You can leave the screen at any time by pressing <code>Ctrl+a</code> then <code>d</code>, and then get access to your running server again by typing <code>screen -drU</code>

# Type <code>screen</code> and then <code>sh start_server.sh</code>. You can leave the screen at any time by pressing <code>Ctrl+a</code> then <code>d</code>, and then get access to your running server again by typing <code>screen -drU</code>

# Immediately upgrade to a [http://ioquake3.org/get-it/test-builds/ test build by downloading the zip file], extract the ioquake3 files from the zip and overwrite the ones with the same names in your <code>\ioquake3</code> directory where you chose to install it in step 1.

You can put almost any setting or console command into a configuration file called <code>suchandsuch.cfg</code> and place this in the mod folder, for regular Quake III: Arena it is <code>baseq3</code> and then modify your server startup command or script to end with <code>+exec suchandsuch.cfg</code>

+

+

== rcon ==

+

Rcon allows you to remotely access and configure your server while playing through a client or through other programs.

+

; seta rconPassword "password"

+

: Adding this to your server configuration file (<code>suchandsuch.cfg</code>) will enable remote access through the password in quotes. Do not use <code>password</code> or any other simple word. Please use a password manager like [https://agilebits.com/onepassword 1Password] to keep track of your passwords.

+

+

== Useful ioquake3 server console commands and settings==

+

These can be set on the command line using "ioq3ded.x86_64 +''command''" or in the console interface after starting the server.

+

+

; set dedicated 2

+

: Enabled listing server on public Internet master servers. <code>+set dedicated 2</code> is public Internet, 1 is LAN/connect by IP (the default), 0 is non-dedicated (client binary only). It must be set in the command line arguments.

−

== Useful ioquake3 server console commands ==

+

; set fs_game <mod directory>

−

; g_gametype 1

+

: Set mod to play. For example to play Quake 3: Team Arena use <code>+set fs_game missionpack</code>. It must be set in the command line arguments or changed using <code>game_restart <mod directory></code>.

−

: Change the game mode after you change the map, 1 is deathmatch, 2 is one on one, 3 is team deathmatch, 4 is capture the flag.

−

; bot_enable 1 or 0

+

; map <map name>

+

: Load a new map. Type <code>map </code> and press the tab key to list all maps.

+

+

; devmap <map name>

+

: Load a map with cheats enabled. Type <code>devmap </code> and press the tab key to list all maps.

+

+

; map_restart <seconds>

+

: Restart the map after an optional count down (default: 5 seconds).

+

+

; set g_gametype 1

+

: Change the game mode. It takes affect after you load a new map. 0 is deathmatch, 1 is one on one (tournament), 2 is single player deathmatch (not available in multiplayer), 3 is team deathmatch, 4 is capture the flag.

+

+

; set sv_pure 0

+

: sv_pure 0 allow clients to use addon pk3s not installed on the server. sv_pure 1 restricts clients to using pk3s installed on the server.

: Set amount of memory for Quake 3's Hunk memory (default 128). You may need to increase it to run some addons. It must be set in the command line arguments.

+

+

; set bot_enable 1 or 0

: Enables or disables bots on your server. 1 is on, 0 is off.

: Enables or disables bots on your server. 1 is on, 0 is off.

−

;bot_minplayers <range>

+

; set bot_minplayers <range>

: Specifies a number of bots that should connect to the server when there are fewer than this number of human players. For example, if <code>bot_minplayers</code> is set to 2 and one human player connects and joins the game then one of the bots will disconnect and the other will keep on playing.

: Specifies a number of bots that should connect to the server when there are fewer than this number of human players. For example, if <code>bot_minplayers</code> is set to 2 and one human player connects and joins the game then one of the bots will disconnect and the other will keep on playing.

Line 52:

Line 95:

: Use this command to manually add bots to a server, optionally specifying the difficulty and team. The bots names are the same as the in-game names (Sarge, etc.) The difficulty is any whole number 1 through 5. 5 is the most difficult, 1 is the least. Team color is either <code>red</code> or <code>blue</code>

: Use this command to manually add bots to a server, optionally specifying the difficulty and team. The bots names are the same as the in-game names (Sarge, etc.) The difficulty is any whole number 1 through 5. 5 is the most difficult, 1 is the least. Team color is either <code>red</code> or <code>blue</code>

−

; g_allowvote 1 or 0

+

; set g_allowvote 1 or 0

: Enable or disable player voting on the map, restarting the map, kicking a player, or the <code>g_gametype</code>.

: Enable or disable player voting on the map, restarting the map, kicking a player, or the <code>g_gametype</code>.

Line 92:

Line 135:

== Using HTTP/FTP Download Support ==

== Using HTTP/FTP Download Support ==

−

You can enable redirected downloads on your server even if it's not an ioquake3 server. You simply need to use the 'sets' command to put the <code>sv_dlURL</code> cvar into your <code>SERVERINFO</code> string and ensure <code>sv_allowDownloads</code> is set to <code>1</code>

+

You can enable redirected downloads on your server even if it's not an ioquake3 server. You simply need to use the 'sets' command to put the <code>sv_dlURL</code> cvar into your <code>SERVERINFO</code> string and ensure <code>sv_allowDownload</code> is set to <code>1</code>

+

+

<code>sv_dlURL</code> is the base of the URL that contains your custom .pk3 files the client will append both fs_game and the filename to the end of this value. For example, if you have <code>sv_dlURL</code> set to <code>"http://example.org"</code>, <code>fs_game</code> is <code>"baseq3"</code>, and the client is missing <code>"test.pk3"</code>, it will attempt to download from the URL <code>"http://example.org/baseq3/test.pk3"</code>

+

+

<code>sv_allowDownload</code> can be set to one of these options:

+

; sv_allowDownload 1

+

: Enable downloads

+

+

; sv_allowDownload 4

+

: disable UDP downloads

+

+

; sv_allowDownload 8

+

: do not ask the client to disconnect when using HTTP/FTP downloads

−

<code>sv_dlURL</code> is the base of the URL that contains your custom .pk3 files the client will append both fs_game and the filename to the end of this value. For example, if you have <code>sv_dlURL</code> set to <code>"http://ioquake3.org"</code>, <code>fs_game</code> is <code>"baseq3"</code>, and the client is missing <code>"test.pk3"</code>, it will attempt to download from the URL <code>"http://ioquake3.org/baseq3/test.pk3"</code>

−

<code>sv_allowDownload</code>'s value is now a bitmask made up of the following flags:

−

<code>

−

1 - ENABLE

−

4 - do not use UDP downloads

−

8 - do not ask the client to disconnect when using HTTP/FTP

−

</code>

Server operators who are concerned about potential leeching from their HTTP servers from other ioquake3 servers can make use of the <code>HTTP_REFERER</code> that ioquake3 sets which is <code>"ioQ3://{SERVER_IP}:{SERVER_PORT}"</code>. For, example, Apache's mod_rewrite can restrict access based on <code>HTTP_REFERER</code>.

Server operators who are concerned about potential leeching from their HTTP servers from other ioquake3 servers can make use of the <code>HTTP_REFERER</code> that ioquake3 sets which is <code>"ioQ3://{SERVER_IP}:{SERVER_PORT}"</code>. For, example, Apache's mod_rewrite can restrict access based on <code>HTTP_REFERER</code>.

−

On a sidenote, downloading via UDP has been improved and yields higher data rates now. You can configure the maximum bandwidth for UDP downloads via the cvar sv_dlRate. Due to system-specific limits the download rate is capped at about 1 Mbyte/s per client, so curl downloading may still be faster.

+

Downloading via UDP has also been improved in ioquake3 and yields higher data rates. You can configure the maximum bandwidth for UDP downloads via the cvar <code>sv_dlRate</code>. Due to system-specific limits the download rate is capped at about 1 Mbyte/s per client, so curl downloading may still be faster.

+

+

== Is ioquake3 network compatible with the final id point release (1.32c) of Quake III: Arena? ==

+

+

Yes. ioquake3 is ONLY network compatible with the final id software point release (1.32c) of Quake 3.

== Using Old Versions or Protocols ==

== Using Old Versions or Protocols ==

−

Sometimes we get asked to help with NoGhost or other mods that require versions of Quake 3 prior to 1.32c. '''Unfortunately there is no way to make mods that require old versions of Quake 3 work with ioquake3.''' When id software released the source code which ioquake3 is based on we only received access to the latest version at the time they stopped working on it.

+

The majority of mods built for Quake 3 1.32c work fine with ioquake3, but sometimes we get asked to help with NoGhost or other mods that require versions of Quake 3 prior to 1.32c. When the source code to Quake 3 was released it was for version 1.32c which is why ioquake3 increased the version number from there. We did not receive the source code for versions prior to 1.32c and there is no way for us to go back to 1.16n or other old versions. '''For the very few mods that require 1.16n, there is no way to make them work on ioquake3.'''

−

== Punkbuster ==

+

== Does Punkbuster or other anti-cheat software work with ioquake3?==

−

Similarly, we sometimes get asked to support Punkbuster. This is closed source cheat detection software that we don't have the ability to use with ioquake3.

+

No. Punkbuster is closed-source software that we cannot implement. There is no good software replacement. Good administrators on your server who can watch out for cheaters, review logs, and review recorded demo files are the only anti-cheat option at this time.

Install any pre-requisites (make, git, gcc, etc) according to your distribution documentation. If you run into trouble here, please ask for help on our forums after attempting the next command and saving the output to pastebin

sh server_compile.sh

Copy pak0.pk3 from your purchased copy of Quake 3: Arena to the baseq3 sub-directory of ioquake3

Download the patch zip file from this page and unzip the contents into your baseq3 and missionpack sub-directories of ioquake3.

Windows

Immediately upgrade to a test build by downloading the zip file, extract the ioquake3 files from the zip and overwrite the ones with the same names in your \ioquake3 directory where you chose to install it in step 1.

You're ready to go, just type map q3dm17 in your new server's console.

Configuration Files

You can put almost any setting or console command into a configuration file called suchandsuch.cfg and place this in the mod folder, for regular Quake III: Arena it is baseq3 and then modify your server startup command or script to end with +exec suchandsuch.cfg

rcon

Rcon allows you to remotely access and configure your server while playing through a client or through other programs.

seta rconPassword "password"

Adding this to your server configuration file (suchandsuch.cfg) will enable remote access through the password in quotes. Do not use password or any other simple word. Please use a password manager like 1Password to keep track of your passwords.

Useful ioquake3 server console commands and settings

These can be set on the command line using "ioq3ded.x86_64 +command" or in the console interface after starting the server.

set dedicated 2

Enabled listing server on public Internet master servers. +set dedicated 2 is public Internet, 1 is LAN/connect by IP (the default), 0 is non-dedicated (client binary only). It must be set in the command line arguments.

set fs_game <mod directory>

Set mod to play. For example to play Quake 3: Team Arena use +set fs_game missionpack. It must be set in the command line arguments or changed using game_restart <mod directory>.

map <map name>

Load a new map. Type map and press the tab key to list all maps.

devmap <map name>

Load a map with cheats enabled. Type devmap and press the tab key to list all maps.

map_restart <seconds>

Restart the map after an optional count down (default: 5 seconds).

set g_gametype 1

Change the game mode. It takes affect after you load a new map. 0 is deathmatch, 1 is one on one (tournament), 2 is single player deathmatch (not available in multiplayer), 3 is team deathmatch, 4 is capture the flag.

set sv_pure 0

sv_pure 0 allow clients to use addon pk3s not installed on the server. sv_pure 1 restricts clients to using pk3s installed on the server.

Set amount of memory for Quake 3's Hunk memory (default 128). You may need to increase it to run some addons. It must be set in the command line arguments.

set bot_enable 1 or 0

Enables or disables bots on your server. 1 is on, 0 is off.

set bot_minplayers <range>

Specifies a number of bots that should connect to the server when there are fewer than this number of human players. For example, if bot_minplayers is set to 2 and one human player connects and joins the game then one of the bots will disconnect and the other will keep on playing.

addbot <botname> <difficulty range> <teamcolor>

Use this command to manually add bots to a server, optionally specifying the difficulty and team. The bots names are the same as the in-game names (Sarge, etc.) The difficulty is any whole number 1 through 5. 5 is the most difficult, 1 is the least. Team color is either red or blue

set g_allowvote 1 or 0

Enable or disable player voting on the map, restarting the map, kicking a player, or the g_gametype.

banaddr <range>

ban an ip address range from joining a game on this server, valid <range> is either playernum or CIDR notation address range.

exceptaddr <range>

exempt an ip address range from a ban.

bandel <range>

delete ban (either range or ban number)

exceptdel <range>

delete exception (either range or exception number)

rehashbans

reload the banlist from serverbans.dat

flushbans

delete all bans

net_restart

restart network subsystem to change latched settings

game_restart <fs_game>

Switch to another mod

kicknum <client number>

kick a client by number, same as clientkick command

kickall

kick all clients, similar to "kick all" (but kicks everyone even if someone is named "all")

kickbots

kick all bots, similar to "kick allbots" (but kicks all bots even if someone is named "allbots")

tell <client num> <msg>

send message to a single client (new to server)

Using HTTP/FTP Download Support

You can enable redirected downloads on your server even if it's not an ioquake3 server. You simply need to use the 'sets' command to put the sv_dlURL cvar into your SERVERINFO string and ensure sv_allowDownload is set to 1

sv_dlURL is the base of the URL that contains your custom .pk3 files the client will append both fs_game and the filename to the end of this value. For example, if you have sv_dlURL set to "http://example.org", fs_game is "baseq3", and the client is missing "test.pk3", it will attempt to download from the URL "http://example.org/baseq3/test.pk3"

sv_allowDownload can be set to one of these options:

sv_allowDownload 1

Enable downloads

sv_allowDownload 4

disable UDP downloads

sv_allowDownload 8

do not ask the client to disconnect when using HTTP/FTP downloads

Server operators who are concerned about potential leeching from their HTTP servers from other ioquake3 servers can make use of the HTTP_REFERER that ioquake3 sets which is "ioQ3://{SERVER_IP}:{SERVER_PORT}". For, example, Apache's mod_rewrite can restrict access based on HTTP_REFERER.

Downloading via UDP has also been improved in ioquake3 and yields higher data rates. You can configure the maximum bandwidth for UDP downloads via the cvar sv_dlRate. Due to system-specific limits the download rate is capped at about 1 Mbyte/s per client, so curl downloading may still be faster.

Is ioquake3 network compatible with the final id point release (1.32c) of Quake III: Arena?

Yes. ioquake3 is ONLY network compatible with the final id software point release (1.32c) of Quake 3.

Using Old Versions or Protocols

The majority of mods built for Quake 3 1.32c work fine with ioquake3, but sometimes we get asked to help with NoGhost or other mods that require versions of Quake 3 prior to 1.32c. When the source code to Quake 3 was released it was for version 1.32c which is why ioquake3 increased the version number from there. We did not receive the source code for versions prior to 1.32c and there is no way for us to go back to 1.16n or other old versions. For the very few mods that require 1.16n, there is no way to make them work on ioquake3.

Does Punkbuster or other anti-cheat software work with ioquake3?

No. Punkbuster is closed-source software that we cannot implement. There is no good software replacement. Good administrators on your server who can watch out for cheaters, review logs, and review recorded demo files are the only anti-cheat option at this time.

Network protocols

There are now two cvars that give you some degree of freedom over the reported protocol versions between clients and servers: com_protocol and com_legacyprotocol. The reason for this is that some standalone games increased the protocol number even though nothing really changed in their protocol and the ioquake3 engine is still fully compatible.

In order to harden the network protocol against UDP spoofing attacks a new network protocol was introduced that defends against such attacks. Unfortunately, this protocol will be incompatible to the original quake3 1.32c which is the latest official release from id. Luckily, ioquake3 has backwards compatibility, on the client as well as on the server. This means ioquake3 players can play on old servers just as ioquake3 servers are able to service old clients.

The cvar com_protocol denotes the protocol version for the new hardened protocol, whereas the com_legacyprotocol cvar denotes the protocol version for the legacy protocol. If the value for com_protocol and com_legacyprotocol is identical, then the legacy protocol is always used. If com_legacyprotocol is set to 0, then support for the legacy protocol is disabled.

Mods that use a standalone engine obviously do not require dual protocol support, and it is turned off if the engine is compiled with STANDALONE per default. If you desire backwards compatibility to older versions of your game you can still enable it in q_shared.h by defining LEGACY_PROTOCOL.

cl_guid Support

cl_guid is a cvar which is part of the client's USERINFO string. Its value is a 32 character string made up of [a-f] and [0-9] characters. This value is pseudo-unique for every player. id's Quake 3 Arena client also sets cl_guid, but only if Punkbuster is enabled on the client.

If cl_guidServerUniq is non-zero (the default), then this value is also pseudo-unique for each server a client connects to (based on IP:PORT of the server).

The purpose of cl_guid is to add an identifier for each player on a server. This value can be reset by the client at any time so it's not useful for blocking access. However, it can have at least two uses in a mod's game code:

improve logging to allow statistical tools to index players by more than just name

granting some weak admin rights to players without requiring passwords