# Inform e Glulx/RUINS, l'avventura comincia/La porta di pietra (gialla è più carina)

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
E ora come potete procedere? Di affrontare nuovamente gli insetti non se ne parla... avete bisogno di luce. Vi vengono in mente un paio di trovate geniali, come cospargere di benzina l’intera piramide per poterle poi dare fuoco, oppure di abbattere un paio di alberi (a mani nude) per avere della legna da ardere. Ma all’improvviso vi ricordate di avere nel vostro inventario una robusta lampada al sodio da archeologo che "forse" fa proprio al caso vostro. La posate per terra, la accendete e la spingete verso sud. Dopo avere sudato sette camicie e nove fazzoletti, vi ritrovate nello stesso punto di poco fa, quando eravate al buio e a momenti finivate in pasto a quelle orribili creature. Ora, la brillante luce gialla emessa dalla lampada le fa scappare via, ma il passaggio è bloccato da una massiccia porta di pietra gialla.

## La porta di pietra (gialla è più carina)

In Inform bisogna distinguere due tipi di oggetti: quelli che fungono da scenario, e quelli che fungono da contorno. Quelli che fungono da scenario (nel nostro caso Forest, Square_Chamber, Corridor) si riconoscono perché si richiamano tra di loro attraverso le istruzioni di direzione viste nel terzo paragrafo di questo capitolo. Questi oggetti non possono essere esaminati o manipolati dal giocatore e su di essi non si usa la proprietà initial. All’inizio del gioco, la prima cosa che appare è la descrizione della foresta:
come è giusto che sia, la curiosità porta spesso a voler esaminare in dettaglio qualche oggetto citato, come ad esempio gli ulivi cupi:
ma la risposta non sembra essere delle migliori. Ora, dal momento che l’oggetto Forest funge da scenario, se vogliamo che Inform "veda" gli ulivi cupi dobbiamo definire un nuovo oggetto:
e a questo punto il problema è risolto:
Gli oggetti che fungono da contorno, invece, possono appartenere a uno scenario o al giocatore stesso, e possono essere esaminati e manipolati da quest’ultimo (a meno che, ovviamente, non abbiano l’attributo static o scenery). Praticamente, quasi tutti quelli che abbiamo visto finora.
Passiamo ora a esaminare l’oggetto sodium_lamp (la lampada al sodio):
L’attributo switchable indica che l’oggetto in questione può essere acceso (on) o spento (off), mentre la variabile locale battery_power funge da "batteria", e viene decrementata di 1 a ogni mossa del giocatore con la lampada accesa (operazione che, come già sapete, si effettua tramite un daemon). Quando battery_power vale zero (dopo cioè che il giocatore ha effettuato 100 mosse con la lampada accesa), la batteria si scarica e la lampada non può più essere usata.
Per quanto riguarda la proprietà describe, il suo messaggio viene stampato sempre (mentre il messaggio della proprietà initial non viene più stampato una volta che l'oggetto è stato rimosso). Se ad esempio il giocatore si trova nel Grande Altopiano e posa la lampada accesa a terra, l’oggetto sodium_lamp viene rimosso dall’inventario e inserito nella locazione Forest. Se vogliamo quindi che Inform stampi a video il messaggio "La lampada al sodio, posata a terra, si sta lentamente consumando.", dobbiamo usare questa proprietà che ha, tra l’altro, la priorità su initial.
Per quanto riguarda invece l’azione SwitchOn (usata per stabilire quello che accade quando l’oggetto a cui si riferisce è acceso), dobbiamo dare un’occhiata a una particolare condizione if che le appartiene: (parent(self) hasnt supporter && self notin location) Questo è un modo un po’ complicato per far sì che Inform si chieda se la lampada, quando deve essere accesa, si trovi nell’inventario del giocatore oppure no. L’istruzione parent(self) ci permette di sapere, in qualsiasi momento, chi è il "possessore" della lampada al sodio: se si trova nell’inventario il parent (che in inglese significa "genitore" e non "parente") è il giocatore, mentre se si trova in una locazione il parent è la locazione stessa. Quindi, se ci troviamo ad esempio nel Grande Altopiano e posiamo la lampada a terra, il parent di quest’ultima sarà l’oggetto Forest.
L’attributo supporter si usa per quegli oggetti su cui è possibile posare qualcosa (come ad esempio un tavolo o il pavimento); quindi, ritornando alla nostra condizione if, se l’oggetto che possiede la lampada non ha l’attributo supporter e se la lampada non si trova in quella locazione (e si trova invece nell’inventario del giocatore che quindi non l’ha posata) non è possibile accenderla. Tutto questo per dire che la lampada, per poter essere accesa, deve essere prima posata a terra.
Sempre per quanto riguarda l’azione SwitchOn, un’altra cosa molto interessante da esaminare è l’azione PushDir che permette al giocatore di spostare l’oggetto a cui si riferisce con un comando del tipo SPINGI [OGGETTO] A [DIREZIONE]. Le regole principali da seguire sono tre:
* descriverla sempre sotto la proprietà before;
* richiamare sempre l’istruzione AllowPushDir;
* restituire sempre il valore true con l’istruzione rtrue;
La porta di pietra, invece, è un tipo di door leggermente più complessa di quella vista nel terzo paragrafo (i gradini scolpiti nella roccia, ricordate?):
La prima cosa da notare è un’ulteriore finezza all’interno della proprietà description, perché è previsto un messaggio di descrizione sia quando la porta è chiusa (when_closed) che aperta (when_open). Altra caratteristica che la riguarda, è il fatto che è presente sia nel corridoio che nella stanza del tempio. Ecco quindi cosa accade nella proprietà door_to: se la porta (self) è nel Corridor (se il giocatore, cioè, si trova nel corridoio) ritorna Shrine (la porta dà sulla stanza del tempio); altrimenti (se il giocatore, cioè, si trova invece nella stanza del tempio) ritorna Corridor (la porta dà sul corridoio in pendenza). Per quanto riguarda la proprietà door_dir, se il giocatore si trova nella stanza del tempio la porta di pietra si trova a nord, viceversa se il giocatore si trova nel corridoio la porta di pietra si trova a sud.
Occorre poi, spendere ancora due parole su due nuovi attributi:
* lockable che permette a un oggetto di essere chiuso o meno a chiave (in questo caso con una chiave di pietra, come specificato nell’istruzione with_key stone_key);
* locked che specifica che l’oggetto a cui appartiene è chiuso a chiave.
Ma la chiave di pietra dov’è? È quello che vedremo nel prossimo paragrafo.

## Note

* ↑ Questo problema può essere risolto in maniera più efficace tramite l’utilizzo della libreria scenic.h, che dà la possibilità di attribuire a un oggetto dei nomi "scenici" che estendono la descrizione di default. Ulteriori informazioni sul suo utilizzo potete trovarle nel nono paragrafo del prossimo capitolo.
* ↑ È possibile attuare una gestione semplificata di una door grazie alla librerie doors.h e easydoors.h. Ulteriori informazioni sul loro utilizzo potete trovarle al nono paragrafo del prossimo capitolo.
* ↑ Cliccate qui per scaricare il listato di questo esercizio (il file 4.05.inf).