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.


  • Hi, you can use XSI Mod Tool for your background expolding-tiles adn even to place enemies.

    For movements, you can create "node-based" movements: goto node 1, now 2, and so. Repeat. Or ok, do some free movement.


    By Blogger Ultrahead, at 9:31 PM  

  • Hey!

    Yes, I have definitely thought about how to create backgrounds in a 3D package. But I didn't know I could create sprites in it as well, would it be better than to use photoshop for example?

    In the previous engine I used some "node-based" movements, but a lot of time it doesn't give you the feeling your looking for. It's a very nice way to create paths for the enemies though.

    Cool that your still reading the blog :-)

    By Blogger Kobingo, at 4:44 PM  

  • Hi, I'm actually trying to program a shmup myself in XNA right now as a "learning xna project". Bullet Hell Tactics is probably the first shmup I've seen written in XNA(or at least the best looking lol). I want to design mine with a lot of the features you mentioned you want to have when you create your engine. Think you might have any tips for my bullet management class? :)

    By Blogger Matthew Findlater, at 4:46 AM  

  • Hi!

    I don't really have a specifiec bullet management class. I use a general manager that can handle all of my game objects (including bullets). This manager removes objects that is no longer valid (destroyed) and put them in the internal "recycle bin". The next time I want to create an object of the same type I don't need to "new" it, I just use the object from the "recycle bin". This way I don't need to create and destroy object so often, and thats a good thing for the garbage collector.

    By Blogger Kobingo, at 9:08 AM  

  • It seems to be contagious - I too have just signed up to the XNA Creators Club. Great fun thus far - although I'm a serious newbie at this. I want to learn how to create something like StarFox on the Nintendo 64. Enemies, input, 3D rendering, shaders and all this stuff... Finding my feet among .NET and the XNA framework is fairly tough, though. :) Good fun, though - and rather pleasing when something goes well.

    Anyway, just thought I'd drop you a line since I'm looking forward to seeing what you can do, and what I can learn from you.



    By Blogger Scottie, at 10:22 PM  

  • Dear Sir,

    I have a launched new web site for .NET programming resources. I would like to invite to the as author and supporter. I hope you will joins with us soon.

    Thank You

    By Blogger RRave, at 12:53 PM  

Post a Comment

<< Home