summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md746
1 files changed, 746 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..a50026df
--- /dev/null
+++ b/README.md
@@ -0,0 +1,746 @@
+ ,---------------------------------------.
+ | _ _ ____ |
+ | (_)___ __ _ _ _ __ _| |_____|__ / |
+ | | / _ \/ _` | || / _` | / / -_)|_ \ |
+ | |_\___/\__, |\_,_\__,_|_\_\___|___/ |
+ | |_| |
+ | |
+ `---------- http://ioquake3.org --------'
+
+The intent of this project is to provide a baseline Quake 3 which may be used
+for further development and baseq3 fun.
+Some of the major features currently implemented are:
+
+ * SDL backend
+ * OpenAL sound API support (multiple speaker support and better sound
+ quality)
+ * Full x86_64 support on Linux
+ * VoIP support, both in-game and external support through Mumble.
+ * MinGW compilation support on Windows and cross compilation support on Linux
+ * AVI video capture of demos
+ * Much improved console autocompletion
+ * Persistent console history
+ * Colorized terminal output
+ * Optional Ogg Vorbis support
+ * Much improved QVM tools
+ * Support for various esoteric operating systems
+ * cl_guid support
+ * HTTP/FTP download redirection (using cURL)
+ * Multiuser support on Windows systems (user specific game data
+ is stored in "%APPDATA%\Quake3")
+ * PNG support
+ * Many, many bug fixes
+
+The map editor and associated compiling tools are not included. We suggest you
+use a modern copy from http://icculus.org/gtkradiant/.
+
+The original id software readme that accompanied the Q3 source release has been
+renamed to id-readme.txt so as to prevent confusion. Please refer to the
+web-site for updated status.
+
+
+--------------------------------------------- Compilation and installation -----
+
+For *nix
+ 1. Change to the directory containing this readme.
+ 2. Run 'make'.
+
+For Windows,
+ 1. Please refer to the excellent instructions here:
+ http://wiki.ioquake3.org/Building_ioquake3
+
+For Mac OS X, building a Universal Binary
+ 1. Install MacOSX SDK packages from XCode. For maximum compatibility,
+ install MacOSX10.4u.sdk and MacOSX10.3.9.sdk, and MacOSX10.2.8.sdk.
+ 2. Change to the directory containing this README file.
+ 3. Run './make-macosx-ub.sh'
+ 4. Copy the resulting ioquake3.app in /build/release-darwin-ub to your
+ /Applications/ioquake3 folder.
+
+Installation, for *nix
+ 1. Set the COPYDIR variable in the shell to be where you installed Quake 3
+ to. By default it will be /usr/local/games/quake3 if you haven't set it.
+ This is the path as used by the original Linux Q3 installer and subsequent
+ point releases.
+ 2. Run 'make copyfiles'.
+
+It is also possible to cross compile for Windows under *nix using MinGW. Your
+distribution may have mingw32 packages available. On debian/Ubuntu, you need to
+install 'mingw-w64'. Thereafter cross compiling is simply a case running
+'PLATFORM=mingw32 ARCH=x86 make' in place of 'make'. ARCH may also be set to
+x86_64.
+
+The following variables may be set, either on the command line or in
+Makefile.local:
+
+ CFLAGS - use this for custom CFLAGS
+ V - set to show cc command line when building
+ DEFAULT_BASEDIR - extra path to search for baseq3 and such
+ BUILD_SERVER - build the 'ioq3ded' server binary
+ BUILD_CLIENT - build the 'ioquake3' client binary
+ BUILD_BASEGAME - build the 'baseq3' binaries
+ BUILD_MISSIONPACK - build the 'missionpack' binaries
+ BUILD_GAME_SO - build the game shared libraries
+ BUILD_GAME_QVM - build the game qvms
+ BUILD_STANDALONE - build binaries suited for stand-alone games
+ SERVERBIN - rename 'ioq3ded' server binary
+ CLIENTBIN - rename 'ioquake3' client binary
+ BASEGAME - rename 'baseq3'
+ BASEGAME_CFLAGS - custom CFLAGS for basegame
+ MISSIONPACK - rename 'missionpack'
+ MISSIONPACK_CFLAGS - custom CFLAGS for missionpack (default '-DMISSIONPACK')
+ USE_OPENAL - use OpenAL where available
+ USE_OPENAL_DLOPEN - link with OpenAL at runtime
+ USE_CURL - use libcurl for http/ftp download support
+ USE_CURL_DLOPEN - link with libcurl at runtime
+ USE_CODEC_VORBIS - enable Ogg Vorbis support
+ USE_CODEC_OPUS - enable Ogg Opus support
+ USE_MUMBLE - enable Mumble support
+ USE_VOIP - enable built-in VoIP support
+ USE_INTERNAL_SPEEX - build internal speex library instead of dynamically
+ linking against system libspeex
+ USE_FREETYPE - enable FreeType support for rendering fonts
+ USE_INTERNAL_ZLIB - build and link against internal zlib
+ USE_INTERNAL_JPEG - build and link against internal JPEG library
+ USE_INTERNAL_OGG - build and link against internal ogg library
+ USE_INTERNAL_OPUS - build and link against internal opus/opusfile libraries
+ USE_LOCAL_HEADERS - use headers local to ioq3 instead of system ones
+ DEBUG_CFLAGS - C compiler flags to use for building debug version
+ COPYDIR - the target installation directory
+ TEMPDIR - specify user defined directory for temp files
+
+The defaults for these variables differ depending on the target platform.
+
+
+------------------------------------------------------------------ Console -----
+
+New cvars
+ cl_autoRecordDemo - record a new demo on each map change
+ cl_aviFrameRate - the framerate to use when capturing video
+ cl_aviMotionJpeg - use the mjpeg codec when capturing video
+ cl_guidServerUniq - makes cl_guid unique for each server
+ cl_cURLLib - filename of cURL library to load
+ cl_consoleKeys - space delimited list of key names or
+ characters that toggle the console
+ cl_mouseAccelStyle - Set to 1 for QuakeLive mouse acceleration
+ behaviour, 0 for standard q3
+ cl_mouseAccelOffset - Tuning the acceleration curve, see below
+
+ in_joystickUseAnalog - Do not translate joystick axis events
+ to keyboard commands
+
+ j_forward - Joystick analogue to m_forward,
+ for forward movement speed/direction.
+ j_side - Joystick analogue to m_side,
+ for side movement speed/direction.
+ j_up - Joystick up movement speed/direction.
+ j_pitch - Joystick analogue to m_pitch,
+ for pitch rotation speed/direction.
+ j_yaw - Joystick analogue to m_yaw,
+ for yaw rotation speed/direction.
+ j_forward_axis - Selects which joystick axis
+ controls forward/back.
+ j_side_axis - Selects which joystick axis
+ controls left/right.
+ j_up_axis - Selects which joystick axis
+ controls up/down.
+ j_pitch_axis - Selects which joystick axis
+ controls pitch.
+ j_yaw_axis - Selects which joystick axis
+ controls yaw.
+
+ s_useOpenAL - use the OpenAL sound backend if available
+ s_alPrecache - cache OpenAL sounds before use
+ s_alGain - the value of AL_GAIN for each source
+ s_alSources - the total number of sources (memory) to
+ allocate
+ s_alDopplerFactor - the value passed to alDopplerFactor
+ s_alDopplerSpeed - the value passed to alDopplerVelocity
+ s_alMinDistance - the value of AL_REFERENCE_DISTANCE for
+ each source
+ s_alMaxDistance - the maximum distance before sounds start
+ to become inaudible.
+ s_alRolloff - the value of AL_ROLLOFF_FACTOR for each
+ source
+ s_alGraceDistance - after having passed MaxDistance, length
+ until sounds are completely inaudible
+ s_alDriver - which OpenAL library to use
+ s_alDevice - which OpenAL device to use
+ s_alAvailableDevices - list of available OpenAL devices
+ s_alInputDevice - which OpenAL input device to use
+ s_alAvailableInputDevices - list of available OpenAL input devices
+ s_sdlBits - SDL bit resolution
+ s_sdlSpeed - SDL sample rate
+ s_sdlChannels - SDL number of channels
+ s_sdlDevSamps - SDL DMA buffer size override
+ s_sdlMixSamps - SDL mix buffer size override
+ s_backend - read only, indicates the current sound
+ backend
+ s_muteWhenMinimized - mute sound when minimized
+ s_muteWhenUnfocused - mute sound when window is unfocused
+ sv_dlRate - bandwidth allotted to PK3 file downloads
+ via UDP, in kbyte/s
+
+ com_ansiColor - enable use of ANSI escape codes in the tty
+ com_altivec - enable use of altivec on PowerPC systems
+ com_standalone (read only) - If set to 1, quake3 is running in
+ standalone mode
+ com_basegame - Use a different base than baseq3. If no
+ original Quake3 or TeamArena pak files
+ are found, this will enable running in
+ standalone mode
+ com_homepath - Specify name that is to be appended to the
+ home path
+ com_legacyprotocol - Specify protocol version number for
+ legacy Quake3 1.32c protocol, see
+ "Network protocols" section below
+ (startup only)
+ com_maxfpsUnfocused - Maximum frames per second when unfocused
+ com_maxfpsMinimized - Maximum frames per second when minimized
+ com_busyWait - Will use a busy loop to wait for rendering
+ next frame when set to non-zero value
+ com_pipefile - Specify filename to create a named pipe
+ through which other processes can control
+ the server while it is running.
+ Nonfunctional on Windows.
+ com_gamename - Gamename sent to master server in
+ getservers[Ext] query and infoResponse
+ "gamename" infostring value. Also used
+ for filtering local network games.
+ com_protocol - Specify protocol version number for
+ current ioquake3 protocol, see
+ "Network protocols" section below
+ (startup only)
+
+ in_joystickNo - select which joystick to use
+ in_availableJoysticks - list of available Joysticks
+ in_keyboardDebug - print keyboard debug info
+
+ sv_dlURL - the base of the HTTP or FTP site that
+ holds custom pk3 files for your server
+ sv_banFile - Name of the file that is used for storing
+ the server bans
+
+ net_ip6 - IPv6 address to bind to
+ net_port6 - port to bind to using the ipv6 address
+ net_enabled - enable networking, bitmask. Add up
+ number for option to enable it:
+ enable ipv4 networking: 1
+ enable ipv6 networking: 2
+ prioritise ipv6 over ipv4: 4
+ disable multicast support: 8
+ net_mcast6addr - multicast address to use for scanning for
+ ipv6 servers on the local network
+ net_mcastiface - outgoing interface to use for scan
+
+ r_allowResize - make window resizable (SDL only)
+ r_ext_texture_filter_anisotropic - anisotropic texture filtering
+ r_zProj - distance of observer camera to projection
+ plane in quake3 standard units
+ r_greyscale - desaturate textures, useful for anaglyph,
+ supports values in the range of 0 to 1
+ r_stereoEnabled - enable stereo rendering for techniques
+ like shutter glasses (untested)
+ r_anaglyphMode - Enable rendering of anaglyph images
+ red-cyan glasses: 1
+ red-blue: 2
+ red-green: 3
+ green-magenta: 4
+ To swap the colors for left and right eye
+ just add 4 to the value for the wanted
+ color combination. For red-blue and
+ red-green you probably want to enable
+ r_greyscale
+ r_stereoSeparation - Control eye separation. Resulting
+ separation is r_zProj divided by this
+ value in quake3 standard units.
+ See also
+ http://wiki.ioquake3.org/Stereo_Rendering
+ for more information
+ r_marksOnTriangleMeshes - Support impact marks on md3 models, MOD
+ developers should increase the mark
+ triangle limits in cg_marks.c if they
+ intend to use this.
+ r_sdlDriver - read only, indicates the SDL driver
+ backend being used
+ r_noborder - Remove window decoration from window
+ managers, like borders and titlebar.
+ r_screenshotJpegQuality - Controls quality of jpeg screenshots
+ captured using screenshotJPEG
+ r_aviMotionJpegQuality - Controls quality of video capture when
+ cl_aviMotionJpeg is enabled
+ r_mode -2 - This new video mode automatically uses the
+ desktop resolution.
+
+New commands
+ video [filename] - start video capture (use with demo command)
+ stopvideo - stop video capture
+ stopmusic - stop background music
+ minimize - Minimize the game and show desktop
+ togglemenu - causes escape key event for opening/closing menu, or
+ going to a previous menu. works in binds, even in UI
+
+ print - print out the contents of a cvar
+ unset - unset a user created cvar
+
+ 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)
+ listbans - list all currently active bans and exceptions
+ 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
+
+ which <filename/path> - print out the path on disk to a loaded item
+
+ execq <filename> - quiet exec command, doesn't print "execing file.cfg"
+
+ 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)
+
+
+--------------------------------------------------------- README for Users -----
+
+Using shared libraries instead of qvm
+ To force Q3 to use shared libraries instead of qvms run it with the following
+ parameters: +set sv_pure 0 +set vm_cgame 0 +set vm_game 0 +set vm_ui 0
+
+Using Demo Data Files
+ Copy demoq3/pak0.pk3 from the demo installer to your baseq3 directory. The
+ qvm files in this pak0.pk3 will not work, so you have to use the native
+ shared libraries or qvms from this project. To use the new qvms, they must be
+ put into a pk3 file. A pk3 file is just a zip file, so any compression tool
+ that can create such files will work. The shared libraries should already be
+ in the correct place. Use the instructions above to use them.
+
+ Please bear in mind that you will not be able to play online using the demo
+ data, nor is it something that we like to spend much time maintaining or
+ supporting.
+
+Help! Ioquake3 won't give me an fps of X anymore when setting com_maxfps!
+ Ioquake3 now uses the select() system call to wait for the rendering of the
+ next frame when com_maxfps was hit. This will improve your CPU load
+ considerably in these cases. However, not all systems may support a
+ granularity for its timing functions that is required to perform this waiting
+ correctly. For instance, ioquake3 tells select() to wait 2 milliseconds, but
+ really it can only wait for a multiple of 5ms, i.e. 5, 10, 15, 20... ms.
+ In this case you can always revert back to the old behaviour by setting the
+ cvar com_busyWait to 1.
+
+Using HTTP/FTP Download Support (Server)
+ 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_allowDownloads
+ 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://ioquake3.org", fs_game is "baseq3", and the client is
+ missing "test.pk3", it will attempt to download from the URL
+ "http://ioquake3.org/baseq3/test.pk3"
+
+ sv_allowDownload's value is now a bitmask made up of the following
+ flags:
+ 1 - ENABLE
+ 4 - do not use UDP downloads
+ 8 - do not ask the client to disconnect when using HTTP/FTP
+
+ 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.
+
+ 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.
+
+Using HTTP/FTP Download Support (Client)
+ Simply setting cl_allowDownload to 1 will enable HTTP/FTP downloads
+ assuming ioquake3 was compiled with USE_CURL=1 (the default).
+ like sv_allowDownload, cl_allowDownload also uses a bitmask value
+ supporting the following flags:
+ 1 - ENABLE
+ 2 - do not use HTTP/FTP downloads
+ 4 - do not use UDP downloads
+
+ When ioquake3 is built with USE_CURL_DLOPEN=1 (default on some platforms),
+ it will use the value of the cvar cl_cURLLib as the filename of the cURL
+ library to dynamically load.
+
+Multiuser Support on Windows systems
+ On Windows, all user specific files such as autogenerated configuration,
+ demos, videos, screenshots, and autodownloaded pk3s are now saved in a
+ directory specific to the user who is running ioquake3.
+
+ On NT-based such as Windows XP, this is usually a directory named:
+ "C:\Documents and Settings\%USERNAME%\Application Data\Quake3\"
+
+ Windows 95, Windows 98, and Windows ME will use a directory like:
+ "C:\Windows\Application Data\Quake3"
+ in single-user mode, or:
+ "C:\Windows\Profiles\%USERNAME%\Application Data\Quake3"
+ if multiple logins have been enabled.
+
+ In order to access this directory more easily, the installer may create a
+ Shortcut which has its target set to:
+ "%APPDATA%\Quake3\"
+ This Shortcut would work for all users on the system regardless of the
+ locale settings. Unfortunately, this environment variable is only
+ present on Windows NT based systems.
+
+ You can revert to the old single-user behaviour by setting the fs_homepath
+ cvar to the directory where ioquake3 is installed. For example:
+ ioquake3.exe +set fs_homepath "c:\ioquake3"
+ Note that this cvar MUST be set as a command line parameter.
+
+SDL Keyboard Differences
+ ioquake3 clients have different keyboard behaviour compared to the original
+ Quake3 clients.
+
+ * "Caps Lock" and "Num Lock" can not be used as normal binds since they
+ do not send a KEYUP event until the key is pressed again.
+
+ * SDL > 1.2.9 does not support disabling dead key recognition. In order to
+ send dead key characters (e.g. ~, ', `, and ^), you must key a Space (or
+ sometimes the same character again) after the character to send it on
+ many international keyboard layouts.
+
+ * The SDL client supports many more keys than the original Quake3 client.
+ For example the keys: "Windows", "SysReq", "ScrollLock", and "Break".
+ For non-US keyboards, all of the so called "World" keys are now supported
+ as well as F13, F14, F15, and the country-specific mode/meta keys.
+
+ On many international layouts the default console toggle keys are also dead
+ keys, meaning that dropping the console potentially results in
+ unintentionally initiating the keying of a dead key. Furthermore SDL 1.2's
+ dead key support is broken by design and Q3 doesn't support non-ASCII text
+ entry, so the chances are you won't get the correct character anyway.
+
+ If you use such a keyboard layout, you can set the cvar cl_consoleKeys. This
+ is a space delimited list of key names that will toggle the console. The key
+ names are the usual Q3 names e.g. "~", "`", "c", "BACKSPACE", "PAUSE",
+ "WINDOWS" etc. It's also possible to use ASCII characters, by hexadecimal
+ number. Some example values for cl_consoleKeys:
+
+ "~ ` 0x7e 0x60" Toggle on ~ or ` (the default)
+ "WINDOWS" Toggle on the Windows key
+ "c" Toggle on the c key
+ "0x43" Toggle on the C character (Shift-c)
+ "PAUSE F1 PGUP" Toggle on the Pause, F1 or Page Up keys
+
+ Note that when you elect a set of console keys or characters, they cannot
+ then be used for binding, nor will they generate characters when entering
+ text. Also, in addition to the nominated console keys, Shift-ESC is hard
+ coded to always toggle the console.
+
+QuakeLive mouse acceleration (patch and this text written by TTimo from id)
+ I've been using an experimental mouse acceleration code for a while, and
+ decided to make it available to everyone. Don't be too worried if you don't
+ understand the explanations below, this is mostly intended for advanced
+ players:
+ To enable it, set cl_mouseAccelStyle 1 (0 is the default/legacy behavior)
+
+ New style is controlled with 3 cvars:
+
+ sensitivity
+ cl_mouseAccel
+ cl_mouseAccelOffset
+
+ The old code (cl_mouseAccelStyle 0) can be difficult to calibrate because if
+ you have a base sensitivity setup, as soon as you set a non zero acceleration
+ your base sensitivity at low speeds will change as well. The other problem
+ with style 0 is that you are stuck on a square (power of two) acceleration
+ curve.
+
+ The new code tries to solve both problems:
+
+ Once you setup your sensitivity to feel comfortable and accurate enough for
+ low mouse deltas with no acceleration (cl_mouseAccel 0), you can start
+ increasing cl_mouseAccel and tweaking cl_mouseAccelOffset to get the
+ amplification you want for high deltas with little effect on low mouse deltas.
+
+ cl_mouseAccel is a power value. Should be >= 1, 2 will be the same power curve
+ as style 0. The higher the value, the faster the amplification grows with the
+ mouse delta.
+
+ cl_mouseAccelOffset sets how much base mouse delta will be doubled by
+ acceleration. The closer to zero you bring it, the more acceleration will
+ happen at low speeds. This is also very useful if you are changing to a new
+ mouse with higher dpi, if you go from 500 to 1000 dpi, you can divide your
+ cl_mouseAccelOffset by two to keep the same overall 'feel' (you will likely
+ gain in precision when you do that, but that is not related to mouse
+ acceleration).
+
+ Mouse acceleration is tricky to configure, and when you do you'll have to
+ re-learn your aiming. But you will find that it's very much forth it in the
+ long run.
+
+ If you try the new acceleration code and start using it, I'd be very
+ interested by your feedback.
+
+
+---------------------------------------------------- README for Developers -----
+
+pk3dir
+ ioquake3 has a useful new feature for mappers. 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.
+
+64bit mods
+ If you wish to compile external mods as shared libraries on a 64bit platform,
+ and the mod source is derived from the id Q3 SDK, you will need to modify the
+ interface code a little. Open the files ending in _syscalls.c and change
+ every instance of int to intptr_t in the declaration of the syscall function
+ pointer and the dllEntry function. Also find the vmMain function for each
+ module (usually in cg_main.c g_main.c etc.) and similarly replace the return
+ value in the prototype with intptr_t (arg0, arg1, ...stay int).
+
+ Add the following code snippet to q_shared.h:
+
+ #ifdef Q3_VM
+ typedef int intptr_t;
+ #else
+ #include <stdint.h>
+ #endif
+
+ Note if you simply wish to run mods on a 64bit platform you do not need to
+ recompile anything since by default Q3 uses a virtual machine system.
+
+Creating mods compatible with Q3 1.32b
+ If you're using this package to create mods for the last official release of
+ Q3, it is necessary to pass the commandline option '-vq3' to your invocation
+ of q3asm. This is because by default q3asm outputs an updated qvm format that
+ is necessary to fix a bug involving the optimizing pass of the x86 vm JIT
+ compiler.
+
+Creating standalone games
+ Have you finished the daunting task of removing all dependencies on the Q3
+ game data? You probably now want to give your users the opportunity to play
+ the game without owning a copy of Q3, which consequently means removing cd-key
+ and authentication server checks. In addition to being a straightforward Q3
+ client, ioquake3 also purports to be a reliable and stable code base on which
+ to base your game project.
+
+ However, before you start compiling your own version of ioquake3, you have to
+ ask yourself: Have we changed or will we need to change anything of importance
+ in the engine?
+
+ If your answer to this question is "no", it probably makes no sense to build
+ your own binaries. Instead, you can just use the pre-built binaries on the
+ website. Just make sure the game is called with:
+
+ +set com_basegame <yournewbase>
+
+ in any links/scripts you install for your users to start the game. The
+ binary must not detect any original quake3 game pak files. If this
+ condition is met, the game will set com_standalone to 1 and is then running
+ in stand alone mode.
+
+ If you want the engine to use a different directory in your homepath than
+ e.g. "Quake3" on Windows or ".q3a" on Linux, then set a new name at startup
+ by adding
+
+ +set com_homepath <homedirname>
+
+ to the command line. You can also control which game name to use when talking
+ to the master server:
+
+ +set com_gamename <gamename>
+
+ So clients requesting a server list will only receive servers that have a
+ matching game name.
+
+ Example line:
+
+ +set com_basegame basefoo +set com_homepath .foo
+ +set com_gamename foo
+
+
+ If you really changed parts that would make vanilla ioquake3 incompatible with
+ your mod, we have included another way to conveniently build a stand-alone
+ binary. Just run make with the option BUILD_STANDALONE=1. Don't forget to edit
+ the PRODUCT_NAME and subsequent #defines in qcommon/q_shared.h with
+ information appropriate for your project.
+
+ While a lot of work has been put into ioquake3 that you can benefit from free
+ of charge, it does not mean that you have no obligations to fulfill. Please be
+ aware that as soon as you start distributing your game with an engine based on
+ our sources we expect you to fully comply with the requirements as stated in
+ the GPL. That includes making sources and modifications you made to the
+ ioquake3 engine as well as the game-code used to compile the .qvm files for
+ the game logic freely available to everyone. Furthermore, note that the "QIIIA
+ Game Source License" prohibits distribution of mods that are intended to
+ operate on a version of Q3 not sanctioned by id software:
+
+ "with this Agreement, ID grants to you the non-exclusive and limited right
+ to distribute copies of the Software ... for operation only with the full
+ version of the software game QUAKE III ARENA"
+
+ This means that if you're creating a standalone game, you cannot use said
+ license on any portion of the product. As the only other license this code has
+ been released under is the GPL, this is the only option.
+
+ This does NOT mean that you cannot market this game commercially. The GPL does
+ not prohibit commercial exploitation and all assets (e.g. textures, sounds,
+ maps) created by yourself are your property and can be sold like every other
+ game you find in stores.
+
+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
+ your mod's game code:
+ 1) improve logging to allow statistical tools to index players by more
+ than just name
+ 2) granting some weak admin rights to players without requiring passwords
+
+PNG support
+ ioquake3 supports the use of PNG (Portable Network Graphic) images as
+ textures. It should be noted that the use of such images in a map will
+ result in missing placeholder textures where the map is used with the id
+ Quake 3 client or earlier versions of ioquake3.
+
+ Recent versions of GtkRadiant and q3map2 support PNG images without
+ modification. However GtkRadiant is not aware that PNG textures are supported
+ by ioquake3. To change this behaviour open the file 'q3.game' in the 'games'
+ directory of the GtkRadiant base directory with an editor and change the
+ line:
+
+ texturetypes="tga jpg"
+
+ to
+
+ texturetypes="tga jpg png"
+
+ Restart GtkRadiant and PNG textures are now available.
+
+Building with MinGW for pre Windows XP
+ IPv6 support requires a header named "wspiapi.h" to abstract away from
+ differences in earlier versions of Windows' IPv6 stack. There is no MinGW
+ equivalent of this header and the Microsoft version is obviously not
+ redistributable, so in its absence we're forced to require Windows XP.
+ However if this header is acquired separately and placed in the qcommon/
+ directory, this restriction is lifted.
+
+
+------------------------------------------------------------- Contributing -----
+
+Please send all patches to bugzilla (https://bugzilla.icculus.org), or join the
+mailing list (http://lists.ioquake.org/listinfo.cgi/ioquake3-ioquake.org) and
+submit your patch there. The best case scenario is that you submit your patch
+to bugzilla, and then post the URL to the mailing list.
+
+The focus for ioq3 is to develop a stable base suitable for further development
+and provide players with the same Quake 3 experience they've had for years. As
+such ioq3 does not have any significant graphical enhancements and none are
+planned at this time. However, improved graphics and sound patches will be
+accepted as long as they are entirely optional, do not require new media and
+are off by default.
+
+
+--------------------------------------------- Building Official Installers -----
+
+We need help getting automated installers on all the platforms that ioquake3
+supports. We don't necessarily care about all the installers being identical,
+but we have some general guidelines:
+
+ * Please include the id patch pk3s in your installer, which are available
+ from http://ioquake3.org/patch-data/ subject to agreement to the id
+ EULA. Your installer shall also ask the user to agree to this EULA (which
+ is in the /web/include directory for your convenience) and subsequently
+ refuse to continue the installation of the patch pk3s and pak0.pk3 if they
+ do not.
+
+ * Please don't require pak0.pk3, since not everyone using the engine
+ plans on playing Quake 3 Arena on it. It's fine to (optionally) assist the
+ user in copying the file or tell them how.
+
+ * It is fine to just install the binaries without requiring id EULA agreement,
+ providing pak0.pk3 and the patch pk3s are not referred to or included in the
+ installer.
+
+ * Please include at least an SDL so/dylib/dll on every platform.
+
+ * Please include an OpenAL so/dylib/dll, since every platform should be using
+ it by now.
+
+ * Please contact the mailing list when you've made your installer.
+
+ * Please be prepared to alter your installer on the whim of the maintainers.
+
+ * Your installer will be mirrored to an "official" directory, thus making it
+ a done deal.
+
+------------------------------------------------------------------ Credits -----
+
+Maintainers
+ James Canete <use.less01@gmail.com>
+ Ludwig Nussel <ludwig.nussel@suse.de>
+ Thilo Schulz <arny@ats.s.bawue.de>
+ Tim Angus <tim@ngus.net>
+ Tony J. White <tjw@tjw.org>
+ Zachary J. Slater <zachary@ioquake.org>
+ Zack Middleton <zturtleman@gmail.com>
+
+Significant contributions from
+ Ryan C. Gordon <icculus@icculus.org>
+ Andreas Kohn <andreas@syndrom23.de>
+ Joerg Dietrich <Dietrich_Joerg@t-online.de>
+ Stuart Dalton <badcdev@gmail.com>
+ Vincent S. Cojot <vincent at cojot dot name>
+ optical <alex@rigbo.se>
+ Aaron Gyes <floam@aaron.gy>
+
+
+ [![githalytics.com alpha](https://cruel-carlota.pagodabox.com/f88af076b5015c62b699968f6772c3a5 "githalytics.com")](http://githalytics.com/ioquake/ioq3)