From the blog



Mechtronaut is a 2D side-view platformer in Game Boy style. This is a group project that I created together with two of my friend, Tim and Wesley, on Global Game Jam Groningen 2020.

This is a game jam project instead of an academic project. All the developer and designer have to create an entire game within a given time. We created Mechtronaut in 48 hours.

You will become a machinist in a giant machine. There are dozens of monsters who want to break into your machine and you have to deliver the machine components to the hole that the monsters make to patch it. This is what you can and only can do because you are just a machinist.

In 48 hours…

It started in the afternoon of a Friday. We finished the first version of the design that evening. We also had an idea that let the player use different components to patch different holes. However, this wasn’t implemented because of the limited time.

What I achieved in these 48 hours is the difficulty system. The difficulty system is based on the time that the player plays. It increases over time. And eventually, it comes to a fixed difficulty.

Difficulty system

There are several elements that influence the difficulty, which are:

  1. The chance of a hole becoming a broken hole.
  2. The time cost of each stage of a broken hole.
  3. The chance of spawning a monster once a hole is fully broken.

Every broken hole has different stages: Not broken and broken stage 1 to 5. If a broken hole is at stage 5, means it’s fully broken and it has a chance to spawn a monster.

There is a variable called “difficulty”, which controls the global difficulty. This specific variable is directly linked to the playtime—it increases when the time goes. And this variable affects the last two elements that influence the difficulty like this:

private void DifficultyAdder()
    difficulty += Time.deltaTime / 60;

    if (secondsPerStage >= 4)
        secondsPerStage = secondsPerStageBase - 2 * (difficulty - 1);

    if (chanceOfSpawningMobs <= 0.85f)
        chanceOfSpawningMobs = chanceOfSpawningMobsBase + chancePara * (difficulty - 1);

In the code, it’s clear that every stage of broken takes at most 4 seconds, and the chance of spawning a monster is at most 85% (per frame).

I also got some experience from the project Neon runner, thus I set a fixed value for the difficulty. This would make sure the difficulty is not going to overflow because the player has played for too long. But we still got some feedback about the difficulty after the play session at the end of this event. It seems the difficulty is still a bit too high because we didn’t ask a lot of people to do the playtest during the development process.

Sound design

As a game designer & developer, I understand how important sound effect and music to a game. Especially the sound effect gives a lot of feedback to the player’s control. Although I don’t have much experience in sound design, I still tried to add some sound effect and music to this project aside from coding. But it really got some positive feedback from the playtesters.

I used LMMP and Magical 8bit plug for the background music. And Bfxr for the sound effect. You can listen to the loop I composed down here.


You can download the build and project on GitHub.

But please notice, the master branch is the project we created for GGJG2020. One of our members used this project for his courses and created another branch for it. If you want to download the original project, please pull it from the master branch.

Recommended Unity version: 2019.3.0f6.


Leave a Reply

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