Sausage Casings

Biomechanoid Repair Shop
22 Nov 2025, 7:41 p.m.

Slightly delayed post because I was sick for a week or so. On the plus side, if you're making a body horror game, all disease is just a form of research, right? Right?

Anyway, having done the very basic gameplay prototype of Biomechanoid Repair Shop, I next wanted to take a stab at dynamic lighting. The mockup has quite a lot of intense lighting, after all. I'm writing this game in the Godot engine, unlike previous projects which were in MonoGame and Java, and conveniently, Godot has a built-in 2D lighting system.

A specific thing I wanted to recreate is what I think of as the "sausage casing" look you can see in a lot of HR Giger airbrush paintings, where a translucent membrane is stretched over a more detailed structure. Of course this might not be possible with pixel art, but I wanted to give it a try.

Pilot in Cockpit (work 380) by HR Giger, 1978. Note the texture in the bottom right.

So I created a simple test graphic of a sausage shape with a translucent, slightly bigger outer hull. Per the recommendation of the Godot docs, I used Laigter to quickly generate normal maps, which are images that tell the lighting engine which parts of the image are pointing in which direction. Initial results were quite promising:

I put all of the graphics I already made through Laigter to create basic normal maps, which didn't have very good results. Generating normal maps just from an image means that the generator has to guess the shape of the object. It can't, for example, know that a panel is flat whereas a tube is cylindrical.

So instead, I switched to drawing height maps for each of the graphics. These are pictures which indicate how far each part of the image sticks out. They're easier to draw than directly drawing normal maps, and Laigter can derive normal maps from them.


Battery: basic image, height map, normal map, in-engine with lighting applied.

This looked better but then I ran into an unfortunate bug with Laigter, which would forget the height maps each time I reopened my project. So I spent a morning writing a small tool that would automatically convert my height maps into normal maps without me having to go via Laigter.

With the additional fine control and some work on the lighting, the game now looks like this:

Next up is going to be sound, plus taking a step back and planning the shape of the game in more detail.

By the way, if you subscribe to my mailing list, you'll get about an email a month with extra commentary and also cat pictures.