An audio-only spacial navigation game
The Maze of Eternal Darkness is a game played using only audio, arranged for a 4.1 surround sound system. It is designed to be played within a digital audio workspace, and was composed as the course final for MUSI 26718: Approaches to Electronic Music. Its unique structure comes from an adherence to given parameters in an otherwise very open-ended project. Our prompt was to compose a piece at least 5 minutes in length, using 4.1 surround sound; when finished, the compositions would be compiled into Reaper (this professor's DAW of choice) and presented to the class. Thus, in terms of project type we were given complete creative freedom, but our restrictions were that our project needed to use 4.1 surround sound, be over 5 minutes, and be able to be presented in Reaper.
To say the quiet part out loud, this assignment was not intended to support something interactive, but working around these constraints was an amazingly interesting challenge for me. How could I create something fun and interesting within such tight parameters? The spaciality of it was really fascinating to me, and so I began to think about the idea of navigating a maze in complete darkness. I needed to work out one massive kink before I designed, further though... how would the player play?
I got to work sketching, pretty quickly realizing a major truth that would shape the project. When moving from space to space in the maze, if the walls were simple lines without any depth to them, how would the player know to not move through a wall? Picturing a game where players are blindly moving from one space to another, it would be very easy to just phase through a wall and end up on the other side without realizing it. Therefore, then, walls needed to have depth to actually be useful boundaries.
My first halfhearted maze sketch
My second maze sketch
In my second attempt, I drew out a maze made up of cells; some of those cells were then filled in to create walls. This solved the problem of walls, but inherently caused a lot more space to be taken up by walls. I thought that this maze, while better, was uninteresting. Additionally, I still needed to figure out exactly how the player would even navigate through the maze.
I thought that with 4.1 surround sound and four directions within the maze grid, each speaker could represent one direction of audio, and thus when all four tracks were played simultaneously, each direction would be represented.
With the role of each individual speaker settled, next it was finally time for me to figure out exactly how each cell would be represented; after all, four audio tracks at 5+ minutes of length each isn't exactly obvious for a way to express a grid. I struggled with this for a bit, but realized that I needed some representation for my X axis and my Y axis, and with that I should be able to pinpoint a specific cell. I ultimately decided to use the minute marker as the Y axis (such that each row up the grid was represented by a new minute) while the position along the X axis would be determined by a timeframe within that minute. I decided that because I wanted a bigger grid, I would upscale from 6x6 to 8x8, meaning that the tracks would be 8 minutes long and each timeframe along the minute would be 7.5 seconds long.
The speaker setup
Finally, with all of this context, I could decide what I wanted to actually do with the audio. In order to navigate the maze, the player would have a "device" that would send out a ping searching for walls, which would travel out and then return after making contact with a wall. The further away a wall was, the longer the ping would take to return, thus signalling to the player that there was more space to travel in that direction, essentially allowing the player to traverse the maze using echolocation. Logistically, then, I worked out that I wanted a time buffer between each 7.5 second window, so I reduced my time for each cell down to 6 seconds (the buffer silence filling the other 1.5 seconds). Then, I determined that the ping would travel one cell every 0.5 seconds, and would go out, hit a wall, then travel back before the return ping was heard. This meant that within 6 seconds I had twelve 0.5-second intervals to work with, meaning that at any given point, the player could not be more than 6 cells away from a wall in any direction. While it was still technically a new restriction, this felt incredibly reasonable to me given that I had decided on an 8x8 grid, and a winding maze was unlikely to have any singular corridor that was seven or more squares long.
With this structure, the "controls" became clear. Per the restriction that the project must be presented in Reaper, the only control they would have is where in the track is being heard. Thus, players needed to be able to navigate through the maze by only clicking through different points in the timeline. Now, while this wasn't the cleanest or most polished control scheme, I thought it would suffice given our restrictions. I determined that traveling north and south would have the player jump up or down a minute in the timeline, while moving left and right would have the player click forward or backward 7.5 seconds. That gives four-directional movement control, and really that's all that is needed for this setup.
Before I could get to work digitizing this, though, I wanted to lock in a maze and put all the context in front of me for how this would work. I played around with a couple different layouts before finding one that I liked, and then laid out an example for what a sound played at a specific square.
Next, it was onto digitizing everything. I created a small reference digital version of the maze I had sketched, and then labelled the axis for easy letter-numbering to reference specific cells. For example, In order to reference the top left cell, I would label it as 8A; this would become crucial later when generating sounds for each cell.
Additionally, I added colors to some different cells. I figured the player needed an actual reason for going through the maze, so came up with some simple lore: you are travelling through this maze enchanted by fairyfolk to hide their magical forest, and you must avoid the two guards of the maze and find the fairy forest to escape. As you get closer to either of the guards or the exit, the sound that they play will grow louder and louder, so marking out where those sounds would be audible was helpful and important down the line.
Figure 1: Short ref. digital version of the maze
I then expanded Figure 1 out into something larger, where I could track what the minutes and seconds for each cell. I also used this version to track was happening in each individual channel. I was careful as I filled this out, because I knew typos would either really throw me off or be entirely missed, and I was worried that mistakes like that, with such limited input, would cause the project to entirely fall apart. I used the channel labels I had established earlier in conjunction with the cell reference above to be able to reference individual channels in a given cell. 8A.1 was my shorthand for "8 minutes, 0 seconds to 7.5 seconds, north/front speaker". A "1" displayed there, then, means that the return ping is heard 1 second after the track begins, so at 8 minutes and 1 second.
Figure 2: Expanded maze, marking actions in each channel for a given cell
Now, this organization was helpful for me calculating each channel for each cell spacially, but I knew I would benefit from a third display for the same information when it came time for track assembly, so I took the information above and formatted it into a different chart, this time organized by channel action over time. This layout would allow me to easily piece together each channel one channel at a time, as opposed to working on all four channels simultaneously, cell by cell, which seemed a lot more frenzied and disorganized.
Figure 3: The actions of each cell, organized by channel over time
The final actual piece of design that I wanted to do was to have the environmental sounds grow louder and louder as the player got closer to the "source". Of course, I hadn't determined an official source, but I figured it was easy enough to say that the two guards (purple and red) lived in the corners of the maze, while the fairy forest originated from the exit at 7A. Of course, the problem this posed practically was that when generating sounds, I had previously been on the hook to generate a maximum of 25 different sounds (distance 1-6 with no ambience, distance 1-6 with each type of ambience, and one sound for if players accidentally stepped into a wall), but with this change in volume, that number would balloon quite a bit. I would need to generate individual clips for, in some cases, each channel of each cell within areas that had ambience.
I decided, ultimately, that this wouldn't add on too much more time to my fabrication, and it was worth it because without the guidance of stimuli growing louder or quieter, players would be led to make semi-arbitrary decisions as to their movements, and I had hoped that once players grasped the mechanics, they would fall into a flow state that could be supported by this dynamic ambient sound. With that, though, I again needed to be really careful with my organization so that everything was set to play in the right place at the right time. I went back and recolored both of my organizational charts, weighting the strength of the color based on how close it was to its source.
Figure 2, revised
Figure 3, revised
Color temperatures represent sound dropping off radially from the "sources" at 1A, 7A, and 8H, meaning that ambient sound is the same volume at places a similar amount of cells away from the source, such as 4A and 3B, both four steps away from 1A. The colors from the revised Figure 2 have been carried over on the Figure 3 layout above to highlight the cells and moments that are unique along the timeline.
With the design complete, all that was left to do was fabrication and construction. I began fabrication by gathering and designing the three ambient sounds I required. I decided that the two guards would be Cerberus from Greek myth, and a massive guard with an even bigger sword named Boorman, named after the character from the now-cancelled Willow TV show. I searched the free without attribution library of freesound.org to grab some sounds and with a little bit of editing and design in Audacity, my ambient sound clips were complete.
Next, I generated some simple beeps for the pings; I thought that with how weird and funky this project already was that the main sound design being reminiscent of old early game consoles was fitting, considering the many ways that designers 30 years ago overcame their own incredibly tight constraints. For the ping out, I took a simple square synth tone and had it pitch down and fade out as if it was traveling away, and the return sound was akin to a submarine's radar beep in the same square wave sound font. From there, I simply needed to have the return ping play at different times in the track, labeling them 1s-6s in the file labeling. I generated a simple white noise with a low-pass filter on it for the sound that would play if the player should travel into a wall.
As a final step in fabrication, I needed to add ambience to certain tracks. I decided it would be easiest to just have ambience mixed into all four tracks at the same volume as to not confuse the player. I wanted the audio to be quite loud if the player was right on top of the source, but not deafeningly so, so I decided that at their source an ambient track would have a peak of 9 dB, decreasing by 3 dB for each cell away from the source moved, giving the ambience a range of 9 dB to -6 dB, which felt reasonable to me. Following the charts I had made before, I was able to make these pretty quickly. For certain cells, like 7E, I was able to just make one single sound to represent 7E.1, 7E.2, and 7E.4 since they all have a travel time of 1s. I labelled them as such in the naming scheme to the right, with 7E-124 signalling that that sound was for 7E.1, .2, and .4.
Figure 4: A segment of the tracks generated for the game.
MoED-2s.mp3
7C-3.mp3
Maze-of-Eternal-Darkness-Channel-1-FrontNorth.mp3
Because of all of the organizational work up top at every single stage in the process, the construction step was an absolute breeze. I simply opened a Logic file and dragged in each sound file where it needed to go, one after another, ensuring that they were placed at the right sound markers. I knew when I needed to grab a special sound because of how it was colored in Figure 3, and I knew exactly where to find it because of my labeling in Figure 4. Pretty quickly, I had four tracks that were exactly eight minutes long, exported and labelled.
The very last thing was that I made a new tab in the spreadsheet that I had been working in as a "read me" file for setup, where I gave the one paragraph lore dump, as well as setup instructions and addressing some things to note that could help play go a bit more smoothly.
Read Me page for The Maze of Eternal Darkness
Bringing this project to be presented, it quickly became clear that I had ventured the furthest out into the weird with my project, but once I explained it, my classmates became quickly invested in solving the maze. I was a bit nervous because I had been completely unable to playtest the game due to not having access to a space with 4.1 audio between finishing it and the presentation, but I trusted in my organization and it went really well! At the end of my presentation, my professor suggested that the game would be a great installation in an experimental audio space on campus.
I'm overall very very happy with how this project turned out. I had a lot of fun working under constraints that were very different than I am used to in the game design space, and I think that because I needed to get a little bit occult with the design, it turned out to be a really unique project that I'm pretty proud of.
There are two small things that irk me a little bit about it: the first is that because of the restraint of it being playable within Reaper, an unfortunate side effect is that the player can always see the audio visualizer of the tracks, and thus has some small way to "see" their way through the maze. I looked for ways to hide the audio visualizer but couldn't find one, so just had to leave it, unfortunately. The other thing that I would want to change is that I think it would be really cool to have some kind of hotkey or joystick that responds to inputs to automatically jump to different points in the audio track, because I feel like not needing to think about the mechanical input of moving from one place to another within an audio track could allow for a little bit more of a flowstate. On the other hand, though, while these two critiques put more polish and refinement on the project, I think they do detract a little bit from the jankiness of it, and move it more toward normalcy, which I think makes it a bit less charming overall.
If you would like to view all the project files, or set it up yourself, here is the link to the files!