I'll be happy as long as it's object oriented.
Made a neural network mod for the current source (Or I think it was 2.43.h or something) and it was a real pain just finding my may through the source.
To make a long story short the current source is a spagetti monster and it took me a lot longer than expected to do the things I wanted, had to make changes in all sorts of places.
So the more generic DB3 is the happier I'll be
For instance it would be very nice to have a class for serializing a deserializing, and it would generaly be nice to be able to just inherit a class and overload whatever you need to make your mod.
A mod should never (Or atleast very rarely) need to change the base classes.
This way mods could also easily be developed as a branch and merged with trunk when ready (Provided the trunk hasn't changed too much). And if theres a common interface for adding a mod then they could just be enabled from the gui instead of having to build a new drop.
And as DB3 grows it would also be very nice if there where some guidelines for development, atleast a bare minimum code standard and some good tips on making propper OO code. And code reviews would be great if it's actualy possible to uphold, since theres a lot of less experienced programmers who may be checking in code that will cause a lot of trouble in the long run. If the code standard isn't too strict then a code review shouldn't take long, just enough to make sure the code or it's general structure doesn't cause problems in the long run.
The thing is, you can't just make the whole source generic enough to support any new features that may come that would take too long and in the end it would just end up being harder to read the source and harder to tell what it's real purpose it So the structure needs to be expanded as the source grows, and some people may not know exactly how to do this. So if it's possible to uphold a quick code review for new source it would probably save us a lot of trouble in the long run. Possibly ask people to submit a simple class diagram or update the apropriate one, with a brief explanation of what has changed, this way it would be easier to tell right away if it would be enough to just give this new code a quick glance of if you need to read it more thoroughly.
On a not so unrelated note, does anyone know if theres a free version of FogBugs or maybe another similar program we could use for free ? Would make some of the things I'm suggesting a lot easier to manage.
First and foremost, what in the world is fogbugs?
Second, yeah, once I know what it is, I say there is a 90% chance I can get my hands on it (or something like it).
Third, you should download the source and take a look yourself. Almost all these suggestions are already (more or less) there. We also use (although I need to start catching up with this, since I have slacked off a little) Unit Testing, to ensure that all classes do what they should, how they should, including throwing exceptions and the like. We also want to use a code profiler, but can't find one for free (well, actually, I think even something under $100 would be acceptable at this point.)
Honestly, if anyone has been making poorly coded classes, I am probably the culprit I am still learning the ins and outs of C#. On the other hand, I am also probably the most capable of identifying and correcting errors, so I redeem myself quite quickly (and I, unlike many programmers, have no problems with people rewriting my code in better, or clearer ways.)
Actually, might you be interested in joining the project? I could use a sidekick in my quest to unravel the workings of Numsgil's mind. He leaves me hanging a lot on what needs to be done, and I don't want to make any executive decisions on my own (he was the originator of this whole project after all). Even if you don't want to do the coding, you at least seem to be thinking along the same lines, so it would be helpful to have you available for consulting (not that big questions won't end up here anyway.)
Getting myself back on track; we did indeed attempt to make all of the classes that one might override easy to extend. For instance, the robot class contains two objects of importance, a robot body, and a brain. One could extend the robot class to have multiple bodies or brains, or could extend the body or brain class to change the shape of the robot, or the behavior.
Also, there is an IShape interface that can be used to describe any shape in the simulation.
One final thing: when writing the code for the mask over a robots memory, a clever thing occurred to me. I realized that in later versions it might be useful if, for instance, on bot in a multibot could apply its mask over the memory of one of its connected bots, effectively allowing the connected bot to act using data from the bot whose mask is being applied. Sort of a "If I were you, this is what I would do" situation, but in this case "I think I am you, so now I will do that which I would do if I were you".