Unity Icon

Denet.exe

8

4 weeks

Finished

A narrative-driven game bringing back memories from the early days of online gaming and virus-infected operating systems. Inspired by games such as BAROQUE and the newly re-popularized file horror genre, this game features puzzle-based mechanics in order to engage the player with an ever growing realization of the fact that something is amiss.

Main Responsibilities

  • Enemy & AI. Responsible for implementing enemy behavior, including combat and patrol paths, as well as more specialized boss mechanics centralized around a multi-tiered phase system. Enemy parameters are exposed in the Unity editor to allow designers to tweak detection range, attack cooldowns and patrol behaviour.
  • Audio. Implemented audio trigger prefabs which enables a designer to create audio zones that are either static or dependent on in-game events, such as combat music persisting until enough enemies have been eliminated.
  • Final Boss Encounter. The final boss of the game features a mix of systems that brings together Canvas alterations, an immunity system that depends on the state of enemies and objects linked to the boss, as well as size scaler used to mimic the visual effect of a beating heart. The entire boss encounter, including it's underlying systems, was packaged as a prefab in order to help designers get a clear view of the hierarchy of editable paramaters.
  • UI & HUD I worked on the UI related to one of Denet's core mechanics, the "In-Game Editor", a trigger based image-flash system used for world building, the player action bar and the password-locked file system.
  • Debug Tools To speed up testing, I implemented editor debug tools such as player teleportation and wireframe visuals for enemy aggro radius and range.
  • Release Trailer Created the release trailer featured on Itch and Youtube.

Narrative-Driven World State System

The gameplay systems in Denet.exe heavily revolve around event triggers inside the meta game which unlocks narrative progressions - which in turn, does the same for the meta game. In this video, we see how the act of colliding with an object triggers a story beat, which in turn awards the player with a new meta-game tool necessary to progress inside the meta-game.

  • Narrative beats influence the state of the world
  • Narrative state is triggered by player actions
  • Audio-queues that are dependent on the state of the world

Meta Game Editor

Throughout the player's journey inside the meta-game, obstacles of varying nature obstruct the player's path forward. Enter the "In-Game-Game Editor", a core mechanic of Denet.exe which allows the player to edit the world around them in order to progress. In this video, we see how the player uses the editor to traverse a set of obstacles.

  • Let's the player edit objects inside the game inside the game
  • Add collision to objects in the world so that you may find your footing
  • Delete or add objects in the world so that you may pass
  • Increase bounciness of objects so that you may reach a little further

Enemy AI State System

Enemy behaviour is driven by a simple state machine controlling patrol, chase and attack behaviour.

  • State transitions triggered by player detection and distance checks
  • Navigation handled through Unity NavMesh
  • Debug visualization for aggro radius
Thought Process
AI Behavior

We knew from the get-go that the enemies in this game were considered more as "filler" objects, meant to create a feeling that the meta-game was an old MMO. Because the complexity of the enemies could be considered basic, even if they were to grow in scope down the line, a Finite State Machine felt robust enough to handle the intended AI behavior of patrol, detection, attack patterns, and so on, while being flexible enough to allow for additions in behavior.

Enemy Pathfinding

When it came to navigational computation, Unity's NavMesh felt like the clear-cut choice to go for, based on all the utilities it provides you with straight out the box. Given the time constraints for the project, rolling our own A* simply wasn't feasible.

Debug Tools

Who doesn't love being able to adjust wireframes that visually represent an aggro radius, attack range, or other miscellaneous effects that make up a complex being?

Enemy AI States

Enemy State Implementations

Exposable Enemy Params

Enemy Debug Tools

Event-Driven Progression

The progression of the story and the world-building in Denet heavily rely on scripted events, reflecting changes both in the meta-game as well as the "outside" game based on player interactions in either environment. Events are the glue keeping Denet together, and they came to be a mix of wonderful, re-usable and flexible components, as well as nested debug nightmares, nudged in between very specific lines of code.

  • Password-locked clue trigger event
  • Boss phase event
  • Audio zone event
Thought Process
Password-Locked Clues

A drag and drop friendly system which spawns a screen overlay, flickering between images. The system exposes variables that let's designers decide which images are displayed, how long each image is displayed for, and the total duration of the slideshow. The system also exposes a variable that specifies whether or not this screen-flicker should be triggered via an interaction, or by entering a collision box. The system in it's entirety is packaged as a prefab to allow for quick placement.

Boss Phases

Since combat overall in Denet is more of a "filler" aspect, we had to think of a way to make the last boss encounter feel engaging without relying on particularly engaging combat mechanics. In order to do so, we decided to make an invulnerability system for the boss that depends on the player completing a set of actions.

The invulnerability system relies on a set of events being fired. Roughly summarized, the player must defeat 4 different groups of enemies. Each group of enemies are linked to a different destroyable object. These destroyable objects are in turn linked to the final boss' state of invulnerability. In order for the player to be able to destroy each object, they must first eliminate all linked enemies. Each enemy death, and each object destroyed, fires an event that upon invocation checks the state of all linked entities. If all linked entities are destroyed, the final boss will initiate it's animation sequence and become receptive to player damage.

Audio Triggers

What sound should be played, when, how, for how long, etc, was an ongoing topic of discussion during development. I generally like to enable designers with drag and drop utilities, and the event triggers for sound was no different. As iteration went on, different needs and wants surfaced and the audio system ended up being split in half.

Both systems share the fact that they utilize collision boxes, but the use case for each systems collision boxes are different. One of the systems use two collision areas as a way to transition between audio clips based on the position of the player. The other audio system uses a single box trigger which represents the audio zone, while also being paired with a set of linked enemies in order to trigger a specific battle-themed audio clip based on the state of the world.

Flicker Trigger

Linked Enemy Manager

Audio Trigger