Gwizzard (WIP)
Goblin’s are a slave race, held in captivity and bred for labor by the wizards. The Goblins are held in an underground megastructure, doomed forever. Unless the Gwizzard can save them.
Timeframe: Ongoing since March 2025 - Currently a Proof of Concept
Team Size: 6 people
Genre: Boomer Shooter
Roles: Sole Programmer
Scope (Proof of Concept): 30-minute experience with three unique guns, two levels, elemental synergy, and Enemy AI.
Worked Hours: 60hrs
responsibilities
Weapons System
Enemy AI (WIP)
GOALS
Establish a codebase for continued development
Learn the Unreal Reflection System
Learn the nuance of Blueprints vs C++
wEAPONS SYSTEMS
As a boomer shooter, multiple guns with unique feels are the heart of our game. To allow us to take full advantage of this, I created a weapon and damage system that supports varied input structures (like automatic, charge, and semi-automatic), and allows different code to be written while managed by one logic system.
The process here differs from other projects, where here I skip the sketching phase and am able to go directly to implementation.
I first start with creation of data structures and data assets that were specified by the design team. This is so I can start implementation and not go back to refactor how data is compacted or organized.
Then I start constructing class structures to organize different functionality between actors, components, and Unreal Engine subsystems.
When it’s fully working, I get feedback from the design team before I do a last pass on organization, then work on debugging.
data-based design
Weapons are broken up into two primary data assets: Weapon Data, and Weapon Attack Data.
Weapon Data stores information related to the use of a weapon: Inputs, ammo capacity and reserve capacity, and animations. The attack data references data directly related to how it deals damage, how much damage, and how much ammo it uses.
These weapons are controlled by an actor component that handles all logic and input related to weapons and weapon swapping.
DamAge system
Damage is handled by an actor component, meaning we can apply it to any existing actor. The base class handles health and elemental synergy detection. The Environmental offshoot handles custom VFX destruction of objects, and the Animated allows animations for death sequences which is useful for our player, enemies, and other animated deaths.
Reflection
Gwizzard was a big jump for me as I had never used C++ in Unreal before, but using Blueprint prototypes helped greatly in learning, as I had a direct reference to base off of. I got to learn the Unreal Reflection System to implement C++ code and manage access to variable, and I learned the best way to organize Blueprints and C++.
From here, I’m going to use C++ for programmer-only implementations like projectile handling, object pooling, data management, or big equations. Blueprints will best serve me as a way to prototype an implementation idea (particularly data assets to avoid Unreal renaming variables), or systems that will be subject to heavy iteration or editing by designers so we can change art assets and timing of those assets effectively.