Inform e Glulx/RUINS, l'avventura comincia/La cassa d'imballaggio (riuscirete a riempirla tutta)?

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

Inform? Oggetti? Funzioni? Vi chiedete a cosa possano servire tutte queste nozioni, e vi chiedete anche chi possa essere così pazzo da scrivere un manuale del genere. Urla di scimmie, pipistrelli, pappagalli, macao sono i soli suoni che in questo momento vi fanno compagnia. Vi guardate intorno e vedete che una cassa d'imballaggio giace qui, pronta per contenere eventuali scoperte di alto valore culturale da riportare alla civiltà. Abbandonate il manuale di Inform al suo destino e andate a esaminare la cassa che a sua volta contiene un ingombrante, robusto e tenace modello di macchina fotografica a lastre con la struttura di legno, e un giornale stropicciato di un mese fa. Li prendete entrambi e li mettete nel vostro inventario, insieme agli oggetti che già possedete: la mappa di Quintana Roo, la lampada al sodio e il dizionario Maya di Waldeck.


La cassa d'imballaggio (riuscirete a riempirla tutta)?[modifica]

Abbiamo detto che un’avventura testuale è costituita da un insieme di oggetti. Ora, quello che occorre capire, è come (e soprattutto quando) si devono collegare tra loro; ecco perché nel nostro programma sono state inserite le definizioni di alcuni nuovi oggetti:

Constant Story "RUINS";
Constant Headline
        "^Un esempio di lavoro interattivo.^
         Copyright (c) 1999 di Graham Nelson.^
         Traduzione e adattamenti di Vincenzo Scarpa e Raffaello Valesio            
         (c) 2002-2003 su permesso dell'autore.^^";

Constant MAX_CARRIED = 7;    

Include "Parser";
Include "VerbLib";
Include "replace";   
  
! -------------------------------------------------------------------- !
!       Il Grande Altopiano
! -------------------------------------------------------------------- !
Object  Forest "Il Grande Altopiano"
  with  description ...      
        u_to ...
        cant_go ...
        before [; 
            Listen: "Urla di scimmie, pipistrelli, pappagalli, 
                     macao."; 
            ], 
  has   light;

Object  -> packing_case "cassa d'imballaggio"
  with  name 'imballaggio' 'cassetta' 'cassa',
        initial
            "La tua cassa d'imballaggio giace qui, pronta per contenere              
             eventuali scoperte di alto valore culturale da riportare  
             alla civilt@`a.",
        before [;
            Take, Remove, PushDir:
                "La cassa @`e troppo pesante per preoccuparsi di 
                 spostarla, almeno finch@'e la spedizione @`e ancora 
                 incompleta.";
            ],
  has   female static container open openable;

Object  -> -> camera "macchina fotografica a lastre"
  with  name 'lastre' 'macchina' 'fotografica',
        description
            "@`E un ingombrante, robusto e tenace modello di macchina 
             fotografica a lastre con la struttura di legno: come tutti 
             gli archeologi, le sei particolarmente affezionato.",
  has   female;         

Object  -> -> newspaper "giornale di un mese fa"
  with  name 'times' 'giornale' 'mese',
        description
            "Il ~Times~ del 26 febbraio 1938, che si @`e subito bagnato e 
             stropicciato dopo essere stato esposto per un mese a questo 
             clima, pi@`u o meno come ti senti tu ora. Forse c'@`e la 
             nebbia a Londra. Forse ci sono le bombe.";

! -------------------------------------------------------------------- !
!    Questi oggetti vengono spostati nelle locazioni a mano a mano che 
!    il gioco procede. 									  
! -------------------------------------------------------------------- !
Object  sodium_lamp "lampada al sodio" ...
			  
Object  dictionary "dizionario maya di Waldeck" ...
				 
Object  map "mappa di Quintana Roo"
  with  article "la",
        name 'mappa' 'schizzo' 'abbozzo' 'quintana' 'roo',
        description
            "Questa mappa evidenzia meglio il ruscello che ti ha portato 
             qui, al di l@`a del confine meridionale del Messico, nella 
             pi@`u profonda foresta pluviale, interrotta solo da questo 
             altopiano.",
  has   female;

! -------------------------------------------------------------------- !
!       Utility routines.
! -------------------------------------------------------------------- !           
[ Initialise;
        location = Forest;
        move map to player;
        move sodium_lamp to player;
        move dictionary to player;
        "^^^Dopo giorni di inutili ricerche, passati senz'acqua 
         attraversando i rovi della foresta, alla fine la tua pazienza 
         @`e stata ricompensata: hai fatto una scoperta!^";
        ];

! -------------------------------------------------------------------- !
Include "ItalianG";

Partiamo dall’oggetto packing_case (la nostra cassa d’imballaggio). La prima cosa che si può notare, è la presenza, alla prima riga, del simbolo ->: in questo modo, diciamo ad Inform che questo oggetto è visibile nell’oggetto Forest (che cioè la cassa d’imballaggio è visibile dal giocatore quando si trova nel Grande Altopiano). Esiste comunque un modo più semplice per mettere in relazione i due oggetti. Scrivendo infatti:

Object packing_case "cassa d'imballaggio" Forest

otteniamo lo stesso e identico risultato, ma per questa avventura si è deciso di adottare il simbolo -> anziché il nome dell’oggetto di appartenenza. Ogni oggetto inoltre, può essere chiamato con dei nomi diversi durante il gioco. È quello che accade nella riga with name... e se scrivo ad esempio: prendi la cassetta o prendi la cassa, per Inform il riferimento all’oggetto packing_case è identico per entrambi i comandi (esegue cioè la stessa azione in entrambi i casi)[1].

Il testo posto dopo la proprietà initial è quello che appare tutte le volte che il giocatore si trova nel Grande Altopiano e descrive la cassa in questione. Se si cerca invece di prenderla (Take), rimuoverla (Remove), o spingerla in una direzione (PushDir), la risposta è sempre che è troppo pesante da spostare...

Gli oggetti camera (la macchina fotografica) e newspaper (il giornale) presentano solo una novità: la presenza del doppio simbolo -> -> per dire a Inform che sono visibili all’interno della cassa d’imballaggio. Occorre notare che, in questo caso, l’ordine di definizione degli oggetti è molto importante: in poche parole, l’oggetto packing_case deve essere messo subito dopo l’oggetto Forest, mentre gli oggetti newspaper e camera devono essere messi subito dopo l’oggetto packing_case.

La mappa si trova invece nell’inventario del giocatore, e questo è possibile grazie all’istruzione move che nella funzione Initialise la sposta insieme al dizionario e alla lampada al sodio che verranno descritti in dettaglio più avanti.


Per quanto riguarda gli attributi, qui ne abbiamo in abbondanza, nell’ordine:

  • female: indica che l’oggetto è femminile (se invece è maschile – in inglese male - non si mette nulla, perché è il valore di default);
  • static: l’oggetto è fisso al suo posto e non può essere preso o spostato dal giocatore;
  • container: l’oggetto in questione è un contenitore che, come dice la parola stessa, può contenere al suo interno altri oggetti che possono essere a loro volta presi, esaminati, usati e riposti;
  • open: "Elementare Watson" come direbbe Sherlock Holmes; la cassa è aperta, ma il giocatore non può entrarvi dentro. Se questo attributo non è presente la cassa è chiusa di default;
  • openable: la cassa può essere aperta o chiusa dal giocatore o da un altro personaggio del gioco (che in gergo "informiano" è un NPC[2] o, in italiano, PNG[3]).


Inform prevede anche la possibilità di associare uno specifico articolo a ogni oggetto. Di default, se è maschile gli viene attribuito l’articolo indeterminativo un, se è femminile una. Nel caso della mappa però, essendo proprio la mappa di Quintana Roo (nel senso che ne esiste una sola), è meglio attribuirle l’articolo la. Ora, se durante il gioco proviamo a fare una lista dell’inventario:

>i
Stai portando:
  il dizionario maya di Waldeck
  una lampada al sodio
  la mappa di Quintana Roo

Inform si "accorge" del nuovo articolo e lo visualizza insieme al nome dell’oggetto cui appartiene[4].


Le ultime due cose da notare in questo paragrafo sono:

  • l’aggiunta del verbo Listen (in italiano Ascolta) all’oggetto Forest. In questo modo, se durante il gioco il giocatore si trova nel Grande Altopiano e dà il comando "ascolta", viene visualizzato il messaggio "Urla di scimmie, pipistrelli, pappagalli, macao.". Notate che di default questo comando dà il messaggio "Non si sente niente di particolare." e questa è la dimostrazione pratica di come Inform offra un ambiente integrato ma anche altamente personalizzabile. Attenzione però: il messaggio da noi voluto viene visualizzato solo nell’oggetto Forest, mentre per tutte le altre locazioni il messaggio sarà sempre quello di default (a meno che non si prevederanno nuovi messaggi in altre locazioni);
  • l’inserimento della costante MAX_CARRIED, il cui valore indica il numero massimo di oggetti trasportabili dal giocatore (100 di default). Quindi, quando il nostro inventario è pieno (se possediamo cioè il numero massimo di oggetti  ➨  nel nostro caso 7), non è più possibile prenderne altri, a meno che non se ne posi qualcuno (per es. posa il giornale).

Note[modifica]

  1. Vi consiglio di abbondare sempre con i nomi alternativi, perché in questo modo non si limita il campo di azione del giocatore (si evita che l’oggetto possa essere chiamato in un modo soltanto, rendendo così le azioni meno frustranti).
  2. Acronimo inglese di Non Player Characters.
  3. Acronimo di Personaggi Non Giocatori.
  4. Cliccate qui per scaricare il listato di questo esercizio (il file 4.02.inf).