Shmup Development (using XNA and C#)

Tuesday, December 11, 2007

The shmup framework/engine for XNA in development

It has been some time now since the last post and I havn't been doing any real XNA programming since I finished the Bullet Hell Tactics demo.

I have been thinking a lot about what the next project should be. I have thought about 3D engines, game engines or just game frameworks (to speed things up a bit when starting other projects)... Then I got the perfect idea about what to do! I should continue to work on my shmup framework/engine, I have already started and also created a shmup game with it so I now know how it should be done.

The engine I used for Bullet Hell Tactics was a good start, but while I was creating the game I found some mistakes and missing features I would like to include:

- It was not very easy to create levels. The only level in the game was created with XML, that itself is not a bad idea but the implementation was not the greatest. My idea was that all enemies could be specified directly in the XML file. That required a lot of thinking about how the enemies could be created (and also a lot of XML code). In the end I just created many different classes for the enemies, that was much easier than trying to specifiy them in XML.

- The engine was not designed to recycle destroyed enemies/bullets. If I someday what my shmup engine running on Xbox 360 I must recycle objects (cause of the garbage collection). In a shmup game a lot of objects (enemies, bullets, particles, explosions) is created and destroyed so recycling objects is a very good idea.

- Weaponsystem and upgrades for players was not supported. Also rendering of sprites and particles could be faster.

- It was not very easy to create enemy movements/patterns and in the end I instead used different velocity/acceleration parameters. I would like it to be easy to create patterns without those. Maybe creating the movements in another application and then import them into the game.

- Bullet Hell Tactics didn't have much of a intersting background (just a spinning skybox). It did the job well but in the end I would like a more dynamic world to blow things up in.

- Model animation was not supported by the engine, this time I want the enemies to be a little more interesting.

- Enemies in group (waves) was not supported.

This time I also would like it be of use for others that wants to create a shmup game. Maybe I'll put it up on sourceforge or something similar (though this is not certain).

Maybe you who read this have some ideas of what a shmup framework/engine should include, just write me, it would be interesting to discuss.