Inform e Glulx/RUINS, l'avventura comincia/Una gabbia per un facocero (e l'archeologo che fine ha fatto)?

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Siete ritornati nella Sala del Tempio (dopo aver raccolto la stele ed esservi tolti la maschera), e notate che i cornicioni formano a sudest una curiosa anticamera. Spingete la lampada al sodio verso quella direzione e vi ritrovate davanti a una gabbia di ferro, alquanto sinistra, con la porta aperta. A un esame più attento potete notare che è abbastanza larga da poterci entrare dall'alto; provate allora a entrare, ma gli scheletri che popolano la gabbia ritornano in vita, bloccandovi con le loro mani ossute, schiacciandovi e prendendovi a pugni. Perdete conoscenza e quando vi risvegliate vi rendete conto che è accaduto qualcosa di impossibile e grottesco. Siete fuori dalla gabbia, e vi chiedete come mai. Confusi e storditi, cercate di entrare di nuovo, ma vi rendete conto che non potete fare una cosa simile perché il vostro aspetto è simile a quello di un facocero, o meglio... siete diventati un facocero. Accidenti: e come diamine farete ora a fare la corte alla vostra vicina di casa?


Una gabbia per un facocero (e l'archeologo che fine ha fatto)?[modifica]

Abbiamo visto che in Inform è possibile creare un contenitore con la particolarità di poter essere aperto o chiuso (come ad esempio la cassa da imballaggio). Esiste però anche il caso in cui il contenitore sia trasparente e che dia quindi la possibilità, al giocatore, di vedere gli oggetti in esso contenuti anche se è chiuso (come ad esempio la teca di vetro di un museo). L’attributo che permette di fare quanto detto è transparent:

Il Grande Altopiano
I tuoi appunti menzionano qualcosa circa questa bassa scarpata di calcare, ma la foresta pluviale ne ha rivendicato il possesso. Cupi ulivi crescono ovunque, e una pioggia appena smessa riempie l'aria con una calda nebbia bagnata.
La "Struttura 10" è un cumulo di materiali da costruzione, che una volta avrebbero potuto costituire una piramide sepolcrale, ma della quale ora nulla rimane, eccetto alcuni gradini scolpiti nella nuda roccia che portano giù, nell'oscurità.

Un fungo macchiato cresce dalla terra fradicia, su un gambo lungo.

La tua cassa d'imballaggio giace qui, pronta per contenere eventuali scoperte di alto valore culturale da riportare alla civiltà.

>chiudi la cassa
Ora hai chiuso la cassa d'imballaggio.

>esamina la cassa
Non puoi vedere dentro, perché la cassa d'imballaggio è chiusa.

>

Questo è quello che accade a un contenitore chiuso privo dell’attributo in questione: come è giusto che sia, se il giocatore cerca di esaminare il contenuto della cassa quando è chiusa, Inform stampa a video il relativo messaggio. Cosa accade invece se la cassa ha l’attributo transparent? È presto detto:

Il Grande Altopiano
I tuoi appunti menzionano qualcosa circa questa bassa scarpata di calcare, ma la foresta pluviale ne ha rivendicato il possesso. Cupi ulivi crescono ovunque, e una pioggia appena smessa riempie l'aria con una calda nebbia bagnata.
La "Struttura 10" è un cumulo di materiali da costruzione, che una volta avrebbero potuto costituire una piramide sepolcrale, ma della quale ora nulla rimane, eccetto alcuni gradini scolpiti nella nuda roccia che portano giù, nell'oscurità.

Un fungo macchiato cresce dalla terra fradicia, su un gambo lungo.

La tua cassa d'imballaggio giace qui, pronta per contenere eventuali scoperte di alto valore culturale da riportare alla civiltà.

>chiudi la cassa
Ora hai chiuso la cassa d'imballaggio.

>esamina la cassa
Dentro la cassa d'imballaggio vedi una macchina fotografica a lastre e un giornale di un mese fa.

>

Anche se è chiusa, il giocatore può vedere ugualmente il suo contenuto (immaginate, con un po’ di fantasia, che sia fatta di vetro).

Rimanendo sempre in tema di contenitori, è arrivato il momento di esaminare la gabbia di ferro di Ruins. Ecco una prima versione semplificata:

Object  -> cage "gabbia di ferro"
  with  name 'ferro' 'gabbia' 'sbarre' 'struttura' 'simboli',
        description 
            "Puoi leggere i seguenti simboli: Uccello Freccia Facocero.",
        inside_description
            "Sei circondato dalle sbarre della gabbia.",
        when_open
            "Una gabbia di ferro, di aspetto alquanto sinistro, ha la 
             porta aperta. @`E abbastanza larga da poterci entrare 
             dall'alto e ci sono alcuni simboli sulla struttura.",
        when_closed
            "La gabbia di ferro @`e chiusa.",
  has   female enterable transparent container openable open static;

la novità in questione riguarda la proprietà inside_description, il cui messaggio viene stampato a video solo se il giocatore si trova dentro la gabbia:

Anticamera
I cornicioni formano, a sudest del Tempio, una curiosa anticamera.

Una gabbia di ferro, di aspetto alquanto sinistro, ha la porta aperta. È abbastanza larga da poterci entrare dall'alto e ci sono alcuni simboli sulla struttura.

>entra nella gabbia
Ti trovi dentro la gabbia di ferro.

>g

Anticamera (dentro la gabbia di ferro)
I cornicioni formano, a sudest del Tempio, una curiosa anticamera.

La lampada al sodio, posata a terra, si sta lentamente consumando.

Sei circondato dalle sbarre della gabbia.

>

ma dal momento che il suo aspetto è alquanto sinistro, è facile aspettarsi qualche "scherzetto". Ecco perché Nelson ha previsto la presenza degli scheletri, che si risvegliano e vi aggrediscono non appena entrate nella gabbia, come previsto dal seguente codice:

Object  -> cage "gabbia di ferro"
  with  name 'ferro' 'gabbia' 'sbarre' 'struttura' 'simboli',
        description
            "Puoi leggere i seguenti simboli: Uccello Freccia Facocero.",
        inside_description
            "Sei circondato dalle sbarre della gabbia.",
        when_open
            "Una gabbia di ferro, di aspetto alquanto sinistro, ha la 
             porta aperta. @`E abbastanza larga da poterci entrare 
             dall'alto e ci sono alcuni simboli sulla struttura.",
        when_closed
            "La gabbia di ferro @`e chiusa.",
        after [;
            Enter:
                print "Gli scheletri che popolano la gabbia ritornano in 
                       vita, bloccandoti con le loro mani ossute, 
                       schiacciandoti e prendendoti a pugni. Perdi 
                       conoscenza e quando ti risvegli, ti rendi conto 
                       che @`e accaduto qualcosa di impossibile e 
                       grottesco...^";
                move warthog to Antechamber;
                remove skeletons;
                give self ~open;
                give warthog light;
                self.after = 0;
                ChangePlayer(warthog, 1);
                <<Look>>;
            ],
   has  female enterable transparent container openable open static;

Object  -> -> skeletons "scheletri"
  with  name 'scheletri' 'osso' 'teschio' 'ossa' 'teschi',
  has   pluralname static;

L’oggetto skeletons, come alcuni di voi avranno sicuramente notato, è privo della proprietà description. Questo è un trucco volutamente usato da Nelson per fare in modo che gli scheletri siano "invisibili"; essi cioè, sono presenti, ma il giocatore non lo sa fino a quando non si trova dentro la gabbia. Dopodiché, dopo essere stato bloccato, schiacciato e preso a pugni, il povero archeologo viene trasformato in un facocero:

Anticamera
I cornicioni formano, a sudest del Tempio, una curiosa anticamera.

Una gabbia di ferro, di aspetto alquanto sinistro, ha la porta aperta. È abbastanza larga da poterci entrare dall'alto e ci sono alcuni simboli sulla struttura.

>entra nella gabbia
Gli scheletri che popolano la gabbia ritornano in vita, bloccandoti con le loro mani ossute, schiacciandoti e prendendoti a pugni. Perdi conoscenza e quando ti risvegli, ti rendi conto che è accaduto qualcosa di impossibile e grottesco...

Anticamera (come facocero)

I cornicioni formano, a sudest del Tempio, una curiosa anticamera.

La lampada al sodio, posata a terra, si sta lentamente consumando.

La gabbia di ferro è chiusa.

>

Per chi non lo sapesse, il facocero è un mammifero simile al nostro cinghiale, vivente nelle boscaglie e nelle savane africane. Ha la testa grande e massiccia, con una vistosa criniera dietro la nuca, denti canini diretti lateralmente verso l’alto e in avanti, e due caratteristiche verruche sotto gli occhi. Ora che vi siete fatti un’idea più precisa di quello che siete diventati, ecco come viene definito il facocero in Ruins:

Object  warthog "facocero"
  with  name 'facocero' 'maiale' 'cinghiale',
        initial
            "Un facocero sbuffa e grugnisce nelle ceneri.",
        description
            "Infangato e ringhioso.",
        orders [;
            Go, Look, Examine, Smell, Taste, Touch, Search, Jump, Enter:
                rfalse;
            Eat:
                "Non hai ancora la capacit@`a di fiutare il cibo.";
            default:
                "Un facocero non pu@`o fare una cosa simile. Se non fosse 
                per il peso e per la capacit@`a di vedere di notte, non 
                sarebbe poi tanto peggio di molte persone.";
            ],
  has   animate proper;

Una volta trasformati, a parte spostarvi di locazione in locazione e vedere al buio, sono ben poche le cose che potete fare:

Anticamera (come facocero)
I cornicioni formano, a sudest del Tempio, una curiosa anticamera.

La lampada al sodio, posata a terra, si sta lentamente consumando.

La gabbia di ferro è chiusa.

>apri la gabbia
Un facocero non può fare una cosa simile. Se non fosse per il peso e per la capacità di vedere di notte, non sarebbe poi tanto peggio di molte persone.

>i
Un facocero non può fare una cosa simile. Se non fosse per il peso e per la capacità di vedere di notte, non sarebbe poi tanto peggio di molte persone.

>esamina la gabbia
Puoi leggere i seguenti simboli: Uccello Freccia Facocero.

>no

Il Tempio (come facocero)

La grande porta di pietra gialla è aperta.

Ci sono delle pitture impegnative e vivide qui, troppo lucide per essere guardate e ottenute mediante incisione da parte di un popolo altamente organizzato. Mostrano un sovrano corazzato che calpesta un prigioniero.

Una grande lastra di pietra che funge da tavolo o altare, domina il Tempio.

Sopra il ripiano dell'altare vedi una maschera facciale in mosaico di giada.

>esamina me stesso
Infangato e ringhioso.

>

L’attributo proper è riservato a quegli oggetti il cui nome deve essere trattato come proprio di persona (non per niente a un certo punto rappresenta il giocatore stesso). Per quanto riguarda invece la "trasformazione", tutto verte sull’istruzione ChangePlayer, che deve avere come parametri il nome dell’oggetto in cui il giocatore deve essere trasformato (warthog) e i valori 0 (viene stampato a video solo il titolo della stanza in cui il giocatore si trova  ➨  ad es. Anticamera) o 1 (viene stampato a video il titolo della stanza insieme all’aspetto del giocatore  ➨  ad es. Anticamera (come facocero)). L’istruzione self.after = 0; serve invece a far sì che gli scheletri compaiano una sola volta quando il nostro archeologo entra nella gabbia. Viene cioè, come afferma giustamente Paolo Lucchesi, "tolta" la proprietà after, in modo che non venga più invocata in futuro[1].

Ponendo la proprietà after dell’oggetto cage uguale a zero, risolviamo sì il problema degli scheletri, ma non possiamo più usarla. Possiamo invece ricorrere all’attributo general:

Object  -> cage "gabbia di ferro"
.
.
.
       after [;
            Enter:
                if (self hasnt general)
                {
                   print "Gli scheletri che popolano la gabbia...      
                   move warthog to Antechamber;
                   remove skeletons;
                   give self ~open;
                   give warthog light;
                   give self general;
                   ChangePlayer(warthog, 1);
                   <<Look>>;
                }
            ],
.
.
.
has female ~general enterable transparent container openable open static;

mediante il quale otteniamo lo stesso risultato di prima, senza però dover necessariamente rinunciare alla proprietà in questione.

In Inform, se vogliamo nascondere un oggetto alla vista del giocatore, possiamo anche ricorrere all’attributo concealed:

Object  -> -> skeletons "scheletri"
  with  name 'scheletri' 'osso' 'teschio' 'ossa' 'teschi',
        initial 
           "Ci sono degli scheletri qui.",
        before [;
            Examine: "Sono pieni di ragnatele.";
        ],
  has   pluralname static concealed;

Il risultato ottenuto è assolutamente identico a quello precedente, ma si ha il vantaggio che ora è possibile definire l’oggetto in questione come si vuole. Gli scheletri potrebbero infatti servire in qualche altro ipotetico punto del gioco, e sarebbe davvero un peccato dover obbligatoriamente rinunciare alle proprietà description e initial.

Note[modifica]

  1. Cliccate qui per scaricare il listato di questo esercizio (il file 4.12.inf).