Twine
Salvare un bambino?
Twine è uno strumento opensource* (rilasciato sotto licenza GPL* v3) per la creazione di storie interattive e ipertestuali, sviluppato nel 2009 da Chris Klimas, scrittore e programmatore statunitense. Nato dall’esigenza di offrire a chiunque la possibilità di raccontare storie non lineari senza dover imparare a programmare, si è rapidamente affermato come uno degli ambienti più accessibili e versatili nel panorama della narrativa digitale. Può essere scaricato gratis nel sito ufficiale del progetto (url: https://twinery.org), che consente anche di usarlo online nella versione per browser, senza obbligo di registrazione.
Lo esploreremo entrando subito in una storia interattiva. Nel 1997 il filosofo Peter Singer, noto per il suo pensiero sui diritti animali, ha proposto un esperimento mentale per esplorare la nostra capacità di essere agenti morali su scala globale. L’esperimento è interessante anche perché nasce proprio in ambito didattico, anche se accademico: Singer scrive di usarlo per stimolare la riflessione etica dei propri studenti universitari. Il filosofo chiede dunque loro di immaginare di imbattersi una mattina, nel tragitto verso l’università, in un bambino caduto in uno stagno. Potrebbero salvarlo dall’annegamento, ma per farlo dovrebbero infangarsi. Hanno il dovere morale di farlo? La risposta qui sembra scontata: senz’altro, perché da un lato c’è la vita di un bambino, dall’altro un semplice inconveniente. Allora Singer amplia la prospettiva:
Una volta chiariti tutti i nostri obblighi di salvare il bambino che sta annegando davanti a noi, chiedo: farebbe forse differenza se il bambino fosse lontano, magari in un altro paese, ma ugualmente in pericolo di vita e ugualmente alla nostra portata, senza grandi costi e senza alcun pericolo per noi stessi?49
Questo esperimento mentale chiama gli studenti a rispondere in prima persona e dunque ad immedesimarli. Partendo da qui possiamo creare una storia interattiva che rende più concreta questa immedesimazione, al tempo stesso introducendo diverse variabili. Possiamo ipotizzare che il lettore stia per andare a un colloquio di lavoro, e che gettarsi in acqua significhi perdere una opportunità lavorativa per lui importante, o ricordargli che non è certo che riesca a salvare il bambino, e c’è anzi il rischio che anneghino entrambi. Chiederemo ancora se cambierebbe qualcosa se quel bambino fosse figlio di immigrati, attendendoci una risposta indignata: certo che no! E a questo punto possiamo chiedere:
Apprezzo il tuo sdegno. In effetti sarebbe stato disgustoso se avessi fatto qualche differenza in base al colore della pelle. Ora però consideriamo un’altra situazione. Il bambino che sta per annegare non è nel lago, ma in un Paese lontano. Tu sai che è in pericolo di vita e sai anche che con il tuo intervento si può salvare. Cosa fai?
Il lettore-giocatore ha in ogni momento la possibilità di tornare indietro e decidere di non salvare il bambino; se prosegue fino in fondo, sarà spinto a interrogarsi sui propri criteri morali. Dopo aver giocato in classe, se è tecnicamente possibile (lo smartphone sarabbe perfetto per questo scopo), o ognuno per suo conto, a casa, ci si può confrontare sulle proprie scelte.
La storia è disponibile all’url https://textusweb.netlify.app/salvare-un-bambino
Guida essenziale a Twine
Aprendo il sito twinery.org ci è offerta la possibilità di scaricare l’app desktoo, disponibile per Windows, macOs e Linus, o osare Twine nel nostro browser. In questo caso le storie sono salvate nella memoria locale del browser, ma è possibile anche esportarle in html*, per avere un file giocabile come quello che abbiamo esplorato, o in formato .twee, con il codice, da poter caricare sul browser di un altro computer o sulla versione desktop. La versione online ha le medesime funzionalità di quella per desktop, che ha il vantaggio di una migliore gestione del salvataggio dei file.
L’interfaccia di Twine è organizzata su due livelli principali: la biblioteca (Library), dove risiedono tutte le storie create, e l’editor della storia (Story Editor), dove si costruisce la narrazione.
All’apertura, Twine mostra la lista delle storie presenti. Da qui si crea una nuova storia, si importa un file html* esistente, o si apre una storia già in lavorazione. Ogni storia appare come una scheda con titolo, data di modifica e numero di passaggi (Figura 2).
Se vogliamo continuare a lavorare sulla storia che abbiamo usato come esempio, possiamo caricare il file twine-esempio.twee cliccando su Library e quindi su Import. Dopo aver scelto il file sul nostro computer la storia compare accanto alle altre (Figura 3).
Cliccando sulla storia appena caricata ci troviamo di fronte alla mappa grafica, in cui ogni passaggio (passage) è rappresentato come un rettangolo su una tela virtualmente infinita. Le frecce che collegano i rettangoli rappresentano i link tra passaggi. Questa visualizzazione consente di avere una panoramica della struttura narrativa, che può essere molto complessa. Fondamentale è navigarla utilizzando il menu in alto a destra, che offre tre possibilità: Zoom, per una visione ravvicinata dei passaggi; Show Passages Names Only, che offre una vista più ampia; Show Story Structure Only, che offre una visione d’insieme.
I passaggi si spostano liberamente sulla tela: la posizione non ha effetto sulla storia, ma organizzare visivamente i nodi aiuta l’autore a non perdere il filo della struttura.
Vediamo come procedere per creare una storia. Clicchiamo sulla voce + New in alto a sinistra. Ci verrà chiesto di dare un nome alla nuova storia; quindi selezioniamo Create. Si aprirà una schermata con un primo nodo da editare. Prima di farlo però selezioniamo il formato. Twine funziona con quattro motori o formati (Story Formats), con differenze significative nel layout e nelle funzionalità. Noi useremo il formato SugarCube. Nel menu in alto selezioniamo quindi Twine e quindi, nel menu immediatamente sottostante, Story Formats. Si aprirà a destra la finestra della Figura 5.
Nel riquadro del formato SugarCube clicchiamo sulla stella in basso a sinistra per usarlo come formato di base. Ora possiamo occuparci del primo nodo. Cliccandovi su, entriamo nella modalità di modifica. Si apre la finestra della Figura 6.
Diamo uno sguardo al menu. Intanto possiamo dare un nome al nodo, selezionando Rinomina o Rename (a seconda del browser usato il menu può essere in italiano o in inglese). Possiamo poi settare lo stile (grassetto, corsivo ecc.), il colore, i bordi e l’orientamento del testo. Le altre voci riguardano funzioni avanzate che possiamo tralasciare in questa guida essenziale. Inseriamo dunque del testo nel primo nodo. Nel caso dell’esempio che abbiamo visto, il testo è il seguente:
Stai andando ad un colloquio di lavoro. È molto importante
per te: hai difficoltà economiche e hai a carico tua madre,
gravemente malata. Sai di avere buone possibilità di
superare il colloquio di lavoro.
Vai al colloquio in bicicletta, l'unico mezzo che puoi
permetterti. Lungo il tragitto costeggi un lago. Ti accorgi
a un certo punto di un capannello di persone. Fermi la
bicicletta e chiedi cosa sta succedendo. Ti mostrano un
bambino nel lago. Urla e chiede aiuto: rischia di annegare.
Tu sei fisicamente in forma e sai nuotare bene. Che fai?
[[Proseguo per la mia strada]]
[[Lascio la bicicletta e mi getto in acqua]]
Se ora guardiamo la board, notiamo che sono stati creati due altri nodi, collegati con frecce al nodo iniziale:
Questo è il modo, estremamente semplice, in cui in Twine si creano nuovi nodi: è sufficiente mettere il rimando tra doppie parentesi quadre: [[testo]]. Il nuovo nodo avrà in questo caso il nome del testo che rimanda ad esso. Nel caso del nostro esempio, i due nodi si chiamano: Proseguo per la mia strada e Lascio la bicicletta e mi getto in acqua. Questo costituisce un problema nel caso in cui a quel nodo debbano rimandare anche altri nodi, cosa che avviene spesso in una storia interattiva: in questo caso il testo di rimando dovrebbe essere lo stesso, altrimenti in link non funzionerà; ma può essere che quel testo sia inadatto al contesto del nuovo nodo. Per ovviare a questo problema possiamo stabilire un nome del nodo diverso dal testo che rimanda ad esso, come segue: [[Testo del rimando ->nodo1]]. Questa stringa crea un nuovo nodo al quale sarà possibile rimandare da più nodi, semplicemente indicando il nome del nodo, pur con testi del rimando diversi.
Una volta completata la storia possiamo giocarla per controllare che tutto sia a posto, selezionando Build e poi Play, per poi pubblicarla selezionando Publish to File. Verrà scaricato un file in formato html* che potrà essere usato come tale o caricato in un sito web. Selezionando invece Export AS Twee scaricheremo il file in formato .twee con il codice della storia, che potremo poi ricaricare sulla piattaforma per modificarla.
Importante è il ruolo delle variabili, che permettono di costruire storie in cui le scelte del lettore si accumulano e producono esiti diversi a fine percorso. L’idea è semplice: ogni scelta incrementa un contatore, e alla fine si mostra il testo corrispondente al contatore più alto. Si inizializzano nel nodo di apertura, prima del testo narrativo. Harlowe le esegue senza mostrarle a schermo:
(set: $razionalismo to 0)
(set: $empirismo to 0)
(set: $scetticismo to 0)
In ogni nodo di scelta, la prima operazione è incrementare la variabile corrispondente:
(set: $razionalismo to $razionalismo + 1)
Nel nodo finale si leggono i valori accumulati e si mostra il testo corrispondente al percorso seguito:
(if: $razionalismo > $empirismo and $razionalismo
> $scetticismo)[Hai seguito la strada che Cartesio
ha effettivamente percorso.] (else-if: $empirismo
> $razionalismo and $empirismo > $scetticismo)
[Hai imboccato la strada dell'empirismo
britannico.](else:)[Il tuo percorso non converge
in una direzione netta.]
Questo nodo è tratto dalla storia Il dubbio di Cartesio, disponibile all’url https://textusweb.netlify.app/il-dubbio-di-cartesio, creata per dare un esempio semplice di uso delle variabili. Il lettore si trova nei panni di Cartesio nel momento cruciale delle Meditazioni metafisiche: ogni scelta incrementa una delle quattro variabili e il nodo finale descrive la filosofia che sarebbe emersa se Cartesio avesse seguito quella strada. Il codice è liberamente modificabile e può servire come punto di partenza per storie analoghe.