Because this is literally the best we could come up with: retribution

This game was started at the Berlin Mini Game Jam January 2014. My friend Michael Hussigner was visiting, we teamed up, and we brainstormed about the theme “Strange powerups”. We decided to go for a straight forward shoot-em-up game and introduce some humor in the form of annoying powerups that would get in the way instead of helping the player.  Other anti-features for humorous purposes are: fixed score (“a billion”), so that destroying enemies is kind of pointless, and a huge logo occupying a significant part of the screen space, lots of misspellings, ridiculous “things” as bullets of some of the powerups (like cheese, cats, sushi, or bottles).

At the end of the jam, even though I had not had enough time to implement the powerups themselves, we had a basic shoot-em-up game that was already quite fun to play. I spent some days later that week implementing powerups and more enemies as I was coming up with them. Somehow part of the humor was lost, the “normal” gameplay was engaging enough that I toned down the nastyness of the powerups, them becoming a mix of “good” and “bad” ones. Part of the challenge in the game is to be able to avoid the ones that get in the way.

The game is available at under a pay-what-you-want basis.  If you like it, feel free to set your own price and support the developers (Michael and myself).

There is the possibility of a sequel to this game. It would be a longer game with similar game mechanics, but more content in terms of new types of enemies, new types of powerups, and possibly introducing boss fights. It would be published under a shareware model: the first level would be completely free and fans would have the chance to purchase the full game at a fixed price. It depends on the reception of this one, if there is no interest then there’s no point in starting work on a sequel.



Posted in Berlin Mini Jam, Finished Games, JamGames, Löve2d | Leave a comment


O—> is the game I made together with Michael Hussinger at the Global Game Jam Berlin 2014.  I used Löve2D, which has recently been ported to Android, which let me port the game to that platform too.

The theme of the Global Game Jam was “We don’t see things as they are, we see them as we are”.  Our game simulates a battle between two factions: the yellow army and the green army.  The player controls an orb that floats around the battlefield.  Wherever the sight of the orb is directed, the battle is affected by growing or shrinking the watched soldier so that it has the same size as the orb, which can affect the outcome positively or negatively depending on the relative size of the other soldier engaged in battle.

The goal of the game is to tip the balance in favour of the yellow team.

On the desktop version, the orb is controlled with the cursor keys and the sight with the mouse.  You can exit the game by pressing ESC, and switch between fullscreen and windowed with ALT+RETURN.  On the mobile version, the orb can be dragged with the finger, and tapping on the battlefield directs the sight, using multi-touch.

The Global Game Jam 2014 was a great experience.  60 jammers participated, 17 games were made, all in the Wooga office in Berlin.  I’m definitely looking forward to organizing the next edition again in 2015.

The song is a rendition of John Philip Sousa’s “The Thunderer” march, by Free Tim, licensed under a Public Domain license.  The name of the game (which is an ascii-art representation of the player’s orb and the “sight laser”) is pronounced “o dash dash dash greater than”.


In case you’re interested, here’s the video of the presentation I gave at the jam:

Update 28 March 2014:

I uploaded the game to Google Play, so that you can download it directly to your phone.

Note:  If you look at the download size, it’s quite big for an Android game (24Mb).  It’s not Löve2D’s fault.  It’s the images, we put a lot of high-resolution images in there, so that it looks good even in the highest-resolution tablets (Nexus 10 and such).  The assets (images + music) weight 19Mb on their own.  I know it’s a lot, but this is just a jam-game after all, you play it a bit and that’s it, that’s why we didn’t put any effort in reducing the download size.  Sorry if this is an inconvenience.

Also, a trailer:

Posted in Finished Games, JamGames, Löve2d, Other Jams | Leave a comment


This is a game I made at the Berlin Mini Game Jam on June 2013.  I had been thinking about making a hacking game based on the portrayal of such activity in movies.  That is, completely unrealistic.

The game, though, is not more than a one-trick-pony.  Once you get the basic mechanic, there isn’t much more to it.  I planned to work further on it after the jam, developing a cyberpunk-inspired background story and playing a little bit with the possibilities of Löve2D for visual effects.  Since there isn’t a real challenge and the gameplay is completely linear, I kind of lost interest, so I decided to release it as-is.  I made some improvements after the jam, specially on the visual feedback, and I added sound.  But the basic game is untouched.



Posted in Berlin Mini Jam, Finished Games, JamGames, Löve2d | Leave a comment


This was made at the December 2013 Berlin Mini Game Jam. It’s not really a game, because it has no objective, but just an interactive toy.

Usually when I make a game, I start with an idea of what the game will be about and how.  A sort of a “vision”, a direction to follow during the design/implementation.  The rest is just trying to get there.  This time, though, I took a different approach.  One of the ideas I was toying with while meditating about the themes was that the main character would get drunk.  That led me to ask myself how to represent that visually: blurry vision, seeing double, the typical tropes.  As I started experimenting with those visuals, I decided to discard the original idea for the game, and just experiment with the code.  Add stuff to it and see what looks interesting, but without a clear direction.

What I have here is what I describe as an “interactive toy”, it’s a simple dynamic system with some tricks for the visuals, but it hasn’t a meaning or a message to convey, nor does it try to.  Playing with it while testing, I was setting myself goals, as a player, like, trying to get a full row or a full column of a colour without that colour anywhere else in the board, or what was the biggest wave I could achieve.  These goals are up to you.

Kirill helped me with some ideas about the visuals as well as how to use the sounds.  He also provided the colour palette.

Notes: To exit at any time, press “esc”.  To switch between fullscreen / windowed, press “f1″.


Posted in Berlin Mini Jam, Finished Games, Löve2d | Leave a comment

79 Levels

The third edition of the 0 hour jam took place on the 26th October 2013.  Organized by Sos Sosowski, the concept is to make a game during the leap hour that we have when the clocks are readjusted to the winter time, this year when 3AM becomes 2AM again.  In a sense, the jam takes zero hours, you start at 2 and finish at 2.

This post contains spoilers all around.  I would recommend you to play the game first and come back here later to read the explanation.  The link is at the end of the post.  You can  also click on the screenshot to get redirected.

I took inspiration from a game that I have seen reimplemented many times. One version that I know of is called “Lights Off“.  You have a board with squares that can be turned, and the goal is to have all of them turned or unturned.  The catch is that the squares are linked to each other, in the sense that when you turn one, the neighbouring 4 cells are also turned.  In my version, instead of linking each square to its immediate neighbours, the links are selected randomly across the board the moment it is generated.  Some squares are not linked to any other, most are linked to one single other square, some have more than one link. The links are unidirectional.

Because of the random connections, and with such a limited time for making the game, I cannot guarantee that every board has a solution.  Sometimes loops are created, which makes a particular board impossible to clear.  If I had more time I would have attempted an automatic graph analysis of the board, in order to prevent such boards.  However, the game detects when a user is stuck and offers an option to discard the board and generate a new one.

Another source of inspiration was Furiosity, a game by Bart Bonte which is in turn a parody of Curiosity by Peter Molyneux.  I didn’t play the original, but I liked the parody.

The name of the game is its length. Progress is saved automatically, you can close the game and come back to it later, you will continue in the same level number that you were when you left.  It will probably take several hours, maybe days or weeks, to finish, while it took zero hours to make.  That being said, I don’t expect anyone to reach the end without cheating. Since it’s simple JavaScript, it’s actually quite easy to figure out a way to cheat using the browser’s debugging options.

My first idea was to call it “256 Levels”, as a reference to the last Pacman level, but then I thought that it would be too long and I decided to reduce it by half and call it “128 Levels”.  Then I thought that since the reference was already lost, it doesn’t need to be a round number or a power of two, and I could choose any number, so I chose 137.  When testing, I saw that level 137 would still be unplayable due to the size of the squares, so I settled for something around 80.  79 seemed to do the trick, and it’s still a prime number.  If you reach level 80, you will see the end screen.

The game was witten with the LightTable editor, without any external library, just pure HTML5.  I didn’t upload the source code separately in a repository, but the code is not obfuscated in any way: you can inspect it from the browser.


Posted in Finished Games, HTML5, Other Jams | Leave a comment

Not a haiku

On July 2013, as a collaboration with Lorenzo from OpenTechSchool and Astrid, we organized what we nicknamed “Twinejam“.  The goal was to introduce new people to the joys of game making by showing them the wonderful tool called Twine.

Since I was organizing the event and making sure that everyone was having a great time, I didn’t have much time to make a game myself.  I was also helping my friend Edu from Tictaptoe with some macros for showing/hiding links based on timeouts (you should play the game he made too).  I got interested in those macros and made a not-game called “Not a haiku”.

I took inspiration from the poet Joan Brossa, his concept of “visual poems”, although what I attempted was a bit different.  The exercise for me was to suggest images with words.  It’s an exploration game.  I could only spend little more than one hour with this, but I still like the result.

Not a haikuAll games are HTML, they run in your browser.

Posted in Finished Games, HTML5, JamGames, Other Jams, Twine | Leave a comment

Bye World

On the Berlin Mini Jam of August 2103 I took the opportunity to get a first impression of Cocos2d-x.  It’s an open source, multiplatform c++ port of the Cocos2D game engine, which was written for iOS apps.

One of the themes was “The world ends in 2 minutes”.  I took that literally and made a simple game where you get to choose how do you spend the last 2 minutes before the planet gets destroyed by an asteroid.

Being the first time I was using the library, my approach was to take the example HelloWorld app and hack it, looking up things in the online reference as I needed.  I wasn’t left very happy with the online documentation though.  In the official site, at least, it amounts to one simple tutorial and what looks like a dump of Doxygen generated documentation.  I missed little snippets of code showing examples on how to use each class, like you have with Löve2D or Qt.  On the other hand, the library itself seems to be quite well written, it was nice to use.  Specially because using the C++ version meant that the IDE I was using (QtCreator in my case) would help me figure out things through the autocompletion feature.  Speaking of which, Cocos2d-x comes with Qmake project files ready to use straight away, which was a very pleasant surprise.

This game engine comes with bindings for Javascript and Lua.  You don’t need to get your hands dirty with C++, even though I chose to do so.  Not only that, but the latest version has experimental support for emscripten, which is a C++ to Javascript compiler.  You write an application with C++, it gets compiled into an HTML5 page that can run in a browser.

Once the game was done, I decided that for such a small game I didn’t want to recompile for multiple platforms.  People are more likely to try a game if it just runs in their browser rather than download an executable binary.  So, I decided to give the emscripten port a try.  Generating the webapp did work out of the box, without any need for tweaks.  Unfortunately, it was quite buggy.  There was a weird problem with the colors (everything appeared red), the way fonts were rendered, but worst of all, the performance was terrible.

In addition to the C++ port, there is an HTML5 port called Cocos2d-html5.  As I said, the multiplatform support of this engine is quite good.  The API is almost the same.  Even though it meant rewriting the application, in practical terms I only had to replace the function calls with their Javascript equivalent.  After all, my game is just a glorified HelloWorld, with a minimal complexity.  Quick and easy.

Having it running properly, though, was not exactly a piece of cake.  I encountered different problems on each browser that I tried.  TrueType fonts were rendered in green (at least in Firefox), which meant that I had to replace all the labels and use a bitmap font (fortunately, I could find a freeware app online to convert ttf to bitmap fonts).  Support for the WebAudio API is kind of broken on several browsers (Problems with Chrome and Safari), so I had to hack into the Cocos2d-html5 library and implement workarounds with the particular problems on each one of those browsers.  And so is texture management with WebGL (Problems in Opera and Chromium).  I spent almost as much time working around the different issues on each particular browser as I spent writing the app on the first place.  My feeling after this work is of admiration for the developers of this game engine, because most of the stuff worked right away after all, with these few exceptions.  They must have had to do tons of work to fix all the countless issues on the different browsers.

Here you can play the result of the port, online.  The song is called “Duet Musette“, by Kevin MacLeod.  You play the game by clicking on the options at the bottom right corner.  The sound might still be broken depending on the browser you’re using, I am sorry about that.

Bye World

  • Source code (the master branch is the html5 implementation, there is a cpp branch with the original implementation)
Posted in Berlin Mini Jam, Cocos2d-x, Finished Games, HTML5, JamGames | Leave a comment