This blog series is a part of the write-up assignments of our Game Engineering II class in the Master of Entertainment Arts & Engineering program at University of Utah.

For the final project, we are creating a simple gameplay with our engine components from the last projects. So far I have incorporated Yuxian Deng’s behavior tree, Sai Upadhyayula’s controller input, and Shantanu Pandey’s audio system.

Goals

My goal of this final project is to create a gameplay similar to the Crypt of the NecroDancer. The gameplay is simple enough that I can recreate most of them with the engine I have and the components provided by other classmates.

I am using my own navigation graph system to make a grid-based movement so that the player is actually not directly telling the character to move to certain locations, but inform the navigation agent to move onto some nodes.

I will be using Shantanu’s audio system to play the music and sound effects in the game. However, since the library cannot provide me with information about the audio (such as BPM), I have to hard code some values in the game.

For the enemy or NPC’s AI logic, I am using Yuxian’s behavior tree. The NPC logic for this game wouldn’t be too complicated, they simply need to move to a neighboring node within a fixed time interval, so it can be easily achieved with some simple service nodes and task nodes.

Also, I am using Sai’s controller input to provide input option other than keyboard.

Results

You can see that I have added a new mesh to show the locations of the navigation nodes so it is less confusing for the player to understand what is going on within the game. Also, since this is a dungeon crawler type of game, I added a simple target following functionality for my camera class.

Also, note that the deer (NPCs) are actually moving every two beats with the music.

BTTestGif.gif

Integrating Components

Integrating other classmates’ components has been pretty fun. Most of them are easy enough to integrate with detailed documentation of the owner’s website. However, I did encounter some problems.

I tried to integrate Zhitao Zhao’s terrain system. However, when I was trying to build the terrain binary file from a .raw file that I exported from Unity, it kept throwing errors. After a few other attempts, I decided to just not use it since the terrain was not actually a crucial part for my game.

When I was integrating Yuxian’s behavior tree system, the builder project also couldn’t be used since there is a missing script (LuaHelper) that was not inside the project. This wasn’t actually an issue at all since I can simply create the behavior tree in code without using a Lua file. I also made a tiny change in the code (added a const) to make my own custom task class to work, but everything else works without problems.

Component Patches

Throughout the process of incorporating other components and making the gameplay, I discovered a bug within my component. Later on, I added some new features and changed a bit of the interface and the implementation. Totally, so far I have patched my codes twice and updated the project in my last post.