When the sickness came, your sight was taken from you. For what seemed like eternity, your world became shadowless, dreamless, and lifeless. But you learned to see again, in your own way. After all, even the faintest click pierces the deepest silence...
Unblind is a musical exploration game with an interesting kick: the player cannot see. Having lost his vision as a result of illness, he quickly succumbs to a secluded lifestyle, until he one day decides to reclaim his life. Using an assortment of sonic abilities, he navigates his town in a quest to regain his sight. But that begs the question: what is true sight?
Table of ContentsBuilding & Running UnblindUnblind in ActionIdea & MotivationDescription & ControlsControlsDesigning the WorldAbilitiesVisionInteractionFlashbackResonanceBeaconConcentrationUnder the HoodMetrics for Success
baseare included in the build (in that order).
[build-dir]/. There should be an executable named
unblind.exewhich can be run.
A short demo/teaser video is available here: Preview
As strange as it may sound, the initial idea for Unblind came from technical limitations. Being a relative novice in the world of game development, I did not know how to use modeling software such as Blender or Maya, although I was experienced at CAD. Yet, I also wanted to create all the assets myself for the sake of cohesion. In the limited amount of time I had available, the idea for Unblind was born - an echolocation-based exploration game would be an interesting design constraint, while allowing me to concentrate on modeling the forms of the objects, as opposed to the textures. I realized that simple unlit shading (and an unhealthy amount of bloom) could look good if it were incorporated well into the overall design, which saved me much hassle and time.
Now, operating within this constraint, I adopted a repeat-the-pattern mechanic for Unblind, but I realized that having the exact same mechanic for every level would make the levels too tedious and boring. The solution came in the form of abilities. For example, allowing the character to play multiple notes at a time opened up the possibility of polyphonic patterns. Overall, I sought a balance between the safety of player guidance (in the form of narration) and the joy of aimless wandering.
The choice to develop a narrative came from necessity, as simply telling the player to repeat a pattern might seem unmotivated ("Why is the character blind?", "Where are we?", "Why do we care?").
At its core, Unblind is an exploratory pattern repetition game, but a more accurate description might be aesthetic sound hunt. Each object in the world (called a
Soundable) produces a specific sound when hit by a wave. In order to advance the storyline, the player usually must find a
master object (usually an instrument). Interacting with the
master produces a pattern, which the player must replicate by searching for and interacting with the corresponding
To maximize familiarity and reduce the learning curve, Unblind uses controls similar to those found in first-person shooter games. The full list of controls (minus the secret ones!) is shown below:
[W/S] Move forwards/backwards
[A/D] Strafe left/right
[LMB] Echolocate, referred to in-game as "vision"
[RMB] Interact with objects
[1-4] Used for various abilities
[~] Toggle the UI/HUD (also hides dialogue)
[n] Advance the dialogue
[ESC] Unlock the cursor
[m] Return to the level selection menu
The overall aesthetic of the world of Unblind was loosely derived from ancient Japanese towns. Some views of the map from in-game (not accessible to the player unless in a special debug mode) are shown below:
Although the player starts out with the Vision, Interaction, and Flashback abilities, he/she acquires more powerful (and interesting) abilities as the game progresses.
The quintessential ability. It's used by the character to "see" the world, and the game would be nearly impossible without it. When the left mouse button is held, the character sends out a pulse of sound (represented by a wavefront), which travels and implicitly reveals the shapes and colors (or timbres, if you will) of different objects.
The second most quintessential ability. It's used by the character to open doors, enter patterns, and general interactive stuff. Interacting with an object causes it to receive a focused pulse, which prevents the pulse from escaping the triggering adjacent objects (unlike Vision).
Used by the character to experience "memories" of what he remembers the town looked like, but implemented more as a way for the player to visually reorient him/herself if stuck or lost. This has a pretty long cooldown, otherwise the game would be too easy!
Used by the character to get the "vibes" of an object. It's essentially a color-based filter, which will cause objects of a similar color to the wave to light up. The color of the wave can be changed using
Used by the character to play several notes at once. Represented by a Tibetan singing bowl, the beacon finds the nearest
Soundable (within a reasonable distance), lights it up, and "holds it down".
Used by the character to cause time to pass by more slowly, and also used by the creator to take screenshots more easily. Teaser: comes in handy for the final level.
Unblind was implemented in Unity, with sound generated by the plug-in ChUnity. This project required several refactors during its development, which resulted in the following (simplified) GameObject/class architecture:
GameObject LightRoot: Controls all the crazy lighting tricks
GameObject BoundaryRoot: Contains boundaries, so the player doesn't escape!
GameObject Player: The player - that's you!
GameObject SoundRoot: All objects that emit sound are children of this
GameObject, as their depiction of the player's echo must be synchronized.
GameObject Canvas: Controls all the dialogue.
GameObject LevelRoot: Controls all the level logic, which is abstracted out into its own controller.
GameObject AbilityCanvas: Controls the ability HUD
In addition, several instances of inheritance were used, the most prominent of which was the implementation of the player's echo. The echo itself (implemented hackily) is not its own object - it is actually the result of each object in the world updating its texture (via parameters in a special shader) to give the illusion of a propagating echo. Thus, an object that supports a propagating echo was implemented as an
Echoable. From this base class, the
Soundable subclass adds the ability to play sounds when hit by an echo. The
SoundableMaster subclass further extends
Soundable by adding pattern-playing and pattern-checking capabilities to a
During the making of Unblind, my main metric was having the abilities "read" to the player. I found it challenging to tread the fine line between an obstructive and overly verbose tutorial (leading to a disgruntled player) and a complete lack of tutorial (leading to a confused and possibly also disgruntled player). In the end, I decided to attempt to strip the tutorial down as much as possible and weave it into the narrative as possible, to minimize breaking the flow.
Unblind was built by Mark Sabini for CS 476A (Fall 2017).