QUAKE BLOOD SEWER
introduction
This level takes place in a sewer where the water has turned to blood. The player must stop the flow to continue while battling monsters along the way.
This project is inspired by my previous Quake project, which I created in Trenchbroom a few years ago. I wanted to make a new version in Unreal Engine, aiming to improve it with the knowledge I have today.
Floor 2
4. Funnel before reveal (wow-moment)
Breakdown
4 Weeks / half-time
Made using Unreal Engine 5 and Blender
All Mechanics made with Blueprints except for the basic unreal engine movement
Playthrough
level overview
1. Arrive with elevator (Start)
2. Introducing puzzle mechanic
3. Bait and switch
information
Area of focus
Combat spaces
Enemy placements
Fast-paced gameplay
the comparison level
I will compare my current work, later in this page, to a quake level I created in Trenchbroom a few years ago, which is also set in a sewer. I plan to discuss how I designed both levels, highlighting the changes I made while maintaining the original concept in the new level.
5. Elevator to reach other floors
Floor 3
6. Turn on engines (2 mini puzzles)
7. Return and close the left gate
8. Clear conference sector
9. Turn on the last engine (End)
Floor 1
pre-production
planning the level
For this project, I began by reviewing my previous level to draw inspiration from it. I gathered reference images from my old level as well as from other Quake levels and games that featured environments similar to what I envisioned. Then, I created a mind map with bubbles to outline the basic flow of the level.
Production
Iteration of blockout spaces
A lot of iterations occurred during this project as I playtested the game myself, aiming to create a combat space that felt dynamic and fast-paced. The iterations generally involved making the environment larger and more vertical to avoid it feeling too tight and flat.
Level design breakdown
Level Looping
I placed the puzzle cube in front of the player to direct their attention to a later section of the level, instead of showing the door before the key. In this case, I found it useful to do it this way to introduce the new mechanic.
Foreshadowing
Previously, I placed the puzzle box very close to the door. This time, I used the malfunctioning door as bait, which requires a new puzzle box. Now, the player has to turn around to find the puzzle box, which makes them turn around again to find the way to the box. Acting almost like a double-bait & switch.
Monster closet
I used the funnel before the reveal technique in this section to enhance the wow-moment when the player first sees the containment chamber and the violent force they must stop.
By narrowing the corridor leading up to the reveal, I made the entrance feel larger, thereby amplifying the contrast and impact of the scene. Having three slowly opening gates also adds to the suspense of the reveal.
show the door before the key
One of the areas of focus for this project was to achieve symmetry throughout the entire level. Symmetry can help players orient themselves and understand where they can and cannot go. However, one of the challenges was to differentiate the environments on each side to enhance the clarity of the mental map while also making the environment more interesting.
Combat Design
introduce enemies
For the first puzzle, I wanted to make the puzzle box more interesting than simply opening doors. To do this, I connected the doors to different timed events. If the player chooses the left puzzle plate, the lift will go up. If they select the right puzzle plate, the vent fan will stop for about six seconds.
If the player places the box on the left plate first and then on the right, they will be unable to retrieve the box, as it will become stuck behind the vent when the lift moves before they can reach the top. Therefore, they need to time their actions correctly by using the right plate first, followed by the left one.
monster closet trap
In this second mini puzzle, I wanted to challenge the player to think more critically. The player needs to use a box that is already in use to open the lift. This allows them to access another box located underneath. Once they have this new box, they should place it on the engine and then return the original box to its original position. So both engines can be active.
wave of enemies after first loop
The last one of these isn't really a puzzle, but I wanted to make it more engaging than just placing the puzzle box on its plate. I decided to have the player search for it after the door closes. This choice was mainly to make use of the environment I had already built. Also, to slow down the pace of the level a bit.
bait and switch with enemies
In this second mini puzzle, I wanted to challenge the player to think more critically. The player needs to use a box that is already in use to open the lift. This allows them to access another box located underneath. Once they have this new box, they should place it on the engine and then return the original box to its original position. So both engines can be active.
Technical Design
Function library and interfaces
I used a function library to organize all the related functions for the telekinesis mechanic. By using functions, I was able to reduce the size of the blueprint graphs, which helped save space. Additionally, this approach made it easier to call functions from the library in other blueprints. The same principle applies to interfaces, allowing for more efficient code reuse without the need to rewrite it for different blueprints or without the need of a direct reference and no need for casting.
BPFL_GravityGun blueprint
The blueprint function library included four functions related to the telekinesis mechanic. I organized the functions in this library to ensure that I could easily call them later in other blueprints. This also helped reduce the overall size of the blueprint graphs by minimizing the space taken up by having functions.
Add Overlay Material function
This function determines if it is looking at a grabbable item, allowing for changing of the overlay material on that item or object later.
Object Impulse Function
This function allows the player to throw the puzzle box at enemies. By adding an impulse to the physics handle, it can fly away quickly with force.
grab object component
The grab object function checks if the player is looking at a specific grabbable item and whether they can pick it up.
puzzle object function
The Puzzle Object function checks if the player is looking at a specific puzzle plate, if so, it can later place a puzzle box on that plate. plate.
comparison
A quick reflection on the entire project: I would have loved to polish some of the blueprints further, as they were not perfect and could glitch at times, particularly with the telekinesis mechanics. I would also like to incorporate more puzzles of that type into the level, utilizing the environment in a gameplay-focused way. This would ensure that players are not just fighting and running around in an interesting environment all the time.
Overall, I am very happy with how it turned out.