Behind the game
About the project
An independent game, a modern systems language, and a copilot: how The Trial of Psyche is made, and why.
How it began
The Trial of Psyche started as an independent project by someone who loves low-level programming. I came from C and C++, and I wanted to learn how to write a game in a modern, simpler language: so I chose Odin.
It has been a learning journey more than anything else. Building a whole game, from the window to the last sound, taught me how the language works: how it lays out data, how it handles memory, what it asks of you and what it gives back. The tale of Cupid and Psyche, from Apuleius' Metamorphoses, gave that journey a shape: a game about seeing and trusting, where whatever looks joined in the dark is joined.
Why Odin
Odin keeps what I like about C, plain data, procedures and explicit control over memory, and drops much of what makes C and C++ heavy: no headers, no build system to fight, no hidden machinery. A single command builds the whole game, and the compiler stays strict (-vet -strict-style) without getting in the way.
Its standard library covers more than I expected: the save file is sealed with ChaCha20-Poly1305 from core:crypto, with nothing to install. And the bindings for raylib ship with the compiler.
Why raylib
raylib gives a window, input, audio and the GPU through a small, readable C API, and nothing more. There is no engine deciding how the game should be made: the renderer, the rules, the solver and the sound are all written by hand on top of it. That was exactly the point.
Everything made in code
There is not a single image or audio file in the game. The palace is built from lists of boxes, the sky, the clouds and the mountain ranges are GLSL shaders, and every sound is synthesised: generative music for each act, a plucked lyre, flute and bells, the ambience of each place, the footsteps. The repository's assets/ folder holds only what is compiled into the game: the levels, the shaders and two fonts under the SIL Open Font License.
Each level is a plain text file, one piece per line. A level checker built on the game's solver proves that every level can be finished, that every piece is needed and that the hidden fragments of the tale are optional.
Some figures: about 20,000 lines of Odin, 19 levels in four acts, more than 100 commits in the first twelve days.
Claude as a copilot
I used Claude Code as a coding copilot. Following my guidance, and always under my supervision, it wrote a good part of the algorithms. The level design is mine: every diorama, every illusion and every puzzle was drawn, played and judged by me, one level at a time.