Lo so che voi aspettate aggiornamenti su Il Mistero della Santa Maria, ma state tranquilli: presto arriveranno. Durante questa pausa, dopo un periodo di sviluppo ossessivo e continuativo, ho comunque studiato, ho cercato di acquisire esperienza, che è la cosa che mi manca di più. Allora ho giocherellato con Il Viaggiatore e l’ho fatto diventare un’app desktop per Windows e Linux, open source e disponibile per tutti come eseguibile, oltre che sul sito di FAVELLA.
Ma mentre ci mettevo mano, mentre lo collaudavo, mi sono reso conto che c’erano dei problemi. Allora ci ho lavorato sopra, ed ecco cosa è diventato…
Una demo che doveva restare una demo
Il Viaggiatore l’ho scritto a giugno, in FAVELLA, per far vedere che il linguaggio regge una storia lunga. Un uomo torna a piedi al suo paese attraverso un sud rimasto senz’acqua. Le lettere di sua moglie hanno smesso di arrivare, e l’ultimo biglietto, in stampatello e senza firma, dice soltanto: «Non è il caso di tornare.» Lui torna lo stesso.
Sette zone, trentanove luoghi, tredici personaggi, sei finali. La sete detta il passo, l’acqua si baratta, e chi incontri si ricorda come l’hai trattato. Stava nella galleria di favella.eu insieme alle altre avventure d’esempio, con una pagina di presentazione da scorrere.
Poi mi è venuta una domanda che con la demo c’entrava poco. Un gioco scritto in FAVELLA si può chiudere dentro un’interfaccia moderna, di quelle che uno apre volentieri? E lo si può far cominciare con qualcosa che un’avventura testuale di solito non ha, cioè un filmato?
Per scoprirlo ho usato Il Viaggiatore. Il motore è quello vero, in Python: dentro l’app gira grazie a Pyodide, che porta Python nel browser, senza server e senza connessione. Il trailer e l’interfaccia invece li ho costruiti fuori, in React.
Prima del testo, un film
Si comincia dal nero. Un secondo di buio, poi il logo di Runtime, poi quello di FAVELLA, e parte il trailer: 88 secondi in dieci inquadrature, e nessun file video. Lo disegna il codice mentre lo guardi. Le lettere della moglie che arrivano sul tavolo una dopo l’altra, poi il vuoto, poi il biglietto in stampatello.

Dopo, l’alba e un viandante con le articolazioni vere che va verso ovest con la propria ombra davanti. La terra crepata sotto i piedi, un invaso di sale che passa dal giorno alla notte, la mappa che si disegna tappa dopo tappa, cinque segni per i cinque modi di chi è rimasto. E il guado, in controluce, dove il viandante si ferma davanti a una figura che non si muove.


Sotto c’è la colonna sonora originale, e il brano fa anche da orologio. Le immagini seguono la musica e non il contrario, così se il computer rallenta non si scollano. Durante il trailer non c’è un solo pulsante a schermo: Esc lo salta, e alla fine resta il titolo con «Inizia il viaggio».

Un libro con dei pulsanti
Il gioco sta in un quadro 16:9 a tutto schermo. In alto c’è un panorama che cambia colore a ogni zona: verde petrolio alla stazione di Acquaviva, ambra sulla piana, grigio di sale all’invaso, rame al paese, blu sulle colline. Al centro il testo, impaginato come la pagina di un libro. A destra il corpo, cioè vita, sete e fame con le loro soglie, l’acqua e il cibo che ti restano, i sette posti della bisaccia, e la fiducia che ti sei guadagnato con chi hai incontrato.

Si gioca scrivendo in italiano, come in qualunque avventura testuale: bevi, parla con Rosaria, usa la lettera su Cosimo. Chi non ha voglia di scrivere però può toccare. Le uscite e le cose del luogo stanno sotto la riga dei comandi, e nei dialoghi le risposte sono pulsanti numerati.


Quello che il collaudo ha tirato fuori
Un gioco così non si collauda giocandolo io un paio di volte. Ho scritto tre collaudi che giocano da soli. Il primo percorre i nove finali, i sei della storia più le tre morti; il secondo rifà otto situazioni precise che non devono rompersi; il terzo è un esploratore che gioca cento partite a caso, con giocatori che sbagliano a scrivere e parlano con tutti, e segnala dove il gioco si inceppa.
Il primo difetto l’ha trovato il collaudo dei finali. Chi moriva di sete non leggeva mai di essere morto di sete. La sete sale di un punto ogni tre turni, e per arrivare da 9 a 13, dove scatta la frase giusta, ne servono dodici. La vita, che parte da 10, finiva in dieci. Si moriva sempre prima della soglia, con la frase generica, e con la fame succedeva lo stesso. Adesso, quando la vita arriva a zero, il gioco guarda la causa vera.
Il secondo l’ha fatto vedere l’interfaccia nuova. Per dare atmosfera avevo scritto gli oggetti dentro la descrizione delle stanze: «Su un mobile, una MAPPA piegata della provincia». Prendevi la mappa, rileggevi la stanza, e la mappa era ancora sul mobile. Con la bisaccia lì a destra che la mostrava, la contraddizione saltava all’occhio.


Poi c’era la storia. Rileggendola ho trovato tic che tornavano da una zona all’altra, la verità sulla famiglia affidata a una voce sola, pozzi senza alternativa: sbagliavi quello e restavi a secco. Adesso la verità si ricompone da quattro fonti (il registro del paese, Concetta, un santino, Onofrio), le prime tre zone hanno un’acqua di riserva, bere senza sete non spreca più una razione, e i finali sono passati a sei.
Resta aperta una questione: l’esploratore muore nell’ottanta per cento delle partite. Gioca a caso, beve quando capita, e un giocatore vero non fa così. Però per sapere se fame e sete sono tarate bene servono partite di persone, e quelle non le posso scrivere io.

Salvare senza fotografare
I salvataggi sono sei, più uno automatico che si scrive a ogni cambio di luogo. F5 salva, F9 carica, e dal menu «Continua il viaggio» riprende l’ultimo.
Un salvataggio però non fotografa il mondo: registra la sequenza dei comandi che hai dato e un’impronta SHA-256 dello stato. Al caricamento il motore rigioca la partita da capo, in una frazione di secondo, e controlla che l’impronta sia identica. Il motore fa sempre la stessa cosa a parità di comandi, quindi la sequenza vale quanto lo stato, e ha due vantaggi: ANNULLA funziona anche subito dopo aver caricato, e un salvataggio sopravvive agli aggiornamenti del gioco. Se una versione nuova cambia qualcosa, la partita si ricostruisce e il gioco te lo dice.

Un eseguibile per Windows e Linux
Per la versione desktop ho scelto Electron e non Tauri, per una ragione precisa: Electron si porta dietro lo stesso Chromium su cui ho verificato il gioco, mentre Tauri su Linux usa il motore web della distribuzione, e l’audio del trailer e il WebAssembly del motore sarebbero dipesi da quello. Pyodide sta dentro il pacchetto, quindi il gioco non tocca la rete.
Ci sono quattro pacchetti: l’installer e la versione portatile per Windows, l’AppImage e il .deb per Linux. L’installer e l’AppImage si aggiornano da soli dalle release di GitHub. Gli eseguibili non sono firmati, e la prima volta Windows SmartScreen chiede una conferma. A ogni modifica la CI costruisce i pacchetti e li mette alla prova: avvia il gioco dentro il pacchetto appena fatto, gioca qualche comando, salva e ricarica. La prova la faccio sul pacchetto, perché è quello che arriva a chi gioca.
La 1.0.0 è uscita il 23 settembre, e lo stesso giorno sono arrivate la 1.1.0 e la 1.1.1, per seguire il motore, che nel frattempo cambiava anche lui.
E FAVELLA ha dovuto crescere
A giugno avevo dichiarato il linguaggio completo, e avevo anche scritto che «completo» non vuol dire finito. Con Il Viaggiatore quella frase è diventata lavoro. La regola che mi sono dato è che nel motore entra solo quello che servirebbe a qualunque autore. Il ponte che passa all’interfaccia uscite, persone e dialoghi resta nell’app del gioco. Il posto della mappa invece nel motore ci è entrato.
La 1.1.0 aggiunge la prima frase nuova dopo la 1.0:
Il posto della mappa è "Su un mobile, una MAPPA piegata della provincia.".
Finché nessuno tocca l’oggetto, la frase compare sotto la descrizione della stanza. Alla prima presa sparisce per sempre, e l’oggetto torna nell’elenco normale. Chi conosce Inform la chiama initial appearance. Ne ho approfittato per sistemare due cose che il gioco aveva fatto emergere: la documentazione diceva che il demone Quando scatta una volta per partita, mentre scatta ogni volta che la condizione torna vera (il codice l’ha sempre fatto), e il compilatore ora avverte quando una regola mette un oggetto in tasca ignorando il limite di trasporto.
La 1.1.0 non è mai uscita da sola: è confluita nella 1.2.0, la prima versione distribuita dopo la 1.0.1 di agosto. Dentro ci sono altre cose venute dal gioco. I salvataggi a sequenza di comandi, con salva mattina e carica mattina, che adesso funzionano nel terminale, sul sito e nei giochi esportati in HTML. I collaudi che giocano, diventati comandi del motore: favella1 esplora e favella1 collaudo --finali. E i sinonimi anche per i verbi dichiarati dall’autore, nati da un verbo getta a cui nel gioco volevo dare dei sinonimi, e il linguaggio non me lo permetteva. Poi la 1.2.1: dopo «prendi la mappa» e «annulla», il comando «ancora» rifaceva proprio la presa appena disfatta. Adesso ripete il comando di prima.
Nessuna storia scritta prima cambia comportamento. È la promessa delle versioni 1.x: aggiungere senza toccare quello che funziona.
Anche favella.eu ha seguito: i download alla 1.2.1, due notizie nuove, due domande in più nella guida rapida su come salvare e su come collaudare giocando. Nella galleria il banner del Viaggiatore è ridisegnato sulla scena del gioco, con il cielo al tramonto, il viandante col cappello e la tanica, i pali della corrente.

Dal banner si gioca nel browser oppure si scarica l’eseguibile. La versione web, su favella.eu/esperimento, è la stessa del desktop, con il taccuino e i loghi. Cambiano due cose soltanto: Pyodide arriva dalla rete, e il motore è quello del sito.
Dove si trova
Gli eseguibili sono sulla pagina delle release, il codice sul repository GitHub. Il codice è sotto licenza MIT; la storia, i testi, la colonna sonora e la grafica sotto CC BY-SA 4.0, quindi si possono riprendere e modificare, citando da dove vengono e lasciandoli liberi allo stesso modo.
