# shooter: an idea for a simple fps game
this is another of those fantasy posts where i think aloud what sort of game i would try to make if i had infinite time, motivation and energy to do things. in the past i sometimes did sit down and start working on a game but i always gave up after the initial excitement evaporated. at this point, i'm happy if i can simply formulate what i would do. this way maybe my brain can give the obsessive thoughts about the game a rest.
so usually when i think about making a game or software, i try to think only about making the core work well and not care about making it fancy or good looking. for me if the core is good, i don't need fancy graphics or user interfaces. in fact, they would just get into the way. i'd only need fancy graphics if the core is just not good enough, and i'd need some sort of eye candy that sort of hides the fact that the underlying game is actually boring. unfortunately most modern games are like that: they look very fancy but are actually quite boring if you were to remove fancy graphics and replace it with simple shapes (e.g. spheres). the question is: can you make a shooter that is fun in itself even if it just consists of, say, spheres. e.g. each enemy and each projectile, (hell, maybe even the walls) are just spheres?
one of the reasons i'm actually not interested in making such a game, because there is already one good free single player shooter game: brutal doom when played on the original doom 2 maps. it runs on a relatively simple engine so it can't do too fancy stuff. but what remains is basically superb. good feedback on the enemies, good gun mechanics, good maps, no unskippable videos, no overlong loading durations, no high computer requirements. it just gets everything pretty much right. i couldn't find any other game coming near to the utility of this doom 2 mod. actually, most modern games try to model things more and more realistically which actually works against the fun of the game. if i wanted a really realistic shooter, i'd just go play paintball in real life. even though we already have brutal doom, i wonder, can you go for a significantly simpler game and still have it quite fun?
one of hard the problem of games is content. in case of shooters you need some maps and some motivation and goal for shooting all the enemies. i really hate the overly abstract games where you only play for scores. i'm not very competitive person, i want to enjoy the game alone, on its own, or if multiplayer, then it should be some sort of cooperative game where you have to play together to achieve a common goal rather than competing against each other. competition is only fun while i'm winning but if i'm constantly on the losing side, the game becomes quite boring for me. most of the time i don't want to invest into the game enough to become competitive so i just stick to single player games.
in this hypothetical game i would take the maps of doom 2. i like those maps since structurally they are 2d maps yet they still contain rooms with various heights so the fights have a vertical element. however good maps are not enough alone. so i'd also add some short story progression text between the level transitions. i'm not sure what sort of text but each transition text should have the following properties:
if it's possible, a few comics would also work but that sounds way too much effort. text is enough if one is going for simplicity.
on the technical side, i'd just hardcode the game resolution to 640x360. if the graphics and gameplay are quite simple, it doesn't need a lot of detail. then a smaller scale is more than enough. smaller scale means that the game is more performant, it will work on very weak machines too. having a fixed resolution makes a lot of things very simple: i wouldn't need to deal with supporting all sorts of aspect ratio issues, making sure my fonts and heads up display are legible, and many other things like that. i picked that resolution specifically because scaling it 2x will get me 720p, scaling it 3x will get me 1080p. i like such exact scaling because then the game can remain pixel exact. i don't like blurry things.
there would be only one weapon in the game. i think it's important to pick one weapon and focus on making the gameplay fun with that. i understand that game can be more compelling if it has a lot of variety but that is not my goal here. what i'm trying to see if you can make a shooter based on a single gun compelling enough. but what weapon should i pick? most shooters have 4 common weapons:
the first option is the sniper rifle with an optional zoom: this is a hitscan weapon for very long distance battles. this can be quite rewarding but at the same time quite frustrating if you have bad aim. it's also quite boring in the sense that you are usually quite motionless, the movement is not that important. so this gun doesn't satisfy the fun in the movement dimension. there's also the problem of dealing with lag in multiplayer games. getting the correctness right is quite a hard problem. one doesn't want to experience the fact that they correctly clicked on a target, yet the server refused to acknowledge the hit. so if one wants multiplayer, sniper rifles can get quite tricky to implement fairly.
by tracer guns i mean guns that are hitscan weapons with high fire rate. the player needs to trace the enemy continuously - keep aiming at the enemy while continuously attacking to slowly destroy the enemy's shields and health. examples are the machine guns in most old shooters, the lighting gun in quake 1, the link gun in unreal tournament, or most rapid or continuous fire guns. these are usually mid range weapons. my problem with this sort of guns is that they are not as satisfying as the other type of guns. with a sniper rifle or shotgun, you can eliminate the enemies with one shot if you are lucky. that's satisfying because you get an instant feedback for an action. with tracer guns the gameplay feels like a grind. gears of war contains lot of action like this and i find that boring. that game feels like a chore. so i'd totally avoid building the main gameplay around this.
i love the overpowered shotguns in some of the games. brutal doom has it pretty good. what i love about them the most is that in close range you can instant kill the enemy, and gibs of the enemy fly away. it's a very satisfying thing. and this also requires good amount of movement skill too. you have to run back and forth against the enemy for the attacks because the shotgun is ineffective outside its range. this is quite fun but the problem i think i have is that most of the satisfaction comes from the effect of the gun rather than the skill of the player. it's not super hard to play with it. and if you go with pure graphics, a lot of the gun feedback goes away and it won't be as enjoyable, at least not for long.
by projectile guns i mean guns that shoot flying projectiles that travel at moderate, constant speed. think of the rocket launcher of quake and unreal tournament, or the shock rifle's alternative attack in unreal tournament. i also assume that this gun is not fast firing, so there's some delay between the shots. i never really liked these guns for two reasons: they were slow so there was a lot of dead time during action, and more importantly it's usually super hard to hit moving targets with them. but i have to admit: hitting someone with such projectile is very satisfying. but still, in total: not fun. at least that was my opinion until i played shootmania which i think did something genius.
before explaining that, let's talk about the concept of ammo a little bit. ammo adds a tactical dimension to a game. the amount of ammo you have changes your tactic. full ammo? go guns blazing. low on ammo? play it very carefully, try to eliminate enemies one by one with precision attacks. it also paces the game a little bit. it forces you to explore the map for the resources. so it prevents the game from being all action. in modern games you even have reloading, which forces you to take mini-breaks from the action which helps you take a breath and perhaps rethink your strategy. it's also a nice ritual you do after each battle. it also helps to add a closure to a battle since you probably won't reload during a battle unless you absolutely must. you do it when you feel your job is done. i believe there might be also another psychological aspect of being more vulnerable during a reload which also satisfies some internal craving of being defenseless in a safe environment but i haven't thought about this aspect a lot so let's not get into this.
the problem i have with ammo is that they take away from the purity of the game. it makes the players inequal. the person with more ammo is at an advantage. so at this point the game is not pure shooting skill, but also map control tactics. both shootmania and mass effect solved this very nicely while still retaining some of the above mentioned benefits: just have infinite, slowly recharging ammo. in shootmania you have a single gun: a gun that shoots projectiles. but it has a catch compared to the above games: there's no splash damage, you have to hit the other player to frag them. that in itself would make it super hard but to counteract this problem, you can shoot the gun as fast as you can. so you can spray your enemy with projectiles. but that in itself would make it like a tracer gun so to counteract that, you have only 3 shots in the gun. but they quickly recharge, so even if you shoot away all your charges simultaneously, few seconds later you can shoot again. however if you shoot as soon as your first charge is ready, you'll need to wait again for your next shot. so what happens often in close battles is that you have two players dancing around each other, waiting for the right time to start attacking. too soon - they will have less charges available - less chance of hitting the enemy. if they wait too long, the enemy might start spray attacking sooner giving them a high chance for defeating the player. and there's no unnatural need to run away from a battle due to lack of ammo. the only thing the player needs to concentrate on is the other player and the timing. it's as pure skill as possible.
so that's one aspect of gameplay. the other aspect is that you have a projectile gun which means it's incredibly satisfying when you hit the other person. with a typical hitscan weapon you just need to move the cursor over the other person's avatar and shoot. it's a very mechanical skill that requires very good reflexes. with projectiles you don't need to do that. all you need to do is to predict where the enemy will be in a few seconds in the future. the nice thing about this is, that you can compensate for bad reflexes simply by increasing your distance to the enemy and making better predictions. and it's not like your predictions must be absolutely perfect. the projectile balls are quite sizeable so you have quite reasonable margin of error. and since you can spray 3 shots in a row, you can cover a larger area. or even shoot tactically - use the first projectile to make the enemy go down a certain path where you'll greet them with your second projectile.
to summarize: i think a fast shooting projectile gun with limited but recharging ammunition is the best gun to make a pure skill based bare bones shooter.
alright, we got the weapon down. next up is health. in general i think the concept of health is silly. especially recharging health. if you have the concept of health, then you start worrying about health. that takes away from the pure shooting skill. i think the best thing to do is just to have instant death. if you hit the enemy, the enemy dies. if the enemy hits you, you die. shootmania actually gives you 2-3 lives so the first shot doesn't kill you except for certain gamemodes. i think that's fine too up to a point. but if i have to be as pure as possible and choose one gamemode, i'd go with one hit one kill. my motivation here is to simply not allow place for mistakes. if you win a level then you should win it without any mistakes. that way you will feel the best about yourself, that's how it should maximise the feeling of achievement.
keep in mind that i'd play this game on doom 2 maps. they are relatively quite small and if you don't hunt for resources, you can pretty much run through them quite fast. so you wouldn't need checkpoints or savegame support. the game would be only about the fact whether you can run through the map without a mistake or not. the main challenge would be about you avoiding the enemy attacks until you either manage to run past them or eliminate them based on your preferences. you make a mistake, you quickly start from beginning and you keep trying until you can do the level without a mistake. no messing with healths and lives and whatnot. just pure movement and shooting.
and now come the enemies. i'd represent the enemies as spheres. the projectiles are also spheres so the collision detection becomes quite easy if you only have the spheres to spheres case and spheres to a static geometry. and drawing them is quite easy too: all you need to draw is a quad with a special shader that can correctly project a spherical texture to that quad with a 3d effect. you don't really need full human-like geometry to make the shooter fun. you usually need 3 pieces of information about an enemy:
the position is quite easy to solve: the enemies have a face. you know the enemy is facing towards you if you see their face. you just need to map the texture correctly.
you can implement the intent easily too: you just draw a different face for different action. e.g. if the enemy is preparing to shoot you, you could have a texture where one of their eyes is closed and they are squinting. of if they want to dodge, you just draw a big open mouth suggesting they are taking in air for the jump and have their eyes look into the direction of they planned dodge.
the direction of movement is a bit trickier since you can't represent that with texture tricks. you need two things: you need to implement "bobbing" during the movement. basically the sphere should move slightly up and down to indicate the movement. this is important because if they are moving towards or away from you, this would be your primary hint. secondly, you need to implement a "footsteps" like effect. basically every half a second add a quickly fading smoke effect in their position at the given time. the point is that you should be able to see the trail of their recent movement. this and the bobbing should be more than enough indication of the direction. although the technique is relatively simple, it needs a lot of finesse to get it right for maximum utility.
as for enemies, i wouldn't go overboard either. i'd implement only 3 enemies:
all three enemies would be quite mobile. if you shoot towards them, they will try to dodge the projectile. so you actually need to get close to them to battle with them. the game would be about close to mid range combat. of course that doesn't mean you can't land the occasional lucky shot but it should be rare (but incredibly satisfying). and of course the enemies have only one health too, so the challenge is all about hitting them while avoiding their attacks. as for differentiating the enemies: i'd just probably color their spheres differently and that's it.
biters are enemies that try to run towards you, jump on you and then bite your head off. they are quite easy to deal with as long as you don't let them get too close. if you do, you have to very carefully dodge their jumps.
divers are flying enemies that fly near you and once close, they dive towards you. very similar to biters the only difference is that they are not constrained to the floor. some doom levels have flying enemies, and having some vertical enemies adds some extra flavor to the game anyways.
spitters also run towards you until they get to a mid range, and then they shoot projectiles at you. they should be the closest that come to playing against other players. and your projectile avoiding techniques must be top notch to avoid their attacks. they should be able to predict your movements via simple linear interpolation and thus you can't simply run around to avoid attacks, you would need to move in a completely inpredictable way (which i often struggle with). they can't spray projectiles like you can do, but if there are multiple ones, that means a lot of projectiles to avoid.
in general i wouldn't put too many enemies on the map since you only have one health. too many enemies would just a grind anyways. maybe about 3-7 enemies per room depending on the size of the current room. that should provide plenty of spatial challenge in avoiding the attacks, and a tactical challenge in shooting them all quickly enough.
so that pretty much sums it up. i know one could extend this with gazillions of stuff. but if i were to make a basic game, i would totally start with only that. i think the above should be more than possible to finish someone in a few months from total scratch in c and yet still end up with a quite nice game that doesn't need a lot of polish.
edit: some other random ideas in no particular order:
published on 2020-02-16, last modified on 2024-08-01
new comment
see @/comments for the mechanics and ratelimits of commenting.