About Martin Vilcans (twitter: @vilcans)

Developing VR games at Resolution Games, Stockholm, Sweden.


Ludum Dare 37
Ludum Dare 35
Ludum Dare 34
Ludum Dare 32
Ludum Dare 30
Ludum Dare 29
Ludum Dare 29 Warmup
Ludum Dare 26
Ludum Dare 25
Ludum Dare 23

Martin Vilcans's Trophies

Best Game - 3rd Place - LD 37
Awarded by LDA
on January 3, 2017
Mood - 1st Place - LD 37
Awarded by LDA
on January 3, 2017
Outstanding Voice Acting LD37
Awarded by MementoGames
on December 17, 2016

Martin Vilcans's Archive

Euclid Geomorph – last minute update

Posted by (twitter: @vilcans)
Sunday, May 8th, 2016 6:16 am

To get the game synchronized with the music, I had to work with the three units of time in Unity (frame updates, physics updates and audio playback), which proved to be surprisingly difficult for a simple 2D game. I have now published an update of the game that should work better, so give it a try! Play Euclid Geomorph!

And here’s a gameplay video too, where I fail at the most sneaky part of the game:

My tools for LD35

Posted by (twitter: @vilcans)
Friday, April 15th, 2016 3:29 pm

Great, I have no other obligations this weekend, so let’s go!

Preparing the gear for the compo

Preparing the gear for the compo

This is the content of my toolbox. I’ll probably not use of them, but we’ll see.

Game engine: Unity 5.3.2

Programming language: C# (for Unity scripting), Python (for any other scripting needs)

Text editor/IDE: Vim with the OmniSharp plugin

Graphics: Gimp, Blender, Camera on my Nexus 5

Audio: Zoom H2N, Garageband, Bfxr, Audacity

Other tools: Git, GNU Make

Computer: MacBook Pro

Success is the only option with this toolbox! :-)

Last chance to vote and comment

Posted by (twitter: @vilcans)
Monday, January 4th, 2016 5:05 pm
Unintended Acceleration gameplay

Unintended Acceleration gameplay

Just go here already. :-)

Made an Android version of Unintended Acceleration

Posted by (twitter: @vilcans)
Sunday, January 3rd, 2016 12:14 pm

I made an Android build of my open world racing game Unintended Acceleration.

Unintended Acceleration for Android screenshot

Unintended Acceleration for Android

There are some differences from the desktop version (seen below). I moved the HUD elements so you wouldn’t obscure them with your fingers and added the visible arrows for steering. I also tweaked the lighting a bit for performance.

Unintended Acceleration desktop version

Unintended Acceleration – 1 day later

Posted by (twitter: @vilcans)
Monday, December 14th, 2015 5:22 pm

Uncontrolled Acceleration banner

After only sleeping three hours tonight, here I sit the night after the compo and gather my thoughts. It’s not a post-mortem as the game isn’t dead yet. You are very welcome to play Unintended Acceleration and let me know what you think. It’s basically an open world racing game where you can’t directly control your speed.

Here’s what I wrote in my I’m in post, which shows what normally happens when I join a Ludum Dare:

I’ll probably follow my ordinary process of waking up around 7 on Saturday morning (Central European Time), check out the theme, have a long breakfast while trying to focus on thinking about the theme, getting anxious around noon when I still have no idea, start sketching in the afternoon, then think what the hell, this idea will have to do. And five minutes before the deadline at 3 on Monday morning, I’ll still be coding before finally submitting and thinking of all the features I wish I had the time to implement.

So how did it go?

This time it was different. I didn’t linger on choosing the game idea, and instead went with the first idea that popped into my head. I didn’t try to do anything clever with the idea, and chose to do something with “Two button controls”. Not too long ago I read an article about the problem of unintended acceleration in cars, where some faults gets the engine stuck in acceleration mode. While often lethal and tragic in real life, I thought it would be interesting to try out in a game, and as it’s not possible to brake or accelerate, I could make a car game with only two buttons: left and right.

My son started drawing a level as soon as I told him the idea. Because of the compo rules, I was only slightly "inspired" by his drawing.

My son started drawing a level as soon as I told him the idea. Because of the compo rules, I was only slightly “inspired” by his drawing.

I fired up Unity and started implementing the game mechanics. Driving is always fun in games, so it looked promising. But after a while I started doubting whether it would be fun anyway, and all the boring parts like win/lose states, restarting and counting damage were left to be implemented. In those cases I usually start working on something different to get my motivation back.

Music and Sound

At the start of the second and last day (as I’m in Europe, the compo is only two days), the game was playable but lacked polish and any level design at all. So I started working on the audio. :-) In my opinion, racing games should have guitar-based music, so this is the first LD game where I have used a “real” instrument. I recorded a few tracks with the guitar and added drums, bass and an organ in GarageBand.

Some of the gear I used for recording music and sound.

Some of the gear I used for recording music and sound.

After recording the music, I went out to try to capture sound for the car’s engine. I stood by the red lights trying to get close when I captured the sound of the cars when they accelerated, but it wasn’t easy to get clean sound from one single car. Then I stumbled upon a car parked at the curb with its engine idling while some guy was having a hamburger in the driver’s seat. I got as close as my self-consciousness allowed me to, took out my Zoom H2N device and recorded two minutes of the engine noise. It took some work to make a few seconds of it loop in Audacity, but it turned out so much better than the sine waves I used earlier.

When I listened to the recorded audio later, I found some noises like something hitting something metallic. I don’t know what made that sound in the first place, but they were perfect for the collision sounds.

Level Design and Modeling

In the end I just had to do some level design. Up until then, all I had was flat ground and some boxes for building, but then I used Unity’s terrain editor for most of the level. I hadn’t used it before so it was a gamble, but luckily it didn’t hide any big surprises. My 6 year old son wanted some boulders that you could hit with your car and they would move, so I modeled a rock and put a few of them in the game.

Apart from the terrain editor, I used Blender for editing the 3D objects. Cars should be red, smooth and reflective, so that’s what I did. I’m not a good modeller, so I didn’t bother with windows on the car. It looks a bit like a toy car. That’s why I made the buildings out of wood. I imagined the game was something a child played with a toy car and some wooden boxes. It reminded me of the Terry Gilliam movie Time Bandits. Sorry for my pretentiousness, but the “city” is actually a bit inspired by another Gilliam movie, Brazil (before I changed the texture from flat gray to wood).

The wood texture is from this locker in our office.

The wood texture is from this locker in our office.

Finishing Up

A few hours before the deadline I thought the game was pretty much finished. Then I realized that the game needed a minimap, a counter for how many cones you have left to find, a damage meter and polishing like fading in/out the screen and the music. Work tends to expand to fill the time available, so in the end I submitted the game three minutes before the deadline. As usual.

A screenshot from the compo entry.

A screenshot from the compo entry.

In the end, I think the game turned out pretty nice for a game jam. Of course I can think of millions of possible improvements, but I’m still happy about how it went. Please let me know what you think.

EDIT: The game name obviously sucks as I keep on calling it Uncontrolled Acceleration instead of Unintended Acceleration. Fixed that now.

I’m… wait for it… in!

Posted by (twitter: @vilcans)
Wednesday, December 9th, 2015 5:43 pm

Yup, I’m back. This time I’ll spend most of the time at the office of my company Resolution Games.

I’ll probably follow my ordinary process of waking up around 7 on Saturday morning (Central European Time), check out the theme, have a long breakfast while trying to focus on thinking about the theme, getting anxious around noon when I still have no idea, start sketching in the afternoon, then think what the hell, this idea will have to do. And five minutes before the deadline at 3 on Monday morning, I’ll still be coding before finally submitting and thinking of all the features I wish I had the time to implement.

These are the tools I’ll be using compared to last time (LD 32):

Game engine: Unity 5.2.1 (was: Unity 4). A new version with what looks like a bunch of nice features was released this week, but I’ve learned from experience that you don’t just upgrade your Unity version and expect everything to work. That’s why I used the old Unity 4 last time.

Programming language: C# (unchanged). That’s what most Unity developers use, I guess. I also tend to use Python for generating or converting data if needed.

Text editor/IDE: Vim (unchanged), but now with the OmniSharp plugin. After getting used to Vim, I have learned to prefer it as a text editor (Why I switched from Sublime to Vim). The OmniSharp plugin doesn’t work very well for me (user error maybe), so sometimes I switch over to MonoDevelop for some functionality.

Graphics: Gimp, Blender, Camera on my Nexus 5 (unchanged). I’m no artist, but those have served me well for my typically minimalistic graphics.

Audio: Zoom H2N, Bfxr (unchanged). I got good feedback for the voice acting in The Path of Least Resentment, which was recorded with the Zoom. I also made the sound effects with it, and ended up not using Bfxr.

Music: Caustic 3 on Samsung Galaxy Tab (unchanged). I like to take a break away from the keyboard to create the music.

Other tools: Git on GitHub (unchanged). Here’s the repo I prepared earlier. Watch it grow!

Computer: MacBook Pro (unchanged). There is a version of Unity for Linux out, but I haven’t dared trying it out, so I’ll use the Mac. As I’m developing VR games in my day job, I should really use Windows (Oculus don’t support any other hardware for their Rift devices), but nowadays I find it so unfriendly to developers that I try to avoid it.

Wishing myself and everybody else good luck in the competition!


I’m in Ludum Dare 32 too

Posted by (twitter: @vilcans)
Thursday, April 16th, 2015 5:14 pm

All set for LD32

This will be the eighth time I enter Ludum Dare, and hopefully the seventh time I submit an entry.

I’ll be joining the real world gathering at Isotop, Stockholm.

After starting our new game studio Resolution Games, I’m now using Unity daily, so this time I will use new tools compared to last time:

Engine: Unity 4 (was: Phaser)

Programming language: C# (was: JavaScript)

Text editor/IDE: MonoDevelop, Vim (was: Vim)

Graphics: Gimp, Blender (unchanged)

Audio: Zoom H2N, Bfxr (was: Bfxr)

Music: Caustic 3 on Samsung Galaxy Tab (unchanged)

Other tools: Git on GitHub (unchanged)

Computer: MacBook Pro (was: Thinkpad with Linux Mint)

I’m starting off with a Unity project set up in GitHub repo. Consider this my public announcement of base code, but .right now it’s an empty project created inside Unity, but set up to save projects as text files to simplify version control, and a .gitignore. It also contains a Makefile that creates releases for Windows (as a zip file), Linux (as a tar.gz) and Mac (as a dmg), which I hope will be useful to quickly make releases.

Looking forward to this!!!

I’m in for the seventh time

Posted by (twitter: @vilcans)
Friday, August 22nd, 2014 3:06 pm

Not much new in this “I’m in”. I will likely use the same tools as last time:

Engine: Phaser

Environment: Thinkpad running Linux Mint. CoffeeScript as language, edited in Vim (new! changed from Sublime).

Audio: BFXR for sound effects and Caustic 3 on a Samsung Galaxy Tab for music.

Graphics: Definitely Gimp. Inkscape if I need 2D vector graphics. Blender if I need 3D.

Other tools: Tiled as tilemap editor. Git on Github for version control. Nginx as web server. Git and Fabric for deployment to server.

…and this base code.

I’ll be working on the game at the real-world gathering at Isotop, Stockholm.

Wishing all of you good luck and a good time.

“Skin Deep” postmortem

Posted by (twitter: @vilcans)
Thursday, May 15th, 2014 12:52 pm

I was hoping to fix a freeze bug in Skin Deep before I wrote a post-mortem, but I might not find the time to do it before the voting ends. And as I hope everyone who reads this will be interested in playing, rating and above all commenting on the game, I’ll post this now.

I upvoted the theme “beneath the surface” as I thought that both the literal and deeper meaning of those words can be used as a basis for a good game. My thoughts when I saw the theme when I woke up at 7 a.m. (CET) revolved around what can be hidden behind the surface of people. Specifically I thought about the expression “Beauty is only skin deep”. From there, it was a short step to come up with the morbid idea of a surgery game where you peel the skin off a face.

Skin Deep screenshot

At first my idea was to use the game mechanics from Qix, where you move around freely on the playfield, and once you close a polygon, that part of the playfield is cleared.

Qix in-game screenshot

I though a bit about it, but then came up with the final idea where you can only move along premade edges, which I thought would be easier to implement and also a bit different. The interesting thing with the game mechanics in Skin Deep is that you’re your own enemy. The challenge is to not wind up in a dead end.

Tools used

I ended up using most of the tools I mentioned in my I’m in post.


Phaser, a Javascript library for 2D games.

CoffeeScript as a programming language.

Sublime Text 3 for editing code.


MakeHuman, software for creating realistic 3D models of humans.

MakeHuman screenshot

At first I tried exporting the 3D model into Blender and render it from there, but I didn’t find out how to get it to render properly, so I just took a screenshot of the MakeHuman window. MakeHuman rendered the eyes very dark, which just added to the creepiness of the game.

Even though I didn’t end up using Blender for any 3D editing, I still used it for creating the wireframe mesh. I’ve sometimes used Inkscape for editing 2D content for games, but the nice thing about Blender is that it’s easy to get the data out from it using its built-in Python API. And Blender could give me all the data I needed: vertices, edges and faces (polygons).

Editing 2D vertices in Blender

For the skin-less face, I created a mashup of anatomical images using GIMP.


I created the music in Caustic 3 on a Samsung Galaxy tablet. Listen on SoundCloud.

The sound effects were made in Bfxr.

What went right

For once I made a game that has both music and sound effects. Success! :-)`The music is very simple, just two major chords played slowly in different variations, some drums and very minimalistic bass. Still it gives the game a certain mood.

What went wrong

Since I’ve turned freelance, I don’t have an office to work in. My plan was to spend time at libraries and cafés, but I didn’t get around to it for several hours. I lost some inspiration when I was at home and felt I neglected my family in the other rooms. It took too much time to get started.

Over-engineering the algorithm and data structure for removing polygons. The playfield consists of polygons, ranging from 3 to (I think) 5 vertices, and when the line is closed, I need a way to figure out which polygons are inside it, so they can be removed. For some reason, I didn’t step back and think about the actual requirements, and (tried to) implement an algorithm that required each vertex to keep track of the edges connected to it, and each edge had to keep track of its (one or two) adjacent faces. I’m sure it would have been good for performance if there were millions of polygons, but for this game, I realized too late that I could just check if the center of each polygon is inside the polygon formed by the lines. I simply implemented this using Phaser’s Polygon.contains(x, y) method. Only problem was that this method proved to have a bug, which I found, fixed and submitted a [pull request](https://github.com/photonstorm/phaser/pull/766) for. And I still over-engineered it so the game has a bug that causes the game to freeze sometimes. Sigh. And I’m such a big proponent of KISS.


For next time: Include music. Plan to stay away from home. KISS FTW.

Warmed up and ready

Posted by (twitter: @vilcans)
Tuesday, April 22nd, 2014 3:18 pm

Warmup Collide and Die done!

Collide and Die

Here are my plans:

Sleep until ~7 Saturday morning. Check the theme (announced at 3 a.m. in my timezone). Eat breakfast. Code. Art. Sound. Deliver continuously.


Engine: If I go for 2D, I’ll use Phaser as I did in the warmup. It will be my first Phaser game. Anyway it will be HTML5 based again. If 3D, I’ll use Goo Engine.

Environment: Most likely a ThinkPad running Linux Mint. CoffeeScript as language, edited in Sublime. Chrome for running and debugging.

Audio: I hope I’ll get some audio in this time, probably using BFXR for sound effects and Caustic 3 or OpenMPT for music. Audacity for editing and conversion.

Graphics: Definitely Gimp. Inkscape if I need 2D vector graphics. Blender if I need 3D. Maybe even Photoshop.

Other tools: Tiled as tilemap editor. Git on Github for version control. Nginx as web server. Git and Fabric for deployment to server.

EDIT: Forgot to link to my base code: It’s the master branch in this repo.

Is this minimalist enough for you?

Posted by (twitter: @vilcans)
Saturday, April 27th, 2013 10:08 am

Screenshot from 2013-04-27 19:04:58

I’m in for the fourth time

Posted by (twitter: @vilcans)
Wednesday, April 3rd, 2013 3:35 pm

Yeah, I’m in.

I’ll most likely make a browser based 3D game, using my company’s game engine Goo Engine, which will be released publicly before the competition. The other tools I’ll probably use are:

Development environment: Windows 7
Programming: Sublime Edit, CoffeeScript
2D graphics: Gimp, Inkscape, Photoshop
3D modeling: Blender
Audio: BFXR
Music: SunVox

Just like last time, there’ll be a real-world gathering at Goo Technologies office in Stockholm, so that’s where you’ll find me.

Hoping for an inspiring theme.


Post-compo version of “My First Ping-Pong Massacre”

Posted by (twitter: @vilcans)
Sunday, January 6th, 2013 4:58 pm

Based on some of the feedback I got for my game, I made a post-compo version. There are still improvements to make, like adding audio for more villainy pixel destruction fun.

(Compo version here.)

My First Ping-Pong Massacre (post compo version)

Is this controversial?

Posted by (twitter: @vilcans)
Thursday, December 20th, 2012 1:43 pm

At first I wasn’t very inspired by the theme. I had voted it down. At first just because I wasn’t inspired by it, but with the recent school shooting, anything where you would play a villain with guns was unthinkable. Not that I’m afraid of a controversial subject. In my opinion, games as a cultural expression has every right to bring up sensitive subjects, just like books and movies can. But this time we had gathered over 10 people at our office for a Ludum Dare gathering. It wouldn’t be appropriate to cry by the computer, I thought.

My first ideas not involving crazy people with handguns were pretty boring: just reversing classic game ideas like Pacman or Donkey Kong. The funniest idea I had was one where you would play one of the aliens in Space Invaders. (“Keep the formation, soldier!”) But that’s more fun as an idea than when executed.

In the end I came up with a concept  that was controversial, but perhaps a bit more subtle. It seems nobody that has played the game hasn’t even noticed. Was I too subtle, or have we gotten so numb that we don’t even react when men, women, children and goats are slaughtered in a way similar to what’s been happening recently in the real world?

Play My First Ping Pong Massacre


I’m in Ludum Dare 25

Posted by (twitter: @vilcans)
Friday, December 14th, 2012 2:53 am

I will participate this time too. It will be my third Ludum Dare. My first was LD24 which turned out pretty well, while LD25 was a failure.

We‘ll be hosting a real-world meetup at our office in Stockholm, so I won’t be able to focus 100% on the competition. To keep things simple, I think I’ll make a 2D game this time.

The game will be web based, using either a 2D <canvas> or WebGL. I will start with this base code, which I hereby declare according to the compo rules.

My toolbox contains:

  • Development environment: Linux Mint, Windows 7
  • Programming: Sublime Edit, CoffeeScript, nanoc
  • 2D graphics: Gimp, Inkscape, Photoshop, Paint.net
  • 3D modeling (in case I need it): Blender
  • Audio: BFXR
  • Music: FamiTracker


Palette lookup image

Posted by (twitter: @vilcans)
Saturday, November 24th, 2012 6:10 am

In my charity game jam project, I’m doing real-time raytracing.

Real-time raytracing!? On a NES?

Yes. Not very realistic, I know. But at least I’m restricting the resulting image to use the palette of the NES.

What I do is for each true colour in RGB format, I map it to the closest colour in the NES palette. Well, actually I don’t do that. A GLSL shader does that. And it uses the following image as a lookup table.

Click to enlarge to 1024 x 32 pixels. Feel free to use this image if you too need to map RGB to the NES palette.

As you can see, the image contains 32 squares of 32×32 pixels each. The red component has the same value inside each square, and varies from zero in the leftmost square and full in the rightmost square. Within each square, the green value is mapped to the horizontal coordinate, and blue to the vertical coordinate.

So what you need to do to convert a color to the NES palette is to convert R, G and B to values in the range 0 to 31. (Just divide them by 8 and round down if you use 8-bit RGB). Then look up the pixel at

x = R * 32 + G
y = B

Here are screenshots of the resulting rendering from Firefox and Chrome respectively. I added some ordered noise to the RGB values before submitting them to the lookup image, to get some dithering.

(I haven’t found out how to do a 2x scale on a canvas in Chrome and have it rescaled without smoothing. This is why the Chrome screenshot is blurry.)

Oh, and a plug: If you’re in Stockholm, come join our real-world gathering for Ludum Dare 25.

[cache: storing page]