SkyTraveller

SKY TRAVELLER

Introduction

In this project, we were 6 programmers, 5 graphic artists and 4 level designers. The goal was to create a game in the game engine we have been working on for the past year. Two programmers wanted to work with the player's character controller, one with AI, one with shaders, one with tools and one was more of a generalist. Which made us decide on a game that was focused on the player's character controller while having some enemies around. Our decision ended up being a parkour game where you run through the level while avoiding enemy attacks. The reference game we chose was Ghostrunner since it covered the type of gameplay we were looking for.

The idea we had about an enemy was a llama that shoots projectiles towards the player and chases the player through a part of the level by jumping to points placed out by level designers. I'm using a behavior tree for decision-making and AStar pathfinding for the jumping path.

Jumping path

Introduction

When the llama was either too far away or too close to the player, it was going to relocate itself to a more fitting position. Our decision was to have it jump around to set locations in the level.

Functionality

I'm using AStar with jumping points that level designers set out in the world to create a path between the points between the llama and the player. This makes the llama do multiple jumps through the path rather than doing a huge jump from one point to another. The llama has it's own gravity variable which pulls it down until it lands. These values can be adjusted through ImGui.

Projectiles

Introduction

When it came to the llamas attack, we decided to uses its spit as projectiles projectiles. If the player gets hit, it has to restart from closest checkpoint.

Functionality

The projectiles work in the same way as the jump when traveling. I have a projectile handler that handles the update for projectiles. If a projectile is going to be removed, I add it to a vector and then remove all the projectiles in that vector at the end of the update function in the projectile handler. I'm using raycasts for the projectiles to detect if they hit an obstacle or the player. The projectile also keeps track of its traveling distance and remove a projectile if it travels too far.

Behavior tree

Introduction

At the time, I had been using a behavior tree in an assignment earlier and wanted to implement it in a game to get a better understanding of it.

The behavior tree used is called BrainTree, which can be found on GitHub. It uses the builder pattern to construct the sequences, decorators and nodes. It was a suggestion from the educators at TGA to use it as an introduction to behavior trees.

Functionality

The llama shoots projectiles toward the player if the player is in range. If the player is further away from attack range and inside detection range, the llama jumps through a path to get closer to the player. If the player is outside of detection range, the behavior tree will stop updating until the player is in detection range.