top of page

Questborne

Video Playthrough

​September 2021 - January 2022

Engine: Unreal Engine 4

Platforms: Oculus Quest

I worked as part of a team of 5 to develop this vertical-slice for a Hack-&-Slash VR adventure game.  We kept the project organized using software like Discord, Miro, and Github.

Some of the most notable elements I was responsible for include:

  • Weapon system

  • "Force Grab" mechanic

  • Enemy AI

  • Final Boss Encounter

  • "Mountain Pass" Level

  • Player Item Holsters

I also worked alongside another programmer on the team to help develop and integrate mechanics like a Magic Menu & Shield.​

Force Grab

This was a feature designed to help players pick up objects out of reach, and reduce the need to bend down to the floor to grab things.

How it works:

  1. The player points a hand at the desired object

  2. The grab button is held, forming a tether between the object and hand

  3. The player makes a pulling motion with their hand, bringing the object towards them

I ended up extending this feature, to allow a short window after the player lets go of an object to pull it back to their hand, if they hold the grip button after releasing the object.

Item Holsters

Similar to the "Force Grab" mechanic, this was another quality-of-life feature. The idea was to give the player somewhere to safely store items while performing other tasks or picking up other objects (since our plan was to have the player interacting with many different things). 

I ended up adding two 'holster' slots, one at each of the player's sides, that would interpolate their rotation to match the direction the player is facing.

Any item the player can pick up can be placed into these slots, simply by releasing them while hovering over an empty slot. I wanted to make sure the holsters weren't visually distracting, so they only become visible once the player's hand is overlapping them.

Adaptive AI Attack Styles

The first type of enemy designed for the game was the small 'Goblin' enemies. The idea was for them to be very weak individually, but present more of a threat in groups.

To make their behaviour more interesting in groups, as well as to not overwhelm the player, I had the idea of making the goblins mix up their attack style in larger numbers.

By default each goblin has both a simple melee punch as well as a ranged spit attack. They decide which style of attack to use by looking at the composition of attack styles being used by their nearby allies.

The first goblin enemy to start attacking the player will default to ranged attacks, and then the next 3 will default to melee and so on. This way, a 3:1 ratio of melee to ranged attackers is ensured. If an enemy is defeated, the next enemy to join the battle will fill its role.

Blueprint Examples

Function for getting the attack style composition of nearby enemies

Code for deciding what attack style the enemy will switch to

For larger enemies, like the Orcs, I wanted to the player to have to pay more attention to their attack telegraphs, as well as focus more on movement and dodging.

Part of achieving this involved:

  • Giving each of their attacks long wind-up animations, to give the player time to react

  • Making their attacks uninterruptable by the player's own attacks

However, I still wanted the player to have the option of temporarily stunning these enemies, especially in situations where they might be fighting multiple at a time. I ended up implementing a "stagger" mechanic for the Orcs, similar to games like FF7 Remake, where a meter can be filled by attacking the enemy. Once filled, the enemy becomes temporarily stunned, and takes extra damage.

I also made it so that each attack on a staggered enemy depletes the time left before the enemy returns to normal. This way, the player will want to think about which attacks to prioritize in this window, but they also have the option of not attacking the enemy if they want them to remain out of the action for longer (could focus on other threats for a while etc.)

Stagger System

A final boss encounter for the game's vertical slice. The boss switches between a variety of attacks and behaviours, and has different phases where the player attacks different parts of its body.

The flow of the fight goes as follows:

  1. Player attacks the boss' legs until their health is depleted

  2. Boss jumps away after one leg is destroyed, uses ranged attacks

  3. Once both legs are destroyed, boss moves over to side platform to regenerate

  4. The player can climb the platform and attack the boss' head

  5. The boss returns to the centre of the room and fully restores its legs' health

  6. Repeat but with difficulty increased

The attacks:

  • Melee swing

    • A frontal 'cleave' style attack, knocks back the player if hit​

  • Stomp

    • A radial AOE attack, spawns 4 propagating ice walls in cardinal / intercardinal directions​

  • Ice Shards

    • Spawns 3 floating ice shards above the boss, aimed at the player. Increased to 5 in second phase.​

  • Ice Boulder / Puddles

    • A large thrown rock projectile, spawns an expanding ice puddle on impact.  Only used when less than 3 puddles are active, 5 in second phase.

  • Leap

    • Used both to jump away from and towards the player if they are far away enough. Causes knockback on landing.​

  • Icicle Impact

    • Spawned above the player's head if they remain on raised platform for too long. Causes heavy knockback on impact, usually pushing the player completely off the platform.

Telegraphs:

It was very important to make sure all of the boss' attacks were well communicated and telegraphed to the player, so they have the time to identify and react to whichever attack is coming next.

One way I achieved this was through the boss' animations. Large attacks have distinct and very long wind-up sections to their animation, such as the boss slowly lifting a leg into the air as it prepares its stomp attack.

These can still be missed in first-person though, especially up-close to the boss. To help with this, I added decal telegraphs to the ground to communicate the area affected by certain upcoming attacks. The orange colour was picked to stand out against the blue of the arena.

Golem Boss Fight

bottom of page