Freelance programmer from Stockholm, Sweden.
About Martin Vilcans (twitter: @vilcans)
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 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.
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.
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.
I ended up using most of the tools I mentioned in my I’m in post.
CoffeeScript as a programming language.
Sublime Text 3 for editing code.
MakeHuman, software for creating realistic 3D models of humans.
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).
For the skin-less face, I created a mashup of anatomical images using GIMP.
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.
Warmup Collide and Die done!
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.
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
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.
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?
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
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.
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.
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.
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.
Wife away: check.
Kids have babysitter: check.
I’m all good to go.
Stuff I’m likely to use:
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!
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:
As you can see, I spent most of my time at cafés.
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.