Classic FPS Engine for Game Maker Studio 2
A downloadable asset pack
This is a full template to make classic FPS games in Game Maker Studio 2, specifically in the style of Wolfenstein 3D, Blake Stone, or Catacomb 3D. Free demo file included.
What's in this "full game structure" project template?
- Auto-generation of a 3D level (maze) by simply drawing tiles on layers in the room editor. Creating a level for your game can be done in only a few minutes of work (or longer depending on how detailed your design is). This works for a floor layer, a wall layer, a ceiling layer, and a few more like wall pieces that go above doors if desired. If you are familiar with drawing tiles on a 2D layer in Game Maker Studio 2, you won't need to do much more to design a 3D maze.
- Shoot enemies (or attack them with a melee attack) . Enemies have a basic behaviour that makes them attack you as well. One enemy is included with a full enemy AI logic.
- System for 8 directional sprite movements for enemies. This makes them animate as if they are rotated in 3D space.
- Pick up items like door keys, treasure for points, ammo per gun type, or health items. There are 4 weapon types: Melee, handgun, shotgun and rifle.
- Exit a stage by interacting with an exit switch, progress to a results screen, then move on to the next level. You will have to code the results screen yourself.
- Level structure: Game can be made into chapters, each chapter with its own subset of levels.
- Premade title screen, options menu, and credits screen.
- Customisation in user interface like reticule, reticule color, screen overlays.
- A functional save/load system* (works for what's included in the template, will need to be expanded if you add more things to your game). Save system is designed so that you won't be able to save when enemies have you in their line of sight, forcing the player to move to safety first, to prevent soft-lock saving.
- Difficulty system: 3 difficulties are included that affect enemy reaction time and enemy damage.
- Full screen / Window mode option.
- Doors: Can be colored doors that require keys or just normal ones. Can also be secret doors. Doors can have vertical or horizontal orientation and can open up in 6 different directions (2 for each coordinate: x, y, and z). Basically doors open by sliding across the x-y plane or by going up or down on the z axis.
- Fog: if desired a shader can be used to create a fog effect often used in older games. Can be used to reduce draw distance, and helps to create a dark atmosphere. This is turned on by default.
- A simple screen filter system that uses Game Maker Studio's FX layer system to produce a pixelated look (making it look more like early 90's FPS games). This is also turned on by default.
- Tons of comments across all code. Pretty much everything is commented and explained to a high degree.
*The save system will create a file on your pc that you can find when typing %LOCALAPPDATA% into the windows search bar.
You will find that by opening the template for the first time and simply pressing the "play" button, a full demo is already set up for you: A small "full" demo game with 3 chapters, each with 3 levels.
My goal was to make a template that would make it extremely easy to create games in this style. A template that does all the heavy lifting for you when it comes to "old first person shooter" 3D stuff and movement, while also having a full game structure (with user interface, level structure,...) setup and ready to go. Keep in mind that making your own assets can still take a lot of time (like music, sprites,...). It's not just a simple system about transforming a 2D layer to a 3D level, it's a whole game structure.
The 2 ambient horror music tracks in this template are part of my horror ambient loops pack, made in FL Studio:
Horror Ambient Music Loops by EMI EMI GAMES
Controls:
WASD = move
Mouse = aim, left mouse click = shoot
Backspace = pause / unpause
E = confirm / open door
DELETE KEY = delete save file at the LOAD menu
What can this template not do?
This is mainly meant to make games like Wolfenstein 3D, meaning games like the original Doom are a little too advanced for this template. Please keep this in mind when working with this template.
Just like in the very first first person shooters, you get a floor layer, and the player can only stay on that elevation. A jump and "free aim" is included but are by default turned off since those are outside the scope of the style of game I was going for here.
LEGAL:
After purchase you can make any commercial or non commercial game you want with this template, as long as you don't sell the template by itself. I would appreciate it if you credit me @EmiEmiGames
The human guard sprite was made by Paul Zarczynski and is at the time of making this itch page public domain (CCO license). The sprite art can be found here:
Human guard for Sprite Based FPS | OpenGameArt.org
Feel free to check out my other works as well!
Updated | 14 days ago |
Status | Released |
Category | Assets |
Rating | Rated 5.0 out of 5 stars (2 total ratings) |
Author | EMI EMI GAMES |
Genre | Shooter |
Made with | GameMaker, Aseprite, FL Studio |
Tags | 3D, 3d-generator, easy, First-Person, Game engine, GameMaker, Pixel Art, Project template, wolfenstein |
Average session | About an hour |
Languages | English |
Inputs | Keyboard, Mouse |
Purchase
In order to download this asset pack you must purchase it at or above the minimum price of $10 USD. You will get access to the following files:
Comments
Log in with itch.io to leave a comment.
Hey, I bought this about a week ago but have been really busy and haven’t had a chance to explore it yet.
Is it possible to create randomly generated levels using your FPS engine? Like if I had it create hallways, rooms, etc at the start of the room, would that work? Or does it require tiles to be placed in the editor for it to function?
Thanks!
Hi!
This does not have a random level generator in it. What this does is convert layer tilemaps into 3D mazes, and use 3D billboard sprites for the items and enemies you place as instances in the room editor.
However, if you can code logical randomized tilemaps yourself, the conversion to 3D would apply as well.
A room is constructed mostly through 4 layers: Floor, Walls, Ceiling and "Wall pieces above doors". When you draw these layers in the room editor, these will be converted into the 3D maze. If you can figure out a way to consistently have these multiple 2D layers work together into creating a logical random maze, then that could theoretically work. Keep in mind that doors and key placement will probably be a bit tricky to setup.
Randomized levels is not in the scope of this template however since I am not too familiar with random level generation.
Thanks for the quick response! I’ll have to try it out and let you know how it goes.
I am looking for a hack and slash side scroller template with text box interaction with NPCs next.
Hey, that looks really cool, congrats. :)
What method do you use for 3d world, the built-in 3d functions, or something old-scool, like raycasting?
Do you have some comments or notes in your engine how to extend it, eg. add own textures?
All code is commented in the project.
What happens is that the tilemaps drawn in the room editor are sampled and turned into 3D cube shapes by constructing the 3D vertices when the level starts (but only if they should be visible). The tilemap itself is then used as a texture source for the generated polygons. The texture source is a surface on which the (animated) tilemap is drawn for each used layer.
The camera projection handles the rest.
It's done using Game Maker Studio 2's vertex/camera/matrix functions.
The hit detection is handled by checking collision boxes and collision lines (using Game Maker functions like for example collision_line).
There's also options where you can set the scale (in tile-size units) of walls, so you can make the walls higher or lower (same with ceiling,...).
As for how to add your own textures, once you understand how to assign texture coordinates to vertices, it should definitely be possible to add that yourself. In fact, the "exit" object, the "door" objects,... already do that!
Wow, thanks for the detailed answer.
I was trying different methods of fake 3d solutions for different type of games, mainly as prototypes, like
or
but yours seems to be really complex and ready to use for little games.I am just wandering how you can increase the resolution (texture and/or entire game window) and how it is affecting performance.
Anyway, as I am curious, I plan to buy yours, maybe only for learning purposes, but with a chance to create a fun project. :)
You should be able to change resolutions by going to the specific code blocks that sets the window size, application surface dimensions, and how those are resized in the fullscreen/window mode code block.
is there anyway you can put head bobbing movement into this? Cheers
I think you mean that the camera swivels up and down while walking? :)
That is in there, altough it's subtle, and can be adjusted.
this is really good. im extremely satisfied with this purchase. There is a ton here to use and the project is put together very well.
Glad to hear it! I certainly hope I made every line of code as clear as possible... I put a lot of effort in my templates, with more on the way!
Thank you, your comment made my day all the better :)