Alexander Frost

Spite: The False God

Spite: The False God

TGA-Project: 6

Genre: Diablo

Reference game: Diablo III

Group name: Smoggers

Engine: GhastLight Engine

Code: C++

About

Spite: The False God was our sixth game project at TGA and we had to make a game inspired by Diablo 3 with the theme Aztec. I was tasked with implementing a NavMesh pathfinding for our game engine. I also worked on funneling for the pathfinding in my free time since I thought it was very fascinating. I kinda got something working but it had some edge cases to it but for the most part, it worked as it should have done. I also got to work on the player and its abilities. To make my life much easier I implemented a class-structured state machine so it was easy to iterate on every single feature. Originally another guy was going to work on the enemies but he got caught up in other tasks so I asked him if I could take some workload off him so we would finish on time. So it ended up that I got to work on all of the gameplay elements which I gladly did. At the end of the day, we delivered a good final project for a student game and I was very happy with my contribution.

project15 image1
project15 image2
project15 image3

Funneling

The NavMesh was part of the AI-Course at our school so I got time to work on it outside of project time. But one thing that wasn’t part of that course was funneling! The funneling method I used was called Simple Stupid Funnel Algorithm and I knew that a friend of mine who went one year above me sat their entire project with this. So I made contact with him so I could make it work in our game engine as fast as possible since the NavMesh is such a big part of the game so we had to test it.

Explanation of the funneling method used

How it works

The funneling works by adding the starting point to a list and then iterating through the portals/links the original path went through via a left and right axel. When one of the axles crosses the other the current position is added to the list and the new apex is set, and it continues to do this until it finds the desired end position or when it’s out of portals to traverse.

I also made the path slightly away from its edge by adjusting the size of the portals by subtracting the entity's radius on both sides. If the portal size went negative the path wasn’t able to be traversed by the entity and therefore reached its end of the path.

You can see an example of my funneling in the gif below, the pink path is the original while the yellow is the funneled path.

How the funneling turned out