Orpheus and The Secret Night-Life of a Solo Programmer

How passion leads to new games for old consoles
Date
Updated
Author Fix License CC0

Introduction

After a meeting I had with one of my friend and coworker, Simone from Kibou Entertainment, in order to wind down from all the work-related talk and get ready for the weekend, we were talking about our other projects. He happily mentioned that a GameBoy game that he does level design for has reached it’s Kickstarter goal. Initially, I assumed he meant a GameBoy-styled game, as he has made a few of those. But he rightfully corrected me that it’s not just a game in style of a GameBoy, it is a game for the GameBoy console. Somewhat astonished that someone is making a commercial GameBoy game in this day, I could not pass the opportunity of hearing more about it!

And so, I came into contact with Francesco Bacchelli from StudioLoading, the lead developer and sole programmer on Orpheus: To Hell and Back. We had a brief chat, that you can watch on YouTube, in which I learned more about Francesco, his gamedev journey and how is it to make a game for the Nintendo GameBoy.

A Brief Review of Orpheus

The demo is available right now, on itch.io! So, I gave it a go, playing it on the SameBoy emulator.

Orpheus is a puzzle game about the mythological bard who goes to afterlife in order to bring his beloved Eurydice back to life. It is exactly on this adventure that the player controls him.

The puzzles are simple to understand but require some planning before execution. Your goal is either to hold down all pressure plates or to collect a key in order to move on. This is either achived by pushing blocks yourself, or using Orpheus’ harp to lure enemies into harm, or even trick the enemies into helping you complete the puzzle!

The demo is short, but sweet, ending at the moment we meet Charon. Francesco mentioned that Charon is intended to be the first boss fight, but he could not get the boss fight to feel right in time to release the demo, so it is omitted in favour of a tease.

I have thoroughly enjoyed the demo, and I am looking forward to playing the rest of the game! There is a Kickstarter campaign, which ends on the 27th of April, so if you like what you see and you wish to support this project, you have to act quickly! The upper tier of backer rewards include a physical cartridge which is playable on an actual GameBoy console!

The Game’s devteam is comprised of the aforementioned Kibou Entertainment doing game design and level design, FaultBox doing the evocative pixel art, with Misu from Alunite doing additional art (including the beatuiful art to be included with the Boxed copies of the game), SloopyGoop creating the amazing music and StudioLoading doing more game design and programming.

And it is exactly Francesco from StudioLoading who we’ll cover in a bit more detail now.

The Humble Beginnings

Before he started making games for the Gameboy, Francesco tried his hand at using Godot to create games. But even then, he was drawn by the constraints of old consoles, namely the NES. That is reflected in his first game, Cobra Kai, which uses a limited colour palette and is controlled by only 2 buttons, to mimic the limtation of the NES’ controller. But even with self-imposed contraints, it felt a bit ‘too easy’. Cobra Kai is a NES-like game, but not a NES game. For a lot of us, this would be satisfying enough to call ourselves a “Retro Developer”. But not for Francesco. He wanted to make a game for the actual hardware. And so his transformation began.

Descent

The NES Developer situation at the time was interesting: there were many high-quality games being made, relatively saturating the field, but the tools were not easily approachable.

Taking a step back, Francesco decided to take a look at another darling console: The GameBoy. The landscape of new GameBoy games was odd. The tools were easily approachable, but the games weren’t utilising them to their full potential. So, this is where he found a new home for his games.

I would like to put things into perspective for the developers used to the modern age, and briefly compare the NES and GameBoy. The NES’ resolution is about 256 x 224, while the GameBoy’s is 160 x 144. Oh and the GameBoy’s clock speed(~4.2MHz) is about 6 times slower than NES’(~26MHz in NTSC, ~21MHz in PAL regions). GameBoy does get the win in RAM size, sporting 8KB RAM and 8 KB VRAM over NES 2KB RAM and 2KB VRAM. While doing RetroDev, you already have to be careful with your program, to avoid sluggish gameplay and other issues, but the GameBoy pushes that requirement to it’s extreme!

How Does one Develop for Game Boy?

In my own brief research I came across 2 popular toolchains: GB Studio and GBDK2020.

GB Studio is a “no code” all-in-one IDE. It has some very comfortable defaults, so a lot of simpler games tend to start looking alike. But if you’re a person who is not too versed in the technical trickery, you may enjoy this tool a lot.

For us who down to get dirty, GBDK2020 is perfect. In short, it includes an assembler, a C compiler and a minimal libc and quite a bit of extra helper functions. It gives complete control to the developer allowing you to squeeze every drop out of the hardware.

But neither of these are Francesco’s choice in making his games. Let me introduce you to ZGB Engine! ZGB is an Engine built on top of GBDK2020, which implements some utilities you may commonly implement yourself and also auto-magically manages some of the decisions you’d usually make yourself, such as deciding where in the memory bank are you storing your routines. It implements a core loop, and grabs input, draws at the end of the loop, so it leaves the developer with two responsibilities: managing the game state and managing the sprite state. It brings back a bit of the workflow you’d see in the engines for modern platforms. Through some C-macro devilry, each C source file can be treated as sort of a “class file”, and the developer has to implement the START, DESTROY and UPDATE “methods”. The C-macro devilry in question appends the file name to the function names. So, if you made a file called player.c, included the appropriate header and implemented the methods, they would end up with labels START_player, DESTROY_player and UPDATE_player. All sprites are managed by the engine’s SpriteManager, which takes care of updating them each frame and flushing them from memory when destroyed.

Another nifty feature worth mentioning is close integration of the Emulicious emulator into the workspace. The purpose of this is to allow for simple debugging. Instead of going through the assembly, guessing which line of C code became the assembly you’re currently starting at, you can just set up a breakpoint in your text editor, and Emulicious will pause execution upon reaching it!

Upon hearing this, I assumed that this (relatively) high-level workflow would require an ocassional moment where the developer has to step in and hand-write some assembly in order to optimise few procedures that the compiler just doesn’t get right. But Francesco has had no need for that yet. He is happy with the performance of the stock options of the compiler and the loop provided by ZGB.

But there is no getting around the GameBoy’s limitations. Working within such harsh constraints influeces game design and game’s visual language a lot. In Francesco’s words:

Every feature has a significant cost. The cost is not financial, 
but every feature costs frames. 
You want the skeleton to have a shield-raising animation? 
That will cost 3 frames of player animation.

Every decision is a trade-off. The constraints force you to distill the game design and your visual design down to the bare necessities. It simply leaves no space for scope creep to happen. And to be honest, that sounds somewhat comforting, instead of challenging.

Outro

There is a lot more to hear about GameBoy development and StudioLoading. Orpheus isn’t even Francesco’s first commercial GameBoy game! We go over more topics during our chat, including how Gothic 3 significantly shaped his career, which is available on YouTube. It’s been a lot of fun, so I encourage you to watch it!

I would like to thank Francesco for sitting down and giving me a brief view into the world of GameBoy development! I would also like to thank Simone for getting me in touch with StudioLoading.

As of the time of publishing, there should be less than 48 hours remaining in the Kickstarter campaign, so if you want that beautiful boxed copy of the game, you have to act quickly!