Inform e Glulx/RUINS, l'avventura comincia/La sfera di pietra pomice (avete indossato il casco)?

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

Non potete stare tutto il tempo a poltrire, perché la prima regola che vi hanno insegnato alla scuola serale di archeologia è stata quella di non perdersi mai d’animo. Il vostro fiuto "infallibile" vi dice che dovete dirigervi verso il Tempio, ma pochi attimi dopo aver tolto la mano dalla sfera di pietra pomice, essa comincia rotolare a sud, diretta verso il baratro oscuro e profondo. La rincorrete più veloce che potete, ma non potete fare nulla per impedire che la sfera rotoli giù nel canyon senza controllo per alcuni metri, prima di sussultare nelle fauci del baratro. Con un piccolo rimbalzo, però, vi colpisce di striscio sulla fronte. Perdete i sensi e cadete in avanti sanguinanti; quando riprendete conoscenza, l'estremità sud del canyon continua sopra la sfera di pietra pomice incastrata nel baratro e vi compiacete nuovamente con voi stessi per il vostro incredibile "acume" archeologico. Un osso inciso, più luminoso di quello che sembra, sporge da una polla di limo bagnato nella parete del canyon. Lo raccogliete chiedendovi se piacerà al vostro cane e, dal momento che non potete più proseguire, tornate indietro in direzione della Sala del Tempio.


La sfera di pietra pomice (avete indossato il casco)?[modifica]

Sulla base di quanto abbiamo visto finora, il nuovo codice di Ruins non presenta delle grosse novità, a parte la funzione each_turn dell’oggetto chasm:

Object  -> chasm "baratro pauroso"
  with  name 'oscuro' 'baratro' 'buca' 'pauroso' 'profondo',
        .
        .
        .        
        each_turn [;
            if (huge_ball in parent(self)) {
                remove huge_ball;
                Canyon_S.s_to = On_Ball;
                Canyon_S.description =
                    "L'estremit@`a sud del canyon continua ora sopra la 
                     sfera di pietra pomice incastrata nel baratro.";
                "^La sfera di pietra pomice rotola gi@`u nel canyon senza 
                 controllo per alcuni metri, prima di sussultare nelle 
                 fauci del baratro. Con un piccolo rimbalzo, ti colpisce 
                 di striscio sulla fronte: cadi in avanti sanguinante
                 e... la sfera di pietra pomice diventa pi@`u piccola 
                 oppure @`e la tua mano
                 che cresce, perch@'e ora ti sembra di tenerla, mentre 
                 fissi l'Alligatore, figlio di sette Macao, le teste dei 
                 suoi ultimi avversari infilzati sulle punte, una 
                 congregazione che scalpita per il tuo sangue, e comunque 
                 non c'@`e nulla che tu possa fare e... ma tutto questo 
                 non ha senso e hai un mal di testa martellante.";
                }
            ],
  has   scenery open container;

Se la sfera di pietra pomice si trova nel baratro (if huge_ball in parent(self)), a ogni mossa del giocatore la direzione sud dell’oggetto Canyon_S (l’estremità inferiore del canyon) punta alla nuova locazione On_Ball (la sporgenza di pietra pomice). Per quanto riguarda invece le descrizioni, se la sfera di pietra pomice non è ancora rotolata nel baratro, Inform stampa a video il messaggio "La sfera di pietra pomice rotola giù nel canyon senza controllo..." altrimenti viene stampato a video il messaggio "L'estremità sud del canyon continua ora sopra la sfera di pietra pomice incastrata nel baratro.". Ecco la dimostrazione "pratica":

Estremità superiore del canyon
La più alta e vasta estremità a nord del canyon sale soltanto verso una parete irregolare di roccia calcarea vulcanica.

C'è un'enorme sfera di pietra pomice larga circa due metri e mezzo qui.

>spingi la sfera a sud
La sfera è difficile da fermare una volta che è stata mossa.

Xibalbá

Una piccola stele, o forse una pietra di confine, giace su una sporgenza ad altezza d'uomo.

>g
Xibalbá
Sei a cinquanta metri sotto la foresta pluviale e lo scroscio dell'acqua si sente ovunque: queste profonde ed erose miniere di calcare si estendono come radici. Verso nordest un percorso scivoloso, formato da un'ampia colonna di roccia ricoperta dal ghiaccio, ti riporta al Tempio, mentre un canyon prosegue verso l'alto a nord e verso il basso a sud. Alla luce diffusa della lampada al sodio proveniente da sopra, sembra essere bianco come i denti di uno squalo.

C'è un'enorme sfera di pietra pomice larga circa due metri e mezzo qui.

Una piccola stele, o forse una pietra di confine, giace su una sporgenza ad altezza d'uomo.

>spingi la sfera a sud
La sfera è difficile da fermare una volta che è stata mossa.

Estremità inferiore del canyon
La sfera di pietra pomice rotola giù nel canyon senza controllo per alcuni metri, prima di sussultare nelle fauci del baratro. Con un piccolo rimbalzo, ti colpisce di striscio sulla fronte: cadi in avanti sanguinante e... la sfera di pietra pomice diventa più piccola oppure è la tua mano che cresce, perché ora ti sembra di tenerla, mentre fissi l'Alligatore, figlio di sette Macao, le teste dei suoi ultimi avversari infilzati sulle punte, una congregazione che scalpita per il tuo sangue, e comunque non c'è nulla che tu possa fare e... ma tutto questo non ha senso e hai un mal di testa martellante.

>g

Estremità inferiore del canyon
L'estremità sud del canyon continua ora sopra la sfera di pietra pomice incastrata nel baratro.

>s

Sporgenza di pietra pomice
Una sporgenza improvvisa formata dalla sfera di pietra pomice è conficcata in un punto del baratro. Il canyon tuttavia termina qui.

Di tutte le offerte sacrificali gettate nel baratro, nulla forse sarà recuperato: fatta eccezione per un osso inciso, più luminoso di quello che sembra, che sporge da una polla di limo bagnato nella parete del canyon.

>

Qualcuno di voi può ancora confondersi con la nuova parte di codice relativa alla sfera di pietra pomice (l’oggetto huge_ball):

Object  -> huge_ball "enorme sfera di pietra pomice"
  with  name 'enorme' 'pomice' 'pietra' 'sfera',
        initial
            "C'@`e un'enorme sfera di pietra pomice larga circa due metri
             e mezzo qui.",
        description
            "@`E larga circa due metri e mezzo, sebbene sembri piuttosto 
             leggera.",
        before [;
            PushDir:
                if (location == Junction && second == ne_obj)
                    "L'entrata del Tempio non @`e abbastanza larga.";
                AllowPushDir();
                rtrue;
            Pull, Push, Turn:
                "Non dovrebbe essere cos@`i difficile farla rotolare.";
            Take, Remove:
                "@`E troppo ingombrante.";
            ],
        after [;
            PushDir:
                if (second == n_obj) "Spingere la sfera in salita @`e 
                                      troppo faticoso.";
                if (second == u_obj) <<PushDir self n_obj>>;
                if (second == s_obj) "La sfera @`e difficile da fermare 
                                      una volta che @`e stata mossa.";
                if (second == d_obj) <<PushDir self s_obj>>;
            ],
  has   female static;

Per quanto riguarda l’azione PushDir appartenente alla proprietà before, se il giocatore si trova all’incrocio di Xibalbá e cerca di spingere la sfera (che deve ovviamente trovarsi anch’essa lì) verso nordest, Inform stampa a video un messaggio che ci avvisa che l’entrata del Tempio non è abbastanza larga. Ricordo ancora per l’ennesima volta, che l’istruzione second si riferisce alla direzione inclusa nel comando (ad esempio "spingi la sfera a nordest", dove noun è la sfera e second è nordest)[1].

Tra le innumerevoli possibilità offerte da Inform, c’è anche quella di stabilire se un oggetto debba essere visibile o meno al buio. Ecco infatti quello che succede quando il giocatore si trova nella Sala del Tempio e prova a spegnere la lampada al sodio:

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.

>spegni la lampada
Hai spento la lampada al sodio.
È completamente buio qui!

>esamina le pitture
Non vedi nulla del genere.

>accendi la lampada
Non vedi nulla del genere.

>i
Stai portando:
  una chiave di pietra
  un dizionario maya di Waldeck
  la mappa di Quintana Roo

>posa la mappa
Posata.

>g

Oscurità
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.

>prendi la mappa
Non vedi nulla del genere.

>

Per non confondere troppo le idee, ho preferito disattivare momentaneamente il daemon degli insetti carnivori . Come potete vedere, di default, se ci si trova al buio Inform non riconosce nessun oggetto all’infuori di quelli contenuti nell’inventario del giocatore. Quando però uno di essi viene posato a terra, diventa irriconoscibile come tutti gli altri. Ora, questa situazione mi sembra alquanto irreale ed esagerata; tenendo infatti conto che la lampada al sodio si trova accanto al nostro archeologo, non credo proprio che gli risulti così difficile riuscire ad accenderla anche se si trova al buio. La funzione di libreria InScope, posta subito dopo la funzione di libreria DeathMessage, è proprio quella che fa al caso nostro:

[ InScope temp; 
   if (temp == player && location == thedark)
       PlaceInScope(sodium_lamp);
   return false;
];

Così facendo, rendiamo riconoscibile la lampada al sodio anche al buio:

Oscurità
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.

>accendi la lampada
La lampada deve essere ben posizionata prima di essere accesa.

C’è un problema però: la lampada al sodio si può accendere solo se l’oggetto a cui appartiene ha l’attributo supporter. Occorre quindi fare una piccola modifica all’oggetto sodium_lamp:

if (location ~= thedark) { 
   if (parent(self) hasnt supporter && self notin location)
      "La lampada deve essere ben posizionata prima di essere accesa.";
}

Così facendo, se si cerca di accendere la lampada in una locazione che è diversa da thedark (quando cioè non si è al buio), viene verificato che la lampada sia effettivamente posata a terra, altrimenti si procede normalmente alla sua accensione:

Oscurità
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.

>accendi la lampada
Hai acceso la lampada al sodio.

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

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

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

C'è una preziosa statuetta maya qui!

>

Possiamo anche fare in modo che la lampada possa essere riconosciuta al buio ed accesa solo in una locazione ben precisa (ad esempio il corridoio in pendenza):

[ InScope temp; 
   if (temp == player && location == thedark && real_location == 
       Corridor) 
       PlaceInScope(sodium_lamp);
   return false ;
];

o dappertutto tranne che nel corridoio:

[ InScope temp; 
   if (temp == player && location == thedark && real_location ~= 
       Corridor) 
       PlaceInScope(sodium_lamp);
   return false ;
];

In una situazione reale, se siamo al buio e procediamo a tentoni all’interno di una grande piramide sepolcrale, corriamo il serio rischio di farci male se non addirittura di perdere la vita cadendo in una buca molto profonda. Che ci crediate o no, Inform ci viene incontro anche in questo caso, mettendoci a disposizione la funzione di libreria DarkToDark. Per prima cosa, occorre definire una variabile globale denominata dark:

.
.
.
Include "VerbLib";
Include "replace";

Global dark;

che vale false anche se non viene esplicitamente dichiarato. Segue poi la parte di codice relativa alla funzione vera e propria, che va posizionata subito dopo la funzione di libreria DeathMessage (o eventualmente InScope se presente):

[ DarkToDark;
  if (dark == false) {   
      dark = true;
      "@`E pericoloso procedere con il buio; potresti cadere in una 
       buca...";
  }
  if (random(3) == 1)
  {   
      deadflag = 3;
      "Sei caduto in una buca e ti sei rotto tutte le ossa!";
  }
  rfalse; !o return false;
];

La variabile dark viene immediatamente testata: se vale false, le viene allora assegnato il valore true e viene stampato a video il relativo messaggio; altrimenti, si passa alla seconda if, dove viene generato un numero casuale da 1 a 3 a ogni mossa del giocatore. Se non "esce" il numero 1 il gioco può proseguire:

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.

Dietro la lastra, un sacerdote mummificato attende in piedi.

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

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.

Puoi anche vedere la mappa di Quintana Roo, un dizionario maya di Waldeck e una chiave di pietra qui.

>spegni lampada
Hai spento la lampada al sodio.

È completamente buio qui!

>n
È pericoloso procedere con il buio; potresti cadere in una buca...

Oscurità
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.

>n

La Sala Quadrata

Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto.

>

altrimenti, ecco la fine che fa il nostro povero archeologo:

Oscurità
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.

>s
Sei caduto in una buca e ti sei rotto tutte le ossa!

    *** Sei morto ***

In questa partita hai totalizzato 0 punti su 30 possibili, in 28 turni, guadagnando il rango di Turista.

Vuoi RICOMINCIARE, CARICARE una partita salvata o USCIRE ?

Note[modifica]

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