<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.armagetronad.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tank+Program</id>
	<title>Armagetron Advanced - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.armagetronad.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tank+Program"/>
	<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=Special:Contributions/Tank_Program"/>
	<updated>2026-10-16T09:10:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=Configuration_Files&amp;diff=30659</id>
		<title>Configuration Files</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=Configuration_Files&amp;diff=30659"/>
		<updated>2011-02-02T08:37:37Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== File Locations ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
;datadir&lt;br /&gt;
:&amp;lt;code&amp;gt;/etc/games/armagetronad-dedicated&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;/etc/games/armagetronad&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;userdatadir&lt;br /&gt;
:&amp;lt;code&amp;gt;~/.armagetronad-dedicated&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;~/.armagetronad&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
;datadir&lt;br /&gt;
:The &amp;lt;code&amp;gt;Armagetron Advanced Dedicated/&amp;lt;/code&amp;gt; directory&lt;br /&gt;
:&amp;lt;code&amp;gt;Armagetron Advanced.app/Contents/Resources&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;userdatadir&lt;br /&gt;
:&amp;lt;code&amp;gt;~/Library/Application Support/Armagetron Advanced Dedicated&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;~/Library/Application Support/Armagetron Advanced&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
;datadir&lt;br /&gt;
:&amp;lt;code&amp;gt;C:\program files\armagetronad&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;userdatadir&lt;br /&gt;
:&amp;lt;code&amp;gt;C:\documents and settings\&amp;lt;username&amp;gt;\&amp;lt;appdata&amp;gt;\Armagetron&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== File Purposes ==&lt;br /&gt;
&lt;br /&gt;
Here are the files you will find (Note: this is for the 0.2.8 server, older servers vary):&lt;br /&gt;
&lt;br /&gt;
;aiplayers.cfg&lt;br /&gt;
:This file contains the information used to determine the AI player names and skills.  You can edit this file to make a more customized set of AI players, but make sure to take backups.  When you upgrade or reinstall the server this file will be overwritten.&lt;br /&gt;
&lt;br /&gt;
;default.cfg&lt;br /&gt;
:This file contains a reasonable set of defaults and shouldn&#039;t be edited.&lt;br /&gt;
&lt;br /&gt;
;master.srv&lt;br /&gt;
:This file contains the location of the master server and connection parameters.  You can edit it, but then your server won&#039;t be able to communicate with the master server that everyone uses, so only do so if you really know what you&#039;re doing and have a good reason to do it.&lt;br /&gt;
&lt;br /&gt;
;rc.config&lt;br /&gt;
:This file is used to configure the UNIX daemon.  It may not be present in Windows/Mac OS X.&lt;br /&gt;
&lt;br /&gt;
;settings.cfg&lt;br /&gt;
:This file contains the basic set of settings used by both the client and the server.  You should not edit this file.&lt;br /&gt;
&lt;br /&gt;
;settings_dedicated.cfg&lt;br /&gt;
:This file contains an extended set of settings used by the dedicated server.  You should not edit this file either.&lt;br /&gt;
&lt;br /&gt;
So where should you make your changes?  There are 4 files that were not listed, but they are the files you should edit!  Why aren&#039;t they listed?  &#039;&#039;You&#039;&#039; are supposed to make them, using a regular text editor.  So, open settings_dedicated.cfg and copy the appropriate lines into the following files:&lt;br /&gt;
&lt;br /&gt;
;autoexec.cfg&lt;br /&gt;
:In the old days, up to and including 0.2.7.1, server admins were advised to create this file and put all of their settings here.  This file is still used in 0.2.8, but using it is no longer recommended as we move to a more modular configuration system.  So, if you&#039;re trying to setup a server with 0.2.7.1 or earlier, please use autoexec.cfg.  Otherwise, read on for what to use.&lt;br /&gt;
&lt;br /&gt;
;server_info.cfg&lt;br /&gt;
:You should put server policy settings here, as well as the SERVER_NAME and connection information.&lt;br /&gt;
&lt;br /&gt;
;settings_custom.cfg&lt;br /&gt;
:This is the file that should contain game rule and simulation settings.  If you obey the convention for &amp;lt;code&amp;gt;server_info.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;settings_custom.cfg&amp;lt;/code&amp;gt;, your server will not only be easier to maintain, but also easier to exchange settings with other administrators.&lt;br /&gt;
&lt;br /&gt;
;everytime.cfg&lt;br /&gt;
:This file is loaded and processed every round.  In a running server, that means you can use this file to change settings on the fly.  It also means you can put special information using console commands here.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
SAY Server stats at http://www.armagetronadstats.com/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...will display &amp;quot;Admin: Server stats at http://www.armagetronadstats.com/&amp;quot; between every round.  Very useful!  You can also put:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
INCLUDE settings_custom.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...and your settings_custom.cfg file will be reloaded every round.  Not particularly useful, but it can be helpful when you need to tweak simulation settings.&lt;br /&gt;
&lt;br /&gt;
Note: If you&#039;re reading this guide because you want to migrate a 0.2.7.x server to 0.2.8, you should just copy your autoexec.cfg file to the new installation.  It would be best if you factored out the settings in autoexec.cfg into server_info.cfg and settings_custom.cfg, but it&#039;s not required.&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22708</id>
		<title>User:Tank Program</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22708"/>
		<updated>2009-02-05T16:21:07Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi.&lt;br /&gt;
&lt;br /&gt;
http://guru3.net/&lt;br /&gt;
http://armagetronad.net/&lt;br /&gt;
http://launchpad.net/&lt;br /&gt;
http://sourceforge.net/&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22707</id>
		<title>User:Tank Program</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22707"/>
		<updated>2009-02-05T16:20:02Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi.&lt;br /&gt;
&lt;br /&gt;
http://guru3.net/&lt;br /&gt;
http://armagetronad.net/&lt;br /&gt;
http://launchpad.net/&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22706</id>
		<title>User:Tank Program</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22706"/>
		<updated>2009-02-05T16:19:35Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi.&lt;br /&gt;
&lt;br /&gt;
http://guru3.net/&lt;br /&gt;
http://armagetronad.net/&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22705</id>
		<title>User:Tank Program</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22705"/>
		<updated>2009-02-05T16:08:26Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi.&lt;br /&gt;
&lt;br /&gt;
http://guru3.net/&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22704</id>
		<title>User:Tank Program</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=User:Tank_Program&amp;diff=22704"/>
		<updated>2009-02-05T16:07:55Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: New page: Hi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi.&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=Hash_Authentication_Design&amp;diff=21570</id>
		<title>Hash Authentication Design</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=Hash_Authentication_Design&amp;diff=21570"/>
		<updated>2008-08-29T22:58:20Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: /* Phase 2: Server looks up authority */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Sections}} &amp;lt;!-- Template:Sections should be at the top of each section --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hash Based Authentication Design =&lt;br /&gt;
&lt;br /&gt;
== Ingredients ==&lt;br /&gt;
&lt;br /&gt;
This document describes the interaction between three entities: the game client with the player who wishes to authenticate, the game server the player is currently playing on, and the authority, in charge of checking the player&#039;s identity. We only care about the high level interactions here; the details of the communications are left out (game client and server communicate over the game internal network protocol, game server and authority communicate over HTTP).&lt;br /&gt;
&lt;br /&gt;
We are currently using the hashing algorithm md5 which transforms a data block of arbitrary size into a 16 byte hash value. The operation of md5 is simply denoted with &amp;quot;hash = md5(data)&amp;quot;. With &amp;quot;+&amp;quot;, we denote concatenation of data blocks to larger data blocks; strings are to be interpreted of data blocks containing the latin1 encoded characters and do not include the C-style trailing 0.&lt;br /&gt;
&lt;br /&gt;
The protocol works in different phases.&lt;br /&gt;
&lt;br /&gt;
== Phase 0: Before all that ==&lt;br /&gt;
&lt;br /&gt;
Already before the client starts the authentication process, it transmits a list of supported authentication methods (hash shemes) to the server. This happens right when the connection is established. Clients not sending the list will be assumed to be old clients supporting the &amp;quot;bmd5&amp;quot; hash scheme only.&lt;br /&gt;
&lt;br /&gt;
As the server logs in to the master servers, it gets told what its public IP address is.&lt;br /&gt;
&lt;br /&gt;
== Phase 1: Client requests authentication ==&lt;br /&gt;
&lt;br /&gt;
The authentication process is usually started by the client (a modified server is allowed to skip this step, if, for example, authentication is to be required to even be on the server). There are two possibilities: The player issues a special chat command: &amp;quot;/login&amp;quot; for logins with a default identity transmitted earlier/a local server account if no default identity has been transmitted, &amp;quot;/login authority&amp;quot; to log in to a selected authority, or &amp;quot;/login user@authority&amp;quot; to log in as a specific user. Alternatively, there is a special login message containing the user name and authority the player wishes to authenticate with. Such a packet is sent by clients that support it via the game menu &amp;quot;Authentication&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Phase 2: Server looks up authority ==&lt;br /&gt;
&lt;br /&gt;
When the server receives the client&#039;s authentication request, it contacts the authority and queries the list of supported methods. From that, its own list of supported methods and the list from the client, the server then selects the best method. It queries the authority again and fetches a list of additional parameters for the selected method.&lt;br /&gt;
&lt;br /&gt;
The server then generates a random 16 byte wide salt data block and transmits the salt, the selected method, its parameters and the username back to the client. A menu title message is also transmitted.&lt;br /&gt;
&lt;br /&gt;
The [[Authentication_Server|authority]] has the potential to return additional information to the verification of a user/password pair. &amp;quot;Blurbs&amp;quot; are currently understood by the server in a very basic form, but are essentially unused. There are proposed blurbs to be understood in the next revision of the armaauth protocol, specifically to increase the potential ability of the role of authentication server as a means of logging into Armagetron related websites.&lt;br /&gt;
&lt;br /&gt;
== Phase 3: Client collects password ==&lt;br /&gt;
&lt;br /&gt;
Upon receiving that information, the client starts a password entry menu, where the player can change his username&lt;br /&gt;
one last time and enter the password. While that menu is active, keypresses are&lt;br /&gt;
scrambled in a potentially running debug recording. Then, depending on the selected method, different scrambling&lt;br /&gt;
techniques are used:&lt;br /&gt;
&lt;br /&gt;
=== Method bmd5 ===&lt;br /&gt;
&lt;br /&gt;
The client calculates&lt;br /&gt;
 prehash = md5(password + &amp;quot;\0&amp;quot;)&lt;br /&gt;
 hash = md5(prehash + salt)&lt;br /&gt;
&amp;quot;\0&amp;quot; is a single byte of value 0. Obviously, it&#039;s there because of an error in the old implementation, but now we&#039;re stuck with it.&lt;br /&gt;
&lt;br /&gt;
=== Method md5 ===&lt;br /&gt;
&lt;br /&gt;
This method has two parameters, a prefix and a suffix. Before they enter the scrambling, the sequence &amp;quot;%u&amp;quot; in them is replaced by the username the client entered. Before the password is scrambled, the salt gets scrambled by &lt;br /&gt;
 salt2 = md5( md5(salt) + md5(serverIP))&lt;br /&gt;
where serverIP is the string representation of the server&#039;s IP address and port. Then, &lt;br /&gt;
 prehash = md5( prefix + password + suffix )&lt;br /&gt;
 hash = md5(prehash + salt2)&lt;br /&gt;
is calculated.&lt;br /&gt;
&lt;br /&gt;
In both methods, the resulting hash value is then sent back to the server, along with the value of serverIP used for scrambling the salt (only on post-0.2.8.2.1-clients) and the possibly modified username.&lt;br /&gt;
&lt;br /&gt;
== Phase 4: Authentication request ==&lt;br /&gt;
&lt;br /&gt;
The server checks whether the serverIP value sent by the client matches the IP it was told by the master servers earlier or retrieved by other means. If it does not match, an error is returned to the user immediately. The server then transmits the following data to the authority:&lt;br /&gt;
- the selected method&lt;br /&gt;
- the user name&lt;br /&gt;
- the salt value for the bmd5 method/the salt2 value for the md5 method, calculated on the server using its known IP&lt;br /&gt;
- the hash value returned by the client&lt;br /&gt;
&lt;br /&gt;
The authority then has to check the password for correctness. Usually, it will have the value of prehash pre-calculated in its database, but it can also choose to calculate it on the fly from a plaintext password (plaintext passwords would increase the network security as they would allow periodic changes to prefix and suffix strings, prehashed passwords make loss of the database less of a problem). Either way, the authority just checks whether a) the user exists and b) hash is the correct md5(prehash + salt(2)) value. The result of the comparison is reported to the game server, which then either reports an error to the client and player or accepts the authentication.&lt;br /&gt;
&lt;br /&gt;
= Known Weaknesses =&lt;br /&gt;
&lt;br /&gt;
* With the bdm5 method, badmins runnig a server can steal player logins; as a player logs in on their server, they can instead abuse the system to imposter that player on a different server. the md5 method has some protection against that in the form of the server&#039;s IP the client entangles into the hash.&lt;br /&gt;
* No strong encryption is used. A badmin that has the power to imposer a server completely with its IP address and port still can steal player logins.&lt;br /&gt;
* the md5 hash sum algorithm itself is known to have some flaws; none of the flaws already found inhibit its usefulness for our purposes here, but it&#039;s only a question of time.&lt;br /&gt;
&lt;br /&gt;
{{Sections}} &amp;lt;!-- Template:Sections should be at the top of each section --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=Authentication_Server&amp;diff=21569</id>
		<title>Authentication Server</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=Authentication_Server&amp;diff=21569"/>
		<updated>2008-08-29T22:52:08Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: /* Blurb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Sections}}&lt;br /&gt;
&lt;br /&gt;
= How to run an Authentication Server =&lt;br /&gt;
&lt;br /&gt;
Have a look at [[Hash Authentication Design|the protocol]] to see what is expected of an Authentication Server. Game servers will issue HTTP requests to it with&lt;br /&gt;
* user name&lt;br /&gt;
* salt&lt;br /&gt;
* scrambled password hash&lt;br /&gt;
And your job is to figure out whether the password the hash was generated from was correct. That&#039;s easiest if you have the users&#039; plainext password stored somewhere; however, that is not common practice. To support the bmd5 hash protocol (the only one available on 0.2.8.2.1 resp. 0.3.0 clients and earlier), you specifically need&lt;br /&gt;
the md5 hashsum of the password with an appended 0 byte. For the newer md5 hash protocol, the md5 sum of (prefix + password + suffix), where prefix and suffix choice is up to you, is needed.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have the password in this form in your database, you&#039;ll need to generate it. forums.armagetronad.net uses a trick: whenever a user logs on, the server gets the plaintext password, and then the hash for the bmd5 protocol is stored. phpBB2 already stores the plain md5 hash of the password, so the md5 protocol is natively supported with prefix=suffix=&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To run an authentication server, you need control over a web server with scripting available. If your authority name shall be bla.blubb.net, game servers will query the URI http://bla.blubb.net/armaauth/0.1 with an appended query string; if you make /armaauth/0.1 a directory and put your authentication script there, named index.php or index.py or even index.sh, whatever your server supports, it will be called to process the requests.&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t access /armaauth/0.1, you can put it into a subdirectory. If you put it into /~user/armaauth/0.1, then your authority will be named bla.blubb.net/~user.&lt;br /&gt;
&lt;br /&gt;
Users of your authority will be known as username@authority. Don&#039;t worry about naming collisions between users of equal name at different authorities, the authority part appears in all logs, and by default, there is no forced link between the screen name and user name of a player.&lt;br /&gt;
&lt;br /&gt;
== Shorthand names ==&lt;br /&gt;
&lt;br /&gt;
If you want a shorthand authority name, talk to Tank Program/Guru3. Shorthand names get expanded to &amp;lt;shorthand&amp;gt;.authentication.armagetronad.net, and we can set up a DNS CNAME entry that maps this name to your server. There are some conditions for that:&lt;br /&gt;
* Your authority must be free for everyone to join. Clan authorities that only authorize clan members are out.&lt;br /&gt;
* Your authority must make a reasonable effort to give only one username to a single person; email verification is enough.&lt;br /&gt;
* It needs to either already have a couple of members or show promise for growth. We don&#039;t need Yet Another Dead Forum.&lt;br /&gt;
&lt;br /&gt;
== The script ==&lt;br /&gt;
&lt;br /&gt;
We have two example scripts. One is armagetronad/batch/authentication_reference.php of the current 0.2.8 branch or the trunk. It is written by a php n00b and therefore should be understandable by php n00bs :) You can attach your &amp;quot;business logic&amp;quot;, the password retrieval, either in the getPassword() function or the getPasswordHash() function. The comments there should tell you what you need to do.&lt;br /&gt;
&lt;br /&gt;
The other script is more elaborate and can directly plug into user databases; you&#039;ll just have to configure it with your database connection and tell it in what row and table of a database username and password hash can be found. it can be checked out with&lt;br /&gt;
 svn co https://armagetronad.svn.sf.net/svnroot/armagetronad/tools/http-auth-server&lt;br /&gt;
&lt;br /&gt;
== Blurb ==&lt;br /&gt;
&lt;br /&gt;
On successful authentication, you can also pass additional data about the user in the lines following the one containing &amp;quot;PASSWORD_OK&amp;quot;. In the future,&lt;br /&gt;
there may be standard blurb messages the game server itself understands; currently, however, there is only one effect: A blurb line of the form&lt;br /&gt;
 &amp;lt;TOKEN&amp;gt; &amp;lt;further data&amp;gt;&lt;br /&gt;
where &amp;lt;TOKEN&amp;gt; is a single word and &amp;lt;further data&amp;gt; is arbitrary text will be logged in ladderlog.txt as&lt;br /&gt;
 AUTHORITY_BLURB_&amp;lt;TOKEN&amp;gt; user@authority &amp;lt;further data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One standard blurb message would be&lt;br /&gt;
 ALIAS otheruser@otherauthority&lt;br /&gt;
telling ladderlog parsers that choose to believe your authority that the just authenticated user is actually the same person as the user given in the alias.&lt;br /&gt;
&lt;br /&gt;
=== Proposed Blurbs for spec 0.2 ===&lt;br /&gt;
* EMAIL_VERIFIED true/false&lt;br /&gt;
&lt;br /&gt;
{{Sections}}&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=Debug_Recording&amp;diff=21472</id>
		<title>Debug Recording</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=Debug_Recording&amp;diff=21472"/>
		<updated>2008-06-13T07:15:58Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: /* Mac OS X */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is it? ==&lt;br /&gt;
Armagetron Advanced 0.2.8+ has a feature to record a play session. This session can later be used by developers to find and squash bugs.&lt;br /&gt;
== What is it not? ==&lt;br /&gt;
A tool to record games and make the recording available for others or yourself to watch later. Feel free to use it as such, but be aware that&lt;br /&gt;
the for the debug recordings to actually be a help in finding bugs, it has to have these limitations:&lt;br /&gt;
&lt;br /&gt;
* you can&#039;t play the recording back in any other version of Armagetron than you recorded it with&lt;br /&gt;
* you can&#039;t even reliably play it back with the same version on a different machine&lt;br /&gt;
* you can&#039;t play the recording back at any framerate your client can manage&lt;br /&gt;
* you can&#039;t skip backward&lt;br /&gt;
* you always have to watch a long recording from the beginning, there is no really fast way to skip to the middle&lt;br /&gt;
* the recording contains your configuration and forces it on the one playing it back (apart from some graphics settings)&lt;br /&gt;
&lt;br /&gt;
These restrictions are fundamental and can&#039;t be worked around. Other limitations would be technically possible to work around, for example it would be possible to switch the camera to different players or have a fast forward hotkey or to allow &amp;quot;cut&amp;quot; files that automatically play a recording back, skipping the parts that were cut out; in some special cases, it may be possible to get rid of the last limitation. But the first two limitations are so severe that it plainly doesn&#039;t make sense to improve the usability of debug recording playback into that direction, and the changes would all make more code aware that a debug recording is running, which is a bad thing for debugging. You don&#039;t want code to know it&#039;s getting debugged. What you really want is a different kind of recording, which may or may not materialize in the future.&lt;br /&gt;
&lt;br /&gt;
== Creating a Debug Recording ==&lt;br /&gt;
&lt;br /&gt;
=== All Platforms ===&lt;br /&gt;
&lt;br /&gt;
Use your shell to pass some command line arguments to armagetron:&lt;br /&gt;
&lt;br /&gt;
To record: &amp;lt;code&amp;gt;armagetronad --record filename&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
To playback: &amp;lt;code&amp;gt;armagetronad --playback filename [--fast-forward SECONDS]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt; is the name of the file to be recorded to / played back.&lt;br /&gt;
&lt;br /&gt;
(On windows, you can issue shell commands by entering them in startmenu-&amp;gt;run. Remember to give the full path to armagetronad.exe if you do that.)&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
Use the helper application included with the game to start or playback an Armagetron Advanced recording. The application has a feature to compress a recording using bzip2 after Armagetron Advanced quits, so you can upload to the forums easily. It also will decompress a bzip2 or zip file for playback.&lt;br /&gt;
&lt;br /&gt;
http://forums.armagetronad.net/viewtopic.php?p=34800#34800&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
The installer creates links in the start menu to record/playback to/from a file called ArmagetronAdvancedDebugRecording.aarec that is located directly on your desktop. To attach it on the forum, you&#039;ll need to either rename it to have an accepted extension (best choice: ArmagetronAdvancedDebugRecording.aarec.not.zip) or, better, really compress it with a zip program like WinZip or WinRar.&lt;br /&gt;
&lt;br /&gt;
As of version 0.2.8.3 and the test versions for that, you can play back a recording simply by doubleclicking on it.&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=Customizing_the_game&amp;diff=18551</id>
		<title>Customizing the game</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=Customizing_the_game&amp;diff=18551"/>
		<updated>2007-06-06T09:04:20Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Often people ask how to install a moviepack, how you make your cycle color different from your tail&#039;s, etc. Read on if you want to know how.&lt;br /&gt;
&lt;br /&gt;
== Moviepacks ==&lt;br /&gt;
===  Installing a Moviepack  ===&lt;br /&gt;
&lt;br /&gt;
[[Moviepacks]] are packages that completely change the look of the game. the floor, the walls, the cycles, everything. Nowadays, you can download many from different places around the net; for pointers, consult the [[Moviepacks list]]. They usually come in a ZIP file containing a &#039;&#039;moviepack&#039;&#039; folder. This folder goes into your armagetron advanced installation or user configuration directory:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Default armagetron advanced installation folder&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows&#039;&#039;&#039;: C:\Program Files\Armagetron Advanced\&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unix/Linux&#039;&#039;&#039;: /usr/local/share/games/armagetronad/ or /usr/share/games/armagetronad/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mac OS X&#039;&#039;&#039;: None. The game is self contained and may be installed anywhere.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Default armagetron advanced configuration folder. Note that you have to enable viewing hidden files to see some directories. &#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows 2000/XP&#039;&#039;&#039;: C:\Documents and Settings\[Username]\Application Data\Armagetron&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows Vista&#039;&#039;&#039;: C:\Users\[Username]\AppData\Roaming\Armagetron&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unix/Linux&#039;&#039;&#039;: ~/.armagetronad&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mac OS X&#039;&#039;&#039;: ~/Library/Application Support/Armagetron Advanced&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO: put folder locations in a single wiki entry and validate&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The armagetron installation and configuration paths should be somewhere else on the wiki, too&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===  Problems  ===&lt;br /&gt;
&lt;br /&gt;
sometimes you get errors after installing a moviepack, such as&lt;br /&gt;
[[Image:moviepack_err.gif]]&lt;br /&gt;
&lt;br /&gt;
this means that the moviepack you installed is not complete, i.e. Armagetron Advanced looks for files that are not present in the moviepack. The easiest way around this is to first install the [http://armagetron.sourceforge.net/old/addons.html original moviepack (get the ZIP)] and install the moviepack you actually want &#039;&#039;on top of it&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In Unix based Operating Systems, where file case is important, sometimes a texture doesn&#039;t display even though it appears to be installed correctly. to correct this, manually change the case of the file to suit. In particular, upper case extensions can cause problems. ie, change filename.JPG to filename.jpg and it will probably be OK. You should also inform the author of the moviepack of the problem so he can fix it.&lt;br /&gt;
&lt;br /&gt;
== Installing a new model ==&lt;br /&gt;
In your Armagetron Advanced moviepack directory (see above) locate bike.png and cycle.ase and replace with the new ones.&lt;br /&gt;
&lt;br /&gt;
== Customizing default textures ==&lt;br /&gt;
===  Installing a different default texture ===&lt;br /&gt;
&lt;br /&gt;
ArmagetronAd allows to change textures of the floor, the walls, the cycles and the sky.&lt;br /&gt;
All textures are contained in the &amp;quot;textures&amp;quot; folder. Textures are images displayed during the game.&lt;br /&gt;
For exmaple the image on the outer wall can be changed by exchanging the &#039;&#039;&#039;rim_wall.png&#039;&#039;&#039; file.&lt;br /&gt;
Instead of replacing any texture files, you should rename the original file and then copy the new one into the folder.&lt;br /&gt;
Now you have a backup available if you want to restore the original.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Where to find those textures ?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows&#039;&#039;&#039;: C:\Program Files\Armagetron Advanced\&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unix/Linux&#039;&#039;&#039;: /usr/local/share/games/armagetronad/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mac OS X&#039;&#039;&#039;: ~/Library/Application Support/Armagetron Advanced/textures&lt;br /&gt;
&lt;br /&gt;
You must create the textures folder.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;TODO: put folder locations in a single wiki entry and validate&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Which file is what ?&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rim_wall.png&#039;&#039;&#039; = texture for the outer walls&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sky.png&#039;&#039;&#039; = texture for the lower sky (the upper sky uses the floor*.png)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;floor.png&#039;&#039;&#039; = single textured floor (and upper sky)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;floor_a.png, floor_b.png&#039;&#039;&#039; = dual textured floor&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bike.png&#039;&#039;&#039; = cycle&#039;s texture&lt;br /&gt;
&lt;br /&gt;
=== Creating a new texture ===&lt;br /&gt;
&lt;br /&gt;
Creating a texture is as simple as making an image and saving it as described above. For the best results, follow these guidelines:&lt;br /&gt;
&lt;br /&gt;
==== Power-of-two sizes ====&lt;br /&gt;
&lt;br /&gt;
The size of OpenGL&#039;s standard 2D textures must be a power of two. If the size of an image isn&#039;t, the game (or more accurately, GLU) will scale it to the nearest power of two before sending it to OpenGL, resulting in lower quality. Powers of two include:&lt;br /&gt;
&lt;br /&gt;
* 2^0 = 1&lt;br /&gt;
* 2^1 = 2&lt;br /&gt;
* 2^2 = 4&lt;br /&gt;
* 2^3 = 8&lt;br /&gt;
* 2^4 = 16&lt;br /&gt;
* 2^5 = 32&lt;br /&gt;
* 2^6 = 64&lt;br /&gt;
* 2^7 = 128&lt;br /&gt;
* 2^8 = 256&lt;br /&gt;
* 2^9 = 512&lt;br /&gt;
* 2^10 = 1024&lt;br /&gt;
* 2^11 = 2048&lt;br /&gt;
&lt;br /&gt;
Note that a texture need not be square; 512x64 textures are fine.&lt;br /&gt;
&lt;br /&gt;
==== Use transparency wisely ====&lt;br /&gt;
&lt;br /&gt;
There are several things to keep in mind when using transparent textures:&lt;br /&gt;
&lt;br /&gt;
* Because of to the way OpenGL prevents background objects from drawing over foreground objects, it might not be possible to see everything through a transparent texture.&lt;br /&gt;
* Colors will bleed from neighboring texels (texture pixels) if both color and transparency are different. An exception to this is the cycle texture, which is preprocessed by the game and has no transparency in the end.&lt;br /&gt;
&lt;br /&gt;
==Cycle Colors==&lt;br /&gt;
&lt;br /&gt;
===  The basics of cycle color  ===&lt;br /&gt;
&lt;br /&gt;
First you have to understand how computers understand colors. In armagetron, colors are saved with three values: the &#039;&#039;red&#039;&#039;, &#039;&#039;green&#039;&#039; and &#039;&#039;blue&#039;&#039; (R, G and B) parts.&lt;br /&gt;
Each of these three so-called RGB values can hold a number from 0 to 15 - 0 means none and 15 means as much as&lt;br /&gt;
possible. A few examples:&lt;br /&gt;
&lt;br /&gt;
 r 15, g 0, b 0  :  strong red&lt;br /&gt;
 r 0, g 15, b 0  :  strong green&lt;br /&gt;
 r 0, g 0, b 15  :  strong blue&lt;br /&gt;
 r 8, g 0, b 0  :  darker red&lt;br /&gt;
&lt;br /&gt;
you can also combine the colours (follows the same rules as when you combine red,green and blue light):&lt;br /&gt;
&lt;br /&gt;
 r 15 g 0 b 15 : strong pink&lt;br /&gt;
 r 0 g 15 b 10 : strong cyan&lt;br /&gt;
 r 15 g 15 b 0 : yellow&lt;br /&gt;
 r 15 g 8 b 0  : orange (less green =&amp;gt; more red than yellow)&lt;br /&gt;
&lt;br /&gt;
you get the gist. So how do you set these colours ? you can set them via the player setup menu, but if you want to have&lt;br /&gt;
different cycle and trail colours, you have to use the [[Console]]. The commands are&lt;br /&gt;
&lt;br /&gt;
 color_r_1 X   # set red component of the 1st player&#039;s cycle to X&lt;br /&gt;
 color_g_1 Y   # set green component of the 1st player&#039;s cycle to Y&lt;br /&gt;
 color_b_1 Z   # set blue component of the 1st player&#039;s cycle to Z&lt;br /&gt;
&lt;br /&gt;
The best way to learn how to write the colour you want is to experiment a bit.&lt;br /&gt;
&lt;br /&gt;
===  Different Cycle and trail colors  ===&lt;br /&gt;
&lt;br /&gt;
Remember me saying that the colors were saved as numbers between 0 and 15 ? Well, that was not entirely true. If you set&lt;br /&gt;
a color to a value over 15, the trail part is set to 15 and the cycle is (usually) set to the actual value minus 16.&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 r 16 g 16 b 0   : yellow tail (r 15 g 15) and black bike (16 - 16 = 0)&lt;br /&gt;
&lt;br /&gt;
higher numbers can give you multi-colored trails. Again, experiment.&lt;br /&gt;
&lt;br /&gt;
For an exact explanation, see [[elaborate color explanation]].&lt;br /&gt;
&lt;br /&gt;
Developer&#039;s note: this behavior of the game is technically a bug and is officially unsupported. It is tolerated, though, because it&#039;s fun :) But some servers, especially team play servers where your color is no mere decoration, will clamp your color settings to 15 and this trick does not work.&lt;br /&gt;
&lt;br /&gt;
==Chat Colors==&lt;br /&gt;
&lt;br /&gt;
If you want to use different colors when chatting you have to use a different syntax for colors. For example if you want to say a text in red you would enter (at the chat prompt):&lt;br /&gt;
 0xff0000 this appears in red&lt;br /&gt;
note that this is &#039;&#039;&#039;all&#039;&#039;&#039; zeroes (not o&#039;s), so zero-xff-zero-zero-zero-zero. This is important since it won&#039;t work otherwise.&lt;br /&gt;
&lt;br /&gt;
The first two digits after the &amp;quot;0x&amp;quot; indicate the red part of the color, the two digits after that the green one and the two last ones the blue part. They signify numbers from 00 to ff (0 to 255) written in hex (base 16); people who ever used color &lt;br /&gt;
codes in HTML or CSS will be familiar with this. Only lowercase letters are accepted in the code.&lt;br /&gt;
&lt;br /&gt;
A few different two- letter combos are as follows:&lt;br /&gt;
&lt;br /&gt;
* ff: works like 15 in the bike color&lt;br /&gt;
* ee: like 14&lt;br /&gt;
* dd: 13&lt;br /&gt;
* cc: 12&lt;br /&gt;
* bb: 11&lt;br /&gt;
* aa: 10&lt;br /&gt;
* 99: 9&lt;br /&gt;
* 88: 8&lt;br /&gt;
* ...&lt;br /&gt;
* 00: 0&lt;br /&gt;
&lt;br /&gt;
Note that you can use different hex numbers like in 0xab1234 which lets you chose your color more exactly, but in most cases you won&#039;t need this. If you are so paranoid that you think you need exactly &#039;&#039;your&#039;&#039; shade of pink feel free to read the article [[Bases]] on this.&lt;br /&gt;
&lt;br /&gt;
Other combos to get you started are:&lt;br /&gt;
 0x00ff00 this is green&lt;br /&gt;
 0x0000ff this is blue&lt;br /&gt;
 0xff8800 this is orange&lt;br /&gt;
 0xffffff this is white&lt;br /&gt;
 0xffff88 this appears in the normal chat yellow (no change)&lt;br /&gt;
&lt;br /&gt;
Developer&#039;s note: these color codes were not intended for use by the players; the choice of 0x as intro string was a bit unfortunate. Some servers will filter away your codes, so do your testing in a local game. Since it was not intended for use, no thought was given on usability, and for example upper case codes are not accepted. So use 0xff0000 for red, not 0xFF0000. And don&#039;t be angry about future unannounced changes to the format.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client Features]]&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
	<entry>
		<id>http://wiki.armagetronad.org/index.php?title=File:Test.png&amp;diff=18322</id>
		<title>File:Test.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.armagetronad.org/index.php?title=File:Test.png&amp;diff=18322"/>
		<updated>2007-05-25T18:53:09Z</updated>

		<summary type="html">&lt;p&gt;Tank Program: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tank Program</name></author>
	</entry>
</feed>