FlipSIDE


Play Game





Conversion Details




Code

What is FlipSIDE?

FlipSIDE is an unfinished videogame I created loosely based on FlipSIDE, a feature film created by Matt Ryan in his teenage years. It's about a group of college students who discover a portal to another universe in their toilet. I played the part of Andrew, the character who found the flip universe when he was (presumably) talking to a man about a horse. You can find out more at its IMDB page.

The Game

Back in High School I was a huge fan of the Marvel Super Heroes vs Street Fighter series. A cross over between the Street Fighter and Marvel universes, it created a weird meta-universe by merging disparate characters and intellectual properties to gave birth to nonsense too silly for the "serious" original universes, like Akuma becoming a cyborg, or Ryu being arbitrarily murdered by a super villian. When Marvel vs Capcom came out, Capcom started throwing every character they owned into the mix so things got even weirder.

I really dug this vibe and wanted to create some kind of goofy cross-over of my own, but was lacking in the raw material. By the end of High School, I had a number of games I'd written in Q-Basic and one in Visual Basic, but most of these were several years old (an eternity in teenager-time). More importantly, no one knew about or played them, so any kind of zany references or out-of-character moments would be lost on the audience. However, my circle of friends had all been involved in or were at least aware of FlipSIDE, as well as a series of other movies and short films we had been involved in. It struck me that I could make a game ostensibly about FlipSide, but frame it as a sequel and then use it as an opportunity to unexpectedly bring in characters from everything else.

(It strikes me, writing this, how extremely lame and dated all this sounds. But this was during the age where almost all TV shows had plots that seemed to reset to the status quo at the end of each episode, the shared Marvel Cinematic universe seemed unimaginable and something as boring as Jay and Silent Bob Strike Back "ending" the View Askewniverse was a thing my friends and I were excited about. I guess another way of looking at it was it was before the internet was in the palm of our hands, social media was ubiqituous, and every element of the human experience became so meta and self-referential that the notion of an isolated TV show, game, or other idea itself now feels novel).

The Code

FlipSIDE was written in Visual Basic 6 and ran on my old Windows '98, Pentium II machine. Eventually I had to retire that old workhorse, and one day I realized the executable produced by VB6 didn't work on versions of Windows following XP.

I'd always had a fond place in my heart for FlipSIDE and was sad one day when I realized I no longer had access to it.

The C++ Conversion

A few years back, I took the old code for FlipSIDE and rewrote it, line by line, in Macaroni using an older version of the Lp3-Engine to power the graphics and sound.

Some time later, I rewrote it again, this time in pure C++ using the newer version of the Lp3-Engine. I tried to recreate to make the commit history granular enough that the steps I'd taken in the Visual Basic 6 to C++ conversion would be easier to see when browsing the code on GitHub.

In the end, I succeeded in perfectly recreating the old project: at runtime the game behaved seemingly identical to the old one. I had managed to convert an ancient code base despite the fact I had only a fogey understanding of it.

If you're crazy like me and find the details of how one might convert 15 year old Visual Basic 6 code to C++ interests you, I presented on this topic for the Austin C/C++ Meetup and have posted the slides here.

The TLDR; is that I did the most boring possible thing I could, keeping it all as 1x1 as I could, even when it meant suffering with the same warts as the old code.

Since then I've been working on the code here and there for about a year. I'm trying to clean the code up, extract important subsystems, and end up with a generic framework I can extend. My goal is to gleam useful abstractions out of this code base, using my 18 year old-self as a kind of technical advisor to what a game engine like this *must* have while my more stodgy, modern self focuses on identifying what's going on in the code and making it something that isn't garbage.

The Emscripten port linked to from this page is based on this commit, after which point I started to get a little bit loser about breaking legacy behavior as I changed more stuff.