fixed "bug" where you can select opposite buttons for the same function like left and right arrow for turn left. now you can define only one button for the selected funktion.

This commit is contained in:
q3rally 2016-05-17 11:41:23 +00:00
parent 4a2cd6fbe4
commit 942efa707b
13 changed files with 13 additions and 5233 deletions

View file

@ -1,281 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
http://wiki.ioquake3.org/NotToDo

View file

@ -1,739 +0,0 @@
,---------------------------------------.
| _ _ ____ |
| (_)___ __ _ _ _ __ _| |_____|__ / |
| | / _ \/ _` | || / _` | / / -_)|_ \ |
| |_\___/\__, |\_,_\__,_|_\_\___|___/ |
| |_| |
| |
`---------- 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://www.qeradiant.com/.
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. A
script is available to build a cross compilation environment from
http://www.libsdl.org/extras/win32/cross/build-cross.sh. The gcc/binutils
version numbers that the script downloads may need to be altered.
Alternatively, your distribution may have mingw32 packages available. On
debian/Ubuntu, these are mingw32, mingw32-runtime and mingw32-binutils. Cross
compiling is simply a case of using './cross-make-mingw.sh' in place of 'make',
though you may find you need to change the value of the variables in this
script to match your environment.
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_CLIENT_SMP - build the 'ioquake3-smp' 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_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_OLD_VM64 - use Ludwig Nussel's old JIT compiler implementation
for x86_64
USE_INTERNAL_ZLIB - build and link against internal zlib
USE_INTERNAL_JPEG - build and link against internal JPEG library
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
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 -----
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>

View file

@ -1 +0,0 @@
http://wiki.ioquake3.org/Ioquake3_Road_Map

View file

@ -319,24 +319,15 @@ static bind_t g_bindings[] =
{"+right", "turn right", ID_RIGHT, ANIM_TURNRIGHT, K_RIGHTARROW, -1, -1, -1},
{"+strafe", "sidestep / turn", ID_STRAFE, ANIM_IDLE, K_ALT, -1, -1, -1},
*/
/*
{"+forward", "accelerate", ID_ACCEL, ANIM_WALK, K_UPARROW, -1, -1, -1},
{"+back", "brake", ID_BRAKE, ANIM_BACK, K_DOWNARROW, -1, -1, -1},
*/
{"+forward", "accelerate", ID_ACCEL, ANIM_WALK, K_UPARROW, -1, -1},
{"+back", "brake", ID_BRAKE, ANIM_BACK, K_DOWNARROW, -1, -1},
{"+button14", "handbrake", ID_HANDBRAKE, ANIM_BACK, K_SPACE, -1, -1, -1},
{"+speed", "turbo", ID_TURBO, ANIM_TURBO, K_SHIFT, -1, -1, -1},
{"+moveup", "up", ID_MOVEUP, ANIM_JUMP, 'x', -1, -1, -1},
{"+movedown", "down", ID_MOVEDOWN, ANIM_CROUCH, 'c', -1, -1, -1},
{"+hud", "show HUD", ID_SHOWHUD2, 0, 'q', -1, -1, -1},
{"+left", "turn left", ID_LEFT, ANIM_TURNLEFT, K_LEFTARROW, -1, -1},
{"+right", "turn right", ID_RIGHT, ANIM_TURNRIGHT, K_RIGHTARROW, -1, -1},
/*
{"+left", "turn left", ID_LEFT, ANIM_TURNLEFT, K_LEFTARROW, -1, -1, -1},
{"+right", "turn right", ID_RIGHT, ANIM_TURNRIGHT, K_RIGHTARROW, -1, -1, -1},
*/
{"+button12", "rear attack", ID_REARATTACK, ANIM_REARATTACK, K_KP_INS, -1, -1, -1},
// END
{"+lookup", "look up", ID_LOOKUP, ANIM_LOOKUP, K_PGDN, -1, -1, -1},
@ -808,7 +799,7 @@ static void Controls_DrawKeyBinding( void *self )
int b2;
qboolean c;
char name[32];
char name2[32];
// char name2[32];
a = (menuaction_s*) self;
@ -825,14 +816,15 @@ static void Controls_DrawKeyBinding( void *self )
trap_Key_KeynumToStringBuf( b1, name, 32 );
Q_strupr(name);
b2 = g_bindings[a->generic.id].bind2;
if (b2 != -1)
{
trap_Key_KeynumToStringBuf( b2, name2, 32 );
Q_strupr(name2);
// b2 = g_bindings[a->generic.id].bind2;
// if (b2 != -1)
// {
// trap_Key_KeynumToStringBuf( b2, name2, 32 );
// Q_strupr(name2);
strcat( name, " or " );
strcat( name, name2 );
// strcat( name, " or " );
strcat( name );
// strcat( name, name2 );
}
}

View file

@ -55,7 +55,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define BASETA "missionpack"
#ifndef PRODUCT_VERSION
#define PRODUCT_VERSION "v0.0.0.4 r151"
#define PRODUCT_VERSION "v0.0.0.4 r153"
#endif
#define Q3_VERSION PRODUCT_NAME " " PRODUCT_VERSION

View file

@ -1,145 +0,0 @@
Quake III Arena GPL source release
==================================
This file contains the following sections:
LICENSE
GENERAL NOTES
LICENSE
=======
See COPYING.txt for the GNU GENERAL PUBLIC LICENSE
Some source code in this release is not covered by the GPL:
IO on .zip files using portions of zlib
-----------------------------------------------------------------------------
lines file(s)
4299 code/qcommon/unzip.c
4546 libs/pak/unzip.cpp
Copyright (C) 1998 Gilles Vollant
zlib is Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
standard C library replacement routines
-----------------------------------------------------------------------------
lines file(s)
1324 code/game/bg_lib.c
Copyright (c) 1992, 1993
The Regents of the University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
ADPCM coder/decoder
-----------------------------------------------------------------------------
lines file(s)
330 code/client/snd_adpcm.c
Copyright 1992 by Stichting Mathematisch Centrum, Amsterdam, The
Netherlands.
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
JPEG library
-----------------------------------------------------------------------------
code/jpeg-6
libs/jpeg6
Copyright (C) 1991-1995, Thomas G. Lane
Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.
These conditions apply to any software derived from or based on the IJG code,
not just to the unmodified library. If you use our work, you ought to
acknowledge us.
NOTE: unfortunately the README that came with our copy of the library has
been lost, so the one from release 6b is included instead. There are a few
'glue type' modifications to the library to make it easier to use from
the engine, but otherwise the dependency can be easily cleaned up to a
better release of the library.
GENERAL NOTES
=============
A short summary of the file layout:
code/ Quake III Arena source code ( renderer, game code, OS layer etc. )
code/bspc bot routes compiler source code
lcc/ the retargetable C compiler ( produces assembly to be turned into qvm bytecode by q3asm )
q3asm/ assembly to qvm bytecode compiler
q3map/ map compiler ( .map -> .bsp ) - this is the version that comes with Q3Radiant 200f
q3radiant/ Q3Radiant map editor build 200f ( common/ and libs/ are support dirs for radiant )
While we made sure we were still able to compile the game on Windows, GNU/Linux
and Mac, this build didn't get any kind of extensive testing so it may not work
completely right. Whenever an id game is released under GPL, several projects
start making the source code more friendly to nowaday's compilers and
environements. If you are picking up this release weeks/months/years after we
uploaded it, you probably want to look around on the net for cleaned up
versions of this codebase as well.

View file

@ -1,54 +0,0 @@
##########################################################
# Info about the MD4 format supported by the ioQ3 engine #
##########################################################
All models included with the original version of Quake3 from id soft are in
the MD3 format. Animations in this format are realized by saving the position
of every vertex in each frame which can make these files pretty large.
ID started work on a newer format, the MD4 format which they never finished.
This format uses a skeleton with all vertices "attached" to their bones.
Because only the position of the bones must be stored for each frame and the
number of bones is not very high this format is more efficient when
doing animations.
Raven software "finished" this format originally started by ID and included
it in their game EliteForce. They called their model format "MDR" which is
the name I have used throughout the sourcecode and I will continue using in
this readme. Since the code on how to handle those MDR files was released
under a GPL licence a long time ago, I was able to implement this format for
Quake3 and do some efficiency improvements.
To enable the support for this model format, go to qcommon/qfiles.h,
remove the comment slashes for #define RAVENMD4 and then compile the engine.
Including finished MDR models in your projects is easy: just load the model
files in your cgame code as you would normally load an MD3 model. The engine
will expect the models to have a ".mdr" suffix.
The rest is pretty much the same: Selecting the current animation frame,
adding a skin to the model, etc..
You can check out the original eliteforce game sourcecode if you want to
have examples on using the md4s. The source can be got at:
http://eliteforce2.filefront.com/
You can also get reference MDR files there, just go to the model/skin
section there and pick something to download.
Now here comes the tricky part:
Creating files with this format. There are tools to create these kinds of
MDR files, like a plugin for Milkshape.
A pretty good overview about MDR file creation is available at
http://synapse.vgfort.com/
You can find some tools for creating MDR files there.
On a sidenote:
There is an independent implementation of the MD4 file format available
here:
http://gongo.quakedev.com/
At this time, ioquake3 has no support for these models though that may
change in the future. Nevertheless, he has got a tool for skeletal
animations that can possibly be hooked into the MDR format with some
modifications.
Good luck!
- Thilo Schulz

View file

@ -1,606 +0,0 @@
Rend2
<insert ascii art here>
Rend2 is an alternate renderer for ioquake3. It aims to implement modern
features and technologies into the id tech 3 engine, but without sacrificing
compatibility with existing Quake 3 mods.
-------------------------------------------------------------------------------
FEATURES
-------------------------------------------------------------------------------
- Compatible with most vanilla Quake 3 mods.
- HDR Rendering, and support for HDR lightmaps
- Tone mapping and auto-exposure.
- Cascaded shadow maps.
- Multisample anti-aliasing.
- Texture upsampling.
- Advanced materials support.
- Advanced shading and specular methods.
- sRGB support.
- LATC and BPTC texture compression support.
- Screen-space ambient occlusion.
-------------------------------------------------------------------------------
COMPILATION
-------------------------------------------------------------------------------
For *nix/MinGW:
1. Download an appropriate version of the ioq3 source code. For version 32 of
Rend2, r2328 should do, though the latest may work as well. For
details on how to do this, see http://ioquake3.org/get-it/source-codes/ .
2. Copy the patch file (for v32, vbos-glsl-31a.diff) into the directory you put
the ioq3 source code. There should be a README in that directory.
3. Run 'patch -p0 <vbos-glsl-31a.diff' then 'make'.
Compiling on different platforms and with different compilers hasn't been
tested. The MSVC project file should work, but it hasn't been tested.
-------------------------------------------------------------------------------
INSTALLATION
-------------------------------------------------------------------------------
For *nix:
1. This should be identical to installing ioq3. Check their README for more
details.
For Win32:
1. Have a Quake 3 install, fully patched.
2. Copy the following files into Quake 3's install directory:
ioquake3.x86.exe
renderer_opengl1_x86.dll
renderer_rend2_x86.dll
These can be found in build/release-mingw32-x86 after compiling, or bug
someone to release binaries.
-------------------------------------------------------------------------------
RUNNING
-------------------------------------------------------------------------------
1. Start ioquake3. (ioquake3.x86.exe on Win32)
2. Open the console (default key ~) and type '/cl_renderer rend2; vid_restart'
3. Enjoy.
-------------------------------------------------------------------------------
CVARS
-------------------------------------------------------------------------------
Cvars for simple rendering features:
r_ext_compressed_textures - Automatically compress textures.
0 - No texture compression. (default)
1 - DXT/LATC texture compression if
supported.
2 - BPTC texture compression if supported.
r_ext_framebuffer_multisample - Multisample Anti-aliasing.
0 - None. (default)
1-16 - Some.
17+ - Too much!
r_ssao - Enable screen-space ambient occlusion.
Currently eats framerate and has some
visible artifacts.
0 - No. (default)
1 - Yes.
r_softOverbright - Enable software overbrighting. This enables
overbrighting even in a window. Is disabled
when r_toneMap 1 and r_hdr 1.
0 - No.
1 - Yes. (default)
Cvars for HDR and tonemapping:
r_hdr - Do scene rendering in a framebuffer with
high dynamic range. (Less banding, and
exposure changes look much better)
0 - No.
1 - Yes. (default)
r_cameraExposure - Cheat. Alter brightness, in powers of two.
-2 - 4x as dark.
0 - Normal. (default)
0.5 - Sqrt(2)x as bright.
2 - 4x as bright.
r_postProcess - Enable post-processing.
0 - No.
1 - Yes. (default)
r_toneMap - Enable tone mapping. Requires
r_hdr and r_postProcess.
0 - No.
1 - Yes. (default)
r_forceToneMap - Cheat. Override built-in and map tonemap
settings and use cvars r_forceToneMapAvg,
r_forceToneMapMin, and r_forceToneMapMax.
0 - No. (default)
1 - Yes.
r_forceToneMapAvg - Cheat. Map average scene luminance to this
value, in powers of two. Requires
r_forceToneMap.
-2.0 - Dark.
-1.0 - Kinda dark. (default).
2.0 - Too bright.
r_forceToneMapMin - Cheat. After mapping average, luminance
below this level is mapped to black.
Requires r_forceToneMap.
-5 - Not noticeable.
-3.25 - Normal. (default)
0.0 - Too dark.
r_forceToneMapMin - Cheat. After mapping average, luminance
above this level is mapped to white.
Requires r_forceToneMap.
0.0 - Too bright.
1.0 - Normal. (default).
2.0 - Washed out.
r_autoExposure - Do automatic exposure based on scene
brightness. Hardcoded to -2 to 2 on maps
that don't specify otherwise. Requires
r_hdr, r_postprocess, and r_toneMap.
0 - No.
1 - Yes. (default)
r_forceAutoExposure - Cheat. Override built-in and map auto
exposure settings and use cvars
r_forceAutoExposureMin and
r_forceAutoExposureMax.
0 - No. (default)
1 - Yes.
r_forceAutoExposureMin - Cheat. Set minimum exposure to this value,
in powers of two. Requires
r_forceAutoExpsure.
-3.0 - Dimmer.
-2.0 - Normal. (default)
-1.0 - Brighter.
r_forceAutoExposureMax - Cheat. Set maximum exposure to this value,
in powers of two. Requires
r_forceAutoExpsure.
1.0 - Dimmer.
2.0 - Normal. (default)
3.0 - Brighter.
r_srgb - Treat all input textures as sRGB, and do
final rendering in a sRGB framebuffer. Only
required if assets were created with it in
mind.
0 - No. (default)
1 - Yes.
Cvars for advanced material usage:
r_normalMapping - Enable normal mapping for materials that
support it, and also specify advanced
shading techniques.
0 - No.
1 - Yes. (default)
2 - Yes, and use Oren-Nayar reflectance
model.
3 - Yes, and use tri-Ace's Oren-Nayar
reflectance model.
r_specularMapping - Enable specular mapping for materials that
support it, and also specify advanced
specular techniques.
0 - No.
1 - Yes, and use tri-Ace. (default)
2 - Yes, and use Blinn-Phong.
3 - Yes, and use Cook-Torrance.
4 - Yes, and use Torrance-Sparrow.
r_deluxeMapping - Enable deluxe mapping. (Map is compiled
with light directions.) Even if the map
doesn't have deluxe mapping compiled in,
an approximation based on the lightgrid
will be used.
0 - No.
1 - Yes. (default)
r_parallaxMapping - Enable parallax mapping for materials that
support it.
0 - No. (default)
1 - Yes.
Cvars for image interpolation and generation:
r_imageUpsample - Use interpolation to artifically increase
the resolution of all textures. Looks good
in certain circumstances.
0 - No. (default)
1 - 2x size.
2 - 4x size.
3 - 8x size, etc
r_imageUpsampleMaxSize - Maximum texture size when upsampling
textures.
1024 - Default.
2048 - Really nice.
4096 - Really slow.
8192 - Crash.
r_imageUpsampleType - Type of interpolation when upsampling
textures.
0 - None. (probably broken)
1 - Bad but fast (default,
FCBI without second derivatives)
2 - Okay but slow (normal FCBI)
r_genNormalMaps - Naively generate normal maps for all
textures.
0 - Don't. (default)
1 - Do.
Cvars for the sunlight and cascaded shadow maps:
r_forceSun - Cheat. Force sunlight and shadows, using sun
position from sky material.
0 - Don't. (default)
1 - Do.
2 - Sunrise, sunset.
r_forceSunMapLightScale - Cheat. Scale map brightness by this factor
when r_forceSun 1.
0.5 - Default
r_forceSunLightScale - Cheat. Scale sun brightness by this factor
when r_forceSun 1.
0.5 - Default
r_forceSunAmbientScale - Cheat. Scale sun ambient brightness by this
factor when r_forceSun 1.
0.2 - Default
r_sunShadows - Enable sunlight and cascaded shadow maps for
it on maps that support it.
0 - No.
1 - Yes. (default)
r_shadowFilter - Enable filtering shadows for a smoother
look.
0 - No.
1 - Some. (default)
2 - Much.
r_shadowMapSize - Size of each cascaded shadow map.
256 - 256x256, ugly, probably shouldn't
go below this.
512 - 512x512, passable.
1024 - 1024x1024, good. (default)
2048 - 2048x2048, extreme.
4096 - 4096x4096, indistinguishable from
2048.
Cvars that you probably don't care about or shouldn't mess with:
r_mergeMultidraws - Optimize number of calls to
glMultiDrawElements().
0 - Don't.
1 - Do some. (default)
2 - Do more than necessary (eats CPU).
r_mergeLeafSurfaces - Merge surfaces that share common materials
and a common leaf. Speeds up rendering.
0 - Don't.
1 - Do. (default)
r_recalcMD3Normals - Recalculate the normals when loading an MD3.
Fixes normal maps in some cases but looks
ugly in others.
0 - Don't. (default)
1 - Do.
r_depthPrepass - Do a depth-only pass before rendering.
Speeds up rendering in cases where advanced
features are used. Required for
r_sunShadows.
0 - No.
1 - Yes. (default)
r_normalAmbient - Split map light into ambient and directed
portions when doing deluxe mapping. Not
very useful.
0 - Don't. (default).
0.3 - 30% ambient, 70% directed.
1.0 - 100% ambient.
r_mergeLightmaps - Merge the small (128x128) lightmaps into
2 or fewer giant (4096x4096) lightmaps.
Easy speedup.
0 - Don't.
1 - Do. (default)
r_shadowCascadeZNear - Near plane for shadow cascade frustums.
4 - Default.
r_shadowCascadeZFar - Far plane for shadow cascade frustums.
3072 - Default.
r_shadowCascadeZBias - Z-bias for shadow cascade frustums.
-256 - Default.
Cvars that have broken bits:
r_dlightMode - Change how dynamic lights look.
0 - Quake 3 style dlights, fake
brightening. (default)
1 - Actual lighting, no shadows.
2 - Light and shadows. (broken)
r_pshadowDist - Virtual camera distance when creating shadow
maps for projected shadows. Deprecated.
cg_shadows - Old shadow code. Deprecated.
-------------------------------------------------------------------------------
MATERIALS
-------------------------------------------------------------------------------
Rend2 supports .mtr files, which are basically the same as .shader files, and
are located in the same place, but override existing .shader files if they
exist. This is to allow maps and mods to use the new material features without
breaking the map when using the old renderer.
Here's an example of a material stored in one, showing off some new features:
textures/abandon/grass
{
qer_editorimage textures/abandon/grass.jpg
{
map textures/abandon/grass3_256_d.jpg
rgbgen identity
}
{
stage normalparallaxmap
map textures/abandon/grass3_1024_n.png
}
{
stage specularmap
map textures/abandon/grass3_256_s.png
specularReflectance 0.12
specularExponent 16
}
{
map $lightmap
blendfunc GL_DST_COLOR GL_ZERO
}
}
The first thing to notice is that this is basically the same as old Quake 3
shader files. The next thing to notice are the new keywords. Here is what
they mean:
stage <type>
- State how this imagemap will be used by Rend2:
diffuseMap - Standard, same as no stage entry
normalMap - Image will be used as a normal map
normalParallaxMap - Image will be used as a normal map with
alpha treated as height for parallax mapping
specularMap - Image will be used as a specular map with
alpha treated as shininess.
specularReflectance <value>
- State how metallic this material is. Metals typically have a high
specular and a low diffuse, so this is typically high for them, and low
for other materials, such as plastic. For typical values for various
materials, see http://refractiveindex.info , pick a material, then scroll
down to the reflection calculator and look up its reflectance. Default
is 0.04, since most materials aren't metallic.
specularExponent <value>
- State how shiny this material is. Note that this is modulated by the
alpha channel of the specular map, so if it were set to 16, and the alpha
channel of the specular map was set to 0.5, then the shininess would be
set to 8. Default 256.
An important note is that normal and specular maps influence the diffuse map
declared before them, so materials like this are possible:
textures/terrain/grass
{
qer_editorimage textures/terrain/grass.jpg
{
map textures/terrain/rock.jpg
}
{
stage normalparallaxmap
map textures/terrain/rock_n.png
}
{
stage specularmap
map textures/terrain/rock_s.jpg
}
{
map textures/terrain/grass.jpg
blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
alphaGen vertex
}
{
stage normalparallaxmap
map textures/terrain/grass_n.png
}
{
stage specularmap
map textures/terrain/grass_s.png
specularReflectance 0.12
}
{
map $lightmap
blendfunc GL_DST_COLOR GL_ZERO
}
}
Though note due to the complexity of lighting, dynamic light (including
sunlight with cascaded shadow maps) currently only works 100% on materials like
this, where the second diffuse map doesn't have its own alpha, and only
uses vertex alpha. YMMV.
Another addition to materials is working normal/specular maps on vertex lit
surfaces. To enable this, make your material look like this:
textures/vehicles/car
{
qer_editorimage textures/vehicles/car.jpg
{
map textures/vehicles/car.jpg
rgbGen vertexLit
}
{
stage normalparallaxmap
map textures/vehicles/car_n.jpg
}
{
stage specularmap
map textures/vehicles/car_s.jpg
}
}
Note the new keyword, 'vertexLit' after rgbGen. This is analogous to
'rgbGen vertex', except a light direction will be determined from the lightgrid
and used with the normal and specular maps. 'exactVertexLit' exists as well,
and is the equivalent for 'exactVertex'.
-------------------------------------------------------------------------------
DYNAMIC SUNLIGHT AND CASCADED SHADOW MAPS
-------------------------------------------------------------------------------
This adds a new keyword to sky materials, q3gl2_sun. The syntax is:
q3gl2_sun <red> <green> <blue> <intensity> <degrees> <mapLightScale>
<ambientLightScale>
Note the first six parameters are the same as in q3map_sun or q3map_sunExt,
and the last two indicate scaling factors for the map brightness and an ambient
light of the same color as the sun.
There are currently two ways to use this in your own (and other people's) maps.
1. Create your map as normal and add a 'q3gl2_sun' line after your
'q3map_sun' line in your sky material, like so:
textures/skies/bluesky
{
qer_editorimage textures/skies/bluesky.jpg
surfaceparm nomarks
surfaceparm noimpact
surfaceparm nolightmap
surfaceparm sky
q3map_sunExt 240 238 200 100 195 35 3 16
q3gl2_sun 240 238 200 50 195 35 3 0.5 0.2
q3map_skylight 50 16
q3map_lightimage $whiteimage
skyparms env/bluesky - -
}
The advantages with this method are that your map will continue to work
with the old renderer with the sunlight baked into the lightmap, and it
can be used with existing maps without recompilation. The downside is
artifacts like doubled shadows and uneven shadow edges.
2. Use 'q3gl2_sun' instead of 'q3map_sun' or 'q3map_sunExt', like so:
textures/skies/bluesky
{
qer_editorimage textures/skies/bluesky.jpg
surfaceparm nomarks
surfaceparm noimpact
surfaceparm nolightmap
surfaceparm sky
q3gl2_sun 240 238 200 50 195 35 3 0.5 0.2
q3map_skylight 50 16
q3map_lightimage $whiteimage
skyparms env/bluesky - -
}
The advantages with this method are that you don't get the artifacts that
characterize the other method, and your map compiles a lot faster without
the sunlight bouncing calculations. The downsides are that your map will
not display properly with the old renderer, and you lose the bounced light
that compiling the map with q3map_sun* in it would have.
-------------------------------------------------------------------------------
TONE MAPPING AND AUTO EXPOSURE
-------------------------------------------------------------------------------
This adds a new keyword to sky materials, q3gl2_tonemap. The syntax is:
q3gl2_tonemap <toneMapMin> <toneMapAvg> <toneMapMax <autoExposureMin>
<autoExposureMax>
Each of these settings corresponds to a matching cvar, so you can view and
adjust the effect before settling on fixed settings.
-------------------------------------------------------------------------------
THANKS
-------------------------------------------------------------------------------
I'd like to take this part of the readme to thank the numerous people who
contributed thoughts, ideas, and whole swaths of code to this project.
- Id Software, for creating Quake 3 and releasing its source code under a
GPL license, without which this project would not be possible.
- Zachary 'Zakk' Slater, Thilo Schulz, Tim Angus, and the rest of the
ioquake3 team and contributors, for improving massively upon the raw Quake
3 source, and accepting my and gimhael's modular renderer patch.
- Robert 'Tr3B' Beckebans and the other contributors to XReaL, for letting me
liberally copy code from you. :)
- Andrew 'Black Monk' Prosnik, Andrei 'Makro' Drexler, Tomi 'T.T.I.' Isoaho,
Richard 'JBravo' Allen, Walter 'Johnny Rocket' Somol, and the rest of the
Boomstick Studios, for contributing code, feature requests, and testing.
- Yoshiharu Gotanda, Tatsuya Shoji, and the rest of tri-Ace's R&D Department,
for creating the tri-Ace shading equations and posting their derivations in
simple English.
- Matthias 'gimhael' Bentrup, for random ideas and bits of code.
- Evan 'megatog615' Goers, for testing, ideas, and bugging me just enough
that I'd write documentation. :)
- The folks at #ioquake3, who don't seem to mind when I suddenly drop a
screenshot and insist on talking about it. :)
- And lots of various other random people, who posted on forums, blogs, and
Wikipedia, who helped in small but numerous ways.
If I missed you in this section, feel free to drop me a line and I'll add you.
-------------------------------------------------------------------------------
CONTACT
-------------------------------------------------------------------------------
My name is James Canete, and I wrote most of this readme. Also, a renderer.
If you wish to get in touch with me, try my GMail at use.less01 (you should be
able to solve this), or look for SmileTheory in #ioquake3 on irc.freenode.net.

View file

@ -1,33 +0,0 @@
Q3Rally Version History
Q3Rally v0.0.0.3 (xx.xx.xxxx)
- Removed "Show Q3Rally Only" option, after last revision we only get q3rally servers.
- Fixed requesting servers for a specific gametype (uses a dpmaster feature)
- Fixed gamename shown in server browser (only race and race DM were correct)
- Added support for five master servers in q3_ui (ported from ioq3)
- Removed Mplayer stuff from q3_ui (was removed from ioq3)
- Updated server browser to say UDP6 instead of IPX for ipv6 servers (ported from ioq3)
- Removed out of date game binaries (they probably shouldn't be in svn at all).
- Removed cvar ui_browserShowRallyOnly (no longer used after r77)
- Added target_gravity from EntityPlus
- Created function for GAMES_* to GT_*, it's only done in one place now. (ported from Turtle Arena r1517)
- Unified version (mostly), update VERSION in Makefile and PRODUCT_VERSION in q_shared.h. Sets version everywhere instead of just qvms.
- Modified 'not finished game' message in cg_rally_hud.c to be better English
- Added CVAR_SYSTEMINFO to cvars that need it.
- Changed SpecifyServer Menu to Q3Rally style, removed OpenArena graphics
- Run scripts now run build command for you.
- Run scripts now create links to game logic instead of telling user to copy them.
- Use quake3-like gameversion. Fixes mismatch when server/client aren't both using qvm or dll/so.
- prepared for own bots with custom skills.
Q3Rally v0.0.0.2 (26.07.2011)
- Updated func_rotating to EntityPlus Style
- Updated func_train to EntityPlus style
- Updates Func_door-rotating to EntityPlus Style
Q3Rally v0.0.0.1 (02.04.2011)
- First stable standalone version

View file

@ -1,202 +0,0 @@
ioquake3 VoIP support documentation.
Last updated 6/25/2008 by Ryan C. Gordon.
There are two ways to use VoIP in ioquake3. You can either use Mumble as an
external program, for which ioq3 now supplies some basic hooks, or you can
use the new built-in VoIP support.
Mumble is here: http://mumble.sourceforge.net/ ... ioquake3 can supply it
with your in-game position, but everything else is whatever features Mumble
offers outside of the game. To use it, start Mumble before you start ioq3,
and run the game with +set cl_useMumble 1. This should work on at least
Linux, Mac OS X, and Windows, and probably other platforms Mumble supports
in the future.
The built-in stuff offers tighter in-game integration, works on any platform
that ioquake3 supports, and doesn't require anything more than a recent build
of the game. The rest of this document is concerned with the built-in VoIP
support.
Quick start for servers:
- run a recent build of ioquake3.
- Make sure your network settings are set to broadband.
Quick start for clients:
- run a recent build of ioquake3.
- Make sure your network settings are set to broadband.
- +set s_useOpenAL 1
- \bind q "+voiprecord"
- Hook up a microphone, connect to a VoIP-supporting server.
- hold down 'q' key and talk.
Cvars you can set:
sv_voip: set to "1" (the default) to enable server-side VoIP support. Set to
"0" to disable. Without this, all VoIP packets are refused by the
server, which means no one gets to use in-game VoIP.
cl_voip: set to "1" (the default) to enable client-side VoIP support. Set to "0"
to disable. Without this, you will neither be able to transmit voice nor
hear other people.
s_alCapture: set to "1" (the default) to have the audio layer open an OpenAL
capture device. Without this set on sound startup, you'll never
get bits from the microphone. This means you won't transmit, but
you can still hear other people.
cl_voipSendTarget: a string: "all" to broadcast to everyone, "none" to send
to no one, "attacker" to send to the last person that hit
you, "crosshair" to send to the people currently in your
crosshair, "spatial" to talk to all people in hearing
range or a comma-separated list of client numbers, like
"0,7,2,23" ... an empty string is treated like "spatial".
You can also use a mixed string like
"0, spatial, 2, crosshair".
This is reset to "spatial" when connecting to a new server.
Presumably mods will manage this cvar, not people, but
keybind could be useful for the general cases. To send to
just your team, or the opposing team, or a buddy list, you
have to set a list of numbers.
cl_voipUseVAD: set to "1" to automatically send audio when the game thinks you
are talking, "0" (the default) to require the user to manually
start transmitting, presumably with a keybind.
cl_voipVADThreshold: only used if cl_voipUseVAD is "1" ... a value between
0.0 and 1.0 that signifies the volume of recorded audio
that the game considers to be speech. You can use this
to trim out breathing or perhaps the sound of your
fingers tapping the keyboard and only transmit audio
louder than that. You will have to experiment to find the
value that works best for your hardware and play style.
The default is "0.25", with "0.0" being silence and "1.0"
being pretty-darn-loud.
cl_voipSend: when set to "1", the game will capture audio from the microphone
and transmit it, when "0", the game will not. The game can
optimize for the "0" case (perhaps turning off audio recording).
Lots of things set this on and off, including cl_voipUseVAD, so
you probably should not touch this directly without knowing what
you're doing, but perhaps mods can make use of it.
cl_voipGainDuringCapture: This is the volume ("gain") of audio coming out of
your speakers while you are recording sound for
transmission. This is a value between 0.0 and 1.0,
zero being silence and one being no reduction in
volume. This prevents audio feedback and echo and
such, but if you're listening in headphones that
your mic won't pick up, you don't need to turn down
the gain. Default is 0.2 (20% of normal volume). You
ABSOLUTELY want to make your speakers quiet when you
record, if the microphone might pick it up!
cl_voipShowMeter: Set to "1" (the default) to show a volume meter as you are
recording from the microphone, so you can see how well the
game can "hear" you. Set to "0" to disable the display of
the meter.
cl_voipCaptureMult: Multiply recorded audio by this value after denoising.
Defaults to 2.0 to _double_ the volume of your voice.
This is to make you more audible if denoising eats away
too much data. Set this to 1.0 to get no change, less to
be quieter.
Console commands:
voip ignore <clientnum>
Turn off incoming voice from player number <clientnum>. This will refuse to
play any incoming audio from that player, and instruct the server to stop
sending it, to save bandwidth. Use unignore to reenable. This is reset to
unignored when (re)connecting to a server.
voip unignore <clientnum>
Turn on incoming voice from player number <clientnum>. This will start
playing audio from this player again if you've previously done a "voip
ignore", and instruct the server to start sending her voice packets to
you again.
voip muteall
Turn off all incoming voice. This will refuse to play any incoming audio,
and instruct the server to stop sending it, to save bandwidth. Use
unmuteall to reenable. This is reset to unmuted when (re)connecting to
a server.
voip unmuteall
Turn on incoming voice. This will start playing audio again if you've
previously done a "voip muteall", and instruct the server to start
sending voice packets to you again.
voip gain <clientnum> <gain>
Sets the volume ("gain") for player number <clientnum> to <gain> ...
A gain of 0.0 is silence, and 2.0 doubles the volume. Use this if someone
is too quiet or too loud.
Actions:
+voiprecord: The action you should bind to a key to record. This basically
toggles cl_voipSend on and off. You don't need this if you're
using cl_voipUseVAD, since that'll just record all the time and
decide what parts of the recording are worth sending.
More detailed/technical info:
By default, all of this is enabled. You can build with or without VoIP
support explicitly with USE_VOIP=[1|0] on the make command line.
You currently must use OpenAL to speak, as we have ALC_EXT_capture support
in place to pull data from the microphone. If you are using the SDL backend,
you can still hear people, but not speak.
There is no in-game UI to speak of: we encourage mods to add some. Largely
they will just need to set cvars and run console commands for choosing
voice targets and ignoring people, etc.
This requires patched builds to be useful, but remains network compatible with
legacy quake3 clients and servers. Clients and servers both report in their
info strings whether they support VoIP, and won't send VoIP data to those not
reporting support. If a stray VoIP packet makes it to a legacy build, it will
be ignored without incident.
VoIP packets are saved in demo files! You will be able to playback what you
heard and what you said on VoIP-compatible clients. Legacy clients can also
play demo files with VoIP packets in them, but just won't play the voice
track. For VoIP-supported builds, it's nice to have a record of the
trash-talk.
Data is processed using the Speex narrowband codec, and is cross-platform.
Bigendian and littleendian systems can speak to each other, as can 32 and
64-bit platforms.
Bandwidth: VoIP data is broken up into 20 millisecond frames (this is a Speex
requirement), and we try to push up to 12 Speex frames in one UDP packet
(about a quarter of a second of audio)...we're using the narrowband codec:
8000Hz sample rate. In practice, a client should send about 2 kilobytes per
second more when speaking, spread over about four bursts per second, plus a
few bytes of state information. For comparison, this is less than the server
sends when downloading files to the client without an http redirect. The
server needs to rebroadcast the packet to all clients that should receive it
(which may be less than the total connected players), so servers should
assume they'll need to push (number of players speaking at once times number
of people that should hear it) * 2 kilobytes per second. It shouldn't be a
problem for any client or server on a broadband connection, although it may
be painful for dialup users (but then again, everything is. They can just
disable the cvar). The game will refuse to enable VoIP support if your have
your network settings lower than "Cable/xDSL/LAN", just in case.
The initial VoIP work was done by Ryan C. Gordon <icculus@icculus.org>, and
he can be contacted with technical questions, if the ioq3 mailing list or
forums aren't helpful.
// end of voip-README.txt ...

View file

@ -861,10 +861,10 @@ q3rallycode
1=engine\code\q3_ui\ui_rally_controls.c
[Selected Project Files]
Main=
Selected=engine\code\q3_ui\ui_rally_controls.c
Selected=engine\code\qcommon\q_shared.h
[engine\code\qcommon\q_shared.h]
TopLine=40
Caret=39,58
[engine\code\q3_ui\ui_rally_controls.c]
TopLine=316
Caret=81,335
TopLine=800
Caret=24,826