Devastation Dedicated Server
Some Suprises
For those of you who are used to running up servers based on the Unreal engine (see Running A Dedicated Server With UCC) you'll find a couple of differences that may throw you slightly.
- The INI files are not held within the Devastation/System directory. Instead they are held in a directory under your "My Documents" folder. The advantage to this is that if you have multiple users on a single PC they can all have different key configurations. The disadvantage is that if you forget you'll be left looking in the Devastation/System directory wondering where the hell your configuration information went.
- The ucc server notation is not the preferred way to start the dedicated server although it still works fine. Instead devastation.exe -server is used. The latter form runs the server as a windows tray icon. Right clicking on this icon provides access to a server console and other information.
NOTE: The unpatched retail release (pre version 380) and MP demo currently have some known scaling problems with the server code. The server code will not scale to more than around 10-12 players. Digitalo are working on a patch for this but until then try and keep the number of players to 10.
Digitalo: Yes, we are working on this.
NOTE: Much of the information contained within this page applies also to the Devastation MP demo. If something doesn't work on the MP Demo then the function is most likely only available in the retail version.
Configuring the Server
There are two main ways of getting configuration information into the server. One is via the command line used to start the server and the other is within the INI file the server will use. This guide will use the INI method as it seems to be better supported within the game. This set up guide will assume that the following command has been run to create a "clean" ini file from which to ammend the server settings.
devastation.exe -server ini=devsvr.ini log=devsvr.log
After running the above command you will see the following things:
- A devastation server icon in your system tray. This is the server process itself.
- A new file called devsvr.ini within My Documents/Devastation. This is the INI file that will be used by the server to obtain it's configuration information.
- A new file called devsvr.log within My Documents/Devastation. This is the log file the server records. If you server crashes then this file may contain useful information that will help track down the cause of the problem.
Shut that server down by right-clicking on it and selecting the Exit server option. By default it will be running the "Entry" map. No-one can actually join that map so it's not that useful. However, we now have an INI file that we can modify.
NOTE: Please see the Linux section below for differences on that operating system.
Game Ports
A server running on the default port of 7777 will send and receive UDP messagess on the following ports: 7777, 7778, 8777, 10777.
The first two ports listed above (7777, 7778) change as the main server port is changed. 7777 becomes port and 7778 becomes port + 1. So, if a server was started on port 6000 then the following ports would be used: 6000, 6001, 8777, 10777.
You can determine the ports your server is using by performing the following steps.
- Open up a command line prompt
- Run the command netstat -a
- Start the devastation server passing in the port you wish to run the server on and the ini file you wish to use.
- Run the command netstat -a again.
The ports listed after the second netstat command that are not listed after the first netstat command are those required by your server.
Starting the Server
The following is the general format for starting a server:
devastation.exe map name?parameters -server port=listening port ini=ini filename log=log filename
So to start a CTF map with a 10 cap limit and a 60 minute timeout listening on port 8777 using our own devsvr ini and log files the following command would be entered.
devastation CTF-Union?caplimit=10?timeout=60 -server port=8777 ini=devsvr.ini log=devsvr.log
Note that the original ucc server command also works for starting a server. Some people have reported a slight improvement in server performance when using this syntax over running the server via devastation.exe. An example is shown below:
ucc server CTF-Union?caplimit=10?timeout=60 port=8777 ini=devsvr.ini log=devsvr.log
Rather than run as a tray icon this will run the server up in a shell window.
Game Parameters
The following parameters can be used either as part of the command line or as part of the MapParams[n] line in the INI file (described below). All parameters are ? separated.
- game
- The game type of the map. Valid values for the demo are DTerritories.DCTFGameInfo, and DGamePlay.DTeamStreetWarGI. The maps shipped with the demo seem to have the gametype set within the map so this parameter may not be required.
- timelimit
- The number of minutes the map will run for. Be aware that if you set both the time limit and the score limit (frag limit or cap limit) both to zero then the game will automatically set a 20 minute time out rather than start a server that will play a single map forever. This behaviour is explicity coded into the game. Is there an "extra time" function for CTF games and the like?
- fraglimit
- The number of frags required to win the game. In CTF games this parameter can also be used to set the cap limit. Be aware that if you set both the time limit and the score limit (frag limit or cap limit) both to zero then the game will automatically set a 20 minute time out rather than start a server that will play a single map forever. This behaviour is explicity coded into the game.
- caplimit
- The number of flag cpatures required to win the game. This parameter will take precedence over any value passed in using the fraglimit parameter. Be aware that if you set both the time limit and the score limit (frag limit or cap limit) both to zero then the game will automatically set a 20 minute time out rather than start a server that will play a single map forever. This behaviour is explicity coded into the game.
- roundlimit
- Allows the number of Territories rounds to be specified. This value determines the number of times a map is played before the map changes. This value is not supported in the MP Demo.
- roundtimelimit
- This specifies the amount of time in minutes that each Territories round may last.
- suddendeathseconds
- This specifes the amount of time in seconds that any "sudden death" period can last before a draw is declared.
- KarmaMP
- Can be set to True (or 1) to enable Karma Physics in multiplayer. Do not do this unless your server is an absoloute beast of a machine and everyone has LAN connections. The default value is False (0). Players will not be able to move objects unless this is set.
- GameMode
- This parameter can be used to place the game in arcade mode or simulation mode. A value of "arcade" or 0 will put the game into arcade mode. A value of "simulation" or 1 will put the game into simulation mode. Players are able to pick up and throw objects in either game mode as long as KarmaMP is enabled.
- PktLoss
- Can be used to simulate an amount of packet loss. Values can range from 0 to ??. Mostly useful for development.
- PktLag
- Can be used to simlutate an amount of lag. Values can range from 0 to ??. Mostly useful for development.
The following values have been taken from an inspection of the code and have not been tested. They may not be useable.
- GameSpeed
- Overrides the default gamespeed set within the INI file.
- Mutator
- Support for comma delimited lists of mutators seems to have been left in \o/
- GamePassword
- Can be used to set the game password, and overrides the value within the INI file.
- LocalLog
- True if stats should be logged locally, otherwise False. Defaults to True.
- WorldLog
- True if stats should be sent to the "World Log", otherwise False. Defaults to True.
- restart
- Can be used to restart the current map using all previous specified values. Changes to the previous configuration can then be made by re-specifying values for specific parameters (or adding new ones)
- DefaultDelay
- The default respawn delay time for Territories
- AccessCenter
- The default class to use for an "access center".
- SpawnCenter
- The default class to use for a "spawn center".
- BotManager
- The default class to use as a "Bot manager".
- TeamManager
- The default class to use as a "Team manager".
- EffectsManager
- The default class to use as an "Effects manager".
- DamageControl
- The default class to use for "Damage" modifications
The following settings exist, but are either unused for servers or for development purposes only.
- Difficulty
- Unused
- unlocked
- Internal use only
- frominterface
- Internal use only
- NoBots
- Unused
- Comments
- Unused
- Bots
- Unused
- HUD
- Unused
- Test
- Unused
Maintaining the INI File
Setting the Map Rotation
Unlike UT and UT2003 Devastation allows you to mix and match game types and game configurations in a single 32 map rotation. This means that large CTF maps can be played with a low capture limit and small fast paced ones can be played with a higher cap limit. The same applies to DM style gametypes.
The maps and map settings are specified in the [DGamePlay.DSWMapList] section of the devsvr.ini file. Edit it so that it looks like the section below.
[DGamePlay.DSWMapList] GameMode=1 bKarmaMP=False Language=itt MapParams[0]=?game=DTerritories.DCTFGameInfo?timelimit=30?caplimit=8 MapParams[1]=?game=DGamePlay.DTeamStreetWarGI?timelimit=30?fraglimit=30 Maps[0]=CTF-Union Maps[1]=DDM-EmbarcaderoDepot
EntropicLqd: I'm going to try putting the values "out of order" in my ini later today. It should work OK and will keep the map name and the map settings together. Makes things easier to tweak then.
This places two maps in the map rotation. The first is the CTF-Union map and the second is the DM-EmbarcaderoDepot map. The CTF map has a time limit of 30 and a cap limit of 8. The DM map also has a time limit of 30 and a frag limit of 30. The settings that can be passed along with the ? parameters are covered in the next section.
Other INI File Settings
In this section I'll be covering the bare minimum of INI file settings to control the server in terms of listening port and behaviour. There are many others but they are beyond the scope of this page (i.e. I'm too lazy to add them. Maybe someone else will do it).
[URL] | |
Port=7777 | The default port for the server. |
[UWeb.WebServer] | |
bEnabled=false | Currently this should always be set to false as there is no web admin functionality within Devastation. Link coming soon |
[IpDrv.TcpNetDriver] | |
AllowDownloads=True | Set to False to prevent people from downloading files (like maps) if they don't already have them. |
ConnectionTimeout=120.0 | The amount of time in seconds? to timeout a client. Reduce this to lose lagged players faster. |
MaxClientRate=6000 | The maximum mount of bandwidth a client can use irrespective of their network settings. This number multiplied by the number of players you allow on your server should be no more than the amount of KBps (that's thousand bytes not bits) your connection can support. e.g. For a standard ADSL line, which has an upload speed of 256Kbps (which is around 25KBps, 4 players @ a MaxClientRate of 6000 = 24000. This is about right. A quick (and reasonable) way of calculating bytes per second from bits per second is to divide the bits per second value by 10 (8 isn't used here doe to protocol overheads and error correction). |
NetServerMaxTickRate=20 | Controls the speed at which "time" passes on the server for an Internet game. |
LanServerMaxTickRate=35 | Controls the speed at which "time" passes on the server for a LAN game. |
[Engine.GameReplicationInfo] | |
ServerName=Another Devastation Server | The description of the server that will appear in the server browser. |
ShortName=Devastation Server | The description of the server that appears as the player connected to the server. |
AdminName= | The name of the admin for this server. |
AdminEmail= | An e-mail address for the admin of the server. |
MOTDLine1= | Message of the day line 1. Displayed as people join a map. |
MOTDLine2= | Message of the day line 2. Displayed as people join a map. |
MOTDLine3= | Message of the day line 3. Displayed as people join a map. |
MOTDLine4= | Message of the day line 4. Displayed as people join a map. |
[DTerritories.DCTFGRI] | |
MaxFlagCaptures=8 | Seems to set the number of flag captures required to win in a CTF game. Don't understand why this works (assuming it does - I haven't tested it). |
[IpDrv.MasterServerUplink] | |
DoUplink=True | Setting this to True will make your server appear in the master list. A value of False will make it invisible. |
UplinkToGamespy=True | Setting this to True will make you server connect to gamespy. A value of False will prevent this. |
DoLANBroadcast=True | Setting this to True will make the server appear in the LAN server list. A value of False will mean the server is "LAN invisible". |
[Engine.GameInfo] | |
MaxPlayers=16 | This is the maximum number of players your server will allow to connect. Make sure this is set according to the server's available bandwidth. |
[DTerritories.DTerrGameInfo] | |
bNoTeamChanges=False | Set this to True to prevent people from changing teams mid-game. |
FriendlyFireScale=0.000000 | Sets the damage modifier to use when shooting at teammates. A value of 1 means that full damage will be inflicted upon your unsuspecting teammate as you shoot them in the back of the head. Not that you do things like that. |
MaxTeams=2 | The maximum number of teams. |
GoalTeamScore=30.000000 | The number of frags required to win a TDM match. |
MaxTeamSize=16 | Not used anywhere within the UnrealScript. |
FragLimit=6 | The target number of frags in a DM match. |
TimeLimit=30 | The default time limit for the game in minutes. |
SuddenDeathSeconds=120 | How long any "sudden death" overtime lasts in seconds (not supported in MP Demo) |
RoundTimeLimit=600 | The length in minutes of each Territories round (not supported in MP Demo) |
RoundLimit=6 | The number of Territories rounds to play before the map changes |
NOTE: The above values can be overridden in the sections specific to the gametype should you wish to to that.
Dedicated Linux Server
A (380 compatible) Linux dedicated server is available: http://icculus.org/news/news.php?id=1416
(More official mirrors from ARUSH/Digitalo will be posted when I'm aware of them).
This should be considered beta quality for a little while yet, but works pretty well. FreeBSD admins can use this if they've got Linux binary compatibility installed. Information on reporting bugs and how to get on the Linux admin mailing list for discussion are in the README that comes with the server. Linux UT/UT2003 admins will recognize the "ucc-bin" program in the System directory, which is used instead of the Windows "devastation.exe -server" or "ucc.exe". The quickest startup is to run it from a Terminal window like this:
cd /where/i/unpacked/devastation_dedicated/System
./ucc-bin server CTF-Chozo
Where "CTF-Chozo" is a valid Devastation map name.
On Windows, files are written under "My Documents". On Linux, they'll end up in ".devastation" in your home directory. You can opt to keep everything in the actual game directories by adding "-nohomedir" to the end of the command line:
./ucc-bin server CTF-Chozo -nohomedir
To shut down the server, hit CTRL-C.
There are a LOT of command lines and .ini file tweaks...just about everything not mentioned here that applies to the Windows server also applies to the Linux one.
Other Sources of Information
Some other places to look for information on running an Unreal Engine based server are listed below.
- http://www.unrealadmin.org/ – The site for all your unreal admin needs.
- http://unreal.epicgames.com/utServers.htm – The original Epic document on running Unreal Tournament servers. Much of it still applies.
- http://developer.devastationgame.com/Technical/ConsoleCommandLineParameters.html – A UDN document containing command line switches and exec commands for UT2003.
Thanks and Acknowledgements
EntropicLqd: Many thanks to the chaps over on the official Devastation forum who worked out a lot of this stuff. Particular thanks to MayDay and EaSyKiLL.
Digitalo: Many thanks to EntropicLqd and the rest of the community for this kick ass doc!
EntropicLqd: Thanks for the updates. Nice.