(converted from userguide.html with lynx -dump) asss User's Guide 1 Introduction asss is a new server for Subspace/Continuum. It was written from scratch by Grelminar (grelminar@yahoo.com), with help from several other people (see the Acknowledgements section). The name asss stand for ``a small subspace server.'' Although care has been taken to remain compatible with the original Subspace server, known as subgame, players, and especially staff and admins, should be aware that asss is a different piece of software. It has many features that subgame is missing, but it is also missing some from subgame. The features that are common to both may work different. They will have different bugs. In short, don't expect everything to work the same as in subgame, because it won't. 1.1 Platform and Requirement asss was developed primarily on a Linux system on the Intel x86 platform. Although some effort has been spent making it run on Window also, people running it on non-Linux systems should not expect everything to work perfectly: there may be missing features and it may run slower. The requirements for running asss on Linux are pretty minimal: The system should have the pthreads library (any recent Linux system should), Berkeley DB 4.0 or greater (older versions won't work), and zlib. It also has optional mysql support, currently used only for the built-in alias database. To compile asss from source (on either Linux or Windows), the include files for those libraries must be installed, as well as a C compiler. If you've obtained the source from CVS, you'll also need the Python interpreter in order to generate certain files. If you're using a tarball instead, it will come with those files present already. If you're missing mysql, you'll have to edit the Makefile by hand and remove database.so from the list of libraries to build. If you're missing Berkeley DB, you can still build asss, but it'll be missing all support for scores and any other persistent information. You'll have to remove scoring.so from the list of libraries. Currently, only Intel platforms are supported because of byte-order issues. Eventually, asss will be able to run on other architectures, but for now, Intel will have to do. 2 File Layout The server always access files relative to the directory it wa started from, which must have certain files and directories in certain places. That means that to run multiple copies of the server on one machine, you should make sure that each one is started from its own home directory. Here's what a typical machine's file layout should look like: /home/a + bin | + a | + core.so | + commands.so | + flags.so | + balls.so | + ... | + zone1 | + news.txt | + bin (symlinked to ../bin) | + defaultarena | | + arena.conf | | | + arena | | + duel | | | + arena.conf | | | | | + pb | | + arena.conf | | + balls.conf | | + pb.lvl | | | + conf | | + global.conf | | + modules.conf | | + groupdef.conf | | + groupdef.dir | | | + default | | | + mod | | | + smod | | | + sysop | | | | | + defs.h | | + sv | | + svs.conf | | + prizeweight | | + misc | | + ship-warbird | | + ... | | | + log | | + asss.log | | + asss.log.1 | | | + map | | + zone1-pub.lvl | | + another.lvl | | | + data | + data.db | + zone2 + bin (symlinked to ../bin) + ... The most important directory is bin. This directory should contain the main asss binary, as well as all files containing modules to be loaded by the main binary. To ease administration, it is not recommended that each zone on a machine have a full copy of the bin directory. Rather, bin should be a symlink to a shared directory containing binaries. conf contains config files that affect the server as a whole. Among the important files are modules.conf, which specifies the list of modules to load at startup, global.conf, which contains config settings for the whole server, groupdef.conf, which describes which capabilities belong to each group, and staff.conf, which assign groups to various players. groupdef.conf uses files in the groupdef.dir subdirectory to ensure more powerful groups have all the capabilities of lesser ones. Also in conf is defs.h, which includes a bunch of other config file that are typically symlinks to files in the source code directory. This is done to ensure the server and config files agree on numerical values for various constants. All .conf files automatically #include defs.h. conf can also contain partial config files for arenas to include. The default directory structure contains an svs directory, with the Standard VIE Settings, split into multiple files, by ship and function. log will be used by the server to deposit any log files that it creates. data is used to keep the database holding all persistent information, including scores. Information for all arenas is kept in the same database file. maps is an optional directory that the server will search for .lvl files in. These files can also be located in arena directories, so this isn't a required directory. It might simplify administration, though, to keep all map files in this directory. Each arena gets its own directory for storing settings related to that arena, as well as maps and .lvz files. The default arena (also called the public arena) keeps its data in the directory defaultarena, relative to the base directory for the zone. All other arenas keep their files in arenas/foo, where foo is the name of the arena. Each arena directory must contain a file named arena.conf, which contains the settings for that arena. For ease of administration, thi file may #include other config files in either the same directory, or the global conf directory. The file news.txt should be located in the base of the zone directory as well, unless another location is specified in global.conf. 3 Module Almost all of the functionality of asss is split into many small modules. The asss binary itself contains a bunch of critical modules, and other, less important, modules are in separate libraries with the extension .so (on Unix) or .dll (on Windows). One shared library can contain any number of modules. There are currently 54 modules that are part of asss, but each zone might have some custom-developed modules for their zone as well. When the server starts up, it loads all of the modules listed in the file modules.conf. Once it's running, more modules can be loaded with the ?insmod command, and modules can be unloaded with ?rmmod. The current list of loaded modules can be examined with ?lsmod. The modules.conf file has a special format that's slightly different from the rest of the config files. It has no sections. Each line should contain a ``module specifier.'' A module specifier is just something of the form filename:module. The filename part should be the name of the file containing the module, without the extension. The module part should be a module name that's contained in the file. The colon separating them is just a colon. Comments are indicated by an initial semicolon or pound sign. If a particular zone has no need for a particular module (e.g., Chao zone doesn't have any flags or balls, so it doesn't need those modules), it should't load those modules. Only loading the module that are actually used for a zone will decrease the memory usage of the server, and make it run faster. Once a module is loaded into the server, it has full access to the server's data, including player ip addresses, machine id's, scores, and passwords. It can also access files on the machine it is running on, and make network connections, and it can easily crash or deadlock the server. Thus, admins and sysops should be careful to only load modules from sources that they trust. In the future, it will be possible for some modules to run in separate processes or even separate machines, it will be possible to write modules in languages besides C, and it will be possible to limit the information that modules have access to. 4 Capabilitie The old Subspace server supported a very limited notion of authority: There were moderators, super moderators, and sysops. Each level allowed access to more and more commands. Additionally, moderators and above could see private freqs and private arenas, and bypass freq and arena size limits. asss is much more flexible. It lets sysops and admins assign any set of powers to any group of people. In the asss model, each of the above powers, plus a few more, like energy viewing, is assigned a capability name. Each command also gets a capability name (actually, each command gets two, one for using the command with public messages, and one for using it with private messages). Whenever the server needs to determine if a player can take a certain action, it asks the capability manager, which replies either yes or no. The server comes with one capability manager, contained in the capman module, but there's no reason why another one couldn't be used if your zone has peculiar needs for assigning people powers. 4.1 Capablity name The most common capability names are for commands. If a player trie to run a command, say, ?lastlog, the server would query the capability manager with the name cmd_lastlog. If a player uses a command as a private message, as in :annoying_player:?freqkick, the capability name used would instead be privcmd_freqkick. There are several other capabilities that are currently used in the server: * seeprivarena controls whether private arena names are sent to a player for the ?arena command. * seeprivfreq determines if a player sees private freqs in the freq listing. * findinprivs is needed by a player running ?find for the server to report the names of private arenas. (Not implemented yet.) * seeepd allows players to see other ship's energy and specials from spectator mode. (``epd'' stands for extra position data.) * seesysoplogall allows a player to see all important log message in the zone. * seesysoplogarena only allows a player to see only important log messages having to do with the arena he is currently in. * seemodchat allows players to see the moderator chat. * sendmodchat controls who can send moderator chat messages. Usually, these two capabilities would be given to the same people. * uploadfile allows a player to upload files. Note that the player must also have the cmd_putfile to upload a file using that command. 4.2 The default capability manager The default capability manager works with groups. Each group has a set of capabilities, and players are assigned to groups. To check if a player has a certain capability, the capability manager simply check if the group he's in has that capability. To determine which groups have which capabilities, the groupdef.conf file is used. It should have a section for each group, and a line within that section for each capability. To determine which players belong to which groups, the staff.conf file is used. It should have a single section, called ``Staff,'' with player names as keys and group names as values. Players not listed in the staff file will be assigned to the group ``default.'' If a player is assigned a group in staff.conf, he will be in that group in any arena he enters. Sometimes, however, a sysop will want to give certain players power in only certain arenas. Each arena's config file can also contain a ``Staff'' section. Groups assigned through arena config files will only be valid in that one arena. Additionally, the global staff.conf can be used to give a player powers in only certain arenas by using a value like ``arena1:agroup arena2:othergroup.'' The command ?setgroup can be used to control group assignment. 4.2.1 Emulating the old system Using the default manager, it's relatively easy to set up asss to emulate the old server's moderator, super moderator, and sysop model: The groupdef.conf file looks like this: ; conf/groupdef.conf [default] #include groupdef.dir/default [mod] #include groupdef.dir/default #include groupdef.dir/mod [smod] #include groupdef.dir/default #include groupdef.dir/mod #include groupdef.dir/smod [sysop] #include groupdef.dir/default #include groupdef.dir/mod #include groupdef.dir/smod #include groupdef.dir/sysop The files in groupdef.dir contain simply lists of capabilities. Each group includes the file for itself, as well as the files for the lesser powerful groups. 5 Logging asss has extensive logging capabilities. Any remotely interesting event in the game will generate a log message, which will be passed to any number of loaded logging handlers. 5.1 Level There are five importance levels defined for log messages: DRIVEL i unimportant information that you probably don't want to see, but i logged anyway, just in case. INFO is basic information about common, unexceptional events. MALICIOUS is for exceptional conditions that are caused by players sending bad data to the server. These might be indications of cheating or other illicit activity. They also might be caused by abnormal network conditions. WARN is for error condition that can be worked around, or aren't too catcatastrophic. ERROR is for really really horrible error conditions. These usually indicate misconfigured servers or bugs in the server itself. 5.2 What is logged? There are currently 209 distinct log messages in the server. By type, there are 25 ERROR messages, 49 WARN messages, 59 MALICIOUS messages, 30 INFO messages, and 46 DRIVEL messages. 5.3 Filtering Log handlers support a common method of filtering that give you lot of control over which handlers see which messages. By default, all messages are seen by all handlers. To limit message to a handler log_foo, create a section with the same name as the handler in global.conf. The keys in that section will be module names, and the values will be a set of priority levels to allow, specified by listing the first letters of the allowed levels. The special key all will be used for modules not listed. For example: ; this keeps flag positions and ball fires from appearing in the log ; file, but allows other DRIVEL messages. [log_file] all = DIMWE flags = IMWE balls = IMWE ; this allows all messages to go to the console except those from ; cmdman. [log_console] all = DIMWE cmdman = none ; this lets only important messages (malicious and error) go to sysop [log_sysop] all = ME 5.4 Command In general, all commands run by anyone are logged, at level INFO, along with their parameters and targets. Some commands, however, contain personal or sensitive information that might be abused by zone staff who can view logs. To prevent this abuse, a list of commands can be defined in the section named [DontLogParams] in global.conf. Commands listed here will have their parameters replaced by ... when they appear in log messages. 5.5 Handler The current log handlers are: * log_console simply writes all log messages to standard out, which is usually the terminal that asss is started from. Usually, a will run detached from any terminal, so this is primarily intended for debugging. * log_file write all log messages to a file. The name of the file i controlled by the Log:LogFile configuration option. The command ?admlogfile may be used to flush or reopen the log file while the server is running. asss always appends to a single file. If log rotation is desired, it should be accomplished with an external program such as logrotate. * log_sysop informs players of log events within the game. ``Important'' messages, as defined by the logging filter, are sent to players with the capabilities seesysoplogall and seesysoplogarena. Players with the latter capability only see log messages that originated in the arena. This logging module also implements the ?lastlog command. 6 New Feature 6.1 Freq Ownership Requires module: freqowner If the arena controller allows it, private freqs can now be owned. The first player to move to a particular private freq becomes an owner for that freq. An owner can kick non-owners off of his freq by sending them the command ?freqkick. An owner can give owner privileges to other players by sending them the command ?giveowner. The spec freq can't be owned. The config variable Team:AllowFreqOwners controls whether to enable freq ownership. It defaults to on. 6.2 Arena limiting Requires module: arenaperm Any arena can specify a General:NeedCap value in it's config file. If present, players will not be allowed to enter the arena unless they have the specified capability. 6.3 Autowarping Requires module: autowarp Using the region system, certain areas of the map can be configured to warp a player who enters them to somewhere else on the map. FIXME: include details about specifying autowarp settings. 6.4 Moderator chat asss includes an actual moderator chat system, which should be an improvement over the ?cheater-based systems in use currently. Mod chat messages begin with a backslash (\), and are displayed in dark red (the same color as sysop warning messages). Who is allowed to send and recieve mod chat is controlled by two capabilities: seemodchat and sendmodchat, which do what they sound like. 6.5 Multiple command You can specify multiple commands on one line by dividing them with vertical bars (|). The subsequent commands (after the first bar) don't need question marks (although they are ignored if present). You can send multiple private commands, but you can't send both public and private commands on the same line. 6.6 Built-in alias database Requires module: mysql, aliasdb asss includes a hastily-written alias database. The alias database depends on mysql support, although it's written so that it should be easy to port to another relational database if necessary. All logins are automatically entered if the aliasdb module is loaded. There are several ways to query the database: ?qalias isn't written yet, but it will be the most useful interface when it's done. ?qip allows you to query by IP address range. ?rawquery allows you to make custom queries with most SQL commands. You can find the documentation for these commands in the Commands section. The ?last command uses the alias database to find the last 10 people to log in. 7 Bandwidth Throttling asss supports bandwidth throttling for players on slower connections. To make the game fairer, packets are prioritized depending on their function. For example, weapons packets will be preferred over chat messages when deciding how to use up the last few bytes of alloted bandwidth. To avoid problems associated with the discontinuity of measuring bandwith, the server will reserve a certain percentage of the total bandwith for packets of certain priorities. For example, if a player' bandwidth limit is 2500 bytes, the server will refuse to use up all 2500 bytes for chat messages in the first half of the monitoring period to leave space for more important packets that will probably come in the second half. 8 Lag Control 8.1 Lag Measurement Lag, which includes both latency and packetloss, is difficult to measure accurately and control. asss does as well as it can with limited information. There are several ways that the server collects latency information: Position packets sent from the client contain timestamps that the server can compare to its own current time to determine approximately how long the packet took to get there. This is complicated by the fact that the times on the server and client aren't always perfectly synchronized. Reliable packets need to be acknowledged, and the round-trip time between the sending of a reliable packet and the reciept of its acknowledgement can be measured. That will be equal to approximately twice the one-way latency, but that isn't exact either because the two trips might take different amounts of time. Finally, the client can measure latency using the same techniques, and periodically send its results to the server for processing. Packetloss is slightly easier: the client and server can keep track of how many packets each has sent and recieved, and compare number periodically. Reliable packets also provide oppertunities to measure packetloss: if a reliable packet isn't acknowledged within the timeout, the server knows either the original packet or the acknowledgement got lost. If a reliable packet is recieved twice, the server knows the acknowledgement got lost. Again, the client can also measure these numbers and send the results to the server. 8.2 Settings and Action There is one global setting for lag, Lag:CheckInterval which control how often each player's lag numbers are checked to perform actions. It's specified in ticks. Each arena can specify its own lag limits. All of the parameters described below go in the Lag section in the arena's configuration file (or a file included from it). There are four main values that lag actions are based on: average ping (determined by an exponential averaging scheme, based on S2C, C2S, and reliable pings), S2C packet loss, S2C weapons packet loss, and C2S packet loss. Each value has four thresholds associated with it: one controls when a player gets forced into spectator mode, one control when a player is allowed to pick up flags and balls, and two control weapons ignoring. The units of the settings concerning latency are milliseconds, and the units of the settings concerning packetloss are tenths of a percent (i.e., fractions out of 1000). Forcing into spec is easy enough: if the value is over the threshold when a player is examined, he's forced into spec. Disabling flags and balls also works on a simple threshold: if the value is above it, the player won't be allowed to pick up any flags or balls. If he' currently carrying a flag or ball, and one of the values moves over the limit, he'll get to keep it. Weapon ignoring is slighly more complicated: There are two thresholds, one to start ignoring weapons, and one where all weapons will be ignored. If all of the values are below their respective starting thresholds, none of the player's weapons will be ignored. If one of them is higher, a percent of incoming weapons from that player to be ignored is calculated by interpolation between the starting threshold (0%) and the higher threshold (100%). If multiple values are above their starting threshold, the percent of weapons that gets ignored i the maximum of the percent ignored from each value. C2S packetlo doesn't cause weapon ignoring, since C2S packetloss generally give the player a disadvantage, not an advantage. The names of these settings are: PingToSpec, PingToStartIgnoringWeapons, PingToIgnoreAllWeapons, PingToDisallowFlags, S2CLossToSpec, S2CLossToStartIgnoringWeapons, S2CLossToIgnoreAllWeapons, S2CLossToDisallowFlags, WeaponLossToSpec, WeaponLossToStartIgnoringWeapons, WeaponLossToIgnoreAllWeapons, WeaponLossToDisallowFlags, C2SLossToSpec, and C2SLossToDisallowFlags. Their functions should be clear from their names and the above description. One final setting SpikeToSpec, determines the length of time that the server can recieve no packets from a player before forcing him into spectator mode. 9 Command These are all of the commands that the server currently recognizes. Not all of them will always be available. If a command requires a module that's not one of the core modules, that will be indicated above its description. Most other commands require the playercmd module. Possible targets are listed for each command. The targets can be ``none,'' which refers to commands typed as public (arena) messages, ``player,'' for commands that can target specific players, ``freq,'' for commands that can target a whole freq at a time (with either ' or "), or some restriction of one of those. Each command also describes any required or optional arguments. Note that the section doesn't list who is allowed to run a particular command, because that is determined by the capability manager, which can be fully customized for each particular server. a Possible targets: player, freq, or arena Arguments: Displays the text as an arena (green) message to the targets. admlogfile Possible targets: none Arguments: flush or reopen Administers the log file that the server keeps. There are two possible subcommands: flush flushes the log file to disk (in preparation for copying it, for example), and reopen tells the server to close and re-open the log file (to rotate the log while the server is running). arena Possible targets: none Arguments: [all] Lists the available arenas. Specifying all will also include empty arenas that the server knows about. ballcount Possible targets: none Arguments: Increases or decreases the number of balls in the arena. Takes an argument that is a positive or negative number, which is the number of balls to add (or, if negative, to remove). disablecmdgroup Possible targets: none Arguments: Disables all the commands in the specified command group and released the modules that they require. This can be used to release interface so that modules can be unloaded or upgraded without unloading playercmd (which would be irreversable). dropturret Requires module: autoturret Possible targets: none Arguments: none Drops a turret right where your ship is. The turret will fire 10 level 1 bombs, 1.5 seconds apart, and then disappear. enablecmdgroup Possible targets: none Arguments: Enables all the commands in the specified command group. This is only useful after using ?disablecmdgroup. flaginfo Possible targets: none Arguments: none Displays information (status, location, carrier) about all the flag in the arena. flagreset Possible targets: none Arguments: none Causes the flag game to immediately reset. forceding Requires module: turf_reward Possible targets: none Arguments: none Forces a reward to take place immediately in your current arena. freqkick Requires module: freqowner Possible targets: player Arguments: none Kicks the player off of your freq. The player must be on your freq and must not be an owner himself. The player giving the command, of course, must be an owner. geta Possible targets: none Arguments: section:key Displays the value of an arena setting. Make sure there are no space around the colon. getcm Possible targets: player or arena Arguments: none Prints out the chat mask for the target player, or if no target, for the current arena. The chat mask specifies which types of chat messages are allowed. getg Possible targets: none Arguments: section:key Displays the value of a global setting. Make sure there are no space around the colon. getgroup Possible targets: player or none Arguments: none Prints out the group of the target player. giveowner Requires module: freqownser Possible targets: player Arguments: none Allows you to share freq ownership with another player on your current private freq. You can't remove ownership once you give it out, but you are safe from being kicked off yourself, as long as you have ownership. grplogin Possible targets: none Arguments: Logs you in to the specified group, if the password is correct. help Possible targets: none Arguments: | Displays help on a command or config file setting. Use ?help section: to list known keys in that section. Use ?help : to list known section names. info Possible targets: player Arguments: none Displays various information on the target player, including which client they are using, their resolution, ip address, how long they have been connected, and bandwidth usage information. insmod Possible targets: none Arguments: Immediately loads the specified module into the server. jackpot Possible targets: none Arguments: none Displays the current jackpot for this arena. lag Possible targets: none or player Arguments: none Displays basic lag information about you or a target player. laghist Possible targets: none or player Arguments: [-r] Displays lag histograms. If a -r is given, do this histogram for reliablelatency instead of c2s pings. laginfo Possible targets: none or player Arguments: none Displays tons of lag information about a player. last Possible targets: none Arguments: none Tells you the last 10 people to log in. lastlog Requires module: log_sysop Possible targets: none Arguments: [] [] Prints out the last 10 lines in the server log. You can specify a number as an argument, it will print that many lines instead. If you specify any text as an argument, besides a number, the display will be limited to lines that contain that text. You can specify both a number and limiting text, just put the number first. listmod Possible targets: none Arguments: none Lists all staff members logged on, which arena they are in, and which group they belong to. lsmod Possible targets: none Arguments: none Lists all the modules currently loaded into the server. moveflag Possible targets: none Arguments: [ ] Moves the specified flag. You must always specify the freq that will own the flag. The coordinates are optional: if they are specified, the flag will be moved there, otherwise it will remain where it is. netstat Possible targets: none Arguments: none Prints out some statistics from the network layer, including the number of main menu pings the server has received, the total number of packets it has sent and received, and the number of buffers currently in use versus the number allocated. neutflag Possible targets: none Arguments: Neuts the specified flag in the middle of the arena. passwd Possible targets: none Arguments: Changes your local server password. Note that this command only changes the password used by the auth_file authentication mechanism. The billing server is not involved at all. pausetimer Possible targets: none Arguments: none Pauses the timer. The timer must have been created with ?timer. prize Possible targets: player, freq, or arena Arguments: see description Gives the specified prizes to the target player(s). Prizes are specified with an optional count, and then a prize name (e.g. 3 reps, anti). Negative prizes can be specified with a '-' before the prize name or the count (e.g. -prox, -3 bricks, 5 -guns). More than one prize can be specified in one command. A count without a prize name means random. For compatability, numerical prize ids with # are supported. qalia qip Possible targets: none Arguments: Queries the alias database for players connecting from that ip. Queries can be an exact addreess, ?qip 216.34.65.%, or ?qip 216.34.65.0/24. quickfix Requires module: quickfix Possible targets: none Arguments: Lets you quickly change arena settings. This will display some list of settings with their current values and allow you to change them. The argument to this command can be used to limit the list of setting displayed. rawquery Possible targets: none Arguments: Performs a custom sql query on the alias data. The text you type after ?rawquery will be used as the WHERE clause in the query. Examples: ?rawquery name like '%blah%' ?rawquery macid = 34127563 order by lastseen desc reloadconf Possible targets: none Arguments: none Causes the server to check all config files for modifications since they were last loaded, and reload any modified files. resetgame Possible targets: none Arguments: none Resets soccer game scores and balls. rmmod Possible targets: none Arguments: Attempts to unload the specified module from the server. score Possible targets: none Arguments: none Returns score of current soccer game. seta Possible targets: none Arguments: section:key=value Sets the value of an arena setting. Make sure there are no space around either the colon or the equals sign. setcm Possible targets: player or arena Arguments: see description Modifies the chat mask for the target player, or if no target, for the current arena. The arguments must all be of the form (-|+)(pub|pubmacro|freq|nmefreq|priv|chat|modchat|all) or -time . A minus sign and then a word disables that type of chat, and a plus sign enables it. The special type all means to apply the plus or minus to all of the above types. -time lets you specify a timeout in seconds. The mask will be effective for that time, even across logouts. Examples: * If someone is spamming public macros: :player:?setcm -pubmacro -time 600 * To disable all blue messages for this arena: ?setcm -pub -pubmacro * An equivalent to *shutup: :player:?setcm -all * To restore chat to normal: ?setcm +all Current limitations: You can't currently restrict a particular frequency. Leaving and entering an arena will remove a player's chat mask. setfreq Possible targets: player, freq, or arena Arguments: Moves the target player to the specified freq. setg Possible targets: none Arguments: section:key=value Sets the value of a global setting. Make sure there are no space around either the colon or the equals sign. setgroup Possible targets: player Arguments: [-a] [-t] Assigns the group given as an argument to the target player. The player must be in group default, or the server will refuse to change his group. Additionally, the player giving the command must have an appropriate capability: setgroup_foo, where foo is the group that he' trying to set the target to. The optional -t means to assign the group only for the current session. When the target player logs out or changes arenas, the group will be lost. The optional -a means to make the assignment local to the current arena, rather than being valid in the entire zone. setscore Possible targets: none Arguments: [ [... []]] Changes score of current soccer game, based on arguments. Only supports first eight freqs, and arena must be in absolute scoring mode (Soccer:CapturePoints < 0). setship Possible targets: player, freq, or arena Arguments: Sets the target player to the specified ship. The argument must be a number from 1 (Warbird) to 8 (Shark), or 9 (Spec). shipreset Possible targets: player, freq, or arena Arguments: none Resets the target players' ship(s). shutdown Possible targets: none Arguments: [-r] Immediately shuts down the server, exiting with EXIT_NONE. If -r i specified, exit with EXIT_RECYCLE instead. The run-asss script will notice EXIT_RECYCLE and restart the server. specall Possible targets: player, freq, or arena Arguments: none Sends all of the targets to spectator mode. stat Possible targets: player or none Arguments: none Prints out some basic statistics about the target player, or if no target, yourself. time Possible targets: none Arguments: none Returns amount of time left in current game. timer Possible targets: none Arguments: [:] Set arena timer to minutes:seconds, only in arenas with TimedGame setting off. Note, that the seconds part is optional, but minutes must always be defined (even if zero). If successful, server replies with ?time response. timereset Possible targets: none Arguments: none Reset a timed game, but only in arenas with Misc:TimedGame in use. turfresetflag Requires module: turf_reward Possible targets: none Arguments: none Resets the turf reward flag data. uptime Possible targets: none Arguments: none Displays how long the server has been running. usage Possible targets: player or none Arguments: none Displays the usage information (current hours and minutes logged in, and total hours and minutes logged in), as well as the first login time, of the target player, or you if no target. userid Possible targets: player or none Arguments: none Displays the billing server id of the target player, or yours if no target. version Possible targets: none Arguments: none Prints out the version and compilation date of the server. It might also print out some information about the machine that it's running on. warpto Possible targets: player, freq, or arena Arguments: Warps target player to coordinate x,y. watchdamage Possible targets: player, freq, none Arguments: [0 or 1] Turns damage watching on and off. If sent to a player, an argument of 1 turns it on, 0 turns it off, and no argument toggles. If sent as a public command, only ?watchdamage 0 is meaningful, and it turns off damage watching on all players. 10 Configuration All config files used by asss (except modules.conf) have the same format and conventions. The format is roughly based on, and i backwards compatible with, the Windows .ini file format, so server.cfg files can be used as-is, although you'll probably need to add a few settings to get things working well. Config files are processed line-by-line. All leading and trailing whitespace is ignored. A line is a comment if the first character (ignoring whitespace) is a semicolon or a forward slash. If the first character is a pound sign, it signals a preprocessor directive. These directives work very much like C preprocessor directives: #include allows one config file to include another. #define allows macros to be defined. Macros cannot currently take arguments. To reference the definition of a macro, you have to use $(MACRONAME), not just the name of the macro. (Curly braces can be used instead of parents, and either of them can be omitted entirely if the character after the end of the macro name isn't alphanumeric.) #ifdef, #ifndef, #else, and #endif allow conditional inclusion of sections based on whether a specific macro is defined or not. If a line ends with a backslash, it denotes a line continuation: the following line of the file (or more if that line ends with a backslash) is appended to the original line before it is processed. The start of a section is a line starting with an open bracket and ending with a closing bracket. The text between the brackets is the section name. Any line containing an equals sign is a value: the text before the equals is the key name (minus leading and trailing whitespace) and the text after (again minus whitespace) is the value. Section names and values are case-insensitive, but the case of value is preserved. Lines that don't contain an equals sign also specify keys, and their associated value is the empty string. Value-less key are used primarily in the capability manager, where the presence or absence of a capability is all that's important. If a key name contains a colon, it is treated specially: the text before the colon is treated as the section name for this key only (it doesn't modify the idea of the ``current section'') and the text after the colon is the key name. The following sections describe specific settings. They are sorted alphabetically by section and then by key. The settings are listed with the section and key names separated by a colon. The section name ``All'' isn't a real section name but means the setting is present in a section for each ship. 10.1 Global setting Billing:GroupId Type: Integer The group id to send to the billing server. Billing:IP Type: String The ip address of the billing server (no dns hostnames allowed). Billing:Limit Type: Integer Default: 15000 The bandwidth limit (in bytes per second) for the billing server. Billing:Password Type: String The password to log in to the billing server with. Billing:PingTime Type: Integer Default: 3000 Range: 500-6000 How often the server sends a ping to the billing server. Billing:Port Type: Integer Default: 1850 The port to connect to on the billing server. Billing:ScoreId Type: Integer The score id to send to the billing server. Note that this server doesn't keep scores on the billing server. Billing:ServerId Type: Integer The server id to send to the billing server. Billing:ServerName Type: String The server name to send to the billing server. Chat:FloodLimit Type: Integer Default: 10 How many messages needed to be sent in a short period of time (about a second) to qualify for chat flooding. Chat:FloodShutup Type: Integer Default: 60 How many seconds to disable chat for a player that is flooding chat messages. Chat:MessageReliable Type: Boolean Default: Ye Whether to send chat messages reliably. Config:CheckModifiedFilesInterval Type: Integer Default: 1500 How often to check for modified config files on disk (in ticks). Config:FlushDirtyValuesInterval Type: Integer Default: 500 How often to write modified config settings back to disk (in ticks). Directory:Description Type: String The server description to send to the directory server. Directory:Name Type: String The server name to send to the directory server. Directory:Password Type: String The password used to send information to the directory server. Directory:Port Type: Integer Default: 4991 The port to connect to for the directory server. General:NewsFile Type: String Default: news.txt The filename of the news file. General:NewsRefreshMinute Type: Integer Default: 5 How often to check for an updated news.txt. General:ShipChangeLimit Type: Integer Default: 10 The number of ship changes in a short time (about 10 seconds) before ship changing is disabled (for about 30 seconds). Lag:CheckInterval Type: Integer Default: 300 How often to check each player for out-of-bounds lag values (in ticks). Log:FileFlushPeriod Type: Integer Default: 10 How often to flush the log file to disk (in minutes). Log:LogFile Type: String Default: asss.log The name of the log file. mysql:database Type: String Requires module: mysql The database on the mysql server to use. mysql:hostname Type: String Requires module: mysql The name of the mysql server. mysql:password Type: String Requires module: mysql The password to log in to the mysql server as. mysql:user Type: String Requires module: mysql The mysql user to log in to the server as. Net:AntiwarpSendPercent Type: Integer Default: 5 Percent of position packets with antiwarp enabled to send to the whole arena. Net:BandwidthLimit Type: Integer Default: 3500 The maximum number of bytes per second to send to each player by default. Net:BulletPixel Type: Integer Default: 1500 How far away to always send bullets (in pixels). Net:ChatMessageDelay Type: Integer Default: 20 mod: chatnet The delay between sending messages to clients using the text-based chat protocol. (To limit bandwidth used by non-playing cilents.) Net:ChatPort Type: Integer Requires module: chatnet Default: Net:Port + 2 The port that the text-based chat protocol runs on. Net:DropTimeout Type: Integer Default: 3000 How long to get no data from a cilent before disconnecting him (in ticks). Net:MaxBufferDelta Type: Integer Default: 30 The maximum number of reliable packets to buffer for a player. Net:Port Type: Integer Default: 5000 The main port that the server runs on. Net:PositionExtraPixel Type: Integer Default: 8000 How far away to send positions of players on radar. Net:ReliableTimeout Type: Integer Default: 100 How long to wait to resend reliable packets (in ticks). Net:WeaponPixel Type: Integer Default: 2000 How far away to always send weapons (in pixels). Persist:SyncSecond Type: Integer Default: 180 The interval at which all persistent data is synced to the database. Security:SecurityKickoff Type: Boolean Default: No Whether to kick players off of the server for violating security checks. 10.2 Arena setting All:AfterburnerEnergy Type: Integer Amount of energy required to have 'Afterburners' activated All:AntiWarpEnergy Type: Integer Amount of energy required to have 'Anti-Warp' activated (thousanth per tick) All:AntiWarpStatu Type: Integer Range: 0-2 Whether ships are allowed to receive 'Anti-Warp' 0=no 1=ye 2=yes/start-with All:AttachBounty Type: Integer Bounty required by ships to attach as a turret All:BombBounceCount Type: Integer Number of times a ship's bombs bounce before they explode on impact All:BombFireDelay Type: Integer delay that ship waits after a bomb is fired until another weapon may be fired (in ticks) All:BombFireEnergy Type: Integer Amount of energy it takes a ship to fire a single bomb All:BombFireEnergyUpgrade Type: Integer Extra amount of energy it takes a ship to fire an upgraded bomb. i.e. L2 = BombFireEnergy+BombFireEnergyUpgrade All:BombSpeed Type: Integer How fast bombs travel All:BombThrust Type: Integer Amount of back-thrust you receive when firing a bomb All:BrickMax Type: Integer Maximum number of Bricks allowed in ship All:BulletFireDelay Type: Integer Delay that ship waits after a bullet is fired until another weapon may be fired (in ticks) All:BulletFireEnergy Type: Integer Amount of energy it takes a ship to fire a single L1 bullet All:BulletSpeed Type: Integer How fast bullets travel All:BurstMax Type: Integer Maximum number of Bursts allowed in ship All:BurstShrapnel Type: Integer Number of bullets released when a 'Burst' is activated All:BurstSpeed Type: Integer How fast the burst shrapnel is for this ship All:CloakEnergy Type: Integer Amount of energy required to have 'Cloak' activated (thousanths per tick) All:CloakStatu Type: Integer Range: 0-2 Whether ships are allowed to receive 'Cloak' 0=no 1=ye 2=yes/start-with All:DamageFactor Type: Integer How likely a the ship is to take damamage (ie. lose a prize) (0=special-case-never, 1=extremely likely, 5000=almost never) All:DecoyMax Type: Integer Maximum number of Decoys allowed in ship All:DisableFastShooting Type: Boolean If firing bullets, bombs, or thors is disabled after using afterburners (1=enabled) (Cont .36+) All:DoubleBarrel Type: Boolean Whether ships fire with double barrel bullet All:EmpBomb Type: Boolean Whether ships fire EMP bomb All:Gravity Type: Integer How strong of an effect the wormhole has on this ship (0 = none) All:GravityTopSpeed Type: Integer Ship are allowed to move faster than their maximum speed while effected by a wormhole. This determines how much faster they can go (0 = no extra speed) All:InitialBomb Type: Other Range: 0-3 Initial level a ship's bombs fire All:InitialBounty Type: Integer Number of 'Greens' given to ships when they start All:InitialBrick Type: Integer Initial number of Bricks given to ships when they start All:InitialBurst Type: Integer Initial number of Bursts given to ships when they start All:InitialDecoy Type: Integer Initial number of Decoys given to ships when they start All:InitialEnergy Type: Integer Initial amount of energy that the ship can have All:InitialGun Type: Integer Range: 0-3 Initial level a ship's guns fire All:InitialPortal Type: Integer Initial number of Portals given to ships when they start All:InitialRecharge Type: Integer Initial recharge rate, or how quickly this ship recharges its energy All:InitialRepel Type: Integer Initial number of Repels given to ships when they start All:InitialRocket Type: Integer Initial number of Rockets given to ships when they start All:InitialRotation Type: Integer Initial rotation rate of the ship (0 = can't rotate, 400 = full rotation in 1 second) All:InitialSpeed Type: Integer Initial speed of ship (0 = can't move) All:InitialThor Type: Integer Initial number of Thor's Hammers given to ships when they start All:InitialThrust Type: Integer Initial thrust of ship (0 = none) All:LandmineFireDelay Type: Integer Delay that ship waits after a mine is fired until another weapon may be fired (in ticks) All:LandmineFireEnergy Type: Integer Amount of energy it takes a ship to place a single L1 mine All:LandmineFireEnergyUpgrade Type: Integer Extra amount of energy it takes to place an upgraded landmine. i.e. L2 = LandmineFireEnergy+LandmineFireEnergyUpgrade All:MaxBomb Type: Integer Range: 0-3 Maximum level a ship's bombs can fire All:MaxGun Type: Integer Range: 0-3 Maximum level a ship's guns can fire All:MaximumEnergy Type: Integer Maximum amount of energy that the ship can have All:MaximumRecharge Type: Integer Maximum recharge rate, or how quickly this ship recharges its energy All:MaximumRotation Type: Integer Maximum rotation rate of the ship (0 = can't rotate, 400 = full rotation in 1 second) All:MaximumSpeed Type: Integer Maximum speed of ship (0 = can't move) All:MaximumThrust Type: Integer Maximum thrust of ship (0 = none) All:MaxMine Type: Integer Maximum number of mines allowed in ship All:MultiFireAngle Type: Integer Angle spread between multi-fire bullets and standard forward firing bullets (111 = 1 degree, 1000 = 1 ship-rotation-point) All:MultiFireDelay Type: Integer Delay that ship waits after a multifire bullet is fired until another weapon may be fired (in ticks) All:MultiFireEnergy Type: Integer Amount of energy it takes a ship to fire multifire L1 bullet All:PortalMax Type: Integer Maximum number of Portals allowed in ship All:PrizeShareLimit Type: Integer Maximum bounty that ships receive Team Prize All:Radiu Type: Integer Default: 7 Range: 0-255 The ship's radius from center to outside, in pixels. (Cont .37+) All:RepelMax Type: Integer Maximum number of Repels allowed in ship All:RocketMax Type: Integer Maximum number of Rockets allowed in ship All:RocketTime Type: Integer How long a Rocket lasts (in ticks) All:SeeBombLevel Type: Integer Range: 0-4 If ship can see bombs on radar (0=Disabled, 1=All, 2=L2 and up, 3=L3 and up, 4=L4 bombs only) All:SeeMine Type: Boolean Whether ships see mines on radar All:ShieldsTime Type: Integer How long Shields lasts on the ship (in ticks) All:ShrapnelMax Type: Integer Maximum amount of shrapnel released from a ship's bomb All:ShrapnelRate Type: Integer Amount of additional shrapnel gained by a 'Shrapnel Upgrade' prize. All:SoccerBallFriction Type: Integer Amount the friction on the soccer ball (how quickly it slows down - higher numbers mean faster slowdown) All:SoccerBallProximity Type: Integer How close the player must be in order to pick up ball (in pixels) All:SoccerBallSpeed Type: Integer Initial speed given to the ball when fired by the carrier All:SoccerThrowTime Type: Integer Time player has to carry soccer ball (in ticks) All:StealthEnergy Type: Integer Amount of energy required to have 'Stealth' activated (thousanths per tick) All:StealthStatu Type: Integer Range: 0-2 Whether ships are allowed to receive 'Stealth' 0=no 1=ye 2=yes/start-with All:SuperTime Type: Integer How long Super lasts on the ship (in ticks) All:ThorMax Type: Integer Maximum number of Thor's Hammers allowed in ship All:TurretLimit Type: Integer Number of turrets allowed on a ship All:TurretSpeedPenalty Type: Integer Amount the ship's speed is decreased with a turret riding All:TurretThrustPenalty Type: Integer Amount the ship's thrust is decreased with a turret riding All:UpgradeEnergy Type: Integer Amount added per 'Energy Upgrade' Prize All:UpgradeRecharge Type: Integer Amount added per 'Recharge Rate' Prize All:UpgradeRotation Type: Integer Amount added per 'Rotation' Prize All:UpgradeSpeed Type: Integer Amount added per 'Speed' Prize All:UpgradeThrust Type: Integer Amount added per 'Thruster' Prize All:XRadarEnergy Type: Integer Amount of energy required to have 'X-Radar' activated (thousanths per tick) All:XRadarStatu Type: Integer Range: 0-2 Whether ships are allowed to receive 'X-Radar' 0=no 1=ye 2=yes/start-with Bomb:BBombDamagePercent Type: Integer Percentage of normal damage applied to a bouncing bomb (in 0.1%) Bomb:BombAliveTime Type: Integer Time bomb is alive (in ticks) Bomb:BombDamageLevel Type: Integer Amount of damage a bomb causes at its center point (for all bomb levels) Bomb:BombExplodeDelay Type: Integer How long after the proximity sensor is triggered before bomb explode Bomb:BombExplodePixel Type: Integer Blast radius in pixels for an L1 bomb (L2 bombs double this, L3 bomb triple this) Bomb:BombSafety Type: Boolean Whether proximity bombs have a firing safety. If enemy ship is within proximity radius, will it allow you to fire Bomb:EBombDamagePercent Type: Integer Percentage of normal damage applied to an EMP bomb (in 0.1%) Bomb:EBombShutdownTime Type: Integer Maximum time recharge is stopped on players hit with an EMP bomb Bomb:JitterTime Type: Integer How long the screen jitters from a bomb hit (in ticks) Bomb:ProximityDistance Type: Integer Radius of proximity trigger in tiles (each bomb level adds 1 to thi amount) Brick:BrickSpan Type: Integer Default: 10 The maximum length of a dropped brick. Brick:BrickTime Type: Integer How long bricks last (in ticks) Bullet:BulletAliveTime Type: Integer How long bullets live before disappearing (in ticks) Bullet:BulletDamageLevel Type: Integer Maximum amount of damage that a L1 bullet will cause Bullet:BulletDamageUpgrade Type: Integer Amount of extra damage each bullet level will cause Bullet:ExactDamage Type: Boolean Default: No Whether to use exact bullet damage (Cont .36+) Burst:BurstDamageLevel Type: Integer Maximum amount of damage caused by a single burst bullet Chat:RestrictChat Type: Integer Default: 0 This specifies an initial chat mask for the arena. Don't use thi unless you know what you're doing. Cost:PurchaseAnytime Type: Boolean Default: No Whether players can buy items outside a safe zone. Door:DoorDelay Type: Integer How often doors attempt to switch their state Door:DoorMode Type: Integer Door mode (-2=all doors completely random, -1=weighted random (some doors open more often than others), 0-255=fixed doors (1 bit of byte for each door specifying whether it is open or not) Flag:CarryFlag Type: Integer Whether the flags can be picked up and carried (0=no, 1=yes, 2=yes-one at a time) Flag:DropOwned Type: Boolean Default: Ye Whether flags you drop are owned by your team. Flag:DropRadiu Type: Integer Default: 2 How far from a player do dropped flags appear (in tiles). Flag:EnterGameFlaggingDelay Type: Integer Time a new player must wait before they are allowed to see flag Flag:FlagBlankDelay Type: Integer Amount of time that a user can get no data from server before flag are hidden from view for 10 second Flag:FlagCount Type: Other Default: 0 Range: 0-256 How many flags are present in this arena. Flag:FlagDropDelay Type: Integer Time before flag is dropped by carrier (0=never) Flag:FlagDropResetReward Type: Integer Minimum kill reward that a player must get in order to have his flag drop timer reset Flag:FlaggerBombFireDelay Type: Integer Delay given to flaggers for firing bombs (zero is ships normal firing rate) (do not set this number less than 20) Flag:FlaggerBombUpgrade Type: Boolean Whether the flaggers get a bomb upgrade Flag:FlaggerDamagePercent Type: Integer Percentage of normal damage received by flaggers (in 0.1%) Flag:FlaggerFireCostPercent Type: Integer Percentage of normal weapon firing cost for flaggers (in 0.1%) Flag:FlaggerGunUpgrade Type: Boolean Whether the flaggers get a gun upgrade Flag:FlaggerKillMultiplier Type: Integer Number of times more points are given to a flagger (1 = double points, 2 = triple points) Flag:FlaggerOnRadar Type: Boolean Whether the flaggers appear on radar in red Flag:FlaggerSpeedAdjustment Type: Integer Amount of speed adjustment player carrying flag gets (negative number mean slower) Flag:FlaggerThrustAdjustment Type: Integer Amount of thrust adjustment player carrying flag gets (negative numbers mean less thrust) Flag:FlagReward Type: Integer Requires module: points_flag Default: 5000 The basic flag reward is calculated as (players in arena)2 * reward / 1000. Flag:FriendlyTransfer Type: Boolean Default: Ye Whether you get a teammates flags when you kill him. Flag:GameType Type: Enumerated Default: $FLAGGAME_NONE The flag game type for this arena. $FLAGGAME_NONE means no flag game, $FLAGGAME_BASIC is a standard warzone or running zone game, and $FLAGGAME_TURF specifies immobile flags. Flag:NeutOwned Type: Boolean Default: No Whether flags you neut-drop are owned by your team. Flag:NeutRadiu Type: Integer Default: 2 How far from a player do neut-dropped flags appear (in tiles). Flag:NoDataFlagDropDelay Type: Integer Amount of time that a user can get no data from server before flags he is carrying are dropped Flag:PersistentTurfOwner Type: Boolean Default: Ye Whether ownership of turf flags persists even when the arena is empty (or the server crashes). Flag:ResetDelay Type: Integer Default: 0 The length of the delay between flag games. Flag:SpawnRadiu Type: Integer Default: 50 How far from the spawn center that new flags spawn (in tiles). Flag:SpawnX Type: Integer Default: 512 The X coordinate that new flags spawn at (in tiles). Flag:SpawnY Type: Integer Default: 512 The Y coordinate that new flags spawn at (in tiles). Flag:SplitPoint Type: Boolean Default: No Whether to split a flag reward between the members of a freq or give them each the full amount. General:LevelFile Type: String A list of extra files to send to the client for downloading. A '+' before any file means it's marked as optional. General:Map Type: String The name of the level file for this arena. General:NeedCap Type: String Requires module: arenaperm If this setting is present for an arena, any player entering the arena must have the capability specified this setting. This can be used to restrict arenas to certain groups of players. General:ScoreGroup Type: String Default: (arena name) If multiple arenas share the same value for this setting, they will share scores for intervals that allow shared scores. Kill:BountyIncreaseForKill Type: Integer Number of points added to players bounty each time he kills an opponent Kill:EnterDelay Type: Integer How long after a player dies before he can re-enter the game (in ticks) Kill:FlagValue Type: Integer Default: 100 The number of extra points to give for each flag a killed player wa carrying. Kill:JackpotBountyPercent Type: Integer Default: 0 The percent of a player's bounty added to the jackpot on each kill. Units: 0.1%. Kill:MaxBonu Type: Integer FIXME: fill this in Kill:MaxPenalty Type: Integer FIXME: fill this in Kill:RewardBase Type: Integer FIXME: fill this in Lag:C2SLossToDisallowFlag Type: Integer Default: 50 The C2S packetloss when a player isn't allowed to pick up flags or balls. Units 0.1%. Lag:C2SLossToSpec Type: Integer Default: 150 The C2S packetloss at which to force a player to spec. Units 0.1%. Lag:PingToDisallowFlag Type: Integer Default: 500 The average ping when a player isn't allowed to pick up flags or balls. Lag:PingToIgnoreAllWeapon Type: Integer Default: 1000 The average ping when all weapons should be ignored. Lag:PingToSpec Type: Integer Default: 600 The average ping at which to force a player to spec. Lag:PingToStartIgnoringWeapon Type: Integer Default: 300 The average ping to start ignoring weapons at. Lag:S2CLossToDisallowFlag Type: Integer Default: 50 The S2C packetloss when a player isn't allowed to pick up flags or balls. Units 0.1%. Lag:S2CLossToIgnoreAllWeapon Type: Integer Default: 500 The S2C packetloss when all weapons should be ignored. Units 0.1%. Lag:S2CLossToSpec Type: Integer Default: 150 The S2C packetloss at which to force a player to spec. Units 0.1%. Lag:S2CLossToStartIgnoringWeapon Type: Integer Default: 40 The S2C packetloss to start ignoring weapons at. Units 0.1%. Lag:SpikeToSpec Type: Integer Default: 3000 The amount of time the server can get no data from a player before forcing him to spectator mode (in ticks). Lag:WeaponLossToDisallowFlag Type: Integer Default: 50 The weapon packetloss when a player isn't allowed to pick up flags or balls. Units 0.1%. Lag:WeaponLossToIgnoreAllWeapon Type: Integer Default: 500 The weapon packetloss when all weapons should be ignored. Units 0.1%. Lag:WeaponLossToSpec Type: Integer Default: 150 The weapon packetloss at which to force a player to spec. Units 0.1%. Lag:WeaponLossToStartIgnoringWeapon Type: Integer Default: 40 The weapon packetloss to start ignoring weapons at. Units 0.1%. Latency:ClientSlowPacketSampleSize Type: Integer Number of packets to sample S2C before checking for kickout Latency:ClientSlowPacketTime Type: Integer Amount of latency S2C that constitutes a slow packet Latency:S2CNoDataKickoutDelay Type: Integer Amount of time a user can receive no data from server before connection is terminated Latency:SendRoutePercent Type: Integer Percentage of the ping time that is spent on the C2S portion of the ping (used in more accurately syncronizing clocks) Message:AllowAudioMessage Type: Boolean Whether players can send audio message Mine:MineAliveTime Type: Integer Time that mines are active (in ticks) Mine:TeamMaxMine Type: Integer Maximum number of mines allowed to be placed by an entire team Misc:ActivateAppShutdownTime Type: Integer Amount of time a ship is shutdown after application is reactivated Misc:AllowSavedShip Type: Integer Whether saved ships are allowed (do not allow saved ship in zone where sub-arenas may have differing parameters) Misc:BounceFactor Type: Integer How bouncy the walls are (16 = no speed loss) Misc:DecoyAliveTime Type: Integer Time a decoy is alive (in ticks) Misc:ExtraPositionData Type: Integer Whether regular players receive sysop data about a ship Misc:FrequencyShift Type: Integer Amount of random frequency shift applied to sounds in the game Misc:GreetMessage Type: String The message to send to each player on entering the arena. Misc:NearDeathLevel Type: Integer Amount of energy that constitutes a near-death experience (ship bounty will be decreased by 1 when this occurs - used for dueling zone) Misc:SafetyLimit Type: Integer Amount of time that can be spent in the safe zone (in ticks) Misc:SeeEnergy Type: Enumerated Default: $SEE_NONE Whose energy levels everyone can see: $SEE_NONE means nobody else's, $SEE_ALL is everyone's, $SEE_TEAM is only teammates, and $SEE_SPEC i only the player you're spectating. Misc:SendPositionDelay Type: Integer Amount of time between position packets sent by client Misc:SheepMessage Type: String The message that appears when someone says ?sheep Misc:SlowFrameCheck Type: Integer Whether to check for slow frames on the client (possible cheat technique) (flawed on some machines, do not use) Misc:SpecSeeEnergy Type: Enumerated Default: $SEE_NONE Whose energy levels spectators can see. Check 'SeeEnergy' for the description of the options. Misc:TeamKillPoint Type: Boolean Default: No Whether points are awarded for a team-kill. Misc:TickerDelay Type: Integer Amount of time between ticker help message Misc:TimedGame Type: Integer Default: 0 How long the game timer lasts (in ticks). Zero to disable. Misc:VictoryMusic Type: Integer Whether the zone plays victory music or not Misc:WarpPointDelay Type: Integer How long a portal is active Misc:WarpRadiusLimit Type: Integer When ships are randomly placed in the arena, this parameter will limit how far from the center of the arena they can be placed (1024=anywhere) Modules:AttachModule Type: String This is a list of modules that you want to take effect in this arena. Not all modules need to be attached to arenas to function, but some do. Periodic:RewardDelay Type: Integer Default: 0 The interval between periodic rewards (in ticks). Zero to disable. Periodic:RewardMinimumPlayer Type: Integer Default: 0 The minimum players necessary in the arena to give out periodic rewards. Periodic:RewardPoint Type: Integer Requires module: points_periodic Default: 100 Periodic rewards are calculated as follows: If this setting i positive, you get this many points per flag. If it's negative, you get it's absolute value points per flag, times the number of players in the arena. Prize:DeathPrizeTime Type: Integer How long the prize exists that appears after killing somebody Prize:EngineShutdownTime Type: Integer Time the player is affected by an 'Engine Shutdown' Prize (in ticks) Prize:MinimumVirtual Type: Integer Distance from center of arena that prizes/flags/soccer-balls will spawn Prize:MultiPrizeCount Type: Integer Number of random greens given with a MultiPrize Prize:PrizeDelay Type: Integer How often prizes are regenerated (in ticks) Prize:PrizeFactor Type: Integer Number of prizes hidden is based on number of players in game. Thi number adjusts the formula, higher numbers mean more prizes. (Note: 10000 is max, 10 greens per person) Prize:PrizeHideCount Type: Integer Number of prizes that are regenerated every PrizeDelay Prize:PrizeMaxExist Type: Integer Maximum amount of time that a hidden prize will remain on screen. (actual time is random) Prize:PrizeMinExist Type: Integer Minimum amount of time that a hidden prize will remain on screen. (actual time is random) Prize:PrizeNegativeFactor Type: Integer Odds of getting a negative prize. (1 = every prize, 32000 = extremely rare) Prize:TakePrizeReliable Type: Integer Whether prize packets are sent reliably (C2S) Prize:UpgradeVirtual Type: Integer Amount of additional distance added to MinimumVirtual for each player that is in the game PrizeWeight:AllWeapon Type: Integer Likelihood of 'Super!' prize appearing PrizeWeight:AntiWarp Type: Integer Likelihood of 'AntiWarp' prize appearing PrizeWeight:Bomb Type: Integer Likelihood of 'Bomb Upgrade' prize appearing PrizeWeight:BouncingBullet Type: Integer Likelihood of 'Bouncing Bullets' prize appearing PrizeWeight:Brick Type: Integer Likelihood of 'Brick' prize appearing PrizeWeight:Burst Type: Integer Likelihood of 'Burst' prize appearing PrizeWeight:Cloak Type: Integer Likelihood of 'Cloak' prize appearing PrizeWeight:Decoy Type: Integer Likelihood of 'Decoy' prize appearing PrizeWeight:Energy Type: Integer Likelihood of 'Energy Upgrade' prize appearing PrizeWeight:Glue Type: Integer Likelihood of 'Engine Shutdown' prize appearing PrizeWeight:Gun Type: Integer Likelihood of 'Gun Upgrade' prize appearing PrizeWeight:MultiFire Type: Integer Likelihood of 'MultiFire' prize appearing PrizeWeight:MultiPrize Type: Integer Likelihood of 'Multi-Prize' prize appearing PrizeWeight:Portal Type: Integer Likelihood of 'Portal' prize appearing PrizeWeight:Proximity Type: Integer Likelihood of 'Proximity Bomb' prize appearing PrizeWeight:QuickCharge Type: Integer Likelihood of 'Recharge' prize appearing PrizeWeight:Recharge Type: Integer Likelihood of 'Full Charge' prize appearing (not 'Recharge') PrizeWeight:Repel Type: Integer Likelihood of 'Repel' prize appearing PrizeWeight:Rocket Type: Integer Likelihood of 'Rocket' prize appearing PrizeWeight:Rotation Type: Integer Likelihood of 'Rotation' prize appearing PrizeWeight:Shield Type: Integer Likelihood of 'Shields' prize appearing PrizeWeight:Shrapnel Type: Integer Likelihood of 'Shrapnel Upgrade' prize appearing PrizeWeight:Stealth Type: Integer Likelihood of 'Stealth' prize appearing PrizeWeight:Thor Type: Integer Likelihood of 'Thor' prize appearing PrizeWeight:Thruster Type: Integer Likelihood of 'Thruster' prize appearing PrizeWeight:TopSpeed Type: Integer Likelihood of 'Speed' prize appearing PrizeWeight:Warp Type: Integer Likelihood of 'Warp' prize appearing PrizeWeight:XRadar Type: Integer Likelihood of 'XRadar' prize appearing Radar:MapZoomFactor Type: Integer A number representing how far you can see on radar Radar:RadarMode Type: Integer Radar mode (0=normal, 1=half/half, 2=quarters, 3=half/half-see team mates, 4=quarters-see team mates) Radar:RadarNeutralSize Type: Integer Size of area between blinded radar zones (in pixels) Repel:RepelDistance Type: Integer Number of pixels from the player that are affected by a repel Repel:RepelSpeed Type: Integer Speed at which players are repelled Repel:RepelTime Type: Integer Time players are affected by the repel (in ticks) Rocket:RocketSpeed Type: Integer Speed value given while a rocket is active Rocket:RocketThrust Type: Integer Thrust value given while a rocket is active Shrapnel:InactiveShrapDamage Type: Integer Amount of damage shrapnel causes in it's first 1/4 second of life Shrapnel:Random Type: Boolean Whether shrapnel spreads in circular or random pattern Shrapnel:ShrapnelDamagePercent Type: Integer Percentage of normal damage applied to shrapnel (relative to bullet of same level) (in 0.1%) Shrapnel:ShrapnelSpeed Type: Integer Speed that shrapnel travel Soccer:AllowBomb Type: Boolean Whether the ball carrier can fire his bomb Soccer:AllowGoalByDeath Type: Boolean Default: No Whether a goal is scored if a player dies carrying the ball on a goal tile. Soccer:AllowGun Type: Boolean Whether the ball carrier can fire his gun Soccer:BallBlankDelay Type: Integer Amount of time a player can receive no data from server and still pick up the soccer ball Soccer:BallBounce Type: Boolean Whether the ball bounces off wall Soccer:BallCount Type: Integer Default: 0 The number of balls in this arena. Soccer:BallLocation Type: Boolean Whether the balls location is displayed at all times or not Soccer:GoalDelay Type: Integer Default: 0 How long after a goal before the ball appears (in ticks). Soccer:Mode Type: Enumerated Goal configuration ($GOAL_ALL, $GOAL_LEFTRIGHT, $GOAL_TOPBOTTOM, $GOAL_CORNERS_3_1, $GOAL_CORNERS_1_3, $GOAL_SIDES_3_1, $GOAL_SIDES_1_3) Soccer:NewGameDelay Type: Integer Default: -3000 How long to wait between games. If this is negative, the actual delay is random, between zero and the absolute value. Units: ticks. Soccer:PassDelay Type: Integer How long after the ball is fired before anybody can pick it up (in ticks) Soccer:SendTime Type: Integer Default: 1000 Range: 100-3000 How often the server sends ball positions (in ticks). Soccer:SpawnRadiu Type: Integer Default: 20 How far from the spawn center the ball can spawn (in tiles). Soccer:SpawnX Type: Integer Default: 512 Range: 0-1023 The X coordinate that the ball spawns at (in tiles). Soccer:SpawnY Type: Integer Default: 512 Range: 0-1023 The Y coordinate that the ball spawns at (in tiles). Soccer:UseFlagger Type: Boolean If player with soccer ball should use the Flag:Flagger* ship adjustments or not Spectator:HideFlag Type: Boolean Default: No Whether spectators are disallowed from haveing X radar (Cont .36+) Team:AllowFreqOwner Type: Boolean Default: Ye Whether to enable the freq ownership feature in this arena. Team:DesiredTeam Type: Integer Default: 2 The number of teams that the freq balancer will form as players enter. Team:FrequencyShipType Type: Boolean Default: No If this is set, freq 0 will only be allowed to use warbirds, freq 1 can only use javelins, etc. Team:IncludeSpectator Type: Boolean Default: No Whether to include spectators when enforcing maximum freq sizes. Team:MaxFrequency Type: Integer Default: 9999 Range: 0-9999 The highest frequency allowed. Set this below PrivFreqStart to disallow private freqs. Team:MaxPerPrivateTeam Type: Integer Default: 0 The maximum number of players on a private freq. Zero means no limit. Team:MaxPerTeam Type: Integer Default: 0 The maximum number of players on a public freq. Zero means no limit. Team:PrivFreqStart Type: Integer Default: 100 Range: 0-9999 Freqs above this value are considered private freqs. Team:SpectatorFrequency Type: Integer Default: 8025 Range: 0-9999 The frequency that spectators are assigned to, by default. Toggle:AntiWarpPixel Type: Integer Distance Anti-Warp affects other players (in pixels) (note: enemy must also be on radar) Wormhole:GravityBomb Type: Boolean Whether a wormhole affects bomb Wormhole:SwitchTime Type: Integer How often the wormhole switches its destination 10.3 Other setting General:AllowUnknown File: passwd.conf Type: Boolean Requires module: auth_file Default: Ye Determines whether to allow players not listed in the password file. 10.4 More detail on specific section 10.4.1 Flag Until I have time to rework my notes into a nice document, this will have to do: quick guide to transition flag settings: (all these go in the [Flag] section) OLD SETTINGS TO KEEP FlaggerOnRadar=1 FlaggerKillMultiplier=2 FlaggerGunUpgrade=1 FlaggerBombUpgrade=1 FlaggerFireCostPercent=1000 FlaggerDamagePercent=1000 FlaggerBombFireDelay=0 FlaggerSpeedAdjustment=0 FlaggerThrustAdjustment=0 CarryFlags=1 make sure this agrees with GameType (see below) FlagDropDelay=3000 FlagDropResetReward=0 EnterGameFlaggingDelay=1000 FlagBlankDelay=200 NoDataFlagDropDelay=500 OLD SETTINGS TO CHANGE FlagMode=1 get rid of this, there's a new way to specify ga me type FlagResetDelay=1440000 rename to ResetDelay (not currently implemented) MaxFlags=3 change to FlagCount=3 RandomFlags=0 get rid of this, use FlagCount=5-10 FlagReward=2500 keep thi FlagRewardMode=0 change name to SplitPoint FlagTerritoryRadius=3 get rid of this, use DropRadiu FlagTerritoryRadiusCentroid=0 get rid of this, use DropRadiu FriendlyTransfer=0 keep this the same NEW SETTINGS GameType = FLAGGAME_BASIC options: FLAGGAME_NONE, FLAGGAME_BASIC, FLAGGAME_TURF, FLAGGAME_CUSTOM basic is warzone/running with movable flags. turf is turf (be sure to set CarryFlags=0, for now). custom means you have to load a module to define a new game. note that those constants are in settings/flaggames.h SpawnX = 512 SpawnY = 512 SpawnRadius = 1024 define where flags spawn and how far from that center DropRadius = 2 how far from a ship will flags drop NeutRadius = 2 how far from a ship will neuted flags appear DropOwned = YES are dropped flags owned by the freq? NeutOwned = NO are neuted flags owned by the freq? (obviously, YES prevents neuting) 10.4.2 Energy viewing There are two arena settings that control whether players see other player's energy and ship inventory (from spec): * Misc:SpecSeeEnergy This affects what players in spec see. If it' set to SEE_ALL, a player will see inventory/energy for the player he is speccing, plus energy for all other players. If it' SEE_SPEC, a player will only see energy/inventory for the player he is speccing. SEE_NONE will disable all extra information for speccers. * Misc:SeeEnergy If this is set to SEE_ALL, everyone will see everyone else's energy. If it's SEE_TEAM, you will only see the energy of your teammates. If it's SEE_NONE, no one will see other's energy. In addition, there are two capabilities that override the above settings. seeepd allows players to see energy/inventory from spec, and seenrg allows energy viewing while playing. 11 Acknowledgement I'd like to thank the following people and groups: * divine.216 for general support, lots of help testing, banner support, and many useful suggestions. * Mine GO BOOM for his ruthless bug-finding and interesting suggestions, as well as being the first person besides me to actually contribute code to asss. * Stag Shot for making sure powerball isn't left out, and other contributions. * GiGaKiLLeR for contributing a turf rewards module. * Mr. Ekted for all his technical help and discussions. * ZippyDan, ball master, for moral support and comic relief. * xalimar for shell accounts and hosting, mostly. * numpf for design critiques. * Remnant for being the first person to log into asss (besides me, of course), and help testing. * The rest of the PowerBot chat for friendly conversation and entertainment. * The Subspace Council for not dismissing this project immediately, and specifically PriitK for information on communicating with Continuum. * D.A.F. (not a subspace player) for conversations on design and more. Last modified: Wed, Jan 8, 2003, 10:50 pm