top of page


Achromatic is a first-person horror puzzle game set in a haunted carnival-themed museum in which you are trying to find your lost child, all the while being chased by a mysterious carnival monster. While in this carnival you will discover the world bending around itself as you try to navigate and find out your child's fate. Your only ally is the light, revealing hidden information and piercing the grayscale world around you with color as you make your way through the haunted environment.


Large Adaptable Enemy AI


The Opasives Behavior Tree plugin for Unity was used in order for the AI monsters to strike a balance of frightening the player and not overtly obstructing them. This allowed for increased decision-making complexity while retaining an easy-to-read format.

Some of the behavior trees that help the carousel horse exists in this balance are:

  • Player pursuit

    • Setting the navmesh destination of the player when they are heard or within the vision cone.

  • Environment search

    • Generating a list of reachable locations that the monster moves towards, scanning the surrounding area.

  • Preference towards illuminated areas

    • The player needs to have opportunities to see the monster in order to run and hide effectively, therefor the monster adjusts its pathfinding to pass through these areas while performing its other tasks.

  • Many more tasks are in development.

Monster Ai ShowOff.gif

The Mannequins have a much different set of objectives:

  • Movement outside of player vision

    • When the Mannequins are outside of the player's vision, they quickly sprint towards them, stopping movemen when seen again.

Portal shaders

With non-euclidean environments being a foundational feature, an effective portal shader was vital to its success. The player can now loop through existing areas of the game or be moved to a new location without becoming disoriented.

Portal Showoff.gif

Asynchronous Level Loading

level loDING.gif

Large environments packed with high amounts of geometry take a toll on the game's system, breaking the immersion for the player. Asynchronous level loading separates the environments into smaller chunks that can be loaded or unloaded depending on their pertinence in the current game state.

bottom of page