The Inferno | Gears of War
“The Inferno” is a single player campaign level for Gears of War. Security Agent Masterson is a heavy weapons specialist at a secret underground research facility code named “Granite”. Granite is a facility researching and experimenting upon the various denizens of the Locust Horde. Granite has lost containment of the subjects who have overrun the facility. Masterson, alone and armed only with a Hellfire Heavy Flamethrower, must fight his way to the reactor and set it to meltdown.
“The Inferno” utilizes previously learned skills from the main campaign and a timing mechanic along with reusing play spaces in order to create a fun and interesting environment.
- Genre: 3rd Person Shooter
- Map Type: Single Player Mission
- Engine: Gears of War (Unreal)
- Development Time: 120Hours
- New flamethrower weapon type built entirely in Kismet
- Fire Suppression system mechanic
- Fire based puzzles
- Torch dozens of wretches!
- Create a fun, explosive experience
- Highlight an underloved weapon type in videogames: the flamethrower
- Mow down swaths of enemies
- Use industrial construction pieces and materials in creative ways
- Create a level that fit within the Gears of War universe
Escape an overrun facility and set the reactor core to meltdown before escaping. Your only tool is a flamethrower.
The Reactor Core is the most visually striking set piece in The Inferno, with it's monolithic stature looming over the player as they enter the Reactor Room. I created the floor plan to wrap around the Reactor Room so that the player can catch glimpses of it in each room from a different angle. I spent a lot of time working on it, and I wanted the player to be able to see it as much as possible.
Level Design and Scripting on The Inferno
When I started this level, I set out to learn the Kismet scripting system better, as I had focused on visuals in past projects. After prototyping the tech, I had a functional flamethrower built entirely with Kismet within a few hours utilizing a dynamic trigger volume attached to the front of the gun. This trigger volume was deactivated unless the left mouse button were pressed, when it would reactivate and apply direct damage and a Damage Over Time (DoT) element along with a particle activation on the enemy.
This worked splendidly until I began to implement checkpoints. My flamethrower was still emitting particles and sounds in the right locations, but no enemies were taking damage. Odd. After a few frustrating days of debugging, it became apparent that the dynamic trigger volume was not moved back to the checkpoint start at each respawn.
After realizing my flamethrower was not going to work with the checkpoint system, I redesigned it much more elegantly. Using the Dummyfire Kismet function, I had a cone of damage that would fire when the left mouse button was clicked. This worked with the checkpoint system and required less Kismet code to work overall, so that setback made me reexamine my original setup and caused me to improve upon it.
Fortunately, my fire suppression system worked as planned and required no additional iteration when my revised flamethrower went in. When the player has the flamethrower active, the room they are in will eventually catch fire and deal a DoT to everything inside, enemies and player alike. The fire suppression system is a mechanic that will slowly put the flames out if the flamethrower remains inactive. Once the flamethrower reactivates in that room for a few seconds the room will flare up again, with the fire suppression system putting the flames out a few moments later.
This system consists of an integer for the flamethrower being active within the room, and if the integer reaches a certain threshold, the room flares up. The fire suppression system will slowly tick that integer back down at a certain rate.
Overall, I'm very happy with how this level turned out. It allowed me to learn a great deal about Kismet and logic loops that had still evaded me, and I got to make a fun, explosive level in which the player destroys large swaths of Wretches.
I was not having much luck with toggle nodes actually toggling things off and on when I needed them to, so I found a workaround. Instead of using toggles for various items and entities, I simply put them in their own stream and streamed them in and out whenever I needed it. This proved to be an effective and easy solution to the problem.
Here we have my logic for a checkpoint. We see that when the player spawns after hitting a checkpoint, the subsequence here spawns the Carmine model, hides the Marcus model, clears the player's inventory, gives the new inventory, and disables the primary fire of the new inventory that the player receives. After that subsequence, the next node attaches six movers, a dynamic light, and three particles to the player in a specific location. Next the particles are toggled off before streaming in two necessary levels. The Flaming Room level is reset by unloading and then reloading it in after the player is teleported to the checkpoint. This sequence is the same for every checkpoint.
The Dummyfire section is the part of the flamethrower that actually deals the damage. In order to make the flamethrower do damage, I made one invisible mesh attach to the front of the gun, while attaching five more meshes in a cone shape in front of the player and then hiding them all. When the primary fire button is pressed, the mesh at the front of the gun will shoot invisible bullets at each of the five other meshes, dealing damage in a cone, similar to the flamethrower.
This logic path governs the first of the handful of burnable obstacles in the player's way. If the trigger volume is touched while the flamethrower is active, the particle emitters for the flames will turn on and then shortly afterward turn themselves off before unloading the level stream that contains the boxes. The rest of the obstacles have this logic with a few extras like screen shakes or different particles to simulate explosions but are otherwise identical.
This is the brain of the entire operation. This is the logic area for the flamethrower itself. The left logic box notes that it will only activate the flame if the flamethrower is equipped. Basically, if the input for the flamethrower equipment slot is activated, the boolean is changed to true, and allows the rest of the logic to function. Next is the Press Trigger logic box. When the primary fire input is received, it checks the bool to make sure that the correct weapon is equipped, if yes, then it adds time to the FlameTimer, which is used for the Fire Suppression System. When primary fire is released, the particles, sound effects, and dummyfire are toggled off.
Fire Suppression System:
This is the logic for the burning rooms and the Fire Suppression Systems inside. There are seven of these, but are nearly identical, so only one set is shown for brevity. The logic box at the bottom check what room the player is in. The kismet then checks the current amount of time the flamethrower has been active in that room. The logic box in the middle checks this and if that number reaches a certain threshold, a physics volume with a post process volume, particles, and lights streams in, damaging the player slowly. If the player presses the Fire Suppression System button in the room, the logic box at the top will begin to tick the threshold number back down. Once it is below the threshold, the level with the physics volume, particles, lights, and post process volume unloads and no longer hurts the player. However, if the player turns the flamethrower back on for long enough, it will flare back up! This mechanic is meant to be a player choice. The player can either use this to their advantage and keep a room on fire enough to kill all enemies inside, or they can turn it off immediately to allow more freedom.
- Test your tech to the fullest extend you will need it. Don't assume it will work perfectly.
- Iteration is key, but don't spend too much time iterating.
- I now understand why so few games feature flamethrowers.