<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.darwinbots.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Numsgil</id>
		<title>WikiManual - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.darwinbots.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Numsgil"/>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/w/Special:Contributions/Numsgil"/>
		<updated>2026-06-17T08:02:30Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5795</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5795"/>
				<updated>2017-05-06T10:06:40Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Where's the DB3 EXE? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# that's at least 2013.  Newer versions should work fine, but I haven't tested it.  (Also, this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.&lt;br /&gt;
&lt;br /&gt;
You will also need to install Python, at least version 3.6.  You can [https://www.python.org/downloads/windows/ download Python here].&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile/run the project, you need:&lt;br /&gt;
&lt;br /&gt;
* DirectX installed.  Needs to be the latest version installed.  Try running the [http://www.microsoft.com/en-us/download/confirmation.aspx?id=35 web installer] to see if you have the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  I like [http://www.syntevo.com/smartsvn/index.html SmartSVN] myself.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I usually put it on the root level myself:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  &lt;br /&gt;
&lt;br /&gt;
Rebuilding everything locally can help with debugging across module boundaries, though.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  None of the binaries are checked in to the repository.  The binaries in the Bin folder are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
You'll need to build all the different modules.  There isn't a single solution file to build everything (on purpose, since lots of smaller solution files are more manageable), but in the Scripts folder there's a batch file called build.py that will build everything in the correct order.  Run that file.  If you have a different version of Visual Studio than 2013 you'll need to run it from the command line with the --version flag set.  eg: For Visual Studio 2017 the version is 15 (confusingly), so you'd set --version=15 and it should work.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
Under Modules\Darwinbots3 there is a Darwinbots3 solution.  At the moment the Darwinbots3 binary is pretty empty, but there is a Bot.Testbed application that is starting to come together.&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5794</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5794"/>
				<updated>2017-05-06T10:05:42Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* You have the code, now what? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# that's at least 2013.  Newer versions should work fine, but I haven't tested it.  (Also, this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.&lt;br /&gt;
&lt;br /&gt;
You will also need to install Python, at least version 3.6.  You can [https://www.python.org/downloads/windows/ download Python here].&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile/run the project, you need:&lt;br /&gt;
&lt;br /&gt;
* DirectX installed.  Needs to be the latest version installed.  Try running the [http://www.microsoft.com/en-us/download/confirmation.aspx?id=35 web installer] to see if you have the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  I like [http://www.syntevo.com/smartsvn/index.html SmartSVN] myself.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I usually put it on the root level myself:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  &lt;br /&gt;
&lt;br /&gt;
Rebuilding everything locally can help with debugging across module boundaries, though.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  None of the binaries are checked in to the repository.  The binaries in the Bin folder are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
You'll need to build all the different modules.  There isn't a single solution file to build everything (on purpose, since lots of smaller solution files are more manageable), but in the Scripts folder there's a batch file called build.py that will build everything in the correct order.  Run that file.  If you have a different version of Visual Studio than 2013 you'll need to run it from the command line with the --version flag set.  eg: For Visual Studio 2017 the version is 15 (confusingly), so you'd set --version=15 and it should work.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5793</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5793"/>
				<updated>2017-05-06T09:59:15Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Junk directories and bin folders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# that's at least 2013.  Newer versions should work fine, but I haven't tested it.  (Also, this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.&lt;br /&gt;
&lt;br /&gt;
You will also need to install Python, at least version 3.6.  You can [https://www.python.org/downloads/windows/ download Python here].&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile/run the project, you need:&lt;br /&gt;
&lt;br /&gt;
* DirectX installed.  Needs to be the latest version installed.  Try running the [http://www.microsoft.com/en-us/download/confirmation.aspx?id=35 web installer] to see if you have the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  I like [http://www.syntevo.com/smartsvn/index.html SmartSVN] myself.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I usually put it on the root level myself:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  &lt;br /&gt;
&lt;br /&gt;
Rebuilding everything locally can help with debugging across module boundaries, though.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  None of the binaries are checked in to the repository.  The binaries in the Bin folder are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have inter-dependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alternatively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5792</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5792"/>
				<updated>2017-05-06T09:57:53Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* How you should set up your SVN projects and local directories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# that's at least 2013.  Newer versions should work fine, but I haven't tested it.  (Also, this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.&lt;br /&gt;
&lt;br /&gt;
You will also need to install Python, at least version 3.6.  You can [https://www.python.org/downloads/windows/ download Python here].&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile/run the project, you need:&lt;br /&gt;
&lt;br /&gt;
* DirectX installed.  Needs to be the latest version installed.  Try running the [http://www.microsoft.com/en-us/download/confirmation.aspx?id=35 web installer] to see if you have the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  I like [http://www.syntevo.com/smartsvn/index.html SmartSVN] myself.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I usually put it on the root level myself:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  &lt;br /&gt;
&lt;br /&gt;
Rebuilding everything locally can help with debugging across module boundaries, though.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of sync with each other.&lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have inter-dependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alternatively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5791</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5791"/>
				<updated>2017-05-06T09:56:38Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Getting the compiler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# that's at least 2013.  Newer versions should work fine, but I haven't tested it.  (Also, this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.&lt;br /&gt;
&lt;br /&gt;
You will also need to install Python, at least version 3.6.  You can [https://www.python.org/downloads/windows/ download Python here].&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile/run the project, you need:&lt;br /&gt;
&lt;br /&gt;
* DirectX installed.  Needs to be the latest version installed.  Try running the [http://www.microsoft.com/en-us/download/confirmation.aspx?id=35 web installer] to see if you have the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  I like [http://www.syntevo.com/smartsvn/index.html SmartSVN] myself.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I would suggest something like this just for sanity, though:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside a Darwinbots3 folder, but life will probably be easier if it is.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  &lt;br /&gt;
&lt;br /&gt;
Rebuilding everything locally can help with debugging across module boundaries, though.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of sync with each other.&lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have inter-dependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alternatively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Screen_shots&amp;diff=5723</id>
		<title>Screen shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Screen_shots&amp;diff=5723"/>
				<updated>2015-03-06T17:23:16Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
DarwinBots 2.1 screenshots.  The program hasn't really changed graphically in several years ;)  Feel free to add interesting screenshots if you have any of newer versions.&lt;br /&gt;
&lt;br /&gt;
If it looks interesting, [http://wiki.darwinbots.com/w/Main_FTP#Main_Install Download it and check it out!]&lt;br /&gt;
&lt;br /&gt;
== Typical Simulation ==&lt;br /&gt;
[[Image:Fieldcirc.gif|left]] A typical simulation... those yellow guys are Turneria Preservans (called this way because John Turner programmed them and they are kinda ecologist robots) eating the vegetable Alga Minimalis, in green.&lt;br /&gt;
&lt;br /&gt;
== Zoomed in ==&lt;br /&gt;
[[Image:Bigzoom.gif|right]] A zoomed scene from the same simulation. Robots suck energy from each other by shooting &amp;quot;attack particles&amp;quot; to the victims, which, if reached, are forced to shoot them back the white energy particles. That's why you see such a mess of coloured dots. There's a banquet going on there!&lt;br /&gt;
&lt;br /&gt;
Look at the two yellow bots tied at the centre/bottom of the screen. These are a Turneria and his newborn child. In a few seconds the tie will break and they'll go their own way (notice also that the drawings inside them are identical: it means that no mutations occurred during the duplication process).&lt;br /&gt;
&lt;br /&gt;
== Graphs ==&lt;br /&gt;
[[Image:Graphs.jpg|left]]  There are many different graphs you can display to follow the evolution of the simulation and its inhabitants. Just as an example, these are population/cycles, Average DNA mutations/cycles and average sons/ cycles. Obviously divided by species.&lt;br /&gt;
&lt;br /&gt;
== Other Tools ==&lt;br /&gt;
[[Image:Console.jpg|right]] Other tools to play with. The single robot's data (species name, energy, age, offspring, mutations number, and so on), his complete DNA (a program written in a simple interpreted language), a console to debug it easily -just in case you want to program your own. You can even look at the robot's genes activation in real time in a winamp style :)&lt;br /&gt;
&lt;br /&gt;
== Options Window ==&lt;br /&gt;
[[Image:Simopts.jpg|left]] And this is the simulation set-up window. As you can see, there are many options to tinker with.&lt;br /&gt;
&lt;br /&gt;
Just to mention some of those you can't see: under the General tab, field size and geometry, population control; under Physics, friction, moving and swimming factors, brownian motion; under Costs, the energy costs/benefits ratios; under Mutation rates, a general mutation multiplier; and more: autosaving parameters, database recording, internet organisms sharing.&lt;br /&gt;
&lt;br /&gt;
== Microscope ==&lt;br /&gt;
[[Image:Microscope.gif|right]] Ok, this one has been slightly modified with Paint Shop Pro. Just an edge contour, anyway. It looked so &amp;quot;microscope&amp;quot; this way! But the worms are true multicellular organisms, swimming. They develop from a single egg cell, dividing many times to form the complete body, and tieing all the child cells in a precise shape. Then they go around swimming, eating and reproducing like any good animal should do.&lt;br /&gt;
&lt;br /&gt;
It took me a week to program them!&lt;br /&gt;
&lt;br /&gt;
== Excel ==&lt;br /&gt;
[[Image:Excel.jpg|left]] This is what you can get by reloading the database files generated by DarwinBots into Excel or in a database software. For example, this scatter graph shows each robot with a point P=(x,y)=(birth cycle, accumulated mutations). For each robot, birth cycle, mutations, dna length and so on have been recorded.&lt;br /&gt;
&lt;br /&gt;
== Excel Graphed ==&lt;br /&gt;
[[Image:Filans.jpg|right]] And these are the same data passed through a simple program which plots the graph using colour to render the points density.&lt;br /&gt;
&lt;br /&gt;
This means that yellow stands for a higher number of robots falling over the same graph's coordinate.&lt;br /&gt;
Notice the little flames detaching upwards from the main strain, representing branches in evolution, suddenly abandoned.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=5722</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=5722"/>
				<updated>2015-03-03T20:14:54Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* image:bookgreen.jpg News */ Ditching old news items&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &amp;lt;!-- disab&lt;br /&gt;
1000&lt;br /&gt;
les Table of Contents --&amp;gt;&lt;br /&gt;
&amp;lt;!---a main page with style.---&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;!--[[Image:Dblogo1.JPG]][[Image:KnowledgeBook.jpg]]--&amp;gt; [[Image:WikiPage_Banner.png]] &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;Darwinbots is an artificial life simulation.  Small critters called &amp;quot;bots&amp;quot; fight each other for food in a physically simulated 2D universe.  Successful bots will live to reproduce and, over time, evolve.&amp;lt;/center&amp;gt;&lt;br /&gt;
'''&amp;lt;center&amp;gt;Notice: This wiki is locked to edits from users due to spam, sorry for the inconvenience.&amp;lt;/center&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #80e080; padding: .5em .5em; margin: 1em; background-color: #f0fff0;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookgreen.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;News&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ''' October 29, 2014: New installer for 2.48.25 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' August 26, 2014 Version 2.48 released. '''&lt;br /&gt;
* ''' July 6, 2014 Version 2.47.03 released. '''&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;New Users Portal&amp;lt;/font&amp;gt;==&lt;br /&gt;
*'''[[Main FTP|Downloads and Installation Instructions]]'''&lt;br /&gt;
*[[Introduction]] - New to Darwinbots? &lt;br /&gt;
*[[Screen shots]]&lt;br /&gt;
*[http://forum.darwinbots.com/ The Forum] - Chat sometime.&lt;br /&gt;
*[[Your First Simulations]] - Getting to know the program&lt;br /&gt;
*[[Robot Tutorial]] - Write your own bots&lt;br /&gt;
*[[Sysvars]] - Current system variable information.&lt;br /&gt;
*[[Operators]] - Vital parts of robot DNA&lt;br /&gt;
*[[IRC]] - Connecting to our IRC channel.&lt;br /&gt;
*[[Troubleshooting]] - [[FAQ|Frequently Asked Questions]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Reference Manual&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
*[[Robot DNA]] - Not as complicated as it at first seems.&lt;br /&gt;
*[[Concepts]] - General concepts&lt;br /&gt;
*[[Simulation Options]] - What do all these sliders mean?&lt;br /&gt;
*[[League | Leagues]] - Learn about the leagues that exist.&lt;br /&gt;
*[[Evolution Sims]] - The pinnacle of any ALife program.&lt;br /&gt;
*[[Technical Details]] - Know *exactly* how something works.&lt;br /&gt;
*[[Version History]] - The evolution of Darwinbots itself.&lt;br /&gt;
*[[Readme]] Most current read me file&lt;br /&gt;
*[[Safemode]] Error Handling / Error Reports&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;==&lt;br /&gt;
Central link pages that don't directly reflect what is currently in the DB program&lt;br /&gt;
&lt;br /&gt;
*[[Source Code]] - Where to get it, different versions, and how you can help.&lt;br /&gt;
&amp;lt;!--*[[DeBugging]] - Post up bugs and reference materials here.--&amp;gt;&lt;br /&gt;
*[[Ideas]] - Interactive work on different ideas.  Community projects, that sort of thing.&lt;br /&gt;
&amp;lt;!--*[[Whimsical]] - Stories and etcetera. --&amp;gt;&lt;br /&gt;
&amp;lt;!--*[[RoundTable]] - DB wikipedians unite in this discussion area. --&amp;gt;&lt;br /&gt;
*[[Other Resources]] - Links to resources you might find useful.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBottom&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wiki Help&amp;lt;/font&amp;gt; ==&lt;br /&gt;
*Please see [http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide User's Guide] for Wiki usage&amp;lt;br&amp;gt;&lt;br /&gt;
*Help with [http://en.wikipedia.org/w/wiki.phtml?title=Wikipedia:How_to_edit_a_page editing pages]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Robot_DNA&amp;diff=5614</id>
		<title>Robot DNA</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Robot_DNA&amp;diff=5614"/>
				<updated>2014-09-12T03:43:36Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Darwinbots 2==&lt;br /&gt;
===How the DNA works===&lt;br /&gt;
* [[Genes]]&lt;br /&gt;
* [[Execution Flag]]&lt;br /&gt;
* The [[Stack]] &lt;br /&gt;
* [[Custom labels]] (or variables if you prefer)&lt;br /&gt;
* [[Order of actions]]&lt;br /&gt;
&lt;br /&gt;
=== DNA commands===&lt;br /&gt;
An overview of each and every DNA [[command]], from sysvars to logical operators.&lt;br /&gt;
&lt;br /&gt;
* [[Operators | 2.4 Operators]]&lt;br /&gt;
&lt;br /&gt;
* [[Pre2.4]]&lt;br /&gt;
&lt;br /&gt;
==Darwinbots 3==&lt;br /&gt;
* [[Differences from DB2]]&lt;br /&gt;
&lt;br /&gt;
===The Different Parts===&lt;br /&gt;
* [[Base Pair]]s&lt;br /&gt;
* [[Codule]]s&lt;br /&gt;
* [[Chromosome]]s&lt;br /&gt;
* [[Meta Tag]]s&lt;br /&gt;
* [[DNA]]&lt;br /&gt;
&lt;br /&gt;
===How The DNA Works===&lt;br /&gt;
* [[DNA Execution]]&lt;br /&gt;
* [[Boolean Stack]]&lt;br /&gt;
* [[Integer Stack]]&lt;br /&gt;
* [[Custom Variable]]s&lt;br /&gt;
* [[System Variable]]s&lt;br /&gt;
* [[Mutation]]s&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5540</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5540"/>
				<updated>2014-06-28T23:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: 2014 update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2013 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile/run the project, you need:&lt;br /&gt;
&lt;br /&gt;
* DirectX installed.  Needs to be the latest version installed.  Try running the [http://www.microsoft.com/en-us/download/confirmation.aspx?id=35 web installer] to see if you have the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  I like [http://www.syntevo.com/smartsvn/index.html SmartSVN] myself.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I would suggest something like this just for sanity, though:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside a Darwinbots3 folder, but life will probably be easier if it is.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  &lt;br /&gt;
&lt;br /&gt;
Rebuilding everything locally can help with debugging across module boundaries, though.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of sync with each other.&lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have inter-dependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alternatively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=5324</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=5324"/>
				<updated>2013-08-05T07:46:42Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: Less bleh intro sentence.  Did you know whatever you write here is going to get copied by other sites?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &amp;lt;!-- disab&lt;br /&gt;
1000&lt;br /&gt;
les Table of Contents --&amp;gt;&lt;br /&gt;
&amp;lt;!---a main page with style.---&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;!--[[Image:Dblogo1.JPG]][[Image:KnowledgeBook.jpg]]--&amp;gt; [[Image:WikiPage_Banner.png]] &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;Darwinbots is an artificial life simulation.  Small critters called &amp;quot;bots&amp;quot; fight each other for food in a physically simulated 2D universe.  Successful bots will live to reproduce and, over time, evolve.&amp;lt;/center&amp;gt;&lt;br /&gt;
'''&amp;lt;center&amp;gt;Notice: This wiki is locked to edits from users due to spam, sorry for the inconvenience.&amp;lt;/center&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #80e080; padding: .5em .5em; margin: 1em; background-color: #f0fff0;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookgreen.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;News&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ''' June 11, 2013:   Version 2.45.03 released. New installer for 2.45.03 released. Tools for version 2.45.03 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' August 21, 2012:   Version 2.45.02 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' April 29, 2011:   New installer for 2.45.01 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' August 31, 2010:   Version 2.45.01 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' August 10, 2010:   Version 2.44.06 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' July 22, 2010: Alternative internet mode working well. See [[Internet Mode Fix]].'''&lt;br /&gt;
* ''' July 22, 2010: IRC server up and running, come join us. See [[IRC]].'''&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;New Users Portal&amp;lt;/font&amp;gt;==&lt;br /&gt;
*'''[[Main FTP|Downloads and Installation Instructions]]'''&lt;br /&gt;
*[[Introduction]] - New to Darwinbots? &lt;br /&gt;
*[[Screen shots]]&lt;br /&gt;
*[http://forum.darwinbots.com/ The Forum] - Chat sometime.&lt;br /&gt;
*[[Your First Simulations]] - Getting to know the program&lt;br /&gt;
*[[Robot Tutorial]] - Write your own bots&lt;br /&gt;
*[[Sysvars]] - Current system variable information.&lt;br /&gt;
*[[IRC]] - Connecting to our IRC channel.&lt;br /&gt;
*[[Troubleshooting]] - [[FAQ|Frequently Asked Questions]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Reference Manual&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
*[[Robot DNA]] - Not as complicated as it at first seems.&lt;br /&gt;
*[[Concepts]] - General concepts&lt;br /&gt;
*[[Simulation Options]] - What do all these sliders mean?&lt;br /&gt;
*[[League | Leagues]] - Learn about the leagues that exist.&lt;br /&gt;
*[[Evolution Sims]] - The pinnacle of any ALife program.&lt;br /&gt;
*[[Technical Details]] - Know *exactly* how something works.&lt;br /&gt;
*[[Version History]] - The evolution of Darwinbots itself.&lt;br /&gt;
*[[Readme]] Most current read me file&lt;br /&gt;
*[[Safemode]] Error Handling / Error Reports&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;==&lt;br /&gt;
Central link pages that don't directly reflect what is currently in the DB program&lt;br /&gt;
&lt;br /&gt;
*[[Source Code]] - Where to get it, different versions, and how you can help.&lt;br /&gt;
&amp;lt;!--*[[DeBugging]] - Post up bugs and reference materials here.--&amp;gt;&lt;br /&gt;
*[[Ideas]] - Interactive work on different ideas.  Community projects, that sort of thing.&lt;br /&gt;
&amp;lt;!--*[[Whimsical]] - Stories and etcetera. --&amp;gt;&lt;br /&gt;
&amp;lt;!--*[[RoundTable]] - DB wikipedians unite in this discussion area. --&amp;gt;&lt;br /&gt;
*[[Other Resources]] - Links to resources you might find useful.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBottom&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wiki Help&amp;lt;/font&amp;gt; ==&lt;br /&gt;
*Please see [http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide User's Guide] for Wiki usage&amp;lt;br&amp;gt;&lt;br /&gt;
*Help with [http://en.wikipedia.org/w/wiki.phtml?title=Wikipedia:How_to_edit_a_page editing pages]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=User:Numsgil&amp;diff=5257</id>
		<title>User:Numsgil</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=User:Numsgil&amp;diff=5257"/>
				<updated>2013-02-02T20:10:12Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5227</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5227"/>
				<updated>2011-12-28T18:50:46Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Downloading the dependencies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Check the following link for a real-time discussion of features and progress: [[IRC]]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2010 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/download/en/details.aspx?id=39 XNA 3.1] - A game library released by Microsoft which is used for graphics.&lt;br /&gt;
&lt;br /&gt;
To distribute the project (which you probably don't care about), you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* [http://madebits.com/netz/index.php NETz] - Allows packing of the exe to make it smaller.&lt;br /&gt;
* (TODO: Double check what needs to be installed .NET wise and XNA wise (redistributables)).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I would suggest something like this just for sanity, though:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but life will probably be easier if it is.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of date. &lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alteratively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://forum.darwinbots.com/index.php/board,62.0.html in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5226</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5226"/>
				<updated>2011-12-28T00:32:12Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Check the following link for a real-time discussion of features and progress: [[IRC]]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2010 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/download/en/details.aspx?id=15300 XNA 3.0] - A game library released by Microsoft which is used for graphics.&lt;br /&gt;
&lt;br /&gt;
To distribute the project (which you probably don't care about), you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* [http://madebits.com/netz/index.php NETz] - Allows packing of the exe to make it smaller.&lt;br /&gt;
* (TODO: Double check what needs to be installed .NET wise and XNA wise (redistributables)).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I would suggest something like this just for sanity, though:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but life will probably be easier if it is.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of date. &lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alteratively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://forum.darwinbots.com/index.php/board,62.0.html in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5225</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5225"/>
				<updated>2011-12-22T02:08:37Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Check the following link for a real-time discussion of features and progress: [[IRC]]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2010 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/download/en/details.aspx?id=23714 XNA 4.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project (which you probably don't care about), you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* [http://madebits.com/netz/index.php NETz] - Allows packing of the exe to make it smaller.&lt;br /&gt;
* (TODO: Double check what needs to be installed .NET wise and XNA wise (redistributables)).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
You can dump the source whereever you want.  Everything is set up with relative paths.  I would suggest something like this just for sanity, though:&lt;br /&gt;
&lt;br /&gt;
C:\&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but life will probably be easier if it is.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  All the modules spit out binaries in to the bin/Release directory, and these are checked in, so there's no need to rebuild everything very often (assuming source and binary and kept in sync, which will usually be true).  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of date. &lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alteratively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
=== Where's the DB3 EXE? ===&lt;br /&gt;
There isn't one yet.  The idea is that it's getting built from the ground up, one module at a time.  So there's no central project yet that actually uses all the modules at once.  Instead each module is tested and developed individually based on some simple use cases.  At the end, there'll be a nice product suite that should combine fairly organically into a final EXE.  With any luck, anyway :P&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
Look at the code, and follow by example.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large temporary file you accidentally submitted it will take up repository space for ever and ever, even if you remove it from the repository later.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
If you want to submit code without tests, it'll probably end up in the trashcan, honestly, when time comes for me to figure out how it's supposed to work (and why it's currently not working).&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://forum.darwinbots.com/index.php/board,62.0.html in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5209</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=5209"/>
				<updated>2011-10-20T00:25:32Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Check the following link for a real-time discussion of features and progress: [[IRC]]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project (which you probably don't care about), you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* [http://madebits.com/netz/index.php NETz] - Allows packing of the exe to make it smaller.&lt;br /&gt;
* (TODO: Double check what needs to be installed .NET wise and XNA wise (redistributables)).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[http://svn.darwinbots.com/Darwinbots3/ http://svn.darwinbots.com/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://forum.darwinbots.com/index.php/board,62.0.html here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of date (if anyone can think of a better way to handle this sort of thing, I'm all ears).  &lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alteratively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://forum.darwinbots.com/index.php/board,62.0.html in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=5032</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=5032"/>
				<updated>2009-12-20T01:02:36Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &amp;lt;!-- disab&lt;br /&gt;
1000&lt;br /&gt;
les Table of Contents --&amp;gt;&lt;br /&gt;
&amp;lt;!---a main page with style.---&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;!--[[Image:Dblogo1.JPG]][[Image:KnowledgeBook.jpg]]--&amp;gt; [[Image:WikiPage_Banner.png]] &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;Darwinbots is an Artificial Life simulator that merges the gameplay of C-Robots type arena combat with adaptive asexual population dynamics.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #80e080; padding: .5em .5em; margin: 1em; background-color: #f0fff0;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookgreen.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;News&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ''' December 19, 2009:   Version 2.44.04 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' November 29, 2008:   Version 2.44.1 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;New Users Portal&amp;lt;/font&amp;gt;==&lt;br /&gt;
*'''[[Main FTP|Downloads and Installation Instructions]]'''&lt;br /&gt;
*[[Introduction]] - New to Darwinbots? &lt;br /&gt;
*[[Screen shots]]&lt;br /&gt;
*[http://forum.darwinbots.com The Forum] - Chat sometime.&lt;br /&gt;
*[[Your First Simulations]] - Getting to know the program&lt;br /&gt;
*[[Robot Tutorial]] - Write your own bots&lt;br /&gt;
*[[Sysvars]] - Current system variable information.&lt;br /&gt;
*[[Troubleshooting]] - [[FAQ|Frequently Asked Questions]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Reference Manual&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
*[[Robot DNA]] - Not as complicated as it at first seems.&lt;br /&gt;
*[[Concepts]] - General concepts&lt;br /&gt;
*[[Simulation Options]] - What do all these sliders mean?&lt;br /&gt;
*[[League | Leagues]] - Learn about the leagues that exist.&lt;br /&gt;
*[[Evolution Sims]] - The pinacle of any ALife program.&lt;br /&gt;
*[[Technical Details]] - Know *exactly* how something works.&lt;br /&gt;
*[[Version History]] - The evolution of Darwinbots itself.&lt;br /&gt;
&lt;br /&gt;
*[[Readme]] Most current read me file&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;==&lt;br /&gt;
Central link pages that don't directly reflect what is currently in the DB program&lt;br /&gt;
&lt;br /&gt;
*[[Source Code]] - Where to get it, different versions, and how you can help.&lt;br /&gt;
&amp;lt;!--*[[DeBugging]] - Post up bugs and reference materials here.--&amp;gt;&lt;br /&gt;
*[[Ideas]] - Interactive work on different ideas.  Community projects, that sort of thing.&lt;br /&gt;
&amp;lt;!--*[[Whimsical]] - Stories and etcetera. --&amp;gt;&lt;br /&gt;
&amp;lt;!--*[[RoundTable]] - DB wikipedians unite in this discussion area. --&amp;gt;&lt;br /&gt;
*[[Other Resources]] - Links to resources you might find useful.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBottom&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wiki Help&amp;lt;/font&amp;gt; ==&lt;br /&gt;
*Please see [http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide User's Guide] for Wiki usage&amp;lt;br&amp;gt;&lt;br /&gt;
*Help with [http://en.wikipedia.org/w/wiki.phtml?title=Wikipedia:How_to_edit_a_page editing pages]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=5031</id>
		<title>Main FTP</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=5031"/>
				<updated>2009-12-20T01:01:20Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Main Install''' ==&lt;br /&gt;
&lt;br /&gt;
Run the main install for [http://www.darwinbots.com/FTP/Darwin21.zip DarwinBots 2.1]  We are working on an installer for the latest  version below, but at the moment, this is the only version for which an installer exists.  It creates some directories and installs some runtimes and thus '''must be installed''' before you can use any of the newer versions below. See the [[Installation_Instructions|installation instructions]].  The version installed with this main install works, but it is ancient (several years old) so you will want to immediatly download one of the newer releases below.&lt;br /&gt;
&lt;br /&gt;
== Recent Releases ==&lt;br /&gt;
&lt;br /&gt;
To update to the latest release, simply copy the file(s) included in a new release into your install location (by default c:\Program File\DarwinbotsII\).  Again, '''the new file(s) MUST be placed into your install location'''.    Usually, new releases consist of only the DarwinBots executable.  If other files are included in a release, you should say 'yes' to all overwrites.  Then simply run the new executable instead of the executable that came with the main install. &lt;br /&gt;
&lt;br /&gt;
=== 2.43.1L ===&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.43.1L.zip 2.43.1L] is the current recommended, and latest stable version of DarwinBots. &lt;br /&gt;
&lt;br /&gt;
=== 2.44.04 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.44.04.exe Version 2.44.04] is the latest &amp;quot;in progress&amp;quot; version.  There might have be some bugs that 2.43.1L does not.  If you encounter a bug, try to reproduce what the problem is (does it crash after loading error.sim every time?).  Then go to the [http://forum.darwinbots.com forum] and file a bug report.&lt;br /&gt;
&lt;br /&gt;
==Installing==&lt;br /&gt;
&lt;br /&gt;
=== Installing DarwinBots under Linux ===&lt;br /&gt;
&lt;br /&gt;
DarwinBots can run under Linux using the wine Windows emulator, although the simulation speed may be slower and bugs and crashes may happen. Following these steps will usually make it work:&lt;br /&gt;
&lt;br /&gt;
#Install the Wine package.&lt;br /&gt;
#Get the libraries MSVBVM60.dll, scrrun.dll and wininet.dll from reliable sources. If DB crashes when you try to run it, you'll problably need a few more dlls.&lt;br /&gt;
#Place those files at the folder /(username)/.wine/drive_c/windows/system32. &lt;br /&gt;
#Open a terminal window and go to the system32 folder.&lt;br /&gt;
#Write &amp;quot;wine regsvr32 scrrun.dll&amp;quot;. This will register the dll in the Wine Windows registry.  If this doesn't work, try &amp;quot;regedit scrrun.dll&amp;quot;.&lt;br /&gt;
#Now, do &amp;quot;winecfg&amp;quot;, select &amp;quot;wininet&amp;quot; at Libraries and specify it to be run first as native.&lt;br /&gt;
#Get the DB installer, place the setup.exe file somewhere in the drive_c folder.&lt;br /&gt;
#Go to that folder and type wine setup.exe. This will install the old DB version and some needed files. Then you can drop the newer executables and run them with wine. If you aren't comfortable using the terminal, you can load a wine file explorer running &amp;quot;winefile&amp;quot;. You can also configure how wine emulates Windows for the DB executables with &amp;quot;winecfg&amp;quot;, although the Windows 2000 default setting seems to work well.&lt;br /&gt;
&lt;br /&gt;
If you are on a Gnome desktop, avoid using Gedit to edit the code of your robots, as it will enter incompatible line breaks.&lt;br /&gt;
&lt;br /&gt;
=== Step by Step Darwinbots Installation Instructions (Windows) ===&lt;br /&gt;
&lt;br /&gt;
# Go to [[Main_FTP | here]] and download Darwinbots 2.1.&lt;br /&gt;
# Unzip it, using a program like 7-zip or Windows XPs Extract All function (Rightclick, select Extract All, Press next until it starts unzipping, Select Show Extracted Files, Press Finish. A folder with the setup file in it should show)&lt;br /&gt;
# Run setup.&lt;br /&gt;
#* Press Yes.&lt;br /&gt;
#* Press Next twice.&lt;br /&gt;
#* Press install.&lt;br /&gt;
#* Press finish.&lt;br /&gt;
# Download the latest release. At the time of writing this is 2.43.&lt;br /&gt;
# Unzip it.&lt;br /&gt;
# Copy the exe file. Paste it in your Darwinbots Install directory (C:\Program Files\DarwinbotsII)&lt;br /&gt;
# To run Darwinbots, run the exe you pasted into your Darwinbots directory.&lt;br /&gt;
&lt;br /&gt;
=== Upgrading ===&lt;br /&gt;
&lt;br /&gt;
The Darwinbots community is quite active, and major releases are made public generally every month.  Each new version contains substantial improvements.  Don't cheat your Darwinbots experience!  Be sure to have the latest version installed.&lt;br /&gt;
&lt;br /&gt;
Upgrading Darwinbots is quite easy, as all you need is the new sysvars file and executable.  New patches are listed here in chronological order, so newer releases are generally listed last for a section.&lt;br /&gt;
&lt;br /&gt;
Newer releases are, obviously, of higher numbers.  Thus 2.36 comes after 2.35 but before 2.4.&lt;br /&gt;
&lt;br /&gt;
After downloading the zip of the new version, unzip it to your Darwinbots folder. (typically C:\Program Files\DarwinBotsII)  Yes, you must do this manually.  The developers are far too busy with real programming to figure out how to implement an autopatcher.&lt;br /&gt;
&lt;br /&gt;
When you unzip your new version of DarwinBots, &amp;quot;sysvars2.21.txt&amp;quot; will automatically overwrite the existing version if you have one. This is okay since the '''sysvars files are backward compatible'''.&lt;br /&gt;
&lt;br /&gt;
== Bots ==&lt;br /&gt;
Note: The robots that come with the main 2.1 install above will run in modern versions, but they are going to act a little stupid.  They may have a hard time even surviving.  '''Strongly consider downloading more modern bots from the [http://forum.darwinbots.com/index.php?showforum=13 bestiary].'''  [http://forum.darwinbots.com/index.php?act=ST&amp;amp;f=24&amp;amp;t=157&amp;amp;st=0#entry240895 Animal Minimalis] is a good start, and is used in the [[Robot Tutorial]]s.  Just copy the text into a plain old .txt file, and put the file into your robots directory.&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.darwinbots.com/FTP/DarwinTutorial1+2.zip Darwinbots bot writing tutorial by PY] is a little old but a very good primer to learning how the DNA works.  You can also check out the [[Robot Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== Regional settings ==&lt;br /&gt;
Darwinbots is pretty stupid and assumes that you're using the American decimal system, where numbers look like this: 123,456.789 (123 thousand...).  If you don't live in America, and you're used to numbers looking like this: 123.456,789, Darwinbots will run, but there will be a few random errors in the user interface.  To fix this, go to your Windows Control Panel-&amp;gt;Regional and Language Options-&amp;gt; and make sure the number blank says &amp;quot;123,456,789.00&amp;quot;.  If it doesn't, change your region to one that does (such as English(United States)).&lt;br /&gt;
&lt;br /&gt;
== Final Note ==&lt;br /&gt;
New versions almost always have bugs.  The first week or so after a new release is filled with the programmers releasing minor updates almost daily.  These updates are noted by the suffix numbers of the version.  Thus, 2.37.0 was the initial release of 2.37  2.37.4 is the 4th bug fix version released.&lt;br /&gt;
&lt;br /&gt;
We know it's a pain to download a new patch almost every day.  But it's only through community bug testing that the bugs can be isolated at all.&lt;br /&gt;
&lt;br /&gt;
Anything with the same first 3 digits (that is, all versions of 2.XX) have the same ''features'' and differ only in minor bug fixing.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Previous Versions]]&lt;br /&gt;
* [[Source code download]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
Return to [[Main Page]]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=4967</id>
		<title>Main FTP</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=4967"/>
				<updated>2009-12-10T05:11:11Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&amp;lt;!-- __NOTOC__ disables Table of Contents (short pages may not require it--&amp;gt;&lt;br /&gt;
== Main Install ==&lt;br /&gt;
&lt;br /&gt;
Run the main install for [http://www.darwinbots.com/FTP/Darwin21.zip DarwinBots 2.1]  We are working on an installer for the latest  version below, but at the moment, this is the only version for which an installer exists.  It creates some directories and installs some runtimes and thus '''must be installed''' before you can use any of the newer versions below. See the [[Installation_Instructions|installation instructions]].  The version installed with this main install works, but it is ancient (several years old) so you will want to immediatly download one of the newer releases below.&lt;br /&gt;
&lt;br /&gt;
== Recent Releases ==&lt;br /&gt;
&lt;br /&gt;
To update to the latest release, simply copy the file(s) included in a new release into your install location (by default c:\Program File\DarwinbotsII\).  Again, '''the new file(s) MUST be placed into your install location'''.    Usually, new releases consist of only the DarwinBots executable.  If other files are included in a release, you should say 'yes' to all overwrites.  Then simply run the new executable instead of the executable that came with the main install. &lt;br /&gt;
&lt;br /&gt;
=== 2.43.1L ===&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.43.1L.zip 2.43.1L] is the current recommended, and latest stable version of DarwinBots. &lt;br /&gt;
&lt;br /&gt;
=== 2.44.03 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.44.03.exe Version 2.44.03] is the latest &amp;quot;in progress&amp;quot; version.  There might have be some bugs that 2.43.1L does not.  If you encounter a bug, try to reproduce what the problem is (does it crash after loading error.sim every time?).  Then go to the [http://forum.darwinbots.com forum] and file a bug report.&lt;br /&gt;
&lt;br /&gt;
== Bots ==&lt;br /&gt;
Note: The robots that come with the main 2.1 install above will run in modern versions, but they are going to act a little stupid.  They may have a hard time even surviving.  '''Strongly consider downloading more modern bots from the [http://forum.darwinbots.com/index.php?showforum=13 bestiary].'''  [http://forum.darwinbots.com/index.php?act=ST&amp;amp;f=24&amp;amp;t=157&amp;amp;st=0#entry240895 Animal Minimalis] is a good start, and is used in the [[Robot Tutorial]]s.  Just copy the text into a plain old .txt file, and put the file into your robots directory.&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.darwinbots.com/FTP/DarwinTutorial1+2.zip Darwinbots bot writing tutorial by PY] is a little old but a very good primer to learning how the DNA works.  You can also check out the [[Robot Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Previous Versions]]&lt;br /&gt;
* [[Source code download]]&lt;br /&gt;
&lt;br /&gt;
== Vista and Windows 7 ==&lt;br /&gt;
If you are running Vista or Windows 7, you will need to '''run the installation as an Administrator'''.   Right-click on the Darwinbots install (or a shortcut to it) and choose &amp;quot;Run as Administrator&amp;quot;.  This can sometimes be a problem even if you have UAC disabled.&lt;br /&gt;
&lt;br /&gt;
== Windows 95 Trouble ==&lt;br /&gt;
There is a report that Darwinbots might cause problems if you are running Windows 95.  If you experience any such problems, please post them to the [http://forum.darwinbots.com forum].&lt;br /&gt;
&lt;br /&gt;
Return to [[Main Page]]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=4966</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=4966"/>
				<updated>2009-12-10T05:10:42Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* image:bookgreen.jpg &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;News&amp;lt;/font&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &amp;lt;!-- disab&lt;br /&gt;
1000&lt;br /&gt;
les Table of Contents --&amp;gt;&lt;br /&gt;
&amp;lt;!---a main page with style.---&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;!--[[Image:Dblogo1.JPG]][[Image:KnowledgeBook.jpg]]--&amp;gt; [[Image:MainpageBanner.jpg]] &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;Darwinbots is an Artificial Life simulator that merges the gameplay of C-Robots type arena combat with adaptive asexual population dynamics.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #80e080; padding: .5em .5em; margin: 1em; background-color: #f0fff0;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookgreen.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;News&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ''' November 29, 2009:   Version 2.44.03 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' November 29, 2008:   Version 2.44.1 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;New Users Portal&amp;lt;/font&amp;gt;==&lt;br /&gt;
*'''[[Main FTP|Downloads]]'''&lt;br /&gt;
*[[Introduction]] - New to Darwinbots? &lt;br /&gt;
*[[Screen shots]]&lt;br /&gt;
*[[Installation Instructions]] - Installing later versions.&lt;br /&gt;
*[http://forum.darwinbots.com The Forum] - Chat sometime.&lt;br /&gt;
*[[Your First Simulations]] - Getting to know the program&lt;br /&gt;
*[[Robot Tutorial]] - Write your own bots&lt;br /&gt;
*[[Sysvars]] - Current system variable information.&lt;br /&gt;
*[[Troubleshooting]] - [[FAQ|Frequently Asked Questions]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Reference Manual&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
*[[Robot DNA]] - Not as complicated as it at first seems.&lt;br /&gt;
*[[Concepts]] - General concepts&lt;br /&gt;
*[[Simulation Options]] - What do all these sliders mean?&lt;br /&gt;
*[[League | Leagues]] - Learn about the leagues that exist.&lt;br /&gt;
*[[Evolution Sims]] - The pinacle of any ALife program.&lt;br /&gt;
*[[Technical Details]] - Know *exactly* how something works.&lt;br /&gt;
*[[Version History]] - The evolution of Darwinbots itself.&lt;br /&gt;
&lt;br /&gt;
*[[Readme]] Most current read me file&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;==&lt;br /&gt;
Central link pages that don't directly reflect what is currently in the DB program&lt;br /&gt;
&lt;br /&gt;
*[[Source Code]] - Where to get it, different versions, and how you can help.&lt;br /&gt;
&amp;lt;!--*[[DeBugging]] - Post up bugs and reference materials here.--&amp;gt;&lt;br /&gt;
*[[Ideas]] - Interactive work on different ideas.  Community projects, that sort of thing.&lt;br /&gt;
&amp;lt;!--*[[Whimsical]] - Stories and etcetera. --&amp;gt;&lt;br /&gt;
&amp;lt;!--*[[RoundTable]] - DB wikipedians unite in this discussion area. --&amp;gt;&lt;br /&gt;
*[[Other Resources]] - Links to resources you might find useful.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBottom&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wiki Help&amp;lt;/font&amp;gt; ==&lt;br /&gt;
*Please see [http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide User's Guide] for Wiki usage&amp;lt;br&amp;gt;&lt;br /&gt;
*Help with [http://en.wikipedia.org/w/wiki.phtml?title=Wikipedia:How_to_edit_a_page editing pages]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=4963</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_Page&amp;diff=4963"/>
				<updated>2009-11-30T03:33:11Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* image:bookgreen.jpg &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;News&amp;lt;/font&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &amp;lt;!-- disab&lt;br /&gt;
1000&lt;br /&gt;
les Table of Contents --&amp;gt;&lt;br /&gt;
&amp;lt;!---a main page with style.---&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;!--[[Image:Dblogo1.JPG]][[Image:KnowledgeBook.jpg]]--&amp;gt; [[Image:MainpageBanner.jpg]] &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;Darwinbots is an Artificial Life simulator that merges the gameplay of C-Robots type arena combat with adaptive asexual population dynamics.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #80e080; padding: .5em .5em; margin: 1em; background-color: #f0fff0;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookgreen.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;News&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ''' November 29, 2009:   Version 2.44.02 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
* ''' November 29, 2008:   Version 2.44.1 released. See [[Main FTP|Downloads]].'''&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;New Users Portal&amp;lt;/font&amp;gt;==&lt;br /&gt;
*'''[[Main FTP|Downloads]]'''&lt;br /&gt;
*[[Introduction]] - New to Darwinbots? &lt;br /&gt;
*[[Screen shots]]&lt;br /&gt;
*[[Installation Instructions]] - Installing later versions.&lt;br /&gt;
*[http://forum.darwinbots.com The Forum] - Chat sometime.&lt;br /&gt;
*[[Your First Simulations]] - Getting to know the program&lt;br /&gt;
*[[Robot Tutorial]] - Write your own bots&lt;br /&gt;
*[[Sysvars]] - Current system variable information.&lt;br /&gt;
*[[Troubleshooting]] - [[FAQ|Frequently Asked Questions]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageLeft&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Reference Manual&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
*[[Robot DNA]] - Not as complicated as it at first seems.&lt;br /&gt;
*[[Concepts]] - General concepts&lt;br /&gt;
*[[Simulation Options]] - What do all these sliders mean?&lt;br /&gt;
*[[League | Leagues]] - Learn about the leagues that exist.&lt;br /&gt;
*[[Evolution Sims]] - The pinacle of any ALife program.&lt;br /&gt;
*[[Technical Details]] - Know *exactly* how something works.&lt;br /&gt;
*[[Version History]] - The evolution of Darwinbots itself.&lt;br /&gt;
&lt;br /&gt;
*[[Readme]] Most current read me file&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #ffa2a2; padding: .5em .5em; margin: 1em; background-color: #fff3f3;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookred.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;==&lt;br /&gt;
Central link pages that don't directly reflect what is currently in the DB program&lt;br /&gt;
&lt;br /&gt;
*[[Source Code]] - Where to get it, different versions, and how you can help.&lt;br /&gt;
&amp;lt;!--*[[DeBugging]] - Post up bugs and reference materials here.--&amp;gt;&lt;br /&gt;
*[[Ideas]] - Interactive work on different ideas.  Community projects, that sort of thing.&lt;br /&gt;
&amp;lt;!--*[[Whimsical]] - Stories and etcetera. --&amp;gt;&lt;br /&gt;
&amp;lt;!--*[[RoundTable]] - DB wikipedians unite in this discussion area. --&amp;gt;&lt;br /&gt;
*[[Other Resources]] - Links to resources you might find useful.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;background: transparent;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBottom&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 1px solid #a0a0ff; padding: .5em .5em; margin: 1em; background-color: #f0f0ff;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
==[[image:bookblue.jpg]] &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wiki Help&amp;lt;/font&amp;gt; ==&lt;br /&gt;
*Please see [http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide User's Guide] for Wiki usage&amp;lt;br&amp;gt;&lt;br /&gt;
*Help with [http://en.wikipedia.org/w/wiki.phtml?title=Wikipedia:How_to_edit_a_page editing pages]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=4962</id>
		<title>Main FTP</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=4962"/>
				<updated>2009-11-30T03:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&amp;lt;!-- __NOTOC__ disables Table of Contents (short pages may not require it--&amp;gt;&lt;br /&gt;
== Main Install ==&lt;br /&gt;
&lt;br /&gt;
Run the main install for [http://www.darwinbots.com/FTP/Darwin21.zip DarwinBots 2.1]  We are working on an installer for the latest  version below, but at the moment, this is the only version for which an installer exists.  It creates some directories and installs some runtimes and thus '''must be installed''' before you can use any of the newer versions below. See the [[Installation_Instructions|installation instructions]].  The version installed with this main install works, but it is ancient (several years old) so you will want to immediatly download one of the newer releases below.&lt;br /&gt;
&lt;br /&gt;
== Recent Releases ==&lt;br /&gt;
&lt;br /&gt;
To update to the latest release, simply copy the file(s) included in a new release into your install location (by default c:\Program File\DarwinbotsII\).  Again, '''the new file(s) MUST be placed into your install location'''.    Usually, new releases consist of only the DarwinBots executable.  If other files are included in a release, you should say 'yes' to all overwrites.  Then simply run the new executable instead of the executable that came with the main install. &lt;br /&gt;
&lt;br /&gt;
=== 2.43.1L ===&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.43.1L.zip 2.43.1L] is the current recommended, and latest stable version of DarwinBots. &lt;br /&gt;
&lt;br /&gt;
=== 2.44.02 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.44.02.exe Version 2.44.1] is the latest &amp;quot;in progress&amp;quot; version.  There might have be some bugs that 2.43.1L does not.  If you encounter a bug, try to reproduce what the problem is (does it crash after loading error.sim every time?).  Then go to the [http://forum.darwinbots.com forum] and file a bug report.&lt;br /&gt;
&lt;br /&gt;
== Bots ==&lt;br /&gt;
Note: The robots that come with the main 2.1 install above will run in modern versions, but they are going to act a little stupid.  They may have a hard time even surviving.  '''Strongly consider downloading more modern bots from the [http://forum.darwinbots.com/index.php?showforum=13 bestiary].'''  [http://forum.darwinbots.com/index.php?act=ST&amp;amp;f=24&amp;amp;t=157&amp;amp;st=0#entry240895 Animal Minimalis] is a good start, and is used in the [[Robot Tutorial]]s.  Just copy the text into a plain old .txt file, and put the file into your robots directory.&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.darwinbots.com/FTP/DarwinTutorial1+2.zip Darwinbots bot writing tutorial by PY] is a little old but a very good primer to learning how the DNA works.  You can also check out the [[Robot Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Previous Versions]]&lt;br /&gt;
* [[Source code download]]&lt;br /&gt;
&lt;br /&gt;
== Vista and Windows 7 ==&lt;br /&gt;
If you are running Vista or Windows 7, you will need to '''run the installation as an Administrator'''.   Right-click on the Darwinbots install (or a shortcut to it) and choose &amp;quot;Run as Administrator&amp;quot;.  This can sometimes be a problem even if you have UAC disabled.&lt;br /&gt;
&lt;br /&gt;
== Windows 95 Trouble ==&lt;br /&gt;
There is a report that Darwinbots might cause problems if you are running Windows 95.  If you experience any such problems, please post them to the [http://forum.darwinbots.com forum].&lt;br /&gt;
&lt;br /&gt;
Return to [[Main Page]]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4960</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4960"/>
				<updated>2009-11-16T06:11:08Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Downloading the dependencies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* [http://madebits.com/netz/index.php NETz] - Allows packing of the exe to make it smaller.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of date (if anyone can think of a better way to handle this sort of thing, I'm all ears).  &lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alteratively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4959</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4959"/>
				<updated>2009-11-05T17:55:20Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* You have the code, now what? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of date (if anyone can think of a better way to handle this sort of thing, I'm all ears).  &lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, the release libraries are on the repository so you shouldn't need to compile all the projects first time.  You can just open one up randomly and compile it and it'll work.  Alteratively, in the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in.&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4958</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4958"/>
				<updated>2009-11-05T17:54:03Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Junk directories and bin folders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder.  Only release binaries are on the repository, and are what projects use when they want to import another (for instance, the release build of UnitTestSharp is used for the unit testing projects).  Note that this can cause weird problems if you build a project in debug mode and not in release mode, and then submit code changes to the repository, since the binary and source code will be out of date (if anyone can think of a better way to handle this sort of thing, I'm all ears).  &lt;br /&gt;
&lt;br /&gt;
Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Troubleshooting&amp;diff=4957</id>
		<title>Troubleshooting</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Troubleshooting&amp;diff=4957"/>
				<updated>2009-11-03T02:25:15Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Run-time error 713 on Windows 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== My program crashes 10 seconds after starting a sim ==&lt;br /&gt;
&lt;br /&gt;
Sounds to me like you have an old settings file.  From 2.1 maybe?&lt;br /&gt;
&lt;br /&gt;
Well, let's see what Purple Youko has to say about that!&lt;br /&gt;
&lt;br /&gt;
&amp;quot;It has been frequently mentioned lately that the default settings file is boring.  Let's face it, in today's world of DarwinBots, T-Preservans is nothing to write home about. In his day he wasn't bad but now we need something fresh that actually survives.&lt;br /&gt;
&lt;br /&gt;
Also the default value for veggie feeding that you used in older versions (10,000) doesn't work too well in 2.36. It used to represent the energy level for the whole sim but now it just directly controls the veggie feed rate.&lt;br /&gt;
&lt;br /&gt;
10,000 energy per cycle!&lt;br /&gt;
&lt;br /&gt;
No wonder their eyes pop out!&lt;br /&gt;
&lt;br /&gt;
Set it to 30. Makes more sense that way. That will be the default value for F1 and F2 leagues from now on&lt;br /&gt;
&lt;br /&gt;
Anyway, without more ado, here is a nice new settings file that uses Hunter 2.2 as the default robot. He survives, grows and fights pretty well but he is no longer top bot so it shouldn't be too discouraging for newbies.&amp;quot;  -Purple Youko&lt;br /&gt;
&lt;br /&gt;
If you don't have Hunter 2.2 then please go and download him from [http://s9.invisionfree.com/DarwinBots_Forum/index.php?showtopic=82&amp;amp;st=0&amp;amp;#entry102242 here in the beatiary]. Now save his file into your DarwinBotsII/robots folder and off you go.&lt;br /&gt;
&lt;br /&gt;
=== Settings file ===&lt;br /&gt;
&lt;br /&gt;
The easiest way is to download it from [http://s9.invisionfree.com/DarwinBots_Forum/index.php?act=Attach&amp;amp;type=post&amp;amp;id=404809 here], but some of you have weird internet and can't download.  Shame, shame.  So the below is an exact transcription (yep, it's just a text file).  Save it as default.set in you settings directory.  If you're in post 2.4, you'll probably need to load this into your sim using the &amp;quot;load settings&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': If you download the file from the link above ...&amp;lt;br&amp;gt;&lt;br /&gt;
the path in line 8 will be: '''&amp;quot;Z:\DB Backup\DarwinBotsII\Robots&amp;quot;'''.&amp;lt;br&amp;gt;&lt;br /&gt;
You need to alter that path to point to the folder where you have installed DarwinBotsII.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have installed DarwinBotsII to a location other than &amp;quot;C:\Program Files\DarwinBotsII\&amp;quot; ...&amp;lt;br&amp;gt; &lt;br /&gt;
change that path in the '''default.set''' file (line 8 in the following)&lt;br /&gt;
to ensure the program will be able to locate your robots.&amp;lt;br&amp;gt;&lt;br /&gt;
(I believe if you make it '''&amp;quot;&amp;amp;#\Robots&amp;quot;''' it will work regardless of where you installed DBII as long as your Settings folder&amp;lt;br&amp;gt;&lt;br /&gt;
is located in the same directory as the Robots folder.&amp;lt;br&amp;gt;&lt;br /&gt;
This default.set also requires that you have robot '''&amp;quot;Hunter V2.2.txt&amp;quot;''' in your folder.&amp;lt;br&amp;gt;&lt;br /&gt;
Either that or you need to edit it out of the file.&amp;lt;br&amp;gt;&lt;br /&gt;
Play with it and see ... why not?)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NOTE: using &amp;lt;pre&amp;gt; and &amp;lt;/pre&amp;gt; to create a box for code, including HTML code--&amp;gt;&lt;br /&gt;
&amp;lt;!--       no need to put a leading space on the left of each entry--&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 -2&lt;br /&gt;
 1&lt;br /&gt;
 9271&lt;br /&gt;
 6971&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;C:\Program Files\DarwinBotsII\Robots&amp;quot;&lt;br /&gt;
 5&lt;br /&gt;
 &amp;quot;Alga_Minimalis.txt&amp;quot;&lt;br /&gt;
 #TRUE#&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 3983420&lt;br /&gt;
 0&lt;br /&gt;
 3000&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 56&lt;br /&gt;
 73&lt;br /&gt;
 13&lt;br /&gt;
 3&lt;br /&gt;
 48&lt;br /&gt;
 407&lt;br /&gt;
 21&lt;br /&gt;
 444&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 19140&lt;br /&gt;
 13620&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 5000&lt;br /&gt;
 &amp;quot;&amp;amp;#\Robots&amp;quot;&lt;br /&gt;
 5&lt;br /&gt;
 &amp;quot;Hunter V2.2.txt&amp;quot;&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 25356&lt;br /&gt;
 0&lt;br /&gt;
 3000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 5000&lt;br /&gt;
 57&lt;br /&gt;
 431&lt;br /&gt;
 59&lt;br /&gt;
 47&lt;br /&gt;
 34&lt;br /&gt;
 381&lt;br /&gt;
 8&lt;br /&gt;
 14&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 9237&lt;br /&gt;
 6928&lt;br /&gt;
 25&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 0&lt;br /&gt;
 #TRUE#&lt;br /&gt;
 30&lt;br /&gt;
 10&lt;br /&gt;
 .004&lt;br /&gt;
 .04&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 200&lt;br /&gt;
 #TRUE#&lt;br /&gt;
 3&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 .8&lt;br /&gt;
 1.1&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 90&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 10&lt;br /&gt;
 1&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 1000&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 .5&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 #FALSE#&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
 0&lt;br /&gt;
 &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Windows 95 Problems ==&lt;br /&gt;
There is a report that Darwinbots will replace comdlg32.dll with a newer and apparently non-compatible version if you run WIndows 95.  Individual instances of this should be reported in the [http://forum.darwinbots.com forum].&lt;br /&gt;
&lt;br /&gt;
== Runtime Error==&lt;br /&gt;
I keep getting a runtime error (76)&lt;br /&gt;
This happens rendomly while running a simulation.[[User:Blacksmith|Blacksmith]] 15:42, 21 January 2008 (MST)&lt;br /&gt;
&lt;br /&gt;
== Run-time error 713 on Windows 7 ==&lt;br /&gt;
On Windows 7, in the &amp;quot;Simulation Settings&amp;quot; window, the &amp;quot;Custom Simulation Costs&amp;quot; button on the Physics and Costs tab causes a fatal error as follows:&lt;br /&gt;
&lt;br /&gt;
Run-time error '713': Class not registered. You need the following file to be installed on your machine. MSSTDFMT.DLL.&lt;br /&gt;
&lt;br /&gt;
This problem is (allegedly) fixable on Windows Vista via regsvr32. The same method, unfortunately, fails to work on Windows 7 (a fatal error occurs between opening the file and registering it), locking those users out of those settings unless they proceed to install and run Darwinbots inside XP Mode (an XP Virtual Machine).&lt;br /&gt;
&lt;br /&gt;
: I've installed windows 7 x64 at work today.  It wasn't working at all at first, but I re-ran the installation program as an administrator and it seems to work just fine now. --[[User:Numsgil|Numsgil]] 19:25, 2 November 2009 (MST)&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=4956</id>
		<title>Main FTP</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Main_FTP&amp;diff=4956"/>
				<updated>2009-11-03T02:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&amp;lt;!-- __NOTOC__ disables Table of Contents (short pages may not require it--&amp;gt;&lt;br /&gt;
== Main Install ==&lt;br /&gt;
&lt;br /&gt;
Run the main install for [http://www.darwinbots.com/FTP/Darwin21.zip DarwinBots 2.1]  We are working on an installer for the latest  version below, but at the moment, this is the only version for which an installer exists.  It creates some directories and installs some runtimes and thus '''must be installed''' before you can use any of the newer versions below. See the [[Installation_Instructions|installation instructions]].  The version installed with this main install works, but it is ancient (several years old) so you will want to immediatly download one of the newer releases below.&lt;br /&gt;
&lt;br /&gt;
== Recent Releases ==&lt;br /&gt;
&lt;br /&gt;
To update to the latest release, simply copy the file(s) included in a new release into your install location (by default c:\Program File\DarwinbotsII\).  Again, '''the new file(s) MUST be placed into your install location'''.    Usually, new releases consist of only the DarwinBots executable.  If other files are included in a release, you should say 'yes' to all overwrites.  Then simply run the new executable instead of the executable that came with the main install. &lt;br /&gt;
&lt;br /&gt;
=== 2.43.1L ===&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.43.1L.zip 2.43.1L] is the current recommended, and latest stable version of DarwinBots. &lt;br /&gt;
&lt;br /&gt;
=== 2.44.1 ===&lt;br /&gt;
&lt;br /&gt;
[http://www.darwinbots.com/FTP/Darwin2.44.1.zip Version 2.44.1] is the latest official release fresh from the developers.  It is very stable though it is always possible there are a few bugs, particularly in newer feature areas.  Please make the developers aware of any issues you encounter via the [http://forum.darwinbots.com forum]. &lt;br /&gt;
&lt;br /&gt;
Some bots may behave differently in recent versions than they did in very old versions (versions prior to 2.4) due to differences in the underlying physics engines and changes/additions to the underlying DNA language.  Please bring any such differences you notice to the attention of the program authors at the [http://forum.darwinbots.com forum].&lt;br /&gt;
&lt;br /&gt;
Note: The robots that come with the main 2.1 install above will run in modern versions, but they are going to act a little stupid.  They may have a hard time even surviving.  '''Strongly consider downloading more modern bots from the [http://forum.darwinbots.com/index.php?showforum=13 bestiary].'''  [http://forum.darwinbots.com/index.php?act=ST&amp;amp;f=24&amp;amp;t=157&amp;amp;st=0#entry240895 Animal Minimalis] is a good start, and is used in the [[Robot Tutorial]]s.  Just copy the text into a plain old .txt file, and put the file into your robots directory.&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.darwinbots.com/FTP/DarwinTutorial1+2.zip Darwinbots bot writing tutorial by PY] is a little old but a very good primer to learning how the DNA works.  You can also check out the [[Robot Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Previous Versions]]&lt;br /&gt;
* [[Source code download]]&lt;br /&gt;
&lt;br /&gt;
== Vista and Windows 7 ==&lt;br /&gt;
If you are running Vista or Windows 7, you will need to '''run the installation as an Administrator'''.   Right-click on the Darwinbots install (or a shortcut to it) and choose &amp;quot;Run as Administrator&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
== Windows 95 Trouble ==&lt;br /&gt;
There is a report that Darwinbots might cause problems if you are running Windows 95.  If you experience any such problems, please post them to the [http://forum.darwinbots.com forum].&lt;br /&gt;
&lt;br /&gt;
Return to [[Main Page]]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4953</id>
		<title>Darwinbots3/Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4953"/>
				<updated>2009-10-15T00:15:52Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C]&lt;br /&gt;
* Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9&lt;br /&gt;
&lt;br /&gt;
== Azimuth tasks ==&lt;br /&gt;
* Expand the rectangular matrix class.  See SquareMatrix.&lt;br /&gt;
&lt;br /&gt;
* Construct a QR decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles full rank, below full rank, and rectangular (full and non full rank) matrices.  Since QR decomposer works on rectangular matrices, the interface will be a little different than for the others.  Also, because it needs to handle arbitrary matrices, a rank revealing QR (RRQR) decomposer is in order.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse Cholesky decomposer.  I don't have any references for this.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse QR decomposer.  There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.&lt;br /&gt;
&lt;br /&gt;
* Right now there are methods for finding roots of up to quartic polynomials analytically.  No general analytic methods exist beyond quartic, so we need an iterative general polynomial root finder.  This is actually a sort of tricky problem from a numerical standpoint.   See section 9.5 in Numerical Recipes in C (&amp;quot;Roots of Polynomials&amp;quot;).  Because finding all the roots might be computationally expensive and probably unnecessary, allowing the user to extract roots one at a time with successive calls would work well.  The primary use case in mind would involve finding the least positive real root &amp;gt;= 0 (collisions between cubic splines).&lt;br /&gt;
&lt;br /&gt;
* Someone needs to take a look at finding the points of collision between two &amp;quot;fat&amp;quot; splines.  Imagine a line segment.  Now move a sphere along the line segment.  You have a capsule.  Now replace the line segment with a polygon (cubic most likely).  See [http://www.gamedev.net/community/forums/topic.asp?topic_id=547699 this thread] I wrote on gamedev talking about it from a broadphase point of view.  Someone mentioned &amp;quot;multidimensional Sturm's theorem&amp;quot;.  Also, there's [http://www.cs.uiowa.edu/~kearney/pubs/CurvesAndSufacesClosestPoint.pdf closest point on spline to point], which could maybe be expanded in some way, or the basic idea mined.&lt;br /&gt;
&lt;br /&gt;
== UI.Controls taks ==&lt;br /&gt;
* Build an exception console.  Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).&lt;br /&gt;
&lt;br /&gt;
== Graphics.Core tasks ==&lt;br /&gt;
* Build a skeletal animation system.  Not strictly necessary for Darwinbots but would be nice to have.  See the implementation of Collage to get an idea of what needs to happen.&lt;br /&gt;
&lt;br /&gt;
* Build a GDI implementation.  Consult the XNA implementation as necessary to get an idea of what to do.  Should be pretty easy, since you don't have to worry about batching.&lt;br /&gt;
&lt;br /&gt;
* Graphics.Core is woefully under tested because I wasn't really certain what I was doing as I was doing it, as far as interface goes.  Just go back through and try to test as much of the code that's untested at the moment as possible.&lt;br /&gt;
&lt;br /&gt;
== Non module specific ==&lt;br /&gt;
* Code coverage - Each module (hopefully) has some unit tests.  Right now there's no way to tell how much of a module is being tested and how much is completely untested.  Either find or build some tools that allow us to determine how much of the code is covered by the unit tests.&lt;br /&gt;
&lt;br /&gt;
* Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks.  Either find or build a tool to aid in profiling.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4952</id>
		<title>Darwinbots3/Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4952"/>
				<updated>2009-10-14T23:34:21Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C]&lt;br /&gt;
* Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9&lt;br /&gt;
&lt;br /&gt;
== Azimuth tasks ==&lt;br /&gt;
* Expand the rectangular matrix class.  See SquareMatrix.&lt;br /&gt;
&lt;br /&gt;
* Construct a QR decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles full rank, below full rank, and rectangular (full and non full rank) matrices.  Since QR decomposer works on rectangular matrices, the interface will be a little different than for the others.  Also, because it needs to handle arbitrary matrices, a rank revealing QR (RRQR) decomposer is in order.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse Cholesky decomposer.  I don't have any references for this.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse QR decomposer.  There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.&lt;br /&gt;
&lt;br /&gt;
* Right now there are methods for finding roots of up to quartic polynomials analytically.  No general analytic methods exist beyond quartic, so we need an iterative general polynomial root finder.  This is actually a sort of tricky problem from a numerical standpoint.   See section 9.5 in Numerical Recipes in C (&amp;quot;Roots of Polynomials&amp;quot;).  Because finding all the roots might be computationally expensive and probably unnecessary, allowing the user to extract roots one at a time with successive calls would work well.  The primary use case in mind would involve finding the least positive real root &amp;gt;= 0 (collisions between cubic splines).&lt;br /&gt;
&lt;br /&gt;
* Someone needs to take a look at finding the points of collision between two &amp;quot;fat&amp;quot; splines.  Imagine a line segment.  Now move a sphere along the line segment.  You have a capsule.  Now replace the line segment with a polygon (cubic most likely).  See [http://www.gamedev.net/community/forums/topic.asp?topic_id=547699 this thread] I wrote on gamedev talking about it from a broadphase point of view.  Someone mentioned &amp;quot;multidimensional Sturm's theorem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== UI.Controls taks ==&lt;br /&gt;
* Build an exception console.  Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).&lt;br /&gt;
&lt;br /&gt;
== Graphics.Core tasks ==&lt;br /&gt;
* Build a skeletal animation system.  Not strictly necessary for Darwinbots but would be nice to have.  See the implementation of Collage to get an idea of what needs to happen.&lt;br /&gt;
&lt;br /&gt;
* Build a GDI implementation.  Consult the XNA implementation as necessary to get an idea of what to do.  Should be pretty easy, since you don't have to worry about batching.&lt;br /&gt;
&lt;br /&gt;
* Graphics.Core is woefully under tested because I wasn't really certain what I was doing as I was doing it, as far as interface goes.  Just go back through and try to test as much of the code that's untested at the moment as possible.&lt;br /&gt;
&lt;br /&gt;
== Non module specific ==&lt;br /&gt;
* Code coverage - Each module (hopefully) has some unit tests.  Right now there's no way to tell how much of a module is being tested and how much is completely untested.  Either find or build some tools that allow us to determine how much of the code is covered by the unit tests.&lt;br /&gt;
&lt;br /&gt;
* Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks.  Either find or build a tool to aid in profiling.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Robot_DNA&amp;diff=4949</id>
		<title>Robot DNA</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Robot_DNA&amp;diff=4949"/>
				<updated>2009-09-27T07:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Darwinbots 3==&lt;br /&gt;
* [[Differences from DB2]]&lt;br /&gt;
&lt;br /&gt;
===The Different Parts===&lt;br /&gt;
* [[Base Pair]]s&lt;br /&gt;
* [[Codule]]s&lt;br /&gt;
* [[Chromosome]]s&lt;br /&gt;
* [[Meta Tag]]s&lt;br /&gt;
* [[DNA]]&lt;br /&gt;
&lt;br /&gt;
===How The DNA Works===&lt;br /&gt;
* [[DNA Execution]]&lt;br /&gt;
* [[Boolean Stack]]&lt;br /&gt;
* [[Integer Stack]]&lt;br /&gt;
* [[Custom Variable]]s&lt;br /&gt;
* [[System Variable]]s&lt;br /&gt;
* [[Mutation]]s&lt;br /&gt;
&lt;br /&gt;
==Darwinbots 2==&lt;br /&gt;
===How the DNA works===&lt;br /&gt;
* [[Genes]]&lt;br /&gt;
* [[Execution Flag]]&lt;br /&gt;
* The [[Stack]] &lt;br /&gt;
* [[Custom labels]] (or variables if you prefer)&lt;br /&gt;
* [[Order of actions]]&lt;br /&gt;
&lt;br /&gt;
=== DNA commands===&lt;br /&gt;
An overview of each and every DNA [[command]], from sysvars to logical operators.&lt;br /&gt;
&lt;br /&gt;
* [[Operators | 2.4 Operators]]&lt;br /&gt;
&lt;br /&gt;
* [[Pre2.4]]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4948</id>
		<title>Darwinbots3/Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4948"/>
				<updated>2009-09-27T06:51:24Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C]&lt;br /&gt;
* Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9&lt;br /&gt;
&lt;br /&gt;
== Azimuth tasks ==&lt;br /&gt;
* Construct a Cholesky decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles singular, non symmetric, and non positive definite matrices.  See section 2.9 in Numerical Recipes in C.&lt;br /&gt;
&lt;br /&gt;
* Construct a rectangular matrix class.  Probably should name it MNRectangularMatrix.  Use NSquareMatrix as a template.  Be sure that the interface allows users to use a NSquareMatrix as a MNRectangularMatrix.&lt;br /&gt;
&lt;br /&gt;
* Construct a QR decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles full rank, below full rank, and rectangular (full and non full rank) matrices.  Since QR decomposer works on rectangular matrices, the interface will be a little different than for the others.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse Cholesky decomposer.  I don't have any references for this.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse QR decomposer.  There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.&lt;br /&gt;
&lt;br /&gt;
* Right now there are methods for finding roots of up to quartic polynomials analytically.  No analytic methods exist beyond quartic, so we need an iterative general polynomial root finder.  This is actually a sort of tricky problem from a numerical standpoint.   See section 9.5 in Numerical Recipes in C (&amp;quot;Roots of Polynomials&amp;quot;).  Because finding all the roots might be computationally expensive and probably unnecessary, allowing the user to extract roots one at a time with successive calls would work well.  The primary use case in mind would involve finding the least positive real root &amp;gt;= 0 (collisions between cubic splines).&lt;br /&gt;
&lt;br /&gt;
== UI.Controls taks ==&lt;br /&gt;
* Build an exception console.  Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).&lt;br /&gt;
&lt;br /&gt;
== Graphics.Core tasks ==&lt;br /&gt;
* Build a skeletal animation system.  Not strictly necessary for Darwinbots but would be nice to have.  See the implementation of Collage to get an idea of what needs to happen.&lt;br /&gt;
&lt;br /&gt;
* Build a GDI implementation.  Consult the XNA implementation as necessary to get an idea of what to do.  Should be pretty easy, since you don't have to worry about batching.&lt;br /&gt;
&lt;br /&gt;
* Graphics.Core is woefully under tested because I wasn't really certain what I was doing as I was doing it, as far as interface goes.  Just go back through and try to test as much of the code that's untested at the moment as possible.&lt;br /&gt;
&lt;br /&gt;
== Non module specific ==&lt;br /&gt;
* Code coverage - Each module (hopefully) has some unit tests.  Right now there's no way to tell how much of a module is being tested and how much is completely untested.  Either find or build some tools that allow us to determine how much of the code is covered by the unit tests.&lt;br /&gt;
&lt;br /&gt;
* Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks.  Either find or build a tool to aid in profiling.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4947</id>
		<title>Darwinbots3/Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4947"/>
				<updated>2009-09-17T22:16:13Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C]&lt;br /&gt;
* Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9&lt;br /&gt;
&lt;br /&gt;
== Azimuth tasks ==&lt;br /&gt;
* Construct a Cholesky decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles singular, non symmetric, and non positive definite matrices.  See section 2.9 in Numerical Recipes in C.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse Cholesky decomposer.  I don't have any references for this.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse QR decomposer.  There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.&lt;br /&gt;
&lt;br /&gt;
* Right now there are methods for finding roots of up to quartic polynomials analytically.  No analytic methods exist beyond quartic, so we need an iterative general polynomial root finder.  This is actually a sort of tricky problem from a numerical standpoint.   See section 9.5 in Numerical Recipes in C (&amp;quot;Roots of Polynomials&amp;quot;).  Because finding all the roots might be computationally expensive and probably unnecessary, allowing the user to extract roots one at a time with successive calls would work well.  The primary use case in mind would involve finding the least positive real root &amp;gt;= 0 (collisions between cubic splines).&lt;br /&gt;
&lt;br /&gt;
== UI.Controls taks ==&lt;br /&gt;
* Build an exception console.  Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).&lt;br /&gt;
&lt;br /&gt;
== Graphics.Core tasks ==&lt;br /&gt;
* Build a skeletal animation system.  Not strictly necessary for Darwinbots but would be nice to have.  See the implementation of Collage to get an idea of what needs to happen.&lt;br /&gt;
&lt;br /&gt;
* Build a GDI implementation.  Consult the XNA implementation as necessary to get an idea of what to do.  Should be pretty easy, since you don't have to worry about batching.&lt;br /&gt;
&lt;br /&gt;
* Graphics.Core is woefully under tested because I wasn't really certain what I was doing as I was doing it, as far as interface goes.  Just go back through and try to test as much of the code that's untested at the moment as possible.&lt;br /&gt;
&lt;br /&gt;
== Non module specific ==&lt;br /&gt;
* Code coverage - Each module (hopefully) has some unit tests.  Right now there's no way to tell how much of a module is being tested and how much is completely untested.  Either find or build some tools that allow us to determine how much of the code is covered by the unit tests.&lt;br /&gt;
&lt;br /&gt;
* Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks.  Either find or build a tool to aid in profiling.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4946</id>
		<title>Darwinbots3/Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4946"/>
				<updated>2009-09-13T21:56:45Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C]&lt;br /&gt;
* Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9&lt;br /&gt;
&lt;br /&gt;
== Azimuth tasks ==&lt;br /&gt;
* Construct a Cholesky decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles singular, non symmetric, and non positive definite matrices.  See section 2.9 in Numerical Recipes in C.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse Cholesky decomposer.  I don't have any references for this.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse QR decomposer.  There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.&lt;br /&gt;
&lt;br /&gt;
== UI.Controls taks ==&lt;br /&gt;
* Build an exception console.  Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).&lt;br /&gt;
&lt;br /&gt;
== Graphics.Core tasks ==&lt;br /&gt;
* Build a skeletal animation system.  Not strictly necessary for Darwinbots but would be nice to have.  See the implementation of Collage to get an idea of what needs to happen.&lt;br /&gt;
&lt;br /&gt;
* Build a GDI implementation.  Consult the XNA implementation as necessary to get an idea of what to do.  Should be pretty easy, since you don't have to worry about batching.&lt;br /&gt;
&lt;br /&gt;
* Graphics.Core is woefully under tested because I wasn't really certain what I was doing as I was doing it, as far as interface goes.  Just go back through and try to test as much of the code that's untested at the moment as possible.&lt;br /&gt;
&lt;br /&gt;
== Non module specific ==&lt;br /&gt;
* Code coverage - Each module (hopefully) has some unit tests.  Right now there's no way to tell how much of a module is being tested and how much is completely untested.  Either find or build some tools that allow us to determine how much of the code is covered by the unit tests.&lt;br /&gt;
&lt;br /&gt;
* Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks.  Either find or build a tool to aid in profiling.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4945</id>
		<title>Darwinbots3/Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4945"/>
				<updated>2009-09-13T21:47:29Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C]&lt;br /&gt;
* Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9&lt;br /&gt;
&lt;br /&gt;
== Azimuth tasks ==&lt;br /&gt;
* Construct a Cholesky decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles singular, non symmetric, and non positive definite matrices.  See section 2.9 in Numerical Recipes in C.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse Cholesky decomposer.  I don't have any references for this.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse QR decomposer.  There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.&lt;br /&gt;
&lt;br /&gt;
== UI.Controls taks ==&lt;br /&gt;
* Build an exception console.  Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).&lt;br /&gt;
&lt;br /&gt;
== Graphics.Core tasks ==&lt;br /&gt;
* Build a skeletal animation system.  Not strictly necessary for Darwinbots but would be nice to have.  See the implementation of Collage to get an idea of what needs to happen.&lt;br /&gt;
&lt;br /&gt;
* Build a GDI implementation.  Consult the XNA implementation as necessary to get an idea of what to do.  Should be pretty easy, since you don't have to worry about batching.&lt;br /&gt;
&lt;br /&gt;
== Non module specific ==&lt;br /&gt;
* Code coverage - Each module (hopefully) has some unit tests.  Right now there's no way to tell how much of a module is being tested and how much is completely untested.  Either find or build some tools that allow us to determine how much of the code is covered by the unit tests.&lt;br /&gt;
&lt;br /&gt;
* Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks.  Either find or build a tool to aid in profiling.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4944</id>
		<title>Darwinbots3/Tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Tasks&amp;diff=4944"/>
				<updated>2009-09-13T21:40:16Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: New page: == References == * [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C] * Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9  == Azimuth tasks == * C...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
* [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C]&lt;br /&gt;
* Numerical Methods for Least Squared Problems by Ake Bjorck.  ISBN: 0-89871-360-9&lt;br /&gt;
&lt;br /&gt;
== Azimuth tasks ==&lt;br /&gt;
* Construct a Cholesky decomposer.  See the existing code for LU decomposition to get an idea of how the format works.  Make sure to test thoroughly to see that it properly handles singular, non symmetric, and non positive definite matrices.  See section 2.9 in Numerical Recipes in C.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse Cholesky decomposer.  I don't have any references for this.&lt;br /&gt;
&lt;br /&gt;
* Construct a sparse QR decomposer.  There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.&lt;br /&gt;
&lt;br /&gt;
== UI.Controls taks ==&lt;br /&gt;
* Build an exception console.  Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).&lt;br /&gt;
&lt;br /&gt;
== Graphics.Core tasks ==&lt;br /&gt;
* Build a skeletal animation system.  Not strictly necessary for Darwinbots but would be nice to have.  See the implementation of Collage to get an idea of what needs to happen.&lt;br /&gt;
&lt;br /&gt;
* Build a GDI implementation.  Consult the XNA implementation as necessary to get an idea of what to do.  Should be pretty easy, since you don't have to worry about batching.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4943</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4943"/>
				<updated>2009-09-13T21:25:50Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Subarticles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks|Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4942</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4942"/>
				<updated>2009-09-13T21:25:38Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Subarticles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
* [[Darwinbots3/Tasks]] - A list of relatively self contained tasks which need doing.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4939</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4939"/>
				<updated>2009-08-15T00:19:02Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Release pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision (ie: the changelist number in the SVN) corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4938</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4938"/>
				<updated>2009-08-15T00:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture (Out of date) ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4937</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4937"/>
				<updated>2009-08-15T00:17:55Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules generally have the following structure: there's a &amp;quot;core&amp;quot; API which is essentially a wrapper around different implementations (for examples, see the graphics modules).  These &amp;quot;core&amp;quot; APIs will automatically search for and load any appropriate implementations in the same assembly or search for assemblies in the same working directory.&lt;br /&gt;
&lt;br /&gt;
Each of these implementations will have the core library, a unit testing project, and a demo framework.  The unit testing project is built with UnitTestSharp and is designed to be run as a post build step of itself in the solution.  So if you build the implementation in the IDE you might notice that the unit testing project is reporting that it's failing to build.  This can be either an actual compile error or a failing test (which will be treated as a compile error.  Double clicking on the error will usually take you to where in source it's failing).  The demo framework is a (generally untested) simple app which can be used to interact with various aspects of the module in question without waiting for it to be integrated into Darwinbots3 in the final stage.  For instance, for DNA there's a console version which let's you write DNA code and see the results.  For physics there's a &amp;quot;physics playground&amp;quot; with various physics scenarios presented to the user to inspect.  These demo frameworks generally won't be presented to the end user.  They're more for developers.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4936</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4936"/>
				<updated>2009-08-11T18:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Visual Studio solution files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory.  Note that you shouldn't need to do this very often, since the end binaries are submitted to the repository.&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4935</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4935"/>
				<updated>2009-08-11T18:25:47Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Coding standards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory (note: as of this writing such scripts do not exist. - Sept 08)&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Repository etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
* Be careful what files you submit.  If it's a large file it will take up repository space for ever and ever, even if you remove it from the repository later.  Repository space is not unlimited.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Module/Graphics.Core&amp;diff=4934</id>
		<title>Darwinbots3/Module/Graphics.Core</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Module/Graphics.Core&amp;diff=4934"/>
				<updated>2009-06-15T16:39:14Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Graphics.Core''' is an interface module which allows other modules to draw without understanding the different APIs involved.&lt;br /&gt;
&lt;br /&gt;
== Selecting a graphics module ==&lt;br /&gt;
Depending on the platform (windows, XBox, etc.) different graphics APIs might be used.  Often, there is a choice between multiple different APIs.  The GraphicsAdapterManager singleton searches through the current executing assembly for graphics modules which can be used.  The current executing directory is also searched for binaries of the form &amp;quot;Graphics*.dll&amp;quot;, and any graphics modules found in them are extracted.&lt;br /&gt;
&lt;br /&gt;
GraphicsAdapaterManager.Modules is an IEnumberable&amp;lt;string&amp;gt; containing the names of all the available modules.  Select one from the list and set the current adapter with a call to GraphicsAdapterManager.Singleton.SetCurrentModule(moduleName);&lt;br /&gt;
&lt;br /&gt;
== DrawPrimitive ==&lt;br /&gt;
A DrawPrimitive is all the information necessary to draw a shape in a body's local space.  It contains all the information about transformations, vertices, colors, draw order, style, and color.  Plus obviously what sort of shape it is.&lt;br /&gt;
&lt;br /&gt;
The DrawPrimitive is the most basic form for all graphics.&lt;br /&gt;
&lt;br /&gt;
== Collages ==&lt;br /&gt;
A '''collage''' is a collection of draw primitives.  A collage defines a template for drawing a compound shape.&lt;br /&gt;
&lt;br /&gt;
Adding DrawPrimitives to a collage can be done manually.  However the preferred use is to use the collage as an object which knows how to add primitives to itself.  By setting the Color and Style properties, the collage can act as a sort of immediate mode smart drawing canvas.&lt;br /&gt;
&lt;br /&gt;
== Collage Ref ==&lt;br /&gt;
Collages are ''templates'' for drawing compound shapes.  In order to actually draw the collage, you must initialize a CollageRef.&lt;br /&gt;
&lt;br /&gt;
The collage ref can contain specific &amp;quot;local&amp;quot; information about a collage.  For instance, if a collage had an animation sequence, the collage ref would contain the time stamp in to that animation sequence.  In this way a single collage is sort of a template from which multiple individual instances can be spawned.&lt;br /&gt;
&lt;br /&gt;
== Entity ==&lt;br /&gt;
An entity represents an actual drawable object.  It combines a CollageRef with a world transform.&lt;br /&gt;
&lt;br /&gt;
== Cel ==&lt;br /&gt;
As in an animation cel.  A cel is basically a &amp;quot;layer&amp;quot; onto which entities are drawn.  &lt;br /&gt;
&lt;br /&gt;
In order to keep the draw orders sane, draw order only affects the draw order in a cel.  Draw order only affects the relative ordering of primitives in a cel.&lt;br /&gt;
&lt;br /&gt;
It helps to think of a cel as a piece of cellophane on which entities are painted according to their draw order.  Just like in an animation studio, multiple cels can make up a final scene (for instance, a background cel, a foreground cel, and a character cel can all be drawn).&lt;br /&gt;
&lt;br /&gt;
== DrawQueue ==&lt;br /&gt;
A draw queue holds the different cels to be drawn, and orders them appropriately.&lt;br /&gt;
&lt;br /&gt;
== WindowHandle ==&lt;br /&gt;
A window handle represents an actual drawable surface somewhere on screen.  By submitting the draw queue to be drawn, graphics can be put on to the screen.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4933</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4933"/>
				<updated>2009-06-15T15:28:38Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Subarticles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory (note: as of this writing such scripts do not exist. - Sept 08)&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
* [[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
* [[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4932</id>
		<title>Darwinbots 3</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots_3&amp;diff=4932"/>
				<updated>2009-06-15T08:05:10Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Subarticles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use the following link for a real-time discussion of features and progress: [http://chat.darwinbots.com Link to developer's chat]&lt;br /&gt;
&lt;br /&gt;
Darwinbots 3 is a long term project to recode Darwinbots in C# as a brand new program.  Every feature and aspect is going to be examined and refined as its added, in a framework that will ensure robustness and agility in handling bugs and new features.  The code can be browsed: [https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/]&lt;br /&gt;
&lt;br /&gt;
== Compiling the code ==&lt;br /&gt;
=== Getting the compiler ===&lt;br /&gt;
You'll need a version of Visual C# 2008 (this all might run under Mono in Linux, but I don't have either so no promises).  You can download [http://msdn2.microsoft.com/en-us/express/aa975050.aspx C# express] for free.  If you're prompted on whether to install any SQL components, choose yes.  The whole process will probably take several hours to do.  The good news is that even if you never start programming Darwinbots, you just found a free high quality compiler :D&lt;br /&gt;
&lt;br /&gt;
=== Downloading the dependencies ===&lt;br /&gt;
To compile the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/thankyou.aspx?familyId=7d70d6ed-1edd-4852-9883-9a33c0ad8fee&amp;amp;displayLang=en XNA 3.0] - A game library released by Microsoft which is used for graphics and math related things.&lt;br /&gt;
&lt;br /&gt;
To distribute the project, you need:&lt;br /&gt;
&lt;br /&gt;
* [http://research.microsoft.com/~mbarnett/ILMerge.aspx ILMerge] - Allows multiple .NET assemblies (.DLLs) to be packaged into a single assembly.&lt;br /&gt;
* Double check what needs to be installed .NET wise and XNA wise (redistributables).&lt;br /&gt;
&lt;br /&gt;
=== Get either Subversion or a Subversion client ===&lt;br /&gt;
For those unfamiliar with version control, it's basically a way to ensure that multiple people can work on the same source code.  You &amp;quot;check out&amp;quot; a copy of the current source code from the repository and store it locally on your computer.  You then change the source code in places and &amp;quot;commit&amp;quot; it back to the repository.  If there have been changes in the mean time that conflict with your changes (should be a pretty rare occurrence), SVN will notify you and ask you to resolve the problem before the commit is applied to the central code repository.  Another advantage of working this way is that the entire evolution of the code is tracked.  If some bug is found that was introduced months ago, you can browse through the repository at different versions of the program to find what changes caused it.&lt;br /&gt;
&lt;br /&gt;
You can either try one of the [http://www.sliksvn.com/en/download Subversion commandline builds] if you're into that sort of thing, or try one of the GUI based Subversion clients.  Numsgil uses [http://www.syntevo.com/smartsvn/index.html SmartSVN], which he highly recommends.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the repository and committing ===&lt;br /&gt;
[https://svn2.hosted-projects.com/Numsgil/Darwinbots3/ https://svn2.hosted-projects.com/Numsgil/Darwinbots3/] This is the link for the repository.  It has anonymous access, so anyone can download and browse it.  To commit changes, you need a username and password.  Post a request for one [http://www.darwinbots.com/Forum/index.php?s=2c5129f4c423731b6c1effece256aaef&amp;amp;showforum=62 here].  If you haven't registered in the forum yet, please do so.  It's important that progress is talked about so others can see what's going on.&lt;br /&gt;
&lt;br /&gt;
=== How you should set up your SVN projects and local directories ===&lt;br /&gt;
I recommend setting up two SVN projects.  One for the 3rd party libraries, and one for the current branch your working on (or trunk or a specific tag or what have you).  It doesn't matter where you put the source code, as long as the current branch you're working on is a sibling to the 3rdParty folder.  For example, this is the suggested setup:&lt;br /&gt;
&lt;br /&gt;
* \Darwinbots3&lt;br /&gt;
** \Source&lt;br /&gt;
*** \3rdParty &amp;lt;-- sync this to the 3rd party directory in the repository&lt;br /&gt;
*** \Trunk (actual name doesn't matter) &amp;lt;-- sync this to the trunk directory in the repository, or one of the tags or branches if you're working from them&lt;br /&gt;
&lt;br /&gt;
Again, the source folder doesn't have to be inside your Darwinbots3 folder, but 3rdParty and Trunk (or whatever you name it) need to be siblings.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio solution files ===&lt;br /&gt;
Instead of one large master solution file to build the entire project, each module maintains its own solution file for just that solution.  Usually it will contain the module itself, some unit tests, and a test app.  This is to make checking unit tests for errors simpler, among other purposes.  To build the entire project, you'll need to run one of the build scripts in the Scripts directory (note: as of this writing such scripts do not exist. - Sept 08)&lt;br /&gt;
&lt;br /&gt;
=== Junk directories and bin folders ===&lt;br /&gt;
The projects are set up to place bulky build files in the Junk directory.  This directory should always be empty on the repository, except for the &amp;quot;About This Folder.txt&amp;quot; file.  Final EXEs are built to the Bin folder, which also should be empty on the repository, except for its own &amp;quot;About This Folder.txt&amp;quot; file.  Under the scripts directory, there are scripts for publishing from the Bin directory to the top level Darwinbots3 directory (essentially publishing locally) and scripts to clean the junk folders (delete files and such).&lt;br /&gt;
&lt;br /&gt;
This setup is subject to change based on usability issues.&lt;br /&gt;
&lt;br /&gt;
=== You have the code, now what? ===&lt;br /&gt;
Each module has its own solution file.  Because many modules have interdependencies, you'll have to build all the modules at least once.  In the Scripts folder, there is a batch file called BuildAll-Release.  Run that file.  You might need to run it more than once depending on what order the batch file decides to build the modules in. (Using the batch file is no longer necessary)&lt;br /&gt;
&lt;br /&gt;
== Coding standards ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Standards ===&lt;br /&gt;
I'm using [http://weblogs.asp.net/brijmohan/archive/2008/10/10/c-coding-standards-by-lance-s.aspx this standard], or trying to anyway.&lt;br /&gt;
&lt;br /&gt;
=== Etiquette ===&lt;br /&gt;
* Prefer to post lots of small, atomic changes over large, far-reaching changes.  It's easier to integrate for other people, and minimizes the possibility of commit conflicts.&lt;br /&gt;
&lt;br /&gt;
* Keep the repository's code running.  Don't commit a change that would break the program, or worse, prevent it from compiling.  If you do anyway, fix the problem immediately.&lt;br /&gt;
&lt;br /&gt;
=== Unit testing ===&lt;br /&gt;
Unit testing is a way to ensure that a function or section of code works like you think it should.  It is ''immeasurably'' important for keeping the code robust and bug free.  It also makes refactoring much easier.  [http://www.gamesfromwithin.com/articles/0502/000073.html this site] is an excellent introduction to Unit Testing for games.&lt;br /&gt;
&lt;br /&gt;
Ideally, you would write the tests first and then &amp;quot;fix&amp;quot; the program to pass those tests.  This requires some discipline that I personally don't always have, so I'm not going to ''strongly'' enforce this.  Aim for this standard anyway.  Definitely unit test as many aspects of the code you're working on as possible, even if it's after the fact.&lt;br /&gt;
&lt;br /&gt;
=== Design patterns ===&lt;br /&gt;
I'm not too concerned about strictly following design patterns, but you should at the least be aware of them.  [http://www.dofactory.com/Patterns/Patterns.aspx This article] shows the more common design patterns and examples for them.  Personally I've found various factory patterns useful for things like the DNA language parsing and unparsing.&lt;br /&gt;
&lt;br /&gt;
== Release pattern ==&lt;br /&gt;
When a new release is ready, it's given a version number.  The format is:&lt;br /&gt;
* '''Darwinbots3 AXXXXX.exe''' - An alpha release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3 BXXXXX.exe''' - A beta release.  The XXXXX is the source control revision corresponding to the executable&lt;br /&gt;
* '''Darwinbots3.0.exe''' - The first feature complete and stable release.&lt;br /&gt;
* '''Darwinbots3.XXX RC1''' - A release candidate.  The number after RC is the release candidate version.  The XXX is the version number (starts at 001, goes to 999).&lt;br /&gt;
* '''Darwinbots3.XXX''' - The stable release for version XXX.&lt;br /&gt;
&lt;br /&gt;
Note that these files alphabetically sort according to when they are expected to release.  This is important.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
I'm designing the program around the idea of &amp;quot;data-centered&amp;quot;.  You can read a paper about it [http://members.cox.net/jplummer/Writings/Thesis_with_Appendix.pdf here] (just browse through it, it's pretty big.  Focus on the part near the beginning where he explores different architecture models).  &lt;br /&gt;
&lt;br /&gt;
Basically, each module interacts only indirectly with other modules through a central data repository.  Instead of a something like monster[456].Draw(), you'd have Draw(Monster[456]).  The benefit of a design like this is that it allows you to swap different modules (change your graphics from OpenGL to Ogre, for instance) easily, lowers the allowed interdependency between modules, and lets the modules themselves be reused in different projects.&lt;br /&gt;
&lt;br /&gt;
In general, all the game data, such a bots, shots, ties, etc., go into a central repository.  A method goes into class of a data object only if it's strictly involved with manipulating the data and not doing something to it.  For instance, a function that takes an amount a bot is supposed to be charged in nrg and gives it waste too should go with the bot's class.  A function that handles collisions between bots and shots should probably go in a module.  It's not strictly black and white, but generally ask yourself if adding a function ties the data directly together with a module.  If we wanted to swap out one of the modules, would we find it difficult to disentangle the data repository from it?  If so, it belongs in a module (in the case of the bot shot collision, it would probably belong in the game logic module).&lt;br /&gt;
&lt;br /&gt;
The following is a rough draft of the different modules I'm planning:&lt;br /&gt;
&lt;br /&gt;
* DNAModule AKA Sunweaver - A fairly self contained module that handles most of its own functions, parsing, etc.  Very little interfacing is needed with it beyond a few &amp;quot;black box&amp;quot; controls.&lt;br /&gt;
* Graphics Module - Consists strictly of calls to OpenGL, assuming I use OpenGL.&lt;br /&gt;
* GUI Module - Contains the dialog boxes and windows the user will probably use and see, all written with Forms.&lt;br /&gt;
* Game Logic Module - Handles the core simulation, minus physics and DNA.&lt;br /&gt;
* Math library AKA Azimuth - A low level library of basic math primitives and functions like vectors, matrices, and solving systems of linear equations.&lt;br /&gt;
* Physics Module AKA Lodestone - The physics engine for Darwinbots, coded for a great deal of feedback as far as collision forces, etc.&lt;br /&gt;
* Networking - Handles interfacing with the internet.  Users could download bots from an online database right from the program, for instance.  Also internet sharing, program updates, etc.&lt;br /&gt;
* Disk IO - Handles serializing the data.  Data will probably be saved as zipped XML files, to allow for outside manipulation through scripting languages.&lt;br /&gt;
* MainExe - Basically nothing more than calls to the different modules to initialize them and start the game loop, calling each module in the proper order.&lt;br /&gt;
* Central Data Repository - Stores references to bots, shots, ties, DNA, etc.  Very little algorithmic work going on.&lt;br /&gt;
&lt;br /&gt;
These modules ideally would end up as seperate DLLs to help enforce modularity, but this might cause cyclic dependancies, so I'm not holding my breath.&lt;br /&gt;
&lt;br /&gt;
== Design == &lt;br /&gt;
Visit the [[Darwinbots 3 wish list | wish list]] to see the major features under consideration from the point of view of the end result.  Discuss them [http://www.darwinbots.com/Forum/index.php?showforum=62 in the forum].&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
[[Darwinbots3/Milestone 1|Milestone 1]] - Basic functionality version&lt;br /&gt;
&lt;br /&gt;
== Subarticles ==&lt;br /&gt;
[[Darwinbots3/Physics|Physics explanation]] - An explanation in plain &amp;lt;math&amp;gt;\LaTeX&amp;lt;/math&amp;gt; of how the physics engine works.&lt;br /&gt;
[[Darwinbots3/Module|Modules]] - A list of modules involved in Darwinbots3 and an explanation of how each works.&lt;br /&gt;
&lt;br /&gt;
== DNA ==&lt;br /&gt;
Visit the [[Robot DNA]] page to see how the DNA will work.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Module/Graphics.Core&amp;diff=4931</id>
		<title>Darwinbots3/Module/Graphics.Core</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Module/Graphics.Core&amp;diff=4931"/>
				<updated>2009-06-15T08:02:25Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: New page: '''Graphics.Core''' is an interface module which allows other modules to draw without understanding the different APIs involved.  == Selecting a graphics module == Depending on the platfor...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Graphics.Core''' is an interface module which allows other modules to draw without understanding the different APIs involved.&lt;br /&gt;
&lt;br /&gt;
== Selecting a graphics module ==&lt;br /&gt;
Depending on the platform (windows, XBox, etc.) different graphics APIs might be used.  Often, there is a choice between multiple different APIs.  The GraphicsAdapterManager singleton searches through the current executing assembly for graphics modules which can be used.  The current executing directory is also searched for binaries of the form &amp;quot;Graphics*.dll&amp;quot;, and any graphics modules found in them are extracted.&lt;br /&gt;
&lt;br /&gt;
GraphicsAdapaterManager.Modules is an IEnumberable&amp;lt;string&amp;gt; containing the names of all the available modules.  Select one from the list and set the current adapter with a call to GraphicsAdapterManager.Singleton.SetCurrentModule(moduleName);&lt;br /&gt;
&lt;br /&gt;
== DrawPrimitive ==&lt;br /&gt;
A DrawPrimitive is all the information necessary to draw a shape in a body's local space.  It contains all the information about transformations, vertices, colors, draw order, style, and color.  Plus obviously what sort of shape it is.&lt;br /&gt;
&lt;br /&gt;
The DrawPrimitive is the most basic form for all graphics.&lt;br /&gt;
&lt;br /&gt;
== Collages ==&lt;br /&gt;
A '''collage''' is a collection of draw primitives.  A collage defines a template for drawing a compound shape.&lt;br /&gt;
&lt;br /&gt;
Adding DrawPrimitives to a collage can be done manually.  However the preferred use is to use the collage as an object which knows how to add primitives to itself.  By setting the Color and Style properties, the collage can act as a sort of immediate mode smart drawing canvas.&lt;br /&gt;
&lt;br /&gt;
== Collage Ref ==&lt;br /&gt;
Collages are ''templates'' for drawing compound shapes.  In order to actually draw the collage, you must initialize a CollageRef.&lt;br /&gt;
&lt;br /&gt;
== Entity ==&lt;br /&gt;
An entity represents an actual drawable object.  It combines a CollageRef with a world transform.&lt;br /&gt;
&lt;br /&gt;
== Cel ==&lt;br /&gt;
As in animation cel.  A cel can contain multiple entities.  In order to keep the draw orders sane, draw order only affects the draw order in a cel.  Once a cel has been drawn, the draw order buffer is wiped clean so that the next cel can be drawn.  It helps to think of a cel as a piece of cellophane on which entities are painted according to their draw order.  Just like in an animation studio, multiple cels can make up a final scene (for instance, a background cel, a foreground cel, and a character cel can all be drawn).&lt;br /&gt;
&lt;br /&gt;
== DrawQueue ==&lt;br /&gt;
A draw queue holds the different cels to be drawn, and orders them appropriately.&lt;br /&gt;
&lt;br /&gt;
== WindowHandle ==&lt;br /&gt;
A window handle represents an actual drawable surface somewhere on screen.  By submitting the draw queue to be drawn, graphics can be put on to the screen.&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Module&amp;diff=4930</id>
		<title>Darwinbots3/Module</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Module&amp;diff=4930"/>
				<updated>2009-06-15T07:27:48Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: New page: Documentation of the modules which make up Darwinbots3:   Graphics.Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Documentation of the modules which make up Darwinbots3:&lt;br /&gt;
&lt;br /&gt;
[[Darwinbots3/Module/Graphics.Core | Graphics.Core]]&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4929</id>
		<title>Darwinbots3/Milestone 1</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4929"/>
				<updated>2009-06-15T07:11:36Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the first milestone for Darwinbots 3, representing a bare minimum working version of the program, with all core subsystems in place (physics, DNA, etc.).  Essentially this is a simplified version of what Darwinbots 1 looked like.  These requirements best case wishful thinking.  Some requirements may need to be relaxed.&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* '''Assets''' - Files created during a user's use of Darwinbots.  This would include bots, simulations, settings, etc.&lt;br /&gt;
* '''The project''' - Darwinbots 3.  Not to be confused with a C# project.&lt;br /&gt;
&lt;br /&gt;
== Administrative tasks ==&lt;br /&gt;
These are &amp;quot;meta coding&amp;quot; tasks that are not involved directly in the creation or operation of the program, but are still necessary to accomplish.  Examples include programmer tools, documentation, and installation scripts.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
The program will have an installer which will properly and correctly install and uninstall the program using NSIS.&lt;br /&gt;
&lt;br /&gt;
* The creation of the installation program will be entirely automated or with as little user input as possible.&lt;br /&gt;
* The installer will properly create registry keys for the program to store information about where it's installed on disk, with the option to easily add new parameters to the registry as needed.  &lt;br /&gt;
* The uninstaller will remove these registry keys entirely.&lt;br /&gt;
* The installer will properly handle users installing a newer version on top of an older version.&lt;br /&gt;
* The uninstaller will prompt for removing assets, and if the user so chooses, entirely remove all assets.&lt;br /&gt;
* Assuming the user chooses to remove all assets, there shall be no trace of where Darwinbots was installed.  If a user installs then uninstalls Darwinbots, their directory structure should be identical to when they started.&lt;br /&gt;
&lt;br /&gt;
=== UnitTestSharp (DONE) ===&lt;br /&gt;
Unit test sharp is a unit testing framework in .NET constructed to meet the unit testing needs of the project.&lt;br /&gt;
&lt;br /&gt;
* (DONE) The user will be able to easily construct unit tests for a module they're working on, and add the running of these tests to the build process, so they are notified immediately when something breaks.&lt;br /&gt;
* (DONE) The module will be used to test itself, ie: eating your own dog food.&lt;br /&gt;
* (DONE) The user will be able to construct data driven tests, where the same test is run using different data.  Constructing and maintaining this data should be as easy as maintaining a spreadsheet in Excel.&lt;br /&gt;
* (DONE) The user should be able to double click on any failed test in the build process and be taken to the exact line which failed.&lt;br /&gt;
&lt;br /&gt;
=== Code coverage ===&lt;br /&gt;
A method to measure code coverage for unit tests will be set up (probably NCover).  Generating a report of code coverage for a given module will be as painless as possible (eg: double click).&lt;br /&gt;
&lt;br /&gt;
=== Build process (DONE) ===&lt;br /&gt;
A build process will be created and finalized, without any external dependencies beyond what can be placed in the repository.  That is, a user with a fresh XP install and a SVN client should be able to sync to the repository and double click on a script/program to entirely build the project, with no other user input required.&lt;br /&gt;
&lt;br /&gt;
* (DONE) Programmers should not have to explicitly register a solution with some master build list somewhere.  The builder should search through all directories in the project for any solution files and build them.&lt;br /&gt;
* (DONE) No additional build scripts should need to be maintained beyond *.sln and *.csproj files.&lt;br /&gt;
* The build system should not break if a module is renamed or moved up or down in its directory structure.&lt;br /&gt;
** TODO: See if there's a way to explicitly register the &amp;quot;source root&amp;quot; as a system variable, instead of relying on relative paths.  Determine if doing so is actually an improvement, or if the ability to have multiple source directories on the computer is preferable.&lt;br /&gt;
* (DONE) When a programmer syncs to the latest version on the repository, they shouldn't have to remember to rebuild any changed code,  either because the changed module binaries have also been downloaded with the sync, or because the build process they use will know about the update and recompile the changed dependent modules.&lt;br /&gt;
* The build process should be sure to run unit tests, and properly report to the user any tests which have failed.&lt;br /&gt;
** TODO: The &amp;quot;build all&amp;quot; scripts are a little flaky about reporting to the user when something fails.&lt;br /&gt;
&lt;br /&gt;
== Coding tasks ==&lt;br /&gt;
These tasks are programming code the end users of Darwinbots 3 will actually be using.  At the end of this milestone, users should be able to successfully run some bot species in a sim, watch them evolve, and save and load sims and bots.&lt;br /&gt;
&lt;br /&gt;
=== DNA (Sunweaver) ===&lt;br /&gt;
The Sunweaver module will be complete aside from codules and chromosomes.&lt;br /&gt;
&lt;br /&gt;
* Parsing from human readable text to the internal data structure, and back to human readable text will be entirely supported.  Comments and formatting do not necessarily need to be preserved in this process.&lt;br /&gt;
* Only single codule DNA will be supported, just like the current DB2.  Support for multiple codules and chromosomes will be held off for a later milestone.&lt;br /&gt;
* Command list and DNA syntax should be mostly finalized.  Bots constructed or evolved using Milestone 1 should still be operable in the 3.0 release.&lt;br /&gt;
* Asexual reproduction of DNA with mutations will work properly.&lt;br /&gt;
* The following mutation types will be supported:&lt;br /&gt;
** Point mutations - A base pair is transformed into another random base pair.  The probability of each base pair being chosen is uniformly distributed.&lt;br /&gt;
** Insertion - A length of random base pairs will be inserted into a random location in the genome.&lt;br /&gt;
** Deletion - A random contiguous length of DNA will be entirely removed from the genome.&lt;br /&gt;
** Translocation - A random contiguous length of DNA will removed from a section of the codule and re-inserted in a different location&lt;br /&gt;
** Amplification - A random contiguous length of DNA will be copied and that copy inserted at a random location.&lt;br /&gt;
* A decision will be made as far as which mutation types might occur during reproduction, which might occur during any given cycle, and which can be either.&lt;br /&gt;
&lt;br /&gt;
=== Physics (Lodestone) ===&lt;br /&gt;
&lt;br /&gt;
* (DONE) '''Shape''' - A shape consists of collision detection geometry, but no mass, inertia, velocity, position, orientation, etc. information.  The following shapes must be supported at a minimum:&lt;br /&gt;
** Point&lt;br /&gt;
** Circle&lt;br /&gt;
** Rectangle/Polygon&lt;br /&gt;
** Capsule (with circular ends of different radii) NOTE: This is no longer a Milestone 1 requirement&lt;br /&gt;
** Trapezoid (Replaces Capsule for at least Milestone 1)&lt;br /&gt;
* (DONE) '''Point Mass''' - An inertial object with no physical dimensions.  That is, it has the 0th, 1st, and 2nd derivatives of position and orientation, as well as mass and moment of inertia.&lt;br /&gt;
** Point masses will support objects with no mass and/or inertia, and objects with infinite mass and/or inertia.&lt;br /&gt;
* (DONE) '''Body''' - A combination of one or more shapes and a point mass.&lt;br /&gt;
** Decide how to handle collisions between 0 mass objects and collisions between infinite mass objects.&lt;br /&gt;
** Decide how to handle two infinite mass objects squeezing another body between them (irresistable force and an unmovable object).  Disallowing infinite mass objects from moving is a valid solution.&lt;br /&gt;
* Bodies will be realistically simulated assuming constant acceleration between frames.&lt;br /&gt;
* No tunneling will be permitted.  No matter how fast a body is moving, it should be impossible to incorrectly pass through another body.  An adaptive integration step will be used for bodies where necessary to resolve collisions.&lt;br /&gt;
* Stacking of arbitrary depth will be stable.  Create a stacking matrix representing all the forces at work and invert to find the reaction forces.&lt;br /&gt;
* Figure out how to handle sliding.  If necessary it is permissible for all objects to have infinite coefficients of friction (eg: no slipping).&lt;br /&gt;
* Figure out how to handle rolling.  (No ideas here).&lt;br /&gt;
* It must be permissible for a body to be ''inside'' another body.  For instance, all bots must be inside the rectangular bounds of the simulation.&lt;br /&gt;
* All forces on a body during a timestep need to be enumerated and browsable.  This will be important for touch senses for bots, as well as handling bots &amp;quot;breaking&amp;quot; under load.&lt;br /&gt;
* Shapes changing shape or size are for another milestone.&lt;br /&gt;
* Joints and articulated bodies are for another milestone.&lt;br /&gt;
* Destructable shapes (for ant tunnels, etc.) are for another milestone.&lt;br /&gt;
* Fluid simulation (for smells) are for another milestone.&lt;br /&gt;
* Fluid simulation (for swimming) are for another milestone.&lt;br /&gt;
&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Vector graphics will be used.&lt;br /&gt;
* In order to use modern 3D hardware, each bot will really be a polygon.&lt;br /&gt;
* Curves (circles, ovoids, etc.) will be handled on the shader side to avoid issues with subdivision.&lt;br /&gt;
* Try out XNA and GDI.  Maybe even allow the user to switch which one is being used in an options panel somewhere.&lt;br /&gt;
&lt;br /&gt;
=== Substances ===&lt;br /&gt;
* nrg - The currency used to pay for actions and stay alive&lt;br /&gt;
* muscle - Used to strengthen actions.  There is an upkeep involved every cycle.&lt;br /&gt;
* fat - Used to store nrg.&lt;br /&gt;
* chloroplasts (leaves?)- Used to convert sunlight into nrg&lt;br /&gt;
&lt;br /&gt;
=== Veggies ===&lt;br /&gt;
The system to feed veggies will be in place and mostly finalized.  Veggies will receive nrg based on their surface area and how many chloroplasts they have.&lt;br /&gt;
&lt;br /&gt;
=== Combat ===&lt;br /&gt;
* A simplified combat system will be supported to allow for bots to eat each other and veggies.  This does not need to be the final system.  Depending on the state of the physics engine, this can either be shots, ties, or phagocytosis.&lt;br /&gt;
&lt;br /&gt;
=== GUI ===&lt;br /&gt;
* When loading the program, the user is presented instantly with a dialog to that effect.&lt;br /&gt;
* The main simulation window is a MDI child of the main program.&lt;br /&gt;
* User options panel:&lt;br /&gt;
** Add a species based on a DNA file on disk.&lt;br /&gt;
** Add a zerobot species with a user supplied length&lt;br /&gt;
** Edit mutation rates on a species&lt;br /&gt;
*** This should propagate to all currently existing bots of that species.  Or prompt the user if it doesn't.  Or prompt the user with a choice about which way to do it.&lt;br /&gt;
** Set the starting properties, numbers, and distributions for the spawn of a species.&lt;br /&gt;
** Autosave frequency&lt;br /&gt;
** Simulation settings.  In the future these will be attachable to shapes to allow for different properties in the same sim.  So keep this in mind when implementing.&lt;br /&gt;
*** Ability to change properties for veggies: sunlight flux.&lt;br /&gt;
*** Ability to change physics properties like gravity and drag.&lt;br /&gt;
*** Ability to set costs for bot actions and DNA upkeep, etc.  Reasonable default values will be provided.&lt;br /&gt;
*** Ability to set field size.  Ability to set field size to infinity.&lt;br /&gt;
*** Ability to set a random seed for simulation determinism.&lt;br /&gt;
** Ability to zoom in and out on the main simulation display.&lt;br /&gt;
*** (DONE) Using the mouse wheel&lt;br /&gt;
*** Using the keyboard&lt;br /&gt;
*** Using a GUI widget&lt;br /&gt;
** Ability to turn on/off graphical display, as well as set an update frequency.&lt;br /&gt;
** Graphs will be done in a later milestone.&lt;br /&gt;
&lt;br /&gt;
=== Disk operations (serialization) ===&lt;br /&gt;
* Save/load simulation settings&lt;br /&gt;
* Save/load an organism (a bot with information on its body levels, etc.)&lt;br /&gt;
* Leverage organism save/load and settings save/load routines for simulation save/load.&lt;br /&gt;
* All saved files should be parsable by external utilities (XML maybe)&lt;br /&gt;
* All saved files should be tiny (compressed XML maybe)&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4928</id>
		<title>Darwinbots3/Milestone 1</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4928"/>
				<updated>2009-06-15T07:10:54Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Graphics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the first milestone for Darwinbots 3, representing a bare minimum working version of the program, with all core subsystems in place (physics, DNA, etc.).  Essentially this is a simplified version of what Darwinbots 1 looked like.  These requirements best case wishful thinking.  Some requirements may need to be relaxed.&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* '''Assets''' - Files created during a user's use of Darwinbots.  This would include bots, simulations, settings, etc.&lt;br /&gt;
* '''The project''' - Darwinbots 3.  Not to be confused with a C# project.&lt;br /&gt;
&lt;br /&gt;
== Administrative tasks ==&lt;br /&gt;
These are &amp;quot;meta coding&amp;quot; tasks that are not involved directly in the creation or operation of the program, but are still necessary to accomplish.  Examples include programmer tools, documentation, and installation scripts.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
The program will have an installer which will properly and correctly install and uninstall the program using NSIS.&lt;br /&gt;
&lt;br /&gt;
* The creation of the installation program will be entirely automated or with as little user input as possible.&lt;br /&gt;
* The installer will properly create registry keys for the program to store information about where it's installed on disk, with the option to easily add new parameters to the registry as needed.  &lt;br /&gt;
* The uninstaller will remove these registry keys entirely.&lt;br /&gt;
* The installer will properly handle users installing a newer version on top of an older version.&lt;br /&gt;
* The uninstaller will prompt for removing assets, and if the user so chooses, entirely remove all assets.&lt;br /&gt;
* Assuming the user chooses to remove all assets, there shall be no trace of where Darwinbots was installed.  If a user installs then uninstalls Darwinbots, their directory structure should be identical to when they started.&lt;br /&gt;
&lt;br /&gt;
=== UnitTestSharp (DONE) ===&lt;br /&gt;
Unit test sharp is a unit testing framework in .NET constructed to meet the unit testing needs of the project.&lt;br /&gt;
&lt;br /&gt;
* (DONE) The user will be able to easily construct unit tests for a module they're working on, and add the running of these tests to the build process, so they are notified immediately when something breaks.&lt;br /&gt;
* (DONE) The module will be used to test itself, ie: eating your own dog food.&lt;br /&gt;
* (DONE) The user will be able to construct data driven tests, where the same test is run using different data.  Constructing and maintaining this data should be as easy as maintaining a spreadsheet in Excel.&lt;br /&gt;
* (DONE) The user should be able to double click on any failed test in the build process and be taken to the exact line which failed.&lt;br /&gt;
&lt;br /&gt;
=== Code coverage ===&lt;br /&gt;
A method to measure code coverage for unit tests will be set up (probably NCover).  Generating a report of code coverage for a given module will be as painless as possible (eg: double click).&lt;br /&gt;
&lt;br /&gt;
=== Build process (DONE) ===&lt;br /&gt;
A build process will be created and finalized, without any external dependencies beyond what can be placed in the repository.  That is, a user with a fresh XP install and a SVN client should be able to sync to the repository and double click on a script/program to entirely build the project, with no other user input required.&lt;br /&gt;
&lt;br /&gt;
* (DONE) Programmers should not have to explicitly register a solution with some master build list somewhere.  The builder should search through all directories in the project for any solution files and build them.&lt;br /&gt;
* (DONE) No additional build scripts should need to be maintained beyond *.sln and *.csproj files.&lt;br /&gt;
* The build system should not break if a module is renamed or moved up or down in its directory structure.&lt;br /&gt;
** TODO: See if there's a way to explicitly register the &amp;quot;source root&amp;quot; as a system variable, instead of relying on relative paths.  Determine if doing so is actually an improvement, or if the ability to have multiple source directories on the computer is preferable.&lt;br /&gt;
* (DONE) When a programmer syncs to the latest version on the repository, they shouldn't have to remember to rebuild any changed code,  either because the changed module binaries have also been downloaded with the sync, or because the build process they use will know about the update and recompile the changed dependent modules.&lt;br /&gt;
* The build process should be sure to run unit tests, and properly report to the user any tests which have failed.&lt;br /&gt;
** TODO: The &amp;quot;build all&amp;quot; scripts are a little flaky about reporting to the user when something fails.&lt;br /&gt;
&lt;br /&gt;
== Coding tasks ==&lt;br /&gt;
These tasks are programming code the end users of Darwinbots 3 will actually be using.  At the end of this milestone, users should be able to successfully run some bot species in a sim, watch them evolve, and save and load sims and bots.&lt;br /&gt;
&lt;br /&gt;
=== DNA (Sunweaver) ===&lt;br /&gt;
The Sunweaver module will be complete aside from codules and chromosomes.&lt;br /&gt;
&lt;br /&gt;
* Parsing from human readable text to the internal data structure, and back to human readable text will be entirely supported.  Comments and formatting do not necessarily need to be preserved in this process.&lt;br /&gt;
* Only single codule DNA will be supported, just like the current DB2.  Support for multiple codules and chromosomes will be held off for a later milestone.&lt;br /&gt;
* Command list and DNA syntax should be mostly finalized.  Bots constructed or evolved using Milestone 1 should still be operable in the 3.0 release.&lt;br /&gt;
* Asexual reproduction of DNA with mutations will work properly.&lt;br /&gt;
* The following mutation types will be supported:&lt;br /&gt;
** Point mutations - A base pair is transformed into another random base pair.  The probability of each base pair being chosen is uniformly distributed.&lt;br /&gt;
** Insertion - A length of random base pairs will be inserted into a random location in the genome.&lt;br /&gt;
** Deletion - A random contiguous length of DNA will be entirely removed from the genome.&lt;br /&gt;
** Translocation - A random contiguous length of DNA will removed from a section of the codule and re-inserted in a different location&lt;br /&gt;
** Amplification - A random contiguous length of DNA will be copied and that copy inserted at a random location.&lt;br /&gt;
* A decision will be made as far as which mutation types might occur during reproduction, which might occur during any given cycle, and which can be either.&lt;br /&gt;
&lt;br /&gt;
=== Physics (Lodestone) ===&lt;br /&gt;
&lt;br /&gt;
* (DONE) '''Shape''' - A shape consists of collision detection geometry, but no mass, inertia, velocity, position, orientation, etc. information.  The following shapes must be supported at a minimum:&lt;br /&gt;
** Point&lt;br /&gt;
** Circle&lt;br /&gt;
** Rectangle/Polygon&lt;br /&gt;
** Capsule (with circular ends of different radii) NOTE: This is no longer a Milestone 1 requirement&lt;br /&gt;
** Trapezoid (Replaces Capsule for at least Milestone 1)&lt;br /&gt;
* (DONE) '''Point Mass''' - An inertial object with no physical dimensions.  That is, it has the 0th, 1st, and 2nd derivatives of position and orientation, as well as mass and moment of inertia.&lt;br /&gt;
** Point masses will support objects with no mass and/or inertia, and objects with infinite mass and/or inertia.&lt;br /&gt;
* (DONE) '''Body''' - A combination of one or more shapes and a point mass.&lt;br /&gt;
** Decide how to handle collisions between 0 mass objects and collisions between infinite mass objects.&lt;br /&gt;
** Decide how to handle two infinite mass objects squeezing another body between them (irresistable force and an unmovable object).  Disallowing infinite mass objects from moving is a valid solution.&lt;br /&gt;
* Bodies will be realistically simulated assuming constant acceleration between frames.&lt;br /&gt;
* No tunneling will be permitted.  No matter how fast a body is moving, it should be impossible to incorrectly pass through another body.  An adaptive integration step will be used for bodies where necessary to resolve collisions.&lt;br /&gt;
* Stacking of arbitrary depth will be stable.  Create a stacking matrix representing all the forces at work and invert to find the reaction forces.&lt;br /&gt;
* Figure out how to handle sliding.  If necessary it is permissible for all objects to have infinite coefficients of friction (eg: no slipping).&lt;br /&gt;
* Figure out how to handle rolling.  (No ideas here).&lt;br /&gt;
* It must be permissible for a body to be ''inside'' another body.  For instance, all bots must be inside the rectangular bounds of the simulation.&lt;br /&gt;
* All forces on a body during a timestep need to be enumerated and browsable.  This will be important for touch senses for bots, as well as handling bots &amp;quot;breaking&amp;quot; under load.&lt;br /&gt;
* Shapes changing shape or size are for another milestone.&lt;br /&gt;
* Joints and articulated bodies are for another milestone.&lt;br /&gt;
* Destructable shapes (for ant tunnels, etc.) are for another milestone.&lt;br /&gt;
* Fluid simulation (for smells) are for another milestone.&lt;br /&gt;
* Fluid simulation (for swimming) are for another milestone.&lt;br /&gt;
&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Vector graphics will be used.&lt;br /&gt;
* In order to use modern 3D hardware, each bot will really be a polygon.&lt;br /&gt;
* Curves (circles, ovoids, etc.) will be handled on the shader side to avoid issues with subdivision.&lt;br /&gt;
* Try out XNA and GDI.  Maybe even allow the user to switch which one is being used in an options panel somewhere.&lt;br /&gt;
&lt;br /&gt;
=== Substances ===&lt;br /&gt;
* nrg - The currency used to pay for actions and stay alive&lt;br /&gt;
* muscle - Used to strengthen actions.  There is an upkeep involved every cycle.&lt;br /&gt;
* fat - Used to store nrg.&lt;br /&gt;
* chloroplasts (leaves?)- Used to convert sunlight into nrg&lt;br /&gt;
&lt;br /&gt;
=== Veggies ===&lt;br /&gt;
The system to feed veggies will be in place and mostly finalized.  Veggies will receive nrg based on their surface area and how many chloroplasts they have.&lt;br /&gt;
&lt;br /&gt;
=== Combat ===&lt;br /&gt;
* A simplified combat system will be supported to allow for bots to eat each other and veggies.  This does not need to be the final system.  Depending on the state of the physics engine, this can either be shots, ties, or phagocytosis.&lt;br /&gt;
&lt;br /&gt;
=== GUI ===&lt;br /&gt;
* When loading the program, the user is presented instantly with a dialog to that effect.&lt;br /&gt;
* The main simulation window is a MDI child of the main program.&lt;br /&gt;
* User options panel:&lt;br /&gt;
** Add a species based on a DNA file on disk.&lt;br /&gt;
** Add a zerobot species with a user supplied length&lt;br /&gt;
** Edit mutation rates on a species&lt;br /&gt;
*** This should propagate to all currently existing bots of that species.  Or prompt the user if it doesn't.  Or prompt the user with a choice about which way to do it.&lt;br /&gt;
** Set the starting properties, numbers, and distributions for the spawn of a species.&lt;br /&gt;
** Autosave frequency&lt;br /&gt;
** Simulation settings.  In the future these will be attachable to shapes to allow for different properties in the same sim.  So keep this in mind when implementing.&lt;br /&gt;
*** Ability to change properties for veggies: sunlight flux.&lt;br /&gt;
*** Ability to change physics properties like gravity and drag.&lt;br /&gt;
*** Ability to set costs for bot actions and DNA upkeep, etc.  Reasonable default values will be provided.&lt;br /&gt;
*** Ability to set field size.  Ability to set field size to infinity.&lt;br /&gt;
*** Ability to set a random seed for simulation determinism.&lt;br /&gt;
** Ability to zoom in and out on the main simulation display.&lt;br /&gt;
*** Using the mouse wheel&lt;br /&gt;
*** Using the keyboard&lt;br /&gt;
*** Using a GUI widget&lt;br /&gt;
** Ability to turn on/off graphical display, as well as set an update frequency.&lt;br /&gt;
** Graphs will be done in a later milestone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Disk operations (serialization) ===&lt;br /&gt;
* Save/load simulation settings&lt;br /&gt;
* Save/load an organism (a bot with information on its body levels, etc.)&lt;br /&gt;
* Leverage organism save/load and settings save/load routines for simulation save/load.&lt;br /&gt;
* All saved files should be parsable by external utilities (XML maybe)&lt;br /&gt;
* All saved files should be tiny (compressed XML maybe)&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4927</id>
		<title>Darwinbots3/Milestone 1</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4927"/>
				<updated>2009-06-15T07:09:55Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Physics (Lodestone) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the first milestone for Darwinbots 3, representing a bare minimum working version of the program, with all core subsystems in place (physics, DNA, etc.).  Essentially this is a simplified version of what Darwinbots 1 looked like.  These requirements best case wishful thinking.  Some requirements may need to be relaxed.&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* '''Assets''' - Files created during a user's use of Darwinbots.  This would include bots, simulations, settings, etc.&lt;br /&gt;
* '''The project''' - Darwinbots 3.  Not to be confused with a C# project.&lt;br /&gt;
&lt;br /&gt;
== Administrative tasks ==&lt;br /&gt;
These are &amp;quot;meta coding&amp;quot; tasks that are not involved directly in the creation or operation of the program, but are still necessary to accomplish.  Examples include programmer tools, documentation, and installation scripts.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
The program will have an installer which will properly and correctly install and uninstall the program using NSIS.&lt;br /&gt;
&lt;br /&gt;
* The creation of the installation program will be entirely automated or with as little user input as possible.&lt;br /&gt;
* The installer will properly create registry keys for the program to store information about where it's installed on disk, with the option to easily add new parameters to the registry as needed.  &lt;br /&gt;
* The uninstaller will remove these registry keys entirely.&lt;br /&gt;
* The installer will properly handle users installing a newer version on top of an older version.&lt;br /&gt;
* The uninstaller will prompt for removing assets, and if the user so chooses, entirely remove all assets.&lt;br /&gt;
* Assuming the user chooses to remove all assets, there shall be no trace of where Darwinbots was installed.  If a user installs then uninstalls Darwinbots, their directory structure should be identical to when they started.&lt;br /&gt;
&lt;br /&gt;
=== UnitTestSharp (DONE) ===&lt;br /&gt;
Unit test sharp is a unit testing framework in .NET constructed to meet the unit testing needs of the project.&lt;br /&gt;
&lt;br /&gt;
* (DONE) The user will be able to easily construct unit tests for a module they're working on, and add the running of these tests to the build process, so they are notified immediately when something breaks.&lt;br /&gt;
* (DONE) The module will be used to test itself, ie: eating your own dog food.&lt;br /&gt;
* (DONE) The user will be able to construct data driven tests, where the same test is run using different data.  Constructing and maintaining this data should be as easy as maintaining a spreadsheet in Excel.&lt;br /&gt;
* (DONE) The user should be able to double click on any failed test in the build process and be taken to the exact line which failed.&lt;br /&gt;
&lt;br /&gt;
=== Code coverage ===&lt;br /&gt;
A method to measure code coverage for unit tests will be set up (probably NCover).  Generating a report of code coverage for a given module will be as painless as possible (eg: double click).&lt;br /&gt;
&lt;br /&gt;
=== Build process (DONE) ===&lt;br /&gt;
A build process will be created and finalized, without any external dependencies beyond what can be placed in the repository.  That is, a user with a fresh XP install and a SVN client should be able to sync to the repository and double click on a script/program to entirely build the project, with no other user input required.&lt;br /&gt;
&lt;br /&gt;
* (DONE) Programmers should not have to explicitly register a solution with some master build list somewhere.  The builder should search through all directories in the project for any solution files and build them.&lt;br /&gt;
* (DONE) No additional build scripts should need to be maintained beyond *.sln and *.csproj files.&lt;br /&gt;
* The build system should not break if a module is renamed or moved up or down in its directory structure.&lt;br /&gt;
** TODO: See if there's a way to explicitly register the &amp;quot;source root&amp;quot; as a system variable, instead of relying on relative paths.  Determine if doing so is actually an improvement, or if the ability to have multiple source directories on the computer is preferable.&lt;br /&gt;
* (DONE) When a programmer syncs to the latest version on the repository, they shouldn't have to remember to rebuild any changed code,  either because the changed module binaries have also been downloaded with the sync, or because the build process they use will know about the update and recompile the changed dependent modules.&lt;br /&gt;
* The build process should be sure to run unit tests, and properly report to the user any tests which have failed.&lt;br /&gt;
** TODO: The &amp;quot;build all&amp;quot; scripts are a little flaky about reporting to the user when something fails.&lt;br /&gt;
&lt;br /&gt;
== Coding tasks ==&lt;br /&gt;
These tasks are programming code the end users of Darwinbots 3 will actually be using.  At the end of this milestone, users should be able to successfully run some bot species in a sim, watch them evolve, and save and load sims and bots.&lt;br /&gt;
&lt;br /&gt;
=== DNA (Sunweaver) ===&lt;br /&gt;
The Sunweaver module will be complete aside from codules and chromosomes.&lt;br /&gt;
&lt;br /&gt;
* Parsing from human readable text to the internal data structure, and back to human readable text will be entirely supported.  Comments and formatting do not necessarily need to be preserved in this process.&lt;br /&gt;
* Only single codule DNA will be supported, just like the current DB2.  Support for multiple codules and chromosomes will be held off for a later milestone.&lt;br /&gt;
* Command list and DNA syntax should be mostly finalized.  Bots constructed or evolved using Milestone 1 should still be operable in the 3.0 release.&lt;br /&gt;
* Asexual reproduction of DNA with mutations will work properly.&lt;br /&gt;
* The following mutation types will be supported:&lt;br /&gt;
** Point mutations - A base pair is transformed into another random base pair.  The probability of each base pair being chosen is uniformly distributed.&lt;br /&gt;
** Insertion - A length of random base pairs will be inserted into a random location in the genome.&lt;br /&gt;
** Deletion - A random contiguous length of DNA will be entirely removed from the genome.&lt;br /&gt;
** Translocation - A random contiguous length of DNA will removed from a section of the codule and re-inserted in a different location&lt;br /&gt;
** Amplification - A random contiguous length of DNA will be copied and that copy inserted at a random location.&lt;br /&gt;
* A decision will be made as far as which mutation types might occur during reproduction, which might occur during any given cycle, and which can be either.&lt;br /&gt;
&lt;br /&gt;
=== Physics (Lodestone) ===&lt;br /&gt;
&lt;br /&gt;
* (DONE) '''Shape''' - A shape consists of collision detection geometry, but no mass, inertia, velocity, position, orientation, etc. information.  The following shapes must be supported at a minimum:&lt;br /&gt;
** Point&lt;br /&gt;
** Circle&lt;br /&gt;
** Rectangle/Polygon&lt;br /&gt;
** Capsule (with circular ends of different radii) NOTE: This is no longer a Milestone 1 requirement&lt;br /&gt;
** Trapezoid (Replaces Capsule for at least Milestone 1)&lt;br /&gt;
* (DONE) '''Point Mass''' - An inertial object with no physical dimensions.  That is, it has the 0th, 1st, and 2nd derivatives of position and orientation, as well as mass and moment of inertia.&lt;br /&gt;
** Point masses will support objects with no mass and/or inertia, and objects with infinite mass and/or inertia.&lt;br /&gt;
* (DONE) '''Body''' - A combination of one or more shapes and a point mass.&lt;br /&gt;
** Decide how to handle collisions between 0 mass objects and collisions between infinite mass objects.&lt;br /&gt;
** Decide how to handle two infinite mass objects squeezing another body between them (irresistable force and an unmovable object).  Disallowing infinite mass objects from moving is a valid solution.&lt;br /&gt;
* Bodies will be realistically simulated assuming constant acceleration between frames.&lt;br /&gt;
* No tunneling will be permitted.  No matter how fast a body is moving, it should be impossible to incorrectly pass through another body.  An adaptive integration step will be used for bodies where necessary to resolve collisions.&lt;br /&gt;
* Stacking of arbitrary depth will be stable.  Create a stacking matrix representing all the forces at work and invert to find the reaction forces.&lt;br /&gt;
* Figure out how to handle sliding.  If necessary it is permissible for all objects to have infinite coefficients of friction (eg: no slipping).&lt;br /&gt;
* Figure out how to handle rolling.  (No ideas here).&lt;br /&gt;
* It must be permissible for a body to be ''inside'' another body.  For instance, all bots must be inside the rectangular bounds of the simulation.&lt;br /&gt;
* All forces on a body during a timestep need to be enumerated and browsable.  This will be important for touch senses for bots, as well as handling bots &amp;quot;breaking&amp;quot; under load.&lt;br /&gt;
* Shapes changing shape or size are for another milestone.&lt;br /&gt;
* Joints and articulated bodies are for another milestone.&lt;br /&gt;
* Destructable shapes (for ant tunnels, etc.) are for another milestone.&lt;br /&gt;
* Fluid simulation (for smells) are for another milestone.&lt;br /&gt;
* Fluid simulation (for swimming) are for another milestone.&lt;br /&gt;
&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Vector graphics will be used.&lt;br /&gt;
* In order to use modern 3D hardware, each bot will really be a polygon.  Be sure to adaptively subdivide as relative size increases.&lt;br /&gt;
* Try out XNA and GDI.  Maybe even allow the user to switch which one is being used in an options panel somewhere.&lt;br /&gt;
&lt;br /&gt;
=== Substances ===&lt;br /&gt;
* nrg - The currency used to pay for actions and stay alive&lt;br /&gt;
* muscle - Used to strengthen actions.  There is an upkeep involved every cycle.&lt;br /&gt;
* fat - Used to store nrg.&lt;br /&gt;
* chloroplasts (leaves?)- Used to convert sunlight into nrg&lt;br /&gt;
&lt;br /&gt;
=== Veggies ===&lt;br /&gt;
The system to feed veggies will be in place and mostly finalized.  Veggies will receive nrg based on their surface area and how many chloroplasts they have.&lt;br /&gt;
&lt;br /&gt;
=== Combat ===&lt;br /&gt;
* A simplified combat system will be supported to allow for bots to eat each other and veggies.  This does not need to be the final system.  Depending on the state of the physics engine, this can either be shots, ties, or phagocytosis.&lt;br /&gt;
&lt;br /&gt;
=== GUI ===&lt;br /&gt;
* When loading the program, the user is presented instantly with a dialog to that effect.&lt;br /&gt;
* The main simulation window is a MDI child of the main program.&lt;br /&gt;
* User options panel:&lt;br /&gt;
** Add a species based on a DNA file on disk.&lt;br /&gt;
** Add a zerobot species with a user supplied length&lt;br /&gt;
** Edit mutation rates on a species&lt;br /&gt;
*** This should propagate to all currently existing bots of that species.  Or prompt the user if it doesn't.  Or prompt the user with a choice about which way to do it.&lt;br /&gt;
** Set the starting properties, numbers, and distributions for the spawn of a species.&lt;br /&gt;
** Autosave frequency&lt;br /&gt;
** Simulation settings.  In the future these will be attachable to shapes to allow for different properties in the same sim.  So keep this in mind when implementing.&lt;br /&gt;
*** Ability to change properties for veggies: sunlight flux.&lt;br /&gt;
*** Ability to change physics properties like gravity and drag.&lt;br /&gt;
*** Ability to set costs for bot actions and DNA upkeep, etc.  Reasonable default values will be provided.&lt;br /&gt;
*** Ability to set field size.  Ability to set field size to infinity.&lt;br /&gt;
*** Ability to set a random seed for simulation determinism.&lt;br /&gt;
** Ability to zoom in and out on the main simulation display.&lt;br /&gt;
*** Using the mouse wheel&lt;br /&gt;
*** Using the keyboard&lt;br /&gt;
*** Using a GUI widget&lt;br /&gt;
** Ability to turn on/off graphical display, as well as set an update frequency.&lt;br /&gt;
** Graphs will be done in a later milestone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Disk operations (serialization) ===&lt;br /&gt;
* Save/load simulation settings&lt;br /&gt;
* Save/load an organism (a bot with information on its body levels, etc.)&lt;br /&gt;
* Leverage organism save/load and settings save/load routines for simulation save/load.&lt;br /&gt;
* All saved files should be parsable by external utilities (XML maybe)&lt;br /&gt;
* All saved files should be tiny (compressed XML maybe)&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	<entry>
		<id>http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4926</id>
		<title>Darwinbots3/Milestone 1</title>
		<link rel="alternate" type="text/html" href="http://wiki.darwinbots.com/index.php?title=Darwinbots3/Milestone_1&amp;diff=4926"/>
				<updated>2009-06-15T07:08:12Z</updated>
		
		<summary type="html">&lt;p&gt;Numsgil: /* Build process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the first milestone for Darwinbots 3, representing a bare minimum working version of the program, with all core subsystems in place (physics, DNA, etc.).  Essentially this is a simplified version of what Darwinbots 1 looked like.  These requirements best case wishful thinking.  Some requirements may need to be relaxed.&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* '''Assets''' - Files created during a user's use of Darwinbots.  This would include bots, simulations, settings, etc.&lt;br /&gt;
* '''The project''' - Darwinbots 3.  Not to be confused with a C# project.&lt;br /&gt;
&lt;br /&gt;
== Administrative tasks ==&lt;br /&gt;
These are &amp;quot;meta coding&amp;quot; tasks that are not involved directly in the creation or operation of the program, but are still necessary to accomplish.  Examples include programmer tools, documentation, and installation scripts.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
The program will have an installer which will properly and correctly install and uninstall the program using NSIS.&lt;br /&gt;
&lt;br /&gt;
* The creation of the installation program will be entirely automated or with as little user input as possible.&lt;br /&gt;
* The installer will properly create registry keys for the program to store information about where it's installed on disk, with the option to easily add new parameters to the registry as needed.  &lt;br /&gt;
* The uninstaller will remove these registry keys entirely.&lt;br /&gt;
* The installer will properly handle users installing a newer version on top of an older version.&lt;br /&gt;
* The uninstaller will prompt for removing assets, and if the user so chooses, entirely remove all assets.&lt;br /&gt;
* Assuming the user chooses to remove all assets, there shall be no trace of where Darwinbots was installed.  If a user installs then uninstalls Darwinbots, their directory structure should be identical to when they started.&lt;br /&gt;
&lt;br /&gt;
=== UnitTestSharp (DONE) ===&lt;br /&gt;
Unit test sharp is a unit testing framework in .NET constructed to meet the unit testing needs of the project.&lt;br /&gt;
&lt;br /&gt;
* (DONE) The user will be able to easily construct unit tests for a module they're working on, and add the running of these tests to the build process, so they are notified immediately when something breaks.&lt;br /&gt;
* (DONE) The module will be used to test itself, ie: eating your own dog food.&lt;br /&gt;
* (DONE) The user will be able to construct data driven tests, where the same test is run using different data.  Constructing and maintaining this data should be as easy as maintaining a spreadsheet in Excel.&lt;br /&gt;
* (DONE) The user should be able to double click on any failed test in the build process and be taken to the exact line which failed.&lt;br /&gt;
&lt;br /&gt;
=== Code coverage ===&lt;br /&gt;
A method to measure code coverage for unit tests will be set up (probably NCover).  Generating a report of code coverage for a given module will be as painless as possible (eg: double click).&lt;br /&gt;
&lt;br /&gt;
=== Build process (DONE) ===&lt;br /&gt;
A build process will be created and finalized, without any external dependencies beyond what can be placed in the repository.  That is, a user with a fresh XP install and a SVN client should be able to sync to the repository and double click on a script/program to entirely build the project, with no other user input required.&lt;br /&gt;
&lt;br /&gt;
* (DONE) Programmers should not have to explicitly register a solution with some master build list somewhere.  The builder should search through all directories in the project for any solution files and build them.&lt;br /&gt;
* (DONE) No additional build scripts should need to be maintained beyond *.sln and *.csproj files.&lt;br /&gt;
* The build system should not break if a module is renamed or moved up or down in its directory structure.&lt;br /&gt;
** TODO: See if there's a way to explicitly register the &amp;quot;source root&amp;quot; as a system variable, instead of relying on relative paths.  Determine if doing so is actually an improvement, or if the ability to have multiple source directories on the computer is preferable.&lt;br /&gt;
* (DONE) When a programmer syncs to the latest version on the repository, they shouldn't have to remember to rebuild any changed code,  either because the changed module binaries have also been downloaded with the sync, or because the build process they use will know about the update and recompile the changed dependent modules.&lt;br /&gt;
* The build process should be sure to run unit tests, and properly report to the user any tests which have failed.&lt;br /&gt;
** TODO: The &amp;quot;build all&amp;quot; scripts are a little flaky about reporting to the user when something fails.&lt;br /&gt;
&lt;br /&gt;
== Coding tasks ==&lt;br /&gt;
These tasks are programming code the end users of Darwinbots 3 will actually be using.  At the end of this milestone, users should be able to successfully run some bot species in a sim, watch them evolve, and save and load sims and bots.&lt;br /&gt;
&lt;br /&gt;
=== DNA (Sunweaver) ===&lt;br /&gt;
The Sunweaver module will be complete aside from codules and chromosomes.&lt;br /&gt;
&lt;br /&gt;
* Parsing from human readable text to the internal data structure, and back to human readable text will be entirely supported.  Comments and formatting do not necessarily need to be preserved in this process.&lt;br /&gt;
* Only single codule DNA will be supported, just like the current DB2.  Support for multiple codules and chromosomes will be held off for a later milestone.&lt;br /&gt;
* Command list and DNA syntax should be mostly finalized.  Bots constructed or evolved using Milestone 1 should still be operable in the 3.0 release.&lt;br /&gt;
* Asexual reproduction of DNA with mutations will work properly.&lt;br /&gt;
* The following mutation types will be supported:&lt;br /&gt;
** Point mutations - A base pair is transformed into another random base pair.  The probability of each base pair being chosen is uniformly distributed.&lt;br /&gt;
** Insertion - A length of random base pairs will be inserted into a random location in the genome.&lt;br /&gt;
** Deletion - A random contiguous length of DNA will be entirely removed from the genome.&lt;br /&gt;
** Translocation - A random contiguous length of DNA will removed from a section of the codule and re-inserted in a different location&lt;br /&gt;
** Amplification - A random contiguous length of DNA will be copied and that copy inserted at a random location.&lt;br /&gt;
* A decision will be made as far as which mutation types might occur during reproduction, which might occur during any given cycle, and which can be either.&lt;br /&gt;
&lt;br /&gt;
=== Physics (Lodestone) ===&lt;br /&gt;
&lt;br /&gt;
* '''Shape''' - A shape consists of collision detection geometry, but no mass, inertia, velocity, position, orientation, etc. information.  The following shapes must be supported at a minimum:&lt;br /&gt;
** Point&lt;br /&gt;
** Circle&lt;br /&gt;
** Rectangle/Polygon&lt;br /&gt;
** Capsule (with circular ends of different radii) NOTE: This is no longer a Milestone 1 requirement&lt;br /&gt;
** Trapezoid (Replaces Capsule for at least Milestone 1)&lt;br /&gt;
* '''Point Mass''' - An inertial object with no physical dimensions.  That is, it has the 0th, 1st, and 2nd derivatives of position and orientation, as well as mass and moment of inertia.&lt;br /&gt;
** Point masses will support objects with no mass and/or inertia, and objects with infinite mass and/or inertia.&lt;br /&gt;
* '''Body''' - A combination of one or more shapes and a point mass.&lt;br /&gt;
** Decide how to handle collisions between 0 mass objects and collisions between infinite mass objects.&lt;br /&gt;
** Decide how to handle two infinite mass objects squeezing another body between them (irresistable force and an unmovable object).  Disallowing infinite mass objects from moving is a valid solution.&lt;br /&gt;
* Bodies will be realistically simulated assuming constant acceleration between frames.&lt;br /&gt;
* No tunneling will be permitted.  No matter how fast a body is moving, it should be impossible to incorrectly pass through another body.  An adaptive integration step will be used for bodies where necessary to resolve collisions.&lt;br /&gt;
* Stacking of arbitrary depth will be stable.  Create a stacking matrix representing all the forces at work and invert to find the reaction forces.&lt;br /&gt;
* Figure out how to handle sliding.  If necessary it is permissible for all objects to have infinite coefficients of friction (eg: no slipping).&lt;br /&gt;
* Figure out how to handle rolling.  (No ideas here).&lt;br /&gt;
* It must be permissible for a body to be ''inside'' another body.  For instance, all bots must be inside the rectangular bounds of the simulation.&lt;br /&gt;
* All forces on a body during a timestep need to be enumerated and browsable.  This will be important for touch senses for bots, as well as handling bots &amp;quot;breaking&amp;quot; under load.&lt;br /&gt;
* Shapes changing size are for another milestone.&lt;br /&gt;
* Joints and articulated bodies are for another milestone.&lt;br /&gt;
* Destructable shapes (for ant tunnels, etc.) are for another milestone.&lt;br /&gt;
* Fluid simulation (for smells) are for another milestone.&lt;br /&gt;
* Fluid simulation (for swimming) are for another milestone.&lt;br /&gt;
&lt;br /&gt;
=== Graphics ===&lt;br /&gt;
* Vector graphics will be used.&lt;br /&gt;
* In order to use modern 3D hardware, each bot will really be a polygon.  Be sure to adaptively subdivide as relative size increases.&lt;br /&gt;
* Try out XNA and GDI.  Maybe even allow the user to switch which one is being used in an options panel somewhere.&lt;br /&gt;
&lt;br /&gt;
=== Substances ===&lt;br /&gt;
* nrg - The currency used to pay for actions and stay alive&lt;br /&gt;
* muscle - Used to strengthen actions.  There is an upkeep involved every cycle.&lt;br /&gt;
* fat - Used to store nrg.&lt;br /&gt;
* chloroplasts (leaves?)- Used to convert sunlight into nrg&lt;br /&gt;
&lt;br /&gt;
=== Veggies ===&lt;br /&gt;
The system to feed veggies will be in place and mostly finalized.  Veggies will receive nrg based on their surface area and how many chloroplasts they have.&lt;br /&gt;
&lt;br /&gt;
=== Combat ===&lt;br /&gt;
* A simplified combat system will be supported to allow for bots to eat each other and veggies.  This does not need to be the final system.  Depending on the state of the physics engine, this can either be shots, ties, or phagocytosis.&lt;br /&gt;
&lt;br /&gt;
=== GUI ===&lt;br /&gt;
* When loading the program, the user is presented instantly with a dialog to that effect.&lt;br /&gt;
* The main simulation window is a MDI child of the main program.&lt;br /&gt;
* User options panel:&lt;br /&gt;
** Add a species based on a DNA file on disk.&lt;br /&gt;
** Add a zerobot species with a user supplied length&lt;br /&gt;
** Edit mutation rates on a species&lt;br /&gt;
*** This should propagate to all currently existing bots of that species.  Or prompt the user if it doesn't.  Or prompt the user with a choice about which way to do it.&lt;br /&gt;
** Set the starting properties, numbers, and distributions for the spawn of a species.&lt;br /&gt;
** Autosave frequency&lt;br /&gt;
** Simulation settings.  In the future these will be attachable to shapes to allow for different properties in the same sim.  So keep this in mind when implementing.&lt;br /&gt;
*** Ability to change properties for veggies: sunlight flux.&lt;br /&gt;
*** Ability to change physics properties like gravity and drag.&lt;br /&gt;
*** Ability to set costs for bot actions and DNA upkeep, etc.  Reasonable default values will be provided.&lt;br /&gt;
*** Ability to set field size.  Ability to set field size to infinity.&lt;br /&gt;
*** Ability to set a random seed for simulation determinism.&lt;br /&gt;
** Ability to zoom in and out on the main simulation display.&lt;br /&gt;
*** Using the mouse wheel&lt;br /&gt;
*** Using the keyboard&lt;br /&gt;
*** Using a GUI widget&lt;br /&gt;
** Ability to turn on/off graphical display, as well as set an update frequency.&lt;br /&gt;
** Graphs will be done in a later milestone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Disk operations (serialization) ===&lt;br /&gt;
* Save/load simulation settings&lt;br /&gt;
* Save/load an organism (a bot with information on its body levels, etc.)&lt;br /&gt;
* Leverage organism save/load and settings save/load routines for simulation save/load.&lt;br /&gt;
* All saved files should be parsable by external utilities (XML maybe)&lt;br /&gt;
* All saved files should be tiny (compressed XML maybe)&lt;/div&gt;</summary>
		<author><name>Numsgil</name></author>	</entry>

	</feed>