First of all, I want to thank all of you lovely people who took the time to play my game. I create games for the act of creating itself as well as for people to enjoy themselves and forget about their daily woes, if only for a little while. So just by playing my game you have already done me a favor. Thank you for that!
I’m not sure if this post qualifies as a post-mortem or not, but I just see it as a quick behind-the-scenes look on the making of my entry for this LD, GraviFlip.

Now, this was my first LD (and the first Game Jam where I flew solo, not counting #1GAM) so I didn’t really know what to expect. When the theme was announced I admit I was a bit bummed…”Entire Game on one screen” didn’t sound like a challenge for me at all, since almost all the games I’ve done up to this point took place on one screen. Also, virtually all 80s arcade games took place on one screen and there’s hundreds if not thousands of them. However, I swore myself I’d join this LD and so I set to work on finding an interesting way to use the theme…which eventually led to GraviFlip.
The underlying question was: “How do I make the most of the one screen I am given?” However, the additional and actually more important question was: “How do I do it without driving myself mad?” The answer to the second question was “by doing stuff I know how to do,” which means no experimental forays into unexplored genres. I’m kinda boring like that. However, I did decide on adding a bit more spice to the proceedings with my choice of technology.
The Language / Framework
For GraviFlip I used Haxeflixel, a framework that is basically an enhanced port of Flixel to the Haxe language. It was a somewhat daring choice, as I had just begun to learn Haxe and had only completed one game using Haxeflixel before LD began (the game being JettyCat, a FlappyBird clone.) However, I’d like to continue working with Haxe in the future so I just decided to take this as an opportunity to gain some more experience. And things actually went really well! Within the first two hours of the first day, I had already whipped up a basic prototype of the game:

Isn’t it beautiful?
From then on out, it was all about the graphics, adding features and polishing the whole thing.
The Game Mechanics
The idea of flipping gravity came to me while pondering the first question I posed above: How do I make the most of the one screen I am given? I knew I wanted to make a sort-of platformer where the player could run and jump and I also knew I wanted to create an arcade-type game since those (theoretically) allow for endless replay value, even if there is only one screen. My first thought was to simply fill the screen with platforms that the player could traverse but I couldn’t make the gameplay different enough from Mario Bros. so I scrapped the idea. The next idea I had (which was the one I then went with) was to allow the player to traverse all the edges of the screen, not just the bottom one. Allowing him to traverse all the edges however reeked of fiddly coding and design issues, so in the end I just went with the floor and ceiling.
It was only then that I realized that this general idea had already been done in VVVVVV, but since my focus was on creating an arcade experience limited to one screen, I was sure I could make it different enough to not seem like a ripoff. I hope I succeeded.
The Setting
Well, if you’re talking about flipping gravity you don’t have that many options if you want it to make some kind of sense. Space was the obvious choice for me, not just because space is awesome in general but also because it’s relatively simple to do. I kinda sabotaged myself when I started doing the background art though, as I kept getting more and more ambitious and adding more stuff to the background, until the space backdrop was only visible through a relatively small window. Oh well, I’m quite happy with the results considering I’m not an artist, so I’m not gonna scold myself for that one.

The scrolling space background visible through the window, originally meant to make up the majority of the game’s background.
The Art
As I’ve said I’m not an artist, so I have to find ways to simplify the art in my games without them looking too ugly and unprofessional. While working on Coaster Surfin’ I realized that I was able to create reasonably pretty graphics using a Game Boy-inspired artstyle. Since you only have 4 shades of the same color to work with you don’t have to worry about palettes and such, and since the resolution is so low (8×8 or 16×16 per sprite) you can get away with some rather crummy animation. Plus, you get the added bonus of not having to have kickass music or sound effects. Long story short, the GB approach was a good choice for me since it’s quick, easy to do and looks rather good if done correctly.

The player spritesheet. See what I mean by crummy?
The Problems
I actually didn’t run into too many problems with this project mainly because I tried to keep it as simple as possible, especially since I didn’t have much experience with the framework I used. Nothing is more frustrating than running into a hitherto unknown quirk shortly before a deadline…
The only issue of note that presented itself was (as it often is) the collision code. Usually checking if a player has jumped onto an enemy is rather easy: If the player is moving downwards, check if the x-value is inside the enemy boundaries, then check the same for the y-value. However, since both the player and enemies could be either on the floor, on the ceiling or in midair at all times, things became a lot more complex to my tired mind. It took quite a bit of trial and error until I’d arrived at the current solution, although that was probably a sign of weariness as looking back, the code isn’t actually as bad or complicated as I had thought at the time.

The code in question. As you can see from the comment, I did not have much confidence at the time of writing.
At this point I have to thank Haxeflixel for providing many examples and good documentation which kept me from butting against issue after issue. I never struggled with the framework (or the Haxe language), only with myself and with the underpants gnomes that appeared while I was working. Although that may have just been a stress-induced hallucination.
What now?
I will definitely put out a more complete version of the game that addresses issues raised by the LD community and adds more features. I can’t yet say when that version will be available, but you shouldn’t have to wait too long for it. Some of the stuff I will change/add:
- Global high scores
- Restart the game by pressing a button on the keyboard
- Tutorial will only be shown if you haven’t seen it before
- More polish, like more satisfying feedback when you kill enemies
- A better mapped out difficulty curve
- More enemies, obstacles and features
You can follow me on Twitter @ohsat_official for updates and progress reports but I’ll also post an update here once there’s something to show.
Thank you for reading! If you have any further questions, feel free to ask them in the comments.