GUIDA DI SOPRAVVIVENZA
A INFIT 2.0

 

Presentazione

Finalmente eccoci giunti alla tanto attesa versione 2 di INForm in ITaliano (INFIT). Ad ormai 2 anni e un mese dalla pubblicazione della prima versione, quasi non ci speravo più di riuscire nell'impresa. Sono abbastanza soddisfatto del lavoro. Moltissimi degli errori presenti nella versione precedente sono stati corretti e penso che di bug veramente gravi non ne sia rimasta veramente alcuna traccia.

La prima versione della libreria è stata più volte criticata, non tanto per la grande quantità di errori presenti (ed erano veramente tanti), ma piuttosto per l'assoluta mancanza di una guida che indicasse almeno le basi del linguaggio. Mi scuso vivamente di questo errore. Forse pensavo, erroneamente, che il target di INFIT fosse un appssionato (come me) soprattutto delle moltissime avventure (vecchie e nuove) presenti sulla scena internazionale dell'epoca (le avventure di Nelson, di Plotkin, tanto per fare due nomi), scritte quindi in Inglese. Pensavo quindi che questo target non avrebbe avuto alcuna difficoltà (linguistica) nel leggere il Designer's Manual di Graham Nelson.

D'altronde la mia esperienza con le avventure testuali è stata veramente atipica. Anche se "le conoscevo di vista", il primo contatto vero e proprio è stato con Inform. Solo successivamente ho cominciato a giocare le molte avventure scritte con questo linguaggio. Da lì in poi sono partito in quarta: le avventure scritte con altri sistemi ed infine quelle italiane. Ma non voglio annoiarvi ulteriormente con l'argomento "Giovanni Riccardi e le avventure testuali" e passo ringraziare le molte persone che hanno contribuito al realizzarsi di tutto questo.

Ringrazio vivamente Francesco Cordella e Tommaso Caldarola per aver creduto fin dall'inizio nelle potezianzialità di INFIT (d'altronde c'era anche la vecchia libreria di Nardinocchi a disposizione), segnalando i numerosi bug e dando preziosi consigli su come migliorare la libreria. Ringrazio tutto il gruppo di Roma presente alla famosa "Cena Avventurosa" dello scorso Febbraio che mi ha dato nuovo input per riprendere il lavoro interrrotto da diversi mesi. Tra questi un grazie speciale a Paolo Vece per le avventure "Infocom " e a Sauron e Glorfindel (e ancora Paolo) per un'interessante mattinata alla mostra dei videogiochi.

Tra le persone da ringraziare non posso assolutamente dimenticare il boss, il grande Bonaventura di Bello, con cui da qualche mese ho anche il piacere di lavorare e che ogni tanto cerco di convincere a imparare Inform e a scrivere una nuova avventura.

In queste ultime settimane c'è stato uno "strano", rinnovato interesse verso Inform, forse scatenato da un provocatorio post su icgat del grande Enrico Colombini (che ringrazio per questo oltre, naturalmente, che per le sue avventure). Non ho mai avuto così tante segnalazioni come in questi ultimi giorni di beta-testing. Per il prezioso lavoro devo ringraziare soprattutto Paolo Lucchesi, Daniele A. Gewurz e Marco Vallarino.

L'ultimo ringraziamento va, doverosamente, a Graham Nelson per aver creato Inform e senza il quale non starei neanche scrivendo queste note.

Penso di aver finito con i ringraziamenti. Mi scuso se ho dimenticato qualcuno, potete sempre scrivermi in e-mail lamentandovi per questa mia mancanza. Come direbbe qualcuno "finalmente dopo due anni INFIT 2 è qui!" e spero vivemente che il fantasma di Francesco Cordella la smetta di tormentarmi ogni volta che mi siedo davanti al PC.

HAPPY INFORMING A TUTTI!

Giovanni Riccardi
Terracina (LT), 9 Ottobre 2002


Introduzione

Quello che avete tra le mani non è un vero e proprio manuale di Inform/INFIT ma piuttosto un insieme di note per la scrittura di avventure testuali utilizzando la libreria italiana. Sto lavorando a un vero e proprio manuale che seguirà a breve.

Per imparare bene come si programma un'avventura non c'è niente di meglio che leggere il codice sorgente di di un classico dell'Interactive Fiction. E' finalmente disponibile il codice sorgente commentato di "Avventura" e "Negozio di Giocattoli" traduzioni di due dei giochi di esempio inclusi nella versione originale di Inform.
Per facilitare i neofiti ho pensato di includere in questa guida lo scheletro di un'avventura, dal quale si può partire per programmare il proprio gioco.

Se ve la cavate un po' con l'inglese vi consiglio vivamente di leggere l'Inform Benninner's Guide (IBG), una buonissima guida introduttiva al nostro amato linguaggio scritta da Roger Firth e Sonia Kesserich. Comunque la Bibbia di Inform rimane sempre L'Inform Designer's Manual 4th ed. di Graham Nelson al quale vi rimando per questioni più tecniche.

Se avete letto o state leggendo questo manuale, questa guida costituisce il suo complemento per le questioni riguardanti la libreria italiana.

 

 

Note per l'utilizzo di INFIT

Definizione del genere degli oggetti

Il parser di Inform è nato per riconoscere l'Inglese e la libreria Italiana ne è, per la maggior parte, una traduzione. Come molti sapranno in Inglese non c'è una distinzione di fatto tra nomi di genere maschile e femminile (per esempio nell'accordarsi con un aggettivo) e quindi non è necessario specificare il genere dell'oggetto in fase di programmazione. In Italiano questo è purtroppo necessario poichè il parser deve poter scegliere il giusto messaggio da inviare al giocatore. Per esempio, se il giocatore
scrive:

>PRENDI SCATOLA

il parser deve decidere se scrivere PRESA oppure PRESO. Tutto questo si risolve semplicemente aggiungendo un attributo
"female" agli oggetti di genere femminile. Il maschile viene riconosciuto automaticamente (o per meglio dire il parser assume che
gli oggetti siano maschili, salvo poi specificare i femminili).

 
Definizione del numero dell'oggetto

Come per l'Inglese si aggiunge un attributo "pluralname" alla definizione di un oggetto plurale.

 

Compilare un avventura scritta con INFIT

La sintassi corretta per compilare una avventura utilizzando INFIT è la seguente:

inform +language_name=italian <nome_del_file.inf>

dove al posto di inform dovete inserire il nome del compilatore per il sistema operativo che state usando. Ad esempio sotto Windows il compilatore si chiama "infrmw32.exe". Date un'occhiata più avanti allo scheletro dell'avventura per sapere in che ordine vanno incluse le varie librerie di INFIT.

Riconoscere genere e numero degli oggetti

Nel corso della programmazione di un'avventura vi capiterà certamente di dover fare riferimento ad un oggetto che non conoscete
a priori, e nello stampare un messaggio, di dover conoscere il suo genere e il suo numero. La libreria italiana contiene la comoda funzione di stampa "GenderandNumber" che fa proprio questo. Essendo una funzione di stampa va chiamata nel seguente modo all'interno del codice:

(genderandnumber) object

Per esempio "Avventura" contiene una classe Treasure che identifica i tesori che il giocatore deve trovare. Nella definizione del tesoro
viene specificato il suo genere e il suo numero. La classe però deve gestire i messaggi in modo che vadano bene per qualsiasi oggetto che vi appartiene. Ecco la definizione della classe con la gestione dei verbi Take (prendi) e Drop (posa, lascia):

Class Treasure
	with depositpoints 10,
   	after [; 
		Take: if (location==Inside_Building)
   				score=score-self.depositpoints;
   			  score=score+5;
   			  if (noun hasnt treasure_found)
   			  { give noun treasure_found;
   				treasures_found++;
   				score=score+2;
   			  }
   			  print "Pres", (genderandnumber) noun, "!";rtrue;
   		Drop: score=score-5;
   			  if (location==Inside_Building)
   			  { score=score+self.depositpoints;
   				print "Depositat", (genderandnumber) noun,
   					  " al sicuro!";
   			  } rtrue; 
   ]; 

 

Alcune funzioni di stampa contenute nella libreria

La libreria italiana contiene, per uso interno, alcune comode funzioni di stampa che però possono essere tranquillamente
richiamate nella programmazione di un'avventura. Ecco l'elenco:

dove con obj intendo naturalmente l'oggetto al quale si riferisce la funzione di stampa.

 

Altre funzioni della libreria

Ecco un elenco delle altre funzioni contenute nella libreria:

Per maggiori informzioni sull'utilizzo di queste due funzioni, date un'occhiata ai messaggi di libreria Miscellany 48 e Miscellany 49 contenuti nel file Italian.h

 

Prompt alternativo

Se dichiarate un "Constant PROMPT" prima dell'inclusione dei file di libreria la vostra avventura userà un prompt alternativo al classico ">". Il parser porrà al giocatore domande del tipo "Cosa vuoi fare ora?", ecc. La procedura che gestisce questo tipo di prompt stampa in maniera (pseudo-)casuale un messaggio scelto tra quindici.

 

Sostituire i messaggi standard di libreria

Normalmente, programmando un'avventura testuale, si scrivono i messaggi solo per quelle azioni che si riferiscono agli oggeti importanti del gioco. Per tutto il resto ci pensa il parser con la sua ricca libreria di messaggi standard. Ma cosa si deve fare se, per qualche motivo, volete cambiare alcuni dei messaggi standard? Basta dichiarare un oggetto LybraryMessages come mostrato qui di seguito:

Object LibraryMessages
   with before [;
   Eat: "Il nuovo messaggio per il verbo mangiare...";
   Drink: "Il nuovo messaggio per il verbo bere...";
];


Quest'oggetto deve essere incluso tra "Include Parser" e "Include Verblib". Ricordatevi che se le procedure che stampano i messaggi dei verbi ritornano FALSE, verrà stampato anche il messaggio standard.

 

Il file Replace.h

Il file "replace.h" contiene (per ora) delle funzioni che sostituiscono alcune routine presenti nella libreria che stampavano
le informazioni sulla versione della libreria stessa. Mettendo un "Include "replace"" subito dopo "Include "Verblib"" (importante
metterlo subito dopo!) queste informazioni verranno tradotte in Italiano. Vedi lo scheletro dell'avventura che segue.

 

 

Scheletro dell'avventura

Ecco lo scheletro di un'avventura che utilizza INFIT. Penso sia già qualcosa prima della pubblicazione del manuale.

Constant Story "UNA BELLA AVVENTURA^";
Constant Headline "^La nuova avventura di Giovanni Riccardi";
Serial "021009";
Release 1;
Include "Parser";
Include "VerbLib";
Include "replace";
Object Prima_Stanza "La prima stanza"
  with name "stanza1" "prima" "stanza", 
       description "Ti trovi nella prima stanza di questa nuova avventura.",
       w_to Stanza2, 
       (ecc...),
   has light;
Object -> Oggetto1 "Primo oggetto"
  with name "primo" "oggetto" "oggetto1",
       description "Il primo oggetto",
       (altre proprietà dell'ogetto),
   has attributo1, attributo2, ecc.;

[ Initialise;
   location = Prima_Stanza;
   print "^^^^Benvenuti in questa nuova Avventura!^^";
];
Include "ItalianG";

(Altre definizioni dei verbi)

 

 

INFORMazioni utili

Informazioni: Il Sito Web Italiano di Inform:

http://inform.composizioni.com

Sito Web Ufficiale di Inform:

http://www.inform-fiction.org

E-mail di INFIT:

inform@composizioni.com