Carno Run
Carno Run is an 3D side-scrolling infinite runner game created over a few days. Inspired by Google Chrome's T-Rex Dino Run, this project was aimed at practising my skills in Unreal Engine 5, as well as an introduction to 3D modelling and animation in Blender.
View my full documentation on GitBook here.
Read on to see my process.
Inspiration
Google Chrome's T-Rex Dino Run is a fun minigame hidden in the Google Chrome browser that shows up when the user has no internet connection. It has always been a great companion to me when the WiFi stops working, or when I'm waiting for the bus with my mobile data used up.
Inspired, I wanted to start this project to transform the game into 3D, with the following few objectives in mind:
To learn to make a infinite runner in Unreal Engine 5.
To learn and practice using Blender to design 3D models, animations, as well as the workflow in integrating those assets into Unreal Engine 5.
Greyboxing
The objectives of greyboxing were:
To create a playable prototype infinite runner to test the project's viability.
To test certain game mechanics such as speed increment and distance between each obstacle.
By achieving the above objectives, the foundations of the game's technical design could be completed as well by implementing them relative to the placeholder geometries. It would then be relatively simple to replace the placeholder geometries in the prototype with my modelled assets, and fine tune the game mechanics.
To effectively achieve my objectives, the greyboxing would include:
The level
Infinite generation
Obstacle variation
Game mechanics
Start
Points system
Game over
Google Chrome's Dino Run and prototype gameplay
Asset Creation
The player character in the game, as its name will suggest, is a Carnotaurus. Modelling the Carno was relatively simple by following a reference image from the front and side.
I found more difficulty in animating the Carno.
Model of carno in Blender
Keeping in theme with Chrome's Dino Run, the essential environmental element of the game is the cactus, and with that, comes the desert.
I put together some reference images and got to work.
Animation
Rigging the Carno was quite straightforward, with some trial and error of the bone positions and lengths, I was able to rig the model to my needs in animating it.
I created IK (Inverse Kinematics) rigs on the legs to easily animate it for walking and jumping.
For animation, there were no good references of walk cycles of dinosaurs. So instead, I used a reference of a human walking and applied the same principles of contact -> down -> pass -> up
. I did the same thing for the jumping and idle animations.
Animation of walk and jump cycles
Technical Design
Technical design seems to be generally loosely defined but centers around connecting the design elements with programming elements of a game, through implementation in engine or code.
The game's technical design was relatively straightforward and broken down into a few parts:
Camera set-up
Player Controls
Animation
Collision with obstacles
Level spawning
The detailed breakdown of the technical design can be found here.
Collision set up of the cactus obstacles and animation blendspace of Carno
Game Mechanics
There are two main elements of game mechanics in play:
Score system
Difficulty scaling
The score system follows a linear model and increases as the game progresses at a constant rate. However, the difficulty scales up exponentially, which means each time the difficulty increases, it does so at a smaller increment from the previous time.
This makes the game still playable at higher levels as difficulty does not increase to infinity, yet it jumps quickly to a more challenging state, making the "early-game" short enough to not make the game boring, but long enough for the players to get sufficient warm-up with the controls.
Level Design
The design of the environment was centered around a desert theme. I modelled a few variation of ground pieces, rocks, cacti and clouds, and put them together in Unreal Engine 5 as three variations of a level piece.
Each level piece contains a linear runway where the Carno will be running down, with 3-4 cacti as obstacles. The foreground and background of each level piece are also varied.
At the start of each map piece, another map piece is chosen at random to spawn at the end of it. This creates a sense of perpetuity and mocks procedural generation of terrain.
As the player only views part of a map piece at any instance, any sense of repetition is negated, either way, players will likely be too focused on the game itself to notice any patterns.
Level pieces and spawning (collision with cactus turned off temporarily)
Reflection
As all my past personal projects, creating this game was an enriching experience. Creating clones of or iterating on certain existing games is definitely a good way to practice game development.
I thoroughly enjoyed modelling the environment and the Carno, it was a fun way to bring the game to life and use assets that I can call my own.
Beyond what the current game has, if I were to work on the game further, I think I could add some additional features to make the game more dynamic and introduce an added level of challenge.
Day-night cycle
Different biomes (and transition from one to another)
More types of challenges (moving obstacles, flying obstacles)
Incentives to make "perfect" jumps
Upgrade systems, etc.
Different dinos
infinite side-scrolling runner
infinite side-scrolling runner