A Proper Haunting

A Proper Haunting is a whimsical point-and-click narrative adventure game developed in Adventure Game Studio.

DateMar.2016 - May. 2016
RoleGame Developer
MembersDesiree Cifre, Eric Leung, Jennifer Helen Allaway, Olivia Hu, Wangshu Sun


A Proper Haunting is a whimsical point-and-click narrative adventure game, where you act as a victorian ghost named Gerald trying to “properly” spook the modern tenants out of his own house – without anything supernatural noticed.

The game was created together using Adventure Game Studio with Desiree Cifre, Eric Leung, Jennifer Helen Allaway and Olivia Hu, in a class named Narrative Game Studio at NYU Game Center, instructed by Clara Fernández-Vara.

My Role

My main role was tech lead. I scripted most of the game interactions and animated the cutscenes and character. Narrative-wise I helped in early play through design, and suggested that the family member would suspect on each other. As for design I suggested a doll house setting so that the ghost could float through walls.

The “Proper Haunting”

As said, the main character is a Victorian ghost Gerald who can’t stand the taste and lifestyle of modern tenants. His goal is to “properly” haunt them without anything supernatural being noticed, thus making the family members suspect each other, and eventually drive them out.

The gameplay is similar to a traditional point-and-click game, where you can move around, look at things, eavesdrop on people, pick up and use items on specific place.

“Verbs” of interaction

Something new is that since you are a ghost, you can float on sky and move through walls. To move through walls I suggested designing a doll-house like setting.

“Doll house” setting


My main role is tech lead in this project. The project was developed in Adventure Game Studio (AGS) with scripting language.

Firstly in AGS, I placed all art assets at the correct position of room and labeled them accordingly, as player, character, item, hotspot, and so on. The whole space is assigned as walkable area so that the ghost can float towards wherever he wants.

Then I used a set of variables to track the process of the game and adjust the dialogs accordingly. As there are three puzzles on each of three family members, a variable like “played3_3” would tell me exactly puzzle #3 on member #3 is solved.

Then I can script the events accordingly based on the game process, like Walk, LookAt, Interact, Eavesdrop, UseItem on each of the person, item or Hotspot.

Because the ghost picks up and drops stuff frequently, I also abstracted these repetitive code trunks into functions to improve code readability.


Puzzle example (fixing a chandelier, and place it where a modern painting was):

Complete playthrough: