The game
The video game CLTRS invites players to dive into a playful exploration of female sexual pleasure. Using a rolling avatar, players cruise through space, discovering the body's landscape with swift moves, sparking life wherever they go. Sometimes, to reach climax, you just have to explore!
This game was made in Unreal Engine 5.1. What is presented here, and what I worked on, is the prototype of the game.
The final version of the game is available on Steam.
MyPart
For the character movement, I had to come up with a type of movement our client described as "Sonic-like". I came up with a movement based on the unreal movement component with added features.
Basic Movement
I didn't have a lot of problems since, for the basic movement, I simply modified the Unreal Movement to match the acceleration and deceleration our client wanted. The tweaking was a lot of back and forth since the environment wasn't as big and as maneuverable as a fast movement would require, but the Unreal movement component is powerful and allowed me to change the settings to get a good movement.
To add some realism to the handling of the character, I decided to add a speed modification according to the terrain inclination. I used the ground normal to add a force to the character in the direction of the angle.
Ground snapping
A problem was quickly found during tests, as our character was too fast and would sometimes fly up after climbing an inclined surface, making him difficult to control. To counter that, the first added feature was a ground snapping. I created a ground snapping function which snaps the character to the ground using a linecast going downwards when we are not falling off an edge. I didn't want our character to jump around every time the terrain was uneven, but still allow it to move freely.
Character angle
Since the character no longer jumped at high speed, the way it moved around on inclined seemed a little off. To remedy this, the second feature added was a character orientation system. This system allows the character to have the angle of the ground he is standing on. It uses the linecast previously created to get the ground normal. Using this ground normal, we can easily set our character rotation to match it, making our character follow the curve of its environment.
We wanted too add points of interests and allow the player to discover new paths, so my team asked me to make an interaction system, which we could use to reveal new elements. It relies on two interfaces. The first one is an interact interface, which is the interaction between the player and an object. This interaction calls the second interface, the trigger interface. This trigger interface is on the object we want to do the result of the interaction. A button class calls the referenced object's implemented interface, making it a flexible system allowing a multitude of different interactions.
Due to a lack of time and a few other problems, this system was only used to trigger a button. This button triggers a change of camera to show the player what the interaction did, which is the trigger of a particle system and the appearance of a bumper.
Since this system seemed a little too basic, and it caused players to trigger an interaction without wanting to, I added a progression effect. This progression is represented by a UI above the button, which acts as a gauge. Once full, the button is interacted with.
Since we did not have an animator on the team, we found other ways to create animations. We came up with programmed ones. I was in charge of making the character look alive through these animations.
Ball rolling
The ball felt too static, with it simply hovering and not moving while the character was accelerating, so the first animation I did was a simple rolling animation for the sphere. It uses a lerp between zero and one, using the current speed, and add the result to the current rotation of the ball mesh.
Wings closing
With the ball now moving, the wings gave the impression the character wasn't "alive", so the second animation I did was a wings closing animation. It was not easy since the team decided the wings were to be made using a Niagara System. With the help of a few artists (mostly Edwin Lam), I modified the Niagara to use parameters I could control. This wings animation system lerps between opened wings and closed wings using the current speed to recreate an aerodynamic look. The color of the wings also changes according to the same rule.
Idle animation
Since the game is a lot about taking our time and looking around, the character didn't seem natural simply staying with its wings fully opened. To remedy that, the last animation I did was an idle animation. It uses a timer that triggers when the character stops using movement inputs to enter an idle state. It launches a looping function that increments and decrements a variable to lerp between the open and closed wings positions.
Credit
Programmers
Alexandre Tremblay : Gameplay (Character movement, Character animations and interaction system)
Léa Bouchard : Gameplay (Camera and plant growth)
Guillaume Lévesque : Gameplay (Terrain traversal system)
Music
Théophile Gagnard
Zoé Martinez
Artists
Nicolas Gagnon-Picard: 3D Modeling
Edwin Lam: 3D generalist
Sofia Mayada Lorenzo: Game and level design
Lucas Métivier: Concept art and character model
Coralyn Potvin: Environment artist
Jason Sellors: 3D Modeling
Yi Theo Wei: Concept art and lighting
Indra Yang: conceptrice IU and 3D Modeling
Marie-France Yang: Environment artist