The arenas of the Roman Empire have all seen better days. Thankfully, the newly discovered gunpowder is here to bring the boredom to an end! Equipped with the all new arm cannon, the gladiators slash, bash and blast their foes into smithereens in an arena filled with deadly traps and hazards.
Guns Guts & Glory is a local multiplayer brawler that pits up to 4 friends against each other in chaotic and intense battles on a dynamically changing arena.
3 x Designers
4 x 3D Artists
2 x 2D Artists
3 x Designers
4 x 3D Artists
2 x 2D Artists
- Combat Gameplay
- Player Input / Interaction
- Player Setup
- Art / Effects / Animation-implementation
- Level Events
My main responsibilities were the combat gameplay and camera system. I worked a lot with player and weapon-interactions such as taking damage, picking up weapons/ammo and attacking. I also created an easy way to assign different armor and colors to each player at runtime.
Other responsibilities include: Level scripting, such as destruction, traps and weapon spawning.
Weapons & Damage
The game features 4 different melee-weapons. They all use the same script but behave different depending on the weapon type selected and can be tweaked further with the variables visible in the inspector.
We wanted the violence to be over the top and cartoony with blood effects that would match the type of weapon used.
I created 3 different methods to handle the type of damage a player can receive. Weapons have their own damage type such as sharp and blunt and provide that info upon colliding with a player. From there the Health-script makes sure that the correct effect/damage/knockback etc is used.
All the weapons in-game can be picked up and dropped at any time. I never destroy or spawn them when used/dropped. The interactions use different collision types. I switch the colliders on and off to ensure that only the right collision event is used.
All the properties such as damage and impact force can be set in the inspector to allow fast testing and tweaking. This approach really helped us improve the balance of weapons when we did playtests.
Ammo must be picked up from the level and is thrown in to the arena by the crowd whenever a player gets a kill.
There are two type of projectiles: an explosive cannonball and a net. The cannonball is a guaranteed kill on hit but also explodes and can damage additional players depending on their distance to it. The net slows players to a crawl which allows you to stop them right on top of a deadly trap or to get in close with a melee weapon.
Intermission & Round Start
Between each round there is a small break were the players get to choose a spawn position and see the current score displayed with UI and a 2D representation of the level. During this time the camera positions itself with a nice overview of the whole arena and changes the depth of field to achieve a unfocused effect.
When the countdown before the round starts, the camera starts to move down closer to the players and gradually change the depth of field back to normal. This was accomplished by using Animation Curves and using the value of the curve in a lerp of the position and rotation.
Movement & Zoom
This was my first time making a system that had to work dynamically based on how many players it currently needs to track. I ended up using a list to store all coordinates of the active players and sorting the min and max-values. Then basing the camera position in the middle of these values.
The zoom was handled by parenting the camera object to an empty object acting as the rig, which was tilted to the desired angle. The camera then moved along its local Forward-axis to zoom in and out based on the distance between the two players furthest away from each other.
Armor & Color
We started out by working with one player prefab for each player that was set up with its unique armor and color etc. We realized quite fast that each time we needed to change something that applied to all of them such as the character model, it took forever to have to do that 4 times.
Instead I created a scriptable object class to store all relevant info in. Then I only needed to create 4 of those and set them up for use with a generic player prefab that all players share. When the players are spawned at the start of a match they are assigned the info relevant to the ID of their controller, which then sets up armor and color.
This ended up saving us a lot of time since we were constantly iterating and improving parts of the prefabs hierarchy.
Since the game is a fast and chaotic multiplayer game we wanted the controls to be easy to learn. At first we had one button each for attack, throw and shoot but we learned that it was too many buttons for our type of gameplay. I removed the need for a third button by having both throw and shoot on the same button. This also worked in favor of the gameplay we desired, the button is used to shoot whenever the arm cannon is loaded to prioritize the explosive side of combat and to throw otherwise.
The final version of the movement system came quite late thanks to the very late addition of a knockback-effect, which was a much needed addition to the combat gameplay. I had to re-write most of it to not allow the movement input to affect the velocity while being in the knockback-state.
I set up the animations for the Player. The player is controlled with “twin-stick” controls and needed to be able to change the walk animation depending on the facing direction in relation to the movement direction.
Everything except for the legs of the player needs to be able to move independent of the legs so I created a separate layer for the upper body where all of the attacking takes place. This layer overrides the other layer whenever the player does more than movement.
During the second out of 3 rounds of a match the outer ring of the arena will start exploding one piece at a time until the arena has shrunk by one ring at the end of the round. This makes the combat of the third round very close quarters which makes certain weapons and traps even deadlier.
The spawn select-map contains information about where weapons and traps are located. I made a method for converting their world position to positions on the 2D canvas. This way we could spawn traps and weapons in any position and get the correct information without moving icons on the map with each change.