# Inform e Glulx/RUINS, l'avventura comincia/L'incrocio di Xibalbá (ma è davvero così pauroso)?

Inform e Glulx
Copertina Tutti i moduli · Sviluppo
* IntroduzioneInform e Glulx/Introduzione
* Cosa occorre per iniziareInform e Glulx/Cosa occorre per iniziare
** Compilatore, interprete e altro ancora
** L'installazione
** Perché IF-IDE?
** Per chi non vuole (o non può) usare IF-IDE e Windows Frotz 2002
* Le basi di Inform
** A cosa serve questo capitolo?Inform e Glulx/Le basi di Inform/A cosa serve questo capitolo?
** Benvenuto in InformInform e Glulx/Le basi di Inform/Benvenuto in Inform
** Le funzioniInform e Glulx/Le basi di Inform/Le funzioni
** Variabili numeriche e caratteri specialiInform e Glulx/Le basi di Inform/Variabili numeriche e caratteri speciali
** Un po' di matematica non guasta maiInform e Glulx/Le basi di Inform/Un po' di matematica non guasta mai
** Passaggio dei parametri e ritorno dei valoriInform e Glulx/Le basi di Inform/Passaggio dei parametri e ritorno dei valori
** L'input dei dati numerici: l'istruzione GetnumberInform e Glulx/Le basi di Inform/L'input dei dati numerici: l'istruzione Getnumber
** If (condition) then... else...Inform e Glulx/Le basi di Inform/If (condition) then... else...
** While e do... untilInform e Glulx/Le basi di Inform/While e do... until
** For, break e continueInform e Glulx/Le basi di Inform/For, break e continue
** L'utilizzo delle costantiInform e Glulx/Le basi di Inform/L'utilizzo delle costanti
** Switch... caseInform e Glulx/Le basi di Inform/Switch... case
** Salti ed etichetteInform e Glulx/Le basi di Inform/Salti ed etichette
** Caratteri e stringheInform e Glulx/Le basi di Inform/Caratteri e stringhe
** I vettoriInform e Glulx/Le basi di Inform/I vettori
** Le stringhe numericheInform e Glulx/Le basi di Inform/Le stringhe numeriche
** Le direttiveInform e Glulx/Le basi di Inform/Le direttive
** Il debuggingInform e Glulx/Le basi di Inform/Il debugging
* RUINS, l'avventura comincia
** Il grande altopiano (dalla padella alla brace)Inform e Glulx/RUINS, l'avventura comincia/Il grande altopiano (dalla padella alla brace)
** La cassa d'imballaggio (riuscirete a riempirla tutta)?Inform e Glulx/RUINS, l'avventura comincia/La cassa d'imballaggio (riuscirete a riempirla tutta)?
** Il fungo (velenoso o non velenoso)?Inform e Glulx/RUINS, l'avventura comincia/Il fungo (velenoso o non velenoso)?
** Chi ha paura del buio (gli insetti no di certo)?Inform e Glulx/RUINS, l'avventura comincia/Chi ha paura del buio (gli insetti no di certo)?
** La porta di pietra (gialla è più carina)Inform e Glulx/RUINS, l'avventura comincia/La porta di pietra (gialla è più carina)
** La chiave di pietra (così non si arruginisce)Inform e Glulx/RUINS, l'avventura comincia/La chiave di pietra (così non si arruginisce)
** Il primo tesoro (speriamo che non sia un anello)Inform e Glulx/RUINS, l'avventura comincia/Il primo tesoro (speriamo che non sia un anello)
** La maschera facciale (non di carnevale)Inform e Glulx/RUINS, l'avventura comincia/La maschera facciale (non di carnevale)
** Il ritorno della mummia (non è un film, è tutto vero)Inform e Glulx/RUINS, l'avventura comincia/Il ritorno della mummia (non è un film, è tutto vero)
** L'incrocio di Xibalbá (ma è davvero così pauroso)?Inform e Glulx/RUINS, l'avventura comincia/L'incrocio di Xibalbá (ma è davvero così pauroso)?
** La sfera di pietra pomice (avete indossato il casco)?Inform e Glulx/RUINS, l'avventura comincia/La sfera di pietra pomice (avete indossato il casco)?
** Una gabbia per un facocero (e l'archeologo che fine ha fatto)?Inform e Glulx/RUINS, l'avventura comincia/Una gabbia per un facocero (e l'archeologo che fine ha fatto)?
** La cripta dei nove signori della notte (o sette come i nani)?Inform e Glulx/RUINS, l'avventura comincia/La cripta dei nove signori della notte (o sette come i nani)?
** Un archeologo per un facocero (basta solo che non grugnite)Inform e Glulx/RUINS, l'avventura comincia/Un archeologo per un facocero (basta solo che non grugnite)
** La fine di RUINS è giunta (ma con Inform siete solo all'inizio)Inform e Glulx/RUINS, l'avventura comincia/La fine di RUINS è giunta (ma con Inform siete solo all'inizio)
* Inform e ancora Inform
** La Status LineInform e Glulx/Inform e ancora Inform/La Status Line
** I menuInform e Glulx/Inform e ancora Inform/I menu
** I labirinti e i nomi pluraliInform e Glulx/Inform e ancora Inform/I labirinti e i nomi plurali
** Il tempoInform e Glulx/Inform e ancora Inform/Il tempo
** I coloriInform e Glulx/Inform e ancora Inform/I colori
** I mezzi di trasportoInform e Glulx/Inform e ancora Inform/I mezzi di trasporto
** Su e giù con l'ascensoreInform e Glulx/Inform e ancora Inform/Su e giù con l'ascensore
** Gli NPC (o PNG in italiano)Inform e Glulx/Inform e ancora Inform/Gli NPC (o PNG in italiano)
** Le estensioni (o librerie aggiuntive)Inform e Glulx/Inform e ancora Inform/Le estensioni (o librerie aggiuntive)
** Varie, listati e decompilatoreInform e Glulx/Inform e ancora Inform/Varie, listati e decompilatore
* Inform e Glulx
** Cos'è GlulxInform e Glulx/Inform e Glulx/Cos'è Glulx
** L'installazione di JifInform e Glulx/Inform e Glulx/L'installazione di Jif
** La compilazioneInform e Glulx/Inform e Glulx/La compilazione
** L'esecuzioneInform e Glulx/Inform e Glulx/L'esecuzione
** Da Inform a GlulxInform e Glulx/Inform e Glulx/Da Inform a Glulx
** La grafica e il sonoroInform e Glulx/Inform e Glulx/La grafica e il sonoro
** L'allineamento delle immaginiInform e Glulx/Inform e Glulx/L'allineamento delle immagini
** Avventure senza graficaInform e Glulx/Inform e Glulx/Avventure senza grafica
** I colori e gli stili del testoInform e Glulx/Inform e Glulx/I colori e gli stili del testo
** La personalizzazione della Status LineInform e Glulx/Inform e Glulx/La personalizzazione della Status Line
** output dei datiInform e Glulx/Inform e Glulx/L'input/output dei dati
** VarieInform e Glulx/Inform e Glulx/Varie
** GULL, il manuale ufficialeInform e Glulx/Inform e Glulx/GULL, il manuale ufficiale
* Appendici
** Appendice A - Le azioni principaliInform e Glulx/appendici/Appendice A - Le azioni principali
** Appendice B - I messaggi della libreriaInform e Glulx/appendici/Appendice B - I messaggi della libreria
** Appendice C - Gli errori della compilazioneInform e Glulx/appendici/Appendice C - Gli errori della compilazione
** Appendice D - La soluzione di RuinsInform e Glulx/appendici/Appendice D - La soluzione di Ruins
** Appendice E - Come usare Windows Frotz 2002Inform e Glulx/appendici/Appendice E - Come usare Windows Frotz 2002
** Appendice F - Le mappeInform e Glulx/appendici/Appendice F - Le mappe
** Appendice G - Scrivere, distribuire e reperire delle avventure testualiInform e Glulx/appendici/Appendice G - Scrivere, distribuire e reperire delle avventure testuali
Modifica il sommario
Vi dirigete verso sudovest e arrivate, finalmente, all’incrocio di Xibalbá. Lo scroscio dell’acqua si sente ovunque e una piccola stele giace su una sporgenza ad altezza d’uomo. A nordest, un percorso scivoloso formato da un’ampia colonna di roccia ricoperta dal ghiaccio vi riporta al Tempio, mentre un canyon prosegue verso l’alto a nord e verso il basso a sud. Percorrete il canyon verso il basso, che però si arresta improvvisamente a un baratro oscuro e vertiginoso. Niente può essere visto o sentito da lì sotto, ma il vero problema è che non c’è nessuna cabina telefonica nelle vicinanze, e non potete così trasformarvi in Superman. Di saltarlo non se ne parla, perché è davvero troppo largo, e siete costretti a tornare indietro. Ripercorrete il canyon nella direzione opposta, ma la più alta e vasta estremità a nord sale soltanto verso una parete irregolare di roccia calcarea vulcanica. Qui, l’unica cosa che potete notare, è la presenza di un'enorme sfera di pietra pomice larga circa due metri e mezzo, su cui vi appoggiate con una mano, incerti sul da farsi.

## L'incrocio di Xibalbá (ma è davvero così pauroso)?

Prima di procedere con la nostra avventura, forse è bene specificare che, come in tutte le avventure testuali che si rispettino, anche con quelle scritte in Inform è possibile salvare lo stato del gioco (tramite il comando "salva") per poi ripristinarlo in seguito (tramite il comando "carica").
Ma ci sono anche altri comandi su cui è bene spendere due parole :
* ancora: ripete il comando digitato in precedenza;
* fine/basta/uscire: come si può facilmente intuire, digitando a scelta uno di questi comandi l’avventura termina; prima però, Inform chiede se si è veramente sicuri di volerlo, e bisogna allora rispondere con un "sì" (o "s") o con un "no" (o "n");
* modalità breve/normale/lunga: questo comando attiva, in qualsiasi momento, una delle tre modalità spiegate nel terzo paragrafo di questo capitolo. Di default, è attivata quella normale (descrizioni lunghe per i luoghi mai visitati prima e brevi se già visitati);
* notify on/off: viene attivata ("notify on") o disattivata ("notify off") la notifica del punteggio. In poche parole, questo comando fa in modo che Inform, nella modalità completa del punteggio, visualizzi o meno il messaggio standard ["Il tuo punteggio è appena aumentato di |n| punti."];
* oggetti: vengono stampati a video i nomi di tutti gli oggetti posseduti nel corso del gioco;
* posti: vengono stampati a video i nomi di tutte le locazioni visitate fino al momento dell’immissione del comando stesso;
* pronomi: vengono stampate a video delle informazioni relative ai pronomi (attivati o disattivati) usati da Inform nella stanza in cui il giocatore si trova al momento in cui viene dato il comando;
* recording on/off: viene attivata ("recording on") o disattivata ("recording off") la trascrizione dei comandi inseriti in un file Script (un file di testo con l’estensione .rec);
* replay: apre il file con l’estensione .rec; prima di eseguire i comandi in esso contenuti, Inform chiede al giocatore se vuole o meno una pausa a fine pagina durante lo scorrimento del testo ("Do you want MORE prompts? (y/n)) a cui deve seguire – se è attiva quest’ultima – la pressione di un tasto qualsiasi da parte dell’utente;
* ricomincia/ricominciare: se per un qualsiasi motivo desiderate ricominciare dall’inizio la vostra avventura, ecco quello che fa al caso vostro;
* transcript on/off: viene attivata ("transcript on") o disattivata ("transcript off") la trascrizione del testo del gioco in un file Script (un file di testo con l’estensione .log apribile tranquillamente da qualsiasi editor di testo);
* verifica/verificare: con questo comando è possibile verificare l’integrità o meno del file di gioco;
* versione: vengono stampate a video delle informazioni relative alle versioni delle librerie di sistema, dell’interprete standard e di Infit;
Torniamo adesso a Ruins: se esaminiamo la stele, ecco il messaggio che viene stampato a video:
Ora siamo finalmente in grado di esaminare la prima azione del sacerdote, lasciata in sospeso nel paragrafo precedente (la correzione del dizionario Maya):
Quando il giocatore dà il dizionario al sacerdote questi, con un sorriso ironico, assegna il valore true alla variabile locale correct dell’oggetto dictionary. In questo modo, quando gli si chiede del dizionario:
il messaggio stampato a video non è più "Il simbolo dell'uccello... molto divertente." ma "Un dizionario? Davvero?". Ecco dimostrata, ancora una volta, l’estrema flessibilità di questo straordinario linguaggio di programmazione, che offre la possibilità di verificare "dall’esterno" il valore di una variabile locale appartenente a un dato oggetto (notate bene: locale, quindi visibile in teoria solo all’interno dell’oggetto di appartenenza).
Focalizziamo ora la nostra attenzione sulla descrizione di Xibalbá: a un certo punto, più precisamente verso la fine, essa dice: "Alla luce diffusa della lampada al sodio proveniente da sopra, sembra essere bianco come i denti di uno squalo.". Ma è davvero così? Facciamo una prova: dirigiamoci verso nordest, spegniamo la lampada e ritorniamo al punto di partenza:
Come potete vedere, la piccola stele continua a essere visibile insieme a tutto il resto, nonostante la lampada al sodio sia spenta. Senza contare che c’è un ulteriore problema: anche le locazioni adiacenti all’incrocio di Xibalbá (rispettivamente l’estremità superiore e l’estremità inferiore del canyon) sono visibili (mentre dovrebbero essere anch’esse al buio poiché situate al di sotto della sala del Tempio). Paolo Maroncelli, altro autore di avventure testuali, consiglia in questo caso di utilizzare l’istruzione objectloop nel seguente modo:
* Per prima cosa bisogna definire una nuova classe denominata Room:
* Occorre poi "marcare" le stanze interessate (Junction, Canyon_N e Canyon_S) con la classe medesima:
* E definire, infine, le due funzioni light_room e nolight_room che potete posizionare, ad esempio, subito sotto la funzione PrintRank:
da richiamare all’occorrenza tramite la proprietà after dell’oggetto sodium_lamp:
I giochi sono fatti. L’istruzione objectloop testa tutte locazioni appartenenti alla classe Room e, se la lampada al sodio è spenta, assegna loro l’attributo ~light, mentre se è accesa assegna loro l’attributo light.
Per quanto riguarda invece l’oggetto chasm (il baratro):
possiamo notare il terzo e ultimo valore che può assumere la variabile di libreria deadflag. Abbiamo visto che se essa vale 1, il gioco termina con una morte "standard" (Inform stampa cioè a video il messaggio "***Sei Morto***"), mentre se vale 2 il giocatore ha terminato l’avventura in maniera positiva (Inform stampa cioè a video il messaggio "***Hai vinto***"). E se vale 3 come in questo caso? Beh, abbiamo l’onore di assistere a una morte personalizzata, nel senso che Inform stampa, alla fine della partita, il messaggio da noi voluto anziché quello standard. Per fare questo però, occorre definire la funzione di libreria DeathMessage, posizionata in genere subito sotto la funzione di libreria PrintRank:
e se proviamo, magari, a lanciarci nel vuoto:
Per rendere più "realistica" la situazione, possiamo rifarci all’attributo talkable che permette al giocatore di parlare anche a un oggetto privo dell’attributo animate:
In questo modo, se viene dato il comando "parla al baratro":
ecco che viene stampato a video il relativo messaggio di risposta. Volendo, possiamo estendere il significato del verbo parla:
e magari, già che ci siamo, definire anche dei sinonimi:
Così facendo, se ora digitiamo i comandi "parla nel baratro", "urla nel baratro" o "grida nel baratro", otteniamo la risposta di prima.
Vediamo, infine, com'è possibile creare un ponte sospeso:
L’oggetto Bridge, presente nelle locazioni Canyon_S e South_side, l’ho inserito, per comodità, subito sotto l’oggetto chasm. Quello che forse può stupire, è che venga dichiarato come door (come abbiamo visto per gli oggetti steps e Stonedoor), ma in fin dei conti non è forse un ponte un punto di collegamento tra due locazioni? Comunque, la vera novità di questo oggetto è l’attributo crossable: Inform, infatti, dà anche la possibilità di creare dei nuovi attributi da applicare a qualsiasi oggetto, tramite l’istruzione Attribute:
All’inizio, il ponte è agibile (l’oggetto Bridge ha l’attributo crossable). Però, se il giocatore attraversa il ponte con più di un oggetto nel suo inventario, ecco quello che accade:
Come potete vedere, il povero archeologo è rimasto intrappolato nel muschio per il resto dei suoi miseri giorni. Se invece attraversiamo il ponte con un solo (o ancora meglio, nessuno) oggetto nell’inventario, è possibile tornare indietro:
Il verbo attraversa corrisponde all’azione Enter, che viene automaticamente attivata da Inform quando si definisce un oggetto di tipo door. Non deve quindi stupire se è possibile utilizzare questo verbo pur non avendolo dichiarato da nessuna parte. Per far sì però che il ponte "funzioni", dobbiamo però fare ancora alcune piccole modifiche agli oggetti Canyon_S e chasm:
Nell’oggetto Canyon_S la direzione sud punta ora all’oggetto Bridge, mentre chasm è ora visibile nelle locazioni Canyon_S e South_side (esattamente come per l’oggetto Bridge); questo per evitare che il baratro sia visibile da una parte sola e non da entrambe. Dal momento poi, che è ora presente l’istruzione found_in, non è più necessario per quest’ultimo oggetto il simbolo ->.

## Note

* ↑ La libreria command_it.h, da me scritta, mostra un menu di aiuto per i comandi. Ulteriori informazioni sul suo utilizzo potete trovarle nel prossimo capitolo.
* ↑ A livello di programmazione, è possibile controllare questo evento tramite la variabile di libreria notify_mode; se essa vale true ➨ notify_mode = true; la notifica del punteggio è attiva, se vale false ➨ notify_mode = false; la notifica del punteggio non è attiva (di default, notify_mode vale true).
* ↑ Cliccate qui per scaricare il listato di questo esercizio (il file 4.10.inf).