Back to Work
Stain: Fractured Palette
Studio After Dark · Horror

Stain: Fractured Palette

A first-person stealth-survival horror game centered around dynamic enemy behavior, procedural tension, and environmental uncertainty.

Team Size
6
Duration
Semester [4 Months]
Engine
Unity
Roles
Design Lead, Technical Design, Gameplay Systems, Environment Art

Role

Design Lead, Producer, Programmer

I served as a Design Lead and heavily contributed to gameplay system implementation, stealth-horror design, and technical gameplay iteration using Unity. I designed and implemented multiple gameplay systems including enemy patrol and chase behaviors, sound-reactive AI states, stealth movement logic, hiding mechanics, randomized gameplay events, item spawning systems, and environmental reset functionality. Throughout development, I iterated extensively on gameplay pacing, enemy readability, and tension escalation while integrating AI-assisted scripting workflows to rapidly prototype and refine mechanics. In addition to technical implementation, I contributed heavily to environmental direction, UI and style-guide development, encounter design, and the integration of sound and visibility systems to reinforce uncertainty, disorientation, and player vulnerability throughout the experience.

Gameplay

Design & Process

STAIN: Fractured Palette was designed around the idea of replayable psychological tension, where enemy behavior, environmental layout, and resource placement continuously reshape the player's experience. Much of the project's design process focused on creating uncertainty through interconnected gameplay systems while maintaining readability and atmosphere throughout repeated playthroughs.

Enemy Behavior Design

The Ghost

Designed around aggressive sound-based pursuit, the Ghost Lady pressures player movement and navigation by reacting strongly to sprinting and loud environmental interactions. The enemy's behavior encourages slower, deliberate traversal and reinforces the game's stealth-survival focus.

GDD Snippit

Behavior & AI States

The Ghost lady patrols the mansion randomly, whenever she enters an intersection her script randomly chooses a direction to go in. Running into a dead end turns her 180 degrees. When it comes to player engagement she functions on line of sight (LOS) in a 60 degree field in front of her spanning to 20 meters away. She has a far line of sight (Far LOS) and a close line of sight (Close LOS) which engages different states.

Patrol: Floats at a moderate pace (1 m/s) while roaming in straight lines throughout the hallways/rooms.

Far Line of Sight (Far LOS): Between 10 meters and 20 meters away on the furthest part of her 60 degree vision cone, any further away does not trigger. Players caught within this zone trigger the Investigate State. Triggers a viola stinger sfx.

Investigate State: She approaches the player at 1.5 m/s. If the player breaks the Far LOS, she continues to the player's last known location. Once approaching the last known location, she will stay still for 3 seconds and return to her patrol state. If the player gets spotted again within the Far LOS 10-20 meter range, it retriggers the state. Once the Ghost lady gets closer than the 10m Close LOS threshold triggers the charge up state.

Close Line of Sight (Close LOS): Between 0 meters and 9.999~ meters away in the closer half of her 60 degree vision cone. Players caught within this range trigger the Charge up state.

Charge up: Ghost lady halts for 5 seconds, plays a yelling sfx, and enters the chasing state.

Chasing State: Locks onto the player and moves at equal speed to their sprint (3 m/s). This chase state lasts 20 seconds, disappears off the map for 5 seconds and respawns on one of the enemy spawns. She then re-enters Patrol.

Hunting State: If the player sprints anywhere in the maze, she begins to move directly towards the player at 2m/s. If the player begins or is sprinting while the investigate state is already active, her speed is increased to 2m/s towards the player. If the player stops sprinting, she returns to her patrol state UNLESS she catches the player in Far or Close LOS, to which it will trigger their respective properties.

The Vampire

While the vertical slice primarily focused on the Ghost Lady encounter system, additional enemy concepts were explored to support broader gameplay variety and future expansion.

The Vampire concept focused on environmental paranoia and indirect observation, disguising itself among surrounding props and subtly repositioning throughout the environment to alter how players interpreted familiar spaces.

GDD Snippit

Behavior & AI States

Hiding State: The vampire does not patrol the maze. It spawns at predetermined but random points in the map and uses proximity to engage with the player

Camouflage: Takes the form of an environmental prop when stalking. Available props it can disguise itself as are: A Porcelain vase, a lamp, a chair, and a box.

Stalk State: If the player reaches within 15 meters radius regardless of any walls between the player and the vampire this state triggers. While the player isn't looking within their FOV, it advances (0.3 m/s) until it reaches the player within 5 meters—the range from which it can pounce.

Proximity Trigger Bounce: Approaching too closely causes the Vampire undisguise and to spring up in surprise. He waits for 2 seconds before entering the chase state.

Chase state: If the player doesn't deter the vampire, the vampire will engage the player in a 20 second pursuit (2.5 m/s)

Flee State: Upon being deterred (See player interaction) or surviving the 20 second pursuit, the vampire runs away from the player at 3 m/s and despawns after 5 seconds. After another 5 seconds, he respawns and enters the Hiding State.

Map Design

The level was first laid out as a hand-drawn floorplan defining room functions, key and escape-door placements, monster spawn zones, survival resource pickups, and one-way spawn portals. That blueprint was then translated into a fully built 3D environment with a baked NavMesh and a node graph that drives enemy patrol, chase routing, and dynamic spawning — ensuring monsters always start at the furthest reachable point from the player and can navigate the entire space believably.

Hand-drawn level blueprint with spawn logic and key placement
Top-down view of the built level with NavMesh and AI node graph

Lighting and Environment Philosophy

Lighting was intentionally restrained to preserve uncertainty and encourage cautious navigation. Darkness and limited visibility were used to reinforce tension while still maintaining enough environmental readability for player orientation and stealth gameplay.

Environmental layouts were intentionally designed around repetitive architecture and modular hallways to create disorientation and psychological discomfort while also supporting efficient production workflows and environmental consistency. See these page excerpts from the Style Guide I made for the team.

Iconography

Challenges

The greatest challenge during STAIN: Fractured Palette was designing interconnected horror systems that remained readable, unpredictable, and consistently tense across repeated playthroughs. Because enemy behaviors, item placements, and player routes were partially randomized, gameplay systems needed to support emergent encounters without becoming unfair or mechanically inconsistent. A major focus throughout development involved refining enemy AI states, stealth interactions, sound propagation, and chase behaviors to ensure each enemy maintained a distinct gameplay identity while still functioning cohesively within the larger survival loop. Additionally, environmental layout and lighting design were carefully structured to encourage disorientation and uncertainty while preserving navigational flow and gameplay readability within the mansion's intentionally repetitive architecture.

Back to Work