This is (or was) one of the projects, that consumed my time for several weeks now.
On Ubuntu Linux you need a newer libsdl-image1.2 package than the one in the repository. Installing the newer Debian package does the trick.
When you start the game you can find an overview of the basic controls in the lower right corner. The normal cannon (space key or left mouse button) is a fast firing projectile weapon. However you'll need multiple hits with it before an asteroid finally breaks apart. The secondary weapon (called "sweeper") fires 10 projectiles at once with a small spread, making it effective at close range. However has a cooldown of 5 seconds so it can not be used that often.
As with every game there are some small bugs:
- The player collision is not really exact. It does not consider the players rotation (always checks as if the player would be looking up).
- If you hit an asteroid with the sweeper weapon at close range it might happen that more than two small asteroids are spawned.
Background and development
This game mainly was a playground to get a better feeling for the D programming language and to explore how a game could be programmed. It all stared with a course (development of computer games) Thomas Fuchsmann gave at the university. Since then I was somehow hooked up by this topic and so Asteroids became my official project for this course (due tomorrow).
However the game is not "just" an usual Asteroids remake. I guess when making a game every developer mixes in some other influences. Here are the specials:
- An "ingame" menu. That does't only mean the menu is part of the game, but that your are flying around in the menu. You can land in different docks to trigger several actions (e.g. start a new game, continue a game or exit).
- Particle effects. I don't actually know if the original Asteroids game had particle effects. Anyway, this game has particles with color. Thanks to Daniel Klier for inspiring me to write a basic particle system.
- Real thrusters. Well, as real as virtual thrusters can be. The players ship is equipped with 7 thrusters. Depending on your controls different thrusters fire and this causes the ship to move or rotate. Of course each thruster has particle effects corresponding to its strength. Just try to rotate the ship with the arrow keys and with the mouse. You'll see the difference if you look closely.
- Modern controls. Sort of. You can move your ship with the keyboard (basic WASD controls known from ego shooters) and rotate it and fire with the mouse (this makes crazy flying quite funny). You can also rotate the ship with the arrow keys. More or less the standard controls for PC games today, but now you can play Asteroids in this style, too.
I also worked on a way to really shatter the asteroids instead of just replacing them by smaller ones. However this didn't really worked as I wanted (concave polygons can be troublesome fellows) and it was to unreliable to give a good gameplay experience, so I removed it again.
Another drawback: The game can only be played on a fixed 800x800 pixel window right now. It would not be much effort to allow different sizes or a full screen mode but I simply didn't considered it important enough to devote time to it.
Technically I've learned quite a lot during this project. Several ways to structure your game with all sorts of pros and cons, architecture of an engine and even some details about math and algorithms. I only used OpenGL, SDL and SDL_Image as a basis, the rest was all done from scratch (starting from an N-Tree for the scene graph up to collision detection).
Turned out that D was quite a nice language to work with. Even if it's not really at home on 64 bit Linux yet (the game was developed with the GDC compiler on Ubuntu 64 bit). You also need wrappers for some stuff but it's still the most productive compiled language I've worked with so far. I'll definitely use this language more often now. However I might try to rewrite the game with some nice libraries and might take a look at Tango. Doing it all from scratch produced a lot of really ugly code that would need ages to clean up.
Please let me know what you think about the game (e.g. post a comment or drop me a mail). Much fun. :)