-Work in Progress: Gameplay-
The Bugshot was one of the earliest weapon designs, designed to look like a small bird-like animal encased in metal with brass tubes jammed into its mouth. The original idea was that the gun contained an adorable creature that loved eating bugs, and was thus force-fed insects through a bag and forced to regurgitate them as a spray of projectiles. However, despite this macabre function, the creature still loved its job, and would make cute giggle sounds when fired. Unfortunately, due to time restrictions during the project, almost none of this personality made it into the final game (with the exception of its large, happy eye).
The Bugshot is a short to medium-range shotgun with a slow grenade launcher as the secondary fire. It is the default weapon for all players.
The Tome is a magical spellbook that shows the weapon's controls and current ammunition level through glowing runes on the pages. The pages use stylized runes to depict a fireball on the left and shield on the right. Since Cult was designed specifically for the PC, the pages were designed to show the mappings of the left and right mouse buttons. The idea to show the current ammunition ratio though dynamic emissive runes appeared very early in the weapon design phase, and I created the actual dynamic material in engine about halfway through the project once the Tome's model and textures had been created.
On impact, the primary fire's purple fireballs create a wide area of damage and knockback force, pushing other players up into the air to expose them from cover and hinder movement. They can also decimate large groups of players in close proximity. The magic shield, while blocking all incoming fire, rapidly drains ammunition and leaves large open areas that are susceptible to splash damage, such as the Bugshot's secondary fire. Balancing between offense and defense with the Tome is crucial, as its ammunition is scarce and the fire rate is very slow.
The Watcher was originally a more tentacle-based weapon, but animating organic appendages ended up being fairly out of budget. Instead, the Watcher has an actual 'Wasp' eye that the player looks through to zoom, which ultimately affected the design to the zoomed-in HUD. The clip loaded into the side of the gun is a metal-encased wasp hive, and the rifle's overall color scheme is heavily influenced by the insects that it fires. Originally, the Watcher was going to suck a wasp out for each bullet, remove and fire the stinger, and eject the wasp's body, but due to a mid-project schedule restrictions, the weapon simply fires the stingers in the final game.
The Watcher is Cult's long-range weapon, offering a maximum fire distance longer than the surface area of the map. Firing from the hip has very unpredictable results at anything further than short-range. However, each stinger leaves a long yellow trail right back to the sniper, so long range players must use caution when firing into open areas. The Watcher can hold about 9 bursts in a full clip, and must be refilled fairly often. Luckily, there is plenty of ammunition for this gun scattered in the nooks and crannies of the map.
The average cultist can take approximately 9 stingers in the body, but only two in the head. This means that as long as a target doesn't escape 2/3rds of a single burst fire aimed at their face, they die immediately.
During the inital pre-production phase of Cult's development, I assisted the artists by doing several pieces of concept art to help define the overall thematic direction. My style ended up being too "dark" for the game's final tone, but many elements of my original Bugshot concepts (shown below) made it into the final game.
While working on implementing the weapons and weapon HUD Widgets, in addition to making several tweaks to the player's movement speed, jump height, and default mouse sensitivity for optimal control, I added several major elements to the main character Blueprint.
I implemented Headshot functionality to reward player accuracy and integrated Camera Shake Blueprints with the major player movement events to add a sense of weight to the characters.
To make Headshots possible, I added a small spherical collider to the player blueprint that was childed to the character's head bone. This made the collider actually swing with the player's head as they ran, making it harder to hit. When a player shoots another player, the target's Character Blueprint detects the overlap event and asks the projectile how much health it should subtract from its current health variable. When the headshot collider is hit, it simply tells the Character Blueprint to triple the next damage value it receives and calls the 'hit by projectile' logic chain manually. This eliminated the possibility of having the headshot damage added on top of the regular damage and limited the exchange to 1 inter-Blueprint interaction.
To add a sense of weight to the Cultists and make the controls feel more responsive, I created a basic Camera Shake function that used a few different Camera Shake Blueprints and could scale the shake intensity based on the velocity of certain actions.
When we finally got our players to die upon losing all health, the original death effect was a simple character ragdoll. This crazy flailing dance of clearly broken limbs was very comical, but looked just a bit too unprofessional to ship. However, this showed us that a funny death sequence worked well with Cult's aesthetic. I wanted to create a new death that used our game's mythos but was still amusing, and so I implemented the Cultist Deathsplosion. This new sequence has the player explode into an empty set of flaming robes from which a cute ghost image emerges and floats to the heavens.
The Deathsplosion has four main elements:
The empty robes, the initial arm flail, the demon flame particles, and the ghost sprite.
To accomplish the empty robe effect, I simply duplicated the character model 3DS Max file, deleted the face, hands, and legs (and re-sealed the mesh), imported it into the project as a new Skeletal Mesh, and added new logic to the Character Blueprint to switch to this new empty robe mesh upon death. Now when the player crumpled loosely to the ground after dying, the effect looked much better since they had literally become a pile of clothes with no actual bones.
To keep the comical death effect we had from the original Ragdoll, I added a small force impulse to the new empty robe mesh the moment the player dies. This impulse starts at the character's center and pushes upward, causing their arms to flail up and their head to flip backwards. This new effect looked like the cultist had actually poofed away upon death, and proved to be a good union of quality and comedy for the death sequence.
Because I had to re-seal the empty robe mesh to prevent ugly back facing, the insides of the robes were visible and looked fairly fake. To cover this up and add more to the game's mystical mythos, I created a basic particle spray of fire and small ghost sprites that pour out of the newly empty holes in the ragdoll robes upon death. The flames were color-coded per team, and suggested that each Cultist was composed of demon fire.
The cherry-on-top of the new death sequence was a player-sized ghost billboard sprite that would spawn from the freshly steaming empty robes of every dead Cultist and slowly rise to the heavens. This added a lot to the game's cartoony style and charmingly creepy theme. It also had the pleasant side-effect of communicating to players where the action was currently happening after spawning since they could see color-coded souls flying into the ether above their corpses from anywhere on the map.
What this ultimately meant for the player was that when they performed certian actions, such as running, jumping, or landing, the screen would shake as if that action had involved weight that affected the movement of their camera. In the case of landing or taking damage, the previously mentioned intensity scaling system comes into play. When the player lands, the Camera Shake intensity is directly correlated to their velocity just before they land. This adds a realistic sense of 'oomph' when players jump from large heights, and a small 'hmph' when they fall for a short distance. The same goes for when players are hit by projectiles, with the Camera Shake scaling with the amount of damage they took. This makes getting hit directly by the Tome's fireball feel much heavier than being nicked by the edge of a Bugshot burst, and helps communicate to players that they are actually getting hit.
A huge part of any Multiplayer First-Person Shooter is the gun recoil. This element can play a massive role in balancing certain weapons, and determines how often certain guns are used in certain situations. I implemented a basic recoil system into the Character Blueprint that used Timelines to simulate the recoil for each weapon individually.
Every time the player fired, depending on the equipped weapon and current fire mode, the players aim offset would jerk in a random x and y direction (with the y always larger and then smoothly interpolate back to the origin. The trick was timing the return speed and jerk intensity depending on the weapon and whether or not to accumulate a recoil offset after each shot. If you give a weapon a shorter firing delay than recoil return speed, the player can fire before the weapon has re-stabalized and accumulate large aiming offsets.
For example, the Tome primary fire (Purple Fireball) is a very powerful shot, but has a long delay between fires and does not greatly reward twitch reflexes. Because of this, the recoil for the Fireball is fairly large, but accumulates no offsets. The recoil return time is also 1:1 with the firing delay, meaning that the recoil also communicates to the player when they can fire again. The Watcher's primary fire (Triple-Burst) on the other hand, can be fired quickly, but rewards twitch gameplay, especially from the hip. It can also be fired before the recoil finishes returning, allowing the player to accumulate a larger offset if impatient. Expert players will be able to fire quickly and manually make up for the offset. Also, because The Watcher is a rifle, zooming-in should stabalize the recoil and eleminate accumulated offsets. As such, the recoil is triple the intensity when firing from the hip, each individual shot adds a small offset to the original firing direction. When zoomed-in however, the recoil is smaller, more directed, and there is no offset when firing. This is balanced by having a very restricted view that makes short to medium range combat very difficult.
Scroll down for
Team Lead, Technical Designer
Multiplayer FPS || Unreal 4.7 || 7 Developers || 4 months
The Bugshot offers massive short-range damage but has the highest ammo consumption rate of any weapon. Most of it's ammunition exists in and around the bases, giving players the power to defend immediately upon spawning but restricting them to the spawning areas. To go on the offensive, players need to find the other, more versatile weapons scattered around the map.
Primary: Shotgun Burst
Secondary: Bug Bomb
Secondary: Hex Shield
The Tome is a medium to long-range "rocket launcher" weapon that fires slow but powerful fireballs that explode on impact. The secondary fire summons a magic shield that blocks all projectiles.
The primary fire rapidly shoots three wasp stingers with every trigger which takes full advantage of headshots. The secondary fire zooms the player into the rifle's and reduces the burst fire's random spread and recoil.
The Guns, Projectiles, HUD, and player controls were all created using Unreal 4's Blueprint visual scripting system. Using the 3D models created by our art team, I integrated each weapon into the game, scripted their projectiles, added appropriate recoil, and balanced their attributes. I also polished the Player controls and scripted the Cultist death sequence.
the scripting details
The recoil system is fairly simple, using a series of special cases, like if the shot was an alt fire, to set up several different variables.
These variables, controlling things like the play-rate of the recoil and the intensity on each axis, are then used in a special timeline to offset the player's control rotation.
Getting shot in the head simply sets a bool used in the damage calculation function on the player character that triples the damage received.
Camera shake simply uses combines a few different camera shake objects along with several floats to modify intensity based on the player action. For instance, the camera shake the player gets when the land scales its intensity based on the player velocity when they land.