OSP Server Mode Configuration
=============================
23 Feb 2003
rhea@OrangeSmoothie.org
http://www.OrangeSmoothie.org


OSP allows server operators to define custom configurations for
availability to clients to vote on while connected.  These
configurations can be as simple as strict FFA/1v1/Team DM/CTF and
Clan Arena play as defined out of the box, with the option to
define modes of play that are deviate far from the norm (i.e.
instagib CTF with low gravity and all items on the level
replaced with BFGs).

While this flexibility can be quite powerful, for the uninitiated,
and for the players subjected to server operator experimentation
with alternate config modes, it is also bit overwhelming and
equally as confusing.

Since most server ops and players just want to be able to switch
between out of the box modes of play (i.e. to go from 1v1 to ctf
to team DM), OSP has defined 8 internal configurations with core
settings that have been accepted by the community as "standard":
	- FFA
	- 1v1
	- QIL TDM  (http://www.qil.org)
	- Team DM
	- CTF
	- Clan Arena
	- FreezeTag (OSP settings)
	- FreezeTag (Vanilla 1.51b settings)

Now, another way to view alternate server configurations is to
define them as new custom game "modes".  OSP takes this to the
next step by allowing server operators to utilize custom game
modes in the same manner in which "g_gametype" is used.  That
is, a server's start-up configuration can be a simple shell of
a configuration that defines such things as the hostname, MOTD
to display to clients, maxplayers, etc. with a "mode_start"
setting that defines the set of core gameplay parameters to
tweak when the server is launched.  Essentially, "mode_start"
is a much more powerful version of "g_gametype" that allows
the setting of parameters in addition to the gametype.

Alternate game modes are defined in a configuration file
specified in the server's start-up .cfg with the
"mode_customfile" parameter.  The format of this file is
as follows:

<new modename> [tab] <mode filename.cfg>

[NOTE: [tab] refers to the "tab" character.  That is, the
 custom mode name and its .cfg file *must* be separated with
 a TAB character.]

The mode_start parameter is a dynamic setting, based on the
internal configurations defined by OSP with the addtion of
alternate game modes defined by the server operator.  The
first 8 values of mode_start are always the same:
	0 - FFA
	1 - 1v1
	2 - QIL TeamDM
	3 - TeamDM
	4 - CTF
	5 - Clan Arena
	6 - FT (OSP)
	7 - FT (Vanilla)

All custom modes will start at 8 or higher.  The custom mode
value is based on the order in which it is specified in the
"mode_customfile" .cfg file.  So, for example, if the .cfg
specified in the "mode_customfile" is as follows:

instagib	cfg-modes\instagib.cfg
instagib-ctf	cfg-modes\instagib-ctf.cfg
bfg madness	cfg-modes\bfg.cfg
gauntlet-only	cfg-modes\gauntlet.cfg

Then the server's available modes of play would be:
	 0 - FFA
	 1 - 1v1
	 2 - QIL TeamDM
	 3 - TeamDM
	 4 - CTF
	 5 - Clan Arena
	 6 - FT (OSP)
	 7 - FT (Vanilla)
	 8 - instagib
	 9 - instagib-ctf
	10 - bfg madness
	11 - gauntlet-only

The server could then specify "mode_start 7" in its
start-up script to launch the server as an instagib CTF
server, yet have all of the other modes available to
players for voting.

The default setting for "mode_customfile" is "none",
which disables any additional custom mode settings.

Now, what about the internal configs you ask?  Well, as
mentioned earlier, this custom mode setting is a bit
time-consuming and confusing the first go-around.  Since
most server ops just want to get OSP up and running with
basic gametypes available, the core internal configs
define preset settings that cannot be changed.  This
gives assurances to players that these settings are
GUARANTEED to be the same on any OSP server.  It also
lets the server op to not have to worry that they have
the exact settings that everyone expects.  When upgrading
to the latest version of the OSP server, they also have
the latest set of "standard" settings.

Of course, not ALL settings are hard-coded in these core
configs.  As mentioned earlier, the server shell .cfg is
used to specify custom non-gameplay-affecting settings.
The list at the bottom of this file defines what variables
can be set in the start-up .cfg that won't be affected by
the internal server modes.

Specific internal configs are made available for client
voting through the "server_availmodes" setting.  It is
a bitmask that defines which modes are to be enabled:
	  1 - FFA
	  2 - 1v1
	  4 - QIL TeamDM
	  8 - TeamDM
	 16 - CTF
	 32 - Clan Arena
	 64 - FT (OSP)
	128 - FT (Vanilla)

Thus, a setting of "56" means that Team DM, CTF, and Clan
Arena (modes 3, 4, and 5) are available for client voting.
The default setting for "server_availmodes" is 59 (all
modes are available for voting, EXCEPT for "Badlands TDM").

It is *highly* recommended that server operators utilize
the mode_start (and mode_customfile, if alternate server
configs are to be used) variables to ensure that proper
mode rotation is in place.  If mode_start is defined, the
server will rotate back to this mode if client's have
voted in alternate server modes and have left after 10
minutes.  This guarantees that the server will be in a
known mode state if it has been vacant for some time.
This goes for ANY mode_start value.

When defining new custom configs, it is useful to note that
all server cvars are reset to Q3/OSP default settings before
reverting to a new game mode.  This means that all that is
needed in the custom configs is to set ONLY the vars that need
to be tweaked.

As a reference to all of this madness, check out the defualt
server configs that come with OSP (team.cfg, ctf.cfg, etc.).
Hopefully, these configs will shed more light on all of this
"flexibility" :)

One thing to remember, the start-up server config is VERY
simple: just define stuff like server name, sv_maxclients,
rconPassword, etc.  All of the specific gameplay settings
are handled either by the internal configs or your alternate
server configurations.

For reference, I've also included the internal server configs
in cfg-reference with each cvar that is modified listed
explicitly in each of the configs.

*NOTE*: Custom configs should NOT specify sv_maxclients!!!!
This leads to serious instability for the server!!!!!  Specify
this parameter ONLY in the server's start up config.

Also, just can vote for alternate modes with:
	\callvote mode [mode_id]

Omitting the mode_id will show all available modes that can
be voted.

Good luck!


Maplists for internal configs.  If you want an alternate map list for
a mode, create a file with the same name under the main osp/ directory.
OSP will load the map list from this file.  If no file is specified, it
will use a default internal map list:
=======================================================================
1v1:          cfg-maps/1v1maps.txt
FFA:          cfg-maps/ffamaps.txt
QIL TeamDM:   cfg-maps/qilmaps.txt
Team DM:      cfg-maps/teammaps.txt
CTF:          cfg-maps/ctfmaps.txt
ClanArena:    cfg-maps/teammaps.txt
FT (OSP):     cfg-maps/teammaps.txt
FT (Vanilla): cfg-maps/teammaps.txt

Default map lists:
==================
Exactly the same as what is shipped with the main OSP distribution.
Please refer to the files in the cfg-maps/ directory for complete info.


Default settings for each mode:
===============================
All mode changes from the default settings in Q3/OSP are given in the
files in the cfg-reference/ directory.


Here is a list of variables that you can set in the server config that will
NOT be erased by the *DEFAULT* internal configs.
===========================================================================
admin_log
bot_checktime
bot_autoload
com_blood
filter_file
g_allowVote
g_banIPs
g_debugAlloc
g_debugDamage
g_debugMove
g_filterBan
g_gravity
g_inactivity
g_knockback
g_listEntity
g_log
g_logSync
g_maxGameClients
g_motd
g_needpass
g_password
g_podiumDist
g_podiumDrop
g_rankings
g_speed
g_synchronousClients
g_smoothClients
item_disable
log_default
log_stat
map_debug
map_file
map_halt
mg_damage
mg_damageTeamplay
mode_customfile
mode_start
osp_gamename
player_always
player_file
pmove_fixed
pmove_msec
ref_password
server_availmodes
server_batcher
server_customclient
server_gfxspecfile
server_maxpacketsmin
server_maxpacketsmax
server_ospauth
server_promode
server_timenudgemin
server_timenudgemax
server_realping
server_record
server_motd1
server_motd2
server_motd3
server_motd4
server_motd5
server_motd6
server_motd7
server_motd8
sv_cheats
sv_hostname
sv_maxclients
viewcam_directory
vote_allow_altgraphics
vote_allow_kick
vote_allow_maxpackets
vote_allow_osphud
vote_allow_promode
vote_allow_referee
vote_allow_thrufloors
vote_allow_truelightning
