The Still Life | Core Engineering
The Still Life | Core Engineering

The Still Life is my own project, a quiet, no-combat game about taking over a distiller's atelier on a Belle Époque hillside. On the surface you're just running the shop: orders come in on the ledger, you distill and blend perfumes and soaps and pomades, you sell them, the place slowly comes back to life. You slowly come to find that your predecessor was working on something else down in the cellar, and the deeper you get into their notes the clearer it becomes that under the right formula a preparation stops behaving like a scent at all. It's occult chemistry dressed up as a craft game, built in Unreal 5.

I made one call early that ended up shaping everything: systems and data first, worldbuilding last. It sounds backwards (normally you'd want something you can walk around in as fast as possible), but it was a deliberate choice so I didn't get burned out spending months and months building art assets without any semblance of an actual game underneath. So the rule is that nothing gets dressed until the systems and tools beneath it are actually done. It's slower up front and it takes some discipline to not drift off into Houdini-world building procedural chairs or tables, but it's been working well so far.

The architecture is subsystems all the way down. Crafting, inventory, orders, saves, the calendar, the portal logic: each one is its own subsystem with a clean edge, and instead of reaching into each other they talk over an event bus (another subsystem). This mostly means I can rip one apart and rebuild it without the whole game noticing. Everything's identified by gameplay tags rather than hardcoded lists, so items and recipes and portal destinations stay open-ended instead of being an enum that I have to keep extending. The crafting is two stages. You extract raw ingredients into essences at a station, then blend the essences into a product. I deliberately put all the "what do you actually get" decisions in the first stage so the second one is completely deterministic. If you know your inputs you know your output (though there is some trial & error to make the highest quality output).

One of the strongest aspects of the engineering is actually one of the most mundane. I don't author content in the editor. Recipes, ingredients, orders, the dioramas, the supplier lists, the little narrative fragments: it all comes in from CSVs through an import commandlet that spits out the data assets. So "designing content" is editing a spreadsheet instead of clicking through Unreal's property panels for an hour, and regenerating every single piece of authored content in the game is as simple as re-running the commandlet.

The order board is the piece I probably over-engineered. The customer requests aren't a fixed list, they're generated at runtime from a phrasebook: a bank of fragments (a customer, an occasion, the actual request, a constraint or two) that get stitched into an order on the fly. The hard part isn't picking the fragments, it's making the result read like a real person wrote it: matching articles to nouns, keeping the tenses agreeing, not spitting out "a order for a incense." So there's a small grammar layer sitting over the assembly that handles agreement and all the awkward edge cases, and it only ever hands you orders for product lines you've actually got the station to make. The end result is a board that always has believable, sensible work on it without me needing to hand-author thousands of orders.

More artwork