By Julia Sigwalt, Senior Game Designer at Kokku
The interesting thing about designing a shooter, is that things look simpler from the outside than they really are. As gamers we tend to get familiar with some vocabulary regarding a genre, but understanding the challenges of their implementation is a whole other thing.
Designing a shooter game begins by defining how grounded in reality your gameplay is going to be. It can be tactical and put the most effort into mimicking reality or be more focused on the player’s fantasy of power (Boomer-shooters) or the feeling of speed (Movement shooters).
Every shooter game has some cornerstone mechanics: aiming, weapon sway, recoil, spread, rate of fire, reload, etc. But how these mechanics are implemented depends on the intended player experience. If a game is a competitive PvP, there is a greater focus on making sure there is a balance between different playstyles and weapon choices. Whereas if you’re designing a single player game, the focus might shift to making the guns feel different from each other and feel extremely satisfying to shoot. The game’s genre also determines the way these mechanics are balanced, and the additional systems they will interact with. A horror game designer might make shooting feel stiff on purpose and make reloading slower to create a greater feeling of tension on the player.
Mechanics
Let’s make a deeper dive into the main mechanics of a shooting game.
Recoil:
The weapon goes up when shooting, right? It seems simple at the surface, but it gets a bit more complicated under the hood. The level of control required to achieve a good game feel means that recoil must be split into several variables that can be tweaked by the design team for each weapon. So which variables do you need?
- Strength – How many degrees the camera will move up after shooting.
- Interpolation – How fast the camera moves between the centre and the recoil distance.
- Recovery time – How fast the camera takes to return back to the centre point automatically after the player is done shooting.
- Strength over time – This is important for automatic weapons as the recoil has to be added multiple times in sequence. It means the recoil will be much weaker when fired in sequence, but will accumulate making the weapon raise in a continuous motion. The recovery is only called when the player stops shooting or the ammo is over.
- Manual compensation – The movement the player does to prevent the camera from moving up with the recoil in automatic weapons.
- Final recoil – The sum of the recoil strength and the manual compensation. The result is how much the camera actually moves on the screen.
- Max recoil distance – That’s the limit the weapon will raise when firing multiple shots in sequence. It’s useful to prevent the camera from rotating to unnatural angles.
These variables can be used to create weapons that feel very different to play: a machine gun has recoil over time and can have a long recovery time, while a pistol has a short and fast recoil.
Spread:
This mechanic defines an area where the shots can land when the trigger is pulled. It varies by weapon, increases with movement (walking, sprinting and sliding) and decreases to a minimum while aim down sights is activated. The spread can be perceived by a change in the crosshair size, widening as it is increased. The spread also increases overtime when firing an automatic weapon. So, similarly to the recoil, there are these variables:
- Initial Spread
- Spread Over Time
- Max Spread
The spread can be the main characteristic of weapons like the shotgun (large spread) or the sniper rifle (minimal spread).
Damage
The damage is usually calculated per bullet, and it has multipliers depending on which part of the body was hit. The damage can be reduced if the bullet has perforated a surface or ricocheted before reaching the target. Or even multiplied with a certain chance % if the game has critical damage as part of their design. Balancing a weapon’s strength is more than changing its damage, it’s important to take the other mechanics into account. For example:
The sniper rifle is an extremely strong weapon, its bullets usually kill a person in a single shot. To keep the sniper balanced, it usually has a larger recoil recovery time and the camera speed while aiming through the scope is reduced. This means a very precise and very strong gun is balanced by having a high reaction time. A shotgun on the other hand can be fast and give a lot of damage, but lacks precision after a certain distance.

Bullet Drop and Damage reduction
To make weapons feel different from each other it’s common to mimic the physics of their real world counterparts, and even exaggerate them. In real life, gravity and wind resistance act as forces that slow a bullet down over time. In video games, simulating multiple bullets travelling in real time can be a heavy weight on performance, so we usually simulate the curve of bullets and the damage reduction with variables, while the shots are usually registered at the moment they are released (hitscan). There are many ways to achieve this, but usually a table that changes the values of damage reduction and bullet drop based on distance will suffice.

It’s better to reduce damage with a multiplier rather than a subtraction, that way it will always change based on your weapon’s base damage. This saves time, as you don’t have to manually change all the values in the table each time the base damage is updated. For the player the bullet drop means: “how much do i have to aim upwards to compensate for it?”. Since the whole point is the player camera rotation, the bullet drop should be calculated in degrees. Each weapon should have a different table, a sniper rifle might not have a damage reduction at all, while a shotgun might only do full damage within 20 meters, even if that’s not realistic.
Rate of fire:
The rate of fire determines the number of shots that the player can shoot per second. It means that with a high RoF several shots come out almost instantly. While a low RoF, means the shots must have a delay between each shot, ignoring the player’s button presses within that delay.
An interesting thing to consider is to create a buffer for the player’s input that lasts a little less than a second. This way, if the player presses the shoot button just before the delay is over, he won’t be punished by having to press it again.
Weapons with a higher rate of fire usually need a lower damage per bullet than a gun with a low RoF. That’s why it’s important to calculate the amount of damage per second when balancing different weapons, instead of looking only at the base damage. For example:

In this scenario, the assault rifle is stronger than the shotgun in terms of damage output. In many games a shotgun has a very high damage, which is balanced by its slow RoF and its damage drop. Usually the rate of fire will match the recoil recovery animation, that way the player can visually tell when they’ll be able to shoot again.
Time to Kill
When you divide the enemy’s max health for the gun’s damage per second, you get one of the most important metrics in shooter design: Time to Kill (TTK). It measures how long it takes to kill a full-health enemy (or player), without interruptions. While calculating damage per second gives you a tool to balance individual guns against each other, Time to Kill is what determines how intense the combat actually feels to the player.
A short TTK creates tension and shifts the gameplay focus to reaction time and positioning. Counter Strike and Escape from Tarkov come to mind. These games can be considered more punishing, as even a tiny mistake can mean dying before being able to react. On the other hand, a longer TTK shifts the focus toward sustained aiming, tracking, and movement, giving players a chance to turn a fight around even if they get caught off guard. Hero shooters like Overwatch and Marvel Rivals come to mind. Defining the time to kill reinforces the core fantasy of your game and can be used to make characters feel very different to play from each other.

Here you can notice that Widowmaker trades health for instant lethality and mobility, while Bastion trades mobility for high health and sustained firepower. D.Va has high mobility and extremely high health, which is traded for a slower TTK and short distance fire power. This is the classic game design balance triangle. If a character has a short TTK, high mobility and a large health pool, it can be considered overpowered. If that’s your goal, give it a different clear weakness, like being extremely loud or being unable to crouch behind covers.
Here you can notice that Widowmaker trades health for instant lethality and mobility, while Bastion trades mobility for high health and sustained firepower. D.Va has high mobility and extremely high health, which is traded for a slower TTK and short distance fire power. This is the classic game design balance triangle. If a character has a short TTK, high mobility and a large health pool, it can be considered overpowered. If that’s your goal, give it a different clear weakness, like being extremely loud or being unable to crouch behind covers.
Perforation
In many games shooting across walls is part of the gameplay. Predicting enemy movement and successfully landing a headshot on them across a wall can feel very satisfying. Implementing perforation can create not only special moments, but also make shooting feel more realistic and even more accessible: shooting through metal grates is a pain without perforation.
To implement it, it’s interesting to define the perforation depth limit for a handful of pre-defined physics materials and apply them to all the objects in your level. That means if the player shoots a concrete wall with 10 cm of depth it will go through, but if that wall is thicker it won’t. You can define a rule that bullets can’t ever go across sandbags so their perforation depth limit is close to 0 or define that plywood has a higher limit so the bullet can go across even if it’s 20cm thick.
In real life, penetration depends heavily on physics like density, but for game programming, a simple depth threshold is all you need. Density is just a mental model; players won’t do the math in their heads while playing. They don’t know if the wall is 10 cm or 12 cm; they’ll simply look at an obstacle and infer if a bullet should go through based on intuition and past experiences. Your goal is to create simple rules the player can grasp, so they can plan out their actions in the game. So make your perforation rules easy to understand: plywood and thin concrete are perforated, thick concrete and sandbags are not.
But what happens when the bullet goes across and hits an enemy on the other side? It’s important to multiply the strength of gravity after perforation and also reduce damage by a percentage. Define how much of the damage is reduced based on how strong you want to make shooting through walls in your game. If the damage is reduced too little, and the bullet doesn’t drop enough, suspension of disbelief is affected. Reduce too much and the mechanic loses its purpose. Don’t overcomplicate a system if it’s not going to be used by your player.
Ricochet
It’s common to see in movies a bullet ricocheting on wall or metal surfaces. It’s not always realistic but it sure looks awesome. If you’re aiming for fun, ricochet is an interesting mechanic to add to your game. To implement it, define an angle threshold where ricocheting can happen for a handful of physics materials and apply them to all the objects in your level (it can be the same physics materials you created for the perforation mechanic).
The angle determines how easy it is to ricochet on a surface. Metal has a wider angle threshold, concrete has a smaller one, sandbags might not ricochet at all. Similar to the perforation, reducing the bullet speed, making it fall faster and do less damage after ricochet is also important, but make sure it uses its own values, separate from perforation.

Ricochet can give your players an extra tool to use when killing enemies, and create excitement. If your game is competitive though, being headshot for being too close to a wall can feel unfair, even if grounded in reality. Balance this mechanic according to your game’s objectives, sometimes simply creating the visual impression of a ricochet is enough.
Ammo and Reloading
Guns have a limited amount of ammo that can be stored in them, when you shoot all of them, this storage gets empty. And when that happens, you need to physically replenish the bullets from your own storage (pocket, handbag, backpack, etc). That is called a reload. The amount of bullets in a magazine and how fast it is to reload the gun can really change the pacing and the gamefeel of your game. If you’re going for a fast-paced gameplay, get reloading out of the way and make it as fast as possible. If your game is more tactical, counting the ammo on every shot may be part of the fun, so reloading can become an important downtime and even punishing.
Aim Down Sights
Aim down sights, or ADS, is the name given for the ability to centre the gun’s body with the camera, often zooming in and making the shots more precise. Since the camera’s field of view is reduced, using the same speed to turn the camera can feel weird, so it’s important to implement a camera speed multiplier, to reduce the speed by about 40-60%.
Something common in games is to also reduce spread and recoil while on ADS, making it easier to land shots from further away. To compensate for the gain of precision, ADS usually also reduces player speed and limits their movement abilities. Some games even slow the whole game if you are on ADS mid-air, also known as bullet time. It can really help players land those shots and make them feel awesome.
Aim Assist
There is a big difference between playing a shooter on a computer with a mouse and playing it with a controller. The main difference between playing on a gamepad, is your entire camera movement relies on your thumb, rather than your arm and wrist. In that sense, it’s a lot harder to make small adjustments, especially if you don’t have a very sensitive controller.
To make shooting feel good on a gamepad without doing the work for the player, designers usually combine two main tricks: friction and magnetism. Friction automatically slows down the camera sensitivity when the crosshair hovers over an enemy, giving the player more control to stop on target and start shooting. Magnetism subtly nudges the camera to follow an enemy’s path while you’re moving. When balanced correctly, aim assist shouldn’t feel like the game is playing itself, but rather make it feel like the gamepad is a natural extension of the player.
Even with the aim assist tuned to the maximum, don’t make it automatically snap to your enemies’ heads, make it aim for the chest. Otherwise it completely removes the challenge and the satisfaction of headshots. Killing all your enemies with headshots can be dull if there is no skill trade-off, especially if your AI enemies aren’t that smart.
Final thoughts
Though this article covered the basic mechanics which are common to most shooters, there are many more aspects which are important for defining a shooting game: such as the movement mechanics, spawning systems, loot systems and the level design.
Remember to balance the weapon’s variables with the player in mind. Does it feel good to play? Does it feel different from another weapon? Are the weak and strong points of this weapon clear to the player? These are questions you should keep in mind when designing your own shooter.