mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2025-02-23 19:40:56 +00:00
Improve github interperation of README.md
This commit is contained in:
parent
fe09fb77b9
commit
94bffacdb2
1 changed files with 327 additions and 292 deletions
595
README.md
595
README.md
|
@ -39,7 +39,7 @@ renamed to id-readme.txt so as to prevent confusion. Please refer to the
|
||||||
web-site for updated status.
|
web-site for updated status.
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------- Compilation and installation -----
|
# Compilation and installation
|
||||||
|
|
||||||
For *nix
|
For *nix
|
||||||
1. Change to the directory containing this readme.
|
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
|
The following variables may be set, either on the command line or in
|
||||||
Makefile.local:
|
Makefile.local:
|
||||||
|
|
||||||
|
```
|
||||||
CFLAGS - use this for custom CFLAGS
|
CFLAGS - use this for custom CFLAGS
|
||||||
V - set to show cc command line when building
|
V - set to show cc command line when building
|
||||||
DEFAULT_BASEDIR - extra path to search for baseq3 and such
|
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
|
DEBUG_CFLAGS - C compiler flags to use for building debug version
|
||||||
COPYDIR - the target installation directory
|
COPYDIR - the target installation directory
|
||||||
TEMPDIR - specify user defined directory for temp files
|
TEMPDIR - specify user defined directory for temp files
|
||||||
|
```
|
||||||
|
|
||||||
The defaults for these variables differ depending on the target platform.
|
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_autoRecordDemo - record a new demo on each map change
|
||||||
cl_aviFrameRate - the framerate to use when capturing video
|
cl_aviFrameRate - the framerate to use when capturing video
|
||||||
cl_aviMotionJpeg - use the mjpeg codec when capturing video
|
cl_aviMotionJpeg - use the mjpeg codec when capturing video
|
||||||
|
@ -271,8 +275,11 @@ New cvars
|
||||||
cl_aviMotionJpeg is enabled
|
cl_aviMotionJpeg is enabled
|
||||||
r_mode -2 - This new video mode automatically uses the
|
r_mode -2 - This new video mode automatically uses the
|
||||||
desktop resolution.
|
desktop resolution.
|
||||||
|
```
|
||||||
|
|
||||||
New commands
|
## New commands
|
||||||
|
|
||||||
|
```
|
||||||
video [filename] - start video capture (use with demo command)
|
video [filename] - start video capture (use with demo command)
|
||||||
stopvideo - stop video capture
|
stopvideo - stop video capture
|
||||||
stopmusic - stop background music
|
stopmusic - stop background music
|
||||||
|
@ -307,107 +314,125 @@ New commands
|
||||||
all bots even if someone is named "allbots")
|
all bots even if someone is named "allbots")
|
||||||
|
|
||||||
tell <client num> <msg> - send message to a single client (new to server)
|
tell <client num> <msg> - send message to a single client (new to server)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------- README for Users -----
|
# README for Users
|
||||||
|
|
||||||
Using shared libraries instead of qvm
|
## 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
|
To force Q3 to use shared libraries instead of qvms run it with the following
|
||||||
Copy demoq3/pak0.pk3 from the demo installer to your baseq3 directory. The
|
parameters: `+set sv_pure 0 +set vm_cgame 0 +set vm_game 0 +set vm_ui 0`
|
||||||
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
|
## Using Demo Data Files
|
||||||
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!
|
Copy demoq3/pak0.pk3 from the demo installer to your baseq3 directory. The
|
||||||
Ioquake3 now uses the select() system call to wait for the rendering of the
|
qvm files in this pak0.pk3 will not work, so you have to use the native
|
||||||
next frame when com_maxfps was hit. This will improve your CPU load
|
shared libraries or qvms from this project. To use the new qvms, they must be
|
||||||
considerably in these cases. However, not all systems may support a
|
put into a pk3 file. A pk3 file is just a zip file, so any compression tool
|
||||||
granularity for its timing functions that is required to perform this waiting
|
that can create such files will work. The shared libraries should already be
|
||||||
correctly. For instance, ioquake3 tells select() to wait 2 milliseconds, but
|
in the correct place. Use the instructions above to use them.
|
||||||
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)
|
Please bear in mind that you will not be able to play online using the demo
|
||||||
You can enable redirected downloads on your server even if it's not
|
data, nor is it something that we like to spend much time maintaining or
|
||||||
an ioquake3 server. You simply need to use the 'sets' command to put
|
supporting.
|
||||||
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
|
## Help! Ioquake3 won't give me an fps of X anymore when setting com_maxfps!
|
||||||
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
|
Ioquake3 now uses the select() system call to wait for the rendering of the
|
||||||
flags:
|
next frame when com_maxfps was hit. This will improve your CPU load
|
||||||
1 - ENABLE
|
considerably in these cases. However, not all systems may support a
|
||||||
4 - do not use UDP downloads
|
granularity for its timing functions that is required to perform this waiting
|
||||||
8 - do not ask the client to disconnect when using HTTP/FTP
|
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.
|
||||||
|
|
||||||
Server operators who are concerned about potential "leeching" from their
|
## Using HTTP/FTP Download Support (Server)
|
||||||
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
|
You can enable redirected downloads on your server even if it's not
|
||||||
rates now. You can configure the maximum bandwidth for UDP downloads via the
|
an ioquake3 server. You simply need to use the 'sets' command to put
|
||||||
cvar sv_dlRate. Due to system-specific limits the download rate is capped
|
the sv_dlURL cvar into your SERVERINFO string and ensure sv_allowDownloads
|
||||||
at about 1 Mbyte/s per client, so curl downloading may still be faster.
|
is set to 1
|
||||||
|
|
||||||
Using HTTP/FTP Download Support (Client)
|
sv_dlURL is the base of the URL that contains your custom .pk3 files
|
||||||
Simply setting cl_allowDownload to 1 will enable HTTP/FTP downloads
|
the client will append both fs_game and the filename to the end of
|
||||||
assuming ioquake3 was compiled with USE_CURL=1 (the default).
|
this value. For example, if you have sv_dlURL set to
|
||||||
like sv_allowDownload, cl_allowDownload also uses a bitmask value
|
`"http://ioquake3.org"`, fs_game is `"baseq3"`, and the client is
|
||||||
supporting the following flags:
|
missing `"test.pk3"`, it will attempt to download from the URL
|
||||||
1 - ENABLE
|
`"http://ioquake3.org/baseq3/test.pk3"`
|
||||||
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),
|
sv_allowDownload's value is now a bitmask made up of the following
|
||||||
it will use the value of the cvar cl_cURLLib as the filename of the cURL
|
flags:
|
||||||
library to dynamically load.
|
|
||||||
|
|
||||||
Multiuser Support on Windows systems
|
* 1 - ENABLE
|
||||||
On Windows, all user specific files such as autogenerated configuration,
|
* 4 - do not use UDP downloads
|
||||||
demos, videos, screenshots, and autodownloaded pk3s are now saved in a
|
* 8 - do not ask the client to disconnect when using HTTP/FTP
|
||||||
directory specific to the user who is running ioquake3.
|
|
||||||
|
|
||||||
On NT-based such as Windows XP, this is usually a directory named:
|
Server operators who are concerned about potential "leeching" from their
|
||||||
"C:\Documents and Settings\%USERNAME%\Application Data\Quake3\"
|
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.
|
||||||
|
|
||||||
Windows 95, Windows 98, and Windows ME will use a directory like:
|
On a sidenote, downloading via UDP has been improved and yields higher data
|
||||||
"C:\Windows\Application Data\Quake3"
|
rates now. You can configure the maximum bandwidth for UDP downloads via the
|
||||||
in single-user mode, or:
|
cvar sv_dlRate. Due to system-specific limits the download rate is capped
|
||||||
"C:\Windows\Profiles\%USERNAME%\Application Data\Quake3"
|
at about 1 Mbyte/s per client, so curl downloading may still be faster.
|
||||||
if multiple logins have been enabled.
|
|
||||||
|
|
||||||
In order to access this directory more easily, the installer may create a
|
## Using HTTP/FTP Download Support (Client)
|
||||||
Shortcut which has its target set to:
|
|
||||||
"%APPDATA%\Quake3\"
|
Simply setting cl_allowDownload to 1 will enable HTTP/FTP downloads
|
||||||
This Shortcut would work for all users on the system regardless of the
|
assuming ioquake3 was compiled with USE_CURL=1 (the default).
|
||||||
locale settings. Unfortunately, this environment variable is only
|
like sv_allowDownload, cl_allowDownload also uses a bitmask value
|
||||||
present on Windows NT based systems.
|
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:
|
||||||
|
|
||||||
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"
|
ioquake3.exe +set fs_homepath "c:\ioquake3"
|
||||||
Note that this cvar MUST be set as a command line parameter.
|
|
||||||
|
|
||||||
SDL Keyboard Differences
|
Note that this cvar MUST be set as a command line parameter.
|
||||||
ioquake3 clients have different keyboard behaviour compared to the original
|
|
||||||
Quake3 clients.
|
## 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
|
* "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.
|
do not send a KEYUP event until the key is pressed again.
|
||||||
|
@ -422,17 +447,17 @@ SDL Keyboard Differences
|
||||||
For non-US keyboards, all of the so called "World" keys are now supported
|
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.
|
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
|
On many international layouts the default console toggle keys are also dead
|
||||||
keys, meaning that dropping the console potentially results in
|
keys, meaning that dropping the console potentially results in
|
||||||
unintentionally initiating the keying of a dead key. Furthermore SDL 1.2's
|
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
|
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.
|
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
|
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
|
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",
|
names are the usual Q3 names e.g. "~", "`", "c", "BACKSPACE", "PAUSE",
|
||||||
"WINDOWS" etc. It's also possible to use ASCII characters, by hexadecimal
|
"WINDOWS" etc. It's also possible to use ASCII characters, by hexadecimal
|
||||||
number. Some example values for cl_consoleKeys:
|
number. Some example values for cl_consoleKeys:
|
||||||
|
|
||||||
"~ ` 0x7e 0x60" Toggle on ~ or ` (the default)
|
"~ ` 0x7e 0x60" Toggle on ~ or ` (the default)
|
||||||
"WINDOWS" Toggle on the Windows key
|
"WINDOWS" Toggle on the Windows key
|
||||||
|
@ -440,75 +465,79 @@ SDL Keyboard Differences
|
||||||
"0x43" Toggle on the C character (Shift-c)
|
"0x43" Toggle on the C character (Shift-c)
|
||||||
"PAUSE F1 PGUP" Toggle on the Pause, F1 or Page Up keys
|
"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
|
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
|
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
|
text. Also, in addition to the nominated console keys, Shift-ESC is hard
|
||||||
coded to always toggle the console.
|
coded to always toggle the console.
|
||||||
|
|
||||||
QuakeLive mouse acceleration (patch and this text written by TTimo from id)
|
## QuakeLive mouse acceleration
|
||||||
I've been using an experimental mouse acceleration code for a while, and
|
(patch and this text written by TTimo from id)
|
||||||
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:
|
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)
|
||||||
|
|
||||||
sensitivity
|
New style is controlled with 3 cvars:
|
||||||
cl_mouseAccel
|
|
||||||
cl_mouseAccelOffset
|
|
||||||
|
|
||||||
The old code (cl_mouseAccelStyle 0) can be difficult to calibrate because if
|
sensitivity
|
||||||
you have a base sensitivity setup, as soon as you set a non zero acceleration
|
cl_mouseAccel
|
||||||
your base sensitivity at low speeds will change as well. The other problem
|
cl_mouseAccelOffset
|
||||||
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 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.
|
||||||
|
|
||||||
Once you setup your sensitivity to feel comfortable and accurate enough for
|
The new code tries to solve both problems:
|
||||||
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
|
Once you setup your sensitivity to feel comfortable and accurate enough for
|
||||||
as style 0. The higher the value, the faster the amplification grows with the
|
low mouse deltas with no acceleration (cl_mouseAccel 0), you can start
|
||||||
mouse delta.
|
increasing cl_mouseAccel and tweaking cl_mouseAccelOffset to get the
|
||||||
|
amplification you want for high deltas with little effect on low mouse deltas.
|
||||||
|
|
||||||
cl_mouseAccelOffset sets how much base mouse delta will be doubled by
|
cl_mouseAccel is a power value. Should be >= 1, 2 will be the same power curve
|
||||||
acceleration. The closer to zero you bring it, the more acceleration will
|
as style 0. The higher the value, the faster the amplification grows with the
|
||||||
happen at low speeds. This is also very useful if you are changing to a new
|
mouse delta.
|
||||||
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
|
cl_mouseAccelOffset sets how much base mouse delta will be doubled by
|
||||||
re-learn your aiming. But you will find that it's very much forth it in the
|
acceleration. The closer to zero you bring it, the more acceleration will
|
||||||
long run.
|
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).
|
||||||
|
|
||||||
If you try the new acceleration code and start using it, I'd be very
|
Mouse acceleration is tricky to configure, and when you do you'll have to
|
||||||
interested by your feedback.
|
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 -----
|
# README for Developers
|
||||||
|
|
||||||
pk3dir
|
## pk3dir
|
||||||
ioquake3 has a useful new feature for mappers. Paths in a game directory with
|
|
||||||
the extension ".pk3dir" are treated like pk3 files. This means you can keep
|
|
||||||
all files specific to your map in one directory tree and easily zip this
|
|
||||||
folder for distribution.
|
|
||||||
|
|
||||||
64bit mods
|
ioquake3 has a useful new feature for mappers. Paths in a game directory with
|
||||||
If you wish to compile external mods as shared libraries on a 64bit platform,
|
the extension ".pk3dir" are treated like pk3 files. This means you can keep
|
||||||
and the mod source is derived from the id Q3 SDK, you will need to modify the
|
all files specific to your map in one directory tree and easily zip this
|
||||||
interface code a little. Open the files ending in _syscalls.c and change
|
folder for distribution.
|
||||||
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:
|
## 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
|
#ifdef Q3_VM
|
||||||
typedef int intptr_t;
|
typedef int intptr_t;
|
||||||
|
@ -516,165 +545,168 @@ pk3dir
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Note if you simply wish to run mods on a 64bit platform you do not need to
|
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.
|
recompile anything since by default Q3 uses a virtual machine system.
|
||||||
|
|
||||||
Creating mods compatible with Q3 1.32b
|
## 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
|
If you're using this package to create mods for the last official release of
|
||||||
Have you finished the daunting task of removing all dependencies on the Q3
|
Q3, it is necessary to pass the commandline option '-vq3' to your invocation
|
||||||
game data? You probably now want to give your users the opportunity to play
|
of q3asm. This is because by default q3asm outputs an updated qvm format that
|
||||||
the game without owning a copy of Q3, which consequently means removing cd-key
|
is necessary to fix a bug involving the optimizing pass of the x86 vm JIT
|
||||||
and authentication server checks. In addition to being a straightforward Q3
|
compiler.
|
||||||
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
|
## Creating standalone games
|
||||||
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
|
Have you finished the daunting task of removing all dependencies on the Q3
|
||||||
your own binaries. Instead, you can just use the pre-built binaries on the
|
game data? You probably now want to give your users the opportunity to play
|
||||||
website. Just make sure the game is called with:
|
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>
|
+set com_basegame <yournewbase>
|
||||||
|
|
||||||
in any links/scripts you install for your users to start the game. The
|
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
|
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
|
condition is met, the game will set com_standalone to 1 and is then running
|
||||||
in stand alone mode.
|
in stand alone mode.
|
||||||
|
|
||||||
If you want the engine to use a different directory in your homepath than
|
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
|
e.g. "Quake3" on Windows or ".q3a" on Linux, then set a new name at startup
|
||||||
by adding
|
by adding
|
||||||
|
|
||||||
+set com_homepath <homedirname>
|
+set com_homepath <homedirname>
|
||||||
|
|
||||||
to the command line. You can also control which game name to use when talking
|
to the command line. You can also control which game name to use when talking
|
||||||
to the master server:
|
to the master server:
|
||||||
|
|
||||||
+set com_gamename <gamename>
|
+set com_gamename <gamename>
|
||||||
|
|
||||||
So clients requesting a server list will only receive servers that have a
|
So clients requesting a server list will only receive servers that have a
|
||||||
matching game name.
|
matching game name.
|
||||||
|
|
||||||
Example line:
|
Example line:
|
||||||
|
|
||||||
+set com_basegame basefoo +set com_homepath .foo
|
+set com_basegame basefoo +set com_homepath .foo
|
||||||
+set com_gamename 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.
|
||||||
|
|
||||||
If you really changed parts that would make vanilla ioquake3 incompatible with
|
While a lot of work has been put into ioquake3 that you can benefit from free
|
||||||
your mod, we have included another way to conveniently build a stand-alone
|
of charge, it does not mean that you have no obligations to fulfill. Please be
|
||||||
binary. Just run make with the option BUILD_STANDALONE=1. Don't forget to edit
|
aware that as soon as you start distributing your game with an engine based on
|
||||||
the PRODUCT_NAME and subsequent #defines in qcommon/q_shared.h with
|
our sources we expect you to fully comply with the requirements as stated in
|
||||||
information appropriate for your project.
|
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
|
||||||
While a lot of work has been put into ioquake3 that you can benefit from free
|
the game logic freely available to everyone. Furthermore, note that the "QIIIA
|
||||||
of charge, it does not mean that you have no obligations to fulfill. Please be
|
Game Source License" prohibits distribution of mods that are intended to
|
||||||
aware that as soon as you start distributing your game with an engine based on
|
operate on a version of Q3 not sanctioned by id software:
|
||||||
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
|
"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
|
to distribute copies of the Software ... for operation only with the full
|
||||||
version of the software game QUAKE III ARENA"
|
version of the software game QUAKE III ARENA"
|
||||||
|
|
||||||
This means that if you're creating a standalone game, you cannot use said
|
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
|
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.
|
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
|
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,
|
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
|
maps) created by yourself are your property and can be sold like every other
|
||||||
game you find in stores.
|
game you find in stores.
|
||||||
|
|
||||||
Network protocols
|
## Network protocols
|
||||||
There are now two cvars that give you some degree of freedom over the reported
|
There are now two cvars that give you some degree of freedom over the reported
|
||||||
protocol versions between clients and servers: "com_protocol" and
|
protocol versions between clients and servers: "com_protocol" and
|
||||||
"com_legacyprotocol".
|
"com_legacyprotocol".
|
||||||
The reason for this is that some standalone games increased the protocol
|
The reason for this is that some standalone games increased the protocol
|
||||||
number even though nothing really changed in their protocol and the ioquake3
|
number even though nothing really changed in their protocol and the ioquake3
|
||||||
engine is still fully compatible.
|
engine is still fully compatible.
|
||||||
|
|
||||||
In order to harden the network protocol against UDP spoofing attacks a new
|
In order to harden the network protocol against UDP spoofing attacks a new
|
||||||
network protocol was introduced that defends against such attacks.
|
network protocol was introduced that defends against such attacks.
|
||||||
Unfortunately, this protocol will be incompatible to the original quake3 1.32c
|
Unfortunately, this protocol will be incompatible to the original quake3 1.32c
|
||||||
which is the latest official release from id.
|
which is the latest official release from id.
|
||||||
Luckily, ioquake3 has backwards compatibility, on the client as well as on the
|
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
|
server. This means ioquake3 players can play on old servers just as ioquake3
|
||||||
servers are able to service old clients.
|
servers are able to service old clients.
|
||||||
|
|
||||||
The cvar "com_protocol" denotes the protocol version for the new hardened
|
The cvar "com_protocol" denotes the protocol version for the new hardened
|
||||||
protocol, whereas the "com_legacyprotocol" cvar denotes the protocol version
|
protocol, whereas the "com_legacyprotocol" cvar denotes the protocol version
|
||||||
for the legacy protocol.
|
for the legacy protocol.
|
||||||
If the value for "com_protocol" and "com_legacyprotocol" is identical, then
|
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
|
the legacy protocol is always used. If "com_legacyprotocol" is set to 0, then
|
||||||
support for the legacy protocol is disabled.
|
support for the legacy protocol is disabled.
|
||||||
|
|
||||||
Mods that use a standalone engine obviously do not require dual protocol
|
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
|
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
|
default. If you desire backwards compatibility to older versions of your
|
||||||
game you can still enable it in q_shared.h by defining
|
game you can still enable it in q_shared.h by defining
|
||||||
LEGACY_PROTOCOL.
|
LEGACY_PROTOCOL.
|
||||||
|
|
||||||
cl_guid Support
|
## cl_guid Support
|
||||||
cl_guid is a cvar which is part of the client's USERINFO string. Its value
|
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
|
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
|
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.
|
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
|
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
|
pseudo-unique for each server a client connects to (based on IP:PORT of
|
||||||
the server).
|
the server).
|
||||||
|
|
||||||
The purpose of cl_guid is to add an identifier for each player on
|
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
|
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
|
useful for blocking access. However, it can have at least two uses in
|
||||||
your mod's game code:
|
your mod's game code:
|
||||||
1) improve logging to allow statistical tools to index players by more
|
|
||||||
|
1. improve logging to allow statistical tools to index players by more
|
||||||
than just name
|
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
|
## PNG support
|
||||||
ioquake3 supports the use of PNG (Portable Network Graphic) images as
|
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
|
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
|
result in missing placeholder textures where the map is used with the id
|
||||||
Quake 3 client or earlier versions of ioquake3.
|
Quake 3 client or earlier versions of ioquake3.
|
||||||
|
|
||||||
Recent versions of GtkRadiant and q3map2 support PNG images without
|
Recent versions of GtkRadiant and q3map2 support PNG images without
|
||||||
modification. However GtkRadiant is not aware that PNG textures are supported
|
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'
|
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
|
directory of the GtkRadiant base directory with an editor and change the
|
||||||
line:
|
line:
|
||||||
|
|
||||||
texturetypes="tga jpg"
|
texturetypes="tga jpg"
|
||||||
|
|
||||||
to
|
to
|
||||||
|
|
||||||
texturetypes="tga jpg png"
|
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
|
IPv6 support requires a header named "wspiapi.h" to abstract away from
|
||||||
equivalent of this header and the Microsoft version is obviously not
|
differences in earlier versions of Windows' IPv6 stack. There is no MinGW
|
||||||
redistributable, so in its absence we're forced to require Windows XP.
|
equivalent of this header and the Microsoft version is obviously not
|
||||||
However if this header is acquired separately and placed in the qcommon/
|
redistributable, so in its absence we're forced to require Windows XP.
|
||||||
directory, this restriction is lifted.
|
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
|
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
|
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.
|
are off by default.
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------- Building Official Installers -----
|
# Building Official Installers
|
||||||
|
|
||||||
We need help getting automated installers on all the platforms that ioquake3
|
We need help getting automated installers on all the platforms that ioquake3
|
||||||
supports. We don't necessarily care about all the installers being identical,
|
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
|
* Your installer will be mirrored to an "official" directory, thus making it
|
||||||
a done deal.
|
a done deal.
|
||||||
|
|
||||||
------------------------------------------------------------------ Credits -----
|
|
||||||
|
# Credits
|
||||||
|
|
||||||
Maintainers
|
Maintainers
|
||||||
James Canete <use.less01@gmail.com>
|
|
||||||
Ludwig Nussel <ludwig.nussel@suse.de>
|
* James Canete <use.less01@gmail.com>
|
||||||
Thilo Schulz <arny@ats.s.bawue.de>
|
* Ludwig Nussel <ludwig.nussel@suse.de>
|
||||||
Tim Angus <tim@ngus.net>
|
* Thilo Schulz <arny@ats.s.bawue.de>
|
||||||
Tony J. White <tjw@tjw.org>
|
* Tim Angus <tim@ngus.net>
|
||||||
Zachary J. Slater <zachary@ioquake.org>
|
* Tony J. White <tjw@tjw.org>
|
||||||
Zack Middleton <zturtleman@gmail.com>
|
* Zachary J. Slater <zachary@ioquake.org>
|
||||||
|
* Zack Middleton <zturtleman@gmail.com>
|
||||||
|
|
||||||
Significant contributions from
|
Significant contributions from
|
||||||
Ryan C. Gordon <icculus@icculus.org>
|
|
||||||
Andreas Kohn <andreas@syndrom23.de>
|
* Ryan C. Gordon <icculus@icculus.org>
|
||||||
Joerg Dietrich <Dietrich_Joerg@t-online.de>
|
* Andreas Kohn <andreas@syndrom23.de>
|
||||||
Stuart Dalton <badcdev@gmail.com>
|
* Joerg Dietrich <Dietrich_Joerg@t-online.de>
|
||||||
Vincent S. Cojot <vincent at cojot dot name>
|
* Stuart Dalton <badcdev@gmail.com>
|
||||||
optical <alex@rigbo.se>
|
* Vincent S. Cojot <vincent at cojot dot name>
|
||||||
Aaron Gyes <floam@aaron.gy>
|
* optical <alex@rigbo.se>
|
||||||
|
* Aaron Gyes <floam@aaron.gy>
|
||||||
|
|
||||||
|
|
||||||
[](http://githalytics.com/ioquake/ioq3)
|
[](http://githalytics.com/ioquake/ioq3)
|
||||||
|
|
Loading…
Reference in a new issue