Fixing a Boring Enemy


Players will forgive an independent developer for many things (rough art, mediocre sound design, small glitches, etc…), however boring gameplay is one thing that will consistently make a player put down a controller.  While working on the announcement trailer for Neon Aileron, I noticed that some of the enemies looked dull and lifeless.  For this article, I wanted to take a look at one such enemy and show how I recently updated this enemy to make it more interesting.

The Dragonfly Enemy

Neon Aileron features enemy space ships that have insect-like forms.  The enemy we will be discussing today is styled after a dragonfly.  Admittedly, this is an artist’s interpretation of a dragonfly, since it doesn’t have the same number of wings or legs.  This is a later-level enemy that can take significant damage and should put up a decent fight.  Below is an image of how this enemy looked to begin with:

Why This Enemy is Boring

  • Unconvincing Flight – To save on animation time, I attempted to animate flight using a highlight on the underside of the dragonfly to insinuate some type of alien propulsion.  I paired this with a smoke animation art that was created for other purposes, however the combination doesn’t convince me that this enemy should be flying.
  • Lackluster Movement – Different enemies should have different movement patterns.  The dragonfly in the above image moves in a linear pattern, similar to many other enemies in the game.
  • Random Shot Spawn Location – Where are the fireballs coming from?  Admittedly, many old school shooters don’t offer a source point for weapon shots, but this bothered me with this enemy.  Additionally, there is no “forecasting” with this shot and the shot cadence is too regular; to the point where the player wouldn’t be able to get in front of this enemy to shoot at it.

Fixing the Dragonfly

Wing Animation

To give a suggestion of flight, I created a second wing position to animate the wings of the dragonfly.  This isn’t the most advanced animation, but it looks more convincing than the previous animation.

Unique Movement

A core concept of good game design is that all enemies should have their own unique movement.  As previously mentioned, the linear movement of the dragonfly is similar to that of other “easier” enemies in the game.  Because this enemy is inspired by a dragonfly insect, I gave it movement similar to that of a real dragonfly.  This movement will now be unique to this enemy and has the added bonus of making it harder for the player to shoot.

Leg Animation

Leg animation was added purely as polish, though it does also somewhat forecast movement.  This helps sell the movement and generally makes the enemy look more alive and interesting.

Gun Animation

In this image, I have added an animation where the head opens and a gun extends to fire the projectile.  This improves the enemy in the following ways:

  • It forecasts the shot, which gives the player time to react.
  • It shows that this is not just a big dragonfly, it is actually a mechanical ship.
  • It provides a specific origin point for the shot.  We are no longer just spawning projectiles based on a random point on the dragonfly’s body.


Finally, I added a slight kickback upon firing.  Kickback is a great effect because it doesn’t require any new art or animation, but has a significant visual impact.  Just knock the x position back a couple of pixels, wait a frame, and set the x position back to the original position.


To show how all of these updates improve our enemy, here is a quick before and after reference.  Hopefully you’ll agree that the “after” concept is more interesting and makes for a more enjoyable experience.  Feel free to post in the comments or contact me if you have any questions about how these effects were achieved.




Neon Aileron is still in the alpha phase of production.  Any of the content shown here may be subject to change prior to final release.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *