Ludum Dare 34
Coming December 11th-14th Weekend

About Martin Vilcans (twitter: @vilcans)

Freelance programmer from Stockholm, Sweden.


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

Martin Vilcans's Archive

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]( 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,
  • 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.

I give up

Posted by (twitter: @vilcans)
Sunday, August 26th, 2012 5:16 pm

Too long time before I came up with a game idea, too many real-world things to take care of and too little focus on making the right things. Those are the reasons I’m not submitting my game. It’s just not very playable as it is now.

Here’s what the game looks like now with less than an hour to the deadline.

Saturday progress

Posted by (twitter: @vilcans)
Saturday, August 25th, 2012 7:53 pm

I worked on a chess game several years ago. Before that, I have always thought that chess is just for people with pretensions of being smart, but during that project I learned a bit more of the game and became somewhat fascinated by it. The rules are simple, but there’s a lot of strategy in the game. All that is missing, I thought, is a bit more action, power-ups and a level progression.

I never got around to make that game. I won’t really have time to do that during this LD either, but I’m at least making a chess game. Not your grandfathers chess game though. This is “Pawn to King – chess evolved”.

Or at least I hope it will be something playable tomorrow. Here’s what it looks like right now, early Sunday morning.

My base code

Posted by (twitter: @vilcans)
Friday, August 24th, 2012 4:24 pm

Here is my Git repo that currently contains the base code I’ll work on.

The code is a basic web site made with Initializr’s Bootstrap code and three.js for WebGL graphics. The code is in CoffeeScript and everything is assembled into a folder with static files using nanoc. I’ll post a bit more about the technology after the compo.

I’m in!

Posted by (twitter: @vilcans)
Tuesday, August 14th, 2012 4:57 am

Wife away: check.

Kids have babysitter: check.

I’m all good to go.

I’ll probably build a browser game just like last time. I’ll probably base it on the same code.

Stuff I’m likely to use:

Language: CoffeeScript

Libraries: three.js, Jasmine

Development system: Lenovo Thinkpad T420 running Linux Mint. Firefox with Firebug as main development browser.

Tools: Fabric, sfxr, Blender, Gimp, Git, GNU Make

P.S.: Looking for real world gathering in Stockholm!

Experiences and food

Posted by (twitter: @vilcans)
Sunday, April 29th, 2012 7:41 am

I wrote about my experiences from Ludum Dare 23 on my blog. Have a look there to see the technology I used to create my WebGL-based game.

If you’re only interested in food, here are some pics:

Saturday lunch

Sunday lunch

Avocado/banana smoothie

As you can see, I spent most of my time at cafés.

Created 3D model

Posted by (twitter: @vilcans)
Sunday, April 22nd, 2012 12:52 am

After a full night’s sleep, I’m getting back to work. News for yesterday is that I created a 3D model for my ships!

But I haven’t decided yet whether to use ships or zeppelins.

My idea is that if I go with ships, I’ll create a strategy/action game where you control a fleet of ships. Control is indirect. You set a speed and bearing with your mouse and then click another ship to adjust its course, and so on. With more money made, you can buy new ships. With zeppelins, I’m thinking of more like a pure action game, where you fly around the world, picking up and dropping off cargo while avoiding hitting the AI zeppelins.

There are some pros and cons to both.


  • May be difficult to control. Easy to run aground. But maybe that’s a good challenge.
  • Avoids the problem with latitude wrapping at the poles, as you can’t reach them by water.


  • Don’t need collision detection with the ground texture.
  • Will need AI zeppelins to collide with so it won’t get too easy.
  • Looks cool.
  • Hard (for someone like me) to model.


[cache: storing page]