top of page

Exceed

ROLE

Team Leader, AI/Gameplay Programmer

DESCRIPTION

A final year production project for Media Design School, where I teamed up with six other students. We started with a prototype, created a vertical slice and produced this game through several development stages. We participated in the Indie Showcase 2022 for playtesters and have only a few weeks left before we enter post-production. 

I implemented the core AI systems, Map generation, Reward and Dialogue menus. Additionally, I developed a Dialogue tool for one of my artists to easily add content for NPCs.

Development Time

July 2021 - June 2022

GENRE

RPG, Rogue-lite

PLATFORM

Windows PC

Enemy AI

I was in charge of developing the enemies in the game and I decided to take the finite state machine from my Silence project and redesign it. Each enemy is split up into multiple components which are in charge of communication with Unity components.

Actor_Animator

A mono behaviour component that would communicate to the animator of the enemy.

Actor_Arms

A mono behaviour component that would record attack data and cooldowns of the enemy.

Actor_Brain

A mono behaviour component that communicates with all the other actor components that are attached to this enemy. 

Actor_Legs

A mono behaviour component that would communicate with the navmesh agent and rigid body of the enemy.

Actor_Material

A mono behaviour component that would communicate the main renderer of the enemy.

Actor_UI

A mono behaviour component that would control all UI elements that are responsible for displaying the enemies' stats.

SkullSpawn.gif
Hp display2.gif

Procedural Level Design

The team had multiple revisions of the intended layout of the game and decided to cut out the long idle time by using a node style map. This map design was inspired by a mixture of Slay the Spire's map design and Hades' arena design. Scenes are created at runtime by using prefab loading before the player can see the level.
 

Nodes

Each node in this map represents a premade scriptable object, which stores the basic scene to load, the arena prefab and potential prop combinations. 

Waves

When combat nodes are selected, waves are also generated at the same time. Waves are stored as scriptable objects and have an appropriate cost associated with spawning that wave. Each wave in a combat node has a wave budget that it uses to combine waves together to create unique combat scenarios. 

Floor

This map can be subdivided into floors, which is another scriptable object that stores potential nodes and their respective probability weight of being used. Each floor has a prefered amount of nodes which is used by a builder to keep the desired map shape.

Level

This map as a whole is a scriptable object, which stores all wave information, collectable information and each floor's orientations. A builder uses this scriptable object to generate the node map, at runtime, using some rules to make sure no unusual layouts are created. 

LevelLayout.PNG

Unity Editor Tools

For development on Exceed, I developed four major Unity Editor windows and tools to speed up production. 

Level Generator

I developed a tool which would take in arena tiles prefabs, which were made by artists, to generate a dungeon-like level. While the design of the dungeons was primitive, they guaranteed no tiles would overlap. The level layout underwent multiple iterations and unfortunately, the tool was scrapped due to the team deciding on moving toward a different level layout.  

Dialogue Maker

The Narrative Director required a tool which would speed up dialogue creation, which at the time they would personally create .json files. I developed a Unity Editor window that would take in a character image, and allow for branching dialogues. I based the tool on the choose your own adventure books design, which would specify the next dialogue location when the option was pressed. I'd prefer to redesign it in the future, however, it drastically improved development time for the narrative director.

InputManager

A persistent singleton component, which I developed before production, was used to handle all input required for gameplay. It uses Unity's new input system to manage keyboard, mouse and gamepad input. Additionally, I expanded the system during production, to remember the player preferred key binds. This allowed our player to change the games' controls at run time. 

AudioManager

A persistent singleton component, which I developed before production, was used to maintain three global volume channels. These channels represented the different audio types within the game and the master volume. Multiple support scripts were also created, before and during production, to manipulate Unity's audio source component. An example of a support script was the JukeboxAudioAgent, which stored multiple background music clips and select a random one to play. Additionally, the script would fade in and fade out using a back buffer audio source. 

Dialogue editor.PNG
bottom of page