Appendice F: La libreria di Inform ================================== I file della libreria definiscono il modello di mondo di Inform, e sono quelli che trasformano un normale linguaggio di programmazione in un sistema di sviluppo di avventure testuali. Qui trovate le costanti, le variabili e le routine della libreria, le proprietà e gli attributi standard degli oggetti, la grammatica dei verbi e le azioni. Gli oggetti della libreria -------------------------- compass [bussola] Un oggetto container [contenitore] che contiene i dodici oggetti di direzione d_obj e_obj in_obj n_obj ne_obj nw_obj out_obj s_obj se_obj sw_obj u_obj w_obj. LibraryMessages Se definito (tra gli Include di Parser e Verblib), cambia i messaggi standard della libreria: Object LibraryMessages with before [; azione: "stringa"; azione: "stringa"; azione: switch (lm_n) { valore: "stringa"; valore: "stringa", (a) lm_o, "."; ... } ... ]; selfobj L'oggetto giocatore predefinito. Da evitare: al suo posto va usata la variabile player, che di solito si riferisce a selfobj. thedark Una pseudo stanza che diventa la location quando non c'è luce (sebbene l'oggetto giocatore non vi venga trasferito). Costanti della libreria ----------------------- Oltre alle costanti standard true (1), false (0) e nothing (0) la Libreria definisce NULL (-1) per un action, property o pronoun il cui valore è indefinito. Costanti definite dall'utente ----------------------------- Alcune costanti controllano delle funzionalità invece di rappresentare dei valori. AMUSING_PROVIDED Attiva l'entry-point Amusing. DEATH_MENTION_UNDO Offre l'opzione "ANNULLARE il tuo ultimo comando" alla fine del gioco. DEBUG Attiva i comandi di debug. Headline = "stringa" Obbligatoria: stile del gioco, informazioni di copyright, ecc. MANUAL_PRONOUNS I pronomi riflettono solo gli oggetti menzionati dal giocatore. MAX_CARRIED = espressione Limite sul possesso diretto di cose che il giocatore può portare (predefinito 100). MAX_SCORE = espressione Massimo punteggio del gioco (predefinito 0). MAX_TIMERS = espressione Il limite di timer/daemon attivi (predefinito 32). NOPLACES Impedisce l'uso dei comandi "OGGETTI" e "POSTI". NUMBER_TASKS = espressione Numero di compiti con punteggio (predefinito 1). OBJECT_SCORE = espressione Quando viene preso un oggetto con punteggio la prima volta (predefinito 4). ROOM_SCORE = espressione Quando viene visitata una stanza con punteggio la prima volta (predefinito 5). SACK_OBJECT = obj_id Un oggetto container dove il gioco mette gli oggetti posseduti. Story = "stringa" Obbligatoria: il nome della storia. TASKS_PROVIDED Attiva il sistema di punteggio basato sui compiti da assolvere. USE_MODULES Attiva il link con i moduli di libreria precompilati. WITHOUT_DIRECTIONS Disattiva le direzioni standard della bussola (tranne "DENTRO" e "FUORI"). Mettere delle direzioni alternative in compass. Variabili della libreria ------------------------ action L'azione corrente. actor L'obiettivo di un'istruzione: il giocatore, od un PNG. deadflag Di solito 0: 1 indica una morte normale, 2 indica che il giocatore ha vinto, 3 od altro indica una fine definita dall'utente. inventory_stage Usata dalle proprietà invent e list_together. keep_silent Di solito false; impostata a true rende la maggior parte delle azioni del gruppo 2 "sileziose". location La stanza in cui si trova attualmente il giocatore; a meno che sia buio, nel qual caso contiene thedark, mentre real_location contiene la stanza. notify_mode Normalmente true: impostata a false non vengono mostrati avvertimenti quando il punteggio cambia. noun L'oggetto primario a cui si riferisce l'azione corrente. player L'oggetto che agisce per conto del giocatore umano. real_location La stanza in cui si trova il giocatore quando è buio. score Il punteggio corrente. second L'oggetto secondario a cui si riferisce l'azione corrente. self L'oggetto che ha ricevuto il messaggio. (Nota: è una variabile a tempo d'esecuzione, non una costante a tempo di compilazione). sender L'oggetto che ha inviato un messaggio (o nothing). task_scores Un array di byte che contiene i punteggi per il sistema di punteggi basato sui compiti da assolvere. the_time L'orologio del gioco, in minuti (da 0 a 1439) trascorsi dalla mezzanotte. turns Il contatore delle mosse. wn Il numero di parola dal flusso di input, il conteggio inizia con 1. Le routine della libreria ------------------------- Achieved(espressione) Un compito con punteggio è stato assolto. AfterRoutines() In un'azione del gruppo 2, controlla l'output dei messaggi "after" [dopo l'azione]. AllowPushDir() Un oggetto può essere spinto da una stanza ad un'altra. Banner() Stampa il banner (l'intestazione) del gioco. ChangePlayer(obj_id, flag) Il giocatore diventa l'oggetto obj_id. Se il flag opzionale è true, la descrizione della stanza include "(come oggetto)". CommonAncestor(obj_id1, obj_id2) Restituisce l'oggetto più prossimo che ha una relazione di parentela con entrambi gli oggetti indicati, o nothing. DictionaryLookup(array_di_byte, lunghezza) Restituisce l'indirizzo della parola nel dizionario, o 0 se non la trova. DrawStatusLine() Aggiorna la riga di stato; accade comunque alla fine di ciascun turno. GetGNAOfObject(obj_id) Restituisce la combinazione GNA (gender-number-animation) [sesso-numero-animato] con i valori da 0 a 11 dell'oggetto obj_id. HasLightSource(obj_id) Restituisce true se l'oggetto obj_id ha luce. IndirectlyContains(obj_id_genitore, obj_id) Restituisce true se obj_id è attualmente figlio, o nipote, o bis-nipote... dell'oggetto obj_id_genitore. IsSeeThrough(obj_id) Restituisce true se la luce passa attraverso obj_id. Locale(obj_id, "stringa1", "stringa2") Descrive il contenuto di obj_id e ne restituisce il numero. Dopo gli oggetti con i propri paragrafi, il resto è elencato preceduto da stringa1 o stringa2. LoopOverScope(routine_id, attore) Chiama routine_id(obj_id) per ogni obj_id _in scope_. Se il parametro opzionale attore viene fornito è quello che definisce lo _scope_. MoveFloatingObjects() Sistema la posizione degli oggetti found_in. NextWord() Restituisce la successiva parola del dizionaro dal flusso di input, incrementando wn di uno. Restitisce false se la parola non è nel dizionario, o se il flusso di input è terminato. NextWordStopped() Restituisce la successiva parola del dizionaro dal flusso di input, incrementando wn di uno. Restitisce false se la parola non è nel dizionario, -1 se il flusso di input è terminato. NounDomain(obj_id1, obj_id2, tipo) Effettua il parsing dell'oggetto (attiva l'analizzatore sintattico sull'oggetto); consultate anche ParseToken(). ObjectIsUntouchable(obj_id, flag) Verifica che ci sia una barriera (un oggetto container che non è aperto) tra il giocatore e l'oggetto obj_id. A meno che il flag opzionale sia true viene visualizzato il messaggio "Non puoi, ... in quella direzione.". Restituisce true se viene trovata una barriera, altrimenti restituisce false. OffersLight(obj_id) Restituisce true se l'oggetto obj_id fornisce luce. ParseToken(tipo, valore) Effettua un parsing normale; consultate anche NoundDomain(). PlaceInScope(obj_id) Viene usato in una proprietà add_to_scope oppure in scope=chiave per mettere l'oggetto obj_id in scope per il parser. PlayerTo(obj_id, flag) Muove il giocatore in obj_id. Stampa la descrizione a meno che il parametro opzionale flag sia 1 (nessuna descrizione) o 2 (come se ci fosse entrato). PrintOrRun(obj_id, proprietà, flag) Se obj_id.proprietà è una stringa la visualizza (seguita da un carattere di nuova riga a meno che il parametro opzionale flag sia true) e restituisce true. Se è una routine, la esegue e restituisce quello che la routine restituisce. PronounNotice(obj_id) Associa un pronome appropriato all'oggetto obj_id. PronounValue('pronome') Restituisce l'oggetto al quale 'esso' (o 'lui', 'lei', 'loro') si riferisce o nothing. ScopeWithin(obj_id) Viene usato in una proprietà add_to_scope oppure in scope=chiave per mettere il contenuto dell'oggetto obj_id in scope per il parser. SetPronoun('pronome', obj_id) Definisce l'oggetto obj_id al quale il pronome passato come parametro deve riferirsi. SetTime(espressione1, espressione2) Imposta the_time ad espressione1 (in minuti trascorsi dalla mezzanotte, da 0 a 1439), e lo aggiorna con frequenza espressione2, secondo lo schema: espressione2 o +espressione2: ad ogni turno scorrono espressione2 minuti; -espressione2: ogni turno richiede espressione2 minuti; 0: il tempo non avanza. StartDaemon(obj_id) Avvia il daemon dell'oggetto obj_id. StartTimer(obj_id, espressione) Avvia il timer dell'oggetto obj_id, inizializzando il suo time_left [tempo rimanente] ad espressione. La proprietà time_out dell'oggetto viene chiamata dopo che il numero di turni è trascorso. StopDaemon(obj_id) Ferma il daemon dell'oggetto obj_id. StopTimer(obj_id) Ferma il timer dell'oggetto obj_id. TestScope(obj_id, attore) Restituisce true se l'oggetto obj_id è in scope, altrimenti restituisce false. Se il parametro opzionale attore viene fornito, allora è quello che definisce lo scope. TryNumber(espressione) Interpreta la parola espressione del flusso di input come se fosse un numero, riconoscendo i decimali, le parole inglesi da one a twenty, e se si stanno usando le librerie in italiano anche le parole in italiano da uno a venti. Restituisce i numeri da 1 a 10000, o -1000 se l'interpretazione va male. UnsignedCompare(espressione1, espressione2) Restituisce -1 se espressione1 è minore di espressione2, 0 se espressione1 è uguale ad espressione2 ed 1 se espressione1 è maggiore di espressione2. Entrambe le espressioni sono senza segno e variano da 1 a 65535. WordAddress(espressione) Restituisce un array di byte che contiene il testo della parola numero espressione dal flusso di input. WordInProperty(parola, obj_id, proprietà) Restituisce true se la parola del dizionario passata come parametro è presente tra i valori di proprietà dell'oggetto obj_id. WordLength(espressione) Restitusce la lunghezza della parola numero espressione dal flusso di input. WriteListFrom(obj_id, espressione) Visualizza un elenco con l'oggetto obj_id ed i suoi fratelli, nello stile fornito in espressione come la somma di: ALWAYS_BIT, CONCEAL_BIT, DEFART_BIT, ENGLISH_BIT, FULLINV_BIT, INDENT_BIT, ISARE_BIT, NEWLINE_BIT, PARTINV_BIT, RECURSE_BIT, TERSE_BIT, WORKFLAG_BIT. YesOrNo() Restituisce true se il giocatore ha digitato "YES", restituisce false per "NO". Con le librerie italiane restituisce true se il giocatore ha digitato "SI" o "SÌ". ZRegion(argomento) Restituisce il tipo di argomento: 3 per l'indirizzo di una stringa, 2 per l'indirizzo di una routine, 1 per il numero di un oggetto, 0 per altro. Le proprietà degli oggetti -------------------------- Dove il valore di una proprietà può essere una routine è possibile usare diversi formati (ricordate, però, che le parentesi "]" delle routine incorporate restituiscono false, le parentesi "]" delle routine standalone restituiscono true): proprietà [; istruzione; istruzione; ... ] proprietà [; return routine_id(); ] proprietà [; routine_id(); ] proprietà routine_id In questa appendice "(+)" indica una proprietà additiva. Quando una classe (Class) ed un oggetto (Object) di quella classe definiscono la stessa proprietà, il valore specificato per l'oggetto normalmente sovrascrive il valore ereditato dalla classe. Quando una proprietà è additiva, invece, vengono applicati entrambi i valori, con quello dell'oggetto considerato per primo. add_to_scope Per un oggetto: altri oggetti che lo seguono in scope e fuori dallo scope. Il valore può essere un elenco di obj_id separati da spazi, od una routine che richiama PlaceInScope() o ScopeWithin() per specificare gli oggetti. after (+) Per un oggetto: riceve ogni action e fake_action per la quale questo è il noun. Per una stanza: riceve ogni action che accade nella stessa. Il valore è una routine con una struttura simile a quella del costrutto switch, con una serie di casi per le action considerate (c'è anche un default opzionale); viene invocata dopo che l'azione è accaduta, ma prima che il giocatore venga informato. La routine deve restituire false per continuare, dicendo così al giocatore quello che è accaduto, o true per interrompere l'esecuzione dell'azione e non produrre ulteriori output. article Per un oggetto: l'articolo indeterminativo dell'oggetto. Il valore predefinito è automaticamente "a", "an", o "some". Usando le librerie italiane si hanno gli articoli indeterminativi italiani "un", "uno", "una", "degli", "delle", ecc. Il valore può essere una stringa od una routine che stampi una stringa. articles Per un oggetto non inglese: i suoi articoli determinativi ed indeterminativi. Il valore è un array di stringhe. before (+) Per un oggetto: riceve ogni action e fake_actione per la quale questo è il noun. Per una stanza: riceve ogni action che accade nella stessa. Il valore è una routine richiamata prima che l'azione accada. Vedere anche la proprietà after. cant_go Per una stanza: il messaggio che viene stampato quando un giocatore cerca di usare un'uscita impossibile. Il valore può essere una stringa od una routine che stampi una stringa. capacity Per un oggetto container o supporter: il numero di oggetti che può contenere o che possono essere messi sopra, il valore predefinito è 100. Per il giocatore: il numero di oggetti che può essere portato. selfobj ha una capacità iniziale di MAX_CARRIED. Il valore può essere un numero od una routine che restituisca un numero. d_to Per una stanza: una possibile uscita (giù). Il valore può essere: * false (predefinito): non è un'uscita; * una stringa: viene stampata per spiegare perché questa non è un'uscita; * una stanza: l'uscita porta a quella stanza; * un oggetto door [porta]: l'uscita passa attraverso quella porta; * una routine che deve restituire false, una stringa, una stanza, un oggetto door, oppure true per indicare una "non uscita" e non produrre altri output. daemon Il valore è una routine che può essere attivata da StartDaemon(obj_id) e che quindi viene eseguita ad ogni turno fino a che non viene disattivata da StopDaemon(obj_id). describe (+) Per un oggetto: viene chiamata prima che venga stampata la descrizione dell'oggetto. Per una stanza: viene chiamata prima che venga stampata la descrizione estesa della stanza. Il valore è una routine che deve restituire false per continuare, stampando la descrizione normale, o true per interrompere l'azione e non produrre altri output. description Per un oggetto: la sua descrizione (visualizzata da Examine, Esamina). Per una stanza: la sua descrizione estesa (Visualizzata da Look, Guarda). Il valore può essere una stringa od una routine che stampi una stringa. door_dir Per un oggetto compass [bussola] (d_obj, e_obj, ...): la direzione nella quale si viene condotti quando si fa un tentativo di muoversi verso quest'oggetto. Per un oggetto door [porta]: la direzione nella quale questo oggetto conduce. Il valore può essere una proprietà di direzione (d_to, e_to, ...) od una routine che restituisca una tale proprietà. door_to Per un oggetto door [porta]: dove conduce. Il valore può essere * false (il predefinito): non conduce da nessuna parte; * una stringa: viene stampata per spiegare perché questa porta non conduce da nessuna parte; * una stanza: la porta conduce in questa stanza; * una routine che deve restituire false, una stringa, una stanza, oppure true per indicare che "non conduce da nessuna parte" e non produrre altri output. e_to Vedere d_to. each_turn (+) Viene invocata alla fine di ogni turno (dopo tutti i daemon ed i timer) ogni volta che l'oggetto è in scope. Il valore può essere una stringa od una routine. found_in Per un oggetto: le stanze nelle quali questo oggetto può essere trovato, a meno che abbia l'attributo absent [assente]. Il valore può essere * un elenco di stanze separate da spazi (dove questo oggetto può essere trovato) od un elenco di obj_id (le cui locazioni sono seguite da questo oggetto); * una routine che deve restituire true se questo oggetto si può trovare nella locazione corrente, altrimenti deve restituire false. grammar Per un oggetto animate [animato] o talkable [parlante]: il valore è una routine chiamata quando il parser sa che si sta indirizzando questo oggetto, ma non ha ancora verificato la grammatica. La routine deve restituire false per continuare, true per indicare che la routine ha interpretato il comando od una parola del dizionario ('parola' o -'parola'). in_to Vedere d_to. initial Per un oggetto: la descrizione visualizzata prima che venga raccolto. Per una stanza: la descrizione visualizzata quando il giocatore entra nella stanza. Il valore può essere una stringa od una routine che stampi una stringa. inside_description Per un oggetto enterable: la sua descrizione, visualizzata come parte della descrzione della stanza quando il giocatore è all'interno dell'oggetto. Il valore può essere una stringa od una routine che stampi una stringa. invent Per un oggetto: il valore è una routine per la stampa dell'inventario dell'oggetto, viene chiamata due volte. Alla prima chiamata niente è stato ancora stampato; inventory_stage ha il valore 1, e la routine deve restituire false per continuare, o true per terminare l'azione e non produrre ulteriori output. Alla seconda chiamata sono stati stampati l'articolo indeterminativo dell'oggetto ed il suo nome sintetico (short name), ma non sono state stampate informazioni addizionali; il valore di inventory_stage è 2, e la routine deve restituire false per continuare, o true per terminare l'azione e non produrre ulteriori output. life (+) Per un oggetto animate: riceve le azioni da persona a persona (Answer, Ask, Attack, Give, Kiss, Order, Show, Tell, ThrowAt e WakeOther) per il quale questo è il noun. Il valore è una routine con una struttura simile a quella del costrutto switch, con una serie di casi per le azioni considerate (c'è anche un default opzionale). La routine deve restuire false per continuare, dicendo al giocatore quello che è accaduto, o true per interrompere l'azione e non produrre ulteriori output. list_together Per un oggetto: raggruppa gli oggetti correlati quando viene visualizzato l'elenco dell'inventario o degli oggetti presenti nella stanza. Il valore può essere * un numero: tutti gli oggetti che hanno questo valore vengono raggruppati; * una stringa: tutti gli oggetti che hanno questo valore vengono raggruppati con il conteggio della stringa (ad es: cinque pesci); * una routine che viene chiamata due volte. Alla prima chiamata niente è stato ancora stampato; inventory_stage ha il valore 1, e la routine deve restituire false per continuare, o true per terminare l'azione e non produrre ulteriori output. Alla seconda chiamata è stato stampato l'elenco; il valore di inventory_stage è 2 e non ci sono controlli sul valore di ritorno. n_to Vedere d_to. name (+) Definisce un elenco di parole separate da spazi che vengono aggiunte al dizionario di Inform. Ogni parola può essere fornita tra apici '...' o doppi apici "..."; in tutti gli altri casi solo le parole racchiuse tra apici vengono aggiunte al dizionario. Per un oggetto: identifica quell'oggetto. Per una stanza: visualizza "Non è importante ai fini del gioco." ne_to Vedere d_to. number Per un oggetto od una stanza: il valore è una variabile generale da usare liberamente nel programma. Un oggetto player [giocatore] deve fornire (ma non usare) questa variabile. nw_to Vedere d_to. orders Per un oggetto animate [animato] o talkable [parlante]: il valore è una routine chiamata per gestire l'ordine del giocatore. La routine deve restituire false per continuare, oppure true per terminare l'azione e non produrre ulteriori output. out_to Vedere d_to. parse_name Per un oggetto: il valore è una routine chiamata per interpretare il nome dell'oggetto. La routine deve restituire 0 se il testo non ha senso, -1 per far continuare il parser con il suo lavoro, oppure un numero positivo che indichi quante parole sono state interpretate. plural Per un oggetto: la sua forma plurale, quando si è un presenza di altri oggetti come questo. Il valore può essere una stringa od una routine che stampi una stringa. react_after Per un oggetto: individua le azioni che si svolgono nelle vicinanze, quelle che avvengono quando questo oggetto è in scope. Il valore è una routine che viene chiamata dopo che l'azione è accaduta, ma prima che il giocatore venga informato. Vedere after. react_before Per un oggetto: individua le azioni che si svolgono nelle vicinanze, quelle che avvengono quando questo oggetto è in scope. Il valore è una routine che viene chiamata prima che l'azione accada. Vedere after. s_to se_to Vedere d_to. short_name Per un oggetto: un nome sintetico alternativo od aggiuntivo. Il valore può essere una stringa od una routine che stampi una stringa. La routine deve restituire false per continuare visualizzando il vero nome sintetico dell'oggetto (dalla testata della definizione dell'oggetto), oppure true per terminare l'azione e non produrre ulteriori output. short_name_indef Per un oggetto non inglese: il nome sintetico quando viene preceduto da un oggetto indefinito. Il valore può essere una stringa od una routine che stampi una stringa. sw_to Vedere d_to. time_left Per un oggetto timer: il valore è una variabile che contiene il numero di turni che mancano al timer associato a questo oggetto per arrivare arrivare a 0 ed invocare la proprietà time_out dello stesso (il timer viene attivato ed inizializzato con StartTimer(obj_id)). time_out Per un oggetto timer: il valore è una routine che viene eseguita quando il valore time_left dell'oggetto (inizializzato da StartTimer(obj_id) e non interrotto da StopTimer(obj_id)) raggiunge lo 0. u_to w_to Vedere d_to. when_closed when_opened Per un oggetto container [contenitore] o door [porta]: usato quando l'oggetto viene incluso nella descrizione estesa di una stanza. Il valore può essere una stringa od una routine che stampi una stringa. when_off when_on Per un oggetto switchable [accendibile]: usato quando l'oggetto viene incluso nella descrizione estesa di una stanza. Il valore può essere una stringa od una routine che stampi una stringa. with_key Per un oggetto lockable [chiudibile a chiave]: l'obj_id (solitamente una chiave) che serve per chiudere a chiave ed aprire l'oggetto, oppure nothing se nessuna chiave va bene. Gli attributi degli oggetti -------------------------- absent Per un oggetto vagante (uno con la proprietà found_in, che può apparire in molte stanze): non è più lì. animate Per un oggetto: è una creatura vivente. clothing Per un oggetto: può essere indossato. concealed Per un oggetto: è presente, ma nascosto alla vista. container Per un oggetto: può contenere altri oggetti al suo interno (ma non sopra). door Per un oggetto: è una porta od un ponte tra due stanze. edible Per un oggetto: può essere mangiato. enterable Per un oggetto: ci si può entrare. female Per un oggetto animate [animato]: il sesso dell'oggetto è femminile. general Per un oggetto od una stanza: un flag di uso generale. light Per un oggetto od una stanza: fornisce luce. lockable Per un oggetto: può essere chiuso a chiave; vedere la proprietà with_key. locked Per un oggetto: non può essere aperto (è chiuso a chiave). male Per un oggetto animate [animato]: il sesso dell'oggetto è maschile. moved Per un oggetto: il giocatore l'ha preso o lo sta prendendo. neuter Per un oggetto animate [animato]: l'oggetto non è né maschio né femmina. on Per un oggetto switchable [accendibile]: è acceso. open Per un oggetto container [contenitore] o door [porta]: è aperto. openable Per un oggetto container [contenitore] o door [porta]: può essere aperto. pluralname Per un oggetto: è plurale. proper Per un oggetto: l'oggetto è un nome proprio, quindi non deve essere preceduto da "The" o "the", oppure "il", "lo", "la",... scenery Per un oggetto: non può essere preso; non viene visualizzato nella descrizione di una stanza. scored Per un oggetto: fa guadagnare OBJECT_SCORE punti quando viene preso per la prima volta. Per una stanza: fa guadagnare ROOM_SCORE punti quando vi si entra la prima volta. static Per un oggetto: non può essere preso. supporter Per un oggetto: vi si possono mettere sopra altri oggetti (ma non dentro). switchable Per un oggetto: può essere acceso o spento. talkable Per un oggetto: ci si può rivolgere con "oggetto, fai questo". transparent Per un oggetto container [contenitore]: gli oggetti che contiene sono visibili. visited Per una stanza: il giocatore la sta visitando o l'ha visitata. workflag Flag interno temporaneo, disponibile anche per il programma. worn Per un oggetto clothing [indossabile]: è indossato. Punti d'ingresso opzionali -------------------------- Queste routine, se le fornite, vengono chiamate quando indicato. AfterLife() Il giocatore è morto; impostare deadflag=0 lo fa resuscitare. AfterPrompt() Il prompt ">" è stato stampato. Amusing() Il giocatore ha vinto; è stata definita la costante AMUSING_PROVIDED. BeforeParsing() Il parser ha in ingresso del testo, ha impostato il buffer e le tabelle del parser ed ha inizializzato wn ad 1. ChooseObjects(oggetto, flag) Il parser ha trovato "ALL", "TUTTO" od una frase con un oggetto ambiguo (non è chiaro quale scegliere) ed ha deciso che l'oggetto deve essere escluso (se flag è impostato a 0), od incluso (se flag è impostato ad 1). La routine deve restituire 0 per accettare la decisione, 1 per forzare l'inclusione, 2 per forzare l'esclusione. Se il flag è 2 il parser è indeciso: la routine deve restituire un punteggio appropriato tra 0 e 9. DarkToDark() Il giocatore si è mosso da una stanza al buio ad un'altra. DeathMessage() Il giocatore è morto; deadflag vale 3 o superiore. GamePostRoutine() Chiamata dopo tutte le azioni. GamePreRoutine() Chiamata prima di tutte le azioni. Initialise() Obbligatoria; fare caso allo spelling britannico (la s al posto della z): chiamata ad ogni inizio di gioco. Deve impostare location; può restituire 2 per impedire la visualizzazione del banner. InScope() Chiamata durante il parsing (l'interpretazione del comando). LookRoutine() Chiamata alla fine di ogni descrizione Look, guarda. NewRoom() Chiamata quando la stanza cambia, prima di visualizzarne la descrizione. ParseNoun(oggetto) Chiamata per interpretare il nome dell'oggetto. ParseNumber(array_di_byte, lunghezza) Chiamata per interpretare un numero. PrintRank() Aggiunge informazioni alla visualizzazione del punteggio. PrintTaskName(numero) Stampa il nome del compito da eseguire. PrintVerb(indirizzo) Chiamata quando un verbo non usuale viene stampato. TimePasses() Chiamata dopo ogni turno. UnknownVerb() Chiamata quando un verbo sconosciuto viene incontrato. Azioni del gruppo 1 ------------------- Le azioni del gruppo 1 supportano i verbi 'meta'. Queste sono le azioni standard ed i verbi che le scatenano. FullScore "FULLSCORE", "FULL [SCORE]", "PUNTEGGIO COMPLETO", "PUNTI" LMode1 "BRIEF", "NORMAL", "MODALITA NORMALE", "NORMALE" LMode2 "LONG", "VERBOSE", "MODALITA LUNGA/COMPLETA", "LUNGO" LMode3 "SHORT", "SUPERBRIEF", "MODALITA BREVE", "BREVE" NotifyOff "NOTIFY OFF", "NOTIFICA DISATTIVATA" NotifyOn "NOTIFY [ON]", "NOTIFICA ATTIVATA" Objects "OBJETCS", "OGGETTI" Places "PLACES", "LUOGHI", "POSTI" Pronouns "[PRO]NOUNS", "PRONOMI" Quit "DIE", "Q[UIT]", "USCIRE", "FINE", "BASTA" Restart "RESTART", "RICOMINCIA" Restore "RESTORE", "CARICA" Save "SAVE", "SALVA" !!! Qui c'è un errore sulla IBG originale, dove dice "CLOSE" Score "SCORE", "PUNTEGGIO" ScriptOff "[TRAN]SCRIPT OFF", "NOSCRIPT", "UNSCRIPT", "TRASCRIZIONE DISATTIVATA" ScriptOn "[TRAN]SCRIPT [ON]", "TRASCRIZIONE" Verify "VERIFY", "VERIFICA" Version "VERSION", "VERSIONE" E gli strumenti di debug. ActionsOff "ACTIONS OFF" ActionsOn "ACTIONS [ON]" ChangesOff "CHANGES OFF" ChangesOn "CHANGES [ON]" CommandsOff "RECORDING OFF" CommandsOn "RECORDING [ON]" CommandsRead "REPLAY" Gonear "GONEAR" Goto "GOTO" Predictable "RANDOM" RoutinesOff "MESSAGES OFF", "ROUTINES OFF" RoutinesOn "MESSAGES [ON]", "ROUTINES [ON]" Scope "SCOPE" Showobj "SHOWOBJ" Showverb "SHOWVERB" TimersOff "DAEMONS OFF", "TIMERS OFF" TimersOn "DAEMONS [ON]", "TIMERS [ON]" TraceLevel "TRACE numero" TraceOff "TRACE OFF" TraceOn "TRACE [ON]" XAbstract "ABSTRACT" XPurloin "PURLOIN" XTree "TREE" Azioni del gruppo 2 ------------------- Le azioni del gruppo 2 solitamente funzionano se vengono fornite le corrette circostanze. Close "CHIUDI", "COPRI" Disrobe "RIMUOVI", "TOGLI" Drop "LASCIA", "LANCIA", "ABBANDONA", "POSA", "METTI GIU" Eat "MANGIA" Empty "SVUOTA" EmptyT "SVUOTA SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA" Enter "STAI SU|SUL|SULLO...", "STA SU|SUL|SULLO...", "VAI", "CAMMINA", "CORRI", "VA", "VAI IN|NEL|NELLO|NELL'|NELLA|NEI|NEGLI|NELLE|DENTRO|ATTRAVERSO|A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE", "CAMMINA IN|NEL|NELLO...", "CORRI IN|NEL|NELLO...", "VA IN|NEL|NELLO...", "ENTRA", "ATTRAVERSA", "VISITA", "ENTRA IN|NEL|NELLO...", "ATTRAVERSA IN|NEL|NELLO...", "SIEDI", "SIEDITI", "SDRAIATI", "SIEDI SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI...|IN|NEL|NELLO...", "SIEDITI SU|SUL...", "SDRAIATI SU|SUL..." Examine "G[UARDA]", "VEDI", "L", "ESAMINA", "X", "DESCRIVI", "CONTROLLA", "LEGGI" Exit "LASCIA", "ABBANDONA", "VAI FUORI", "CAMMINA FUORI", "CORRI FUORI", "VA FUORI", "SCENDI", "SCENDI DA|DAL|DALLO|DALLA|DALL'|DAI|DAGLI|DALLE", "FUORI", "ESCI", "FUORI DA|DAL|DALLO...", "ESCI DA|DAL|DALLO..." Give "DAI A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE", "PAGA A|AD...", "OFFRI A|AD...", "DA A|AD..." Go "LASCIA", "ABBANDONA", "VAI A|AD|VERSO", "CAMMINA A|AD|VERSO", "CORRI A|AD|VERSO", "VA A|AD|VERSO" GoIn "VAI DENTRO", "CORRI DENTRO", "VA DENTRO", "ENTRA", "ATTRAVERSA", "VISITA", "ENTRA DENTRO", "IN", "DENTRO" Insert "METTI DENTRO|IN|NEL|NELLO|NELL'|NELLA|NEGLI|NELLE|NEI", "INSERISCI DENTRO|IN|NELLO...", "LASCIA DENTRO|IN|NELLO...", "ABBANDONA DENTRO|IN|NELLO...", "POSA DENTRO|IN|NELLO..." Inv "FAI INVENTARIO", "INVENTARIO", "INV", "I" InvTall "INVENTARIO ESTESO", "INV ESTESO", "I ESTESO" InvWide "INVENTARIO COMPLETO", "INV COMPLETO", "I COMPLETO" Lock "CHIUDI CON|COL|A", "SERRA CON|COL", "BLOCCA CON|COL" Look "GUARDA", "G", "VEDI", "L" Open "APRI", "SCOPRI" PutOn "METTI SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA", "METTITI SU|SUL|SULLO...", "LASCIA SU|SUL|SULLO...", "LANCIA SU|SUL|SULLO...", "ABBANDONA SU|SUL|SULLO...", "POSA SU|SUL|SULLO..." Remove "PRENDI DA|DAL|DALLO|DALLA|DALL'|DAGLI|DALLE|DAI", "TRASPORTA DA|DAL|DALLO...", "AFFERRA DA|DAL|DALLO...", "RACCOGLI DA|DAL|DALLO...", "RIMUOVI DA|DAL|DALLO...", "TOGLI DA|DAL|DALLO..." Search "G[GUARDA] DENTRO|IN|NEL|NELLO|NELL'|NELLA|NEGLI|NELLE|NEI|ATTRAVERSO|SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA", "VEDI DENTRO|IN|NEL...", "L DENTRO|IN|NEL...", "CERCA [DENTRO|IN|NEL|NELLO|NELL'|NELLA|NEGLI|NELLE|NEI]", "TROVA [DENTRO|IN|NEL...]", "RICERCA [DENTRO|IN|NEL...]" Show "MOSTRA A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE", "PRESENTA A|AD|ALL'...", "FAI VEDERE A|AD|ALL'..." SwitchOff "GIRA A OFF|SU OFF", "RUOTA A OFF|SU OFF", "DISATTIVA", "SPEGNI" SwitchOn "GIRA A ON|SU ON", "RUOTA A ON|SU ON", "ATTIVA", "ACCENDI" Take "PRENDI", "TRASPORTA", "AFFERRA", "RACCOGLI", "RIMUOVI", "TOGLI", "PELA" Transfer "TRASFERISCI SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA|DENTRO|IN|NEL|NELLO|NELL'|NELLA|NEGLI|NELLE|NEI", "SPOSTA SU|SUL|SULLO..." Unlock "APRI CON|COL|A", "SCOPRI CON|COL|A", "SCASSINA CON|COL|A", "SBLOCCA CON|COL|A" VagueGo "VAI", "CAMMINA", "CORRI", "VA" Wear "INDOSSA", "METTI", "METTITI" Le azioni del gruppo 3 ---------------------- Le azioni del gruppo 3 sono per impostazione predefinita dei modelli che visualizzano un messaggio e si fermano alla fase "before" [prima] (quindi non c'è una fase "after" [dopo]). Answer "RISPONDI A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE", "DÌ A|AD|ALL'...", "GRIDA A|AD|ALL'...", "DI A|AD|ALL'...", "DI' A|AD|ALL'...", "DICI A|AD|ALL'..." Ask "CHIEDI A|AD|ALL'... CIRCA|SU|SUL|SUI|SULLO|SULL'|SULLA|SUGLI|SULLE|DI|DELLO|DELLA|DELL'|DEI|DEGLI|DELLE", "DOMANDA A|AD|ALL'... CIRCA|SU|SUL..." AskFor "CHIEDI A|AD|ALL'...", "DOMANDA A|AD|ALL'..." Attack "ATTACCA [CON|COL]", "ROMPI [CON|COL]", "COLPISCI [CON|COL]", "COMBATTI [CON|COL]", "UCCIDI [CON|COL]", "TORTURA [CON|COL]", "LOTTA [CON|COL]", "SFONDA [CON|COL]", "AMMAZZA [CON|COL]" Blow "SOFFIA [DENTRO|IN|NEL|NELLO|NELL'|NELLA|NEGLI|NELLE|NEI]" Burn "BRUCIA [CON|COL]", "INCENDIA [CON|COL]" Buy "COMPRA", "ACQUISTA" Climb "VAI SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA", "CAMMINA SU|SUL|SULLO...", "CORRI SU|SUL|SULLO...", "VA SU|SUL|SULLO...", "SCALA [SU|SUL|SULLO...]", "SALI [SU|SUL|SULLO...]", "ARRAMPICA [SU|SUL|SULLO...]", "ARRAMPICATI [SU|SUL|SULLO...]" Consult "CONSULTA CIRCA|SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA", "LEGGI DENTRO|IN|NEL|NELLO|NELL'|NELLA|NEGLI|NELLE|NEI" Cut "TAGLIA [CON|COL]", "AFFETTA [CON|COL]", "SFRONDA [CON|COL]", "SFOLTISCI [CON|COL]", "SPACCA [CON|COL]", "STRAPPA [CON|COL]" Dig "SCAVA [CON|COL]" Drink "BEVI", "TRANGUGIA", "SORSEGGIA" Fill "RIEMPI", "COLMA" Jump "SALTA" JumpOver "SALTA SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA" Kiss "BACIA", "ABBRACCIA" Listen "SENTI", "ASCOLTA" LookUnder "G[UARDA] SOTTO", "VEDI SOTTO", "L SOTTO" Mild Diverse imprecazioni minori No "NO" Pray "PREGA" Pull "TIRA", "TRASCINA" Push "TRASFERISCI", "SPOSTA", "PREMI", "MUOVI", "SPINGI" PushDir "PREMI A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE", "MUOVI A|AD|ALL'..." Rub "PULISCI", "STROFINA", "SPOLVERA", "RIPULISCI", "LUCIDA", "LUSTRA" Set "IMPOSTA" SetTo "IMPOSTA TO" Sing "CANTA" Sleep "DORMI", "SONNECCHIA" Smell "ANNUSA", "ODORA" Sorry "SPIACENTE", "SCUSA", "CHIEDI SCUSA|SCUSE", "DOMANDA SCUSA|SCUSE" Squeeze "SCHIACCIA", "SPREMI", "SPIACCICA" Strong Diverse imprecazioni forti. Swim "NUOTA" Swing "SCUOTI" Taste "ASSAGGIA", "ASSAPORA", "GUSTA" Tell "PARLA A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE CIRCA|SU|SUL|SULLO|SULL'|SULLA|SUGLI|SUI|SULLE|DI|DELLO|DELLA|DELL'|DEI|DEGLI|DELLE", "PARLA CON|COL [CIRCA|SU|SUL...]" Think "PENSA", "MEDITA", "RIFLETTI" ThrowAt "LANCIA A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE|SU|SUL|SULLO|SULL'|SULLA|SUI|SUGLI|SULLE|SOPRA|CONTRO|DENTRO|IN|NEL|NELLO|NELL'|NELLA|NEGLI|NELLE|NEI" Tie "LEGA [A|AD|ALL'|ALLO|ALLA|AL|AGLI|AI|ALLE] [CON|COL]", "FISSA [A|AD|ALL'...] [CON|COL]", "CONGIUNGI [A|AD|ALL'...] [CON|COL]", "UNISCI [A|AD|ALL'...] [CON|COL]", "ALLACCIA [A|AD|ALL'...] [CON|COL]", "ANNODA [A|AD|ALL'...] [CON|COL]" Touch "TOCCA", "ACCAREZZA", "PALPA" Turn "GIRA", "RUOTA" Wait "ASPETTA", "ATTENDI", "Z" Wake "SVEGLIA", "SVEGLIATI", "RISVEGLIA", "RISVEGLIATI" WakeOther "SVEGLIA", "SVEGLIATI", "RISVEGLIA", "RISVEGLIATI" Wave "AGITA", "AGITATI" WaveHands "SALUTA" Yes "SI", "SÌ" Azioni finte (fake action) -------------------------- Le azioni finte gestiscono alcuni casi speciali, oppure rappresentano azioni "vere" dal punto di vista del secondo oggetto. LetGo Generata da Remove ListMiscellany Visualizza un insieme di messaggi di inventario. Miscellany Visualizza un insieme di messaggi di utilità. NotUnderstood Generato quando il parser non riesce ad interpretare alcuni ordini (order). Order Riceve le cose non gestite da orders. PluralFound Dice al parser che parse_name() ha indentificato un oggetto plurale. Prompt Visualizza il prompt, di solito ">". Receive Generata da Insert e PutOn. TheSame Generata quando il parser non è in grado di distinguere due oggetti. ThrownAt Generata da ThrowAt.