Starting the server

    To set up a server under Windows:

    	- Get ProQuake from planetquake.com/proquake/, unpack it in your
    	  Quake directory,

    	- unzip this distribution into a directory called runequake
    	  in your Quake directory (this is the name it unpacks into by
    	  default),

    	- copy example.cfg to autoexec.cfg in the runequake directory,
    	  edit as desired (at a minimum, just change the hostname setting),
    	  and

    	- run

	    wqpro -game runes -dedicated 16

    	  for a dedicated server, or

	    wqpro -game runes -listen 16

	  if you just want to play against some friends.

    Under other OSes it's mostly the same, but the game executable
    differs.  Under Unix systems use sqpro, it's also available at
    planetquake.com/proquake/.

    This doesn't address re-starting the server if it crashes.  I use a
    short script which guards against a server which is crashing repeatedly
    (and mails me when it crashes).  Mail me if you'd like a copy.

    If you're setting up a permanant public server, the last step is to
    add it to the server lists so that Gamespy can find it.  The version of
    Gamespy I had a look at before writing this section queried 4 sources
    for servers out of the box, but three of them (Pipo, Stomped, and Ironman)
    have since been shut down.  The only one which is still up is:

	http://www.gameaholic.com/servers/quake/

    Once your server is up and running visit the URL and use the
    server addition form.

    Finally, for a public server you probably also want to run Qsmack.
    See the info on it later in this file.


Configuration

    Most configuration is done by setting bits in the deathmatch,
    teamplay, noexit and temp1 console variables.  Basically, you add
    together the numbers for the settings you want to turn on and set
    the variable to the total.  See the example.cfg file for a sample.
    You can create a file called "autoexec.cfg" in the runequake
    directory which contains the settings you want to use for your
    server.

    In Quakeworld the noexit and temp1 console variables don't exist, so
    use serverinfo there instead.

    The next few sections detail the settings which can be configured
    this way.  Other things can be configured via settings.qc, that's
    explained a little further on.


deathmatch

    1 items respawn				DM_RESPAWN

	Items (armor, health, ammo, powerups) respawn.

    2 weapons stay				DM_WEAPONS_STAY

	Weapons stay instead of being picked up.  You can only pick up a
	particular type of weapon once.  Ammo respawn times are halved.

    4 long quad respawn				DM_LONG_QUAD_RESPAWN

	Quads take 5 minutes rather than 60 seconds to respawn.

    8 quad replacement				DM_QUAD_REPLACEMENT

	Only one quad is allowed on a level.  Additional quads are
	turned into good weapons, or armor.

    16 pentagram replacement			DM_PENT_REPLACEMENT

	Only one pentagram is allowed on a level.  Additional pentagrams
	are turned into good weapons, or armor.

    64 exit attempt doesn't kill you		DM_EXIT_NON_FATAL

	Trying to exit doesn't harm you even if noexit is set.

    128 no discharging				DM_NO_DISCHARGE

    	Using a lightning gun under water, or jumping into water with
    	the electricity rune, only hurts the person who does it.

    256 powerups don't drop			DM_NO_DROP_POWERUP

	Normally, if a player is killed while she has a powerup (a quad,
	ring or envirosuit) the powerup will drop, like a backpack.
	Anybody can pick it up and use the remaining time.  The time
	continues to tick while the powerup lies on the ground.
	Setting this bit disables this behavior.

   1024 armor doesn't drop			DM_NO_DROP_ARMOR

    	Normally a player drops any armor she has left when she's killed.
	If you set this bit that behavior is disabled.

	The resulting armor acts like normal armor in that you won't
	pick it up if it contains less total protection than you've
	got already.  An alternative would be to have it add to your
	current armor (scaled, of course), but I think this way is
	better because it helps good players less than others (the
	others need the armor more, good players already prioritize
	getting armor).

    2048 damage-based frag scoring		DM_DAMAGE_MATCH

    	In this mode frags are scored not by killing people, but by
    	doing damage to them.  This isn't an original idea, I read about
    	it a few years ago.  My implementation might differ from the
    	original, though, I didn't consult it.

	Here's how it works:

	    - You get credit for doing damage to other players, regardless
	      of whether you're damaging their health or their armor.

	    - You lose credit for doing damage to yourself, be it by
	      suicide, rocket jumping, swimming in lava, or whatever.

	    - A frag is equal to 150 points of damage.  You have a
	      running counter of damage done which hasn't added up to a
	      frag yet.  If it climbs to 150 you get a frag, if it
	      drops to -150 you lose a frag.  You can get multiple
	      frags from a single kill (by killing somebody with 300
	      health with kamikaze or berserk or quad, eg).

	The rules are simple, but some of the implications are surprising.
	Eg, piercing becomes a much less desirable rune because you get
	less benefit from each kill.

    4096 random powerup respawn                 DM_RANDOM_POWERUP_RESPAWN

        Many players keep tabs on when the next powerup will respawn.  To
	avoid quad and pent domination, random seconds, based off of the
	value SLOW_POWERUP_RESPAWN_TIME (settings.qc), will be added to
	the current pent and quad times.


teamplay

    1 health protect				TEAM_HEALTH_PROT

	Your teammates don't lose health when you shoot them.

    2 frag penalty				TEAM_FRAG_PENALTY

	You lose a frag for killing a teammate.

    4 armor protect				TEAM_ARMOR_PROT

	Your teammates don't lose armor when you shoot them.

     8 enforce two teams			TEAM_2_TEAMS
    16 enforce three teams			TEAM_3_TEAMS
    24 enforce four teams			TEAM_4_TEAMS

    	If you add any of these in to your teamplay cvar the server u ses
	enforced team mode.  The players are automatically assigned to
	one of the teams when they join the game (or when enforced team
	mode is switched on).  Players are allowed to switch teams, but
	only to a team which has fewer players.

    64 team change any				TEAM_CHANGE_ANY
   128 team change top dog			TEAM_CHANGE_TOPDOG

    	When enforced teams are on players are normally only allowed to
    	switch teams if the team they're joining has fewer players than
    	all other teams.  These settings change that.

	In TEAM_CHANGE_ANY mode anybody can switch to any valid team.

	In TEAM_CHANGE_TOPDOG mode the player with the most frags can
	switch to any valid team.

    256 no team voting				TEAM_NO_VOTE

    	Normally players can use the vote-team command to turn team mode
    	on and off.  (The team mode used for this is VOTE_TEAM_MODE,
    	defined in settings.qc.)  If you set this bit in your teamplay
    	variable team voting will be disabled.  Team voting is also
    	disabled if teamplay is set to a value other than 0 or the mode
    	from settings.qc.

    512 team self health protect		TEAM_SELF_HEALTH_PROT

	When TEAM_HEALTH_PROT is set, you can't do damage to your own
	health.  This setting is similiar to the old-style teamplay 1
	setting.

   1024 team self armor protect			TEAM_SELF_ARMOR_PROT

   	When TEAM_ARMOR_PROT is set, you can't do damage to your own
	armor.


noexit

    1 no exiting				NOEXIT_NO_EXITING

	Don't allow exiting levels.  You can control whether the attempt
	kills players with the DM_EXIT_NON_FATAL configuration bit of
	the deathmatch cvar.

    2 allow star level exit			NOEXIT_ALLOW_EXITING_START

	Players are allowed to exit the start map.

	As a special case, setting noexit to 2 exactly is just like
	setting it to 3.  This is for compatibility with Quake's
	standard usage of this variable.

    4 randomize					NOEXIT_RANDOMIZE

	Select the next level to play randomly.  This never chooses e1m7,
	e1m8 or end unless you're also using NOEXIT_CHOOSE_BY_NPLAYERS,
	or you've got the DM_LAN_MODE bit set in the deathmatch cvar.

    8 select level by number of players		NOEXIT_CHOOSE_BY_NPLAYERS

	Select the level to play based on the number of players.  More
	players means larger levels (with a little randomization thrown
	in for spice).

    16 use Marlinspike levels			NOEXIT_MARLINSPIKE_LEVELS

    	This sets the server to use what I consider to be a good set of
    	levels for deathmatch.  If you don't want to use the same set I
    	do, you can customize the levels which are allowed by editing
    	the user_allowed_map() function in the settings.qc file and
    	recompiling instead of (or in addition to) setting this bit.

    32 don't loop back to dm1 after dm6		NOEXIT_DM_NO_LOOP

    	Ordinarily the game will play the dm1 level after finishing dm6.
    	If you turn this bit on then it will loop back to the start
    	level instead.  This also makes it so that the server plays the
    	DM maps between episode 4 and episode 1 when it chooses which
    	level to play, and it makes it so the DM maps are played if a
    	player chooses the end map exit from the start level.

    64 * max players before forwarding		NOEXIT_FORWARD_MULT

    	If you use this setting then the game will automatically forward
    	players to a different server once the game gets too full.  Eg,
    	if you add 640 into your noexit value the game will forward any
    	players who connect when there are already 10 people online
    	(regardless of whether they're playing or observing).  You can
    	change the server to which they're forwarded, but you'll have to
    	edit settings.qc and recompile for that (see below).  By default
    	they're forwarded to my server.

  1024 don't use custom levels                  NOEXIT_NO_CUSTOM_LEVELS

	Disable the custom maps from the map rotation and vote options.

  2048 don't use standard maps                  NOEXIT_CUSTOM_LEVELS_ONLY

	Providing there are custom maps on the server, you can avoid
        seeing the standard levels in the map rotation.  Voting options
        for the standard maps are disabled as well.

  4096 allow voting non-rotatable maps          NOEXIT_VOTE_ALL_MAPS

        If you explicitly deny custom or standard maps you will not be
        allowed to vote for them without using this option.


temp1

    1-63 number of runes			T1_NRUNES_MASK

	The base for the temp1 cvar is the number of runes which are
	allowed on the level at once.  It has to be 63 or less.  The
	default is 16.

	This only counts runes which are actually lying around on the
	level.  Runes which players are using don't count towards this
	quota.

    64 rune selection by impulse		T1_RUNE_CHEAT

	Allow selecting runes by impulse.  This is mainly for debugging.
	Impulses 101 and up (up to the maximum number of runes) will
	give you particular runes.  See the Playing guide for a list of
	what's what, and the aliases.cfg file for a way to select runes
	by name.

    256 can pick up own rune			T1_CAN_GET_OWN_RUNE

	You can pick up a rune you dropped when you were killed.  This
	bit is ignored if T1_NO_DROP_ON_DEATH is set.

    1024 random rune models			T1_RANDOM_RUNE_MODELS

	The model chosen for a particular rune is random.  Normally they
	are consistent (eg, the flight rune will always use the hell
	magic model).

    2048 fast rune spawn			T1_FAST_RUNE_SPAWN

	Spawn runes immediately.  Normally there's a delay of between 1
	and 16 seconds between rune spawns.  When this bit is set they
	all spawn at once.

    4096 * max players				T1_MAX_PLAYERS_MULT

    	You can limit the number of players allowed in the game by
	adding 4096 times the maximum number of players you want to
	allow (up to 15) to the temp1 value.  Players in excess of this
	remain observers until somebody stops playing.  (The observer
	chosen to join the game is the one who asked to join it first.)

	For example, I have my server set up to allow 16 people to
	connect, but I limit the game to 10 players by adding 40960 to
	the temp1 value.

    262144 [REMOVED]
    524288 [REMOVED]

    	Normally the grappling hook is a rune like any other.  You can
    	use one of these settings to change that.  If either of these is
    	set then the grappling hook doesn't appear as a regular rune.

    	In free hook mode everybody gets the grappling hook.  I
    	don't recommend this setting.  It makes for worse gameplay
    	because it screws up the relative value of many of the runes
    	(flight, gravity, jumping, teleport shuffle, and others) and
	often subverts the map designer's intentions.

	In Lithium hook mode players get a grappling hook by picking up
    	vore balls (little spiky purple balls).  These spawn randomly on
    	the level.  The number of such hooks available is normally 1/3
    	the number of players, rounding up (7 players means 3 hooks).

   1048576 no hook voting			T1_HOOK_NO_VOTE

	By default, the hook is a rune and you must find the rune in order
	to grapple.  Using the vote-hook command will change the mode of
        the hook to either free or lithium hook (defined in settings.qc as
	VOTE_HOOK_MODE).

     65536 no rune drop delay			T1_RUNE_DROP_DELAY_0
     66048  15 second rune drop delay		T1_RUNE_DROP_DELAY_15
    131072  30 second rune drop delay		T1_RUNE_DROP_DELAY_30
       512  60 second rune drop delay		T1_RUNE_DROP_DELAY_60
    131584 120 second rune drop delay		T1_RUNE_DROP_DELAY_120
    196608 240 second rune drop delay		T1_RUNE_DROP_DELAY_240
    197120 rune dropping disabled		T1_RUNE_DROP_DELAY_INF

    	Choose one of these numbers to specify how long players have to
    	hold on to their runes before they can delete them.  The default
    	delay is 5 seconds, it is used if you don't use any of these in
    	your temp1 setting.

    	I think that an interesting variation on the game is to disable
    	rune deleting (or set it to a minute or more), set random rune
    	models, and set it so you don't drop your rune when you die.


scratch1

    1 equalize all lightstyles                  S1_EQUALIZE_LIGHTSTYLE

	This will set all of the light sources to the normal lightstyle()
	setting.  (lights won't flicker, strobe, or pulsate)

    2 turn off all ambient sounds               S1_AMBIENT_SOUND_OFF

	Force all ambient sounds off, even from the client.

    4 don't spawn any static lights             S1_LIGHT_MAKESTATIC_OFF

	Remove all static lights from the level.  This will not change the
	lighting of the level.

    8 bprint prints to server console           S1_BPRINT_TO_CONSOLE

        If your engine doesn't print bprint messages to the server console,
        you won't see any death messages.  Make sure you don't set this bit
        accidentally or you will see double messages!

   16 keep existing level items                 S1_ORIGINAL_LEVELS

        Do not place any additonal items on the level.

   32 limit max traps per rune                  S1_MAX_TRAPS_FOR_LEVEL

        If you're rune-delete delay is low, you can prevent a build-up of traps
        when you enable this feature.

   64 basic/lite runes                          S1_BASIC_RUNES

        Use the four most common runes: strength, regeneration, resistance,
        and haste.

  128 custom exits                              S1_CUSTOM_EXITS

        If this is set, all of the level exits will teleport you instead of
        triggering a change level.  The destinations to these teleports may
        be stationary or random, depending on the level.

 1024 no default mode                           S1_NO_DEFAULT
 2048 default mode arena                        S1_ARENA_DEFAULT
 4096 default mode practice                     S1_PRACTICE_DEFAULT
 8192 default mode match                        S1_MATCH_DEFAULT

        The server is setup to run as a runes server by default.  This means
        that if the mode of the server has changed along with any of its votable
        options, the server will restore its original settings once all of the
        players have gone.  Each game mode has its own set of configurations
        that can be further customized via the source code.

        Use the bit settings to change the default mode of the server to either
        arena, practice, or match.  If you select the no default mode setting,
        the server will not revert back to any particular mode nor will any of
        the votable options.

	If you try and force multiple modes by adding more bits together, it
        won't work as the lowest bit takes precedence.


samelevel

    If you use the samelevel variable, only set it to 0 or to 1.  The
    rest of the bits in the variable are used internally by the mod.


settings.qc

    You can also configure some other things by editing the settings.qc
    file and recompiling the server.  Download the source distribution
    and read the instructions at the top of settings.qc.  You can control
    the item and powerup respawn times, the amount of ammo players can
    hold, the enforced team colors and other things this way.

    Some items which can be changed via settings.qc of particular interest:

    	You can change the contents of the splash screen (the screen
    	players see when they first connect).  A lot of people like to
    	put the server's name and the server admin's email address here.

	You can control precisely which maps will be played.  Maps you
	tell the server not to play will be skipped in all level selection
	modes.

    	You can enable the administrator mode.  This is disabled by
    	default, you have to set the passcode in settings.qc and
    	recompile in order to use it.  See below.

    	You can set up forwarding.  This makes it so players who connect
    	to the server when there are already a given number playing are
    	forwarded to a different server (or to a different port on the
    	same server).

    	You can enable the Qsmack support.  Qsmack is a program which
    	will allow you to do more flexible and extensive banning than
    	POQ provides, among other things.  See
    	http://lemur.stanford.edu/clan9/qsmack/ for more info.
	Some useful ban patterns:

	    unmodified Stooge bot:	ban_name ^SBot\x1c
	    newline or CR in name:	ban_name [\r\n]
	    blank-looking name:		ban_name ^[\x0a\x0c\x0d\x20\x22\x8a\x8c]+$


Admin mode

    In order to use administrator mode you have to compile the
    progs.dat yourself in order to define your passcode.  See the
    section on settings.qc above.

    Turn on administrator mode by choosing the admin menu from the
    observer menu, or by running "admin-toggle" in the console.  The
    game will prompt you for the passcode, the console has to be closed
    when you type it.  There's an alternate way to turn admin mode on,
    using the Qsmack support.  See below for info on that.

    Innate administrator abilities are:

    	- You won't be forwarded from a full game,

	- you can join a full game,

	- when you ride people they won't be told about it (coupled with
	  an assumed name, this is useful for spotting bots),

	- you can use the administrator menu and commands,

	- you can observe a match mode team game without being on a
	  team,

    	- you can get the camouflage rune at any time, to help spot
    	  cheaters.  Use impulse 116 for this (this is the same impulse
    	  you'd use to get this run in T1_RUNE_CHEAT mode).  Stand in an
    	  obscure place and see if the suspect acts as if he can see
    	  you.  I don't know for sure, but since this sets you not to
    	  use a model at all I suspect this won't help spot people who
    	  have modified the player model to have long spikes sticking
    	  out of it or the like, and,

	- as a non-riding observer, you can can toggle your eyes so that
	  everyone sees them.  This is useful for detecting bots and pak
	  users.


Automatically turning admin mode on when you connect

    You can also piggy-back on the Qsmack code to turn on admin mode
    automatically when you connect to your server.  Create a config file
    like this to connect to your server:

	alias init	"echo init;   impulse 73; alias init   x"
	alias init01	"echo init01; impulse  1; alias init01 x"
	alias init02	"echo init02; impulse  2; alias init02 x"
	alias init03	"echo init03; impulse  3; alias init03 x"
	alias init04	"echo init04; impulse  4; alias init04 x"
	connect myserver

    (substituting the init01 through init04 impulses for your Qsmack
    passcode, and "myserver" for your server name), then create an alias
    in your autoexec.cfg to run it, like:

    	alias c exec myserver.cfg

    I suggest going to this trouble to set up these aliases only when
    you connect to your own server so that you don't inadvertently
    reveal your Qsmack passcode to other servers.


Admin mode commands

    Many of these are also available on the administrator menu.

    The commands which act on a player act on the player you are currently
    riding.  They won't work if you aren't riding anybody.  Because of
    this interface administrators are allowed to ride observers.  Riding
    observers doesn't really work (though I wish it did), it's allowed
    just so you can use these commands.

    command admin-toggle

    	This command turns admin mode on or off.  Close the console
    	before typing in your passcode when you turn it on.

    command admin-cycle

    	Since you can't ride players while you're playing, use this
    	command to cycle through a list of players.  When you land
	on the one the player you want, just type the admin action
	in the console.

    command admin-cycle-show

    	Once you've selected a player using admin-cycle, use
	this command to display your current victim.

    command admin-eyes

    	As a non-riding observer, toggle your model eyes to be visible
	by all players.

    command admin-join

    	This puts the player you're riding into the game, even if the
    	game is full.

    command admin-kick

    	Kick the player you are riding.

    command admin-kill

    	Kill the player you are riding.

    command admin-rename

    	Rename players using the same function that is used when a player
	uses a null name.

    command admin-rune-delete

    	Remove the rune from the player you are riding.

    command admin-team-change

    	Change the team of the player you're riding (in enforced team mode).

    command admin-team-change-toggle

    	In enforced teams mode, toggle the ability of players to join a
    	teams freely.  When this isn't enabled players can only join
    	smaller teams.

    command admin-teamplay-zero

    	Reset the teamplay bit to 0.

    command admin-unbind

    	Unbind a player's keys and set her sensitivity to 0.  Initially
	this was used as an alternative for kicking, but it's also useful
	for detecting bots.

    command admin-vote-team-toggle

    	Turn vote-team on and off.

    command change-level

    	This will bring up a menu which allows you to pick a new level
    	to play.

	Most people will want to use the menu, but it's possible to
	select the next level by impulse, too.  After giving the
	change-level command the next impulse you type can determine the
	level which will be selected.  Episode X map Y is selected with
	impulse XY.  Eg, impulse 11 selects e1m1, impulse 23 selects
	e2m3, and so on.  For the deathmatch maps use 5x (so impulse 54
	selects dm4).  As a special case, the start map is impulse 57
	and the end map is impulse 58.

    command exit-level

    	This command causes the current level to finish, just as if the
    	time or frag limit has been reached.

    command qsmack

    	This only works if you're using Qsmack (see above).  It's used
    	to trigger Qsmack commands you put in your name.  See the Qsmack
    	documentation.