How I designed the level system in Sky Diver Classic

Developing a game, you face a myriad of decisions every day. And in many cases, there won’t be a clear answer. In professional environments there are many factors to consider like budgets, human resources, complexity, monetization, return on investment, etc. that will make the decision process quite hard sometimes… In a side project like Sky Diver, even if you won’t need to consider some of these aspects, the decisions aren’t necessarily easier. You have an extremely limited time and tight budget! 

So, focusing on flexibility and efficiency is key. Which is what I tried to do when I started planning how the levels would be in the new version of Sky Diver Classic: I wanted to be able to build levels fast and reuse the content as much as possible.

The levels in the version released 10 years ago were based on a simple floor graphic that was sliced to make three different sizes of island. This had the advantage of being extremely easy and quick to implement, considering I didn’t have game development tools or game engine back then. But keeping independence between islands, dangers and color schemes gave me enough flexibility to mix and add some variety to the game. 

For the new version, however, I wanted better looking islands. I needed to be able to have different shapes and styles. How could I manage to create many more shapes of islands by keeping the time spent to a minimum?

Instead of having just one single graphic to slice, I decided to use a quite common technique in games: tile palettes

By drawing different basic building blocks (tiles) that could be combined like a mosaic to create a bigger object, I could take advantage of the tools in Unity to quickly draw different islands in engine. I could also create other different palettes to achieve new island styles.

The process of drawing islands with tiles is fun and flexible

This gave me enough flexibility to build a relatively big number of different islands in little time. I could also apply different movement patterns to them which was nice.

Different islands created with the tile system

With great flexibility comes great complexity, and that meant designing a better Level System that I originally had. I wanted the game to have a list of “Worlds”, each of them defining some parameters like colors, background and dangers, and referencing a list of levels. I also wanted these levels to be able to override some of the parameters from the world, so I could have some special levels that break the difficulty pattern.

My first iteration of the system had the islands being independent from the Level configuration. This was handy as I could define the parameters as wind, dangers and VFX independently of the islands. Then each World would reference a list of these levels.

After some time using this system, I realized I was essentially duplicating the data. I had ended up creating a Level configuration for each island, and most of the parameters in them were the default ones as the World configuration would include the main settings. So, I decided to combine them to make things a bit easier. Each island would have its own level parameters. That way I could leave the default settings for generic islands and adjust them for special levels.

The first version of the game was submitted with the old system, but the next version I’m working on comes with the improved one (and a myriad of other tiny improvements). This goes to show that it’s never too late to re-do something!

Keeping the code tidy is really important in all types of projects. The longer you work on something the messier it will get, so it’s not uncommon to re-do (or refactor, as we usually call it) big chunks of the code to improve the quality and the scalability.

Want to know more about any other game development topics or issues? Leave me a comment and I’ll be happy to write about it!

Want to try Sky Diver Classic? Here is the link: https://t.co/MDiQYuDTOm?amp=1

Leave a Reply

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