We’ve been wanting to start our dev diaries for a while now.. And since we’ve only just began working on a new project it seems to be the perfect time. Our latest project is tentatively titled “Steam Machines” and it is classic top-down retro shooter. Here we go with our first Dev Diary of Steam Machines.
Today I wanted to show some progress on my pixel art for “Steam Machines”. As always at the beginning of a project I need some time to settle into the mood of the game. This is sometimes frustrating. One part of me wants to make visual progress and create useful results, but instead of being efficient I work alot on things that will never end up being used in the final game. Sometimes I just have to take long walks because the inspiration is gone and I need to find it again.
But the beginning of the project is also a very creative and fun time where Stefan and I talk alot about the elements we create and exchange ideas.
For example, in this picture you see the progress of the player ship we made during one of our sessions:
I tried several different designs and in the end we decided that for the time-being we’ll stick with #4. Neither of us are 100% satisfied with it, but we decided to leave it and went on with other elements. Maybe I will go back to it and modify it if I find the time. One of the main problems I have with it is that it looks a little bit weak and it is not very well visible over some parts of the background.
Another part I invested some time was in testing out some explosion animations:
Here is the animated .gif 2x the actual pixel size:
The idea was to have an explosion that shows the power of your gun and visualizes the direction of where the shot came from. It gives you the feeling that you are ripping your enemies apart with the gun. So I went through several different explosions until I came up with this one. It gives you a rather satisfying feeling when you blow up small ships with your gun.
Next week I will focus more on level assets an objects and will be able to show you some objects and tiles I’m currently making for one of the levels and also how we are going to build the levels.
Part of our concept with “Steam Machines” is to build a great editor to go along with the game. On the one hand it’s for our own purposes, but on the other we want to enable to community to contribute. So I’ve been putting a lot of time into some of the little details of getting the editor up and running. I’m hoping to show some more on the editor itself very soon, it’s going to be quite neat. It’ll allow you to pretty much mod most of the game!
One of the technical challenges I’ve been battling with is enemy paths and patterns. Top-down shooters very heavily depend on pre-defined paths and complex enemy patterns, so I wanted to get this right. The first implementation used Catmull-Rom splines. While they enable you to produce smooth lines relatively easy they are not perfect for a top down shooter since the curve is defined by 3 points. Try and make an S with that!
I ended up implementing a “point-based” system. Each point is reached by a certain “equation”. The equations I implented are based off Robert Penner’s easing methods (website). It allows me to build curves from any of those equations which ends up being much easier to control and way more flexible than splines are.
Next challenge was to get “constant” movement along the curve. This is tricky because a delta of 0.1 is not the same at the beginning of the curve than it is in the middle (unless it’s just a linear interpolation between 2 points). Solutions can be found all over the web, but most are quite heavy computationally, so not well suited for mobile usage.
The way I solved this is by finding points along the curve in even distances and interpolating linearly in between those. So essentially I am linearly interpolating along any kind of curve. Even though it might not be as accurate as the other way, I can’t tell the difference. If anyone has a better way of solving this problem, I’d love to hear it! (needs to be efficient, and that seems to be the main problem!)
Might do a separate post with some more specific implementation details on this as I haven’t found any good resources on the topic!