GUIDA DI SOPRAVVIVENZA
A INFIT 2.1
Presentazione
Come è strana a volte la vita. Ci sono voluti tre anni per pubblicare la prima versione di INFIT e altri due per passare alla seconda versione. Ora invece in poco più di due mesi sono riuscito a pubblicare una nuova release. Merito vostro, naturalmente, per l'interesse che avete mostrato nel mio lavoro e per i preziosi consigli che mi avete dato. Una ringraziamento speciale va ai miei beta-tester che mi hanno letteralmente tempestato di segnalazioni (INFIT 2.1 ha avuto ben 4 versioni beta nell'arco di due mesi): Francesco Cordella, Tommaso Caldarola, Paolo Lucchesi, Marco Vallarino, Daniele A. Gewurz, Vincenzo Scarpa, Marco Saccone e Giancarlo Niccolai.
HAPPY INFORMING!
Giovanni Riccardi
Terracina (LT), 6 gennaio 2003Presentazione alla versione 2.0
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:
(thatorthose) obj: stampa "quello, quella, quelli, quelle" a seconda di genere e numero.
(itorthem) obj: stampa "lo, la, li, le" a seconda di genere e numero.
(cthatorthose) obj: stampa "Quello, Quella, Quelli, Quelle" a seconda di genere e numero.
(isorare) obj: stampa "sono, è" a seconda del numero.
(cisorare) obj: stampa "Sono, E'" a seconda del numero.
(whomorwhich2) obj: stampa "il quale, la quale, i quali, le quali" a seconda di genere e numero.
(artda) obj: stampa la preposizione articolata "da" + articolo, ad esempio "dallo", "dalla", ecc.
(artsu) obj: stampa la preposizione articolata "su" + articolo, ad esempio "sullo", "sulla", ecc.
(artin) obj: stampa la preposizione articolata "in" + articolo, ad esempio "nello", "nella", ecc.
(arta) obj: stampa la preposizione articolata "a" + articolo, ad esempio "allo", "alla", ecc.
(artdi) obj: stampa la preposizione articolata "di" + articolo, ad esempio "dello", "della", ecc.
dove con obj intendo naturalmente l'oggetto al quale si riferisce la funzione di stampa.
NOTA: a partire dalla versione 2.1 le funzioni di stampa (isorare), (cisorare), (artda), (artsu), (artin), (arta) e (artdi) gestiscono anche la situazione in cui l'oggetto è il giocatore. Ad esempio in (isorare) viene stampato "sei".
Altre funzioni della libreria
Ecco un elenco delle altre funzioni contenute nella libreria:
PrintInfinitive(): restituisce la forma all'infinito del verbo dato nell'ultimo comando.
PrintPrep(): restituisce la preposizione (se esiste) associata al verbo dato nell'ultimo comando.
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
NOTA: Ho intenzione di eliminare queste due funzioni con la versione 2.2. In origine le avevo inserite per gestire la stampa dei comandi al posto della funzione di libreria PrintCommand(), ma sto già riprogettando quest'ultima in modo da stampare anche verbi all'infinito e preposizioni e in modo che possiate aggiungere anche il supporto a verbi non inclusi nella grammatica standard.
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 oggetti 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 LibraryMessages 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 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.
NOTA: Già dalla versione 2.1 questo file contiene alcune altre funzioni che sostituiscono quella della libreria inglese.
CARATTERI ACCENTATI E COMPILATORE LINUX
Durante il beta testing della versione 2.1 è stato segnalato che il compilatore Linux non ne vuole sapere di compilare un gioco a causa delle istruzioni ZCharacter inserite all'inizio del file Italian.h. Se vi capita una cosa del genere inserite semplicemente un commento all'inizio della riga.
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:
E-mail di INFIT: