top of page
veiled_ones_thumbnail_alternate.png

The Veiled Ones

Game Designer (Enemy AI)

Project Overview

On this stealth-horror game, I was the Enemy AI Designer, where I:

  • Designed, iterated on, and polished 3 enemies and 5+ behaviors

  • Led the development of AI testi​ng tools; coordinated tasks between engineering, audio, and art teams to implement my AI features

The Veiled Ones is a narrative stealth-horror game where you play as Ali, a Muslim exorcist. Figure out who possessed your son and why they did it with an ancient artifact: the Looking Glass!

Features:

  • Discover a new world using a magical artifact (the Looking Glass)

  • Avoid invisible enemies known as the Jinn

  • Reveal clues about your son's possession

This project had 50+ team members and 3 total designers (including me). The game had over 2K downloads within 1 week of the Steam release.

Gameplay footage

My Contributions: Enemy AI

Vertical slice version of Normal Jinn

Vertical slice version of Normal Jinn

Normal Jinn Alerting Behavior

I designed and implemented 3 enemies and their behaviors using behavior trees, including universal and unique behaviors to each enemy type.

 

Process I used for my design work:

  1. Established design goals and constraints for enemy AI

  2. Wrote documentation and tested implementation

  3. Iterated and polished based on playtest feedback

My design goals and constraints for enemy AI:

  • Motivate players to engage in stealth gameplay

  • Discourage Looking Glass usage around enemies

  • Enemies should be mostly invisible and only the Father Jinn can be hostile

MY IMPLEMENTED FEATURES BREAKDOWN

Universal AI Behaviors

  • Perception: Sight and sound detection, Looking Glass debuff

    • Looking Glass function + debuff: Players can see invisible enemies, but they react negatively when looked at​​

  • Patrol: Walk around the house while making noise

  • Audio Feedback: Noise that enemies make will get louder and more distorted if player is detected

Enemy Types and Unique Behaviors

  • Normal Jinn: Alerts Father Jinn to player's location if player is detected

    • Top, Image: vertical slice version of Normal Jinn

    • Bottom, Video: Normal Jinn alerting behavior

  • Passive Jinn: Same as Normal Jinn, but does not patrol

  • Father Jinn: Can kill the player if they are caught

    • Searches for the player (when detected) and checks hiding spots

    • Chases after player if they are detected for too long

Design Case Study: Enemy Perception

The most significant challenge I faced on The Veiled Ones was on enemy perception. I iterated on this player detection system throughout the whole year. Here's a breakdown of the problems and the actions I took to solve them:

PROBLEM 1: VISION CONES

  • My Task: Promote stealth gameplay while preserving enemy invisibility

  • Initial Idea: Because enemies are invisible, vision cones should be circles

    • Top, Image: pre-alpha vision cone diagram

  • Situation: Players did not understand why their actions put them in danger

Actions I took:

  • Implemented 2 vision cones for enemies: a 360 degree vision cone for close ranges​ (< 3m), and 15 to 40 degree vision cones for all other ranges

  • Increased sound detection when the player sprinted to encourage stealth

PROBLEM 2: LOOKING GLASS DEBUFF

  • My Task: Discourage Looking Glass usage near enemies

  • Initial Idea: Enemies' "detection level" should directly increase when a player looks at them through the Looking Glass

  • Situation: Players did not understand why enemies were so angry, especially when they were NOT seen or heard by them

Actions I took:

  • Buffed sight and sound detection ranges for enemies when using the Looking Glass, and removed the direct "detection level" increase​

    • This is what players thought was already happening!

    • Bottom, Video: getting detected when looking at enemy through Glass

RESULTS FROM THESE ACTIONS

  • Players felt anxious, clever, and satisfied while sneaking past enemies

  • Players used the Looking Glass more sparingly

Pre-alpha vision and sound cones

Pre-alpha vision cone (purple) and sound cone (red)

Getting detected while using Looking Glass

Looking Glass subtree Miro mockup

1) Initial Looking Glass behavior mockup in Miro

All perception checks initial implementation

2) Perception checks initial implementation in engine

Final Looking Glass subtree implementation

3) Final Looking Glass subtree implemented in engine

Project Takeaways

Hiding spot check behavior I implemented

By wrestling with design challenges like the one described above during my time on The Veiled Ones, I made a few key learnings that further inform my process:

LEARNING 1: Player expectations are worth considering and designing around for non-intuitive mechanics instead of forcing a feature to work.

LEARNING 2: Sometimes, the correct solutions to a problem are the obvious ones -- always start small and simple, then add complexity if needed.

  • Video: A "hiding spot check" behavior I implemented for balance

LEARNING 3: In some cases, balancing a feature's difficulty means adjusting EVERY variable, not just the most relevant ones.

As a result of this project's work, I got a better grasp on game balance and feature iteration than before.

Additionally, by the end of the project, I gained several skills that proved useful for future projects:

SKILL 1: How to read, design, and program Behavior Trees (all engines)

  • Image: The implementation of the hiding spot check in Unity

SKILL 2: How to design features with proper intentions, and how to iterate on them while preserving those intentions to ensure cohesive design

SKILL 3: How to write design documentation for other designers, engineers, and multidisciplinary collaborators for implementation

Through gaining these new skills, I improved my technical ability (especially with game AI scripting) and enhanced my communication strategies.

Hiding spot check subtree

Hiding spot check subtree

bottom of page