APPENDIX C - La Storia di "GUGLIELMO TELL" ========================================== Anche Guglielmo Tell, il nostro secondo gioco, è molto semplice. Vedi "Guglielmo Tell: raccontiamone la storia" nel capitolo sesto, "Guglielmo Tell: i primi anni" nel settimo capitolo, "Guglielmo Tell: il cuore della storia" nel capitolo otto e "Guglielmo Tell: la fine è vicina" nel nono capitolo. Trascrizione di una partita *************************** Il luogo: Altdorf, nel cantone Svizzero di Uri. Siamo nell'anno 1307, e la Svizzera è sotto il governo dell'imperatore Alberto di Asburgo. Il governatore locale - il balivo - è il gradasso Hermann Gessler, che ha posto il suo cappello su di un palo di legno nel centro della piazza principale; chiuque passi attraverso la piazza deve inchinarsi a questo odioso simbolo del potere imperiale. Sei arrivato dalla tua baita sui monti, accompagnato dal tuo figlio più giovane, per acquistare derrate. Sei un uomo fiero e indipendente, una guida e un cacciatore, conosciuto sia per la tua abilità come arciere e, forse poco saggiamente (visto che i suoi soldati sono ovunque), per essere incapace di nascondere il tuo disprezzo per il balivo. E' giorno di mercato: la città è piena di gente proveniente dai vicini villaggi. Raccontami una Storia Semplice esempio in Inform di Roger Firth and Sonja Kesserich. Versione 1 / Numero di Serie 020428 / Inform v6.21 Libreria 6/10 Infit Versione 2.1 / Numero di serie 030106 / (c) 2003 by Giovanni Riccardi SD Una strada di Altdorf La piccola strada conduce verso nord alla piazza principale. La gente del luogo sta sciamando nella città attraverso la porta a sud, salutando a voce alta, offrendo prodotti in vendita, scambiando notizie, informandosi con incredulità esagerata sui prezzi delle merci esposte dai mercanti, i cui banchi rendono ancora più difficile l'avanzare in mezzo alla folla. "Stammi vicino, figliolo," dici, "altrimenti potresti perderti fra tutta questa gente." >ESAMINA TUO FIGLIO Un tranquillo ragazzo biondo di otto primavere, rapido ad imparare lo stile di vita dei montanari. >VAI A NORD Lungo la strada La gente continua a premere e a farsi strada dalla porta sud alla piazza principale, che si trova appena più a nord. Riconosci la proprietaria di un banco di frutta e verdura. Helga smette di sistemare le patate e ti saluta calorosamente. "Salve, William, è una buona giornata per il commercio! Questo è il giovane Walter? Come è cresciuto... Ecco, questa è una mela per lui... Se toglie la parte ammaccata, il resto è buono. Come sta la signora Tell? Salutamela davvero..." >INVENTARIO Stai portando: un mela un faretra (indossato) tre frecce un arco >PARLA A HELGA Ringrazi calorosamente Helga per la mela. [Il tuo punteggio è appena aumentato di un punto.] >DAI LA MELA A WALTER "Grazie, Papi." [Il tuo punteggio è appena aumentato di un punto.] >NORD Lato sud della piazza La piccola strada che conduce verso sud si apre nella piazza principale, per poi riprendere dalla parte opposta di questo affollato luogo di ritrovo. Per continuare lungo la strada, verso la tua destinazione - la conceria di Johansson - devi attraversare, andando verso nord, la piazza, al centro della quale vedi il cappello di Gessler messo su di un palo. Se vuoi andare avanti, non puoi evitare di passarci vicino. Soldati imperiali si fanno largo rudemente tra la folla, spingendo, calciando e imprecando ad alta voce. >ESAMINA I SOLDATI Uomini sgarbati e violenti, non di queste parti. >ESAMINA CAPPELLO Sei troppo lontano per vedere qualsiasi dettaglio. >N In mezzo alla piazza C'è meno folla al centro della piazza; la maggior parte della gente preferisce tenersi il più lontano possibile dal palo che troneggia in questo luogo, reggendo quell'assurdo cappello cerimoniale. Un gruppo di soldati rimane nei pressi, osservando chiunque passi di qui. >X CAPPELLO Il palo, il tronco di un piccolo pino, solo pochi centimetri di diametro, sarà alto tre o quattro metri. Sulla cima è stato appoggiato con cura il ridicolo cappello di cuoio nero e rosso di Gessler, dalla larga tesa e adornato con un ciuffo di piume d'oca tinte. >N Un soldato ti sbarra la strada. "Hey, tu, spilungone; hai dimenticato le buone maniere? Forse sarebbe il caso di fare un bel saluto al cappello del balivo, non trovi?" >N "Ti conosco, Tell, sei uno che porta solo guai, vero? Non vogliamo teste calde qui, quindi fai il bravo ragazzo e porgi il tuo saluto al dannato cappello. Fallo ora, non voglio chiedertelo di nuovo..." >N "Va bene, Herr Tell, ora siete nei guai. Ve l'ho chiesto gentilmente, ma voi siete troppo orgoglioso e troppo stupido. Penso che il balivo voglia scambiare qualche parola con voi." Dicendo ciò, i soldati prendono te e Walter e, mentre il sergente corre via a cercare Gessler, il resto degli uomini vi trascina rudemente verso il vecchio tiglio che cresce nella piazza del mercato. Piazza del mercato Il mercato di Altdorf, vicino alla piazza principale, è stato velocemente sgombrato dai banchi. Un gruppo di soldati ha spinto indietro la folla per lasciare spazio libero di fronte al tiglio che è cresciuto qui fin da quando la gente ha memoria. Normalmente esso fa ombra ai vecchi della città che si ritrovano qui per chiaccherare, guardare le ragazze e giocare a carte. Oggi però, esso è solitario... eccetto che per Walter, che è stato legato al tronco. A circa quaranta metri dall'albero, tu sei tenuto bloccato da due degli uomini del balivo. Gessler sta osservando da lontano, con un sogghigno sul volto. "A quanto pare hai bisogno di una buona lezione, stupido. Nessuno deve attraversare la piazza senza prestare omaggio a Sua Altezza Imperiale Alberto; nessuno, hai capito? Potrei farti decapitare per tradimento, ma voglio essere clemente. Se ti comporterai ancora follemente, non potrai aspettarti alcuna pietà da parte mia, ma questa volta sei libero di andare... non appena mi avrai dimostrato la tua abilità di arciere colpendo questa mela da dove ti trovi. Non dovrebbe essere troppo difficile. Sergente, prenda; la appoggi sulla testa di quel piccolo bastardo." >X GESSLER Basso e robusto, ma dal volto subdolo e affilato, Gessler usa il potere affidatogli opprimendo la comunità locale. >X WALTER Ti sta guardando, cercando di apparire coraggioso e rimanere fermo. Le sue braccia sono legate dietro al tronco, e la mela è stata posata tra i suoi capelli biondi. >X MELA A questa distanza puoi appena vederla. >LANCIA LA FRECCIA CONTRO LA MELA Con calma e fermezza incocchi una freccia nell'arco, tendi la corda e prendi la mira con più cura di quanto tu abbia mai fatto in vita tua. Trattenendo il fiato, senza un batter d'occhio, timorosamente, rilasci la freccia. Questa vola attraverso la piazza, verso tuo figlio, e pianta la mela contro il tronco dell'albero. La folla esulta; Gessler sembra decisamente deluso. *** Hai vinto *** In questa partita hai totalizzato 3 punti su 4 possibili, in 17 turni. Vuoi RICOMINCIARE, CARICARE una partita salvata o USCIRE ? >USCIRE Codice sorgente del gioco ************************* !============================================================================ Constant Story "Raccontami una Storia"; Constant Headline "^Semplice esempio in Inform ^di Roger Firth and Sonja Kesserich.^"; ! Traduzione di Paolo Lucchesi Release 1; Serial "020428"; ! per tener conto delle release pubbliche Constant MAX_SCORE = 4; Include "Parser"; Include "VerbLib"; Include "Replace"; !============================================================================ ! Classi Class Room has light; Class Prop with before [; Examine: return false; default: print_ret "Non hai bisogno di preoccuparti ", (artdi) self, "."; ], has scenery; Class Furniture with before [; Take,Pull,Push,PushDir: print_ret (The) self, " è troppo pesante."; ], has static supporter; Class Arrow with name 'freccia' 'frecce//p', article "una", plural "frecce", description "Come tutte le altre tue frecce, dritta e acuminata.", before [; Drop: print_ret "Troppo pericolose, meglio non lasciarle in giro."; ]; Class NPC with life [; Answer,Ask,Order,Tell: print_ret "Usa soltanto PARLA [", (arta) self, "]."; ], has animate; !============================================================================ ! Oggetti Room strada "Una strada di Altdorf" with description [; print "La piccola strada conduce verso nord alla piazza principale. La gente del luogo sta sciamando nella città attraverso la porta a sud, salutando a voce alta, offrendo prodotti in vendita, scambiando notizie, informandosi con incredulità esagerata sui prezzi delle merci esposte dai mercanti, i cui banchi rendono ancora più difficile l'avanzare in mezzo alla folla.^"; if (self hasnt visited) print "^~Stammi vicino, figliolo,~ dici, ~altrimenti potresti perderti fra tutta questa gente.~^"; ], n_to vicino_piazza, s_to "La folla, muovendosi verso la piazza a nord, ti impedisce di tornare indietro."; Prop "porta meridionale" with name 'cancello' 'porta' 'meridionale', description "Nelle mura della città si apre una larga porta. Il pesante cancello di legno ora è aperto.", found_in strada; Prop "banchi" with name 'banchi', description "Cibo, abiti, attrezzature da montagna; la solita roba.", found_in strada vicino_piazza, has pluralname; Prop "mercanti" with name 'mercante' 'mercanti', description "Qualche truffatore, ma per il resto gente a posto che si guardagna da vivere.", found_in strada vicino_piazza, has animate pluralname; Prop "gente" with name 'persone' 'gente', description "Gente di montagna, come te.", found_in [; return true; ], has animate female; !---------------------------------------------------------------------------- Room vicino_piazza "Lungo la strada" with description "La gente continua a premere e a farsi strada dalla porta sud alla piazza principale, che si trova appena più a nord. Riconosci la proprietaria di un banco di frutta e verdura.", n_to piazza_sud, s_to strada; Furniture banco "banco di frutta e verdura" vicino_piazza with name 'frutta' 'verdura' 'banco' 'tavolo', description "Davvero un piccolo banco, con un grosso mucchio di patate, qualche carota, qualche rapa, un po' di mele.", before [; Search: <>; ], has scenery; Prop "patate" vicino_piazza with name 'patata' 'patate' 'mucchio', description "Devono essere state raccolte un po' di tempo fa... almeno 300 anni!", has pluralname female; Prop "frutta e verdura" vicino_piazza with name 'carota' 'carote' 'rapa' 'rape' 'mele' 'vegetali', description "Prodotti locali."; NPC proprietaria "Helga" vicino_piazza with name 'proprietaria' 'verduraia' 'venditrice' 'negoziante' 'mercante' 'helga' 'vestito' 'sciarpa', description "Helga è una donna grassoccia e affabile, infagottata in un abito informe e una sciarpa a pois.", initial [; print "Helga smette di sistemare le patate e ti saluta calorosamente.^"; if (location hasnt visited) { move mela to player; print "^~Salve, William, è una buona giornata per il commercio! Questo è il giovane Walter? Come è cresciuto... Ecco, questa è una mela per lui... Se toglie la parte ammaccata, il resto è buono. Come sta la signora Tell? Salutamela davvero...~^"; } ], frasi_dette 0, ! per contare gli argomenti di conversazione life [; Kiss: print_ret "~Ooh, che sfacciato!~"; Talk: self.frasi_dette = self.frasi_dette + 1; switch (self.frasi_dette) { 1: score = score + 1; print_ret "Ringrazi calorosamente Helga per la mela."; 2: score = score + 1; print_ret "~Ci vediamo presto.~"; default: return false; } ], has female proper; !---------------------------------------------------------------------------- Room piazza_sud "Lato sud della piazza" with description "La piccola strada che conduce verso sud si apre nella piazza principale, per poi riprendere dalla parte opposta di questo affollato luogo di ritrovo. Per continuare lungo la strada, verso la tua destinazione - la conceria di Johansson - devi attraversare, andando verso nord, la piazza, al centro della quale vedi il cappello di Gessler messo su di un palo. Se vuoi andare avanti, non puoi evitare di passarci vicino. Soldati imperiali si fanno largo rudemente tra la folla, spingendo, calciando e imprecando ad alta voce.", n_to centro_piazza, s_to vicino_piazza; Prop "palo" with name 'palo' 'legno', description "Sei troppo lontano per vedere qualsiasi dettaglio.", found_in piazza_sud piazza_nord; Prop "cappello" with name 'cappello', description "Sei troppo lontano per vedere qualsiasi dettaglio.", found_in piazza_sud piazza_nord; Prop "soldati di Gessler" with name 'soldato' 'soldati', description "Uomini sgarbati e violenti, non di queste parti.", before [; FireAt: print_ret "Sono abbondantemente in sovrannumero."; Talk: print_ret "Una simile feccia non merita la tua considerazione."; ], found_in piazza_sud piazza_nord centro_piazza mercato, has animate pluralname; !---------------------------------------------------------------------------- Room centro_piazza "In mezzo alla piazza" with description "C'è meno folla al centro della piazza; la maggior parte della gente preferisce tenersi il più lontano possibile dal palo che troneggia in questo luogo, reggendo quell'assurdo cappello cerimoniale. Un gruppo di soldati rimane nei pressi, osservando chiunque passi di qui.", n_to piazza_nord, s_to piazza_sud, avvertimenti 0, ! per contare gli avvertimenti dei soldati before [; Go: if (noun == s_obj) { self.avvertimenti = 0; palo.salutato = false; } if (noun == n_obj) { if (palo.salutato == true) { print "^~Arrivederci, e buona giornata.~^"; return false; } ! fine (palo salutato) else { self.avvertimenti = self.avvertimenti + 1; switch (self.avvertimenti) { 1: print_ret "Un soldato ti sbarra la strada. ^^ ~Hey, tu, spilungone; hai dimenticato le buone maniere? Forse sarebbe il caso di fare un bel saluto al cappello del balivo, non trovi?~"; 2: print_ret "^~Ti conosco, Tell, sei uno che porta solo guai, vero? Non vogliamo teste calde qui, quindi fai il bravo ragazzo e porgi il tuo saluto al dannato cappello. Fallo ora, non voglio chiedertelo di nuovo...~"; default: print "^~Va bene, "; style underline; print "Herr"; style roman; print " Tell, ora siete nei guai. Ve l'ho chiesto gentilmente, ma voi siete troppo orgoglioso e troppo stupido. Penso che il balivo voglia scambiare qualche parola con voi.~ ^^ Dicendo ciò, i soldati prendono te e Walter e, mentre il sergente corre via a cercare Gessler, il resto degli uomini vi trascina rudemente verso il vecchio tiglio che cresce nella piazza del mercato.^"; move mela to figlio; PlayerTo(mercato); return true; } ! fine switch } ! fine (palo non salutato) } ! fine (noun == n_obj) ]; Furniture palo "palo di legno" centro_piazza with name 'palo' 'legno' 'tronco' 'pino' 'cappello' 'nero' 'rosso' 'cuoio' 'tesa' 'piume', description "Il palo, il tronco di un piccolo pino, solo pochi centimetri di diametro, sarà alto tre o quattro metri. Sulla cima è stato appoggiato con cura il ridicolo cappello di cuoio nero e rosso di Gessler, dalla larga tesa e adornato con un ciuffo di piume d'oca tinte.", salutato false, before [; Salute: self.salutato = true; print_ret "Saluti il cappello sull'alto palo. ^^ ~Grazie davvero, messere~, sghignazzano i soldati."; ], has scenery; !---------------------------------------------------------------------------- Room piazza_nord "Lato nord della piazza" with description "Una piccola strada conduce verso nord, lasciando la piazza affollata. Al centro della piazza, di poco più a sud, vedi ancora il palo e il cappello.", n_to [; deadflag = 3; print_ret "Con Walter al tuo fianco, lasci la piazza percorrendo la strada verso nord, andando verso la conceria di Johansson."; ], s_to "Non vuoi assolutamente passarci di nuovo."; !---------------------------------------------------------------------------- Room mercato "Piazza del mercato" with description "Il mercato di Altdorf, vicino alla piazza principale, è stato velocemente sgombrato dai banchi. Un gruppo di soldati ha spinto indietro la folla per lasciare spazio libero di fronte al tiglio che è cresciuto qui fin da quando la gente ha memoria. Normalmente esso fa ombra ai vecchi della città che si ritrovano qui per chiaccherare, guardare le ragazze e giocare a carte. Oggi però, esso è solitario... eccetto che per Walter, che è stato legato al tronco. A circa quaranta metri dall'albero, tu sei tenuto bloccato da due degli uomini del balivo.", cant_go "Cosa? E lasceresti tuo figlio legato a quell'albero?"; Object albero "tiglio" mercato with name 'albero' 'tiglio' 'tronco', description "Un grosso albero.", before [; FireAt: if (NotBowOrArrow(second)) return true; deadflag = 3; print_ret "La mano ti trema, e la freccia vola alta, andando a colpire il tronco, almeno una spanna sopra la testa di Walter."; ], has scenery; NPC balivo "balivo" mercato with name 'governatore' 'balivo' 'hermann' 'gessler', description "Basso e robusto, ma dal volto subdolo e affilato, Gessler usa il potere affidatogli opprimendo la comunità locale.", initial [; print "Gessler sta osservando da lontano, con un sogghigno sul volto.^"; if (location hasnt visited) print "~A quanto pare hai bisogno di una buona lezione, stupido. Nessuno deve attraversare la piazza senza prestare omaggio a Sua Altezza Imperiale Alberto; nessuno, hai capito? Potrei farti decapitare per tradimento, ma voglio essere clemente. Se ti comporterai ancora follemente, non potrai aspettarti alcuna pietà da parte mia, ma questa volta sei libero di andare... non appena mi avrai dimostrato la tua abilità di arciere colpendo questa mela da dove ti trovi. Non dovrebbe essere troppo difficile. Sergente, prenda; la appoggi sulla testa di quel piccolo bastardo.~^"; ], life [; Talk: print_ret "Non hai intenzione di rivolgergli la parola."; ], before [; FireAt: if (NotBowOrArrow(second)) return true; deadflag = 3; print_ret "Prima che i soldati possano reagire, ti volti e scagli una freccia contro Gessler; la tua frecca colpisce il suo cuore ed egli muore miseramente. La folla ha un sussulto, seguito da un applauso."; ], has male; !============================================================================ ! Oggetti del giocatore Object arco "arco" with name 'arco', description "Your trusty yew bow, strung with flax.", before [; Drop,Give: print_ret "Non ti separi mai dal tuo fidato arco."; ] has clothing; Object faretra "faretra" with name 'faretra', description "Fatta in pelle di capra, di solito pende dalla tua spalla sinistra.", before [; Drop,Give: print_ret "E' un regalo di tua moglie Hedwig."; ], has container open clothing; Arrow "freccia" faretra; Arrow "freccia" faretra; Arrow "freccia" faretra; NPC figlio "tuo figlio" with name 'figlio' 'tuo' 'ragazzo' 'bambino' 'walter', description [; if (location == mercato) print_ret "Ti sta guardando, cercando di apparire coraggioso e rimanere fermo. Le sue braccia sono legate dietro al tronco, e la mela è stata posata tra i suoi capelli biondi."; else print_ret "Un tranquillo ragazzo biondo di otto primavere, rapido ad imparare lo stile di vita dei montanari."; ], life [; Give: score = score + 1; move noun to self; print_ret "~Grazie, Papi.~"; Talk: if (location == mercato) print_ret "~Stai calmo, figliolo, e confida in Dio.~"; else print_ret "Spieghi a tuo figlio la tua visione della vita."; ], before [; Examine,Listen,Salute,Talk: return false; FireAt: if (location == mercato) { if (NotBowOrArrow(second)) return true; deadflag = 3; print_ret "Oops! Sicuramente non volevi far ciò..."; } default: if (location == mercato) print_ret "Le guardie non lo permetterebbero."; else return false; ], found_in [; return true; ], has male proper scenery transparent; Object mela "mela" with name 'mela', description [; if (location == mercato) print_ret "A questa distanza puoi appena vederla."; else print_ret "La mela è a chiazze verdi e marroni."; ], before [; Drop: print_ret "Una mela vale sempre qualcosa, meglio tenersela."; Eat: print_ret "Helga te l'ha data per Walter..."; FireAt: if (location ~= mercato) return false; if (NotBowOrArrow(second)) return true; score = score + 1; deadflag = 2; print_ret "Con calma e fermezza incocchi una freccia nell'arco, tendi la corda e prendi la mira con più cura di quanto tu abbia mai fatto in vita tua. Trattenendo il fiato, senza un batter d'occhio, timorosamente, rilasci la freccia. Questa vola attraverso la piazza, verso tuo figlio, e pianta la mela contro il tronco dell'albero. La folla esulta; Gessler sembra decisamente deluso."; ]; !============================================================================ ! Entry point routines [ Initialise; location = strada; lookmode = 2; ! in modo VERBOSO move arco to player; move faretra to player; give faretra worn; player.description = "Indossi i tradizionali abiti dei montanari svizzeri."; print_ret "^^ Il luogo: Altdorf, nel cantone Svizzero di Uri. Siamo nell'anno 1307, e la Svizzera è sotto il governo dell'imperatore Alberto di Asburgo. Il governatore locale - il balivo - è il gradasso Hermann Gessler, che ha posto il suo cappello su di un palo di legno nel centro della piazza principale; chiuque passi attraverso la piazza deve inchinarsi a questo odioso simbolo del potere imperiale. ^^ Sei arrivato dalla tua baita sui monti, accompagnato dal tuo figlio più giovane, per acquistare derrate. Sei un uomo fiero e indipendente, una guida e un cacciatore, conosciuto sia per la tua abilità come arciere e, forse poco saggiamente (visto che i suoi soldati sono ovunque), per essere incapace di nascondere il tuo disprezzo per il balivo. ^^ E' giorno di mercato: la città è piena di gente proveniente dai vicini villaggi.^"; ]; [ DeathMessage; print "Hai rovinato una bellissima leggenda."; ]; !============================================================================ ! Grammatica standard e estensioni Include "ItalianG"; !---------------------------------------------------------------------------- [ TalkSub; if (noun == player) print_ret "Niente di quello che dici può sorprenderti."; if (RunLife(noun,##Talk) ~= false) return; ! consult life[; Talk: ] print_ret "Al momento, non ti viene niente da dire."; ]; Verb 'chiacchera' 'conversa' 'c//' * 'con' creature -> Talk; Extend 'parla' first * 'a'/'ad'/'all^'/'allo'/'alla'/'al'/ 'agli'/'ai'/'alle'/'con' creature -> Talk; ! Verb 'talk' 't//' 'converse' 'chat' 'gossip' ! * 'to'/'with' creature -> Talk ! * creature -> Talk; !---------------------------------------------------------------------------- [ NotBowOrArrow o; if (o == arco or nothing || o ofclass Arrow) return false; print_ret "Non è granchè come arma, vero?"; ]; [ FireAtSub; if (noun == nothing) print_ret "Cosa? Scagliare frecce a caso?"; if (NotBowOrArrow(second)) return true; print_ret "Sembra pericoloso, non trovi?"; ]; Verb 'spara' 'mira' 'scaglia' * -> FireAt * noun -> FireAt * 'con' noun -> FireAt * 'a'/'ad'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/ 'alle'/'su'/'sul'/'sullo'/'sull^'/'sulla'/'sui'/ 'sugli'/'sulle'/'sopra'/'contro' noun -> FireAt * 'a'/'ad'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/ 'alle'/'su'/'sul'/'sullo'/'sull^'/'sulla'/'sui'/ 'sugli'/'sulle'/'sopra'/'contro' noun 'con' noun -> FireAt * 'con' noun 'a'/'ad'/'all^'/'allo'/'alla'/'al'/'agli'/ 'ai'/'alle'/'su'/'sul'/'sullo'/'sull^'/'sulla'/ 'sui'/'sugli'/'sulle'/'sopra'/'contro' noun -> FireAt reverse * noun 'a'/'ad'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/ 'alle'/'su'/'sul'/'sullo'/'sull^'/'sulla'/'sui'/ 'sugli'/'sulle'/'sopra'/'contro' noun -> FireAt reverse; Extend 'lancia' first * noun 'a'/'ad'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/ 'alle'/'su'/'sul'/'sullo'/'sull^'/'sulla'/'sui'/ 'sugli'/'sulle'/'sopra'/'contro' noun -> FireAt reverse; ! Verb 'fire' 'shoot' 'aim' ! * -> FireAt ! * noun -> FireAt ! * 'at' noun -> FireAt ! * 'at' noun 'with' noun -> FireAt ! * noun 'with' noun -> FireAt ! * noun 'at' noun -> FireAt reverse; !---------------------------------------------------------------------------- [ SaluteSub; if (noun has animate) print_ret (The) noun, " restituisce il saluto."; print_ret (The) noun, " non mostra alcuna reazione."; ]; Verb 'inchinati' 'genuflettiti' * 'a'/'ad'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/ 'alle'/'verso' noun -> Salute; Verb 'riverisci' * noun -> Salute; Extend 'saluta' first * noun -> Salute; Extend 'dai' * 'omaggio'/'omaggi' 'a'/'ad'/'all^'/'allo'/ 'alla'/'al'/'agli'/'ai'/'alle'/'verso' noun -> Salute; ! Verb 'bow' 'nod' 'kowtow' 'genuflect' ! * 'at'/'to'/'towards' noun -> Salute; ! Verb 'salute' 'greet' 'acknowledge' ! * noun -> Salute; ! Extend 'give' ! * 'homage' 'to' noun -> Salute; ! Extend 'wave' ! * 'at' noun -> Salute; !---------------------------------------------------------------------------- [ UntieSub; print_ret "Non dovresti provarci."; ]; Verb 'slega' 'sciogli' 'libera' 'rilascia' * noun -> Untie; !============================================================================ Compile-as-you-go ***************** Il tuo apprendimento di come funziona il gioco di "Guglielmo Tell" sarà notevolemtne facilitato si durante la lettura di questa guida dedicherai del tempo a digitare tu stesso il codice sul tuo computer. A noi ci sono voluti ben queattro capitoli per descrivere il gioco, che pertanto rimane incompleto e non giocabile fino alla fine del Capitolo 9. Perciò, anche se non fai errori di digitazione, il sorgente non potrà essere compilato senza errori se non si arriva a quel punto, a causa dei riferimenti nei precedenti paragrafi a oggetti che non sono presenti se non nei capitoli successivi (ad esempio il Capitolo 6 menziona l'arco e le frecce, ma essi non vengono definiti fino al capitolo 7).Ciò rappresenta una piccola seccatura,visto che ti abbiamo consigliamo generalmente di compilare frequentemente gli esempi - più o meno dopo ogni cambiamento che apporti al gioco - così da poter rilevare e correggere gli errori di sintassi il più facilmente possibile. Fortunatamente, c'è un sistema pittosto semplice di aggirare questa difficolta anche se comporta quache piccolo imbroglio. Il trucco è aggiungere temporaneamente delle definizioni minime - spesso chiamate "stubs" - di oggetti alla cui definizione completà si provvederà solo in seguito. Per esempio, se provi a compilare il gioco nello stato in cui s trova alla fine del sesto capitolo, otterrai questo: Tell.inf(16): Warning: Class "Room" declared but not used Tell.inf(19): Warning: Class "Prop" declared but not used Tell.inf(27): Warning: Class "Furniture" declared but not used Tell.inf(44): Error: No such constant as "street" Tell.inf(46): Error: No such constant as "bow" Tell.inf(47): Error: No such constant as "quiver" Compiled with 3 errors and 3 warnings Comunque, aggiungendo queste linee alla fine del tuo file sorgente: ! =============================================================== ! DEFINIZIONI TEMPORANEE NECESSARIE ALLA COMPILAZIONE ALLA FINE DEL CAPITOLO 6 Room strada; Object arco; Object faretra; una nuova compilazione ora dovrebbe riportare solo questo: Tell.inf(19): Warning: Class "Prop" declared but not used Tell.inf(27): Warning: Class "Furniture" declared but not used Compiled with 2 warnings Che è molto meglio. Non bisogna preoccuparsi per questi avvertimenti, dal momento che è facile capire da dove provengono; e ad ogn modo essi saranno eliminati tra poco. La cosa più importante è che non vi siano errori, il che significa che probabilemtne non hai fatto nessuno dei più evidenti sbagli di sintassi o di digitazione. Significa anche che il compilatore ha creato un file Z5, così ora puoi provare a "giocare" una partita. Se ci provi otterrai questo: Guglielmo Tell Un seplice gioco in inform di Roger Firth e Sonja Kesserich. Versione 1 / Numero di Serie 020428 / Inform v6.21 Libreria 6/10 Infit Versione 2.1 / Numero di serie 030106 / (c) 2003 by Giovanni Riccardi SD (strada) ** Library error 11 (27,0) ** ** The room "(street)" has no "description" property ** > ooops! Abbiamo infranto una delle regole di inform che dice che ogni locazione deve avere una proprietà description, che l'interprete visualizzerà quando si entra in quella stanza. Il nostro stub per la locazione strada non possiede una descrizione, così sebbene l'avventura venga compilata con successo, verrà comunque riportato un errore durante l'esecuzione del gioco. Il modo migliore di superare questo ostacolo è estendere la definizione della nostra classe Room, così: Class Room with description "LAVORI IN CORSO", has light; Facendo in questo modo, ci assicuriamo che ogni locazione abbia una descrizione di qualche genere; normalmente ancremo a sovrascrivere questo valore di partenza con qualcosa di significativo - "La piccola strada conduce verso nord alla piazza principale..." e così via - includendo una proprietà description nella definizione di un oggetto. Comunque, in un oggetto stub usato solo per il test dell'avventura, una descrizione di default è sufficiente (e da meno problemi): Guglielmo Tell Un seplice gioco in inform di Roger Firth e Sonja Kesserich. Versione 1 / Numero di Serie 020428 / Inform v6.21 Libreria 6/10 Infit Versione 2.1 / Numero di serie 030106 / (c) 2003 by Giovanni Riccardi SD (strada) LAVORI IN CORSO >INVENTORY Stai portando: una (faretra) (indossata) un (arco) >ESAMINA FARETRA Non puoi vedere niente del genere. > Noterai che ci sono un paio di punti interessanti. Poiché non abbiamo dato un nome esterno alla nostra strada, all'arco e alla faretra nei nostri stubs, il compilatore ha provveduto per noi ad aggiungere - (strada), (arco) e (faretra) - il nome interno che abbiamo usato nel codice ponendolo tra parentesi. Inoltre, visto che i nostri arco e faretra stubs non hanno una proprietà name, non possiamo al momento riferirci a questi oggetti durante la partita. Nessuno di questi problemi è accettabile in un gioco completo, ma al fine di testare l'avventura nei suoi primi passi essi sono facilmente tollerabili. Precedentemente abbiamo visto come l'aggiunta della definizione temporanea di tre oggetto ci permette di compilare un gioco incompleto, nello stato in cui è alla fine del capitolo 6. Ma una volta che abbiamo raggiunto la fine del capitolo 7, le cose sono piuttosto cambiate, e ora abbiamo bisogno di un set differente di oggetti stub. Per una verifica di compilazione a questo punto, rimuovi il precedente set di oggetti stub, e invece aggiungi questi - l'oggetto piazza_sud e la mela, e una zione stupida per gestire l'azione Talk nella proprietà life di Helga: ! =============================================================== ! DEFINIZIONI TEMPORANEE NECESSARIE ALLA COMPILAZIONE ALLA FINE DEL CAPITOLO 7 Room piazza_sud; Object mela; [ TalkSub; ]; Allo stesso modo, al termine del capitolo 8, rimpiazza i precedenti stubs con questi se intendi provare a compilare il gioco: ! =============================================================== ! DEFINIZIONI TEMPORANEE NECESSARIE ALLA COMPILAZIONE ALLA FINE DEL CAPITOLO 8 Room mercato; Object mela; NPC figlio; [ TalkSub; ]; [ FireAtSub; ]; [ SaluteSub; ]; Finalmente, al termine del capitolo 9 il gioco sarà completo e potrai completamente cancellare gli stubs. Usata con cautela, questa tecnica di creare un minimo di oggetti stub può essere conveniente essa permette di "provare" una porzione del tuo gioco attraverso l'interprete, e di compilare e testare il gioco in quello stato, senza aver bisogno di creare tutte le definizioni degli oggetti. Naturalmente non potrai avere un gran che di interazione con gli oggetti stub, pertanto cerca di non crearne molti. E soprattutto non dimenticarti di eliminare gli stubs ogni volta che hai completato tutte le definizioni.