Introduzione
Per chi si ricorda le vecchie avventure testuali dei primi anni '80 e le ha presto abbandonate per forme di intrattenimento più "moderne", queste pagine possono sembrare decisamente obsolete. Che senso ha, dopo trent'anni, scrivere un'avventura testuale? Il presente tutorial non risponde a questa domanda (anche se probabilmente la risposta alla domanda è... che un senso non ce l'ha!), ma vuole invece presentare uno dei più moderni strumenti studiati appositamente per creare avventure testuali: Inform7 di Graham Nelson.
Quando ho scoperto Inform7 mi ci sono immediatamente appassionato, ma purtroppo mi sono anche scontrato subito con il limitatissimo, diciamo pure inesistente, supporto per le altre lingue. Infatti, Inform7 è orientato all'inglese, sia per quanto riguarda il linguaggio di programmazione (e questa non sarebbe una novità), ma anche per l'interfaccia con il giocatore. Dato che il mio desiderio era quello di creare avventure testuali in italiano, l'impresa si stava rivelando impossibile.
Fortunatamente, qualcuno ha generosamente provveduto ed ora esiste un'estensione per Inform7 che fornisce un'interfaccia per la lingua italiana, direttamente scaricabile da inform7.com, il sito ufficiale. L'estensione è Italian di Massimo Stella.
In questo tutorial utilizzo una versione dell'Italian di Massimo modificata in alcune parti e, dato che in certi casi ho un po' esagerato con le personalizzazioni, la mia versione non è più compatibile con la sua. Perciò chi fosse interessato alla versione originale dovrebbe scaricarla dal sito sopra citato.
Scrivere il sorgente
Per quanto riguarda la scrittura del sorgente, non c'è nessuna differenza rispetto ad altri normalissimi editor. Per prima cosa occorre ricordare l'inclusione delle estensioni in italiano (in questo esempio non uso l'originale Italian di Massimo Stella, ma una versione modificata). Quindi, subito sotto il titolo generato automaticamente, scriviamo:
"Il forziere sepolto" by Leonardo Boselli
Include Italian by Leonardo Boselli.
Poiché l'estensione Italian da me modificata usa gli indexed texts per determinare gli articoli e le preposizioni articolate corrette, ha bisogno di una certa quantità di memoria che il formato z5 non riesce a gestire. La soluzione è quella di selezionare nel menù Settings il formato z8 o, nel caso di avventure piuttosto complesse, il formato glulx.
L'avventura di prova è molto semplice:
Il nostro eroe, il pirata Jack, si trova su un'isola deserta, ha una mappa in mano, indossa un giubbotto di salvataggio ed ha una chiave in tasca, mentre una pala, poco distante, è piantata nel terreno. Perché il gioco possa terminare con successo, il pirata Jack deve leggere la mappa e individuare la posizione del tesoro, poi deve scavare ed estrarre dalla fossa un forziere, infine, lo deve aprire ed esaminarne il contenuto.
Si tratta di un'unica stanza e gli oggetti con cui interagire sono pochi, ma dà un'idea di come funziona il linguaggio.
Cominciamo a descrivere la stanza che chiamiamo spiaggia. La descrizione sarà mostrata ogni volta che si entra in questa a stanza, ma non essendocene altre in questo caso, sarà visualizzata una volta sola all'inizio o dopo l'esecuzione del comando GUARDA (LOOK).
The spiaggia is a female room. "La spiaggia dell[']isola è
una sottile lingua di sabbia che circonda un fitta foresta
di palme da cocco. Le onde si frangono sulla battigia ad
intervalli regolari, mentre i granchi corrono sbilenchi
avanti e indietro alla ricerca di cibo."
Ora forniamo una descrizione anche per gli elementi con cui il giocatore non interagirà ma che sono citati nella descrizione della stanza.
The granchi is a plural-named scenery in the spiaggia.
The description is
"Grossi granchi dalle potenti chele cercano cibo
nella sabbia. Meglio stare alla larga!"
The sabbia is a female scenery in the spiaggia.
The description is
"La sabbia della spiaggia è molto sottile.
Non deve essere difficile da scavare."
The onde is a female, plural-named scenery in the spiaggia.
The description is
"Le onde superano la barriera corallina,
dove il vento teso strappa dalle creste brani di spuma,
e si frangono rumorosamente sulla spiaggia."
The fitta foresta di palme da cocco is a female scenery.
The description is "Le palme da cocco formano
una fitta foresta impenetrabile."
Ora gli oggetti (thing) con cui ci sarà un'interazione. Prima la pala:
The pala is a female thing in the spiaggia. "Una pala piantata
nella sabbia fa bella mostra di sé, poco distante."
The description is "Una robusta pala, ottima per scavare."
Specificare female thing serve per far capire al sistema quale tipo di articolo dovrà essere utilizzato. Il primo testo è chiamato initial description e viene utilizzato quando l'oggetto deve essere citato nella descrizione iniziale della stanza. Invece il testo di description viene visualizzato ad una specifica richiesta del giocatore con il comando ESAMINA (che si può abbreviare con X).
Ora descriviamo la mappa che inizialmente è già in possesso (carried) del personaggio (player):
The mappa is a female thing. The description is "La
mappa indica il luogo dove scavare: in questo momento
la X si trova proprio sotto i tuoi piedi."
The mappa can be examined or unexamined.
It is unexamined.
The player carries the mappa.
Vogliamo tenere traccia di quando la mappa viene esaminata dal giocatore, per consentire il lavoro di scavo solo quando è stato individuato il punto esatto. Per questo specifichiamo la proprietà examined. Quindi dopo che la mappa è stata esaminata, la marchiamo come examined.
After examining the mappa:
now the mappa is examined.
Ora è il turno del giubbotto di salvataggio, che inizialmente è indossato (worn) dal personaggio. Di questo giubbotto deve anche far parte un contenitore, chiamato tasche. Poiché è probabile che il giocatore usi indifferentemente tasche o tasca, è meglio specificare la seconda parola come sinonimo.
The giubbotto di salvataggio is a thing. The description is
"Un giubbotto salvagente di colore rosso, con due ampie
tasche." The player wears the giubbotto di salvataggio.
The tasche is a female, plural-named container.
It is part of the giubbotto di salvataggio.
Understand "tasca" as tasche.
Non rimangono che il forziere e la sua chiave. Il forziere è definito come un contenitore (container) chiuso a chiave (closed, locked) e che si può aprire con una chiave (lockable, nel senso che qualcosa che è lockable deve anche essere unlockable se inizialmente è locked).
The forziere is a closed, locked, lockable container.
The description is "Un antico forziere molto pesante."
Per quanto riguarda la chiave, la mettiamo inizialmente nelle tasche (del giubbotto - ci sono solo quelle) e specifichiamo che apre il forziere.
The chiave d'ottone is a female thing in the tasche.
The chiave d'ottone unlocks the forziere.
The description is "Una vecchia chiave d'ottone.
Deve aprire qualcosa di molto antico."
Dopo aver descritto tutti gli oggetti necessari, occorre specificare qualche messaggio in risposta alle azioni più importanti.
L'azione fondamentale è quella di scavo. Poiché in Inform7 non si considera come azione base, la definiamo (utilizzando la parola digging):
Digging is an action applying to nothing.
Understand "scava" as digging.
Instead of digging:
if the mappa is unexamined:
say "Non sai dove devi scavare.
Prova a consultare la mappa.";
otherwise if the player does not carry the pala:
say "Non puoi scavare a mani nude.
Hai bisogno di un attrezzo.";
otherwise:
now the forziere is in the spiaggia;
say "Dopo aver scavato a lungo, la pala incontra
una superficie metallica.[line break]Togliendo
altra sabbia, scopri un forziere e, con grande
fatica, lo trascini fuori dalla buca."
Quell'instead of digging permette di specificare, con un costrutto identico a quello di molti linguaggi di programmazione, cosa fare se durante l'azione di scavo alcune condizioni sono vere (se la mappa non è stata esaminata, o se il personaggio non ha una pala in mano). Nell'ultimo caso (l'ultimo otherwise) il forziere compare sulla spiaggia, mentre in precedenza non era propriamente in gioco (si dice che era off-stage).
Quando il giocatore tenta di aprire il forziere bloccato senza chiave, suggeriamo di cercare una chiave, ma anche il messaggio standard poteva andare bene.
Instead of opening the forziere
when the forziere is locked:
say "La serratura è bloccata.
Bisogna sbloccarla con la sua chiave."
Quando finalmente il giocatore apre il forziere, elenchiamo il contenuto. In questo caso il messaggio risulta più "drammatizzato" di quello standard.
After opening the forziere:
say "Dopo aver aperto il forziere, ti accorgi,
deluso, che contiene solo un foglietto."
Infine la descrizione del contenuto del forziere...
The foglietto is a thing in the forziere. The description is
"Il foglietto dice: '[italic type]Sapevo che avresti aperto
il forziere![roman type]'"
... e la conclusione del gioco, dopo la lettura del foglietto:
After examining the foglietto:
end the game in victory.