Hey guys, it’s been nearly 10 years since Bullet Heaven 2 released, and I’ve never written any sort of retrospective about the game, so I figure now is as good as any a time to do so.
If you haven’t played it, Bullet Heaven 2 is a bullet-hell shoot-em-up in the style of Japanese games like Touhou. It looks like this:

It’s a game that I return to every once in a while to see how it plays on different hardware – I’ve tested it out on a Steam Deck, a Samsung Note 8, and with a lot of different controllers. It’s a project that started off as an experiment in using the Starling game engine, which builds on Flash’s Stage3D capabilities for hardware accelerated graphics. Flash has a reputation for poor performance, but games made with these tools could run super fast – and I learned a lot about optimising code and graphics. It was my first time using texture atlases (similar to spritesheets), a skeletal animation tool called Dragon Bones, and a lot of other tools which are probably long defunct by now.
The biggest performance benefit came from making as little GPU calls as possible, and this mostly came about by sorting the layers in the game so that the GPU would draw all objects of a type in one call – all the bullets, then all the enemies, then all the background stuff, etc. The game could easily handle 5,000 bullets on screen at a time, along with all sorts of particle effects and other animations. So I was pretty happy with what I had achieved.
But there’s a LOT of things I did wrong, and over the years I’ve been thinking about those things, and now I’m finally writing about them.
Bullet Heaven 2 had a somewhat rushed development – after the success of Epic Battle Fantasy 4 on Steam, I wanted my new game to also have enough content in it to merit a Steam release, but I didn’t want to spend more than one year on it, so I spent most of my effort trying to cram a lot of content into the game rather than focusing on quality. I’m very happy with the amount of playtime the game offers – and it’s also quite fun and addictive – but I wish I had spent more time nailing the core concepts down before making all the levels.
Here’s some regrets I have:
The game uses a lot of mechanics from hardcore Japanese shoot-em-ups that are familiar to fans of those genres, but not to many other gamers. For example: when you take damage you have a short period of time to cancel it by using a bomb, using bombs is generally discouraged except as a last resort, you can get extra points for “grazing” enemy bullets by going near them, etc. I feel like I didn’t do a great job at explaining some of these mechanics to casual players, and in many cases I wish I had designed new systems that were more intuitive and original.
The wave system and scoring mechanics are pretty basic. Each level has the same number of 10 waves, plus up to 3 bonus ones at the end if the player did well. It’s easy to understand, but I’m sure I could have come up with more interesting level pacing if I tried just a little bit harder. The scoring system relies mainly on completing waves perfectly to increase your score multiplier. The downside of this is that it’s very punishing if you make a mistake on any of the 13 waves. If I had made the game today, I would make sure the scoring system takes more factors into consideration. For example: the order in which enemies are killed could matter, waves could be broken up into multiple groups of enemies with each group giving a bonus when killed, grazing enemy bullets could charge some sort of resource, and so on. Basically, routing a path through a level to earn a high score should be more interesting than just “kill everything and don’t get hit”.
In terms of optimising performance, a big thing I overlooked was “object pooling”, which means to recycle objects in a game rather than clearing up their memory and creating new objects. By the time I learned about this concept I was too far into development and just didn’t feel like trying to implement it. The result is that the game stutters every few minutes when the garbage collection kicks in. It’s not too bad, but it is noticeable and annoying.
Bullet Heaven 1 had permanent upgrades which could be obtained by grinding, where as this sequel does not and requires only skill to progress. I wish I had made two game modes – one with upgrades and one without, and players could just choose which style of gameplay they preferred, without needing to complete both modes. The hardest achievements would have been for completing the same final boss either way, so this option need not take too much away from the challenge.
The writing was not great. It was just silly banter between the main characters at the start and end of each level, and if the player skipped all of it they wouldn’t have missed much. Some players still appreciated it more than having no dialogue at all, but I feel like I could have done more with it to make it more interesting, even if all I did was add a very basic Mario or Zelda style plot.
And finally… I just don’t like the graphics. They’re similar to my other games, but the way I did the shading took a long time and just doesn’t look great. I should have went with a cleaner style like what I tried out in the Bullet Heaven 3 Prototype. (which will never be finished, in case you hadn’t heard) (also, pictured)

On the other hand, there are many things I am proud of:
Bullet Heaven 2 supports 3 control schemes: mouse, keyboard and controller. Not many shoot-em-ups support that many options, and this makes the game quite accessible. In my opinion, the mouse controls are the most precise for higher difficulties, but many people are used to the other methods from playing similar games.
It supports 4-player co-op! I’m sure not a lot of people tried this out, but the ones who did were quite vocally appreciative of it.
There’s a lot of content and the bosses’ attack patterns look really pretty!
There’s optional cheats and handicaps that make the game easier or harder and effect your score accordingly. This doesn’t disable achievements, so trying to find a combination of cheats and handicaps that works best for the player turned into a strategic element that was quite unique.
The short levels and 3 difficulty options make the game more approachable. The ranking system is designed so that you get in-game recognition for beating levels perfectly, but none of the Steam achievements require you to go that far. It’s an overall satisfying game to try to complete 100%.
And, as was the original goal, the game demonstrates how a Flash game can run in an HD resolution at 60fps with thousands of objects on screen. I don’t know exactly what the recommended hardware requirements should have been, but they certainly weren’t very high, so I generally did a good job in this area.
Finally…
In terms of sales, the game didn’t do great during the first year, and I earned somewhere around (the UK) minimum wage from it. I was lucky to still get some sponsorship money from Kongregate, as the browser game market was dying at the time, and this was an appreciated boost. Thanks, Greg.
But over time, sales on Steam kept trickling in (probably largely due to it being bundled with my more popular Epic Battle Fantasy games) and nowadays the total income from the game is 4 or 5 times higher than that first year. The game currently sits on 447 reviews on Steam, which are 98% positive.
So things turned out alright financially, and in the end I just regret not spending a few more months working on some of the issues I mentioned. I easily could have afforded it, just self-doubt made me want to finish the game faster. Oh well.
It would still be viable to port the game to mobile to bring it some new life – the PC version almost works on phones as it is. I reckon it would be enough to tone down the difficulty a bit, simplify the controls, fix the object pooling issue, and rearrange the UI a little bit. But porting to mobile has been tedious work for me so I don’t think I’ll ever do it, unless maybe some publisher offered me really good money up front, haha.
I don’t see myself tackling the shoot-em-up genre again any time soon, but if I did I think I could make a fantastic game with all of these lessons in mind.
Funny you should post this now, I was just wondering what BH would be like as a mobile game.
I feel like touch controls for this would be a lot harder, though. Guiding the player with your finger makes enough sense, but then your finger would spend some amount of time blocking your view of the things that are trying to kill you.
Ah, Bullet Heaven. I probably spend too much time for the well being of my eyes (too much of focus and forget blinking when playing), on both.
I really had a good time on those, and last year, i even had the opportunity to run throught the 2 with my best friend, and it was another really good time, thanks to you. (If you wonder, he really liked the game too).
It was super nice to have your thoughts about it !
I got slightly excited to see this post because I liked this game when I played it semi-recently, so it was interesting to see this…
I thought the mechanics seemed really approachable as someone who had barely played shoot-em-up games before it, but I guess I was specifically already aware of how they worked, just I hadn’t really tried to play them before, so I knew about grazing and I picked up pretty quickly on what bombs were… (While writing this I started to wonder if the general public would be quicker to understand grazing now than they were in 2015, since it’s a pretty prominent mechanic in a big-name game like Deltarune…Maybe that doesn’t affect anything though.) I did really like the mouse movement, the shmups I’d seen before didn’t have that…It made it feel a lot less likely to panic and press buttons randomly and run into things like an idiot.
I don’t think it showed at all if it was a little rushed, everything seemed pretty smoothly put together…
The dialogue was pretty light, but from what I know (…which isn’t that much…) that doesn’t seem super unusual for this genre? It was just silly, but it was mostly charming…I guess if anything I vaguely remember feeling like the ending was slightly anticlimactic, but looking back it doesn’t really feel like a huge deal…Maybe it would have been better if it was exactly the same but with some arbitrary picture on the screen at the end. (I feel like I phrased that too bluntly…it was mostly a joke.) Whatever was in the dialogue managed to convince me to play EBF5 afterwards (BH2 was the first game of yours I played), so I guess something had to be working there…
I still haven’t played the first one, so I don’t know what it was like with upgrades, but I think the idea of having 2 different modes for with and without upgrades would have probably been kind of confusing in practice…I agree with one of the other comments here that the cheats/handicaps system sort of accomplishes what would probably be a similar effect and is clearer in why it’s like that.
And it feels a little odd to describe this as a good thing, but I think describing them as “Cheats” kind of discouraged me from using them unless I was really stuck, so I had to practice a little to get through it…I think for this kind of game it “feels cooler” to get through on skill rather than grinding. I guess if the game was really difficult for someone they’d probably feel differently about that though…
Sorry for the long rambling comment.
With and without upgrades? Like say, those cheats and handicaps? You are selling yourself short there.
As someone who played the game when it first came out on browser to only recently getting 100% on Steam, I’d say it was a good attempt, with my main gripes being that some of the boss patterns don’t feel intuitive to dodge, the final world feeling like a spike in difficulty compared to the last world (well when I was trying to get star ranks anyway) and also just bright bullets in general being hard to see at times.
I haven’t played other bullet hells like Touhou, so I can’t say how it stands up to those games, but I think it’s pretty good. Going for 100% definitely made me feel like I improved at the game as well instead of just thinking I got lucky not getting get hit, and for bosses actually routing on which attacks I had to use a bomb on, so that’s a nice bonus.