ROCKSTARS!
Glass Records Studio
An in-game screenshot of the player bouncing onto a Sporrus Maw enemy’s head.
-
RockStars! is a 3D action-platformer with an unforgettable psychedelic rock aesthetic!
The player takes on the role of the lead singer/guitarist in a wandering band of space hippies on their way to the gig of their lifetime, the Protostar Palooza! In what is essentially a cosmic Coachella, bands from around the galaxy gather in one place to witness the forming of a protostar, and get this: they’re the opening act!
While on their way, their rocket minivan smashes into an asteroid and crash lands on a mysterious new planet, leaving the player and their other band members scattered on its surface. With the gig starting in only 4 hours, it’s up to the player to round up the troops, repair the ship, and head back into space before their chance is up!
-
GAME GENRE: 3D Action Platformer
ENGINE: Unreal Engine 5.4
PLATFORM: PC (Steam)
TEAM SIZE: 15 Members
DURATION: 32 Weeks
ROLE(S): Lead Programmer & Combat Designer
-
Direction of the team’s Programming department, including code revisions and repository control
Implementation of all the attacks in the game for the player character, enemies and boss encounters
Adjustment of all attack hitbox data to ensure attacks have properly balanced range and damage output
Definition of all enemy and boss behavior trees and blueprints to control established attack patterns
Creation of the Sound Wave ability used by the player to stun foes and break blockades in levels
Development of the Rhythmic Attack system, granting doubled damage to well-timed player hits
-
RockStars! is scheduled for a Steam release in April 2025.
Stay tuned…!
CODE SNIPPETS
In this Animation Sequence are Animation Notifies and Notify States that control the Rhythmic Attack system.
The first Notify State, AnimNS_HitDetection, is a state that spawns a Sphere Trace for Objects at a designated location per frame tick. In the context of gameplay, every frame from 15 to 22 spawns a hit sphere around the character’s right hand that damages an enemy within the radius.
At frame 25, a Notify titled CanAttackAgain fires. This Notify enables the player to perform their next melee attack in the three-hit combo sequence.
At frame 30, a Notify NS_PerfectHitParticle fires. A particle spawns behind the player’s head, noting the start of Notify State AnimNS_PerfectHitRange. If any attack is performed from frame 30 to 36 of the attack animation, the notify will double the damage of the next attack the player performs.
From this point, this Animation Sequence has a Animation Montage created. This Montage preserves all the Notifies and Notify States of the Sequence, and it allows the attacks to be called by Play Montage functions within the BP_ThirdPersonController blueprints.
Once the Animation Montage is created, new Notifies are added to further refine the logic implemented in the Animation Sequence.
At frame 1 in each attack, a Notify titled AN_PerfectHitFX fires. If a follow-up attack (prompted by CanAttackAgain) is performed at any frame tick during AnimNS_PerfectHitRange, a special VFX will play. This VFX denotes that the attack was perfectly timed, allowing the player to visually register their next attack will deal bonus damage.
At frame 17, a Notify titled AN_MicAudioNotify fires. This plays the attack SFX as the animation plays, adding to the impact of the attack swing.
At frame 36, a Notify titled AN_DamageDefault fires. This causes damage output of the player to reset back to its default value. This Notify is intended to play at the end of the AnimNS_PerfectHitRange, but it plays in its own Notify rather than in a Received Notify End for the aforementioned Notify State. This is because if the animation montage for the next attack in the combo is played, Received Notify End will call, resetting the damage value and making the attack always deal default damage regardless of timing. Conversely, firing in its own Notify State will not always call the function.
Looking closely at the AnimNS_PerfectHitRange, there are controls meant to edit the damage values on each weapon. Once the notify begins, the notify takes the owner of the animated mesh, then casts it to the player character. Considering the player character is the only actor who can perform Rhythmic Attacks with perfect timing multipliers, only BP_ThirdPersonCharacter is a cast target for this Notify State.
From there, BP_ThirdPersonCharacter calls the function Perfect Hit Timing. Within this function are controls to multiply the default damage output by a factor of 2. There are optional events to call in order to add extra juice from within the function itself. One such event is Temp Player Damage VFX, called from BP_ThirdPersonCharacter. However, given that this is a placeholder effect meant to be swapped out for a more polished effect tailored to the attack, it has been disconnected from the other methods.
Within BP_ThirdPersonCharacter, the aforementioned function Perfect Hit Timing edits the damage values applied through each attack.
In the Variables section at the bottom left of the provided image, an array of the custom BP Weapon class called Weapons is visible. Both this and the Switch on Int code block that edits the Damage Output float are adjusted by an integer value titled CurrentWeaponIndex. This integer is tied to the Weapons array, serving as an index for it. If its value is set to 0, it means the XLR Mic is the player’s equipped weapons. A value of 1 means the Keytar is equipped, and a value of 2 means the Lead Electric Guitar is equipped.
A standard Rhythmic Attack that is not executed within the Perfect Hit Range will have a Damage Output of 25 with the XLR Mic, 5 with the Keytar, and 50 with the Lead Electric Guitar. Conversely, if the Rhythmic Attack is called within the Perfect Hit Range, damage output is set to 50 for the XLR Mic, 10 for the Keytar, and 100 for the Lead Electric Guitar. From there, the boolean IsAttackingPERFECT is set to true, which is used to check off the notify AN_PerfectHitFX in the animation montage. When true, additional VFX will play to signify the attack was perfectly timed.
SEE IT IN ACTION!
This is a video demonstration of Glass Records Studio’s RockStars! I am credited as the team’s Lead Programmer and Combat Designer!
Showcased in this clip is the Rhythmic Attack system described above in the Code Snippets section demonstrated on the game’s most basic enemy type: the Erg Crawler. After grappling up to the first platform with an enemy encounter, the player character approaches the first Erg Crawler they see. Once the monster emerges from its shell and begins to pursue the astronaut, the player performs a Rhythmic Attack combo sequence, scoring a Perfect Hit on the second swing. At the 30th frame of the animation montage, a particle emerges from the player character’s head. This is meant to signify to the player that they have entered Perfect Hit Timing. If a player attacks within this time frame, their second swing of their XLR Mic combo will deal 50 damage instead of its default 25, as noted by the Print String messages in the top left hand corner and the colorful burst at the player’s back via AN_PerfectHitFX. The Erg Crawler enemy type has a maximum health value of 75, so one default Rhythmic Attack followed by one Perfect Hit Rhythmic Attack is enough to defeat it!
The second Erg Crawler is defeated with a full three-hit Rhythmic Attack combo. If the player tries to attack without adhering to the rhythm of the Rhythmic Attack, each hit with the XLR Mic in hand will only deal 25 damage. This means that the player’s maximum damage output by ignoring the Perfect Hit Timing would total to 75 health. While this may still be enough to defeat the Erg Crawler, any enemy type with a higher health value than 75 will survive the basic XLR Mic combo. Timing is paramount to dispatch enemies before they can hit the player back!
Juxtaposing the default attack string is another Perfect Hit combo on a stationary Erg Crawler. As seen with the first Erg Crawler, the damage dealt in two perfectly-timed swings is equal to the damage dealt in three mistimed swings.
RockStars! is scheduled for an April 2025 Steam release. Stay tuned…!