Nell’ultima versione di Il Viaggiatore si arriva ai titoli di coda senza aver scritto una parola. Si tocca un’uscita disegnata su una rosa dei venti o si apre il menu di una persona, e la storia va avanti. Sotto, intanto, lavora il parser di un’avventura testuale: ogni clic gli consegna un comando in italiano, lo stesso che un giocatore potrebbe battere sulla tastiera.
Il 7 ottobre avevo scritto che Il Viaggiatore era un gioco finito e che la 1.12.0 sarebbe stata l’ultima versione. Da allora ne sono uscite altre trentaquattro, trenta delle quali fra il 20 e il 22 ottobre. La storia è ferma dalla 1.12.0; è cambiato tutto quello che le sta intorno. Stavolta però parlo della domanda da cui era partito il progetto, e la risposta adesso c’è: l’esperimento è compiuto. Per spiegare quale esperimento devo partire dal linguaggio in cui il gioco è scritto.
FAVELLA 1, in breve
FAVELLA 1 è il linguaggio di programmazione che ho progettato per scrivere avventure testuali in italiano. Il codice si scrive come prosa, con frasi del tipo La biblioteca è una stanza, e un motore in Python le legge e fa girare il gioco. È open source, ha un sito suo con il manuale e il corso, e oggi è alla versione 1.5.0.
Insieme al linguaggio è nata la galleria di favella.eu: avventure d’esempio con un compito preciso, mettere FAVELLA sotto sforzo e vedere dove cedeva. Ogni gioco scopriva qualcosa che mancava, e il linguaggio cresceva lì dove serviva. Il caso più lontano dal genere è stato un simulatore di guida, una discesa sulla Salerno-Reggio Calabria fatta di sole parole: per reggerla, FAVELLA ha dovuto imparare i comandi senza oggetto e gli eventi silenziosi, come la benzina che cala mentre guidi.
Perché proprio Il Viaggiatore
Il Viaggiatore l’ho scritto a giugno per quella galleria, per far vedere che FAVELLA reggeva una storia lunga. Un uomo torna a piedi al suo paese attraverso un sud rimasto senz’acqua. Le lettere della 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.
Quando il progetto ha cambiato strada ho scelto lui fra i giochi della galleria, perché è una storia breve che si porta dentro complicazioni che le avventure testuali classiche di solito non hanno. La sete detta il passo, e va tenuta d’occhio a ogni mossa. L’acqua è la moneta: si baratta e si regala. Chi incontri si ricorda come l’hai trattato, e più avanti te lo fa pesare. Sette zone, trentanove luoghi, quattordici personaggi, sei finali. Eppure resta fedele al parser: si gioca scrivendo parla con Rosaria o usa la lettera su Cosimo.
Un file .fav dentro un gioco vero
Un file .fav è un semplice file di testo, si fa per dire. L’osteria del paese, quella che vedrete nelle immagini più sotto, nel sorgente del gioco è scritta così:
L'osteria è una stanza.
La descrizione dell'osteria è "Una stanza bassa che sa di vino e di legna. ROSARIA tiene il banco, il grembiule legato due volte in vita. (PARLA CON Rosaria.) A EST un cortile; a NORD la mulattiera che sale alle colline; a SUD la piazzetta.".
La piazzetta collega nord a l'osteria.
L'osteria collega est a il cortile.
Il registro è in l'osteria.
Rosaria è in l'osteria.
Gli altri giochi della galleria finivano in una pagina HTML: il testo e una riga per scrivere, poco altro. Al Viaggiatore invece ho dato fin dall’inizio un’interfaccia sua, piccola, costruita intorno al file. Ed è lì che mi è venuta la domanda.
Con ink, il linguaggio narrativo che inkle ha reso open source, si lavora così da anni: chi scrive prepara la storia in ink, e qualcun altro le costruisce intorno il gioco che si vede, di solito in Unity. 80 Days e Heaven’s Vault sono fatti in questo modo: sotto c’è un copione, sopra un’interfaccia che non te lo fa mai venire in mente. Mi sono chiesto se si potesse fare lo stesso con un file .fav.
Una storia scritta col mio linguaggio, e mandata avanti dal mio motore, può diventare un gioco narrativo professionale? Un’avventura testuale moderna, di quelle che uno apre volentieri?
Il Viaggiatore è servito a rispondere. Da settembre è un’app per Windows e Linux, costruita con Electron, e il motore di FAVELLA ci gira dentro così com’è, in Python, grazie a Pyodide: niente server e niente connessione. Ci ho lavorato in parallelo con un altro progetto, di cui vi parlerò presto.

Il salto: farlo sembrare un gioco
A quel punto ho voluto vedere fin dove si poteva spingere la confezione. Una dopo l’altra sono arrivate le cose che un’avventura testuale di solito non ha:
- Un’apertura. I loghi animati e sonori di Runtime Multimedia e di FAVELLA 1, un avviso, e un trailer di 88 secondi con la sua colonna sonora originale.
- Il colore dei luoghi. In cima allo schermo c’è un panorama che cambia tinta a ogni zona, e sotto il testo è impaginato come la pagina di un libro.
- La musica. Ogni zona ha il suo brano, dalla colonna sonora di The Runtimers fatta con Lyria 3.5, e sui titoli di coda c’è una canzone, La mano sa ancora la forma.
- La voce. Dal 20 ottobre il gioco è doppiato per intero: 878 parti, circa un’ora di parlato fra narratore, personaggi e suggerimenti. È sintesi vocale, lo dico subito. Le voci vengono da Gemini TTS di Google, e quattro personaggi (Imma, Rosaria, Tore e Vito) parlano con ElevenLabs. Chi preferisce può lasciare il testo al proprio lettore di schermo.
Poi sono arrivate le cose da videogioco vero e proprio: i salvataggi con nome e quelli rapidi, trenta trofei, le opzioni a schede, una mappa che si riempie mentre cammini.

L’ultimo passo: giocare senza scrivere
Restava la domanda più scomoda per un’avventura testuale: si può giocare senza scrivere nemmeno una riga?
I pulsanti c’erano già dalla prima versione desktop, accanto alla riga per scrivere, per le uscite e per le risposte dei dialoghi. Erano un aiuto. Il 21 ottobre la 1.29 ha aggiunto il modo «solo pulsanti», in cui la riga sparisce. La 1.36 ha riordinato i pulsanti in una plancia, e il giorno dopo la 1.37 ha tolto il modo misto. Oggi i modi sono due, pulsanti e avventura testuale, e chi apre il gioco per la prima volta parte coi pulsanti.

La plancia
La parte bassa dello schermo è divisa in tre zone che non si spostano mai. Andare ha le uscite disposte a rosa dei venti, il nord in alto, il sud in basso, l’ovest a sinistra e l’est a destra, ognuna col nome del posto dove porta, e «guarda» al centro. Se una direzione non c’è, il suo posto resta vuoto. Qui raccoglie le persone e le cose del luogo. Fare ha Bevi, Mangia e i gesti che quel luogo permette in quel momento. Sotto corre la riga di servizio con l’inventario, lo stato, la mappa e ↶ annulla.
La plancia ha la stessa altezza in ogni luogo, e nei dialoghi le risposte prendono il suo posto senza accorciarla, così il testo sopra non salta. Le misure vengono dalla storia: in un luogo le uscite sono da una a quattro, le cose al massimo cinque, i gesti al massimo due. Prima di disegnare l’interfaccia ho fatto misurare il gioco.

La tendina
Toccando una cosa o una persona del luogo, un oggetto della bisaccia o una parola evidenziata nel testo, si apre lì accanto una tendina con quello che ci puoi fare. Per la tanica sono bevi…, esamina e usa su…; per Rosaria parla con, esamina e usa su Rosaria…. Si gioca anche con la sola tastiera: le frecce passano da una voce all’altra e Invio sceglie.

Sotto c’è sempre il parser
Qui sta il punto vero. I pulsanti e la riga per scrivere arrivano allo stesso posto: ogni pulsante manda al motore un comando che si potrebbe anche scrivere, con le stesse parole del parser. Lo spiega la relazione sull’integrazione di FAVELLA che ho fatto scrivere a Claude dopo l’ultima versione:
La decisione di progetto più fruttuosa è che un pulsante manda sempre un comando che si potrebbe anche scrivere, con le stesse parole del parser.
Si vede nel diario. Scelti Rosaria e poi parla con, nel testo compare › parla con rosaria: è il comando che il pulsante ha scritto al posto mio. Nel modo «avventura testuale» lo stesso dialogo si apre scrivendolo, e le risposte si scelgono battendo il numero.


Per lo stesso motivo il collaudo automatico può giocare attraverso l’interfaccia. Prima di togliere il modo misto l’ho fatto giocare coi soli pulsanti, i dodici percorsi della storia e le tre morti: se qualcosa non avesse avuto il suo pulsante, senza una riga da scrivere non si sarebbe più potuto fare. Adesso lo sappiamo con i numeri.
Le scelte che costano
Con un clic si sbaglia in fretta, e in un gioco dove l’acqua è tutto, un dono fatto per distrazione può costare caro. Così un baratto, un dono, un pagamento o un gesto violento chiedono conferma prima, e mostrano il conto: che cosa dai, e quanto ti resterebbe. Parlare e chiedere invece non chiedono mai conferma.

Per gli integralisti
Chi vuole l’avventura testuale pura la trova nelle opzioni, scheda Generale: la riga per scrivere torna al suo posto e i pulsanti spariscono. Il parser è lo stesso, e le due modalità sono due viste sullo stesso gioco.
Esperimento compiuto
La relazione è lunga e tecnica, e serve soprattutto a chi volesse portare un’altra storia FAVELLA dentro una confezione simile. Alla voce «esito» scrive una parola sola: riuscito. Ha anche una tabella che dice quanto pesa la confezione rispetto alla storia:
| Che cosa | Righe, circa |
|---|---|
| La storia, scritta in FAVELLA | 1.440 |
| Il motore di FAVELLA, in Python | 12.500 |
| Il ponte fra il motore e l’interfaccia | 600 |
| L’interfaccia e la logica di gioco | 15.400 |
| I collaudi | 5.100 |
La confezione è dieci volte la storia, e va bene così. La storia la scrive e la mantiene anche chi non programma, in frasi che si leggono; il resto le si costruisce intorno, come si fa con ink. Secondo la relazione il pezzo più interessante sono le seicento righe del ponte: funzioni che qualunque interfaccia seria vorrebbe, e che oggi stanno nel gioco invece che nel motore. Nella relazione c’è anche l’elenco di quelle da portare dentro FAVELLA.
Dove si gioca
La versione completa è quella desktop, per Windows e Linux: l’installer e la versione portatile per Windows, l’AppImage per qualunque Linux e il pacchetto .deb per Debian, Ubuntu e Mint. Si scarica dalla pagina del Viaggiatore su Runtime Ecosystem oppure dalle release su GitHub, e all’avvio può cercare da sola gli aggiornamenti. Tutte le novità, versione per versione, stanno nel registro delle modifiche.
C’è anche una versione web, che si gioca nel browser e su favella.eu. Ha i pulsanti anche lei, è doppiata e ha il suo trailer, ma è più leggera ed è ferma alla 1.23.0, per scelta: plancia, trofei, mappa, musica delle zone e sequenza finale stanno solo sul desktop.
Il codice è sotto licenza MIT; storia, testi, musica e grafica sono CC BY-SA 4.0, tranne le musiche di The Runtimers e le quattro voci fatte con ElevenLabs.
Questo è l’ultimo articolo sul Viaggiatore, almeno per ora. L’ultima volta che ho scritto «è finito» sono uscite altre trentaquattro versioni, quindi stavolta non giuro. Il codice resta aperto, e in fondo alla relazione c’è una guida pratica per chi volesse chiudere un’altra storia FAVELLA dentro una confezione come questa.
