FPS Prototype Reflection
I am excited to announce my FPS prototype project has reached its first milestone, a complete player experience. It was a journey to put all the moving parts of this project together but I am proud of the progress I made to push through to the end. From my last update on Linkedin, I have added quite a handful of new features to ensure I encapsulated a full experience from start to finish from UI to logic for a fully playable level. Here is a specific list of what was added:
Added a Crouch feature
Player can now duck under pipes to add variety to movement
Created procedural movement animations for weapons
A simple sway when moving
Gun will shake when the player lands from a jump
Created a simple encounter System
Designed to check if an encounter (such as removing all targets) is passed before letting the player progress to the next area.
Has editable parameters for what challenge is being checked such as
Reaching a specific location
Obtaining a specific score
Destroying all targets.
Created various Ui menus
Main menu
Pause Menu
Final results
Created a new demo level
Created an initial block out of the rooms I would use to test skill on movement and gunplay
Then iterated over that level block out with meshes from the POLYGON - prototype pack from the unreal marketplace
Tracked and saved player stats
Tacked player's accuracy and time to reach the end of the level
Created a simple leaderboard in the game for players to view their fastest time.
Created logic to save the top score and accuracy between play sessions
Bug Fixes!
Fixed bug where gunfire sound wouldn’t follow player
Fixed issue where line traces could trigger multiple times on targets
Fixed a few game crashes related to player weapons being set incorrectly
From this last session of development, I felt like I was starting to hit my stride and made a huge amount of progress in the time I was actively working on the project. The most important part of this update was to get the game loop in a place where I could make a playable build and the game would logically end. To help with that I shift away from my original idea of making this strictly an aim trainer style of game and modeling the experience after the tutorial shooting range experience from Counter-Strike: Global Offensive. Iterating over the idea helped me give myself more guidance as I was able to shape the experience more in line with what I was more passionate in making. Along with that creating a shooting range-style experience felt like the best way to test mechanics and get an understanding of how each of the guns would feel after I added the recoil system from the last update
The most interesting part to develop, and one I am planning to revisit, was the encounter system as it proved incredibly helpful when creating each part of the levels. I aimed to create this system in a way that would allow for reusability in a modular way as I expected there could be a few different types of encounters I would want even for the short demo I had created. This system is still pretty rough but I took more time considering how I wanted the core logic to work together and designing the flow of logic through the whole system. I essentially broke the encounter down into high-level pieces, such as set-up and main encounter, on how I expected the players' progression through it would be, and then created a few generalized functions that could be evaluated to end the encounter. I added a toggle to these functions in the editor for easy use so that if I (or a future designer) wanted to make an edit to what the encounter was doing, such as checking for all enemies to be destroyed, it would be a quick fix. In the end, the system felt very satisfying and I learned a lot working on it. I think viewing parts of a game like this from the lens of a game designer on your team is a good way to consider how easy it is to use and replicate this system throughout your game. I am excited to see what more I can learn as I continue to tweak the system.
Speaking of learning, this project had a lot of it both in coding techniques and knowledge of the development process. Personally, there were two big areas I learned the most about, planning and motivation.
Planning
Planning. It is something that is so simple in theory that I think it can often be overlooked or underappreciated. Planning is the backbone of any good project, road trip, or Disney land mad dash and it is what helps you move smoothly toward a goal. That is if planning is done right, which is something I struggled with initially on this project. For reference, this FPS project was action one I had started a few years ago after finding a tutorial on YouTube. To be a good game developer you have to make games so I figured following a tutorial was as good a start as any and diligently wanted each episode as I fleshed out the initial skeleton. What I didn’t have was a plan on what exactly I wanted the project to be. This isn’t always a bath thing for prototyping raw ideas as you continue to brainstorm what the core of your game is going to be but as you continue to go down this path you face a lot of issues. The biggest for this project was spaghetti code and poor comments. I don’t blame the past me for not knowing how all these mechanics were going to work together but I did sometimes cure his name in the wind when I needed to find which logic was in charge of the UI and it was buried several lines deep with the movement logic.
Rather than continue to be angry at me in the past, I started to see this as a good learning moment for myself on how I should be planning to avoid issues like this. Prototyping is always going to be a little messy but with a plan it can be more organized chaos that comes with a table of contents for easy reference. When I started to work on the project again I took some time, and a lot of paper, to break down the gun mechanic and consider what happens when the player presses a button. I found myself creating a flow-chart style plan for each step helped me to better imagine where certain methods should be called and when. This was also an easy system to iterate on as if I ended up needing to move the logic weapon recoil logic earlier in the chain I could easily redraw my diagram and track any issues quickly. Breaking down the mechanics this way helped me to tackle more complicated features while having a clear understanding of how it interacts with the rest of the code base. Without a plan I think I would still be trying to figure out why the recoil mechanic wasn’t working when in the end it was the order of certain function calls.
Motivation
Starting a project is a lot easier than finishing a project and it all comes down to motivation. When you start you are so filled with excitement and passion that making progress comes easy and before long you notice you have been working for hours. As time goes on and you hit bugs or development issues or life drama that motivation can quickly drain making it harder to want to open up your project and stay focused for an hour. This was the biggest struggle for this project as I picked up this project after not working on it for almost 2 years! I did so with a very specific reason; If I can finish this project I will learn what I need to do to finish any future project I start to work on. This came with a lot of trial and error to find ways that helped me get back into the zone to develop. The biggest issue I found that plagued me was feeling overwhelmed when I looked at all the tasks needed to complete this project.
I was working on getting more organized for this project so I would frequently break down tasks into smaller pieces to make them more manageable. My normal routine would be getting back from work, reviewing my dev tasks, and then diving straight into work. Over time this led me to get increasingly more and more stressed about my project. The mountain of tasks felt insurmountable and I was feeling the imposter syndrome each day it took me longer than I expected to make progress on the project. It shot my motivation to the point of almost wanting to give up on the project again but what helped the most was taking short breaks before starting my work and reminding myself of my passion for gaming. I would take a short nap or a mental break when I got home to help reset myself from work which always helped to clear my head. From there just remind myself that completing this project is just a step on my journey toward that goal and I will be learning each step of the way. From there I would feel my passion and excitement to work on my project help me get started on development for the day. It’s funny how such a small thing like a break can help your mind reset and be ready to tackle anything you have to do. It definitely has me excited to get started on more projects.
I am excited to get started on working on my next project, but learning from my lessons, I am going to start sketching out a plan for my development so I can get a prototype out faster than 2+ years. I currently have some ideas on what to work on next so once I have finalized a plan I will be posting an update to LinkedIn and here. I am looking forward to doing more development-style blog posts as I work on more projects. Hope you all enjoyed this one and if you have any feedback on how this can be improved please let me know.