# Inform e Glulx/RUINS, l'avventura comincia/Chi ha paura del buio (gli insetti no di certo)?

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
Siete in una sala di pietra oscura e profonda, pervasa dalla foschia e larga circa dieci metri. Un raggio di sole, proveniente dalla cima della scalinata, la illumina diffusamente, ma le ombre del livello più basso rivelano dei passaggi verso est e sud, che non sapete dove conducono. Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto. Provate a dirigerti verso sud, e vi ritrovate al buio. Vi sentite quasi soffocare, e come se non bastasse, da qualche parte dei piccoli artigli si stanno muovendo velocemente. Il vostro respiro diventa sempre più affannoso, e del sudore freddo vi cola dalla fronte: la mamma vi ha sempre detto di evitare certi posti, ma non le avete mai dato retta, e se ora vi ritrovate in questa pessima situazione la colpa è soltanto vostra. Sentite un ticchettio ai vostri piedi e date un calcio contro qualcosa di cheratinoso che vola via. Il suono si è trasformato in un minaccioso stridio e avete la spiacevole sensazione che questi maledetti insetti vogliano divorarvi: non potete far altro che tornare indietro, salvandovi appena in tempo dai loro pericolosissimi artigli. Questa volta ve la siete vista davvero brutta...

## Chi ha paura del buio (gli insetti no di certo)?

Nel secondo paragrafo di questo capitolo abbiamo visto come mettere in relazione due oggetti fra di loro. Ma se voglio mettere in relazione un oggetto con più oggetti (se voglio cioè fare in modo che un oggetto sia visibile in due o più di locazioni) come posso fare? Diamo un’occhiata alla definizione dell’oggetto low_mist:
Alla penultima riga, l’istruzione found_in fa in modo che la nebbia sia presente nella Sala Quadrata e nel Grande Altopiano; ne consegue quindi, che tutti gli eventi descritti al suo interno si verificano in entrambe le locazioni.
Altra cosa da notare, è che la maggior parte delle azioni in inform, sono incluse in due proprietà: after e before. Nell’appendice A è presente un elenco di tutte le azioni principali presenti in Inform (o meglio, di tutte le azioni principali definite in Infit), che sono a loro volta suddivise in tre gruppi:
* Gruppo 1 rappresentato dai cosiddetti comandi di sistema (come ad esempio "esci", "verifica", "salva", ecc.) che non vengono associati a nessuna proprietà:
if (yesorno) <RESTORE>;
in questo esempio, se il giocatore digita "S", viene caricata la situazione del gioco salvata precedentemente;
* Gruppo 2 a cui appartengono tutte le azioni controllate dalla proprietà after;
* Gruppo 3 a cui appartengono, invece, tutte le azioni controllate dalla proprietà before.
Cerchiamo ora di capire meglio quanto detto. Nell’oggetto Forest, per esempio, abbiamo definito il verbo ascolta nel seguente modo:
e tutto sembra quadrare con quanto fin qui detto. Infatti, andando a vedere la tabella dell’appendice A, vediamo che questo verbo corrisponde in inglese all’azione Listen e che appartiene al gruppo 3. Questo discorso però, è valido fino a un certo punto: nell’oggetto sodium_lamp, che sarà descritto in dettaglio nel prossimo paragrafo, il verbo accendi, appartenente al gruppo 2, è presente nella proprietà before. Perché? Il motivo è da ricercare nel funzionamento di queste due proprietà. Francesco Cordella cerca di farcelo capire proponendo questo semplice esempio:
Abbiamo quindi una cassa chiusa ma apribile. Se il giocatore digita "apri la cassa", Inform apre la cassa, ovvero dà a quest’ultima il valore open. Poi, prima di stampare il messaggio standard ("Hai aperto la cassa"), consulta after e si chiede se c’è qualcos'altro che il programmatore gli ordina di fare prima di stamparlo. Se after non c'è, Inform prosegue e stampa il messaggio standard. Ma se c'è, come nel nostro caso, stampa quello che c'è da stampare:
Se invece sostituiamo la proprietà after con before, ecco cosa accade:
apparentemente tutto sembra andare per il verso giusto, ma non è così: esaminando la cassa infatti, scopriamo che è ancora chiusa. Usando before Inform non apre la cassa, dobbiamo dirglielo noi:
Se tutto questo vi ha confuso un po’ le idee, non preoccupatevi più di tanto e seguite questa semplice regola: quando definite un oggetto e stabilite una certa azione, provate a usare per prima la proprietà relativa al gruppo di appartenenza di quella azione: se fa quello che volete, bene, altrimenti provate con l’altra proprietà. Tenete inoltre presente che, all’interno della definizione di un oggetto, una stessa azione può essere usata in entrambe le proprietà (può cioè essere presente allo stesso tempo sia in after che in before a seconda di quello che deve fare). Se volete, potete provare come esercizio a invertire le proprietà delle azioni di tutti gli oggetti visti finora. Ne vedrete delle belle...
Riportiamo ora la nostra attenzione sull’oggetto low_mist. In Inform, oltre alla after e alla before, esiste un’altra proprietà, chiamata react_before, sulla quale occorre fare alcune considerazioni:
* agisce solo sugli oggetti in_scope (quelli cioè visibili dal giocatore);
* il suo uso più comune è quello di evitare le azioni senza oggetto. Nel nostro caso, infatti, se noun = nothing (se scrivo cioè "annusa" al posto di "annusa l'aria", dove aria è il noun), Inform esegue il codice previsto per l’azione smell definita nella proprietà before (ovvero di eseguire il comando "esamina la nebbia" che, come già sappiamo, stampa a video il messaggio appartenente alla proprietà description dell’oggetto stesso ➨ self);
* alcuni programmatori, come ad esempio Tommaso Caldarola, la usano sull’azione Examine degli oggetti di tipo switchable (di oggetti cioè, che si possono attivare o disattivare, come vedremo meglio nel prossimo paragrafo), evitando così i fastidiosissimi messaggi di libreria del tipo "in questo momento è attivato/disattivato".
Per qualsiasi altra azione eseguita sulla nebbia (ad esempio "prendi la nebbia") viene visualizzato il messaggio di default della proprietà before ("La nebbia non è abbastanza consistente").
Ora possiamo finalmente occuparci del buio, il tema principale di questo paragrafo. L’oggetto Corridor:
non ha l’attributo light. Come abbiamo già visto nel primo paragrafo di questo capitolo, Inform attiva in questo caso la modalità the_dark. La prima cosa da notare è la possibilità personalizzare il messaggio di default, cosa che avviene nella funzione Initialise:
the_dark, a sua volta, viene visto da Inform come un oggetto vero e proprio, al quale si possono relazionare altri oggetti come nel caso del tiny_claws:
La novità principale della definizione di questo nuovo oggetto è l’utilizzo di un Daemon. In Inform, ogni mossa che viene fatta dal giocatore equivale a un turno. Cercando di semplificare il più possibile, possiamo affermare che un Daemon è un particolare oggetto che ci permette di correlare le azioni con lo scorrere del tempo (con l’avanzare cioè, delle numero dei turni). Proviamo allora a vedere in azione l’oggetto tiny_claws:
andando verso nord, si ritorna in una locazione che ha l’attributo light e il daemon, come abbiamo già detto, termina.

## Note

* ↑ Autore di Flamel e Kazan, Francesco Cordella è anche il curatore del sito http://www.avventuretestuali.com/.
* ↑ Tommaso Caldarola è l’autore della bellissima Pecos Town, nonché uno dei programmatori più esperti di questo linguaggio di programmazione. Ulteriori informazioni potete trovarle all’indirizzo http://www.caldarola.net/.
* ↑ Cliccate qui per scaricare il listato di questo esercizio (il file 4.04.inf).