top of page

Other Life

Created using Unreal Engine

Platform : PC Windows

​

Project Time On going (Start Date: 20 May 2022 - 20 Dec 2022

OtherLife.png

Links

GAME INTRODUCTION:

Other Life is a first-person exploration game where you play as an alien explorer, sent out to scour the stars in search of new life.  After detecting a significant energy signature on a nearby planet, you and your trusty AI companion happen upon the remnants of an alien civilization, brought to ruin by an unknown catastrophe. Armed with unique light-based technology, explore and discover the truth behind this interstellar mystery.

​

Team size of 8 members.

​

FEATURES

  • Explore the serenely derelict alien city and the lives of its lost people.

  • Discover the workings behind the unique crystal technology of the Luminites, and how it can relate to your own.

  • Solve and overcome the many challenges left behind by a cataclysmic event.

  • Venture into the core of the city and uncover the consequences of a great secret.

​

What I worked on

Tasks I was working on:

  • Light System

  • Inventory System

  • Journals

  • Objective System

  • Menus Setup

  • Character Hand Animation

  • Hand Tools for LightMode (Emit) and DarkMode (Absorb)

  • Lock-On System

  • Cutscene

  • VFX (Sandstorm, Debris falling, Simulate negative light, Object Masking for UV function, Etc)


I'm the lead programmer in the development of this project. My responsibility is to oversee the technical part of the project and discuss with the group members if the ideas are feasible or not in our technical capability since most of the programmers are new to using Unreal Engine, we wanted to learn to use a new engine and expands our skills as programmers and that is why we chose Unreal Engine as our Game Engine to develop the project. 

​

At the start of the project, I was learning to transfer the logic and experiences of developing in Unity Engine onto Unreal Engine to get familiarized with Unreal Engine's ways of implementing functions, I design and create the core mechanics light system where game objects are sending and receiving light information between each other, I also created VFX for negative light and UV masking function for the game.

​

Challenges & Solutions

  • New to Unreal Engine

Our project programmers are all new to using Unreal Engine before starting working on this project, fortunately, the team was formed a few weeks before the project officially started, and the programmers all focus on learning the Unreal Engine system during this period, it was quite difficult to understand the system at the start and quite intimidating to switch from familiarize Unity Engine system, I have to relearn how to create functions from using blueprints scripting, the first few weeks the team still contemplating on switching back to using Unity as our progress are quite slow compare to creating inside Unity Engine, but we decide to push through and I'm glad that we are able to as now using Unreal Engine feel much more preferable for me and I'm quite comfortable on using Unreal Engine now.

​

  • Performance issues​

One of the major issues we get from playtesting is the drop in performance inside one of the levels, it is mostly caused by the lighting and mishandling of blueprints, our game heavily relied on Event Tick when a function that should just trigger one time is still doing checking when it shouldn't, luckily we get some very useful feedback from the industry technical peoples that helps us a lot in trying to optimize the project, we try to reorganize our files, refine our blueprints scripts and carefully manages our uses of lighting in the level, we also learned to do debugging to check for performance between CPU and GPU and balances it.

​

  • Gameplay programming knowledge limitation

One of the earliest gameplay mechanics was to use gestures to draw symbols to interact with the environment like Arx Fatalis, but due to our team's programming knowledge we aren't' confident in creating the mechanics even though we find references in Unreal C++, we didn't understand how the code works, however, we are able to find a plugin that helps with creating the mechanics, though the system didn't make it to the final design of the game as we find that the symbol drawing is clunky and doesn't go well with the game direction that we want to create. 

Game Trailer

Game Screenshot

Mechanics Explanation:

Light Mechanic

HandAnimation.gif

Above is a showcase of the player hand tools mechanics, it has 3 variations which consist of 'Light Mode', 'Dark Mode', and 'Rotation Mode'. The "Light Mode' shoot out a light beam to input lights onto any sensors, the 'Dark Mode' will create a dark cone that will absorb light from light assets, and the 'Rotation Mode' will allows the player to rotate the game object on a fixed angle. 

HandAnimation.png

A setup of Hand Animation State

​

The hand starts out as lowered, then can be triggered to raise up and rest on idle animation. when activating the tools it will blend between the idle and tools mode animation when switching between different modes, it will first go to a switching animation before returning to the tools animation. The animation has an Enum to indicate which state it is using, inside the player actor there is a function to switch between each tool's mode and update the animation state accordingly.

LightMechanics3.gif

The above shows one of the core mechanics of the game, the light mechanics which consist of 3 types of actors. 

  • The first is an 'Emitter' (Sphere Core), its purpose is to shoot out constant light and sends light information to others.

  • The second is a 'Sensor' (Cube Core). its purpose is to receive light information and triggers any game actors that are affected.

  • The third is a 'Transmitter', which acts as a combination of both emitter and sensor where it can shoot out lights on its own and receive light data, it also can transform the light it receives into a different light. 

LightMechanics.gif
LightMechanics2.gif

Showcase of some systems that the light mechanics can be used on

​

  • The left side is an example of a player sending a light with his hand tools onto the emitter, and the emitter will send a light onto the sensor to trigger the opening of the door.

​

  • The right side is an example of sending multiple sensors' light data onto other game objects that have a light interface to receive the data, in this case to trigger the destruction of the wall.

Inventory System

Inventory.gif

Drone storing items in the inventory slot​

​

This inventory system is based on the Youtube channel Beardgames Inventory System Tutorial with modified to fit into the project designs. 

Link to reference video: https://www.youtube.com/watch?v=TcTxSyk8Vks

​

The inventory system consists of 3 major widgets parts, Inventory, Inventory slot, and Item Hud. The inventory widget act as the main parent for storing multiple inventory slot, the inventory slot checks which slot is occupied and empty to determine the types of objects that need to be stored the according to the slot, for Item Hud it is for the user interface for the player to use the item and more. 

​

All the pickable items will have an item info structure for storing their details and an interact interface implemented into their class settings, once the item is stored in the inventory slot the data will also transfer into the slot, and the item can be triggered to use, drop or inspect through the interact interface.

 

Through game design iteration, the function of the inventory system also changed to only store one type of stackable object, which can be viewed through interacting with the AI companion, though the function of storing multiple objects is still in the project in case of future changes. 

Journals System

Journal.gif

Popup UI that correlates to the journal system

​

The Journals uses a game instance to store the pages that the player unlocks, and an array of booleans are used to check which pages are viewed and unlocked through gameplay, the journals and popup widgets both are similar in terms of navigating through the pages, which popup widgets able to update the unlocked pages, it does so by using a few integer variables, a Start Index for where in the Journal should it start to unlock and Max Index for the number of pages it unlocks. The navigation arrows will automatically show or hide when pages to the page are valid as well as the exit button in popup widgets when the last pages are shown. 

​

Journal2.gif
journal2.png

Showcase of unlocking information through absorption of light

​

There is a Luminite monumental stone where the player can absorb the information stored inside to unlock and save into the journal, this monumental stone is reused through out the levels and the popup widgets are able to easily swap out to different widgets in the editors as the variable is exposed to use.

​

Lock-on System

LockOn.gif

Demonstration of the lock-on system​

​

This lock-on system is based on a Youtube channel Target Lock On Tutorial Video with modifications for zooming in and out as well as smooth panning to lock-on target effect. 

Link to reference video: https://www.youtube.com/watch?v=luITTVwa26M&t=329s

​

Lockon.png
lockon1.png
engagelock1.png
SwapLock.png

Some previews of the lock-on system blueprint function​

​

Lock-on system used a collision trigger to determine if an object is within range of lock-on, it then triggers engage lock-on by looping through the available actors that are added into the array, by using the same function again it'll check to swap between different actors when available or disengage the lock-on when none is found, it also automatically disengage when actors are out of range, lerp smoothing on camera targeting is used to avoid abrupt experience when trying to lock-on to target.

VFX Assets

Fog.gif
Fog.png

Volumetric Sandstorm​

​

There were some iterations before creating these volumetric sandstorm effects, previous attempts were using a 2D plane set in front of the player camera with 2D noise texture panning to create moving sandstorms effects, but it is not satisfactory as when moving in a 3D environment the effects void of spatial feeling. 

​

Fortunately, by switching the searching approach to a more artistic method, I was able to find a great reference from the Youtube channel Michael. G Art's Animated Local Volumetric Fog tutorial,  this effect is based on his tutorials with some alternation to create a more Sandstrom-like effect from his fog tutorial. 

​

Link to the video: https://www.youtube.com/watch?v=2L362NY3psY

​

It is basically a material inserted into a cube mesh, where the material will be an additive to the scene Exponential Height Fog component, it uses a mask on Perlin Noise and panners on the texture to create fog-like effects moving.

​

Core.gif
Core2.gif

Energy Core​

​

This energy core is created as the energy source of the alien civilization, these effects are referenced from an aura body effects from a Youtube channel UnrealCG, although this effect is more suitable for futuristic armors, I found it is quite suitable to use as the energy core reference after tweaking the Fresnel effects. Additional effects are added to create an unstable feeling by randomly scaling the mesh and a trigger to make it switch between range values of Hue.

​

Link to the video: https://www.youtube.com/watch?v=Gbqp9PZaD7A

RockFX.gif

Debris Falling Effect using Niagara System​

​

There are some debris effects I found on the internet but most of them are not able to achieve the effects the project wants, so after changing my approach to researching the effects, I found a Youtube tutorial on falling leaves effects by CGHOW, it gives me an idea of referencing it to create small debris falling effects, I change the meshes to rocks instead of leaves and tweak the velocity and mass of the particles, added collision as well to create a more impactful debris effect as it interacts with the environment. 

​

Link to reference video: https://www.youtube.com/watch?v=YQe47qjmClE

​

Negative Light.gif
IES light.png

Negative Light Effects​

​

I was tasked to create a 'black light' effects which is opposite to the normal flashlight effects and it is notably harder than I thought, there is no 'black light' in real life as black light is just simply void of light, so by simply changing the light color to black doesn't work as it doesn't shoot out any light. So my approach to achieving this effect is by using a 3D cone shape mesh that will scale depending on the distance the player is looking at to simulate a flashlight, with 3D mesh I was able to create a material that may simulate a 'black light' effects similar to how flashlight function. 

​

Before I decided on that approach, I discover another way of achieving a negative light by using IES lighting system and manually setting the IES intensity scale to negative, normally Unreal Engine doesn't let you use a negative value but it can be manually changed, with this I was able to create a realistic negative light that seems to absorbs the lights around it, but this system is unstable and performance intense, and doesn't have the 3D volumetric feeling that I want to achieve so we decided on the previous approach for this mechanic. 

​

bottom of page