Alpha 1.0 Release / Jam Postmortem


Interested in learning how this somewhat bizarre game came to exist? Read on...

GBA Development Is A Respite

Four months ago, I was in somewhat dire straits. My long-term computer game project using the Godot engine was really burning me out. I was frustrated with the modern expectation that every game must work perfectly out of the box on every possible deployment platform. (In particular, getting my game window to scale gracefully to any monitor size was proving to be a boondoggle.)

So I thought: Why not take a break, by making a new game for a SINGLE platform, and simply focus on making the game as fun as possible? Enter the GBA Jam 2021, a game making contest where I would be tasked with making original content for the Game Boy Advance, within a 3-month time frame.


The GBA is 20-year-old hardware, but developers like me no longer have to program for it at the register level using C and assembly. Many hard-working individuals have created libraries and engines for the GBA, and sprites can now be drawn with a single line of C++ code! If a game doesn't need collisions or physics, then GBA development is as easy as making games in pico-8; but unlike pico-8, there is no symbol size limit, the audio & visual requirements are much less restrictive, and the developer has all the rights to whatever they make. Oh, and pico-8 emulators are impossible to make due to the pico-8 devs hoarding their source code, whereas people constantly make GBA emulators for every hardware system under the sun (meaning GBA games are potentially VERY cross-platform).

Some early experiments with the Butano engine. Once I wrapped my head around its use of optional pointers, making games was surprisingly easy.

At the time, GBA development seemed like a great balance between freedom and restrictions. Of course, I also knew it wouldn't be perfect; any collisions or physics would need to be written from scratch, and the GBA sound card has a very bad reputation. There was also the danger I would make my game 90% finished, only to find I couldn't add the last 10% of content because I'd run into limitations with the GBA hardware at the last minute. (Spoiler alert: This actually happened when I ran out of VRAM on the *last day* of the jam, but I simplified some art to make it past the finish line.)

I decided to go for it, and with a few practice programs in Butano under my belt, the jam was underway!

Brainstorming

I knew from day one that I wanted to name my game KNIGHT OWLS, a pun I'd had in mind for months before the jam. But what sort of game did Knight Owls want to be? Ultimately, I decided to go with a card game idea, for the simple reason that I wouldn't need to program collision or physics.

In three months, I didn't think I'd have time to make a full trading card game where the player accrues cards and builds a deck that persists between play sessions, so I had two options: a single-player roguelike similar to Slay the Spire, or a head-to-head battle game like Dice Throne or BattleCon. I wanted to be original, so rather than using draw-five  deckbuilding with deck-thinning like Slay the Spire, I opted for the blackjack and Quacks of Quedlinburg push-your-luck mechanic where you can draw as many "cards" as you want, but as you keep drawing cards, you run the risk of a number going over a limit. For fun, I chose to include the mechanic from Star Realms where you must choose whether to prioritize economy or combat strength. Some design docs were drafted, and I got to work.


My first design doc, showing that the game was originally much more PVP-focused. Wondering why the final game takes place on a boat? It's because originally, your owls would contribute "weight", and your boat would sink if it had too much weight in it. This weight mechanic would be reflavored into static.

Tweaking

It became clear early on that the game idea was quite complex, so to simplify things, I turned the game into a linear roguelike with quite simple enemies. It also became clear that being able to "save" your money between rounds (unlike Star Realms) would make the game more fun.

One mechanic that proved tricky was the "spell explosion" mechanic. I wanted it to be painful if your static went over the limit, but not so painful that playing it safe was always the correct choice. I decided to make health loss be the penalty for your spell exploding, since it wouldn't hurt your long-term power to temporarily lose HP, but gambling too much would drain your HP to zero. So it'd be a pretty simple tradeoff: Do you risk losing health for power?

The system worked well, but it begged the question: if you are frequently losing health, how do you gain it back? Ultimately, I got inspiration from Furi's HP system where losing combat decreases your health by one... and winning increases your health by one, decreases enemy health by one, and progresses the stage by one. (I made the modification, that both winning AND losing progress the stage by one, to prevent my players from losing repeatedly on purpose to farm money. I also made combat more painful as the game went on, to help the enemies' power level keep pace with the player's increasingly powerful spellbook.)

Early screenshot. I was thrilled when I had implemented the entire game loop, connecting beginning to end.

For the static mechanic, I wanted to capture the three emotional beats of blackjack: (1) the player is completely safe, (2) the player is in minor danger, and (3) the player is in great danger. Generally, these three emotional states are captured by static values of (1) 0-2/4, (2) 3/4, and (3) 4/4, respectively. (A problem with my design is that the static value does not always correspond to danger; if you've summoned everything but a mega energy surge, then your 4/4 static is LESS dangerous than a 4/4 static consisting of everything but two energy surges, which is only obvious to players who frequently check their spellbook.)

I constantly tried to make my game stand out from other games. Drawings of the night sky often depict a crescent moon or a full moon, so I'd do it differently, and draw a half moon instead. In most games, the store is tended by a shopkeeper, so to make my game different, I'd omit any shopkeeper character. Etc.

Art & Music

The first owl I drew was the thug, and from there, I tried to give each owl its own appearance and personality. My pace was about 1.5 owls per day. Of course, I needed a lot of other art in the game, so to make it easier on myself, I reused art in "running gags", such as the cat hydra gaining different types of headwear.

I was able to draw all my game art using this excellent palette: https://lospec.com/palette-list/aap-64 (Well, with the exception of the ocean background image, which required some custom blue and purple hues to get it right.)

To draw the symbols such as the attack and static symbol, I hijacked the font graphic, and replaced the lowercase letters with the symbols I needed. So to draw a heart, I'd display a lowercase m, etc. (I didn't miss having the lowercase letters, since I actually prefer how this particular font looks in all caps.)

I wanted the music to be a single long loop with a variety of moods and plenty of empty space, similar to the music of many RTS games. RTS games and card games do not have a clear beginning and end to battles, so the music can't change in intensity depending on what's happening on-screen, hence why this approach is necessary. (This is different from final fantasy, where you have a happy theme for victory, a tense theme for combat, etc.) I composed the music by playing around on the piano until I got something that sounded nice, then recreated it in beepbox,  exported as a mid file, opened it in openMPT, and exported as a tracker file.

The main game theme as I composed it in beepbox. I wish I'd had time to figure out how to reduce the hissing noise that ended up in the final game.

A Gamble in the Eleventh Hour

A week before the jam was over, I had a functioning game with a single zone, and no banners. It was fun, but short. I had a crazy idea; what if you have to beat the same game three times in a row, in order to win? This mechanic seemed incredibly audacious to me, since I was basically telling the player, "You're going to enjoy the game so  much, you'll play it three times in a row." I guess I was inspired by "deathless mode" in games like DCSS or Crypt of the Necrodancer; fans of these modes say things like, "If you are REALLY good at the game, you can beat it again and again without tripping up."

Also, one of the defining features of Knight Owls was shaping up to be the decision about when you turn the corner from gathering money to gathering attack, and it was a fun enough decision, that I wanted the player to have to do it 3 times.

I realized the player would need something to carry with them from zone to zone, to give them a sense of progression. I briefly considered letting them take one owl with them to the next zone, before realizing that something like Slay the Spire's "relics" would be perfect, and would also provide some much-needed variety between repeated play sessions, since different relics would change what the optimal play pattern would be.

In a week, I added banners, and constructed two additional zones. I maybe sacrificed some sleep, and put in a probably unhealthy amount of crunch in the home stretch, and the game was done!

A Knight To Remember

So that's the story behind probably the most successful game jam I've ever done. It was a blast working on Knight Owls, and the people on the Gbadev discord were very supportive. And of course, I couldn't have made the game without maxmod, butano, devkitarm, mgba, and all the other software my game is built on, so massive thanks go out to the developers of these great open-source projects.

I don't know how much I'll continue working on the game - I suppose that depends on whether other people like it - but in any case, I've drafted a roadmap on itch.io, which contains many ideas for possible future enhancements.

Thanks for reading!

Get Knight Owls

Leave a comment

Log in with itch.io to leave a comment.