Boghog's bullet hell shmup 101
- 1 BULLET HELL SHMUP DESIGN 101
- 2 MOVEMENT & SPACE
- 3 SHOOTING
- 4 LIVES, BOMBS AND RECOVERY
- 5 BULLET PATTERNS
BULLET HELL SHMUP DESIGN 101
A glossary to get you started : https://shmups.wiki/library/Help:Glossary
This doc covers the fundamental aspects of designing a bullet hell (danmaku) shmup. This is heavily skewed towards CAVE’s style of games, but a lot of the things discussed here can be carried over to other styles.
Knowing these fundamentals is important even if you’re going to break every rule in the book, because it helps you make informed choices instead of taking shots in the dark.
I’ll include examples when appropriate but for practical purposes, I will avoid too many counterexamples, edge cases and other complications. The goal is to give a good idea of how to make a typical CAVE-style shmup. If you want to branch out past that & make something different you’re on your own!
And don't forget, first hand experience is everything! Play shmups a lot, you don't have to get 1cc's or good scores but getting to a point where you can watch a good replay of your favourite game and understand what the players are doing is a must. Game design requires good intuitions for what feels right, and the best way to build that intuition is through experience.
Here is the doc in its original form : https://docs.google.com/document/d/1iM9Fc2DsPppedlJVDYQ3g1VB5sFfilomGIYFIwJka9w/edit#
MOVEMENT & SPACE
The Play Area
This is where all the action happens. The play area can either be contained by the screen, or it can be wider thanks to horizontal panning seen in many vertical shmups. The size of the play area is relative to the size of the game’s objects and hitboxes.
The tiny hitboxes of Danmaku games make for relatively large play areas which allows them to fill the screen with bullets. This has downsides however - large play areas funnel games into relying on lots of projectiles for challenge. It makes it much harder to rely on simple patterns.
The same kind of challenge with different hitboxes, the Danmaku style example has more than twice the bullets.
For consistency’s sake, it’s best to avoid different directional movement speeds, such as the ship moving faster on the x axis than the y axis, or faster diagonal movement. Don’t forget to normalise your diagonal movement! There are some great games with faster diagonal movement like Battle Garegga and Armed Police Batrider, but they are rare.
Movement inertia should be avoided entirely because it adds an unnecessary layer of lag to the movement that players have to adjust to, without adding any interesting gameplay dynamics. Even the smallest amount of acceleration will be noticeable to experienced players.
If your movement doesn’t “feel smooth”, then it’s most likely the result of lacklustre visuals rather than a lack of inertia. Some tricks that can make movement feel smoother - beef up your shot/rate, add an afterimage (see Symphony of the Night/Megaman ZX), match your ship’s banking animation speed to movement speed, have the ship leave trails (see Danmaku Unlimited 3), give your ship’s options (floating bits near your ship) some inertia.'
This is useful because it gives the player more control and creates some basic but rewarding gameplay dynamics - the players have to think whether they need to use fast movement to quickly get into position, use slow movement to make dodging more precise, or accept slow movement for the sake of additional damage-per-second.
The transition between normal & focused speed is usually (but not always, see Touhou) interpolated to create a smoother, more gradual transition. The speed difference between the normal and focus shot itself varies depending on game & ship (focus being ⅔ of the original speed is a good middle ground).
The gameplay effects of different speeds are highly varied, the usual archetypes you have are fast, powerful ships with narrow shots, or slower weaker ships with wide shots.
Hitbox and visibility
During gameplay, players won’t have the time to look at their ships, instead focusing on enemies, their patterns and places they are moving to. They will roughly estimate the ship’s position based on the stream of bullets they shoot out, the general silhouette of the ship & additional visual elements (like HUD elements, flashing colours) near the ship. As a result, giving players thick, fast, noticeable bullet streams can not only enhance your game’s feel, but also the visibility. Perfectly centering the hitbox is also important because it keeps things consistent.
Shmups are all about shooting. Above all it’s important to make the act of shooting feel satisfying. Achieving a decent game feel isn’t too difficult, but there are a lot of little things to take into consideration. A general bit of advice - when you’re making a game’s objects move, you become the game’s animator. The only difference is that you animate things through code rather than by redrawing frames or moving things around. As a result, studying fundamentals of animation & practising will pay off immensely.
On the mechanical side, the key principle for achieving a good game feel is to skew things in the player’s favour in subtle ways. Give the player a hand & compensate for their small positioning/timing mistakes, while focusing on punishing big ones.
Polish Effects & Small Mechanics
The first thing you want is speed.
Speed is good for conveying force and making impact feel stronger. A fast bullet is a powerful bullet, especially if you combine it with an appropriate bullet splash effect. Speed helps create immediate feedback which is important for enhancing the player’s sense of agency. When the player presses a button they expect results. Speed helps the player keep track of the ship’s position. The faster you can update the bullet stream to reflect the player’s current position, the better they can estimate it.
In animation, a good way to convey the feeling of speed is by using motion blur (smears, trails). Length will create the illusion of motion and make bullets feel even faster. This can be taken to ridiculous extremes and still look good. The opposite will likely read poorly - short sprites will clash with fast travel speed and create a disconnect. As a general rule of thumb, you should always consider the projectiles’ travel speed when deciding the length of its sprite.
An extreme example - which one looks like it’s travelling quickly?
The next element you want is density. Make big, fat projectiles, huge messy streams, cluster bullets together and don’t concern yourself with making things too neat and organised. All of this makes the player ship feel like a force to be reckoned with. Players want to feel powerful, they want to feel like they’re wiping out everything in their path and overwhelming the enemies, even as the game is kicking their ass. Dense bullet streams create this illusion.
CAVE’s shots are rarely too “pretty” or organised, but they work. Chaos feels good!
Dense patterns help the players estimate their position, smoothen out imperfections and let the player’s mind imagine more interesting bullet streams than what’s actually on the screen.
Giving the player’s shots huge hitboxes, and giving enemies huge hurtboxes makes the game feel better by compensating for the player’s minor positioning/aiming mistakes. The player’s shots shouldn’t have massive gaps or dead zones, and their emitters should be low.
Make sure that players can hit enemies while sitting on top of them so they don’t run into frustrating moments where they have to do micro-adjustments in the heat of the moment.
The on screen shot limit is when games only allows a limited amount of player projectiles to be on the screen at once, it refuses to create new ones until the old ones exit the screen, hit an enemy or are otherwise destroyed.
The shot limit is most obvious in early shmups such as Galaga (which only allows 2 shots on screen) but it exists in almost every other arcade shmup as well.
Born out of hardware limitations, the mechanic has become a staple of the genre because it perfectly meshes with the player’s movement and creates some very fun natural gameplay dynamics. The closer the player is to an enemy, the faster their shot rate (and DPS) will be.
The prominence of the shot rate is different in every game. Games/ships with high fire rates and low on screen shot counts encourage a very aggressive in-your-face kind of playstyle while the opposite creates more dodging oriented games.
A classic example of players using proximity to quickly kill the stage 1 mid boss in Raiden 2.
It should be noted that in addition to this, some games have other forms of proximity damage, such as Dodonpachi’s ship aura, which surrounds the ship and does tick damage. Other unique ways of creating proximity damage are worth experimenting with.
Power ups are all about trickery and illusion. Increasing the damage in a straightforward manner will most likely lead to balancing issues. The player's level 10 shot cannot be 10 times more powerful than their default shot without something breaking.
Shmups get around this problem by simply lying to the player about their power level, increasing damage by a very small amount (for example x1.1). This practice is normal and is seen in most shmups from Toaplan to CAVE.
Numbers aside there are other ways to make shots feel more powerful. Increase projectile width and height, increase their speed, make them look more saturated, add details to the shots, make damage sounds more powerful. You can even decrease the damage values but add additional projectile emitters, like Gradius-style trailing options. Anything that makes the shot more satisfying without causing balance issues or making the lower levels feel terrible is fair game.
LIVES, BOMBS AND RECOVERY
Shmups tend to be pretty strict with how they handle lives - in CAVE games you tend to get a starting stock, a couple of extends and a 1-UP item. This strict approach has its benefits as it forces the game design to be very tight since any mistake will be severely punished. The games are, with some exceptions (true last bosses) designed to let you avoid every single bit of damage with some practice.
Shmups with robust, large health bars tend to lack this rigorous design, which is why health bars are a bit of a taboo. That does not mean that they’re bad, however - multiple CAVE games like Guwange, Deathsmiles and Akai Katana use them quite well.
Because each mistake is very costly, the games give you a breather if you do die. After each death, all enemy bullets are cancelled to clear up the screen. After a short while, this cancelling stops but the player is still given a couple-few seconds of invincibility to kill some enemies & reposition themselves. Not destroying bullets helps with the repositioning process since players will know what to expect. Generous invincibility is important to prevent chain-deaths.
Bombs are a multi-purpose resource, they can be used defensively (called panic bombing) and offensively to safely & quickly kill bosses. It’s beneficial to add a small buffer so that if the player bombs within a couple or a few frames of their death, they can nullify their death. Dying on the frame you bombed always feels frustrating.
The overlapping projectiles and patterns, enemy waves, various particle effects and items make for very chaotic and busy screens. Yet despite this density of objects and information, danmaku games must have exceptionally good visibility to guarantee a fair, non-frustrating player experience.
The world of art provides a very helpful concept when dealing with visibility - VALUE. Value refers to the lightness/darkness of any given colour, it takes hue/saturation/brightness into consideration, as each part of the hue is unique. It can be grouped into 3 general categories - highlights, midtones and shadows.
The best way to isolate value is to run an image through a black & white filter.
While looking at the values of different bullet sprites, you may notice a pattern - they put light & dark values side-by-side. The bullets often have very bright elements (the glowing cores) right next to dark elements (borders, sometimes inner circles/lines). This is how you maximise visibility by using values.
Low contrast backgrounds that rely primarily on midtones also help with visibility since they let you freely use extreme values for important elements.
Colour is important too - there are good reasons why so many danmaku games settled on reds, pinks and purples - they are less likely to clash with commonly used colours, unlike traditional yellow and orange bullets which tend to overlap with explosions & golden items.
Chunking patterns is vital for visibility. Players try to predict bullet trajectories and move accordingly, and chunking helps to telegraph this. Try to group bullets up into lines and other clear patterns, single stray bullets are hard to read and can often feel unfair. Bullets with unusual, hard to predict trajectories may need extra effects like trails to help players out.
Some examples of how you can make trajectories clearer - group bullets, elongate them, or give them trails.
Animation also helps bullets stand out. Looking at CAVE bullet sprites will quickly reveal all kinds of wobble and ripple animation which catch the player's eye and give each bullet a unique identity.
Last but not least you have depth sorting. Enemy bullets should always be drawn on top of other game objects such as player sprites, projectiles, items and explosions. Use bullet size and speed to inform their depth. Smaller, faster bullets should be drawn over bigger, slower bullets. Single bullets or small chunks should be drawn over bigger easier to read chunks.
When you break things down, danmaku games only have 3 simple types of patterns, they are as follows : Aimed. The trajectory of the pattern is based on the player's position on screen. Good for pressure, allows conscious manipulation by the player. Can be quite dynamic due to inconsistency in the player's inputs. Static. The bullet trajectories are predefined and do not change based on the player's position. Good for creating obstacles. Static patterns give the designer a lot of control, letting them flex and make beautiful and cool patterns. Random. The bullet trajectory is randomised. Keeps things fresh. Has to be used carefully because it can create unfair situations.
A common pattern combining a static pattern (elongated bullets) and an aimed pattern (chunks of thick round bullets). The aimed bullets force the player to move, while the static pattern makes their movement more difficult. Games mix and match these 3 simple pattern types to create layered, unique and fun challenges.
The x/y coordinates of the emitters can either be preset and unchanging (which guarantees that the patterns are clean and consistent), or they can change based on the enemy's movements (which allows you to create very dynamic and unpredictable patterns by bending and distorting the patterns).