top of page

Levi's Bedtime Story

Levi's Bedtime Story won the Game of the Year - People's Choice award at the Rookie Awards 2024. Check out their entry here.


Levi's Bedtime Story is a VR Horror game created by a team of students at SCAD. I implemented all audio elements in the game except for the music. I've selected a couple examples to showcase here.

The MetaSound below plays when a paintbrush prop makes contact with a specified area on the floor to begin painting and stops when the brush is lifted from the floor. As such the sound needed to have a start and stop trigger while being able to be continuously looped. One sound file was used and the start and stop point randomly selected to reduce the obviousness of the loop. Two wave players were needed so they could be cross-faded from one to the other when the loop point triggers.
This next MetaSound is for several different creepy whispered lines that play on certain gameplay events. I was provided recordings of multiple voice actors and with varying amounts of reverb. Rather than composite the desired takes together in a DAW, I decided to keep the files separate so that they could be panned to separate channels in game and have separate effects applied as well.
There are three different recordings used for each line of dialogue that all play at the same time. To ensure the same line is played from each source, I created three arrays of sound assets where each array contains all the sound files from each voice actor arranged in the same order. This way, I can pass an ArrayIndex value to the MetaSound from a blueprint that dynamically controls which line is being played.

The gameplay event that triggers a whisper to play is when the player holds a lantern up to one of several portraits hanging around the level.
A line trace is performed from the lantern actor that detects if any object it contacts has a tag denoting that it is a portrait. While this criteria is met, the Play Whisper event will be periodically invoked.
The player is tasked with solving six different puzzles and each whisper is a clue for solving one of the puzzles. Since the puzzles must be completed in order, the Play Whisper event first queries the actor where puzzle completion status is stored and then sets minimum and maximum index values for the lines to be played. This works since the lines are intentionally arranged by which puzzle they pertain to, so that indices 0 through 3 are for the first puzzle, indices 4 through 6 are for the second, and so on.

The index is incremented by 1 each time and is checked to stay within the minimum and maximum range so the result is a circular pattern where one line always follows another. When a puzzle is solved, a check at the start of Sequence 1 will catch that the current index value is no longer within the minimum and maximum and will set the current index to the new minimum.

© 2024 by Colin Gordon. All rights reserved.

  • Vimeo
bottom of page