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.