Dietro il gioco
Il progetto
Un gioco indipendente, un linguaggio di sistema moderno e un copilota: come è fatto La prova di Psiche, e perché.
Com'è nato
La prova di Psiche è nato come progetto indipendente di un appassionato di programmazione a basso livello. Venivo da C e C++, e volevo imparare a scrivere un gioco con un linguaggio moderno e più semplice: così ho scelto Odin.
È stato prima di tutto un percorso formativo. Costruire un gioco intero, dalla finestra all'ultimo suono, mi ha fatto capire come lavora il linguaggio: come dispone i dati, come gestisce la memoria, cosa ti chiede e cosa ti restituisce. La favola di Amore e Psiche, dalle Metamorfosi di Apuleio, ha dato una forma a quel percorso: un gioco sul vedere e sul fidarsi, dove ciò che al buio sembra unito è unito.
Perché Odin
Odin tiene ciò che mi piace del C, dati semplici, procedure e controllo esplicito della memoria, e lascia cadere molto di ciò che rende pesanti C e C++: niente header, nessun sistema di build da combattere, nessun meccanismo nascosto. Un solo comando compila tutto il gioco, e il compilatore resta severo (-vet -strict-style) senza mettersi di mezzo.
La sua libreria standard copre più di quanto mi aspettassi: il salvataggio è sigillato con ChaCha20-Poly1305 da core:crypto, senza installare nulla. E i binding di raylib arrivano insieme al compilatore.
Perché raylib
raylib offre finestra, input, audio e GPU attraverso un'API C piccola e leggibile, e niente di più. Non c'è un motore che decide come va fatto il gioco: il renderer, le regole, il risolutore e il suono sono tutti scritti a mano sopra di essa. Era proprio questo lo scopo.
Tutto fatto dal codice
Nel gioco non c'è un solo file di immagine o di audio. Il palazzo è costruito da liste di parallelepipedi, il cielo, le nuvole e le catene di monti sono shader GLSL, e ogni suono è sintetizzato: musica generativa per ogni atto, una lira pizzicata, flauto e campane, l'atmosfera di ogni luogo, i passi. La cartella assets/ del repository contiene solo ciò che viene compilato nel gioco: i livelli, gli shader e due font sotto SIL Open Font License.
Ogni livello è un semplice file di testo, un pezzo per riga. Un verificatore costruito sul risolutore del gioco dimostra che ogni livello si può finire, che ogni pezzo serve e che i frammenti nascosti della favola sono facoltativi.
Qualche numero: circa 20.000 righe di Odin, 19 livelli in quattro atti, più di 100 commit nei primi dodici giorni.
Claude come copilota
Ho usato Claude Code come copilota di programmazione. Seguendo la mia guida, e sempre sotto la mia supervisione, ha scritto buona parte degli algoritmi. Il level design invece è mio: ogni diorama, ogni illusione e ogni enigma li ho disegnati, giocati e giudicati io, un livello alla volta.