This level was originally created for a TGA assignment regarding Blueprint scripting. I took what I had from that assignment and expanded upon it.
My personal goal and main focus was to create a tutorial experience for a 3D platformer game reminicent of older 3D platformers like Banjo Kazooie or Mario64.
The player takes the roll of a messenger delivering secrets. Getting from point A to point B is the goal and that's how the player delivers these secrets. The player does not get to know the secrets, the secret is just a set piece. The messages could be anything from secret evil plans to new cookie recepies.
The purpose of this level is to teach the player the mechanics of the game. Each teaching moment is marked with a physical tutorial sign, approaching the sign will display a message with relevant information.
It's important to note that the signs are not mandatory and presents the player with a choice. They are there for accessability more than anything else.
The level flow and layout is streamlined for the sake of making it easier to teach the player in a safe and non confusing environment.
Each player mechanic revolves around player movement and are the following (in order):
Jumping, double jumping, wall jumping and air dashing.
Besides these mechanics, the player learns about enemy interactions, locked gates and buttons to open them, bounce pads, coin importance, health pickups and the checkpoint system.
At the start of the level, the player triggers a checkpoint and a widget appears with the text "Checkpoint set!"
Shortly after this the player is welcomed by the sign that's placed close to the checkpoint along with a tip to collect all the coins.
Jumping & Double jumping
The next area presents the player with another sign on how to jump and double jump. The player needs to jump on crates to proceed.
No risks are presented here, falling will let the player walk up a couple of stairs and try again.
The player is now met with a closed gate/barrier that prevents progress. Upon reading the sign placed next to it, the player is told that a blue button should open the path forward.
Upon inspecting the room further, the player finds a second floor area but is too high to reach with double jumping alone.
Up here on the second floor the player finds the button to open the gate. It's placed in such a manner so that the player can clearly see what happens when triggering it. There's also a sound cue to enhance the feedback.
Before jumping down to the now open gate, the player may read the sign next to the button to learn about air dashing. It specifically tells the player that it helps to clear gaps.
After clearing the two large gaps, the player gets to another checkpoint and a sign. From here the player can observe the first enemy of the game.
The player is told to either avoid the enemy or hop on their head to defeat them.
It's important to note here that the player can be harmed by this enemy.
After the player bounces their way up from the enemy encounter, they are met with a health pickup. Picking one up when hurt, restores 1HP, the player can't collect it if their HP is full.
The sign does not display a widget since it's such a straight forward concept. The phrase "Got hurt? use these" should be enough in this case.
The player now faces a fork on the road, giving them a choice on how to scale the obstacle in front of them. With that said, there's absolutely nothing stopping the player from backtracking to collect all of the coins.
To the left: the player has to walljump up while collecting the coins.
To the right: the player needs to jump from the large crate ofer to the other edge, following the coins.
The player is met with a final sign congratulating them on clearing the tutorial while in the end telling them that the goal is to find the golden platform infront of them in every level.
The player is also informed that anythime they fall off the level from here on out will result in damage instead of safely being placed on the last checkpoint.
A locked gate awaits the player here that only can be unlocked if the player meets the coin requirement. The player will at this point have enough to pass and finish the tutorial.
My work process for this project is quite straight forward: sketch, scripting, blockout and then set dressing. Scripting and sketching phase are interchangable in what order I choose to work in. I firmly believe in designing a level after what type of mechanics that are present.
Before starting to sketch I already have an idea of what game mechanics will be included in the project.
The sketching phase for me is to get the ball rolling. I might end up with something that I think is suitable for my concept until I start the actual blockout phase. In this case I started blockout earlier than usual so it is presented as the initial sketch for this project.
My starting concept was to create a level that was easy to understand with clear learning moments.
When starting this phase I heavily use the sketch as a starting point but any drastic changes are later added to the sketch after the blockout stage is done.
Some mechanics and quality of life changes were worked on but not implemented during the blockout stage. In this case it was the signs which are all text renders in these pictures and the gates that opens up with a trigger (blue button) were not implemented yet.
The main focus mechanically, was the player character. All movement options needed to work more how I wanted them to rather than the defaults that the UE 3rd person template provides. After that came other scripts like the checkpoint system and enemy interaction. The only scripts I used and modified from the asset pack was the already excisting animation blueprint. Besides that, all scripts shown and used are done from scratch.
I've always found jumping and double jumping to be a fun mechanic and so I felt the need to include it.
The player has access to 2 jumps at a time and are controlled by the "jump val" variable. The players jumps are reset whenever they touch the ground.
Wall jumping works separately from regular jumping but is checked every time the player jumps, that's why, after setting "Has jumped" to true, the node connection goes straight up.
Wall jumping was the more challenging mechanic to get right as the player needed a good way to detect a surface and then rotate itself correctly to the jump in the correct direction.
The player character also needed to "slide" along the wall first to give clear feedback and time to the player to make the jump.
The wall sliding process is done with a line trace that checks for any kind of surface.
If the line trace has a successful hit and if the player is falling (has jumped that is), the player character will first rotate itself toward that surface and then fall slower as if it needs to build momentum to fall again.
Setting the rotation towards the surface helps with the direction the player jumps to afterwards.
Everytime the player jumps, the blueprint checks if the player is wall sliding
Wall jumping is only possible when the player is wall sliding. As soon as the player jumps again when wall sliding, they will be launched in the opposite direction and afterwards rotate 180 degrees to match the direction the player is now launched towards.
This does not count as a regular jump or double jump
This mechanic is simple but fun.
Bounce pads allow the player to jump an additional time without having to jump, it also resets one double jump and an air dash for each bounce.
My thought behind this gate is to seal off areas in a level so that the player needs to explore and find more coins in other areas before proceeding.
The coin gate uses a collider to check the players current ammount of coins and if they are equal or more than the required ammount to open the gate.
The amount of coins needed are seen on the gate itself and is modularly scripted so that any designer can change the amount (CoinReq) through the UE viewport. This is possible thanks to a simple construction script.
Checkpoint & Respawn
The yellow checkpoint buttons seen in the game communicate with the game mode blueprint every time the player collides with it. The game mode blueprint is given a new respawn location everytime this happens
Note that the particle effects, sound cue and widget will only be shown the first time when activating the checkpoint.
If the player ever falls off the level, they will collide with a out of bounds collider that sends them back to the last checkpoint while also damaging them (damage does not apply in the tutorial).
The enemy was designed to be as simple as possible, in fact, it's the same type of AI as the one I made for my other project. It has a simple blackboard, follows only 2 states (chase and idle) but that's where the similarities stop.
My "Bullies" that I created for this project have a collision box that damages the player when close enough and will launch the player away from the enemy actor. The player can also defeat the enemy by colliding with its top collision box.
Enemy Hit box and hurt box
There's not much to say other than that set dressing is where I made som changes to the level layout.
All for the better, of course, and it was something I already knew was going to change to some degree before I started this phase of the project.
Sadly, not everything I thought about made it in this project.
The first example is the purple rune/key. I had plans to hide on of these purple runes/keys to incentivize exploration and reward the player with a secret area. Due to the fact that I already had 2 different ways to open gates, I was told in a feedback session that 3 ways could be a bit of overkill and that 2 is better in this case for the level.
The second example is a whole level.
I decided against trying to implement a whole level when I realized how little time I had left on my schedule and I had only just finished a rough blockout.
However, this is something I feel like I want to keep working on in my spare time.
This project as a whole was a lot of fun to work on. Balancing the player gravity, jump height and other metrics where not as tedious as I thought that it would be.
I'm very happy with how everything turned out and I feel like I can keep working on what I got here.
I was using an already set up animation blueprint system and tried to make smaller changes, it worked out in the end but the process would have gone a lot smoother if I would have started fresh on a new animation blueprint together with the animations that I had access to.
This also means that my priorities weren't completely in order since it wasn't critical to my main focus. Though, I'm happy to say that I did learn more about animation blueprints.