P2 Writeup: Keeper’s Memoriam

Created by Isabelle Lee, Jonathan Kula, Frankie Sperka,  Annabelle Wang, Anthony Xie

Keeper’s Memoriam: https://keepers-memoriam.vercel.app/

Artist Statement 

Keeper’s Memoriam is a digital 2D puzzle game that immerses the player in a contemplative, melancholic world with an air of intrigue and mystery. The game centers around a ghost, who knows little about themselves save for their title of “Keeper”. Through a series of puzzles and narrative fragments, we hope to inspire a calm sense of wonder and quiet contemplation within the player. The puzzles encourage lateral thinking while increasing in difficulty. We aim for the player to feel a deep-seated sense of satisfaction when solving these challenges. We want the serenity of the music and visuals paired with the melancholic, mysterious narrative to immerse the player in a rich contemplative experience.

Overall, we designed Keeper’s Memoriam for players to find solace and satisfaction in exploration, contemplation, and mystery.

Game Overview

Plot Overview

You are a ghost. You don’t know where you came from, and you don’t know who you were before. You are called a Keeper, a menial servant to higher powers in the Underworld. Your job is to collect the lost memories of certain souls into journals to aid in their judgment processes which decide where they’ll stay forever in the afterlife. That is, until you accidentally fall into an Abyss leading to the very bottom of the Underworld the day before your critical case file is due for trial. The journal you possessed is now split into pieces, and it’s up to you to get back to the trial tomorrow with the complete journal. You have to find your way back using bits of past memories left behind… and maybe you’ll remember some of your own life along the way. 

Target Audience

We initially wanted our target audience to be more mature. The first few checkpoints of our game included darker themes like mental health and trauma, and we wanted to emulate some of our favorite personal experiences playing games like Omori and Inscryption. Later, we aimed our game at a more general audience with a less mature narrative that instead explored themes around creativity, exploration, and innocence. In the matrix of game players, we wanted to appeal to explorers (huge space, curiosity) and achievers (puzzle mastery). 

Game Mechanics

Players navigate using their W/A/S/D or arrow keys on the keyboard and can pick up objects by passing through them. They can also press “tab” to access the inventory. In the inventory’s case folder, the player can drag notes around using their mouse cursor. 

After the player falls in the hole, we introduce the main mechanic of our game: object manifestation. Our early brainstorm centered around becoming an adult and its tangential themes, like the loss of imagination and creativity. We imagined a mechanic that would encourage player creativity to solve lateral puzzles, and object manifestation seemed like a perfect motivator. To actually manifest an object, the player has to click on a stencil to attach it to their cursor, and then click on the relevant text in the notes. This results in a “poof” animation with the desired objects falling to the ground in the player’s environment. 

A gif of object manifestation using a stencil and a note.

Gameplay Loop

A diagram of a loop between three images. The leftmost image is of the ghost entering the room, the bottommost image is of the ghost collecting paper scrapes and stencils for manifestation, and the rightmost image is of the ghost actually manifesting the desired objects for NPCs.

Our core gameplay loop.   

Core Concepts

Slice vs Whole

We created a game slice since we imagined a much larger narrative than what we’d be able to complete in these short four weeks. Our intention with this game slice is to show puzzles that would be representative of challenges found in the full game. We also wanted to create a representative mood for the full game, which is why we invested in dialogue creation, visual design, and sound design. Our slice is narratively incomplete, but we planned for enough narrative now to build on later. The player would have a better understanding of the world if playing the full game.

Game Map

This is a visual map of our game slice. There are two rows of images, with two images in the top row and four images in the bottom row. The two images describe the player's journey through their office and into the main cityscape, while the four images are each dedicated to a puzzle scene. Each image is a screenshot of the ghost in the respective scene.

Map of how the player progresses through the slice’s city and hole levels.

Narrative Architecture and Use of Space 

Our game is a combination of several types of narrative architecture, but it most embodies an enacted narrative, which emphasizes progression through space as the dominant means of exploring narrative. The player explores the game space through the act of solving puzzles, and the player is able to explore the narrative through other elements like interstitial text between scenes and dialogue with NPCs. One could consider these texts and bits of dialogue micro-narratives for the player to enact for their own spatial journey through the game.

Formal Elements

This game is single-player with the objective of climbing up through the Abyss before the next day’s trial. A sub-objective of climbing through the Abyss is solving puzzles — framed as fulfilling requests made by spirit doors and strange eyeballs. A secondary objective of the game is learning more about the ghost’s back story and the world’s lore. This secondary objective is supported by our inventory which is able to keep notes nested within the manilla case file for the player to read. The outcome of solving puzzles is unlocking more information about themselves, their job, and the world they’re living in through character dialogue and notes. The game’s main mechanic is the only rule in the game, and the mechanic is bound to each scene’s environment. 

Types of fun

Our game appeals to the core aesthetics of challenge, sensation, and fantasy

Challenge. We planned for our puzzles to increase in difficulty as the game progresses. The player is first able to manifest objects from their inventory, and eventually, they learn to manifest objects from their natural environment through more and more obstacles. 

Sensation. We invested in visual and auditory stimulation to fulfill the sensation aesthetic. We hoped the visual aesthetic would intrigue the player and the music would intrigue them even further. 

Fantasy. We wanted the player to know that nothing is as it seems off the bat — we let doors talk, eyeball henchmen make snarky comments, and also, you’re playing as a ghost scared of a looming higher power named the Judge. 

Design Elements

Inspiration

Our first brainstorm and original concept document can be found here and here. We were inspired by a variety of games we played and loved. In particular, we drew from aesthetic, musical, narrative, and mechanical components from games like Hollow Knight, Omori, Inscryption, and Undertale

Tone

Contemplative. We wanted the player to wonder about the character’s identity, purpose, and story, and gradually achieve more clarity as they progress through the game as they collect memories and interact with NPCs. 

Eerie. We wanted the player to feel a certain kind of unsettled dissonance that forces them to reconcile and consider elements of our fragmentary narrative in a personal, perhaps vulnerable way. 

Melancholic. We wanted an underlying (but not overwhelming) sense of melancholy throughout the game. We aimed for more complexity within this emotion – remnants of remembered grief, foggy as if within a dream, coupled with comforting sentimentality. 

World Design 

There are two distinct settings in Keeper’s Memoriam – the Underworld and the Abyss. We went for a general aesthetic of hyper-realistic assets in the background juxtaposed against the hand-drawn, pixel graphic appearance of the main sprite and NPCs. We aimed for this discrepancy in aesthetic to bring focus to the main sprite, while providing an unnerving, dream-like sense of familiarity with the surrounding scene. 

This image is of our main character the ghost surrounded by the city. Everything is in grayscale, and all the buildings give off an old-timey feel. There is a silhouette of the cityscape behind the old-timey buildings in frame.Grayscale cityscape with a silhouette backdrop.

This is a screenshot of our game where the ghost approaches a gray door with no handle to open it. The background is grayscale and the terrain is uneven. There are twiggy trees in the background.

Realistic dead forest scene with hand-drawn assets in the foreground.

Puzzle Level Design 

The home of keepers is a purgatory of sorts–a space in between this life and the next. As such the puzzles found here draw inspiration from dreams where lateral thinking prevails. After falling into the abyss, many doors block the path of the player with puzzles as they make their way back up to the surface before they present their case to the judge. Keepers are collectors of information on souls which is presented at judgment day. Because of this keepers are able to manifest objects from the notes they collect in order to better inspect and collect the memories of souls.  

In designing these puzzles, we leveraged this skill of manifestation using stencils. We wanted to prioritize worldly immersion by having players pull objects out of words and even make their own words in the environment to emphasize the dreamlike nature of this world. This lateral thinking also allows players to leverage their creativity in order to achieve the satisfaction of solving complex puzzles, and this sense of delight is something we wanted to leverage in our gameplay. 

Mechanically, the scattering of puzzles allows for smooth pacing of the player through the game. Successive puzzles introduce new mechanics and increase in difficulty to both keep the player interested and to keep up with their improving skill level. Some of these additional mechanics include combining words in notes and using objects in the game to create new words. In completing each puzzle, players also uncover more of the world by getting to know the spirits that inhabit this forgotten place. Interacting with the doors reveals facts about their past life, and players help these spirits by solving puzzles, which both appeals to the player’s sense of empathy and their desire to move forward in this foreign space.

Sprite Design 

In fitting with our themes of melancholy and forgotten memories, we wanted to go for a more sketchy, hand-drawn style for our characters and non-background elements. We were inspired heavily by pastel drawings, hand-drawn animations, Something from OMORI, and the boss battles from Chicory.

A sideways eye with three black points facing towards the ground. The middle point is the longest.

Character inspiration from Omori.

A cartoonish eyeball with long and distinct eyelashes seemingly facing off against a small character in the left most corner. The colors are inverted. The background of the scene is black with purple symbols. Character inspiration from Chicory. 

Contrasting against our more patchwork, realistic visual style of our backgrounds, our sprites feel like drawings come to life, and they similarly evoke a feeling of simultaneous whimsicalness and melancholy. The very first sprite that we made was that of the ghost character, and then we matched the other characters, like our doors and guards, to be visually and thematically similar.

A cartoonish sketch of a ghost with two eyes. The text "sorry..." is above the ghost.

Our MC, a sorry ghost.

Sound Design

We wanted to use sound to further immerse the player into the world and enhance the melancholic, contemplative, and serene undertones of the game. We also use music as a tool to separate distinct scenes or indicate continuity between scenes. We also incorporated sound effects to enhance player interaction with objects in the game.

Prologue and credits theme. We use a simple, lone piano melody in a minor key to set the melancholic tone for the game, and brings the player back full-circle at the end during the credits scene.

 

Office soundscape. We used ambient chords accompanied by white noise and soft clock ticking mimic the monotony of office life.

 

City soundscape. The clock ticking persists into this scene from the office, serving as a sound anchor. A slow chromatic descent with a spacey, oscillating synthesizer, using diminished and dissonant chords gives an ominous air of foreboding. We spliced in industrial sounds of metallic parts clanking and whirring to create a more convincing city-like soundscape and add texture to the soundtrack. 

 

Abyss theme. This was the most elaborate of the sound design choices made in the game, as the player spends the bulk of their time in the Abyss region. We separated the theme into four tracks corresponding to the four puzzle levels, and layered them on top of each other as the player progresses through the levels; in this way, it serves as an auditory parallel to the game’s increasing complexity. The first level uses a simple piano melody and accompaniment, the second level adds a swelling synth overhead, the third fills in the lower frequencies with cello and brings in the vocal harmony, and the final level brings in the main vocal melody.

A view of the different track layers.

We used delay, echo, and (very generous amounts of) reverb to give the illusion of space and breathiness, and a tremolo filter to oscillate the vocal tracks. This track is meant to convey the spirit-like, ethereal, and contemplative aura of the Abyss.

 

Sound effects. We used Foley techniques to create sound effects for papers fluttering, interacting with stencils, and acquiring items. We pulled free sounds online and refined them for the folder opening and closing, mouse button clicks, and doors opening. We wanted to give the player auditory feedback and satisfaction when interacting with different objects in the world.

Game Walkthrough

See one of our members walkthrough the game right here! https://www.youtube.com/watch?v=F4dOL9eb58o&ab_channel=AnthonyCXie

You can play our game online right here! https://keepers-memoriam.vercel.app/

Playtesting Documentation

We conducted 14 playtests in total from class, and countless others with our friends and amongst ourselves. Written below are the insights we found and the significant changes we made. For the sake of time and space, we only discuss major checkpoints and edits. See the Appendix for raw playtest notes and videos.

Playtest 1

Narrative: You are a spirit. You awaken surrounded by other spirits, wandering about with no intentions to do anything or go anywhere. You do not know who you are nor why you are here in the Forest, but you know you have a goal that the others do not— to collect the pieces of the human you are tied to in the Real World. As you move through the Forest, you find soul shards — pieces of memory from the human you are tethered to in the Real World. Picking these soul shards up will burden and transport you into the Abyss where you must solve a memory-themed puzzle to cleanse the shard and thus the traumatic memory for your human.

In our first playtest, we wanted to nail down the stylistic art and concept of the game using a few scenes in Unity. Our initial game map of the game included contrasting Forest/Abyss realms that the player would alternate between— the Forest was kinder and the Abyss was more menacing in tone. Our main objective for this playtest was to see how (and what) players vibed with our game’s tone and music soundtrack, and if they were able to understand the object manifestation mechanic. At the time, the main mechanic was fairly simple — players only had to click on the word “key” in the note to manifest it (and the word was larger than the rest). 

A man in a gray cap and gray shirt on a laptop, presumably playing a game.

One of our playtesters playing the game!

What worked. 

  •  Aesthetic style and ambience seemed to resonate strongly 
  • Playtesters enjoyed the simple inventory opening animation, the background music, and the overall look of the background environment

What didn’t work. 

  • Narrative did not seem clear to any playtester and was not made clear through actual gameplay
  • Attempt to immerse the player in the environment failed — we created a large space with no real actions so that the player could just walk through. However, players seemed confused after around 10 seconds of walking and would turn to us to make sure nothing was wrong
  • Initial puzzle setup did not work out as smoothly as we expected it to — clicking on the word “key” in the note did not click intuitively for most players, especially without any hint system
    • Dialogue with the door NPC also seemed to compound this issue, since it indicated that the player needed to find something as opposed to manifest the object on their own

Changes and future directions. 

  • Scrap Forest/Abyss realms to shift from allegorical embedded narrative to another narrative with a more direct goal
  • Shorten walking time, made environments more concise 
  • Clarify object manifestation mechanic and align it with our new narrative goal

Playtest 2

Narrative: You are a ghost. You don’t know where you came from, and you don’t know who you were before. You are called a Keeper, a menial servant to those above you. You only know the work given to you. Every day, you collect lost memories of certain souls to aid in their judging processes (all put together in very special manila folders) and throw away judged folders in the underworld’s Abyss. You’re working on a critical case due the next day, but the case folder flies from your grasp towards the Abyss. You fall in. What now?

In our second playtest, we wanted to see if our new narrative came across in the gameplay.  Along with this, we decided to change the theme from a focus on trauma and healing to one that centers around memories – something that would better align with our vision for the mechanic of object manifestation. The guiding question for our narrative moving forward was “where do things go when they are forgotten?”. We had not quite yet fleshed out the new object manifestation mechanic, which now included combining a stencil and note to manifest objects, so we were unable to test that during this playtest. 

A man wearing headphones and an orange shirt with one hand on the keyboard of a laptop. He is playing a game on the laptop.

Another one of our playtesters playing the game!

What worked.

  • The initial tone-setting of mystery worked well, leaving players intrigued and wanting to explore more of the world
  • Animations were dynamic and fun, music and visuals were polished, and camera work was crisp

What didn’t work.

  • Confused about main character’s purpose and what kind of world they were in
  • Thought the controls for interacting and viewing the inventory were not intuitive due to unclear instructions in the dialogue instructions

Changes.

  • Included a more clearly-stated goal of collecting notes in a journal, instead of collecting journal pieces
  • Added interstitial text between scenes and made dialogue more clear to make narrative more obvious and indicate to the player what their role was (Keeper preparing for a court case) and what abilities they possessed (object manifestation)

Final Playtest

Narrative: Same as Playtest 2, except now each file is not of many papers, but of a single composed journal. The journal splits into pieces when you fall into the Abyss, and it’s up to you to put it back together before tomorrow. You meet strange doors that seem to embody the personality of past spirits and have to fulfill their requests in order to continue forward.

In our final class playtest, we wanted to test our new mechanic with our new narrative with playtesters to see how intuitive it was. We saw that our old mechanic created a number of logical inconsistencies in the universe. Playtesters were confused and underwhelmed. Why was it only possible for a single object to be manifested from the note? Instead, we added a new component: a stencil, obtainable from NPC dialogue, that was now required to use on a word in a note or in the environment. Puzzles would now focus less on figuring out which word needed to be used, and more on finding unique and clever ways to discover that word in the notes they received or within the environment, incentivizing out-of-the-box thinking and exploration.

A man wearing a gray shirt playing a game on a laptop. The screen is white with a cartoon clock and desk.

Last photo of one of our most loyal playtesters! 

What worked.

  • Narrative details was much easier to understand, yet players were left intrigued as to where the story would go next
  • Most players were able to learn the mechanics and “routine” of the game after the first two puzzle levels
  • Visuals, animations, and music were well-received

What didn’t work.

  • Switching between point-and-click controls (interacting with objects and items) and the WASD keys (moving) was not intuitive to players
  • Players found themselves stuck, usually in the second (sunshine) puzzle because there was no hint system or previous prompting on placing notes together to form words
  • Players were confused about items and stencils being used outside the inventory
  • Inventory usage was inconsistent which led to some confusion as to what action would be needed to solve a puzzle (some puzzles required items to be used in the environment while others only required items being found in the inventory)
  • Bug where clicking on inventory in front of a background element would make the background element the inventory’s background

Changes.

  • Solved technical inventory-related issues so that feedback on clicking and puzzle solutions were far more consistent
  • Small changes to a few puzzles to introduce and reinforce the mechanic of object manifestation in the environment earlier on
  • Dialogue changes to better reinforce certain concepts and to better fit in thematically with the rest of the characters

Code Organization & Implementation Details

Overview

Keeper’s Memoriam was created from scratch using the Unity Game Engine, targeting WebGL so it can be played by anyone with a computer on the web! We decided to use Unity because we were all fairly familiar with it, and Unity is flexible enough to allow us to implement all the mechanics we need without needing to resort to certain hacky workarounds (as is often the experience of developers we’ve talked to using tools like RPG Maker, for instance). 

You can check out the code for Keeper’s Memoriam here: https://github.com/the-forest-spirits/keepers-memoriam

At a high level, our code is structured in three parts:

  • Assets/_Features contains all of our scripts, sound effects, textures/sprites, animations, etc for each of our individual mechanics, in addition to recognizable and important game-level features/affordances (for example, matching the camera movement to the player or the parallax of the trees and city behind the player). We highlight a couple of important ones below:
    • Camera Focus – Noted by some of our playtesters, this feature allows the camera to easily zoom into and out from important focus points (for example, the Soul Processing Exchange Board in the prologue), drawing the user’s attention to objects seamlessly.
    • Dialogue – Discussed more below, this implements our data-driven Talker-Branch system that allows us to flexibly write branching dialogue using only the Unity editor and GameObjects in the scene as input.
    • Inventory and Stencils and Manifestation – This is the meat of our puzzling, and also discussed more below! This implements the inventory items and stencils, their placement, and lock/unlocking.
    • Layered Music – Implements the way our music layers on as the user progresses through the different levels.
    • Mouse – Implements all the mouse logic, including clicking, dragging, managing objects attached to the mouse, and generally communicating what’s going on between disparate game objects.
  • Assets/_Scenes contains all of our scripts, sound effects, textures/sprites, animations, etc for individual scenes– i.e. all our scene-specific logic, as well as the scenes themselves.
  • Assets/_General is a miscellaneous folder that contains scripts, level music, placeholder textures/sprites and reused/recycled textures/sprites, etc. that are generally shared across many features and scenes. It also contains some base-level helpers and utilities used throughout the game.

The structure above makes finding the relevant assets when working within and building a scene extremely reliable and quick; and forces features to be isolated, as much as possible avoiding the “code spaghetti” problem where dependencies become circular and entangled across features. 

In general, our approach to the code for Keeper’s Memoriam was to create data-driven components that are fleshed out and connected in the editor. This means that we made ample use of UnityEvent<T> fields and many small components that could be composed together– this (A) helps keep the code itself untangled, (B) avoids hard dependencies, which increases BOTH the reusability AND flexibility of the code, and (C) allows us to build up the interactions within the Unity Editor itself, making iteration rapid and safe (since the maximum area of effect is within a single object or scene, rather than for every object that uses that script). For similar reasons, we opted to use Unity’s new Input System, which allows us to define a set of inputs that map to a set of more abstract “actions”– this made it extremely easy for us to remap controls to different buttons as a result of playtesting without needing to reach deeply into the code.

Key Components

Dialogue System

Our dialogue system is itself designed in two (and a half) major parts:

The Talker component is added to doors and eye creatures (and anyone else who can produce dialogue!) – it has functions (in particular, OnInteract) that are invoked by other components (e.g. MouseEvents, below) which trigger dialogue to appear, move on, and disappear. All the hard work of showing dialogue on the screen and managing its interactions happens here; meanwhile, which exact piece of dialogue ends up getting displayed is controlled by Branch, discussed below!

The Branch (and in fact, many various kinds of Branches) are used to control the flow of dialogue in a data-driven manner. This means that all the dialogue can be flexibly implemented within the editor itself, allowing us to iterate on and edit which dialogue is displayed, move pieces of dialogue around, etc. extremely easily rather than modifying a bunch of scripts/code/etc in order to do that. Branch itself is an abstract class, and we have many different branches to condition dialogue off of certain attributes, such as whether or not a player has unlocked an item or reached a certain goal.

Finally, the Conversation component (which is itself a Branch, so it can be used anywhere!) implements the actual dialogue that’s displayed by the game.

Mouse System: Inventory, Stencils, & Manifestation

While Unity does provide a baked-in mouse system that allows GameObjects to be notified if they are clicked on, we opted to write our own from scratch for two reasons: (1) we needed to be able to drag elements, and (2) we needed to be able to attach objects to the mouse cursor, as visible when you click a Stencil in game. This was pretty challenging to get right as there are several edge cases depending on what the user does with the mouse (for example, what happens if you click one element, drag over another, and then release? Who gets told the mouse went up? etc); however, the challenge was worth it! This enabled us to quickly iterate on our mouse-based mechanics, which became an increasingly important part of our game’s set of affordances as we pivoted the kinds of mechanics and puzzles we implemented.

Game Playability 

Onboarding

We set up our first level with a bit more hand-holding. Because our main mechanic is not common, we wanted to make sure the player had at least some grasp of what the mechanic was before moving on to the next level. The first level is set in the hole after the player falls in. When the user had picked up the necessary materials and opened their inventory, we added cursor hints animations to lead them to first click on the folder and secondly click on the relevant word (“handle”) on the sole paper scrap. The player cannot leave this first scene until they finish the puzzle.

A screenshot of the game's inventory. The word Items is to the left with three slots, presumably for items the player acquires. There is an open manilla folder to its right with a single note. At the bottom of the inventory is the word "stencils" and the word "HANDLE" highlighted in black.

Hint circle animation indicating where the player should click.

Difficulty Curve and Target Audience

We didn’t want to make the puzzles too easy, since we wanted to challenge our target players, but we didn’t want to leave them in the dust either. Since we knew that this difficulty curve was not the most intuitive mechanic, we spent a lot of time designing the puzzles so that each puzzle would intuitively build off the last. We introduced new puzzles slowly while trying to give users enough time to familiarize themselves with the last use of the mechanic.

Hint System

To prime players with the idea of clicking on words to move forward in the game, we added interstitial text between scenes where the user would have to click on an underlined word to proceed. If the user did not realize this, we added a cursor animation after 10 seconds to prompt them. This proved to be a good thing during playtesting as players were easily able to acquire stencils. However, we did see in our final playtest that we needed to add a similar hint system for combining stencils and notes to manifest objects alongside the cursor hint animations. 

Cursor hint for underlined words.

We also made it very clear what the goal of each puzzle was so that the player would spend less time figuring out what the puzzle was, and more time trying to solve the puzzle. For example,  one childish door says that “it’s so dark” and that they want “sunshine”. Upon collecting the stencil or the item, dialogue with NPCs may change to reflect more hints like where to put certain objects in the environment.

Team Takeaways

One of the biggest takeaways from this quarter was learning to let go of ideas that we individually felt strongly about. Our entire team had so many incredible ideas that were simply outside the scope of these past 5 weeks. Combined with our excitement and passion for the project, this meant we were often expanding and flaring and deliberating far more than we might have needed to. While many of our best ideas did come from these ideation sessions, keeping our scoping tighter and our pacing of the work more in check would have benefited us in the long run. 

Another important takeaway was that high levels of specialization allowed us to concurrently work on multiple moving parts of the project. Although it would have been ideal to have more overlap between roles for learning purposes, we found that our most efficient work was done when one person took charge of a specific area (e.g. coding and implementation, narrative outline, asset design, sound design). We had many memorable moments of awe and excitement when our respective parts came together. 

Overall, we had an amazing time working together on this slice of a project. Both narrative and technical pivots were made, yet we made it through to the end. Thanks to everyone who playtested, and we’ll be thinking about future plans for Keeper’s Memoriam.

Appendix

Playtesting notes

Playtesting videos

About the author

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.