Tutorial - Level Design


The level design process of a game is not an easy task. It doesn't involve ideas, or cool mechanics or nice aesthetics and cool environments, it is more about designing a learning curve so that your players know how they can interact with the world you created.

Having the right insights to take a design decision is crucial, it can lead you to a better understanding of both your game and your audience.

When designing Bard's Lesson I had to keep something in mind:

The game is about music, so the learning curve must teach both the game's mechanics and music theory.

If you already played the game you realized that each bird has:

  • A pitch
  • A duration
  • A color

The Design Process

The first two elements are obvious, a note have a pitch and a duration, that's how music works. But why did I chose to each bird to also have a color? Well, I won't elaborate too much on this, each color is a different pitch! This is because I couldn't expect from a beginner that it would be easy to identify the pitch of each note by listen to it, so a visual clue would be 10000x more effective.

The Tools

In Godot Engine, a tool script allows you to use the logic you wrote in a GDScript both in the runtime of your game and in the Godot Editor.

So, to design a level I needed at least two insights:

  • Since in music a time measure tells how many notes a compass can have, I needed to know, while designing each level, the current total duration (the sum of the duration of each bird)
  • I also needed to easily change both the pitch and duration of the birds and get the visual feedback of both the total duration and the pitches tha each level has

To do this I made two simple tool scripts and also made use of export variables, so that the birds change their color whenever I changed their pitch. The first script would count the total duration by printing the sum of  the duration of the children of the Node the script is attached to. The second script would change the row which the bird's Sprite node should use, this way each pitch is mapped to a row in the bird's sprite sheet:

The Tempo Counter

The algorithm behind the Node that would count the total measure of the level was simple:

  • When the Node is _ready it will calculate the total duration and print it in the console
  • To calculate the total duration it would run through each child and add its duration to the total duration
  • Whenever the amount of children changed, it would recalculate the duration and print it again.

And this would only happens if the script is running in the Editor.

Also, I would like to trigger the counting again whenever I want, so I added a simple trigger using an exported bool variable with the calculate_duration() method being used as setter function, so I added a setget keyword as well. Then whenever I wanted to know the total duration of a level, I just needed to click on the bool variable in the inspector and look at the console.

This allowed me to easy design how many birds I would use in each level while keeping consistency to the game's theme (music). This is due to the time measuring. In music notation each compass(which I call staff in the game) can only have a given amount of total duration. In Bard's Lesson each level is a compass, and currently all levels have 4/4 time signatures. This means that the total duration output shouldn't exceed 4.0 and also that a crochet is equivalent to 1.0 measuring.

Designing a Level

With these tools in my disposal I was able to create the levels aiming for a better understanding of the mechanics from the player's perspective. For instance the first level is made fully with birds with the same pitch, but different durations. So that the player understands this aspect first while using one key only.

The purple color is related to the first pitch, a C5 note, so every bird in the first level is a C5 with different duration that in total sums up a 4.0 compass.

The player is only able to complete a level if he/she matches every note of the level.

I'm very glad that this approach worked well, until now every player I saw playing the game understood these concepts!

As you can see in this Let's Play video by DevinCrystie after 2 tries to finish a level without "matching" every note, even by knowing nothing about music ( in the starting of the video was stated that she didn't know nothing about music) learned that the top UI element, which represents a music staff with the time measure, represents how many notes were matched already and gives a clue of how many are still to be found! This is awesome, isn't it? It also represents, with colors, the pitch of the notes, and with music symbols, their duration.

This is it for this tutorial, since it is more design related I can only provide insights about my design process, nothing too "technical". I hope you enjoyed it!

This tutorial went out as a 48h early access post in Patreon <3

That's it, keep developing and until the next time!

Get Bard's Lesson

Download NowName your own price


Log in with itch.io to leave a comment.


Looks like the images are broken, could you upload them through itch.io instead of hotlinking them from patreon?