Swang Development Log — Graphics & Physics

Joel Besada
3 min readOct 14, 2017

--

View in fullscreen

The game looks completely different now! Well, it might seem like a drastic change in style from before, but this is the aesthetic that I’ve had in my mind as soon as I started composing the music for the game. So it’s good to finally have replaced the previous placeholder graphics with something that is more in line my current vision.

I’m by no means an experienced artist, so it takes a lot of effort and iteration for me to get to something that looks okay. I do however enjoy the whole process, even if it tends to be painstakingly time consuming.

I’ve spent a lot of time the past months looking at background art for different games for inspiration. It’s fascinating how much they affect the general feeling of the game compared to how little you actually spend looking at them in detail. I’m glad I did the research though, as it gave me a bunch of good ideas on how to make a pleasing background landscape with just a few different elements put together.

As for the character design itself I wanted the player to be some sort of animal or creature, and weirdly enough it just made a lot of sense for me that it should use its tongue to swing around. So the natural choice was to make it into a frog- / lizard-like character. I also wanted to avoid unnecessary and hard-to-animate appendages, so I decided to give the character the shape of a ball. It might not be the most interesting character to look at, but it certainly gets the job done.

While trying out this character design I started to stumble down a path which changes how the game works on a fundamental level. Being shaped like a ball, you sort of figure that it should behave like one as well. So I started working with a physics engine (instead of the basic vector-based collision detection I had before), and removed the previous instant death mechanic when touching any wall.

View in fullscreen

I found that this made the game feel a lot more playful. The walls and ground in the game can now be used as tools to guide the player forward, instead of as a means of punishment. There’s a certain feeling of satisfaction to be had from rolling and bouncing around carelessly.

This of course drastically lowers the difficulty of the game compared to before. But that’s not necessarily the whole truth, because what’s lowered is only the implied default difficulty. I will still be able to lay out hazards such as spikes and endless pits to ramp up the difficulty at a steady rate. I’ll have much more control over the pacing of the game, as I’ll now be able to easily build a set of introductory levels that don’t automatically kill you on your first mistake. This will give a good playground for the player to get accustomed to the mechanics before being thrown into more difficult challenges.

When starting the project I hesitated to use a physics engine because I was afraid that it would make the swinging mechanics too hard to control, especially with my one-button control scheme. Relying too much on realistic physics in a platform game runs a big risk of making the controls feel sluggish and unresponsive.

However, with the approach I have opted for now I decided to still keep the linear and predictable swing motion, and only applying the real world physics outside of swings. So I essentially disconnect the player from the physics engine during a swing, and turn it back on again once they release. I’m happy with the end results, and I don’t feel like the swinging motion feels unnatural in contrast to the physics driven motion.

But don’t take my word for it, please try it out yourself and let me know what you think! You’ll find the latest build to try in your browser here.

Playing the demo you might notice some jerkiness with the collisions. I’m aware of this issue and I have a fix in mind that I’m fairly certain will work. I’m excited to try it out, and if all works well I’ll have another post to publish soon to explain the problem and how I went about solving it. See you then!

--

--

Joel Besada

Software indie | Previously engineer @Shopify (Shop app), @tictail | Also building things at @MinMaxGG