Eternal

University Group Project (Year 3)
Windows
Unity
C#

View project on GitHub: 

GitHub Repository

Eternal is an action game inspired by From Software’s souls-like games and designed specifically for a casual audience while retaining a souls-like gameplay loop. Players can expect to fight a variety of enemies across several distinct levels all set in a medieval fantasy landscape using a variety of weapons, magical spells, and consumables.

 

My main responsibilities were programming the:

  • AI

  • HUD
  • Inventory system
  • Menus
  • Audio Manager

and using the Easy Save 3 Unity asset to create the game's save system.

Artificial Intelligence

Behaviour Tree

I created a basic behaviour tree to control the enemies' actions, which allowed me to quickly prototype and connect actions for the enemies, whilst supporting in-depth enemy behaviours in the final product and the ability to easily customise behaviours for new enemy types.

 

Types of behaviour tree nodes:

  • Node
  • Action
  • Selector
  • Sequence
  • Condition

Visual Sensor

Enemies can collect data about their surrounding environment using their visual sensor but only respond to seeing the player. The visual sensor is rendered as a sphere as it uses a spherical trigger collider component and has its field of view extents drawn and labelled using a custom editor script.

 

Enemy Behaviours

All enemies have several types of behaviours: idle, patrol, search for the player, surround the player, wait to attack, attack, and evade. These behaviours allow the enemies to fight the player as individuals or as a group, evade player attacks, circle the player's position, patrol predetermined paths, and search for the player. Enemies may also perform attacks in a quick sequence to create a combo while fighting.

 

Enemy Types

The game features three core types of enemies:

  • Short-range melee e.g. swords and axes
  • Long-range melee e.g. spears
  • Shielded enemies e.g. sword & shield

Short-range melee enemies are the most common and show the most basic overall behaviour. Long-range melee enemies aim to keep a set distance from the player so dodge-rolling is a good method to close the gap. Lastly, enemies with shields always have their shields raised and only present an opportunity to attack them when their attacks are parried by the player.

 

*I didn't create the dodge-roll and parry mechanics.

User Interface

HUD

Eternal's heads up display (HUD) displays: player statistics such as health, stamina, and combo counters; four quick-slots for cycling through the player's equipment; and prompts for performing actions, which change at runtime depending on the input device being used.

 

Inventory

The user interface (UI) for the player's inventory system is split into two sections: the inventory window which shows a list of icons that represent the player's collected items; and the equipment window which shows the player's equipment slots and their equipped items.

Items can be moved by clicking on them and the target destination or by using a drag & drop feature that I made. An item's name, icon, and statistics are all shown inside the inventory window whenever an item is selected. Long lists of items can be browsed using the inventory scrollbar and elements that are out of the inventory window's bounds are hidden using a mask. The inventory UI also features buttons for equipping and unequipping items and a counter for the points collected by the player.

 

UI Controller Support

I also added controller support for Xbox and PlayStation controllers to be used with the game's user interface. A highlight of this feature is seeing the 'press x key' text in the action prompts change in real-time when a change is detected in the input device being used.

 

Menus

I also programmed the main menu and pause menu.

FMod and Enemy Audio

By integrating FMod into the project I was able to create an audio manager that handles playing one-shot audio clips; managing instances of audio clips; and restarting audio clips instead of creating new ones.

Other Notable Contributions

Checkpoint & Save System

I created Eternal's checkpoint and save system by implementing the Easy Save 3 Unity asset to save our game's data.

 

Tools Programming

I created a tool that allows the user to plot and edit patrol paths for enemies. The tool was used by the designer throughout the game's levels. It used transform handles to manipulate individual patrol points, buttons to add and remove patrol points, a button to erase an enemy's patrol path, an option to create a loop between the first and last patrol point, and labels for the start and end of the patrol path. Patrol paths were rendered as opaque white lines and appeared whenever their respective enemy was selected.

 

Steam Release

I helped oversee the game's Steam release by developing the game's save system, patching bugs, building & testing the game, co-documenting our work in the form of patch notes, and co-writing/proofreading text across Eternal's Steam pages.

 

Insomnia Gaming Festival

Eternal was showcased at the 68th Insomnia Gaming Festival's indie zone by myself and my colleagues. During my time there I mainly provided support for players and resolved numerous bugs during their gameplay sessions.