Crash Team Rumble
Gameplay Programming Intern
4v4 Team-based Competitive Action Game with Crash Bandicoot Characters: Link to Game Page
Overview
Company: Toys For Bob
Time Period: June - September 2023
Skills: Unreal Engine 4, Perforce, C++, Jira, Visual Studio
- Expanded on Unreal Engine’s Gameplay Ability System to add damage modifiers that can be changed via Gameplay Effects so designers can better change player damage through Powerups. Using this system, designers can add a Gameplay Effect through a blueprint node to change the damage a player receives or deals to opponents.
- Implemented default knockback through Gameplay Effects so designers can determine if players can get affected by attacks that don’t have knockback by default. With a blueprint node addition to add a Gameplay Effect, designers can allow players to be temporarily affected by knockback when affected by certain Powerups found in the maps.
- Fixed bugs relating to hover jump getting stuck on walls, infinite dashing into the air, and prematurely canceling an air boost by double jumping, preventing further frustration with player movement and navigation.
- Worked on optimizing badge loading in a group effort with other Engineers and a Technical Artist to prevent out-of-memory crashes on PS4. Created tags to easily categorize badges to be loaded to the game modes they need to be in.
Here’s a gameplay video1
Contents
Damage Modifiers
The Gameplay Ability System (GAS) is a built-in system in Unreal that allows abilities that characters can use, with systems in place for cooldowns, when some abilities can be activated, and multiplayer networking functionality like client-side prediction and replication. In GAS, there are Attributes which are values like health, mana, experience points, etc. These Attributes can be edited through Gameplay Effects.
I added damage modifiers through Gameplay Attributes so designers can better change player damage through Powerups. I added 4 Gameplay Attributes for all characters:
- Damage Dealt Multiplier
- Damage Dealt Addition
- Damage Received Multiplier
- Damage Received Addition
Through this, I created Gameplay Effects that change these values. Crash Team Rumble already had a system in place for things like Character Abilities and Powerups to apply as many Gameplay Effects as needed, and to specify the behaviors of these effects. These include conditions when they can be applied, how long they are applied for, what would cancel them, etc. With this, designers can specify when a team gets a Powerup, they can boost the damage they give, or when a player is affected by a character’s ability, they take more damage. This allows for more flexibility with temporary damage changes during a game.
Default Knockback
In Crash Team Rumble, some attacks do knockback and some do not. I added the ability to have it so you can be affected by a default knockback when hit by an attack that doesn’t have knockback data. This can be set through Gameplay Effects with a blueprint node. This allows designers to temporarily make a player get affected by knockback for every attack. One use case for this was for the Shrink Ray Powerup, which shrinks the opposing team. Now, when a player is shrunk, they’re affected by knockback from any attack, making it harder to defend positions.
Here’s a video showing shrunk enemies being knocked back by Crash’s spin attack (which doesn’t do knockback by default)2
Ability Bugs
There are two bugs in particular that I will go over:
- Dingo’s Hover Jump
- Accidental Cancelling of Air Vent
Dingo’s Hover Jump: Dingo has an ability where he can hover in the air at a fixed height. When he does this and touches a wall, he would be stuck in place until the hover ends. I went through his hover locomotion code and added additional calculations when Dingo is colliding with a surface when hovering. I also made it so when Dingo hovers up a ramp, he doesn’t get stuck vertically either.
Here’s a simplification of the code.
Vector3 dingoMoveVec = m_dingoForwardVec * m_hoverSpeed * deltaTime;
if (collision)
{
float dotProdHoriz = Vector3.Dot(dingoMoveVec, collision.m_normal);
Vector3 projectVec = collision.m_normal * dotProd;
dingoMoveVec -= projectVec;
dotProdVert = Vector3.Dot(collision.m_normal, Vector3(0,1,0));
//makes sure we don't change height when on a flat surface
if(dotProdVert != 1 && dotProdVert != -1)
{
dingoMoveVec.z += dotProdVert;
}
}
m_position += dingoMoveVec
Accidental Cancelling of Air Vent: There are air vents that push the player up into the air, but it could be canceled if the player double jumped while getting pushed up. I made it so that when the Gameplay Effect for the air vent’s effect happened, it would prevent the player from double jumping for a short period of time.
Here’s a video showing the air vent in action3
Memory Crashes
When the game was suspended on PS4 and re-entered on the Party Games Game mode, the game would run out of memory and crash. I helped fix the issue by optimizing what badges were being loaded for each game mode. Badges are rewards given at the end of a match for being outstanding at a task like most points scored.