############################################################################################
#
# Do not modify this file!  Instead, create two files in the same directory this file is in.
#     settings_custom.cfg
#         Actual gameplay settings
#     server_info.cfg
#         The server name, network setup, etc.
#
# You only need to put in these two files what is different from here.  Also,
# settings_custom.cfg will override server_info.cfg
#
############################################################################################

# special settings useful for dedicated servers

############################################################################################
#
# Network interface setup
#
############################################################################################

# if you are running the server on a machine with no fixed IP address, but have a dynamic DNS 
# address that always resolves to your machine's IP, uncomment the following line and enter the 
# correct dynamic DNS name. This will help the master and the clients to remember your server 
# even after its IP changed.

#SERVER_DNS someserver.dyndns.org

# SERVER_IP can be set to the IPs you want the server to listen on. Usually, you can
# leave this setting alone; it's designed for the case that you have multiple network cards
# and want to make the server listen only to one, for example because you want to run many
# servers on that machine, each listening on a different network card but on the same port.
# 
# Special values are:
#   ANY     opens one socket listening to all IPs ( this was the only available
#           option for 0.2.7.1 and before ). You need one entry of this form if 
#           your server is to appear on the LAN browsers.
#   ALL     opens one socket for each IP. ( equivalent to typing your hostname  )
#   ONEOF   only one socket is opened after this keyword.
#   RELAXED will consider the initialization as successful if at least one 
#           socket was opened. 
# IGNOREERRORS will continue despite fatal errors like DNS lookup failures and
#           attempts to bind to IPs not owned by the local machine.

# You can also specify a hostname instead of an IP. In that case, every IP that 
# the hostname is known under will get its own socket. 
# You can modify the port to listen on by adding an offset to the current port after a colon.
# If you bind your server to multiple IPs, only one of them ( the first from which the connection 
# to the master server succeeds ) will be made public by the master server. 

# If your settings of SERVER_IP fails to initialize, "ANY" is tried instead, if that fails, 
# "ALL" is tried.

# examples:

# default: bind to one generic socket on one port.
SERVER_IP ANY

# bind to all available sockets on the default port
#SERVER_IP ALL

# only bind to the loopback interface on the default port (this
# server will only be visible on your own machine)
#SERVER_IP 127.0.0.1

# bind to all local IPs with one socket each ( for the internet traffic )
# and open another socket listening to no specific IP on the next port 
# ( to catch LAN server browser broadcasts ). Relies on a thoroughly
# configured hosts file that maps your hostname to all IPs your computer
# has.
# SERVER_IP ALL ANY:1

# the settings for my CVS test servers. armagetron.kicks-ass.net will resolve to the
# current dynamic IP of my server. Additionally, a broadcast listening socket is created.
# use this (adapted to your IP, of course), maybe without the ANY:1 part, 
# if you want your own sever to appear on your internet server list.
#SERVER_IP armagetron.kicks-ass.net ANY:1

# hypothetical server setup: bind to the first of the listed IPs available.
# This is for running multiple servers with the same config that should bind to
# different IPs instead of to different ports.
#SERVER_IP ONEOF ip1 ip2 ip2 ip3 ip4 ...

# same as above, but open three servers per IP before going to the next.
#SERVER_IP ONEOF ip1:0 ip1:1 ip1:2 ip2:0 ip2:1 ip2:2 ....

# the port the server listens on

SERVER_PORT 4534

MAX_IN_RATE 8          # network bandwidth limitation, incoming ( useless right now )
MAX_OUT_RATE 8         # per client network bandwidth limitation

DEDICATED_IDLE 0     # if you run a dedicated server and set this
                     # value to something greater than zero, the server will quit after
                     # running that many hours in an idle moment (to avoid hitting a
                     # cpulimit or server stability issues)

DEDICATED_FPS 40                # maximum simulation steps per second the dedicated server will perform
DEDICATED_FPS_IDLE_FACTOR 2.0   # number of times per frame the server should check whether simulation can be done if no network input is coming

############################################################################################
#
# Authentication
#
############################################################################################

# if you compiled your server with authentication enabled, you can uncomment the following line:
# SINCLUDE settings_authentication.cfg

############################################################################################
#
# Public information
#
############################################################################################

TALK_TO_MASTER 0     # set this to 1 if you want this server to be known
                     # on the internet

# the message of the day sent to connecting clients. use \n to break it into
# several lines. A \ before the newline lets you write the message in multiple
# lines.

MESSAGE_OF_DAY

# example:
# MESSAGE_OF_DAY Line1\nLine2\n\
Line3

# if the clients support it, the message of the day is displayed as a modal message. Nothing 
# but the message is displayed. These two variables control the title and the time it is
# displayed at most:

MESSAGE_OF_DAY_TIMEOUT 60
TITLE_OF_DAY Message of the Day

# messages displayed between rounds on the console and in big letters,
# same rules for multi-line messages as MESSAGE_OF_DAY:
ROUND_CONSOLE_MESSAGE
ROUND_CENTER_MESSAGE

# URL associated with this server. Maximal length: 75 characters.

URL http://www.armagetronad.net

# the server name as it appears in the server browser.

SERVER_NAME Unnamed Server

# a short description of the options you set, or server policies. Has no effect
# on gameplay, it will only be displayed in the server browser.
# Maximal length: 240 characters (but keep in mind longer descriptions make
# your server look bad in the browser, and they increase your displayed ping.)

SERVER_OPTIONS All settings at default values.

# default language
LANGUAGE_FIRST American English
# fallback language
LANGUAGE_SECOND American English

############################################################################################
#
# Politics: Voting and Spam protection
#
############################################################################################

# Per round, per player limit on the number of shuffle messages displayed. A negative or zero value disables this check.
SHUFFLE_SPAM_MESSAGES_PER_ROUND 3

SPAM_PROTECTION_REPEAT 5.0 # minimum time between identical chat messages.

SPAM_PROTECTION 4.0        # minimum average time between chat messages in seconds so they are not considered spamming. Increase for more spam protection.
SPAM_PROTECTION_VOTE 50.0              # Extra factor for SPAM_PROTECTION for votes. Increase for more spam protection.
SPAM_PROTECTION_CHAT .3                # Extra factor for SPAM_PROTECTION for chat messages. Increase for more spam protection.
SPAM_PENALTY 0.0                       # spam penalty to add on spam detection. This makes repeated spams extra painful.
SPAM_AUTOKICK 14.0                     # spam protection value that causes someone to get instantly kicked
SPAM_AUTOKICK_COUNT 3                  # minimal number of spam warnings before someone is kicked for spam.
SPAM_MAXLEN 80                         # maximal length of chat message

# prefix spam

PREFIX_SPAM_ENABLE 1                             # Should spam prefix checking be enabled? Set to 1 to enable, 0 to disable.
PREFIX_SPAM_START_COLOR_MULTIPLIER 1.5           # If a prefix begins with a color code it will have this multiplier applied to its score.
PREFIX_SPAM_LENGTH_MULTIPLIER 1.2                # Multiplier applied to prefix length when calculating prefix spam score.
PREFIX_SPAM_NUMBER_COLOR_CODES_MULTIPLIER 1.2    # Multiplier applied to the number of color codes in prefix when calculating prefix spam score.
PREFIX_SPAM_NUMBER_KNOWN_PREFIXES_MULTIPLIER 1.0 # Multiplier applied to the number of known spam prefixes when calculating prefix spam score.
PREFIX_SPAM_REQUIRED_SCORE 10.0                  # The required prefix spam score a prefix must have for it to be considered spam.
PREFIX_SPAM_TIMEOUT_MULTIPLIER 15.0              # Multiplier applied to time calculation to determine how long a known prefix is remembered.

# shouting. 0 means the default chat is /team chat, 1 makes the default chat
# /shout chat, but only for those with the right to shout, while 2 makes
# the default chat /shout and overrides the access level restrictions.

DEFAULT_SHOUT_SPECTATOR 1     # default chat mode for spectators.
DEFAULT_SHOUT_PLAYER 1        # default chat mode for players

# voting

ALLOW_VOTING 1           # allow voting?
MAX_VOTES 5              # maximum number of concurrent votes
MAX_VOTES_PER_VOTER 2    # maximum number of concurrent votes per voter
ALLOW_VOTING_SPECTATOR 0 # allow voting for spectators
VOTING_BIAS 0            # number of virtual voters opposing every change
VOTING_PRIVACY 1         # level of secrecy of the votes. 2 makes the vote as secret as possible, -2 makes it fully public. 
VOTING_SPAM_ISSUE 1      # spam level for issuing a vote
VOTING_SPAM_REJECT 5     # spam level for issuing a vote that gets rejected
VOTING_MATURITY 300      # minimum time in seconds a player needs to be online with the same name before he can issue votes

MIN_VOTERS 3             # number of voters that need to be online to enable voting

VOTING_TIMEOUT 60        # base number of seconds before a vote times out
VOTING_TIMEOUT_PER_VOTER 15 # additional number of seconds before a vote times out for every voter present
VOTING_START_DECAY 60    # number of seconds after that the non-voters start to get ignored
VOTING_DECAY 60          # one non-voter is ignored every time this many seconds pass
						 # note: if DECAY < TIMEOUT or START_DECAY < TIMEOUT, votes that get ignored by everyone may be accepted.

VOTING_SPAM_ISSUE 1.0    # The spam level of issuing a vote.
VOTING_SPAM_REJECT 5.0   # The spam level of getting your vote rejected.
VOTING_KICK_MINHARM 0    # Minimum number of other harmful votes (kicks, suspensions) before a menu-issued kick vote really kicks. Before that, it just suspends.
VOTING_KICK_TIME 300     # Minimum time in seconds between kick votes against the same player.
VOTING_HARM_TIME 180     # Minimum time in seconds between harmful votes against the same player.
VOTING_SUSPEND_ROUNDS 5  # Number of rounds "/vote suspend" suspends for.

CONSOLE_DECORATE_ID 1    # Decorates every line of console output with the client ID
CONSOLE_DECORATE_IP 0    # Decorates every line of console output with the client IP


SINCLUDE server_info.cfg
# ping flood response DOS protection: if pings from a single machine are requested more often than this,
# they are not answered. Setting the last item to a negative value disables the system.
PING_FLOOD_TIME_10  1.0   # Minimum time for 10 ping packets to arrive.
PING_FLOOD_TIME_20  4.0   # Minimum time for 20 ping packets to arrive.
PING_FLOOD_TIME_50  20.0  # Minimum time for 50 ping packets to arrive.
PING_FLOOD_TIME_100 100.0 # Minimum time for 100 ping packets to arrive.
PING_FLOOD_GLOBAL   .1    # The same times, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection.
CONNECTION_FLOOD_SENSITIVITY .01 # The times PING_FLOOD_TIME_X, multiplied by this value, count for all incoming messages from clients not connected already. A flood here activates turtle mode. Negative values disable global flood protection.
CONNECTION_LIMIT 5        # Maximum number of packets from unknown peers to handle at one 
ANTI_SPOOF 0              # If set to 1, checks connecting clients for spoofed IPs are done. Only clients passing a connectivity test are allowed in. This is done in turtle mode automatically, but may be useful to have on at all times.


# default settings for MOVE/KICK(_TO)

# default kick reason given for the KICK console command
#DEFAULT_KICK_REASON

# default redirection kick/move reason given for the KICK/MOVE_TO console commands
#DEFAULT_KICK_TO_REASON

DEFAULT_KICK_TO_SERVER    # default server to kick/move to (IP or hostname)
DEFAULT_KICK_TO_PORT 4534 # default port of the server to kick/move to

# Minimal play time requirements. Clients starting from 0.2.8.3 record the play time
# in three categories: total play time (all games count), online play time (games on
# a server count) and team play time (only online games with teammates count).
# With the following settings, you can keep players lacking experience in these
# categories out of the game. Players not meeting the requirements will be forced
# to spectate.

MIN_PLAY_TIME_TOTAL  0.0 # required total play time in minutes
MIN_PLAY_TIME_ONLINE 0.0 # required online play time in minutes
MIN_PLAY_TIME_TEAM   0.0 # required team play time in minutes

############################################################################################
#
# Game settings
#
############################################################################################

# cycle physics
CYCLE_RUBBER_MINDISTANCE_LEGACY 1   # extra factor for minimal distance to walls enforced by the rubber code, active when peers with the rip bug are connected

# single player settings, active while only one client is connected.
# Either SP_MIN_PLAYERS or SP_TEAMS_MIN must be bigger than 1, otherwise there will
# be no opponent and no meaningful rounds. SP_TEAM_BALANCE_WITH_AIS needs to stay enabled,
# too.

SP_EXPLOSION_RADIUS 4               # blast radius of cycle explosions
SP_WALLS_LENGTH -1                  # cycle trail length
SP_WALLS_STAY_UP_DELAY 8            # cycle trail stay up this long after the cycle's destruction
SP_TEAM_BALANCE_ON_QUIT 0           # balance teams if a member quits?
SP_TEAM_BALANCE_WITH_AIS 1          # balance teams with AI players?
SP_TEAM_MAX_IMBALANCE 1             # maximum team imbalance
SP_TEAM_MAX_PLAYERS 1               # maximum number of players per team ( Don't change, it's meaningless in SP mode anyway. The only effect would be a bug when the second player connects. )
SP_TEAM_MIN_PLAYERS 1               # minimum number of players per team
SP_TEAMS_MAX 16                     # maximum number of teams
SP_TEAMS_MIN 1                      # minimum number of teams
SP_WIN_ZONE_MIN_ROUND_TIME 1000000  # minimum time ( seconds ) the round has to be going on before the instant win zone is activated
SP_WIN_ZONE_MIN_LAST_DEATH 1000000  # minimum time ( seconds ) since the last interesting event ( player death ) before the instant win zone is activated
SP_FINISH_TYPE 1                    # what happens if all human players are dead? 0 for almost immediate round restart, 1 for slow round restart, 2 to let the remaining AIs fight in fast forward mode, 3 to let the AIs fight on normally
SP_GAME_TYPE 1                      # 1 for normal duel, 0 for freestyle ( round only ends when everyone is dead )
SP_SIZE_FACTOR -3                   # arena size factor; increase this by two to double the arena size
SP_SPEED_FACTOR 0                   # cycle speed factor increase this by two to double the speed
SP_AUTO_IQ 0                        # flag indicating whether the IQ of the AIs should be automatically adapted to the player strength
SP_AUTO_AIS 0                       # flag indicating whether the number of AIs should be automatically adapted to the player strength
SP_AI_IQ 50                         # IQ of the AIs
SP_MIN_PLAYERS 4                    # minimum number of players; missing humans are filled up with AIs
SP_NUM_AIS 0                        # minimum number of AIs

# the same settings, active when more than one client is connected

EXPLOSION_RADIUS 4                  # blast radius of cycle explosions
WALLS_LENGTH -1                     # cycle trail length
WALLS_STAY_UP_DELAY 8               # cycle trail stay up this long after the cycle's destruction
TEAM_BALANCE_ON_QUIT 1              # balance teams if a member quits?
TEAM_BALANCE_WITH_AIS 1             # balance teams with AI players? ( set it to 0 to disable AIs completely )
TEAM_MAX_IMBALANCE 1                # maximum team imbalance
TEAM_MAX_PLAYERS 5                  # maximum number of players per team ( set it to 1 to disable teams )
TEAM_MIN_PLAYERS 1                  # minimum number of players per team
TEAMS_MAX 16                        # maximum number of teams
TEAMS_MIN 1                         # minimum number of teams
WIN_ZONE_MIN_ROUND_TIME 60          # minimum time ( seconds ) the round has to be going on before the instant win zone is activated
WIN_ZONE_MIN_LAST_DEATH 30          # minimum time ( seconds ) since the last interesting event ( player death ) before the instant win zone is activated
FINISH_TYPE 2                       # what happens if all human players are dead? 0 for almost immediate round restart, 1 for slow round restart, 2 to let the remaining AIs fight in fast forward mode, 3 to let the AIs fight on normally
GAME_TYPE 1                         # 1 for normal duel, 0 for freestyle ( round only ends when everyone is dead )
SIZE_FACTOR 0                       # arena size factor; increase this by two to double the arena size
SPEED_FACTOR 0                      # cycle speed factor increase this by two to double the speed
AUTO_IQ 0                           # flag indicating whether the IQ of the AIs should be automatically adapted to the player strength
AUTO_AIS 0                          # flag indicating whether the number of AIs should be automatically adapted to the player strength
AUTO_TEAM 1                         # flag indicating whether players should be put into a team automatically
ALLOW_TEAM_CHANGE 1                 # flag indicating whether players should be allowed to join/leave teams
AI_IQ 50                            # IQ of the AIs
MIN_PLAYERS 0                       # minimum number of players; missing humans are filled up with AIs
NUM_AIS 0                           # minimum number of AIs

# team name
ALLOW_TEAM_NAME_COLOR 1             # allow teams to be named after a color
ALLOW_TEAM_NAME_PLAYER 1            # allow teams to be named after the leading player

# team name options. Effective if ALLOW_TEAM_NAME_PLAYER is set to 0.
# the defaults refer to localized language strings, but custom strings are also possible

TEAM_NAME_1 $team_name_blue   # name of team 1
TEAM_NAME_2 $team_name_gold   # name of team 2
TEAM_NAME_3 $team_name_red    # name of team 3
TEAM_NAME_4 $team_name_green  # name of team 4
TEAM_NAME_5 $team_name_violet # name of team 5
TEAM_NAME_6 $team_name_ugly   # name of team 6
TEAM_NAME_7 $team_name_white  # name of team 7
TEAM_NAME_8 $team_name_black  # name of team 8

# team color options. Effective if ALLOW_TEAM_NAME_PLAYER is set to 0.

TEAM_RED_1    4 # red portion of team 1's color
TEAM_RED_2   15 # red portion of team 2's color
TEAM_RED_3   15 # red portion of team 3's color
TEAM_RED_4    4 # red portion of team 4's color
TEAM_RED_5   15 # red portion of team 5's color
TEAM_RED_6    4 # red portion of team 6's color
TEAM_RED_7   15 # red portion of team 7's color
TEAM_RED_8    7 # red portion of team 8's color

TEAM_GREEN_1  8 # green portion of team 1's color
TEAM_GREEN_2 15 # green portion of team 2's color
TEAM_GREEN_3  4 # green portion of team 3's color
TEAM_GREEN_4 15 # green portion of team 4's color
TEAM_GREEN_5  4 # green portion of team 5's color
TEAM_GREEN_6 15 # green portion of team 6's color
TEAM_GREEN_7 15 # green portion of team 7's color
TEAM_GREEN_8  7 # green portion of team 8's color

TEAM_BLUE_1  15 # blue portion of team 1's color
TEAM_BLUE_2   4 # blue portion of team 2's color
TEAM_BLUE_3   4 # blue portion of team 3's color
TEAM_BLUE_4   4 # blue portion of team 4's color
TEAM_BLUE_5  15 # blue portion of team 5's color
TEAM_BLUE_6  15 # blue portion of team 6's color
TEAM_BLUE_7  15 # blue portion of team 7's color
TEAM_BLUE_8   7 # blue portion of team 8's color

# Help stuff

# This is a message that will be displayed if someone uses the /help chat
# command without arguments:

HELP_INTRODUCTORY_BLURB

# to add your own help topics you can use the following command:

# ADD_HELP_TOPIC <identifier> "short description" "help\ntext\nthat\ncan\nspan\nmany\nlines"

# the quotes are required if you want to use spaces.
# if the identifier contains underscores (_) it will be treated as a
# sub-identifier. For example, if you have an identifier "rules" and an
# identifier "rules_swearing", the last one will not appear on the listing
# you get with a plain "/help", but it will be at the bottom of the text
# you get with /help rules. You can nest them as deeply as you want, but
# remember that the player who seeks help has to type your identifiers...

# to get rid of a help command (either in scripts of if it was added by
# accident you can use

# REMOVE_HELP_TOPIC <identifier>

#TEAM_ALLOW_SHUFFLE_UP 0            # if set to 1, players are allowed to change their position in the team as they wish. If 0, they only can drop in rank.
TEAM_CENTER_IS_BOSS 1               # if set to 1, the center player is the team's boss. If at 0, it's the player who is on that team longest.

############################################################################################
#
# Scripting
#
############################################################################################

# Scripts are fed the ladderlog on stdin (and need to read it) and their
# stdout output is interpreted as console input on the server. Environment
# variables are set so the script knows all about the server configuration at
# time of launch.

# SPAWN_SCRIPT         Spawns an external script from a scripts/ subdirectory on the data path.
# RESPAWN_SCRIPT       Spawns an external script from a scripts/ subdirectory on the data path if no already running instance is found.
# FORCE_RESPAWN_SCRIPT Spawns an external script from a scripts/ subdirectory on the data path after killing the other possibly running instance.
# KILL_SCRIPT          Kills a script. Argument must match the SPAWN_SCRIPT argument.
# LIST_SCRIPTS         Lists active scripts.
# SCRIPT_ENV           Set custom environment variables for scripts. Usage: SCRIPT_ENV <variable name> <value>

# The commands above are only available on Unix.

LADDERLOG_GAME_TIME_INTERVAL -1     # write a line to ladderlog.txt indicating how "old" the current game is at most every n seconds. Negative values disable this feature.
WAIT_FOR_EXTERNAL_SCRIPT 0          # set to 1 if you want the server to sleep between rounds until it is set back to 0 or
WAIT_FOR_EXTERNAL_SCRIPT_TIMEOUT 3  # seconds



############################################################################################
#
# Debugging (only available if compiled for debug)
#
############################################################################################

# Debugging a game on a dedicated server can be tricky since you don't have a
# representation of the world handy in visual form. Therefore, the game offers
# to log all cycle movements in text files for easy processing in a display
# tool ( plain gnuplot is often enough ). The files' names are the player
# name with appended _sync for the network sync turn positions, _step for
# dumps of every timestep and _turn for all turns. All topology police
# posterior wall collision events are logged in _topology.
# Activate this crude debugging help by uncommenting the following line:
# DEBUG_GNUPLOT 1

############################################################################################
#
# For Master Server
#
############################################################################################

MASTER_PORT 4533                    # port the master server should listen on
MASTER_IDLE 2.0                     # after this many hours, the master server process quits and gets restarted by the script
MASTER_SAVE_INTERVAL 300.0          # interval in seconds between saves of the server list
MASTER_QUERY_INTERVAL 10.0          # time in seconds between query packets sent out

# put your own config settings in this file

SINCLUDE settings_custom.cfg

############################################################################################
#                       EXPERT SECTION
# The settings in this section sometimes have obscure effects and you
# sometimes need to know how the settings are used in the code to predict
# the effects of changes.
# They're unsupported, undocumented (apart from what you see in this file)
# and may change meaning from release to release.
############################################################################################

# if something interesting is going to happen to a game object not more
# than MAX_SIMULATE_AHEAD seconds from the time it should be simulated to,
# simulate it up to the interesting bit, not only the scheduled time.
MAX_SIMULATE_AHEAD .1

# should cycle walls be predicted? This prevents the dreaded rubber-less death if
# active, but may cause other odd artifacts. Experimental, use with care.
# Enable it if you have high lag compensation settings.
PREDICT_WALLS 1
