Inform e Glulx/RUINS, l'avventura comincia/La maschera facciale (non di carnevale)

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

Dopo aver riposto la statuetta pigmea nella cassa d’imballaggio, ritornate nel corridoio e, spingendo la lampada verso sud, varcate la soglia di quella che, alla luce della lampada al sodio, si rivela essere la sala di un magnifico Tempio che mostra segni di scavi da preesistenti miniere di calcare. Verso il lato occidentale, due lunghi cornicioni si dirigono a sud, e delle pitture particolarmente vivide e impegnative mostrano un sovrano corazzato che calpesta un prigioniero. Il Tempio poi, è dominato da una grande lastra di pietra sulla cui superficie giace una maschera facciale in mosaico di giada. La osservate attentamente per un po’, e ne deducete che è troppo bella per appartenere a una compagnia teatrale, e che quindi è autentica; soddisfatti del vostro immenso "acume archeologico", provate a indossarla (non senza averla prima fotografata) ma vi accorgete che non c’è neanche uno specchio per vedere come vi sta. Improvvisamente, attraverso gli occhi di ossidiana della maschera, qualcosa appare davanti ai vostri occhi increduli: un sacerdote mummificato, che attende che voi parliate.


La maschera facciale (non di carnevale)[modifica]

Alcuni oggetti definiti all’interno di un’avventura testuale hanno la caratteristica di poter essere indossati (e successivamente tolti) dal giocatore: ne costituiscono dei classici esempi un orologio, un paio di guanti, una maglietta e, ovviamente, una maschera, definita in Ruins come segue:

Treasure -> -> mask "maschera facciale in mosaico di giada"
  with  name 'giada' 'mosaico' 'facciale' 'maschera' 'faccia',
        initial
            "Una maschera facciale in mosaico di giada @`e appoggiata 
             sull'altare.",
        description
            "Sarebbe stupendo se si potesse esporre nel museo.",
        after [;
            Wear:
                move priest to Shrine;
                if (location == Shrine)
                    "Guardando attraverso gli occhi di ossidiana della 
                     maschera in mosaico, si rivela una presenza
                     spettrale: un sacerdote mummificato aspetta che tu 
                     parli.";
            Disrobe:
                remove priest;
            ],
        cultural_value 10,
  has   female clothing;

Come potete vedere, un oggetto di questo tipo è contraddistinto dall’attributo clothing. Quando la maschera viene indossata (wear), l’oggetto priest (il sacerdote) viene spostato nella sala del Tempio; se poi il giocatore si trova nella sala, Inform stampa a video il relativo messaggio. Quando la maschera viene invece tolta (disrobe) il sacerdote scompare. Ma la vera novità di questo oggetto, sta proprio nella sua definizione, perché al posto di Object troviamo ora Treasure: come mai?

È arrivato il momento di parlare delle classi. Esse si usano quando si vuole far sì che uno stesso codice venga utilizzato da più oggetti. Nel paragrafo precedente abbiamo definito l’oggetto statuette nel seguente modo:

Object -> statuette "statuetta pigmea"
  with  name 'serpente' 'maya' 'pigmea' 'spirito' 'preziosa' 'statuetta' 
             'statua',
        initial
            "C'@`e una preziosa statuetta maya qui!",
        description
            "@`E una statuetta minacciosa di uno spirito pigmeo di 
             aspetto quasi grottesco. Ha un serpente intorno al collo.",
        before [;
            Take, Remove:
                if (self in packing_case)
                    "@`E meglio aspettare che sia la fondazione Carneige 
                     a disimballare dalla cassa un manufatto cos@`i
                     prezioso.";
                if (self.photographed_in_situ == false)
                    "Questi sono gli anni '30 e non i tempi andati. 
                     Prendere un manufatto  senza prima registrarlo 
                     equivale a un saccheggio.";
            Photograph:
                if (self has moved) "Cosa? Vorresti contraffare una 
                                     registrazione archeologica?";
                if (self.photographed_in_situ) "Non di nuovo.";
            ],
        after [;
            Insert:
                if (second == packing_case) {
                    score = score + self.cultural_value;
                    if (score == MAX_SCORE) deadflag = 2;
                    "Depositat", (genderandnumber) noun, " al sicuro!";
                    }
            Photograph:
               self.photographed_in_situ = true;
            ],
        cultural_value 5,
        photographed_in_situ false,
  has   female

Nella nostra avventura, la parte di codice relativa alle proprietà after e before è quella da mettere in comune tra più oggetti (i diversi tesori che il giocatore deve raccogliere e riporre nella cassa per poterla terminare). Ecco perché è stata definita la classe Treasure:

Class   Treasure
  with  before [;
            Take, Remove:
                if (self in packing_case)
                    "@`E meglio aspettare che sia la fondazione Carneige 
                     a disimballare dalla cassa un manufatto cos@`i 
                     prezioso.";
                if (self.photographed_in_situ == false)
                    "Questi sono gli anni '30 e non i tempi andati. 
                     Prendere un manufatto senza prima registrarlo 
                     equivale a un saccheggio.";
            Photograph:
                if (self has moved) "Cosa? Vorresti contraffare una 
                                     registrazione archeologica?";
                if (self.photographed_in_situ) "Non di nuovo.";
            ],
        after [;
            Insert:
                if (second == packing_case) {
                    score = score + self.cultural_value;
                    if (score == MAX_SCORE) deadflag = 2;
                    "Depositat", (genderandnumber) noun, " al sicuro!";
                    }
            Photograph:
                self.photographed_in_situ = true;
            ],
        cultural_value 5,
        photographed_in_situ false;

In questo modo, possiamo ridefinire l’oggetto statuette come segue:

Treasure -> statuette "statuetta pigmea"
  with  name 'serpente' 'maya' 'pigmea' 'spirito' 'preziosa' 'statuetta'            
             'statua',
        initial
            "C'@`e una preziosa statuetta maya qui!",
        description
            "@`E una statuetta minacciosa di uno spirito pigmeo di 
             aspetto quasi grottesco. Ha un serpente intorno al collo.",
  has   female;

Dal momento che appartiene alla classe Treasure, ne condivide automaticamente tutto il codice in essa contenuto, e lo stesso vale per l’oggetto mask: un bel risparmio, non vi pare?

Altre novità arrivano dall’oggetto stone_table (il ripiano dell’altare), così definito:

Object  -> stone_table "ripiano dell'altare"
  with  name 'pietra' 'tavolo' 'lastra' 'altare' 'grande',
        initial
            "Una grande lastra di pietra che funge da tavolo o altare, 
             domina il Tempio.",
  has   enterable supporter static;

L’attributo enterable si usa per quei contenitori in cui è possibile entrare e, ovviamente, uscire (se sono aperti). Qui però abbiamo anche l’attributo supporter, che fa in modo che il giocatore possa salire sopra l’altare senza però potervi entrare (azione che in questo caso non avrebbe alcun senso):

Il Tempio
Questo magnifico tempio mostra segni di scavi da preesistenti miniere di calcare, specialmente verso il lato occidentale, dove due lunghi cornicioni si dirigono verso sud.

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

>sali sull'altare
Ti trovi sopra il ripiano dell'altare.

Una maschera facciale in mosaico di giada è appoggiata sull'altare.

>g

Il Tempio (sopra il ripiano dell'altare)
Questo magnifico tempio mostra segni di scavi da preesistenti miniere di calcare, specialmente verso il lato occidentale, dove due lunghi cornicioni si dirigono verso sud.

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

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 maschera facciale in mosaico di giada è appoggiata sull'altare.

>

Prima di concludere il paragrafo, proviamo ancora a vedere com'è possibile creare una porta fittizia:

Object  -> StoneDoor "porta di pietra"
  with  name 'porta' 'massiccia' 'grande' 'pietra' 'gialla',
        initial
            "Il passaggio @`e bloccato da una massiccia porta di pietra
             gialla.",
        description
            "@`E solo una grossa porta di pietra.",
        before [;
            Enter: self.vanish();
                   <<Go s_obj>>;
            ],
        react_before [;
            Go: if (noun == s_obj) {
                self.vanish();
                <<Go s_obj>>;
                }
            ],
        vanish [;
            remove self;
            print "Non appena la tocchi, la porta svanisce.^";
            ],
  has   female locked lockable openable;

Questo genere di "trucchi" è molto apprezzato in questo tipo di avventure. In poche parole, ecco come si presenta la nuova StoneDoor:

Corridoio in pendenza
Un corridoio basso e squadrato va da nord verso sud, inclinandosi verso la fine.

C'è una preziosa statuetta maya qui!

Il passaggio è bloccato da una massiccia porta di pietra gialla.

>apri la porta
Sembra essere chiusa a chiave.

>apri la porta con la chiave
Non sembra entrare nella serratura.

>spingi la lampada a sud
Non appena la tocchi, la porta svanisce.

Il Tempio
Questo magnifico tempio mostra segni di scavi da preesistenti miniere di calcare, specialmente verso il lato occidentale, dove due lunghi cornicioni si dirigono verso sud.

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.<br
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.br>
>spingi la lampada a nord

Corridoio in pendenza

C'è una preziosa statuetta maya qui!

>

Apparentemente, sembra essere una vera e propria porta, mentre in realtà è solo un’illusione ottica: basta passarci attraverso (spingendo la lampada a sud o andando verso sud) che questa scompare. Occorre infine dare un’occhiata alle direzioni sud dell’oggetto Corridor e nord dell’oggetto Shrine:

Object  Corridor "Corridoio in pendenza"
  with  description
            "Un corridoio basso e squadrato va da nord verso sud,
             inclinandosi verso la fine.",
        n_to Square_Chamber,
        s_to Shrine;

e

Object  Shrine "Il Tempio"
  with  description
            "Questo magnifico tempio mostra segni di scavi da 
             preesistenti miniere di calcare, specialmente verso il lato 
             occidentale, dove due lunghi cornicioni si dirigono verso 
             sud.",
        n_to Corridor,

in precedenza, entrambe le direzioni puntavano all’oggetto StoneDoor, che era di fatto una vera e propria porta; ora, invece, StoneDoor è un oggetto qualsiasi che non può più fare da tramite per queste due stanze. Ecco quindi, il motivo per cui è necessario cambiarle[1].

Note[modifica]

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