All Discussions > Steam Forums > Off Topic > Topic Details
This topic has been locked
Designing a shoot em' up - tips n' tricks 101
This is a post aimed at those of you who is interested at starting developing games (primarily shoot em' ups). If there is a more suitable forum for this topic, I kindly ask a moderator to move it there.

Wall of text inbound, possibly with grammatical and spelling errors. You have been warned.

This is supposed to be a "short" guide on important points regarding the balance and design of shoot em' ups, something that might be of interest to starting developers aiming at that particular genre. I will update this guide with new points if I deem so neccessary. Also note that this information is to a large degree subjective to what I feel is vital regarding the design decisions, and my perspective as a GML programmer. However, you are free to discuss in the posts below. There are many ways to go about things.

Who the h*ll is this guy anyways?
I've designed a shmup previously and the second one is more or less done. These games are on PC, however I'm very much interested in broadening to hand held devices. All my current games are of the classic 2d space shmup genre (in this case meaning a bit "slower" in tempo compared to the bullet hell genre). My first game is situated at indiedb and is called Attack of the Crimson Marauders (I have a penchant for long and convuluted titles). Attack of the Crimson Marauders have not performed stellarly. When I contacted retailing I was also warned that shmups in general don't sell. Don't be discouraged, but be aware that the road might be a bumpy one. I, for one, love making these kind of games, and will continue making them. It's been a learning experience, and I would like to share some of this with you guys, if you choose to tag along for a bit of reading.

Tools used
Game maker studio, GIMP (sprite making/editing), audacity (sound recording), sfxr (sound effect generation), crappy computer

The list below is in no particular order



Time
Shmups, at the core, are easy to make, yet they do take alot of time (months and months) if you want the player to have a good and engaging experience. It's easy to make a straight forward pixel shooter (I'd say a week or less, tops, if you are experienced). Such a game can be a great learning experience, and should be the first thing you make. However to make interesting mechanics both for bosses, projectiles and regular enemies you need time, and alot of it. Making things move around on a 2d plane sounds easy at first, but even if you are experienced figuring out all the implications and interactions take time. However, you don't need to be a math genius to code, at least in GML (luckily for me).

Feedback
Did I hit that boss? What ever happened to that powerup I just flew over? It needs to be clear what is happening on the screen. One way to do this is with sound effects. One sfx for a hit, and another for a bullet deflected (if a boss is temporarily invulnerable for example). A boss life bar can make things even more clear. As a side note; remember the boss health bar in Castlevania, for NES? It was always there, even though you hadn't reached the boss room yet. I actually think it worked out great; always reminding you you had that damn boss waiting at the end.

Ok, back on track. Powerup pick up can be clearified by using digitized vocal effects (this is how I did it in my latest creation). This can also add to the atmosphere of the game. Low fi voice recordings have a certain charm to them. Add in a graphical pick up/hit effect and you are set. The graphical and audio feedback can be complemented with written text, it can however be obtrusive if done wrong. I like to keep the screen as clean as possible, using clear icons for health and any gadgets that are active.

Contrast & colors
Make sure all enemy projectiles and objects are clear to the background, and all other effects going on. Having a black background and making enemy ships dark gray (without any other color that stands out) is simply a big no no. This is also important for the HUD (displaying health etc). If the HUD is free floating you need to make sure the components are clearly visible on all available backgrounds. A good tip regarding projectiles is to complement the base color with a high contrast one. A bullet with a white core, surrounded by a dark red border, works in many situations. Something to also consider is the depth of objects compared to each other (i.e if sprites are drawn on top of each other or not). Objects that are dangerous to the player needs to be on top of everything else. Having huge explosions and then having projectiles obscured under them just doesn't work.

Engaging the player, 1
So, now you made a couple of levels and have the core assets completed, make the following test: Fire up your game and position your little space fighter at the edge of either screen, and do nothing. Just sit there while the game chugs along. Crazy right? Now the question is, how many times do you get hit? If you only get hit once or twice, don't worry, levels can be redesigned and its relatively easy to make or modify enemies with challenging patterns and even reactions to what the player does. One solution is to make levels a bit more labyrinthine, by adding some solid scenery. Do this from time to time, at the edges and other strategic locations (you can funnel the player into a more deadly zone *evil laughter*). Nah... you have to make sure it's perceived as a fair challenge. The player should have a fighting chance after all. The next four points belong under this category, but I decided to split things up.

Well, this got drawn out
Another solution is making certain enemies or projectiles home in on the player ship. This can be challenging for a programmer that just started out, but there are some good guides regarding image_angle and direction around. What to consider here is speed and duration. A homing projectile shouldn't be to fast, neither can it be allowed to home in on the player for infinity (set up a timer for self destruct). I remember a build where I had a missile flying behind me over the entire level. Needless to say that build got reworked.

So you can make dangerous objects that continuously homes in on the player, for a while, or you can make objects that sets their course toward the player and then stays on that same vector, even though the player moves. The latter object can have a higher speed and duration than the continuous one. Side note on continuous projectiles: If you feel up to it, add in some vector prediction (as in the projectile calculates your future position by using your and its own speed).

Telegraphing
Telegraphed attacks are a must for hard hitting attacks, especially if those attacks happen in an instant. What am I talking about here? Well consider a large aoe attack, a laser in this case. A laser sprite can't really grow in length, in time (no, this is not physics class). So how to solve this so that the player has a chance to react to it? You make the laser either fire at a specific location at a specific time, so the player knows what area to avoid by learning, or you make the laser several frames long, slowly building up the width of the beam. The laser is only damaging at a specific frame (i.e when at full width).

Patterns
Patterns can be a great way to engage the player, making sure the player is forced to react to alternating circumstances. In GM this is a cakewalk by using paths. So, yet again, what am I talking about? Well, you can have a simple space fly sprite and make it move forward and from side to side, when activated. This is what I call predictable movement. The fly is locked to that movement pattern, but it can still spice up the player experience. You can of course also make objects move unpredictable (making asteroids start with a random vector, mines spreading shrapnel, etc). This is where it really gets interesting. When using this approach the player must have a chance to avoid them, if meeting near-optimal conditions. This means their size and speed must be taken into consideration. Randomized vectors are a great addition to almost any shmup, since it helps keeping things fresh, even for long time players.

Shmups must be about skill, reflexes and challenging yourself to reach the goal helped set up by game environment
Title. They can be punishing, but they must always be fair.

Engaging the player, 2
What is the goal/drive for the player? If it's a score attack game, then you just need to present interesting risk/reward scenarios. Some enemies can give a huge score reward, but will also blow up; sending shrapnel flying all over the place. You can have the player choose between a more score rewarding/dangerous passageway (see 'Engaging the player, 1', 'labyrinthine') and a safer one. Is the drive of the player collecting cash and buying gear? Make sure to balance the cash rewards of various foes versus their "deadliness". It seldom works to just have the player blow stuff up, for the sake of it. The risk of such a system is making the player lose his engagement, leading to the player stopping challenging him/herself. Eventually he/she will quit becuase of boredom.

Beauty & inspiration
Do you want to make a 2d pixel based game? Are you an artist? Drawing interesting 2d-objects is not hard, but fun, and they have a certain charm to them. This is one reason many indie devs chooses to work with low res sprites. I love drawing those big space ships and tanks (the moar guns the better). If you are new to this kind of thing, I recommend checking out other peoples work. Google is handy for this. I can however give you the tip of using shadowing (darker color) and highlights (lighter color) together with the base color. As a rule of thumb, in a mundane enviroment, the light always come from the top left. Using shadowing and highlights will give the sprites a softer and more aesthetical feel. Try especially to soften up sprite borders.

Tools of destruction, equally destructive in an unequal way
This is important not just for shmups. Make your different weapons and gadgets have a specific role to fill. Sure, you can have 100 different weapons, but what does it matter if the player still only uses your Omni-directional Blaster of Infinity, becuase it simple is best? I do agree that this is hard to balance, and you tend to develop your own favourite guns as you develop. Now there is nothing wrong with having a default jack of all trades regular joe cheap frontal slug gatling cannon, but you need to give players an incentive to use other gear. Make a gun extremely deadly, but with a spread that's almost non existant (anti boss weapon). Make a gun only fire sideways, but very fast. Etc. All this helps the player feel engaged, and makes him want to try new stuff.

Gamepad support
Do it.

Music
Simply needed. If you aren't a composer yourself, you can hire someone. There are also some online resources with music that's free to use under creative commons.

Plan for the future (mostly game maker related)
Code the game in such a way that it's easy to, for example, change the length of a level, add in new levels and affect the placement of various objects. GML coding 101 says to use things like room_speed and room_height instead of 30 and 720. Learn about parenting, if you want to save time. Basically you need to make sure you need to change as little as possible when you want to change as much as possible (does that even make sense?) If you want coding advice I recommend you to check out both the GM manual and the GM community forums: http://gmc.yoyogames.com/

Bugs
There will be bugs. The bigger the project, the more bugs. Test the game with all various in game set ups, and make sure you send the game to all your friends/enemies for them to test on their computers. Check how the game runs on different OS's and hardware configurations.

Coffee
Altough I'm not an advocate of drug abuse, lots of coffee is needed.

EDIT: Spelling errors. Formating.
Last edited by Grefve von Snabula; Feb 18, 2014 @ 4:13pm

Something went wrong while displaying this content. Refresh

Error Reference: Community_9734361_
Loading CSS chunk 7561 failed.
(error: https://community.fastly.steamstatic.com/public/css/applications/community/communityawardsapp.css?contenthash=789dd1fbdb6c6b5c773d)
Showing 1-7 of 7 comments
2IndieDev. Mar 9, 2015 @ 5:12am 
I like this. XD
Glad someone read it ;) Almost forgot I wrote it, lol
Electrisipio Aug 11, 2015 @ 10:05pm 
Nice Article dude!, i´m designing a shumup, and this was very useful, thanks !!
Keep making this if you can!
2IndieDev. Aug 12, 2015 @ 2:23am 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UBO Feb 14, 2017 @ 7:55pm 
Don't delete this, it's pretty useful
luddegodofpain Feb 22, 2019 @ 12:09pm 
Good post, im designing one atm, telegraphing attacks section influenced my game =)
Oliver #MAGA Feb 22, 2019 @ 3:47pm 
Do you plan on making a guide version of this? It could be helpful.
Showing 1-7 of 7 comments
Per page: 1530 50

All Discussions > Steam Forums > Off Topic > Topic Details
Date Posted: Feb 18, 2014 @ 3:42pm
Posts: 7