|  | Installation and Use
Availability Installation Game Options Common Problems Contacting the Author

## 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:

- 4.07 BETA 3
  - ftp://gue-tech.asee.org/pub/quake/quakec/QkrMods-4.07b3.zip (Primary Distribution Site)
  - ftp://ftp.cdrom.com/pub/idgames2/quakec/server/qkrmods-4.07b3.zip
- 4.07 BETA 4
  - ftp://gue-tech.asee.org/pub/quake/quakec/QkrMods-4.07b4.zip (Primary Distribution Site)
  - ftp://ftp.cdrom.com/pub/idgames2/quakec/server/qkrmods-4.07b4.zip

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:

- an archive utility capable of extracting `.ZIP` format files (WinZip is highly recommended for Windows users);
- and a modified QuakeC compiler. (Lee Smith's ProQCC is included in the distribution for Win32 users).
- You may also want to get the QuakeC Reference Manual by David "Dark Grue" Hesprich, which is helpful in understanding programming in QuakeC.
- If you wish to play Capture the Flag with custom maps/sounds/graphics, you will also need the Threewave Client `PAK`, 3wctfc.zip, as well as a utility to extract `PAK` files.

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:
   - Change the password for authentication from the defaults by editing the constants: `I_AUTH1`, `I_AUTH2`, `I_AUTH3` in the `MODULES.QH` file.
   - Choose the number of player connections that are number of connections reserved for authorization by setting the constant `AUTH_CONNECTS =` <integer> in the `AUTH.QH` file. By default, this is set to one (1) player.
   - Additional authentication options are selectable in the `AUTH.QH` file.
5. If you have set `USE_MODULE_ADMIN = 1`, configure remote administration:
   - Change the administration password from the defaults by editing the constants: `I_ADMIN1`, `I_ADMIN2`, `I_ADMIN3` in the `MODULES.QH` file.
   - Additional remote administration options are selectable in the `ADMIN.QH` file.
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.
   - The function `QueueLevel()` sets the server to play through the sequence of maps specified in the file `MAPQUE.QC`. By default this module is disabled. You may enable it (see above) and specify your own sequence of maps by modifying the values of the string variables '`map01`', '`map02`', etc. in this function. For instance, by setting:

     > map<[01..10]> = "<map name>";
     >     map01 = "e1m2";
     >     map02 = "e1m5";
     >     map03 = "";

     and starting the server with the `+map e1m2` flag; the server will play the maps e1m2, e1m5, e1m2, e1m5, etc. In the example above, the line:

     > `map03 = "";`

     is used to indicate the end of the sequence. By default you can only specify up to ten maps. If you want to be able to select more you will have to change the function `MapQueueChooseMap()` in an obvious way.
   - The function `RandomLevel()` returns a new random level that doesn't match old. The console variable `temp1` is used for level tracking. The fields for '`temp1`' are mapped out as follows:
     - bit 6 to 0 for percent of custom CTF levels (num 0x007F, 127).
     - bit 11 to 7 for Custom level (num 0x0F80, 3968);
     - bit 16 to 12 for id level (num 0xF800, 63488);
     Start the server with `temp1` set to the percentage of CTF level; a value of '`-1`' disables random level selection.
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:
   - If you want to inform players about more special properties of your server, alter the function '`ModulesShowInfo()`' in the file `MODULES.QC`. You can freely add your own messages there.
   - Changing the formula used by the module `RANK` for calculating the total score requires you to edit the function `RankCountEvent()` in the file `RANK.QC` in an obvious way.
   - Updating the SKIN module may become desirable if new players skins become available in the `PLAYER.MDL` file which is distributed as part of the Multiskin package.
   - Keep in mind that Quaker Server Modifications has been designed to be highly flexible - many gameplay options can be changed. Consult the `.QH` files for additional configuration options available for each module.
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.PAK`files (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 implies`TEAM_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.