Genre First-person action-platformer

Engine Unreal Engine 5

Date May 2023

Link ➡️ https://megaxalain.itch.io/beamslide

Video

https://youtu.be/I0mE3CanZKQ

<aside> ❓ Beamslide is a first-person action-platformer where speed and style go hand in hand. Make your way to the Tower and eliminate your enemies in satisfying ways.

</aside>


⚒️ What I worked on

🏃‍♂️ Character Controller

BASIC MOVEMENT

<aside> 💡 The main goal for the Character Controller was for it to be snappy. Its movement involves high acceleration, groundedness and high gravity which imitates real life physics. The reason for those was to create a fast-paced experience for the players by giving them more control over the character and diminishing the influence of external factors such as the floatiness of lower gravity and the slipperiness of low ground friction.

With the controls being tight, this made the movement more difficult to get used to initially and led to the implementation of coyote time. Whenever the player would fall from a ledge, they would have a grace period to still be able to jump even in the air.

Consequently, the player will always end up where they intended to.

</aside>

<aside> 🧗 The ability to climb walls was added to verticalize and develop the emergent side of the movement. This would help with creating a level that has verticality at its core. Pressing [Jump] while climbing rotates the character 180° and launches it forward. This balances the slow and vulnerable nature of climbing and gives a chance for the player against enemies.

</aside>

Climbing

Climbing

Character Controller values

Untitled

Untitled

Untitled


SPECIAL ABILITIES

<aside> 💡 The movement also features sliding, climbing and mantling, teleporting.

There are 2 ways to eliminate enemies : by teleporting sliding through them. Initially, the only way was to teleport through them. However, its cooldown would hinder the pacing of the game and an alternative way to kill enemies was needed.

</aside>

⛸️ Slide

<aside> 💀 Sliding was originally only used for quickly moving to a location and to fit under tight spaces.

Its ability to kill enemies was added later on and achieved by constantly tracing a sphere in front of the character. Whenever the trace hit an actor, the blueprint interface function Die() is called.

Killing enemies by communicating with a Blueprint Interface

Killing enemies by communicating with a Blueprint Interface

</aside>

Untitled

Slide kill

Slide kill

Untitled

<aside> ↔️ The player is able to slightly move left and right while sliding. The ability to do so was added later because not being able to move to the sides led to the player constantly spamming the slide to readjust themself.

</aside>

<aside> 🗻 Slopes will influence the direction of the slide. Trying to slide on an upward slope will move the character backward. By doing cross products of the hit normal of a downward trace, the resulting vector can be used to influence the direction of the slide.

</aside>

Untitled

Getting the slope vector

Getting the slope vector

🧙 Teleport

<aside> 💡 Teleporting works by :

1- Projecting a trace that detects if a surface is hit. If there is indeed a hit, its location is taken and calculated so that the character doesn’t clip into walls. 2-Teleporting the character to a short distance BEFORE the hit. 3- Teleporting again the distance remaining with a sweep to not clip into walls.

Untitled

Teleporting

Teleporting

</aside>

<aside> 💀 Killing with teleport displays a killcam on the top-right corner of the screen.

The reason why this was implemented was to give the player a confirmation that the teleport successfully killed an enemy. Because teleporting through an enemy places the character behind the kill, it used to be unclear whether there was a kill or not.

Killcam (top-right corner)

Killcam (top-right corner)

</aside>

🏴‍☠️ Kill

<aside> 💡 The objectives are completed by killing enemies. To make it happen, a BP_EventComponent is added to every BP_Enemy and other related blueprints. Whenever the player kills an enemy [KillEnemy()], the kill counter increments itself by one. When it hits 0, it communicates with the and sets off CompleteEvent().

Untitled

</aside>


🌆 Level Design

<aside> 💡 The game takes place in a cyberpunk-style setting. The playground consists of tall buildings that focuses on verticality and wide spaces so that the player can feel the huge scale around them. Before jumping into the blocking, I brainstormed and seeked inspiration with the moodboard below.

Untitled

</aside>

<aside> ⏩ The layout of the level was created with the character’s abilities in mind. There are sections that make the best out of sliding, climbing and teleporting to give purpose to each individual movement ability.

</aside>

Sliding

Sliding

Climbing

Climbing

Teleporting

Teleporting

Car-centric planning

Car-centric planning

<aside> 🎨 The choice to use very few materials for the textures was both for optimization and for the simplistic art direction. The blue and grey tones fit well the desired futuristic aesthetic.

Emissive lights serve as waypoints to lead the player towards the objectives. Also because they look pretty.

Untitled

</aside>


🤝 Credits

<aside> 👋 Me

</aside>