The Making of Maze
In the past two weeks, I've been experimenting on a new type of level layout - a maze-like interior with tight corridors and low ceilings. This level design is quite challenging in terms of how to make good use of the "dead-end" inside the maze and preventing players from backtracking if they died during their play through; additionally, the cramped geometry layout provides an extremely difficult environment for my movement system to navigate properly. In the following paragraph, I like to elaborate on each of these challenges regarding the issues they caused and the solution I've came up with.
Dead End - eliminate the impression that players made a "wrong" choice
One of the unique aspects of maze is that it requires players to make a choice every now and then when facing a junction - without prior information of the maze - players either made the correct choice and become closer to their goal or made the wrong choice and meet a dead end. The cost of a wrong choice is the time spent backtracking to the previous junction and the mental pressure of not making the right decision afterward. I consider this an issue since, without prior information, the game gives the player a challenge where his/her performance is determined by luck and not by his/her understanding of the game's mechanics, an unfair challenge I would like to avoid in my game design.
(if players make the "correct" choice they will be guided to the next section, where they need to figure out how to utilize the explosive to advance to the next level; on the other hand, players who make the "wrong" choice will be pre-informed about the location of the key object and have a better time solving the puzzle)
Besides eliminating junctions and made the entire maze a one-way trip, I tried to find ways to reward players for finding a dead end and thus, elevate their mental cost of making the "wrong" decision. One of the solutions I've came up with is to place a key object at dead-ends - something that could unlock the path to the next level. Although players cannot cash out the value of the key object immediately, the idea of finding something critical to advance through the maze provides valuable information for players and alleviate the mental stress of making a "wrong" decision earlier.
Backtracking - reveal the end of the maze before players enter the maze
Backtracking is a common issue in level design, however, backtracking inside a maze is particularly painful since players are easily lost inside a maze and thus amplifying the cost of backtracking. One of the prevalent sources of backtracking is player's death, depending on the location where he/she revives, the player is forced to go through the same route again and feel a sense of setback for his/her progression; another reason for backtracking which is more common in a maze than other types of levels is players getting lost - a symptom could be attributed to a lack of awareness of the relative position of their goal and their current location.
(before players make a turn and enter the maze, they will see a fence blocking their way to an elevator shaft hinting where they need to go after entering the maze. As they reach near the elevator shaft, an explosive is strategically placed in front of a breakable wall, where they could choose to break the wall and open up a shortcut for their advantage)
If you've played Skyrim or Fallout then this solution is probably obvious to you: make the exit point of each level right next to the entrance point and make a shortcut between them, the shortcut can only be accessed after the player completed the level. I found this strategy simple yet very useful for two reasons: firstly, the cost of backtracking is limited within the level, as players reach the exit point, the cost of backtracking is reduced to near zero due to the shortcut between the begin and end points; secondly, the fact that players can see their goal before entering the maze gave them a rough idea where to go inside the maze, although they do not possess a full picture of what the maze looks like, they can make an educated guess of where to go when facing a junction in the maze, thus reduce the opportunity of getting lost.
Cramped Interior - movement system behaves differently according to ray-trace information
This challenge is particularly difficult to deal with compared to the aforementioned challenges, since, by nature, this is a technical problem, not a design problem - in order to solve this issue there is no other way except adjusting the underlying logic for my movement system. Two major pitfalls of a cramped interior that could break down an otherwise functional movement system are narrow walls and low ceilings: narrowed walls cause player's camera easily thrust through / squeeze between walls producing an overall unpleasant gameplay experience; low ceiling renders all of the vertical motion in the movement system obsolete since the collision detection from the player's hit capsule constantly detected player hitting their maximum height and cancel the move prematurely.
(compare to an average corridor in 《Drifting》 which is roughly 2000~3000uu width and 1000~10000uu high, the maze level is like a small tunnel filled with obstacles; navigating inside the maze is near impossible before adjusting the movement logic)
Instead of tweaking parameters of my movement system to yield a better result for cramped interiors, I was aiming for a more general approach where the same logic could be applied to a wide range of geometry layout in the level. The solution I came up with, is to add additional ray trace along the movement direction of the player and for each ray trace result, incorporate the traced geometry normal into the player's current velocity, hence, effectively preventing the player from getting too close to a nearby wall; for vertical movement, as the (ray traced) ceiling normal offset the upward motion every tick, non-vertical motion outweigh the vertical motion over time which results in a change of behavior from vertical motion to non-vertical motion in low ceiling level - one of the traits I found most elegant in this approach.
Here is a short video clip demonstrating the maze level I've been working on lately.
(after adding additional logic into my movement code, the movement system is able to squeeze a lot more space for the protagonist to maneuver inside the maze without too much hassle. Although there are still much more things to improve for the movement system upon this point, I am quite satisfied with the progress so far)
I hope you enjoy reading my article, feel free to share your thought on this subject and have a great weekend!