diff options
-rw-r--r-- | README.md | 667 |
1 files changed, 351 insertions, 316 deletions
@@ -39,7 +39,7 @@ renamed to id-readme.txt so as to prevent confusion. Please refer to the web-site for updated status. ---------------------------------------------- Compilation and installation ----- +# Compilation and installation For *nix 1. Change to the directory containing this readme. @@ -73,6 +73,7 @@ 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 @@ -108,13 +109,16 @@ Makefile.local: 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 ----- +# Console -New cvars +## 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 @@ -271,8 +275,11 @@ New cvars cl_aviMotionJpeg is enabled r_mode -2 - This new video mode automatically uses the desktop resolution. +``` + +## New commands -New commands +``` video [filename] - start video capture (use with demo command) stopvideo - stop video capture stopmusic - stop background music @@ -307,132 +314,150 @@ New commands 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: ---------------------------------------------------------- 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. +Note that this cvar MUST be set as a command line parameter. + +## SDL Keyboard Differences - * "Caps Lock" and "Num Lock" can not be used as normal binds since they +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 + * 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. + * 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. +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: +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 @@ -440,75 +465,79 @@ SDL Keyboard Differences "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. +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) -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) +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: +New style is controlled with 3 cvars: - sensitivity - cl_mouseAccel - cl_mouseAccelOffset +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 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: +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. +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_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). +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. +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. +If you try the new acceleration code and start using it, I'd be very +interested by your feedback. ----------------------------------------------------- README for Developers ----- +# 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. +## pk3dir -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). +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. - Add the following code snippet to q_shared.h: +## 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; @@ -516,165 +545,168 @@ pk3dir #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. +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 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 -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. +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? +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: +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 +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: - + +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 +So clients requesting a server list will only receive servers that have a +matching game name. + +Example line: - 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. + +set com_basegame basefoo +set com_homepath .foo + +set com_gamename foo - 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: +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 +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 + 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. +## 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: +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 +to texturetypes="tga jpg png" - Restart GtkRadiant and PNG textures are now available. +Restart GtkRadiant and PNG textures are now available. + +## Building with MinGW for pre Windows XP -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. +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 ----- +# 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 @@ -689,7 +721,7 @@ accepted as long as they are entirely optional, do not require new media and are off by default. ---------------------------------------------- Building Official Installers ----- +# 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, @@ -722,25 +754,28 @@ but we have some general guidelines: * Your installer will be mirrored to an "official" directory, thus making it a done deal. ------------------------------------------------------------------- Credits ----- + +# 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> + + * 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) + + * 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) |