Solar Empire took a large amount of my childhood. It was brilliant inadvertent training in software development and team projects. During the time when I was an active developer we had over 200 active players producing over 50000 hits per day; cumulatively, our distributions have been downloaded over 40000 times. At the time it was an active rewarding community but the central developers eventually left for bigger things. The project is on hold until I find a team of competent developers who want to continue development in their spare time.
I joined the Solar Empire SourceForge project after contributing to an independent server. At that point in time there were over three developers working on separate distributions and my job was to organise the file releases and respond to bug reports. Eventually I took over the project and became the lead developer. I was even interviewed by the Online Multiplayer Gaming Network, although that review/interview website does not compare to the likes of GameSpot.
Solar Empire used a lot of Computer Science theory but I didn't realise it at the time. The autowarp system is an implementation of Dijkstra's algorithm for finding the shortest distance between two vertices in a graph. There is a lot of potential here: I liked the idea of using weighted graphs to take star distances into account. I optimised the algorithm by performing a single database query to retrieve all the stars and processing the dataset. This was all done naively, without any academic training.
The map was a numbered graph, peppered with graphics to signify the properties of each star system (vertex). Graphs initially had a upper bound of six edges per vertex and this was reflected in the database structure; I adapted this to allow unlimited edges (unfortunately a tradeoff between the amount of functional dependencies and database performance).
Arbitrary maths equations were used in conjunction with a random number generator to power most of the game features. The most underdeveloped aspect was the battle system which was simply of n versus m fighters plus a hint of randomness.
In the end I spent most of my time ensuring that the SQL statements were safe from SQL injections, improving user account authentication (hashing, salts), and trying to ensure sequential consistency through conditional transactions. Most of my techniques were derived from internet blog articles.
The project was written procedurally with a lot of ideas implemented slightly differently over many files. My work became an exercise in refactoring and eventually I realised that my time was better spent elsewhere. It would take a complete rewrite to produce a reliable product.
- GD Image library
- XHTML/CSS for layout
- SVN (CVS in the beginning)