! 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. ! ------------------------------------------ ! Secondo Piano ! ------------------------------------------ Room pianerottolo "Al piano di sopra" with description [; print "Le ampie scale arrivano su di un largo pianerottolo. Da qui un corridoio conduce verso sud, dando accesso al piano pi@`u alto della villa.^"; DoTutor(self,"Ovviamente da qui basta scrivere VAI GIU, GIU o SCENDI per tornare al piano pi@`u basso.^Questo potrebbe essere il momento giusto per salvare la situazione e i progressi fatti fino ad ora: scrivi SALVA e specifica il nome con cui vuoi salvare.^In qualsiasi momento, grazie al comando CARICA, potrai richiamare la situazione salvata."); rtrue; ], initial [; viewPicture(Pianerottolo_img); ], d_to sottoscale, s_to corridoio3, cant_go "La scala porta in basso, il corridoio conduce verso sud.", each_turn [; if (self has general) rfalse; give self general; #IfnDef NOSOUND; fadetomusic(Dungeon_snd); #EndIf; ], ; Object -> scalesu "scale" with name 'scalinata' 'scala' 'scale' 'scalini' 'gradini', description [; <>; ], before [; Exit: <>; Climb: "Le scale scendono soltanto."; ], has pluralname scenery; Room corridoio3 "Corridoio (al piano di sopra)", with name 'corridoio', description "Questo corridoio, scuro e maleodorante, procede verso nord e verso sud. Una porta conduce invece verso est.", initial [; viewPicture(Corridoio2_img); ], n_to pianerottolo, e_to portacamera, s_to vicolocieco, cant_go "Puoi andare solo a nord, a sud e a est."; Porta portacamera "porta" with name 'porta', found_in corridoio3 camera, door_dir [; if (self in corridoio3) return e_to; else return w_to; ], door_to [; if (self in corridoio3) return camera; else return corridoio3; ], has female open; Room camera "Camera da letto", with name 'stanza' 'camera', description [; print "Una camera buia e spaziosa. In essa puoi vedere un letto ampio e elegante, un largo com@`o e, appeso ad una parete, un piccolo candeliere. La porta si trova verso ovest, e un passaggio si apre nella parete nord.^"; DoTutor(self,"Adesso ti trovi di fronte ad un piccolo problema. Se esamini il candeliere noterai una candela, ma prenderla non @`e semplicissimo. Anzitutto esamina tutto quello che vedi, iniziando dal candeliere."); rtrue; ], each_turn [; if (como hasnt general) viewPicture(Camera1_img); else viewPicture(Camera2_img); ], w_to portacamera, n_to bagno, cant_go "Puoi andare a ovest e a nord."; Object -> "passaggio" with name 'passaggio' 'apertura', description "Un passaggio privo di porta, nella parete nord, conduce verso un bagno.", has scenery; Object -> letto "letto" with name 'letto' 'polvere', description "Pensi di non aver mai visto un letto cos@`i vasto e cos@`i lussuoso. Peccato che sia ricoperto da un dito di polvere.", react_before [; Sleep: <>; ], before [; Climb, Enter: "Non credi serva a molto, oltre che a riempirti di polvere."; LookUnder: "Polvere anche sotto il letto."; ], has scenery supporter enterable; Object -> como "com@`o" with name 'como' 'com@`o' 'como^', description [; if (self has general) "Il com@`o adesso si trova proprio sotto al candeliere."; print "Accanto al letto c'@`e un semplice com@`o in robusto legno massello, privo di cassetti o altre aperture.^"; if (player in self) DoTutor(self, "Salire su questo com@`o @`e stata una buona idea, ma non basta. Per@`o potresti provare a spostarlo."); DoTutor(self, "Potresti salire su questo com@`o, ma non basta. Per@`o potresti provare a spostarlo."); rtrue; ], before [; Climb: <>; Push, Pull: if (player in self) "Non puoi spostare il com@`o finche ci stai sopra."; if (self has general) { give self ~general; "Risposti il com@`o accanto al letto."; } else { give self general; give self tutored; "Sposti il com@`o proprio sotto al candeliere."; } ], has scenery supporter enterable; Object -> candeliere2 "candeliere" with name 'candeliere' 'candelabro' 'lampadario', description [; print "Un piccolo candeliere in ferro, appeso ben alto alla parete.^"; if (candela in self && candela has concealed) { give candela ~concealed; print "Sul candeliere vedi una singola candela.^"; } if (player in como || como has moved) give self tutored; DoTutor(self, "Il candeliere @`e troppo in alto perch@`e tu possa prendere la candela. Continua a guardarti intorno."); rtrue; ], before [; Receive: if (player notin como) "Il candeliere @`e troppo in alto."; if (como hasnt general) "Sei troppo lontano dal candeliere."; if (noun == candela) rfalse; print_ret "Provi a mettere ", (the) noun, " sul candeliere, senza risultato."; LetGo: if (player in como && como has general) rfalse; if (player in como) "Sei troppo lontano dal candeliere."; "Il candeliere @`e troppo in alto."; ], has scenery supporter; Object -> -> candela "candela" with name 'candela', before [; SwitchOn: if (accendino notin player) "Non hai niente con cui accenderla."; if (self in candeliere2 && (player notin como || como hasnt general)) "La candela @`e troppo in alto, non ci arrivi."; ], after [; SwitchOn: give self light; SwitchOff: give self ~light; if (~~OffersLight(real_location)) ViewPicture(Buio_img); ], each_turn [; if (self has moved) give self ~concealed; if (self in player) Achieved(2); ], has female switchable concealed; Room bagno "Stanza da bagno" with name 'bagno' 'stanza', description "Una piccola stanza da bagno completamente in rovina. L'unico oggetto ancora riconoscibile @`e una vasca di ceramica. La camera si trova a sud.", s_to camera, initial [; viewPicture(Bagno_img); ], cant_go "Puoi solo andare a sud."; Prop -> lavandino "lavandino" with name 'lavandino' 'lavabo' 'rubinetto' 'cannella' 'manopola', description "Un lavandino in ceramica, sporco e pieno di crepe.", before [; Receive: "Non pensi sia il caso di mettere niente nel lavandino."; Open, SwitchOn, Turn, Fill, Close, SwitchOff: "Dal rubinetto non esce una goccia d'acqua."; ], cant_go "Un lavandino in quello stato non potrebbe servire a nulla."; Object -> vasca "vasca" with name 'vasca' 'ceramica', description [; print "Una vasca da bagno in ceramica. Un tempo probabilmente era costosa ed elegante, ma ora @`e in pessimo stato. Stranamente @`e ancora piena d'acqua.^"; DoTutor(self, "Potresti provare ad esaminare l'acqua. Inoltre probabilmente c'@`e un modo per prenderne un po', nel caso serva in seguito."); ], before [; Receive: if (noun==ciotola) <>; if (noun==ciotolapiena) <>; "Non credi che sia una buona idea."; Search: <>; Empty, EmptyT: "Strano. La vasca non ha un foro di scarico."; ], has scenery transparent container open female; Object -> -> acqua "acqua" with name 'acqua' 'liquido', description [; if (self has general) "L'acqua @`e sporca e torbida..."; give self general; "Come osservi l'acqua, per un momento ti pare di vedere al suo interno una giovane donna. Ma forse ti stai solo facendo suggestionare. Adesso @`e scomparsa. Forse hai visto soltanto il tuo riflesso."; ], before [; Receive: if (noun==ciotola) <>; if (noun==ciotolapiena) <>; "Non credi che sia una buona idea."; Touch: "@`E fredda, innaturalmente fredda."; Drink, Taste: "Assolutamente no. @`E disgustosa."; Insert: if (second==ciotola) <>; TakeWith: if (second==ciotola) <>; if (second==ciotolapiena) <>; Take: if (TestScope(ciotola)) <>; if (TestScope(ciotolapiena)) <>; print "Avresti bisogno di un recipiente.^"; DoTutor(self,"Evidentemente hai dimenticato qualcosa. Prova a tornare in cucina e a guardare meglio."); rtrue; ], has scenery female; Room vicolocieco "Corridoio (al piano di sopra)" with name 'corridoio', description "Il corridoio procede ancora da nord a sud, e un corridoio secondario si apre verso est. Eppure ti pare che una strana, tenue nebbia luminescente occupi i passaggi verso est e verso sud. Verso ovest vedi una porta.", each_turn [; if (portastudio hasnt open) viewPicture(Vicolo1_img); else viewPicture(Vicolo2_img); ], n_to corridoio3, w_to portastudio, e_to [; <>; ], s_to [; print "Come ti avvicini alla nebbia, incontri una strana resistenza, come un invisibile muro di gomma, e non riesci a procedere.^"; DoTutor(self, "Certi ostacoli spesso nascondono problemi da risolvere, ma in altri casi possono essere solo specchietti per le allodole. Ad esempio, in questo caso non esiste modo di superare la nebbia."); rtrue; ], cant_go "I corridoi portano a nord, a sud e a est. La porta @`e a ovest."; Object -> nebbia "nebbia" with name 'nebbia' 'luminescente' 'luminescenza' 'fumo', description "La nebbia invade completamente i due corridoi, bloccandoli.", before [; Touch: "La tua mano non riesce a penetrare nella nebbia."; Enter: <>; ], has female scenery; Porta portastudio "porta" with name 'porta', description [; self.printstatus(); self.tutoring(); ], tutoring [; if (self has locked) DoTutor(self, "Questa porta @`e chiusa a chiave. Se hai trovato una chiave puoi aprirla scrivendo APRI LA PORTA CON LA CHIAVE; altrimenti dovresti tornare nel salone e cercare meglio."); rtrue; ], before [; Open: give self general; rfalse; ], found_in vicolocieco studio, with_key chiave, door_dir [; if (self in vicolocieco) return w_to; else return e_to; ], door_to [; if (self in vicolocieco) return studio; else return vicolocieco; ], each_turn [; if (self has general) self.tutoring(); if (self hasnt locked) give self tutored; ], has female lockable locked; Room studio "Studio" with name 'studio', description [; print "Uno studio che un tempo doveva essere ben arredato. Ora rimane soltanto una scrivania e una libreria completamente vuota. La porta @`e verso est"; if (self has general) print " e un passaggio si apre nella parete nord"; if (incisione in self) print ". C'@`e una strana incisione sulla parete nord"; "."; ], each_turn [; if (self has general) viewPicture(Studio3_img); else if (incisione in self) viewPicture(Studio2_img); else viewPicture(Studio1_img); ], e_to portastudio, n_to [; if (self has general) return passaggio; rfalse; ], cant_go [; if (self has general) "Puoi andare solo a nord e a est."; "La porta @`e a est."; ]; Object -> scrivania "scrivania" with name 'scrivania' 'tavolo', description "Una vecchia scrivania in mogano, semplice e priva di cassetti.", before [; Search: "La scrivania non ha cassetti."; Push, Pull, Turn, LookUnder: "Inutile. La scrivania non nasconde niente."; ], has scenery female supporter; Object -> -> libro "libro" with name 'libro' 'volume', description "Un volume in ottavo dalla copertina in pelle. Sembra molto antico.", before [; Open: <>; Read: "Sembra una raccolta di leggende di questa zona, buone soltanto per essere lette ai bambini. Sfogliando il libro trovi per@`o il riferimento ad una strega che viveva da queste parti un paio di secoli fa. Era incredibilmente malvagia, e si faceva chiamare come la strega dell'isola di Avalon, Morgana.^Si macchi@`o di delitti e nefandezze d'ogni genere, finch@`e la sua discepola prediletta le si rivolt@`o contro. Grazie alle arti che aveva appreso dalla strega, la giovane cre@`o due oggetti, due gioielli, che la aiutarono ad affrontare colei che era stata la sua maestra. La strega fu cos@`i sconfitta e giustiziata, ed il suo spirito imprigionato nel sottosuolo.^Ti chiedi come mai questo sia l'unico libro qui presente, e cosa ci sia di vero in questa storia."; ], has readable; Object -> libreria "libreria" with name 'libreria' 'armadio', examined false, pushed false, description [; print "La libreria occupa parte della parete nord e forse un tempo era carica di libri. Ora @`e stranamente vuota.^"; if (self.examined && ~~self.pushed) { print "Noti che la libreria non @`e ben appoggiata al muro.^"; DoTutor(self, "La libreria sembra nascondere qualcosa. Prova a spostarla."); } else if (~~self.pushed) { DoTutor(tutorfake_libreria, "Talvolta esaminare gli oggetti pi@`u volte pu@`o rivelare altre informazioni. Prova a riesaminare la libreria (puoi anche usare il comando ANCORA)."); } self.examined = true; rtrue; ], before [; Search: self.examined=true; <>; Push, Pull: if (self.pushed) "Potresti rispostare la libreria al suo posto, ma ti pare fatica sprecata."; self.pushed=true; give self tutored; move incisione to parent(self); "Sposti la libreria, rivelando una strana incisione nella parete nord."; ], has scenery female; Object tutorfake_libreria; Object incisione "incisione sulla parete" with name 'incisione' 'incavo', description [; print "L'incisione che era nascosta dalla libreria ha la forma di una stella a cinque punte.^"; DoTutor(self, "Dovresti avere un oggetto della stessa forma (altrimenti torna al piano inferiore a cercarlo). Prova a scrivere INSERISCI LA STELLA NELL'INCISIONE."); rtrue; ], before [; Receive: if (noun == collana) { give parent(self) general; move passaggioin to parent(self); give self tutored; remove self; Achieved(3); "Metti il pendente nell'incisione e la parete nord si apre, rivelando un passaggio."; } print_ret "Non ti pare che ", (the)noun, " abbia la forma giusta."; ], has scenery female; Object passaggioin "passaggio segreto" with name 'passaggio' 'segreto', description "Un passaggio segreto si apre ora nella parete nord.", has scenery; Room passaggio "Un passaggio segreto" with name 'passaggio' 'segreto', description "Una stretta scala a chiocciola scende verso l'oscurit@`a, probabilmente passando attraverso la vasta colonna al centro del salone. Un'apertura verso sud porta allo studio.", each_turn [; DoTutor(self, "Prima di scendere verifica di aver ben esplorato tutto il resto della villa. Poi questo @`e un'altro buon momento per salvare la situazione."); ], initial [; viewPicture(Passaggio_img); ], s_to studio, d_to galleria1, cant_go "La scala scende verso il basso. Altrimenti puoi andare a sud."; Object -> scalepasssu "scala" with name 'scalinata' 'scala' 'scale' 'scalini' 'gradini' 'chiocciola', description [; <>; ], before [; Exit: <>; Climb: "Le scale salgono soltanto."; ], has scenery;