top of page

Sky traveller

Sky Traveller was the eighth and last game project in my education at The Game Assembly. The player is dashing, jumping and running on walls across platforms in the sky while being chased by llamas.

Role: AI Programmer

Team Size: 15

Time frame: 9 Weeks

Engine: SideTrack (custom engine)

Language: C++

trailer

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.

Behavior tree

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 llama shoots projectiles towards 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.

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.

behavior_tree1.png
BehaviorTree2.png

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.

jump_toward_target1.png
jump_toward_target2.png
sky_traveler_lama_pathfinding.gif

While jumping

Introduction

I needed a way for the llama to start falling down when it's in the air. I decided to have a simple gravity force pull the llama down if it was in the air.

Functionality

When the llama is going to jump, the force on the y-axis is stronger the further away the target point is. Then gravity pulls it down until it lands.

jumping_to_another_point1.png
jumping_to_another_point2.png
sky_traveler_lama_jump_speed.gif

projectiles

Introduction

The final part of the llama was its attack. The projectiles are llama spit and if the player gets hit, it has to restart from a 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. I keep track of its traveling distance and remove a projectile if it travels too far.

projectiles_update1.png
projectiles_update2.png
projectiles_update3.png
sky_traveler_lama_projectile_speed.gif

what i learned

This was the first time I used a behavior tree in a game. Before this, I had only used it in an assignment and didn't have that much time to work on it. Now I could dive more into the functionality of this type of tree and see how it could be used in an actual game. I was also able to gain a better grasp on how AStar works and see how it can be customized to fit specific projects.

bottom of page