Out of Sight is a short, story-driven game for the Game Boy Advance. It was developed for the Media Device Architecture course at Georgia Tech, and was written almost entirely from scratch in C. This game was one of the first low-level programming projects I created, so implementing the demanded level of technical fidelity in a way that was transparent to the user was one of its biggest challenges.
Because Out of Sight is a game for the Game Boy Advance, you will need to use an emulator if you want to play it on a modern computer. I recommend VisualBoyAdvance, an open source emulator for Windows and Linux. You will also need to download the Out of Sight ROM itself. Once you have both the emulator and the ROM extracted, drag the ROM onto the emulator and the game should begin.
Default control bindings are as follows, with the equivalent GBA key in parentheses.
- Arrow Keys (D-Pad) : Navigate menus, move
- Z (A) : Progress through text
- Enter (Start) : Begin the game
- All other keys (B, L, R, Select) : No function
Although I find the story I’ve created somewhat interesting (you don’t see androphobic girls being kidnapped by strange men who demand discussions on the ethics of clinical psychology very often in video games!) most of my efforts went into refining the technical aspects of this game. In particular, the GBA does not have its own text renderer by default, so I wrote my own. Each character is an 8×8 tile, and the correct tilemap is created when the game needs to display a certain line of text. This function also inserts line breaks where appropriate to create proper word wrapping, so that no word is cut off in the transition from one line to another. Actual navigation of the dialog trees is handled in a fashion similar to a “Choose Your Own Adventure” book, where each option points to a different “page”.
I’m also proud of the game’s sound. Out of Sight utilizes multiple sound channels to layer the background ambience with the sounds of menu navigation. Implementing this on a low level is not trivial. I used hardware interrupts to begin sound playback at a certain location in memory, then make sure to disable playback at the time the sound completes. I mixed the background ambience myself in Audacity using several freely available sound effects, and stored it in the GBA’s memory in an uncompressed format. (This is necessary as the device has no file system.) There’s a huge drawback to this method, however: this minute-long track takes up 14 megabytes of read-only memory, which is a lot for an old portable. The game still manages to run mainly because the graphics resources it uses are relatively slim, but more complex games (such as retail titles) would need a less memory-hungry method to generate their music.
Although programming applications like this at such a low level is not one of my strong points, the experience gave me valuable knowledge of the power and limitations of C, which led to a greater understanding of languages like Java and C#. If I were to approach a project like this again, however, I’d target a more modern platform and use the most convenient tools available, so I could give greater attention to the design of the game. Although I feel somewhat successful in creating a chilling atmosphere given the limitations of the Game Boy Advance, the level of player interaction is trivial. It lacks replay value, and is less convenient than a simple short story for reading purposes. In future game projects, I plan to focus more on using the story to inform gameplay mechanics, and let those stand as the focal point of the work.
Legal note: Out of Sight uses graphical assets from the Super Nintendo titles Final Fantasy VI (1994) and Romancing SaGa 3 (1995). Because Out of Sight was created in an educational context, usage of these assets is covered by fair use under United States copyright law.