QkrMods Logo Quaker Server Modifications


Introduction

Quaker Server Modifications Version 3.06 (QkrMods v3.06) are a set of server modifications which are being run on the Clan of the Implementors' server. They contain what the Implementors consider the most useful and interesting patches for a dedicated Quake server.

Based on QuakeC code from the ServerModules package (written by Johannes Plass), the ADMIN.QC Release 2 pacakge (written by Douglas Keegan), the EJECT.QC package (written by Steve "Wedge" Bond), the Psycho Server package (written by "Psycho Prisoner"), the Shub Niggurath's Soul Sphere v1.0 package (written by Chris "Demonstar" Johnson), and the Threewave Capture pacakge (written by Dave 'Zoid' Kirsch)

The code has been heavily reformatted, and the code pulled out into separately compilable and configurable units. Changes to the id Software QuakeC code are documented in the source. The source code has been (heavily) reformatted into a consistent style, commented, and errors in the original source have been fixed. The behavior of the code has been improved, and some of the functions streamlined for faster execution. The use of entity fields has been minimized. Finally, additional functionality has been added to the modules as well.


Features

Some of the Quaker Server Modifications features are:

Remote Site Management

ADMIN.QC: Administration

This is a completely rewritten version of Douglas Keegan's ADMIN.QC Release 2 pacakge.

Uses a three-impulse sequence to give a client administrator privileges, and then other impulse commands are used to perform certain functions, such as:

Set 'KILLSERVER_ALLOWED = 1' in ADMIN.QH if you wish the killserver command to be available for use by administrators.

The command 'help-admin' displays administrator commands, while 'admin-revoke' removes administrator privileges.

AUTH.QC: Authorization

Uses a three-impulse sequence to give a client authorization capability to a server. Configurable in AUTH.QH. Set 'NON_AUTH_CONNECTS' to the number of player connections that are not required to authorize ("maxplayers" - number of connections reserved for authorization). Set 'AUTH_IS_ADMIN = 1' if you wish authenticated players to be given administrator privileges immediately upon logging in.

Expanded Console Messages

If USE_MODULE_CONSOLE = 1 is set in MODULES.QH, the console will receive a message when a client connects, disconnects, exits a level, or suicides.

EJECT.QC: Eject!

Sets up the shotgun and Super Shotgun to eject shotgun shells which clatter to the ground when fired. The shells stick around for 15 seconds, then remove themselves.

Requires custom .MDL and .WAV files to be present.

EXITRLS.QC: ExitRules

Disallows exiting a level too early. Players can only exit a level:

Exit rules are configurable in EXITRLS.QC. The ExitRules valid for the current level are displayed when the player enters the level. Levels like 'dm1'-'dm6', 'start', and 'end' don't impose ExitRules.

The command 'help-exitrules' shows the rules in effect for the current level.

HOOK.QC: Grappling Hook

This weapon lets you hook the ceiling and get pulled toward it. You can also hang from the ceiling and snipe at people. (Don't worry, its doesn't make camping any more effective, as a rocket at the ceiling usually deals with anyone handing around.) The command 'help-hook' gives information about using the hook.

KCKSCDR.QC: KickSuicider

Provides a way to get rid of the suicider-nuisance (players suiciding in rapid succession a few dozen times). Players suiciding more than two times in two minutes on a level are kicked out of the game.

MAPQUE.QC: Map Queuing

Allows scripting to specify a sequence of levels to be played on the server (configurable in MAPQUE.QH).

MESSAGES.QC: Redundant Message Removal

allows the removal of redundant messages such as "You got the shells" or "You got the armor." This was just cluttering up the message stream and isn't needed since pickups are already signified by a flash and an audio cue. Messages may be enabled or disabled by class of message by editing MESSAGES.QH.

MOTD.QC: Message of the Day

When connecting to the server a MOTD (set in MOTD.QC) is center-printed to the player's screen. A moment later, information about local server settings and extensions is dumped to the player's console.

OBSERVER.QC: Observer

As observer you just watch what's happening, without interacting with other players or with the environment. This especially means that other players will not notice you when you are an observer. You can turn into an observer by pressing a button when you are dead. As an observer you can:

When you connect to the server you automatically start as observer, unless 'ONLY_ADMIN_IS_OBSERVER = TRUE' (in OBSERVER.QH), in which case only players with the PLAYER_IS_ADMIN bitflag set are allowed this privilege.

The command 'help-observer' provides help on the observer mode, while 'observer-noclip' toggles clipping on and off in observer mode, and 'observer-toggle' toggles respawning as an observer on and off.

PreviousWeaponCommand(): Select Previous Weapon

By selecting IMPULSE 13 a player may change to the previously selected weapon (if it is valid). This is a custom implementation of an idea suggested to me by Michael "McBain" Peckman at GWU.

RANK.QC: On-line Ranking

The command 'rank' displays a sorted ranking table with entries in the format:

TOTAL = KILLS DEATHS ACCIDENTS = PLAYER, where:

The score is prefixed by a "D" if the player is dead, and an "O" if the player is an observer at the time the rank report is output.

The command 'help-rank' provides help on the format of the ranking table and should explain the local formula (set in RANK.QC) used to calculate the total score as well.

RUNES.QC: Runes

Runes are spawned randomly, one of each with an unique power. Currently there are four:

When someone dies, the rune pops out and can be picked up. You can only carry one rune at a time.

SKIN.QC: MultiSkin

This is an improved version of Dennis Noordsij's Multiskin, which allows you to use different skins. Only a few changes have been made to his code, with the effect that:

The commands 'skin-next' and 'skin-prev' may be used to change skins. The command 'help-skin' provides some help about available commands.

Players have to use proper player and player-head model files containing the actual skins to be displayed (skins are handled by the client).

SSPHERE.QC: Shub Niggurath's Soul Sphere

This is a deathmatch only modification that makes the notorious map "end" exitable (which it normally is not in deathmatch). What happens is that before removing Shub, a new entity will be put near the ceiling of the small secret room that contains the quad damage. This entity (actually the Vore's missile) hovers at the top of the room, mindlessly spinning and firing deadly lightning bolts in random directions. The sphere has 20000 hit points (set in SSPHERE.QH). Its rotation, lightning frequency, and damage are directly proportional to its remaining hit points. When it is killed, the level ends. The next level is hard-coded to be "start".

TEAMPLAY.QC: Teamplay

The command 'help-team' gives information on current teamplay settings.

The options included in this release are:

The Complete Enhanced Teamplay

Bit Option
1 Health Protect
Players receive no health damage from teammates' attacks.
2 Armor Protect
Players receive no armor damage from teammates' attacks.
4 Mirror Damage
A player who attacks his teammate will receive the same damage the teammate would have received, had he not been protected.
8 Frag Penalty
Any player who kills his teammate will be penalized frags. The number of frags to penalize is adjustable by a simple edit in the TEAMPLAY.QC file.
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 team (pants color) will be fragged and their frag count is reset to zero.
64 Static Teams
Players will not be allowed to change teams.
128 Drop Items
Players can drop ammo (in backpacks) and weapons by giving the commands 'toss-backpack' and 'toss-weapon', respectively.
256 Capture the Flag
This enables Capture the Flag support.
512 Use custom model support.

The command 'help-team' gives information on current teamplay settings.

Obviously, not all these options make sense together. Setting teamplay 9 doesn't really make sense, because you couldn't ever kill a teammate, and thus you could never incur the one frag penalty. To select multiple options, add the numbers of the options together.

You must have team color lock set for capture the flag.

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, or -1. A value of -1 indicates that this team is not used. Thus, the number of teams is adjustable from 1 to 4.

If you enable Capture the Flag you must only have two teams defined. TEAM_COLOR3 and TEAM_COLOR4 MUST be set to -1. If you don't, results are unpredictable.

Capture the Flag

Capture the flag offers an exciting variation on team play. It gives meaning to base defense along with offensive positioning and strikes. The implementation is an extension of John Spickes' JTEAM patches.

The basic premise is: attack the enemy base, grab their flag, then take it back to your base. In this variation, you must touch your base flag while carrying the enemy flag in order to score.

Map modifications have to be done in order to enable Capture the Flag play on a map.

The rules are as follows:

The command 'flag-show' gives information on the current disposition of the team flags.

TELEFRAG.QC: Telefrag Protection

TSCORE.QC: Tabulated team scoring

If teamplay is on, upon the exit of each level, the server calculates the team scores then prints them to all player's consoles, winning team last. To give clients time to read the scores it then waits (set by TEAMEXIT_WAIT in TSCORE.QH) before calling the intermission.

XITMSG.QC: Client Disconnect Messages

Instead of getting "<player> has left the game with <n> frags" when a client disconnects, the player's number of frags is ranked, and an appropriate comment or insult is displayed. There are five exit "categories": dead last/less than one frag, 0% - 33%, 33% - 66%, 66% - 100%, and top player.


Use

You must be using registered Quake (v1.06 tested) in order to use this or any other QuakeC patch.

Assuming that the directory C:\GAMES\QUAKE\QKRMODS contains a fresh copy of unmodified v1.06 QuakeC source together with the QuakeC Compiler QCC (for Win95/NT) or QCCDOS:

  1. Unzip the QkrMods archive in C:\GAMES\QUAKE\QKRMODS.
  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. By default the following are set:
    float USE_MODULE_AUTH         = 1;
    float USE_MODULE_ADMIN        = 1;
    float USE_MODULE_CONSOLE      = 1;
    float USE_MODULE_EJECT        = 0;
    float USE_MODULE_EXITRULES    = 1;
    float USE_MODULE_HOOK         = 1;
    float USE_MODULE_KICKSUICIDER = 1;
    float USE_MODULE_MAPQUEUE     = 0;
    float USE_MODULE_MESSAGES     = 1;
    float USE_MODULE_MOTD         = 1;
    float USE_MODULE_OBSERVER     = 1;
    float USE_MODULE_RANK         = 1;
    float USE_MODULE_RUNES        = 1;
    float USE_MODULE_SERVER       = 1;
    float USE_MODULE_SKIN         = 1;
    float USE_MODULE_SOULSPHERE   = 1;
    float USE_MODULE_TSCORE       = 1;
    float USE_MODULE_XITMSG       = 1;
    In the default case above, all modules are enabled except modules EJECTand MAPQUE.
  3. This step is very important! Customize the display of your server by editing the Message of the Day in the function 'MotdThink()' in file MOTD.QC and the server greeting in the function 'ServerInfo()' in file SERVER.QC. Please do not change or remove the QkrMods banner/version number.
  4. If you want to inform players about more special properties of your server, have a look at the function 'ModulesShowInfo()' in the file MODULES.QC. You can freely add your own messages there.
  5. 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.
  6. The Module 'MapQueue' allows to play through the sequence of maps specified in the function 'MapQueueChooseMap()' 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:

    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 more you will have to change the function 'MapQueueChooseMap()' in an obvious way.
  7. Updating the module 'SKIN.QC' may become desirable if new skins become available in the file PLAYER.MDL which is distributed as part of the Multiskin package.
  8. Compile the sources by typing the command QCC or QCCDOS.
  9. Modify the maps for Capture the flag:
    1. Unpack your 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, winpak (http://www.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 either run DOBSP.BAT for DOS/Win95 or sh dobsp.sh for Linux. Note that qbsp must be in your path. qbsp is part of the id Software Quake utility package (http://www.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.
  10. Assuming that compilation succeeded without errors, change directory to C:\GAMES\QUAKE\ and check your changes by typing:

    'quake -game QKRMODS'

    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 -nocdaudio -nosound -noipx -nojoy -dedicated 8 +map start

    or according to your wishes. Be aware that quake command-line switches are case-sensitive (must be all in lowercase), and that Quake cannot have components on a path which contains long filenames (LFNs).


Availability

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

The pacakge is available via FTP from:


Acknowledgments

My thanks to Steve Bond, Chris Johnson, Douglas Keegan, Dave Kirsch, Johannes Plass, and Psycho Prisoner - their work created the foundation on which Quaker Server Modifications is based.

To id Software goes the lion's share of the credit - for creating a fine product and releasing the tools which makes releasing Quake add-ons and modifications possible.


Copyright and Distribution Permissions

Quaker Server Modifications (QkrMods) are Copyright © 1996, Dark Grue.

Authors MAY use these modifications as a basis for other publically available, non-commercial work, provided that they contact the author first and obtain permission in the form of written consent or e-mail.

Redistribution of this package, in whole, or in part, is strictly forbidden.

DISCLAIMER: The author disclaims all warranties, either expressed or implied, with regard to the information provided in this software distribution, including, but not limited to, all implied warranties of merchantability, fitness for a particular purpose, or non-infringement. In no event shall the author 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 information.


QUAKE is a registered trademark of id Software, Inc.
Picture of The Implementors from the Zork Zero manual, by Infocom, of course!
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 © 1996, Dark Grue.