Over-Engineered Invaders - Post Mortem

"Over-Engineered Invaders" was my June entry into #1GAM. It's not publically available as I was lazy and used copyrighted graphics from the original Space Invaders. Having said that, the main reason for creating it was to put some of my own framework to the test. The results were certainly enlightening…

What Went Right

Found some weaknesses

This might not sound like something positive, but a key part of me writing the game was to find out where my own code and process was below-par.

Needless to say, I found plenty of places to improve, and building a quick project really highlighted them. Some areas of code are poorly written, and there are other areas of functionality are missing completely. I never really realised how much of a help Flixel is, so it was certainly an eye opener.

Found some strengths

One part that went absolutely right was the custom entity framework. I used a very simple version of component-based entities when creating Ineptia, and even though it was crude it really helped. This time around I used an entity system approach, and it worked out better than I ever could have hoped.

In previous iterations I have used components that have data and behaviour mixed together. It works well enough, but one thing that always bothered me was deciding which component should do what, and how they should communicate. With entity systems, the component is just data and systems are just behaviour. It makes breaking down data and behaviour much easier, and because systems can access multiple components at once there is rarely a need for them to communicate with other systems.

With this approach, systems are added to the World and can then register their interest with one or more components. For example, you can have a system that only cares about entities with a PlayerComponent attached. Like components, systems can be added and removed at runtime, so new behaviours can be added dynamically.

There's a couple of gotcha's, and it requires a slightly different way of breaking things down, but it works rather well.

What Went Wrong

No release

Although it wasn't very polished, but the main reason for keeping the build private was the use of copyrighted graphics. Now I'm pretty sure the lawyers wouldn't have come to get me, but you can never be too careful.

Late start. Again.

I moved house at the end of May, and the various bits of move prep spilled into June. Coupled with work deadlines it didn't leave me much time or energy for game development, so I didn't start until very late in the month. If I had started earlier I would have been able to change out the graphics and release something.

No inspiration

Although I enjoyed figuring out the technical aspects of the project, the idea of cloning Space Invaders didn't really trigger my imagination. I've always felt like I spend more time trying to solve software problems rather than gameplay ones, so I wasn't really expecting this.

Lessons

Start earlier

I'm writing this two weeks into June, so I guess I failed that already…

Don't use copyrighted material

This one speaks for itself really.

Make something I enjoy

Space Invaders was fun, but technical challenges alone don't motivate me as much as I thought they would. There needs to be some creative aspect in order to inspire me to build something.


June's #1GAM Entry - Over-Engineered Invaders

Everything I've created for #1GAM so far has been written in Flash and the excellent Flixel library. One lesson that has constantly come up is that constant practice with a set of tools makes it easier to build things using them.

This is not exactly a shocking discovery, but for some reason it totally escaped me until now.

With that in mind, this month I decided to make something with BlitzMax and a custom framework I've been building on-and-off for the last few years. It's something I've been using to build a large hobby project of mine, and what started as a few helper libraries has started to encompass everything from rendering to component-based entities.

However, the problem with building the game and framework together is that it's not giving me practice with all the various parts that make up a game.

So June's entry is called "Over-Engineered Invaders". Space Invaders seemed like a good test subject: it has a nicely defined loop, a couple of different entity types and the rules aren't too complicated. The name comes from the fact that Space Invaders really doesn't need a resource manager, rendering pipeline or customizable entity system.

In order to get something up and running quickly I used the original Space Invaders graphics, so for copyright reasons I won't be making the download available until I can replace the assets. Trust me, you're not missing anything.

I learnt some really important stuff in the process, and as always there will be a post-mortem in the next week or so.

"Over-Engineered Invaders" Project Page