Saltwake, a big project that’s coming up
Saltwake is the game I’m working on right now and for a good amount of time already, and it’ll be on Steam in January (hopefully). It takes place in Ostrand, a harbour city, during the last six nights of 1999. At a museum preview sixty guests light up from the inside and turn into salt. Ines Varga, who has been with the harbour police for only ten weeks, was at the door that night, and she’s the only one who doesn’t burn.
If you played the cinematic action RPGs from the late 90s you’ll know the look right away: fixed cameras over pre-rendered rooms, everything at 320 by 240, and fights that start right where you’re standing. While you move around a gauge fills up, and when it’s full you can stop time. A dome opens around Ines showing what she can reach, then you pick a target and shoot. She moves freely with the stick, because parasite eve, a game which this is heavily inspired from, moves like that (also it’s easier to move during battles).


How the rooms work
Every room is a still picture rendered in Blender, and Godot only draws the characters on top of it. I don’t build the rooms by hand though. Each room is a data file with boxes, props, lights and cameras, and a script builds the scene in Blender and renders it at 640 by 480, then it gets scaled down to 320 by 240. The game has 98 rooms in the city so far, and 79 more in the sealed levels.
The hard part is that a picture is flat, so when Ines walks behind a table the picture doesn’t know about it. To fix this I load the same meshes from the render into Godot as an invisible matte. It writes depth but no colour, so the table in the picture covers her exactly where the real table would.
This only works if the matte and the picture line up perfectly, so every camera has a check for it. The game draws each piece of the room in its own flat colour, Blender renders the same flat view from the same camera, and then I compare the two pixel by pixel. This is how it looks for the shipyard deck and the cathedral nave:


That check found a few things I’d never see by eye. The museum tanks were sitting exactly on their sills and left a one pixel gap along each one, so now anything sitting on top of something else floats 4 mm above it. Glass shows in the picture but it’s left out of the matte, otherwise Ines would disappear behind a display case instead of showing through it.
Some cameras also turn to follow her. For those I render one wider picture aimed at the middle of the turn, and the game works out where each part of the matte goes in it, so the room stays lined up with the picture no matter how far the camera turns.

Collision
Collision comes from the same data file. Each piece says if it blocks Ines or not, and the floor she can walk on is a set of rectangles, so the walls, the props and the floor always match the picture.

Of course it still went wrong sometimes. While playing I walked around the end of a railing next to a drained tank and fell right in, because the railing ended a metre before the wall. After that I added an audit that goes through every room, pushes Ines out from every edge of the floor and checks that something stops her. The first run found 25 rooms where she could walk through an open archway and right off the edge of the world (you leave through archways with the interact button, same as doors). Now each of those archways has an invisible door that never shows in the render.
The audit runs with the rest of the tests, about six thousand pushes, and I made sure it failed on the tank and the archways first, so when it passes I know it really means something.
The models
Before a model goes into the game I look at a turntable of it and a sheet with its animations, and that’s where most problems show up. The guests at the preview, for example, were standing around with their arms sticking out, because they were using Ines’s idle animation on bodies with the arms modelled further out than hers.


The creatures get rigged by a script that weights each vertex by how close it is to each bone. In the game the bones move depending on what they’re part of, so spines and tails ripple, legs step in pairs, wings beat and jaws open before an attack. The bigger creatures have parts you can shoot off, and when a part is gone, the attack that used it is gone too.

Props render at full detail, around 50,000 faces each, but the matte uses a lighter copy with 8,000 faces, because it only needs the right outline.

When
Saltwake comes to Steam in January 2027 for Windows, fully voiced in English and with Brazilian Portuguese subtitles. You can wishlist it here: https://store.steampowered.com/app/5512160/Saltwake/
Leave a Reply