
Ghost Game Dev Blog #2
For the second major update for this project I decided to focus on integrating the Gameplay Ability System into the project. For reference, I've worked with GAS quite a lot. I've built a ton of abilities and characters, but I've never had the chance to set the system up from scratch before. Because of that, I used this as an opportunity to try and "do things right" and build some custom tools that would help make expanding this project easy later on.
Ghost Mode Ability
BUT... before we get into the boring stuff, let's look at the first ability I made for this project
This is a simple ability to enable the new Ghost Character to pass through walls. This is accomplished by swapping the Character's Collision over to a custom "Ghost" profile and object channel and by assigning the walls to a new profile that only overlaps the Ghost.
The ability also uses a resource 'Ghost Mana' which you can see being consumed in the video as the blue bar is depleted.

Ability System
What took this most work during this update was the approach I took to the implementation of the Gameplay Ability System. I wanted to make a Helper Class that would handle all of the assigning of Abilities, Attribute Sets, Effects, and Input Tags in C++.
This way I wouldn't have a bunch of 'boiler plate' set up procedures junking up my Blueprints. All you need to do to set up a character is select some options in a drop down menu on the Helper Component.

This makes tuning a character's attributes easy as well. You only need to change some values in the Gameplay Effect that is assigned to set up an Attribute Set's default values. You can see below that the character's speed and gravity are set this way.

New Ghost Character
The last thing I'll mention is the new Character Model and the Dynamic Ghost Material. Both are custom jobs. I made the Ghost model in Blender, which was a struggle, but I'm liking that everything in this project (so far) is custom made.
And as the project moves forward I'm thinking that the game is going to be about a Ghost chasing humans from their house so I needed something simple that would set the player apart from the 'Human/Meeple' model that I was using in the last Dev Blog.


