Lucens_Banner.png

Lucens

An action game in which you fight demons and destroy corruption seeds to cleanse the world

 

Engine: Unity
Language: C#
Time: 8 weeks, full-time
Team: 2 programmers + 3 designers/artists
Year: 2017

Source repository
Windows build

Lucens is an action adventure game in which you can move quickly through a large world, exploring and fighting vicious enemies on the way. The goal is to cleanse the world from a dangerous parasite that has infested it. The world is relatively open, so the player can take any route they like.

 
 
brutefight.gif

The game largely consists of combat and exploration, with fast and satisfying player movement to navigate around the world.

fastrun.gif

My Work

Much of my time was spent on programming the player controls and abilities. The player can perform sequences of light and heavy attacks, as well as coming down with a dive attack or ground slam from the air. These attacks are accompanied by a dodge roll for escaping enemy attacks, which can also be used to cross gaps or increase the player’s movement speed. I have done the system for when an area is cleansed as well as some polishing to the camera, among other things.

 
attacks.gif

Aside from player controls, I also worked with some underlying systems, such as the system for handling when a part of the world is cleansed, loading and reloading of scenes, a system for collectibles and the handling of audio.

cleanse.gif

When a corruption seed gets destroyed, the area around it is cleansed. This triggers some visual effects via co-routines, replaces the materials of most of the objects in the area and changes the models for others, while some objects disappear completely. This is done by having a simple interface that all objects that should be affected implements. When the scene is loaded, the seed does an intersection test to find all objects in its vicinity that implements the interface and adds them to a list. When the seed is destroyed, it notifies the objects, which lets their implementations decide what happens with them.

To reduce work friction, we used FMOD for handling of audio. This made it easy to keep the audio code clean by simply triggering events and letting the more messy parts be handled on FMOD’s side of it. We also had a music manager object which was always loaded and handled transitions between different tracks. When a game event triggers a music change, it gives the name of the track to be played to the music manager, which in turn communicates to FMOD to fade out the old track and fade in the new one.

I have also programmed the behavior of one of the enemies in the game. These enemies are stationary and blast the player with a laser beam at regular intervals. They try to stay rotated towards the player and will sink through the ground when they die. While the AI of these enemies aren’t very complicated, it was a good opportunity to learn how behavior trees work, which we used as the basis for all of our enemies. We used a Unity plugin called PandaBT that let us create separate text files containing the behavior trees and define methods in a MonoBehaviour that could be called from the behavior tree.

When the mask on the player character’s back glows, they can use a special ability which temporarily slows down time for all enemies.

When the mask on the player character’s back glows, they can use a special ability which temporarily slows down time for all enemies.