QkrMods Logo Installation and Use


Availability

The Quaker Server Modifications (QkrMods) package is available as a compressed .ZIP file, containing the source, documentation, and utility files.

The package is available via FTP from:

If you wish to test a work-in-progress of QkrMods, please contact the author. Test sites will be expected to provide feedback on bugs and suggest improvements to the code and documentation.


Installation

NOTE: If you are reading these instructions unbundled from the QkrMods distribution package, these instructions may apply only to the current work-in-progress under test at quake.asee.org. The instructions pertaining to a particular version is included in the DOCS/ subdirectory of the distribution.

You must be using registered Quake (v1.06 or higher, WinQuake v1.00 recommended) in order to use this or any other QuakeC patch.

You will need:

All other sources and utilities are provided.

IMPORTANT! QkrMods' memory model exceeds the capability of the precompilied id Software QuakeC compiler, and requires a version of the QuakeC compiler where MAX_GLOBALS and MAX_REFS (in QCC.H) have been increased from their default values. The Win32 compiler included in the QkrMods distribution has already been modified by the author of ProQCC to take care of this problem (in fact, ProQCC is the compiler used for development).

Assuming that the Quake installation directory is \QUAKE:

  1. Unzip the QkrMods archive into \QUAKE. The archive will create and populate the \QUAKE\QKRMODS subdirectory automagically.
  2. Disable/Enable the usage of a specific module by editing the USE_MODULE_<*> constants in the file MODULES.QH. A value of '1' enables a module, while a value of '0' disables a module. For weapons modules, a value of '2' indicates that the custom model/sound package should be used (note that some modules require custom support to operate). By default the following are set:
    <type> <name> = <value>;
    float USE_MODULE_ADMIN        = 1;
    float USE_MODULE_AIRFIST      = 0;              // only active on a 2
    float USE_MODULE_AUTH         = 1;
    float USE_MODULE_BOT          = 1;
    float USE_MODULE_CHASECAM     = 1;
    float USE_MODULE_EJECT        = 0;              // only active on a 2
    float USE_MODULE_GRAPPLE      = 2;              // use custom graphics on a 2
    float USE_MODULE_HIPNOTIC     = 0;              // unfinished, only active on a 2
    float USE_MODULE_IDENTIFY     = 1;
    float USE_MODULE_KICKSTOOGE   = 0;
    float USE_MODULE_KICKSUICIDER = 1;
    float USE_MODULE_LOG          = 1;
    float USE_MODULE_MOTD         = 1;
    float USE_MODULE_PROTECT      = 0;
    float USE_MODULE_RANDOM       = 0;
    float USE_MODULE_RANK         = 1;
    float USE_MODULE_ROGUE        = 0;              // unfinished, only active on a 2
    float USE_MODULE_RUNES        = 2;              // use custom graphics on a 2
    float USE_MODULE_SKIN         = 1;
    float USE_MODULE_TSCORE       = 1;
    float USE_MODULE_XHAIR        = 1;
    float USE_MODULE_XITMSG       = 1;
  3. This step is very important! Customize the Message of the Day of your server by editing the constants motd_banner, motd_location, motd_homepage, and motd_rules used to construct the MOTD in the function MotdThink() in file MOTD.QC. Please do not change or remove the QkrMods banner/version number.
  4. If you have set USE_MODULE_AUTH = 1, configure authentication:
  5. If you have set USE_MODULE_ADMIN = 1, configure remote administration:
  6. Choose how your server will handle map selection. The MAPQUE module offers two different methods of controlling server level progression. Set MAPQUE_MAP_SELECT in the file MAPQUE.QH to control which selection method is used. Setting mapque_map_select = MAPQUE_SELECT_QUEUE will use the map queue; = MAPQUE_SELECT_QUEUE will use a randomly selected map; and setting '= 0' will disable alternate map selection methods.
  7. The MESSAGES module reduces the redundant network messages sent during play, such as the "You got the <item>" messages. Setting the appropriate 'messages_flag' bitflags in MESSAGES.QH to control which messages get sent and which do not. The default of zero turns off all messages but the obituaries, which cannot be suppressed.
  8. Make additional optional configuration changes:
  9. Use ProQCC (or whatever version of QCC you are using - don't forget to make the modifications in QCC.H and re-compile QCC) to compile the sources. A batchfile that simplifies this process, GO.BAT, is provided.
  10. Modify the maps for Capture the flag:
    1. Unpack your id Software Registered Quake PAK0.PAK and PAK1.PAK files. There are several utilities to do this. For Linux, wreckdum (ftp://ftp.cdrom.com/pub/quake/utils/bsp_pak_tools/wreckdum.tar.gz) and under Windows 95, PakExplorer (ftp://www.cdrom.com/pub/quake/utils/bsp_pak_tools/pakexplr.zip) or winpak (ftp://ftp.cdrom.com/pub/quake/utils/bsp_pak_tools/winpak12.zip).
    2. In the directory you unpacked this archive, there will be a MAPS\ directory. Copy the map .BSP files from the unpacked files so that there is one map .BSP file corresponding to each .ENT file found there.
    3. Now go to the MAPS subdirectory and run qbsp -onlyents <name of .ENT file> for each entity file. A batchfile that simplifies this process, DOBSP.BAT for DOS/Win95 or sh dobsp.sh for Linux, is provided. A DOS executable of qbsp has been provided in the UTILS\ subdirectory of the distribution; the source for qbsp is located in UTILS\SRC\. qbsp is part of the id Software Quake utility package (ftp://ftp.cdrom.com/pub/quake/idstuff/source/qutils.zip). This will modify the entity lists for the maps to include the new flags and some other items.
    4. Setting the TEAM_CUSTOM_MODELS flag (or setting USE_MODULE_RUNES = 2) requires the presence of the custom Threewave PAK0.PAK and PAK1.PAKfiles (from 3wctfc.zip) in the base QkrMods directory.
    5. Setting USE_MODULE_AIRFIST = 1 with the TEAM_CUSTOM_MODELS flag requires the presence of the AirFist models and sounds.
  11. Assuming that compilation succeeded without errors, change directory to C:\GAMES\QUAKE\ and check your changes by typing:

    QUAKE.EXE -game qkrmods -zone 512

    and start a multiplayer game. If you're sure that everything works as expected, start your dedicated server as usual. For instance, by typing:

    QUAKE.EXE -nocdaudio -nosound -noipx -nojoy -dedicated 16 -winmem 16 -zone 512 +map start

    or

    WINQUAKE.EXE -dedicated 16 -heapsize 16384 -zone 512 +map start

    would start a dedicated 16-player TCP/IP protocol server and load the "start" map. Be aware that quake command-line switches are case-sensitive (and must be all in lowercase), and that Quake cannot have components on a path which contains long filenames (LFNs). If you choose to use the AUTOEXEC.CFG file included in the distribution, leave off the +map start command (an example map command is included in the AUTOEXEC.CFG already) and please be sure to edit the hostname to uniquely identify your server.

    IMPORTANT!Make sure that you give the server a larger zone buffer to hold aliases and a significant amount of memory for the heap above the default of 8MB. QkrMods is significantly larger than the stock QuakeC code; unexpected termination of the server process can indicate tight memory on the heap. Note also that although a heapsize of 16 Megabytes is recommended, more is not useful (i.e. Quake servers running a single instance of a Quake dedicated server should realistically require no more than 24-32MB of system memory installed).
    NOTE! Occasionally, you may note SZ_GetSpace: Overflow showing up in the server console logs. Because QkrMods pushes a decent amount of aliased commands to the client console, clients with inflated *.rc files may experience problems. It is recommended that QkrMods clients be started with the -zone 1024 command-line parameter to allocate more memory to the zone buffer. Since this parameter is in bytes, it should not have a significant impact on client memory usage.


Game Options

Customization of the server and ruleset can be adjusted in the .QH files for each module. The following options can be changed while the server is running:

Deathmatch

Bitflags have been added to increase the flexibility of the original idSoftware deathmatch rules:

Bit Option
1 Deathmatch 1
2 Deathmatch 2
The old id Software deathmatch rules. Items respawn as normal, but weapons remain in place (and can consequently be picked up only once by each player).
4 Inventory Reset
Resets the health, armor and inventory of each player every time the level changes.
8 Halt on Intermission
Only an Admin (or a new player connecting) can exit the intermission.

To select multiple deathmatch options, add the numbers of the options together.

Noexit

Additional options have been added to increase the flexibility of the original id Software noexit rules:

Value Option
0 Noexit 0
Players may exit at any time.
1 Noexit 1
Players attempting to leave the level are gibbed automatically.
2 Noexit 2
Players who attempt to exit on any level except "start" are gibbed automatically.
3 Noexit 3
Uses the ExitRules module. Players can only exit a level if at least one player has reached a minimum number of frags (0 by default) and if a certain time has passed on the current level (3 minutes by default).

Random Level

This allows a random Capture the Flag level to selected every time the server issues a level change.

The frequency of id to custom CTF levels is controlled by the console variable, temp1 <n> (where <n> is the percentage that CTF levels should appear). A setting of 50 indicates that 50% of the time, select a CTF level or an id level as the next level. If you set it to 100%, you will only get custom CTF levels. If you set it to 0%, you get nothing but id CTF levels. Custom CTF levels are ignored if the TEAM_CUSTOM_MODELS bitflag is not set in the teamplay variable.

Setting temp1 = 0 disables random level selection.

Teamplay

During gameplay the following teamplay options may be set:

Bit Option
1 Health Protect
Players receive no health damage from teammates' attacks.
2 No Health Protect
Teammate's attacks do normal damage. This flag must be set in order for the TEAM_DEATH_PENALTY flag to be effective. Setting this flag with the TEAM_HEALTH_PROTECT flag allows self-damage only.
4 Armor Protect
Players receive no armor damage from teammates' attacks.
8 Mirror Damage
A player who attacks his teammate will receive the same damage the teammate would have received, had he not been protected.
16 Death Penalty
Any player who kills his teammate will burst apart in a bloody mess.
32 Team Color Lock
Players will only be allowed to be certain colors. Team colors can be specified for up to four teams in the TEAMPLAY.QC file. Players who have illegal colors when they enter will be put into the team with the fewest members. Any player who changes teams (pants color) will have their frag count reset to zero. Players who are observers or dead may change teams, but will have their frag count reset to zero.
64 Static Teams
Players will not be allowed to change teams. Any player who changes teams (pants color) will be gibbed and have their frag count reset to zero.
128 Drop Items
Players can drop ammo (in backpacks) and weapons by giving the commands 'toss-ammo' and 'toss-weapon', respectively.
256 Capture the Flag
This enables Capture the Flag support.
512 ...with custom model support
1024 ..with CTF Bots that spawn to auto-even teams.

To select multiple teamplay options, add the numbers of the options together.

The penalty for killing a teammate is adjusted by the TEAM_FRAG_PENALTY constant in TEAMPLAY.QC, and is set to one (1) by default.

Team Locking

Team locking limits the choices a player has for selecting a team.

There are four constants in TEAMPLAY.QC which allow configuration of the teamlock settings. The constants, TEAM_COLOR1 through TEAM_COLOR4 have values indicating a legal team color + 1, or '-1'. A value of '-1' indicates that this team is not used. Thus, the number of teams is adjustable from one to four.

In TEAMPLAY.QH, the constants TEAMCHANGE_FATAL controls whether or not a teamchange under static teams kills the player outright or just quietly resets the player's team color, while TEAMCHANGE_DEAD_OK controls whether a player is allowed to change teams while dead or an observer. If a player is allowed to change teams, their frag count is reset and their next respawn will occur on a teamplay start point.

Capture the Flag

You must have team color lock set for Capture the Flag and only have two teams defined (which impliesTEAM_COLOR3 and TEAM_COLOR4 are set to '-1'). If you don't, results are unpredictable.

Note that if you change the TEAM_CAPTURE_FLAG or TEAM_CUSTOM_MODELS bitflags on a running server, you must restart the server before the change will take effect.

Capture the Flag - Expert Rules

The CTF expert rules give out bonuses for performing special tasks during the game: fragging someone who has recently hurt your flag carrier, fragging someone while either you or your target are near your flag, fragging someone while either you or your target are near your flag carrier, returning a flag that causes a capture to happen almost immediately, and fragging a flag carrier if a capture happens almost immediately.

The exact bonuses, and the definitions of "near" and "immediately" are set in CTF.QH.

CTF Bots

By setting the teamplay BOT_AUTO_EVEN_TEAMS bitflag, you can cause CTF Bots to automatically spawn to even up teams. Parameters like the minimum number of players on a team that the bots will fill to and the maximum number of bots per team are set in the ETEAMS.QH file.


Common Problems

SZ_GetSpace

Occasionally, you may note SZ_GetSpace: Overflow showing up in the server console logs. Because QkrMods pushes a decent amount of aliased commands to the client console, clients with inflated *.RC files may experience problems. It is recommended that QkrMods clients be started with the -zone 1024 command-line parameter to allocate more memory to the zone buffer. Since this parameter is in bytes, it should not have a significant impact on client memory usage.

Unnconnected

A player showing as "Unconnected" can be a result of one of serveral problems: an unset player name, a client attempting to connect to a server which requires custom .PAK files, or a TCP/IP routing problem.


Contacting the Author

If you experience difficulties with Quaker Server Modifications, or have comments or questions please contact the author, Dark Grue, at darkgrue@iname.com.



QUAKE is a registered trademark of id Software, Inc.
The bird in the Quaker Server Modifications logo is a cinnamon Quaker Parakeet (myiopsitta monachus). More information on Quaker Parakeets may be found on the Quaker Parrot Homepage

Copyright © 1998, Dark Grue.