![]() |
Quaker Server Modifications |
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.
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:
- changing gameplay settings (coop, deathmatch, noexit, pausible, registered, samelevel, teamplay);
- changing environment settings (fraglimit, timelimit, sv_friction, sv_gravity);
- changing levels (restart, "start", nextmap, and "dm1" - "dm6");
- kicking users; and
- remote shut-down of server.
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:
- 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).
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:
- fly around;
- switch to another observation point by pressing 'fire';
- and join the game as regular player by pressing 'jump'.
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:
- PLAYER = the name of the player,
- TOTAL = player's total score,
- KILLS = how many kills the player made,
- DEATHS = how often the player got killed by other players,
- ACCIDENTS = number of self-caused, deathly accidents.
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:
- Black Magic (strength, double damage);
- Earth Magic (resistance, half damage);
- Elder Magic (regeneration); and
- Hell Magic (haste, double fire rate).
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:
- corpses show the correct skin;
- skins are preserved across level changes;
- names for: skins are shown when the player chooses a skin; and
- skins are not enabled in teamplay mode, including Capture the Flag (this is because most skins don't change colors properly).
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:
- Two sections of the map are designated as base encampments.
- When you join the game (or enter the level) you are assigned to a team. Changing teams may or may not be allowed depending on the setting of the teamplay variable. You are spawned at the base (this is where the map modifications come in). If you die, you are not spawned at the base, but at one of the deathmatch start spots. This way, you don't kill a guy trying to get the flag at the base and he comes back to life immediately there.
- The flags are based on the key models. If you pick up the enemy flag, you must touch your flag in order to win. Note that if you get back to the base, your flag might not be there if the other team has it! Get the rest of your team to go get their flag back! The player who touches his base flag when carrying the other team's gets 20 frags, and everyone on his team gets 10 frags. Also, when you get a flag, you have that nice glow around you (such as when you get the quad damage). If you kill an opposing team player who has your flag, he drops it. If you touch your flag, it will teleport back to your base.
- Since everyone starts at their base after level change, or joining the game, the team will have to work out who is going to go and try to get the enemy flag (offensive strike), and who will stay to defend. Yes, this is camping, but its camping with a cause! Remember, you can communicate only with teammates by using messagemode2. Put this in your ID1\AUTOEXEC.CFG file:
When you hit 'r', you will get the usual talk prompt, except your message will only go to your teammates.bind r "messagemode2"
- In Capture the Flag mode, the levels proceed as follows: e1m1, e1m2, e1m3, e1m4, e1m5, e1m6, e1m8, e2m1, e2m2, e2m3, e2m5, e4m3, e4m4, e4m5, e4m6, dm3, and dm6. These are currently the only levels modified with flag support.
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.
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:
In the default case above, all modules are enabled except modules EJECTand MAPQUE.
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;
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:map01 = "e1m2";
map02 = "e1m5";
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.map03 = "";
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 -game QKRMODS'
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).quake -nocdaudio -nosound -noipx -nojoy -dedicated 8 +map start
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:
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.
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.