Beware the Orb is a game that was created by me in less than 48 hours for the GMTK Game Jam 2019. Following the theme of the jam “only one”, it is, or at least tries to be, a bullet hell with only one bullet. Also there is no shooting involved, so the player does not even have a single bullet.
The game’s submission page is here. You can download and play it from the itch.io page here.
Objective of the game is to control Red Crab to dodge the orb’s attacks until the end and save the people of Crabland from the tyranny of Blue Crab.
The game was developed in C++ using the SDL2 library. You can find the whole source code in this GitHub repository.
Having a “bullet hell” with only a single bullet brings with it some design challenges. While I had no experience building bullet hell games and only some casual experience playing them, I chose this idea because it sounded fun and original. The challenges that I faced can be summarized in these two points:
While these issues are not exculsive to this game, the fact that there is only one bullet to work with amplifies them considerably. I will now explain them and my approaches to tackling them.
Bullet hells are supposed to be difficult, but adding proper difficulty with a single bullet isn’t easy
Dodging a single projectile is in its simple form a very easy task. Unlike a normal bullet hell game, you can’t spam more projectiles to increase the difficulty. For this reason, I had to make the most out of the scarce resource I had. A related problem is that a single projectile is likely to leave blind spots where the player can safely stand by. My approaches for making the game more challenging and less abusable while remaining fair were as follows:
While playing with the basic properties of the projectile such as speed is an easy way to make it harder to dodge, it has the risk of becoming too difficult. It can make the game feel unfair and the player may feel they aren’t in control of the situation. A bullet hell should be difficult (it isn’t called bullet heaven, you know). But the player should still feel in control and the deaths should feel fair.
To overcome the difficulty problem, one decision I had was to remove all randomness from the ball’s movement, making it completely deterministic and unchanging from game to game. This meant that I could not use movement patterns such as following the player or reacting to the player in some way, since that would change the ball’s course from game to game. What I gained from this principle though is predictability and “learnability”. This means that while the player may lose at a certain stage the first time, they can learn and adapt through replaying and then pass it. By learning how the ball moves in each stage and the order of those stages, the player can be prepared in advance for each challenge and manage to beat what stopped them the first time. This rewards the player for their tenacity and their ability to adapt. Also the player is given multiple lives, so there is always some room for error in a single run. Note that the replaying idea works fine for this kind of game, since it takes about five minutes to finish it completely, but it might not work well for a longer game.
Another very important point is that the player must physically be able to escape the ball and get out of most situations caused by an earlier, unrelated action. I made sure that the player movement is fast and responsive enough that the player doesn’t feel like they lost due to the slowness of the player character or the clumsiness of controls. Aside from making the controls feel good, I implemented the collision in a way that allows near misses, which is another cause of the frustrating “It isn’t my fault I lost” feeling.
Constant pattern changes and play testing were used to make sure that the player is always reacting to the ball’s movements, rather than finding a safe spot or tactic to mindlessly abuse. The player’s objective is to use the easiest method to beat a game, no matter how boring it is. It is the designer’s job to make sure there are no ways to beat it that are both easy and boring.
Of course extensive play testing was also needed to adjust the difficulty of certain phases and the overall game.
Bullet hell games often employ very intricate and pretty looking bullet patterns that cover the entire screen. While playing, you may even get totally engrossed in those patterns while your brain somehow starts dodging them automatically. Surprisingly, many such intricate patterns are created by very simple movement rules for a single bullet.
Unfortunately, a single bullet with simple movement feels a lot more boring than an army of bullets doing it. But even with complicated movement, there aren’t many ways to make it look interesting. I also lack any expertise in designing such patterns and didn’t have much time to research, so I kind of went with whatever made sense to me to make the orb’s movement cool:
The game consists of three stages and the orb acts differently in each stage. Each of these stages consist of many phases where different variations of the stage’s main idea are explored. The three stages can be summarised as follows:
In the first stage, the balls moves in circular paths. The variations in this stage are the rotational speed of the ball, multiple levels of axes that the ball rotates around and the changing of direction of rotation. Being the first stage, it is relatively predictiable and not too annoying.
In the second stage, the ball comes off loose and moves straight at the edges of the screen. In the case where there is a wall at the edge, it bounces off the wall, reflecting like a ray. In the other case where there is no wall to hit, the ball teleports to the opposite edge. Similarly, the player can also teleport through edges if there is no wall at that time. The variations explored in this stage are the speed of the ball, size of the ball, turning walls on and off at different times, and turning only horizontal or only vertical walls on/off. This is a challenging stage where the player needs to adapt quickly to different factors. For example, when the orb gets extremely fast, it is easier to dodge the movement pattern rather than the orb itself, whereas when it is large and slow, the pattern isn’t obvious but the ball itself can be dodged reflexively.
In the third stage, the arena is confined in a circle where neither the player nor the orb can get out of. The ball gains very high speeds and bounces back and forth between the targets it sets on the edge of the circle. The variations in this stage are the speed and size of the ball, along with the different targets patterns (such as a five pointed star) and the rotation of those targets. The speed at which the targets rotate also changes.
When the ball gains immense speed, it moves large distances in a single frame. In order to make sure that the ball doesn’t become hard to follow and to make patterns more noticable, the ball is drawn multiple times in a frame by interpolating between the beginning and end points of that frame. The produced after-images help create the illusion that there are multiple orbs following a pattern.