Click here to access the Charge! home page for current posts
Also, I still plan to make some specific updates here, and for now, here's a reel of some team gameplay from earlier this month.
Creating a first person shooter with the goal of creating fresh, casually fun gameplay through prioritizing the multiplayer experience, combining both older ideas from fun classic FPS's and specific expermental mechanics, and utilizing lazer-tag like themes and sports inspirations.
Team:
Gameplay Programmer/ Lead Programmer
Tech organization, like collaboratively planning and delegating tasks, setting up base code for modularity, and perforce server setup/ management.
Implementing networked gameplay aspects, like server side hit confirming, and 3v3 online team gameplay.
Blueprinting/ using C++ to make FPS mechanics like an extensible weapons system, weapon shot reflections/ refractions, and gamemodes like deathmatch and our experimental new gamemode.
Collaborating with character animators to setup our model/ animation pipeline, and implementing 1st and 3rd person animations, and other VFX.
~1.5 yrs ~10
Multiplayer First Person Shooter
PC Unreal 5
(Dec 2024) As the core feel of gunplay is a paramount focus at the moment, I knew editing weapon variables would be key. And, with me stepping away from the project for a while (back now), to help everyone on the team, plus potentially even testers, iterate on the feel of weapons, as well as to mitigate the fact that data files need to be exclusively checked out, I created an in-game stat editor for our game's weapons.
It works for each weapon, which is helped by the fact that they all pull from the same base stats, and as a bonus, using Unreal's UStruct and UProperty reflection system, the menu items are generated directly from the members of the weapon stat struct, so adding in a new stat variable to the weapon data struct automatically adds it to the menu!
(Jan 2025) Working on a mantling (ledge climbing) system to make jumping between objects more consistent, and easier, to break up the map with more chances for movement, and also to allow for more forgiveness/ room for experimentation in level design, because everything doesn't need to fit exaclty, as long as things are close enough where you can still mantle between platforms. While making this, I discovered that it may be fun to also let players bound up or over obstacles when mantling on the edge of something, and the current progress is shown here, with snapping up onto ledges automatically, or launching the player over them if they press space. It's a bit snappy (need to make the player move over time, instead of snapping onto the ledge) and it needs a bit more functionality, but it's been fun to use for some of the team and I already, and since it's fairly representative of mantling, I'm looking to test it now, so I can see if it's fun for other players, and then go from there on making the other details of the system.
Taking beats from the reflection below in the update archive, we're back at it working on charge after a break, and we're using the fps foundation we built before to specifically hone in on what can make our game uniquely, and ideally consistently, fun. To do that, we've been brainstorming ideas for new mechanics, or iterations of the existing ones, that we can shape the core fps gameplay around, to find a simple, but intriguing sauce that can help us make the most fun experience out of our development resources and time. And, to help us still move forward in prototyping even though we do still have the of the core mechanic to work out, I've been prototyping a set of base level mechanics, alongside another teammate, and a teammate blocking out a new level focused on a reduced team size (another adjustment to make development more feasible) and specific multiplayer intentions, so that we can flesh out a full playable match. This was just completed, so even if we haven't found our secret sauce just yet, we've been creating a more solid place to test out ideas, alongside being able to test the fun of our base movement, shooting, and level layouts, and get feedback where we can. Plus, we stilll have the unique mechanics (like reflective rounds) we've made so far, which I've made toggleable in matches to let us test both normal and augmented gameplay, so even as we brainstorm new ideas, we already have things to try and iterate on, to help us round out the peices of our vision of making a unique enough, but importantly simple and fun, twist on what it means to be an fps.
Making the prototype of Charge!, we made a lot of the functionality necessary or helpful for a first person shooter, such as:
modular weapons for easily adding new ones
making the gamemodes, shooting, UI, etc. in a networked way to support multiplayer
various character animation for each weapon type (1st person for you, 3rd for opponents)
making both hitscan lasers and projectiles that can reflect or refract when hitting certain materials in-game, which we thought would be the interesting twist our game brought to combat.
However, through testing the game, reflections as a main mechanic hasn't worked as well as we hoped, and after trying a few different solutions, we determined with the time it had taken, we needed to pivot to more of the basics. I have details in the reflection below on the reasons I think our development has led to this state, and ways I think would have helped us to better achieve our gameplay goals sooner, but currently, we are shifting to nailing down the gunplay through revisiting the core feel target, and prioritizing testing, before any other higher scope details are considered.
I am currently away from the project focusing on my senior year of DigiPen, and the Remanence project also on this website, but I did my best to set the team up for progressing on the core gameplay while I'm gone by implementing the above stat editor so that weapons can be easily refined by anyone, a capture the flag spinoff gamemode as potentially our key gameplay twist, fleshing out missing implementation documentation, and advising a bit when I can.
In having a bit of a skewed focus towards implementation over doing more of the design and testing early, focusing on a few to many aspects of the game at once, and issues with finding a vision we all could picture well, we have had troubles getting towards a core prototype we all feel is fun, and represents a complete loop of gameplay that satisfies our project goals, not just basic FPS gameplay. We have been able to make a full basic loop of networked deathmatch & capture the flag, with pipelines we've used for implementing melee and ranged weapon models, 1st and 3rd person animations, easy to create weapons, and even an additional place-able mirror mechanic which we tried out when default mirrors weren't working. However, coming to a full experience where we can clearly find the specific fun has been our current main issue. Realistically, we should have uncovered these problems much sooner, by starting testing much sooner, but through a combination of things, most important of which I believe have been the need for a clearer MVP, so that we could have had a more reasonable target for the game's state that was required before testing began, mitigating the player count required for playtesting, as with our target of 5v5, testing was much more difficult, and having a clearer the overall vision for what we wanted to achieve, would have all helped us to reach this sooner, and these have led me to realize things I can do in the future to reach the core fun of a game sooner:
Clearer MVP: When waiting to test Charge! I kept trying to get us to gameplay that felt representative, first making the basic laser weapons shoot reflective shots in blueprints, and making a function library for reflections and refractions, then learning multiplayer shooting and gamemode implementation through unreal's Replication, Blueprint RPCs, and sessions, and then how to combine that with unreal's gamemode system. However, even after doing this, and reaching a functional deathmatch, we still had considerations for other game mechanics, like melee, throwables, and other things, and I continued to prioritize making things new or better, vs testing what we already had, even if it wasn't 100 of what our vision was. I realize now that without the core experience, none of that other stuff can be helpful to us, and if I were to do it over, I'd make sure we were 100% clear on what base Charge! needed, and once we had that, go all in on testing, to bring out those issues with reflections as a main mechanic, and have more time to find solutions. And, during this time, I would also establish an understanding that we should avoid talking about implementing new things until the core prototype is solid. In balancing a more tech leadership role for the first time, I tried to be available to establish the art pipeline, and implement the new assets that were being created, even if they weren't core feature related, so that art could still progress while core mechanics were being fleshed out, but I realize now that this still took too much attention away that I couldn't properly finish the MVP in a timely manner. It was just me as a programmer for a while, so this may be more feasible when a team starts out with more programmers, but I know that if we could have made the concessions necessary to be able to focus on finishing our MVP for unique gameplay, then take stock at what we could achive from there, we could get a lot farther in making a uniquely fun game with the scrappy power of our team.
Realism of making 5v5 combat: Given our team size, in hindsight, 5v5 combat is quite the task, and looking at it now, I likely should have had us make a more concrete plan for how we'd be able to test that, given our team size, and situation, being an online team in the summertime. 5v5 isn't impossible, but it requires a lot more resources for testing, having an ideal player count of 10 players, and especially when the player count matters more in a collaboration-focused game. So, it would have been worth it to consider more closely whether this player count was necessary to our goals, or if we could cut down on players, and achieved the same effect. To help with this recently, I made a playtesting discord to organize times to test with a larger group, and this was helpful, but doing this sooner would have helped us gain a lot more momentum, seeing the game in action sooner, and identifying ways to make it better from a realistic set of players. Also, if I was to do this again, and we still wanted 5v5, I would make implementing AI player bots a much higher priority. We did start this, but by the time we did, I was already more busy with school, and we had needed to be playtesting much sooner. Plus, having even simple AI that can shoot and complete an objective would have been a great help for those working on level design, to more easily see how combat plays out in their space.
Scope and clearer vision: If real estate is all about location, location, location, this project has further cemented that game development is vision, vison, vison. Whenever we have had a clear vision of what we wanted, we've been so much more effective in utilizing the capabilities of our team, and collaborating, such as when we implemented the first arena level and got reflections working on it, implemented basic character animation, or other things that we knew we wanted, where we could make clear tasks to collaborate on, and ultimately, feel they were complete. However, with mixed ideas on how a basic match of Charge! should play out (slow and tactical vs medium speed and high pace, all about teamwork or can an individual carry a match?, etc.), things dragged out more, and this affected other aspects of the development cycle, such as our ability to say we were ready for playtests, or confidently implement more features, because the current core gameplay was still lacking a definite direction. In hindsight, scoping down on the features we were willing to consider (throwables, melee weapons, potential gamemodes, player count, etc.), and the fidelity of art features we wanted to make a pipeline for (full 3rd person blendspaces for opponents, 1st person ones for you, different character models, etc.), would have helped immenesly in letting us get past that milestone of being confident in the viability of our MVP. It's not that implementing the blendspaces, 1st and 3rd person animations, melee weapons, and all that, were an immense challenge, but needing to consider all that while trying to hammer down a core fun experience meant I and eventually the 1 other programmer,only had so much bandwidth, and couldn't focus as well on just refining the reflection-based shooting, identifying the issues with it, and finding a solution/ deciding to pivot much earlier. In being the lead programmer, I felt bad when I could clearly see the artists were doing work fast, and needing pipeline help to get their work in game, and so I split my attention to try and do it all, but as I've stepped away and been able to focus on other school projects, I've been reminded of just how important focus is for making the best thing I can, and also being able to work fast. So, if I was to do this in the future, I would make sure that we can our clear vision of what the core gameplay, but then be stalwart in giving my team's gameplay programmers, provided it had a reasonable deadline, a headspace free of other polish considerations, so that we can focus on making the core gameplay work, and then when the team and testers are happy with that, then open conversations for how we can polish it, and add better art features, from there. And, even if we would have to make some concessions, at least we'd have a solid game foundation to build on, so that the assets we would have the scope to implement would matter more.
Older screenshots featuring certain prototype mechanics, and an older WIP level