Firebat

Download Firebat from itch.io

Watch gameplay video

1up Indie’s review about Breakoid and Firebat

March’s theme was: Kill it with fire. What could be better for this than a breakout game? But let me start at the beginning.

It happened to be that the son of an old friend of mine, Chrisyss contacted me that he would like to get into game development. As he has never done anything like this before – well, apart from playing video games – he would like to get into quality assurance and to learn design. I suggested to him to participate in game jams, looking up online articles and YouTube channels about this kind of stuff so he can learn. I also mentioned HEJ in which I participate on a regular basis and explained how it worked (having a theme and one whole month to come up with an idea, coding and drawing stuff etc.). I also offered him to team up with me, as I always do these jams by myself, except I almost always involve my darling girlfriend Allegra in the process to help me with some ideas, and level layouts. This time, Chrisyss took up the mantle of testing and adding extra ideas into the project. When the theme was announced, and the previous HEJ game jam theme, Glitch, was also still in force, we started to come up with ideas for both themes. Though I was almost sure we wouldn’t be able to make two games, still I started to write ideas for both themes. Soon I could see that ‘Kill it with fire’ was the theme I would like to make. One of my ‘Glitch’ ideas was to make an endless runner that’s glitching out at some points. An-other involved being a programmer in the game, dealing with bugs, and QA members would have to be tricked with pizza and cookies so that they produce fewer bug reports. A third one was a top down shooter, where the player would have to find ways to speedrun through the levels, and there would be glitches (bad colliders, glitching walls, rocket jumps etc.). For the ‘Kill it with fire’ theme, one idea was to be with a fire demon, that leaves a fire trail and the player has to lure enemies into the fire in order to defeat them. Another fiery idea was to be a god of an island, and that island is populated with indigenous people to worship (as a currency) this god. And when tourists swarm the island, the god could summon volcanoes to eradicate them. So, having this many ideas what would materialize in my mind? A completely different idea, of course! I have wanted to make a breakout game for a while now in the footsteps of Arkanoid, Krakout and Traz, so when I envisioned a game like this with explosions and fire… I knew I wanted to make it.

As soon as I had the level size, I asked Chrisyss to make some layouts for about 20-30 levels. This way I knew he could take a lot of work over from me, as this process can be time consuming. This way, I could have extra time to code stuff like bouncing. That was a nice dream anyhow, and here’s why: I had a general idea on how to do it, so I started to write some code. It worked somewhat, but I wanted to see how others would do it, so I looked up Friendly Cosmonaut’s breakout tutorial, and I started to work based on that. I used the vertical and horizontal component of the ball’s speed to turn the ball, but when it touched the inside corner of two collision objects, it did some crazy things. Interestingly, the built-in bouncing function didn’t work as intended in my project (the ball bounced back on the same vector as it had when hitting any of the surface). But it worked right away in an empty project. This is typical for Game Maker (just today, none of my controllers worked with GM games… I will check on it tomorrow, hopefully a newly started system helps… edit: it helped). So, I iterated on my code a couple of times, and it mostly worked, but sometimes the ball went inside the side colliders and went through them. Sometimes, the ball went between two invincible bricks. So, it was a bit trashy, and I seriously started to consider entering this game for both themes: ‘Kill it with fire’ AND ‘Glitch’. But I checked further and it turned out that there is a bouncing function that uses solid objects. I had never used that checkbox before, but now I did and Eureka! It worked!… Almost… good… The ball cannot touch any two solids, only one, meaning sometimes it wasn’t touching bricks when it clearly should’ve been, or resulting straight in up bullcrap bounces. Still, it would go inside colliders and invincible bricks. But at least, it bounced mostly in the right direction, so I left it as it was. Solids also made one interesting problem: I coded that if the player picks up a growth bonus next to the wall, the wall slowly pushes the bat out of the wall, so it wouldn’t get stuck in it. After I checked solid on the collider, it didn’t work anymore, unless I moved it under one frame, hence it looks like it teleports a short distance. I coded other stuff too, but I had fewer problems with them.

The level designs started to arrive, and as I drew nice colorful bricks, I used those as inspiration to build the actual levels. I followed the layouts and instructions that Chrisyss gave me very closely. He came up with the idea of the ‘3 hit brick’ that upon being destroyed, takes out all remaining bricks, and finishes the level. I used it sparingly though, so much so that it was used only on 3 levels, and those became the boss fights.

All in all, I coded a lot of things: background effects, a bunch of bonuses (extra ball, extra life, growth, haste, shield, sticky, breakthrough), a nice transition, an intro to make all this into a little story. And of course the gameplay extra: upgradeable ball. Every level has a number on the bottom: Bricks to upgrade. This number shows how many bricks should be broken to upgrade the ball by one level. This number can range from one to 30. First it’s just a steel ball, dealing one damage to bricks (bricks having 1, 2, 3, and infinite HP/invincible) and then bounce back. The second level turns the ball into a fireball. This deals 2 damage: if a brick has 1 HP, it’s broken through, the ball won’t bounce back. If the brick has 2 or more HP it gets damaged (2 HP breaks) and bounces back. The third level ball creates a small explosion on impact, that breaks 1-2-3 HP bricks, and the fourth level does the same but with bigger radius. The fifth level ball also creates small volcanoes on walls, that spit out small fireballs. On sixth level, the bat will have a volcano too, and that also spits out small fireballs every 2 seconds, helping to clear any remaining bricks.

As usual, Gábor Urbán hosted the show ann tell part of the jam on his Twitch.tv channel, and despite Firebat’s obvious faults, he, and the people watching the stream liked the game. I am putting away this project for now, and I may revisit it in a (much) later date. In conclusion: apart from the bouncing problems, this turned out to be a really good little game, it has 30 levels, a story and excellent music by Andrew Sitkov. When you get the hang of it, it is fun to watch chaos on the screen with a lot of falling bonus, 5-10 fireballs exploding. You have to try the max upgraded ball and breakthrough bonus, it’s awesome to watch a small fireball breaking all those pesky invincible bricks in a line. 🙂

EDIT: I reworked the game a little with some small bugfixes, and adding a new high score system, now it can actually save config and high scores. I also realized I never recorded a gameplay video, so I made one now.