top of page

Local co-op survival in a hotel, saving Guest NPCs from Monster NPCs, while roaming the hotel, unlocking new rooms, weapons and player abilites.

Role on Room 1801

Programmer

24 Weeks • 10-Person Team

3 Programmers • 2 Designers • 3 Artists • 2 Musicians

Led the technical and gameplay developed of Room 1801 for 4 other programmers, and coordinated workflow across programming, design and art. Defined MVP and delivered projects MVP scope while remaining hands-on with gameplay and system design with AI, optimisation, AI director, and system design. Directed art requirements and reviewed teamwork weekly to maintain technical scope

07_03_26_19-50.gif

AI Perception

Developed a custom perception system capable of detecting both Pawns and other Actor types, with a configurable tick rate based on the required perception frequency.

Potential targets are progressively filtered through increasingly expensive checks:

  1. Overlapping Actors

  2. Perception Tags

  3. Field of View

  4. Line of Sight

  5. Distance

  6. Priority

​

Cheap filtering operations are performed first, reducing the number of actors reaching more expensive line-of-sight checks and minimising unnecessary perception overhead.

Gameplay AI Director

Developed a central AI Director to dynamically control enemy activity based on the current state of the environment.

The Director tracks factors including:

  • Time since a dead body was discovered

  • Environmental safety multiplier

  • Time since the player last seen their teammate

  • Time since a monster was last seen

These values are weighted to determine the current level of AI activity, allowing enemy encounters to respond dynamically to what has recently happened in the level.

29_10_25_13-05.gif

Investigation System

Developed a node-based investigation system to give enemies a structured way to search for the player after losing line of sight. When the player is lost, their last known location is mapped to the nearest investigation node, allowing the AI Behaviour Tree to traverse connected nodes and systematically search the surrounding area. This enabled enemies to continue investigating through connected rooms and corridors rather than immediately abandoning their search when the player left their line of sight.

​

Developed a node-based investigation system to give enemies a structured way to search for players location acting losing line of sight

Custom Navigation System

Developed a custom navigation node system to provide Guests, Monsters, Hazards, and the AI Director with a shared representation of the hotel.

The system iteratively evaluates connected nodes, selecting the furthest unprocessed node, processing it, and removing it from the active list before continuing to the next furthest node.

This provided a consistent method for spatial traversal, area processing, and coordinated gameplay events across multiple independent systems.

Lighting Rework

Identified Unreal Engine 5 Lumen as a major rendering bottleneck, consuming approximately 16ms per frame. Profiled the lighting pipeline and reworked the hotel's lighting architecture around GPU Lightmass and baked lighting, using volume-based light selection and optimised Virtual Shadow Maps configuration to reduce unnecessary dynamic lighting calculations.

Implemented custom light culling throughout the hotel to restrict dynamic lights to relevant areas while preserving the intended visual style.

 

Reduced the overall lighting cost from approximately 16ms to 4.3ms per frame, freeing over 11ms of frame time for other gameplay and rendering systems.

Enemy AI

02_11_25_13-58.gif

Spider

Developed wall and ceiling traversal with contextual detection and pursuit behaviour, allowing the Spider to navigate unconventional surfaces while maintaining player tracking.

Wormshark​

Developed a custom underground navigation system for burrowing enemies, using curved movement paths to dynamically navigate beneath the environment. Implemented state-driven emergence, pursuit, and attack behaviours, allowing enemies to transition between subterranean traversal and surface combat while maintaining continuous movement.

Shadowman

Developed state-driven stalking and kidnapping behaviours with direct interaction with player state.

Integrated AI Director sanity values with client-side illusion spawning, allowing hallucinations and other psychological effects to be dynamically triggered based on the player's current sanity.

This created a reactive gameplay system where AI behaviour and player perception were driven by shared gameplay state.

HLSL Shader

Created a dynamic vertex displacement effect around an enemy, using triplanar mapping to maintain seamless deformation across the surface. The shader uses the enemy's world position to drive the displacement, allowing the effect to follow the enemy in real time.

14_11_25_13-29.gif

Control Rig

Custom Control Rig setup to dynamically place the Spider's eight legs across walls, ceilings, and floors. Each leg conforms to the surface orientation, allowing the Spider to traverse and remain attached to surfaces while moving across changing orientations.

Procedural Mesh

Procedurally generated mesh plane used by the AI developed to spawn webs have the webs conform to the walls. Created with a collision surface allowing players to contact the mesh to trigger the spiders AI investigation mode.

22_10_25_22-44.gif

Look-at animation

Implemented dynamic target evaluation for guests and monsters, driving procedural look-at behaviour through Animation Blueprints. Characters automatically orient toward AI-selected targets and relevant objects.

Haunted Paintings

Implemented a pocket-dimension system using 2D Scene Capture to render a room within paintings. Developed dynamic object interaction allowing players to retrieve objects from the captured environment, with changes inside the painting synchronising with the dining hall.

​

Implemented distance-based physics optimisation, disabling object simulation when the painting is outside the player's interaction range.

Project Files avalible​​

GitHub Repository

Contact me!

bottom of page