Crash Bandicoot 3Cs Remake
I researched & developed the Crash Bandicoot: N'Sane Trilogy's 3Cs in Unreal Engine 5 with a Pre-Production mindset to make this a tool for any other developer to work with and make it ready for use in the production phase.
This was done by making research documents with my breakdown of the game to understand the design and functionality. The result is a Gym level, playable Demo level & how-to document detailing how to work with this character controller.
Engine
Unreal Engine 5.1
Team Size
1 Developer
Role
Technical Designer
Genre
3D Action Platformer
Development Time
8 Weeks
Game Research
The reverse engineering of the 3Cs started with a research question: "How does the "Crash Bandicoot: N. Sane Trilogy" character controller work?" This meant I would look into the mechanics tied to it, their functionality but also how Vicarious Visions & Naughty Dog made their versions of their respective "Crash Bandicoot" games.
Researching and breaking down the reference game
I researched the reference game by extensively playing it, watching developer interviews, and studying old blogs by Andy Gavin. The goal was to understand its mechanics and the reasoning behind its development choices.
From this research, I came to several conclusions:
-
The core verbs for the game are Jump, Slide, Body Slam and Spin.
-
The crates are a key element as they almost act as the game's measurement stick for the parameters of Crash his moveset.
-
The camera uses the level path for its movement and orientation.
This research was eventually documented in a Word file with the resources, conclusions and takeaways listed.
Engine Research
With the knowledge from the game research, it was time to go into the engine and find the best way to execute and recreate this in Unreal Engine 5.1.
I took a research & development approach where my experimentations would always be accompanied by an in-engine result to prove the validity and feasibility of the approach. I'd also try out multiple solutions to develop the product & in the end, provide arguments as to why I've decided on the chosen solution.
A sped-up video of me placing the blueprint in a gym level.
On-rails Camera
The camera in Crash Bandicoot is not attached to the character nor is it rotating to follow him. The camera's location is following the character along the level on rails, rotating towards the direction the level is heading.
I found a way for the camera to follow a spline and position itself at the closest world location on the spline near the character. To reposition it, I added variables with which a developer can set the XYZ offset from the spline itself.
This camera can be dragged and dropped into the level and be used right after setting the offset variables to position the camera right.
Hitboxes using Frame data
Crash has hitboxes attached to him and activated for the duration of the animation. These hitboxes have to move with him as he is attacking.
Using "Animation Notify States" and creating box collisions in the character blueprint, I can play the animation when the input is pressed. In the file of that animation, the developer can decide in which frames the hitbox is active.
This opens up the ability to have more control over the attacks and if needed other features can be made using frame data.
Character blueprint where the hitboxes for the Spin Attack are selected & highlighted.
Timeline in the Animation Montage showing the Animation Notify States (blue) and how long they last.
Character blueprint where the hitboxes for the Spin Attack are selected & highlighted.
Images of the blueprints and how the system is set up.
Left - The Mixamo skeletal mesh
Right - In-game Stack-O-Bot with transferred animation
IK Retargeting
A big selling point of Crash Bandicoot is how animated the character is. So, I wanted to have animations in this product not only to provide appropriate feedback for the player but also to pay homage to the inspired IP.
This was done using animations from Mixamo - a library of animations for 3D characters - and Unreal Engine's IK Retargeting that allowed me to transfer animations from a Stack-O-Bot rig I uploaded to Mixamo onto the in-game Stack-O-Bot using IK Rigs.
This allowed me to create animated prototypes that increased the quality of the production benchmark and helped communicate what action the character was performing.
Features
With the research done, it was time to fully develop and recreate the Crash Bandicoot 3Cs. In this project, you will find a playable character, a crate for the character to interact with and a camera tool to be used in levels. Other abilities that are not highlighted here are movement, jump, coyote time & variable jump height.
Spin Attacks
The spin attack is iconic to Crash his move set. It can be split into 2 versions when the input is pressed that I have named myself for the sake of this project:
-
Static Spin - When Crash is not moving, the hitbox on his upper body is smaller and doesn't extend enough to hit crates.
-
Kinetic Spin - When Crash is running, the hitbox covers his full body and he can destroy crates with his extended arms as well as his lower body.
Crawl
The crawl only activates if the player presses the input when Crash is standing still, or at the end of a slide, the player is still holding the button.
The movement speed is slowed down tremendously & collision height is halved from its original height.
Slide
If the player presses the input while running, Crash will perform a slide.
His collision box is halved when Crash hits the animation pose and he propels forward.
Once he has reached the endpoint, all his momentum is stopped. If the player is still holding the input, Crash will go into his crawl state.
Body Slam
If Crash is in the air and the player presses the right input, he will do a Body Slam.
In the air, Crash launches upward for a brief moment and locks in place.
After that, he will fall straight down and break any crates below him until he hits the floor.
Demo Level
The demo level was made to show everything in the project working in a practical setting. The level was tested to show any issues with functionality but also as a real gameplay moment to see if this would be ready for production.
Gym Level
The gym level was made to highlight and show each feature in isolation and outline what is included in this tool.
The gym has displays that explain each feature and also how a developer can edit them for use in production.
Takeaways
Achievements
-
During testing, players recognized it as Crash Bandicoot from a gameplay perspective.
-
I learned a lot about Unreal such as Animation Notifies, IK Retargeting, spline functionality, and more.
-
I wrote descriptive, well-structured documentation that had an extensive amount of data through research and analysis sketches. It also has summarized content to explain the whole document.
Challenges
-
Assigning the right amount of time I should have spent on certain features and abilities due to my planning not being granular enough.
-
I had to learn a lot of new Unreal tools and systems.
-
Writing documentation for instructions as well as developing all of this at the same time.
Learnings
-
The value of doing broad engine research before starting to develop.
-
I should be writing documentation parallel to building in-engine.
-
I should not only plan the smaller tasks better, but also estimate beforehand what is achievable within the timeframe I have.