! Villa Morgana ! Avventura Testuale dimostrativa realizzata da Paolo Lucchesi ! Questo prodotto e' libero, rilasciato sotto licenza GPL (Gnu Public License), ! riportata nel file allegato gpl.txt. ! Questo prodotto e' distribuito senza alcuna garanzia. L'autore non puo' essere ! ritenuto responsabile per qualsiasi danno dovuto direttamente o indirettamente ! all'uso del prodotto. ! ------------------------------------------ ! Primo piano ! ------------------------------------------ Room salotto "Un piccolo salotto" with name 'piccolo' 'salotto' 'sala' 'salottino', description [; print "Sei in un piccolo salotto alquanto disadorno. Un divano @`e appoggiato ad una parete, proprio sotto una finestra murata. Un arco si apre nella parete ovest.^"; DoTutor(self, "La tua avventura inizia qui, in questo piccolo salotto. Questa guida (che comunque puoi disattivare con il comando TUTOR) ti seguir@`a passo dopo passo (o quasi), dicendoti cosa devi fare e come farlo; cerca di seguire fedelmente le sue indicazioni per ottenerne il massimo vantaggio. Inoltre puoi ottenere molte informazioni grazie al comando AIUTO.^Ma torniamo al gioco: leggendo la descrizione puoi vedere che ci sono due oggetti interessanti, un divano e una finestra. Per iniziare puoi controllarli scrivendo ESAMINA LA FINESTRA o ESAMINA IL DIVANO. Ti accorgerai ben presto che puoi scoprire molte cose esaminando quello che vedi."); rtrue; ], w_to corridoio1, out_to corridoio1, initial [; viewPicture(Salotto_img); ], cant_go "L'unica uscita conduce verso ovest."; Object -> "arco" with name 'arco' 'arcata' 'porta' 'apertura', has scenery; Object -> finestra "finestra" with name 'finestra' 'murata' 'mattoni' 'mattone' 'muratura' 'vetro' 'vetri', description [; if (TestScope(frammenti)) print "La finestra, con un vetro rotto, pare inesorabilmente murata.^"; else print "La finestra pare inesorabilmente murata.^"; DoTutor(self, "Non tutte le azioni che tenterai andranno a buon fine, ma vale sempre la pena di tentare. Prova ad esempio a scrivere APRI LA FINESTRA."); rtrue; ], before [; Attack, Cut: if (TestScope(frammenti)) "Credi di aver fatto gi@`a abbastanza danni."; move frammenti to parent(self); "Dai un colpo secco ad un vetro della finestra e questo si frantuma in mille pezzi."; Open: give self tutored; "Apri la finestra e controlli. La muratura, come sospettavi, @`e estremamente robusta."; Close: "La finestra @`e chiusa."; ], parse_name [n ; if (~~(TestScope(frammenti))) return -1; while (NextWord() == 'finestra' or 'murata' or 'mattoni' or 'mattone' or 'muratura') n++; return n; ] has scenery female; Object -> divano "divano" with name 'divano' 'divanetto' 'cuscini' 'cuscino', description [; print "Un divano in pelle a tre posti, vecchio e ormai consunto.^"; if (accendino in self && accendino has concealed) { give accendino ~concealed; print "Sul divano trovi un accendino d'argento.^"; DoTutor(self,"Hai trovato un oggetto che ti potr@`a essere utile. Vale la pena di controllarlo meglio, grazie al comando ESAMINA L'ACCENDINO, e di portarlo con te: scrivi PRENDI L'ACCENDINO. In ogni momento puoi controllare gli oggetti che hai con te grazie al comando INVENTARIO, o, pi@`u brevemente, I."); rtrue; } rtrue; ], before [; Search: <>; Burn: "Non credi che prenda fuoco tanto facilmente."; Push, Pull: "@`E un po' troppo pesante."; ], has scenery supporter enterable; Object -> -> accendino "accendino" with name 'accendino', description "Un grazioso oggetto in argento che sei sicuro di aver gi@`a visto tra le mani di Valeria.", before [; SwitchOn: if (~~OffersLight(location)) "L'accendino non fa abbastanza luce."; "Accendi l'accendino, poi ti ricordi che non fumi."; ], each_turn [; if (self has moved) give self ~concealed; if (self in player) DoTutor(self, "Adesso che hai raccolto l'unico oggetto veramente utile in questo salotto, @`e il momento di imparare a camminare. Nelle avventure testuali in genere ci si sposta lungo le direzioni cardinali (nord, sud, est, ovest, ma anche nord-est, sud-est, nord-ovest e sud-ovest), o in alto e in basso, o ancora entrando e uscendo da luoghi ben precisi. L'unica tua via d'uscita @`e l'arco, che si trova verso ovest. Quindi scrivi VAI VERSO OVEST."); rtrue; ], has concealed; Object frammenti "frammenti di vetro" with name 'frammenti' 'frammento' 'pezzi' 'pezzo' 'schegge' 'scheggia' 'vetri' 'vetro', description "Piccoli pezzi di vetro sparsi per il pavimento.", initial "Attorno alla finestra il pavimento @`e coperto da schegge di vetro.", before [; Take, Touch, Search: "Riusciresti solo a tagliarti."; Attack, Cut: <>; ], has static pluralname; Room corridoio1 "Corridoio" with name 'corridoio', description [; give accendino tutored; print "Questo corridoio completamente spoglio conduce da sud a nord. Un arco conduce verso est.^"; DoTutor(self,"Questo corridoio @`e solo di passaggio, e non contiene niente di interessante. Da qui, come dice la descrizione, puoi soltanto andare a nord o a sud, oppure ad est, tornando ovviamente nel salotto.^Di solito nelle avventure testuali ci si deve muovere parecchio, e sarebbe fastidioso dover scrivere tutte le volte VAI VERSO..., ma per fortuna abbiamo abbreviazioni (N, S, E, O, NE, NO, SW, SO) per ogni direzione. Ad esempio, adesso, scrivi S per dirigerti verso sud."); rtrue; ], initial [; viewPicture(Corridoio11_img); ], e_to salotto, in_to salotto, s_to ingresso, n_to corridoio2, cant_go "Il corridoio porta a nord e a sud, e l'arco ad est."; Object -> "arco" with name 'arco' 'arcata' 'porta' 'apertura', has scenery; Room ingresso "Ingresso" with name 'ingresso' 'entrata' 'anticamera' 'atrio', description [; print "Il piccolo atrio in cui ti trovi @`e dominato dall'imponente portone, verso sud. Da qui un corridoio conduce a nord, mentre a ovest puoi vedere una porta. Due quadri, unico arredamento della stanza, pendono dalle pareti.^"; DoTutor(self, "Ci sono diverse cose da fare, in questo luogo. Inizia con il controllare meglio i quadri (ESAMINA I QUADRI), il portone (ESAMINA IL PORTONE) e la porta (ESAMINA LA PORTA). Inoltre nota che il verbo ESAMINA pu@`o essere abbreviato con X (X QUADRI, X PORTA).^Infine, il portone potrebbe essere una buona via di fuga."); rtrue; ], each_turn [; if (portavestibolo hasnt open) viewPicture(Ingresso1_img); else viewPicture(Ingresso2_img); ], n_to corridoio1, s_to portoneingresso, w_to portavestibolo, cant_go "Oltre al corridoio verso nord, il portone a sud e la porta ad ovest non ci sono altre vie d'uscita."; Object -> quadri "quadri" with name 'quadri' 'quadro' 'dipinti' 'dipinto' 'cornici' 'cornice' 'ritratti' 'ritratto' 'donna' 'albina' 'inferno', counter 0, description [; give self general; "Due quadri a dir poco inquietanti. Quello di destra pare rappresentare una visione dell'inferno cos@`i come lo descrive Dante Alighieri, mentre l'altro @`e il ritratto di una donna albina."; ], before [; Push, Pull, Turn: "I quadri non nascondono niente."; Take: "I quadri sono troppo ingombranti. Meglio lasciarli qui."; ], each_turn [; if (self hasnt general) rfalse; self.counter++; if (self.counter==4) { print "^Per un attimo hai avuto l'impressione che lo sguardo della donna albina nel ritratto ti stesse seguendo.^"; DoTutor(self, "Eventi che non dipendono dal tuo controllo, come questo del quadro, possono essere solamente decorativi, oppure possono nascondere indizi preziosi o rivelare eventi in accadimento. Leggili sempre con attenzione."); } if (self.counter==15) "^Eppure potresti essere sicuro che il quadro che rappresenta l'inferno sia leggermente cambiato."; ], has scenery pluralname; Object -> portoneingresso "portone" with name 'portone', description [; print "Il portone d'ingresso @`e estremamente robusto e evidentemente ben chiuso a chiave.^"; DoTutor(self, "A quanto pare la pi@`u ovvia via d'uscita da qui non @`e accessibile. Dovrai trovare un altro modo per uscire."); rtrue; ], door_dir s_to, before [; Open: "Il portone @`e chiuso a chiave."; Enter: "Il portone @`e chiuso, sprangato."; Knock: "Nessuna risposta... Ti saresti meravigliato del contrario."; Attack: "Il portone @`e troppo robusto."; ], react_before [; Go: if (noun.door_dir == self.door_dir()) <>; ], has scenery door locked transparent; Object -> -> serraturaportone "serratura" with name 'serratura' 'chiavistello' 'paletto', description "La serratura @`e decisamente robusta.", before [; Open, Unlock: "La serratura @`e inesorabilmente chiusa a chiave."; Attack: <>; ], has scenery female; Porta portavestibolo "porta" with name 'porta' 'vestibolo', description [; self.printstatus(); if (self hasnt open) DoTutor(self, "Questa porta @`e chiusa, ma non a chiave. Prova ad andare ad ovest (non ci riuscirai), poi scrivi APRI LA PORTA e riprova."); rtrue; ], found_in ingresso vestibolo, door_dir [; if (self in ingresso) return w_to; else return e_to; ], door_to [; if (self in ingresso) return vestibolo; else return ingresso; ], each_turn [; if (self has open) give self tutored; ], has female; Room vestibolo "Vestibolo" with description "Una piccola stanza dove gli ospiti possono lasciare i loro soprabiti. La porta ad est @`e l'unica uscita.", each_turn [; if (cappotto in self && cappotto hasnt moved) viewPicture(Vestibolo1_img); else viewPicture(Vestibolo2_img); if (collana in player && lettera.read) DoTutor(self, "La visita in questa piccola stanza @`e stata alquanto proficua, ma adesso hai trovato tutto quello che potevi trovare, quindi vale la pena di continuare ad esplorare il piano pi@`u basso della villa. Torna al corridoio (E e poi N) e dirigiti verso nord (N)."); ], e_to portavestibolo, cant_go "L'unica porta conduce verso est."; Prop -> "pomoli" with name 'pomoli' 'ganci' 'pomolo' 'gancio', description "Dei pomoli in legno, per appendere cappotti e soprabiti.", before [; Receive: if (noun == cappotto) { give cappotto ~moved; <>; } "Non credi di poterlo fare."; ], cant_go "Non credi che i pomoli possano servire a qualcosa.", has pluralname supporter; Prop -> "mensole" with name 'mensola' 'mensole' 'scaffali' 'scaffale', description "Mensole per appoggiare cappelli e sciarpe, supponi.", cant_go "Le mensole non ti serviranno a nulla.", has pluralname female; Prop -> "stampelle" with name 'grucce' 'gruccia' 'stampelle' 'stampella' 'ometto' 'ometti' 'sbarra' 'asta', description "Stampelle in metallo appese ad un'asta di legno.", cant_go "Non credi che le stampelle servano a qualcosa.", has pluralname female; Object -> cappotto "cappotto" with name 'cappotto' 'soprabito' 'giaccone' 'loden', description [; print "Un elegante cappotto da donna, probabilmente quello di Valeria.^"; DoTutor(self,"Chiss@`a se questo cappotto nasconde qualcosa. Se non l'hai gi@`a fatto, puoi provare a prenderlo o spostarlo (PRENDI IL CAPPOTTO, o SPOSTA IL CAPPOTTO), o anche a cercare meglio nelle tasche (CERCA NEL CAPPOTTO o GUARDA NELLA TASCA)."); ], initial "Un solo cappotto @`e appeso ad una parete.", before [; Search: if (lettera hasnt general) { move lettera to player; give lettera general; if (collana has general) give self tutored; print "In una delle tasche trovi una lettera sgualcita. La prendi.^"; DoTutor(lettera, "Questa lettera pare interessante (LEGGI LA LETTERA)."); rtrue; } Push, Pull: return (self.find_collana()); !Take: if (self in vestibolo) { print "pippo"; viewPicture(Vestibolo2_img); rfalse; } Touch: "Pelliccia sintetica (nessun animale @`e stato ucciso o maltrattato per realizzare quest'avventura)."; Smell: "Ancora impregnato del profumo che usa solitamente Valeria."; ], after [; Take: return(self.find_collana()); ], find_collana [; if (collana hasnt general) { move collana to vestibolo; give collana general; if (lettera has general) give self tutored; print "Dietro il cappotto trovi una strana collana.^"; Achieved(0); DoTutor(collana, "Interessante. Anzitutto prendila ed esaminala, poi, se vuoi, puoi provare a indossarla (INDOSSA LA COLLANA) e a togliertela (TOGLI LA COLLANA)."); rtrue; } rfalse; ], has clothing transparent; Object -> -> tasca "tasca" with name 'tasca' 'tasche', before [; Examine, Search: <>; ], has female; Object collana "collana" with name 'collana' 'gioiello' 'pendente' 'preziosa' 'strana' 'stella' 'incasso', description [; print "Una collana in oro, di foggia strana. Il pendente @`e una stella a cinque punte, e sul retro c'@`e un piccolo incasso circolare"; if (anello in self) print " in cui si trova un anello"; "."; ], invent [; if (c_style&FULLINV_BIT) rfalse; print "una collana"; rtrue; ], before [; Receive: if (noun==anello) rfalse; print_ret (The) noun, " non entra nel pendente."; Search: if (anello in self) "Nell'incasso sul retro del pendente puoi vedere un anello."; "L'incasso sul retro del pendente @`e vuoto."; ], after [; Receive: if (noun==anello) { print "L'anello entra perfettamente nell'incasso del pendente.^"; DoTutor(tutorfake_coll, "Per riprendere l'anello, basta scrivere PRENDI L'ANELLO."); rtrue; } ], each_turn [; if (self hasnt general && self in player && anello in self && self has worn) { give self general; "La collana attorno al tuo collo ti d@`a una strana, piacevole sensazione. Ti senti ~protetto~."; } ], has female clothing container open; Object tutorfake_coll; Object lettera "lettera sgualcita" with name 'lettera' 'sgualcita' 'foglio' 'carta', description "La lettera pare molto vecchia, la carta scricchiola e pare sul punto di sfarsi in pezzettini.", read false, before [; Open, Read: self.read = true; "@<>^La firma @`e illeggibile."; ], has female readable; Room corridoio2 "Corridoio" with name 'corridoio', description [; print "Il corridoio procede ancora da nord a sud, mentre un'arcata si apre nella parete ovest e una porta conduce verso est.^"; DoTutor(self,"Continua pure l'esplorazione nella villa, iniziando dalle stanze che si trovano a est e a ovest. Potresti anche prendere un foglio di carta e disegnare una mappa delle stanze che hai incontrato, in modo da non perderti (questo @`e un consiglio che sar@`a prezioso quando affronterai avventure molto pi@`u vaste e complesse di questa)."); rtrue; ], initial [; viewPicture(Corridoio12_img); ], s_to corridoio1, e_to portacucine, w_to salone, n_to sottoscale, cant_go "Il corridoio porta a nord e a sud, e puoi andare ad est e a ovest."; Prop -> "scala" with name 'scalinata' 'scala' 'scale' 'scalini' 'gradini', description "La scalinata si trova verso nord.", cant_go [; <>; ], has female; Prop -> "arcata" with name 'arco' 'arcata', description "L'arcata si apre su un vasto salone.", has female; ! Object portacucine "porta" ! with name 'porta' 'cucina' 'cucine', ! description [; ! if (self has open) print_ret "La porta @`e aperta."; ! else print_ret "La porta @`e chiusa."; ! ], ! found_in corridoio2 cucine, ! door_dir [; if (self in corridoio2) return e_to; else return w_to; ], ! door_to [; if (self in corridoio2) return cucine; else return corridoio2; ], ! before [; ! Enter: if (self hasnt open) "La porta @`e chiusa."; ! ], ! react_before [; ! Go: if (noun.door_dir == self.door_dir()) <>; ! ], ! has scenery female door openable; Porta portacucine "porta" with name 'porta' 'cucina' 'cucine', found_in corridoio2 cucine, door_dir [; if (self in corridoio2) return e_to; else return w_to; ], door_to [; if (self in corridoio2) return cucine; else return corridoio2; ], has female; Room cucine "Cucine" with name 'cucine' 'cucina', description "Le cucine del palazzo sono ovviamente inutilizzabili. Il degrado e l'abbandono regnano sovrani, tutto @`e coperto da almeno un dito di polvere.", w_to portacucine, out_to portacucine, each_turn [; if (credenza has open) viewPicture(Cucina2_img); else viewPicture(Cucina1_img); ], cant_go "L'unica uscita @`e a ovest."; Prop -> "polvere" with name 'polvere' 'sporco', cant_go "@`E soltanto polvere...", has female; Prop -> "camino" with name 'camino' 'caminetto', description "Un vecchio camino, ormai privo di qualsiasi utilit@`a...", before [; Search: "Non c'@`e niente dentro al camino."; SwitchOn: "Non c'@`e legna, e comunque non credi funzionerebbe in ogni caso."; Receive: "@'E un camino, non un ripostiglio."; ]; Object -> credenza "credenza" with name 'credenza' 'mobile' 'armadio' 'sportello' 'sportelli', description [; if (self has open) "Una grossa credenza in mogano, con due sportelli aperti."; print "Una grossa credenza in mogano, chiusa da due sportelli.^"; DoTutor(self, "Non si aprono solo le porte. Prova ad aprire questo mobile."); rtrue; ], initial "Appoggiata ad una parete vedi una vecchia credenza.", each_turn [; if (self has open) { give self tutored; DoTutor(ciotola, "Per ricontrollare il contenuto della credenza, scrivi GUARDA NELLA CREDENZA."); } rfalse; ], has static container female openable; ! Object -> -> ciotola "ciotola" ! with name 'ciotola' 'tazza' 'contenitore', ! filled false, ! description [; ! if (self.filled) "Una ciotola in porcellana, piena di acqua sporca."; ! "Una ciotola in porcellana decorata con motivi geometrici."; ! ], ! before [; ! Fill: if (self.filled) "La ciotola @`e gi@`a piena."; ! if (~~TestScope(acqua)) "Riempirla? E di che?"; ! self.filled = true; ! "Riempi la ciotola nella vasca."; ! Empty, EmptyT: if (~~self.filled) "La ciotola @`e vuota."; ! "Non ti pare il caso."; ! ], ! has female; Object -> -> ciotola "ciotola" with name 'ciotola' 'tazza' 'contenitore' 'porcellana' 'motivi' 'vuota', description "Una ciotola in porcellana decorata con motivi geometrici.", before [; Fill: if (~~TestScope(acqua)) "Riempirla? E di che?"; move ciotolapiena to parent(self); remove self; give vasca tutored; "Riempi la ciotola nella vasca."; Insert, PutOn, ThrowAt: if (second == braciere) <>; Drink, Taste, Empty, EmptyT, Search: "La ciotola @`e vuota."; Receive: "@`E inutile mettere ",(the) noun, " nella ciotola."; ], each_turn [; if (self in player) give acqua tutored; ], has female container open; Object ciotolapiena "ciotola (piena d'acqua)" with name 'ciotola' 'tazza' 'contenitore' 'porcellana' 'acqua', description "Una ciotola in porcellana, piena di acqua sporca.", before [; Fill: "La ciotola @`e gi@`a piena."; Empty: "Meglio di no."; EmptyT, Insert, PutOn: if (second == braciere) <>; if (second == strega) <>; <>; ThrowAt: if (second == braciere) <>; Receive: "@`E inutile mettere ",(the) noun, " nell'acqua."; Drink, Taste: "Assolutamente no. @`E disgustosa."; Search: "La ciotola @`e piena d'acqua."; ], has female container open; Room salone "Salone" with name 'salone' 'sala', counter 0, description [; !if (candelierebasso in self) DrawPicture(Salone2_img); else DrawPicture(Salone1_img); print "Un vasto salone a pianta ottagonale, che probabilmente occupa buona parte di questo piano. Al centro noti un'alta colonna, larga e ottagonale anch'essa, che va dal soffitto al pavimento. Un'arcata conduce ad est e una piccola porta si apre nel lato sud-ovest.^"; DoTutor(self, "A parte la colonna, che merita un'occhiata pi@`u approfondita, trovi per la prima volta una via d'uscita lungo una direzione secondaria. Per andare da quella parte scrivi VAI A SUDOVEST, oppure, pi@`u brevemente, SO."); rtrue; ], each_turn [; if (candelierebasso in self) ViewPicture(Salone2_img); else ViewPicture(Salone1_img); self.counter++; if (self.counter == 4) "^Ti pare di sentire una voce sottile e vellutata che chiama il tuo nome. Ti guardi intorno. Non vedi nessuno. Devi esserti sbagliato."; if (self.counter == 7) "^Per un attimo ti @`e parso di sentire la musica di un pianoforte."; ], e_to corridoio2, sw_to portasalone, cant_go "Puoi solo andare ad est e a sud-ovest."; Object -> "arcata" with name 'arco' 'arcata' has female scenery; Object -> colonna "colonna" with name 'colonna' 'alta', description "Alta, di solida pietra e di forma ottagonale, larga almeno due metri e priva di qualsiasi asperit@`a, occupa la parte centrale della sala. Accanto ad essa noti un grande candeliere.", has female scenery; Object -> candeliere "candeliere" with name 'candeliere' 'candele' 'lampadario' 'peltro' 'candelabro', description "Un ingombrante candeliere in peltro, ormai privo di candele, domina dall'alto il salone, sorretto da una corda che esce da un foro nel soffitto.", before [; Examine: rfalse; default: "@`E troppo in alto..."; ], ! add_to_scope cordacandeliere, has scenery; Object -> cordacandeliere "corda" with name 'corda' 'fune', description "Sembra robusta.", before [; Examine: rfalse; default: "@`E troppo in alto..."; ], has female scenery; Object -> forocorda "foro" with name 'foro' 'buco', description "La corda entra in un foro nel soffitto.", before [; Examine: rfalse; default: "@`E troppo in alto..."; ], has scenery; Object candelierebasso "candeliere" with name 'candeliere' 'candele' 'lampadario' 'peltro', description [; print "Il pesante candeliere in peltro adesso @`e alla tua portata.^"; give self tutored; if (chiave in self && chiave has concealed) { give chiave ~concealed; print "Al posto di una delle candele vedi una chiave.^"; } rtrue; ], initial "Il candeliere adesso pende dalla corda a non pi@`u di un metro da terra.", before [; Search: <>; Push, Pull: "Il candeliere oscilla lentamente, per poi fermarsi."; Turn: "Il candeliere ruota su se stesso, prima in un verso e poi nell'altro, prima di fermarsi."; Receive: "Non credi serva a qualcosa."; ], each_turn [; DoTutor(self, "Adesso che il candeliere @`e a portata di mano, vale la pena di esaminarlo meglio."); ], ! add_to_scope cordacandbasso, has static supporter; Object -> chiave "chiave" with name 'chiave' 'ferro', description "Una chiave in ferro, coperta da un leggero strato di ruggine.", each_turn [; if (self has moved) give self ~concealed; if (self in player) Achieved(1); ], has concealed female; Object cordacandbasso "corda" with name 'corda' 'fune', description "Sembra robusta.", before [; Take: "La corda @`e ben fissata al candeliere."; Pull: <>; Push: <>; Turn: <>; ], has female scenery; Porta portasalone "porta" with name 'porta', found_in salone andito, door_dir [; if (self in salone) return sw_to; else return ne_to; ], door_to [; if (self in salone) return andito; else return salone; ], has female open; Room andito "Un piccolo andito" with name 'piccolo' 'andito', description [; print "Questo piccolo andito, ricavato da uno degli angoli del salone ottagonale, non contiene altro se non una corda avvolta ad una grossa ruota e, collegata a questa, una leva in legno. Una porta conduce a nord-est.^"; DoTutor(self,"Ti trovi di fronte ad una leva, potresti provare a tirarla. Scrivi TIRA LA LEVA."); ], each_turn [; if (leva has general) ViewPicture(Andito2_img); else ViewPicture(Andito1_img); ], ne_to portasalone, out_to portasalone, cant_go "L'unica uscita conduce a nord-est."; Object -> leva "leva" with name 'leva' 'legno', description "Una corta leva di legno che blocca la ruota.", before [; Push, Turn: "Non succede niente. Forse dovresti tirare."; Pull: if (self has general) "Non succede niente altro."; give self general; move candelierebasso to parent(candeliere); move cordacandbasso to parent(candeliere); remove candeliere; remove cordacandeliere; print "La ruota gira per qualche secondo, e la corda si srotola. Ti pare di sentire un rumore secco provenire dal salone.^"; DoTutor(self,"A quanto pare @`e successo qualcosa nel salone. Forse conviene andare a dare un'occhiata."); rtrue; ], has female scenery; Object -> ruota "ruota" with name 'ruota', description [; print "Una larga ruota di legno, rinforzata in metallo."; if (TestScope(corda)) print " Attorno ad essa @`e avvolta una corda che proviene da un foro nel soffitto."; ""; ], before [; Push, Pull, Turn: "Non credi di riuscire a far niente a mani nude."; ], has female scenery; Object -> corda "corda" with name 'corda' 'fune', description "La corda va dalla ruota in legno ad un foro nel soffitto.", before [; Push, Pull, Turn: "Non credi di riuscire a far niente a mani nude."; Burn, Cut, Attack, Untie: if (leva has general) "A questo punto credi che sia inutile..."; if (action == ##Burn && accendino notin player && (candela notin player || candela hasnt light)) "Con cosa?"; give leva general; !move pezzocorda to parent(self); remove self; move candelierebasso to parent(candeliere); move cordacandbasso to parent(candeliere); remove candeliere; remove cordacandeliere; if (action == ##Untie) print "La corda"; else print "La corda si spezza e"; print " viene tirata all'interno del soffitto. Ti pare di sentire un rumore secco provenire dal salone.^"; DoTutor(self,"A quanto pare @`e successo qualcosa nel salone. Forse conviene andare a dare un'occhiata."); rtrue; ], has female scenery; Room sottoscale "Ai piedi della scalinata" with description [; print "Una larga scalinata conduce da qui al piano superiore della villa. Il corridoio si apre nella parete sud.^"; DoTutor(self,"Per salire la scala basta scrivere VAI SU, SU o SALI.^Sali al piano superiore solo se hai esplorato bene tutto il piano pi@`u basso."); rtrue; ], initial [; ViewPicture(Scala_img); ], u_to pianerottolo, s_to corridoio2, cant_go "La scala porta in alto, il corridoio conduce verso sud."; Object -> scalegiu "scale" with name 'scalinata' 'scala' 'scale' 'scalini' 'gradini', description [; <>; ], before [; Climb: <>; Exit: "Le scale salgono soltanto."; ], has pluralname scenery;