I want an 8-bit version of Portal.

Art from http://play-and-fun.com/wp-content/uploads/2013/05/portal-2-8-bit.gif

So I and some of my friends decided to make it.

The whole thing started with music. I had discovered the Aperture Science Psychoacoustics Laboratory Soundtrack to Portal 2 and had been feverishly listening to it all. As I always do when I get obsessed with a bit of music, I started trying to figure out some of the songs I like. I transposed the music into sheet music with Sibelius which makes it simple to export as a MIDI file. This made it a snap to import the raw musical information into FamiTracker for making 8-bit versions of each song. I did this to a handful of my favorites just because it was fun to do. But I started talking with my friend Jorge about it, and realized I wanted to make an 8-bit version of Portal. Jorge suggested that we could even start making it based on the music as a jumping off point. (To be clear, I did not figure out a few of these songs, namely Halls of Science, Turret Serenade, and There She Is. I did do the 8-bit aarangement, but I started with MIDI files I found online for these songs. The rest, I did 100% myself, from figuring out to final FamiTracker version.)

Music I Made

The reason I wanted to make an 8-bit version of Portal is sort of like retro-fitting my past with a game that I came to love much later in life. Of all the games I play, most of my favorites originate on the NES. By making an NES version of Portal I feel like I'm creating the original installment for myself here from the future. Also, I think the affordances of the system make for an interesting challenge, in terms of game design. Not only do we have to find an answer to "What can we do?" with the limitations of the system, but "What would be best to do with this thing?" or even "What is something cool that only this *could* do?" But as much as I wanted to work on this, I was about to start my last year in grad school and I knew my thesis project would take up as much time as I could spare. If only there were a way to legitimize this work so I could convince myself to prioritize it...

We got an Independent Study from the MFADT program at Parsons to do it.

And in swoops Kyle Li to the rescue! I approached Kyle (an awesome teacher in the program) about making this project an independent study for my last semester. He asked me to write up a proposal and submitted it to his bosses. Kyle loves everything 8-bit, so as soon as it got the ok we had a class. We decided to try and do more than just a technological piece though, a cold translation of modern gaming to an older more primitive state, but we wanted to focus on coming up with a good narrative for the experience too.

We started thinking about story.

Myself, K. Anthony Marefat, and Pat Mooney started developing possible storylines all over the chronological spectrum to express ourselves in this game. Anthony's scenario revolved heavily around the two co-op robots and the events that transpire around them after the events in the co-op storyline. I focussed on a storyline that centered around the end of the series, wondering "How does Portal end?". The reason I did this is because I noticed Nintendo has retro-fitted the storylines of two of my favorite series, Zelda and Metroid, so that the events that take place in the very first game end up being one of the last in the chronology of the narrative. I understand why this is, first games don't know they will become a series, and they usually come up with the most amazing epic conflict and satisfying resolution possible in order to make a great game. And when they succeed, it's hard to up the ante from there. So many writers go backward, filling in the gaps that got us to this amazing monumental game. And lastly, Pat was working on a megolithic combination of our and canon narrative components. But we quickly found that we needed to move past this phase, complete or not, and start production due to the time limitations of the class. However, one thing we discovered was that we all shared a common ground with our narratives. We all felt that part of the Portal DNA is waking up in a room and being made to run tests. We all had that component early, if not at the very start, of our stories. So we decided to focus on building this iconic scene and letting the ins and outs of production help guide us toward the right paths in terms of narrative as we go along.

Then we started building tools to design the game and levels.

Processing based level editor for 8-bit portal

Since it was the most common language to all three of us, Anthony decided to begin making a level editor in Processing. After a few days he had a basic grid based proof of concept. We wrestled with some of the physical mechanics for a bit before deciding to port it over to openFrameworks as we found it easier to do some of the more complex physics aspects. But then I realized, we were spending too much time on building tools. By the time we got this tool built it would be too late to make the actual game. So I headed over to the Nerdy Nights tutorial to learn a little Assembly for NES.

But we ended up just starting to make it in Assembly, learning by doing.

I took it a tutorial at a time, starting with the homework each week. At first it was real basic, changing background colors and basic controller input. But it quickly ramps up into having you complete your own pong game. Once I had done that homework assignment, I felt I new enough to start, at least, on the game we were actually trying to make.

Pixel art renderings of assets

I started by drawing in 8-bit character and asset sprites for YY-CHR. Once conception of the game we had been thinking about trying to make involved switching dynamically in-game between a side-scrolling view like Metroid and a top-down view like Zelda. That's why some of the assets are from the top too. We decided these were the most crucial elements, both in terms of game play and aesthetic. The look of the room, turrets, GLaDOS, boxes and buttons, portals, doors, signs, and of course, Chell herself. I did the initial drawings in Photoshop and then moved them to YY-CHR so that I could work off an actual CHR file.

First prototype in Assembly

So the first thing I did was put Chell in the game instead of Mario. This is a homework sketch from the tutorial that I replaced with my own CHR file. OK. Good start. Let's see what else we can do.

Second prototype in Assembly

That's a little more like it. Starting to look like Portal now. We've got basic background and sprite assets now. What's next?=

Third prototype in Assembly

How about a super cool sign and some building blocks to make collidable structure to navigate around? But collision proved really difficult in this environment. I need to consult an expert on that. So in the meantime, let's talk scrolling backgrounds.

Fourth prototype in Assembly

This prototype uses scrolling background code, transforming Chell's narrow cell into a long hallway with a surprise (though miscolored) monitor along the way. Now we can deal with a lot more space. If only we had control...

Fifth prototype in Assembly

And now we do. The background now scrolls when you move forward, but not backward. There is an emulation problem with my code somewhere, in that Chell's sprite doesn't animate unless you are moving her with the controls. She will still "fall" in that physics is still being calculated but her sprite will stay in its last position until you move the control again. Probably just a placement of a block of code or a subroutine. I will find this bug and destroy it eventually.

Download the most recent ROM

We still have a long way to go, but we're doing Computer Science and this project is Still Alive.

So, not a bad show for a semester's work. We started with music and ended up with a basic shell to play around and build a pretty cool world in. The next steps will be to get collision working properly, music embedded into the game, and basic portal teleportation properties. Once that is done we can focus on shooting portals and building worlds to put them in. I expect that over the next year or two we will continue this until we have a great game to show for our trouble. Stay tuned here for the latest versions of the game and a big redesign if (when!) we finish it.