! La Pietra della Luna ! Avventura Testuale realizzata da Paolo Lucchesi ! da un'idea di Paolo Lucchesi, Andrea Gnesi e Stefano Masi ! 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 pu@`o essere ! ritenuto responsabile per qualsiasi danno dovuto direttamente o indirettamente ! all'uso del prodotto. ! ------------------------------------------ ! Le miniere ! ------------------------------------------ ORoom DavantiMiniere "Davanti all'ingresso delle miniere" with description "Dominando dall'alto la foresta, il sentiero che si inerpica per la montagna si allarga in uno spiazzo arrestandosi di fronte a quello che non pu@`o essere altro che l'ingresso delle miniere, uno scuro antro che potrebbe pure condurre verso gli inferi.", name 'sentiero' 'spiazzo', s_to SentieroMiniere, d_to SentieroMiniere, n_to GoMiniere, in_to GoMiniere, cant_go "Il sentiero porta solo verso sud, mentre a nord vedi l'ingresso delle miniere."; Direction -> OutMiniere "ingresso delle miniere" with name 'miniere' 'miniera' 'antro' 'galleria' 'caverna' 'ingresso', article "l^", dir_to n_obj, description [; if (night && phase<5) "L'ingresso alle miniere @`e chiuso da un pesante cancello in ferro, chiuso da un robusto lucchetto."; "L'oscurit@`a delle miniere si stende davanti a te. Basta oltrepassare il pesante cancello che rimane pigramente aperto, per entrarvi."; ]; Direction -> "foresta" with name 'foresta' 'alberi' 'albero' 'bosco', dir_to s_obj, description "La foresta pare occupare tutta la valle.", cant_go "Da qui la foresta @`e lontana, verso sud." has female; Object -> cancello "cancello" with name 'cancello' 'lucchetto', description [; if (night && phase<5) "Un pesante cancello in ferro, chiuso da un robusto lucchetto."; "Un pesante cancello in ferro, aperto."; ], before [; Go, Enter: if (GoMiniere()>1) PlayerTo(IngressoMiniere,2); rtrue; Open, Unlock: if (night && phase<5) "Il lucchetto @`e pi@`u che robusto."; "Il cancello @`e gi@`a aperto."; Close: if (night && phase<5) "Il cancello @`e gi@`a chiuso."; "Non ne vedi il motivo."; Attack, Push, Pull: if (self has solid) "I tuoi sforzi rimangono doppiamente vani."; "I tuoi sforzi rimangono vani."; ], has scenery static door; Object lucchetto "lucchetto" with name 'lucchetto' 'serratura', description "Un lucchetto di eccellente fattura.", before [; Open, Unlock: "Il lucchetto @`e pi@`u che robusto."; Attack: "Il lucchetto resiste, in modo quasi innaturale."; Missile: if (self has solid) rfalse; <>; ], found_in [; return(cancello in real_location && night && phase<5); ], has scenery concealed; [GoMiniere; if (night && phase<5) "Un cancello chiude l'ingresso alle miniere."; return(IngressoMiniere); ]; ERoom IngressoMiniere "Ingresso delle miniere" with description [; print "Una larga galleria scavata nella roccia curva da sud a est, scendendo leggermente e inoltrandosi all'interno della montagna"; if (~~night) print ", illuminata dalla luce del sole che filtra dal largo ingresso"; "."; ], name 'ingresso' 'galleria' 'pietra' 'caverna', s_to DavantiMiniere, u_to DavantiMiniere, out_to DavantiMiniere, e_to DavantiBaratro, d_to DavantiBaratro, in_to DavantiBaratro, cant_go "La galleria procede verso est, l'uscita @`e verso sud.", initial [; RightPicture(MineUp_img, -1, -1); ]; DRoom DavantiBaratro "Davanti ad un baratro" with description "La galleria si allarga in una vasta caverna artificiale, il cui suolo sbozzato si arresta bruscamente al limitare di un profondo baratro. Una fredda corrente d'aria invade l'ambiente. Un piccolo passaggio si apre nella parete est, e degli scalini scavati nella roccia salgono fino ad una piccola piattaforma naturale che si affaccia sul precipizio.", name 'galleria' 'caverna' 'pietra', before [; Go: if (noun==d_obj && player in piattaforma) <>; ], w_to IngressoMiniere, e_to MagazzinoMiniere, d_to [; if (player in piattaforma) <>; <>; ], n_to [; <>; ], u_to [; <>; ], each_turn [; addhint(h_miniere); if (ishere(iarin)) { solved(h_miniere); solved(h_iarinminiere); addhint(h_miniere2); } ], cant_go "Le gallerie conducono a est e a ovest."; Direction -> "passaggio" with name 'passaggio', dir_to e_obj; Object -> piattaforma "piattaforma" with name 'piattaforma' 'scala' 'scalini', description "Pi@`u di tre metri pi@`u in alto una piccola piattaforma di roccia si affaccia pericolosamente sul precipizio. Degli scalini permettono di accedervi.", before [; Climb: <>; ], has enterable supporter scenery female concealed; Object -> cordasup "corda" with name 'corda' 'fune', description "Una corda pi@`u fine delle altre, ma ancora robusta, @`e collegata per entrambi i capi al sistema di carrucole.", before [; Examine: ; Missile: if (self has solid) rfalse; "La corda, colpita dal dardo, ondeggia per qualche attimo ma non pare subire altri danni."; Take: if (player notin piattaforma) "Da qui non puoi raggiungerla."; "La corda @`e collegata alle carrucole."; Cut: "La corda serve evidentemente a qualcosa."; Pull: if (player notin piattaforma) "Da qui non puoi raggiungerla."; if (contrappeso in parent(self)) "Non riesci a tirare ulteriormente la corda."; move contrappeso to parent(self); if (ascensore in parent(self)) { remove ascensore; move gancio to parent(self); "Tiri ancora una volta la corda, azionando il sistema di carrucole. Le corde si muovono e la pedana di legno ridiscende all'interno del baratro. Dopo un paio di minuti il pesante contrappeso riemerge dal baratro."; } "Faticosamente tiri la corda, azionando il sistema di carrucole. Lentamente una delle corde pi@`u spesse si muove. Dopo un paio di minuti dal baratro emerge un pesante contrappeso fatto di pietra e metallo."; Tie: "Non risolveresti nulla, legandola."; Drop: if (contrappeso notin parent(self)) "Al momento non la stai tenendo."; print "Lasci andare la corda,"; contrappeso.falldown(); rtrue; ], has scenery female; Object -> baratro "baratro" with name 'baratro' 'precipizio', description "Il baratro si perde nell'oscurit@`a, ma pare ripidissimo e molto, molto profondo. Noti per@`o due robuste corde che calano nel precipizio.", before [; Enter, Climb, JumpOver, Exit: "La parete del baratro @`e ripidissima. Tentare la discesa sarebbe un suicidio."; ThrownAt, Receive: "Meglio di no, potrebbe servirti."; ], has scenery container concealed; Object -> corde "corde" with name 'corde' 'funi', description [; print "Due corde spesse e robuste scendono delle profondit@`a del baratro che ti si para davanti, mentre una terza"; if (gancio in parent(self)) print " termina con un gancio di metallo all'altezza dei tuoi occhi. "; if (ascensore in parent(self)) print " sostiene una pedana di legno. "; "Guardando in alto vedi che sono collegate ad un sistema di carrucole. Una quarta corda dalle carrucole arriva alla piattaforma di roccia."; ], before [; Take, Pull, Tie: "Arrivi appena a sforiarle, e sporgendoti sul precipizio."; Missile: if (self has solid) rfalse; "Il dardo colpisce una delle corde, ma questa fortunatamente resiste, ondeggiando vistosamente per qualche attimo."; ], has scenery female pluralname; Object -> carrucole "carrucole" with name 'carrucole' 'carrucola', description "Il sistema di carrucole @`e quanto meno ingegnoso.", before [; Examine, Look, AutoCast: ; default: "Sono troppo in alto."; ], has scenery female pluralname; Object -> gancio "gancio" with name 'gancio', description "La corda termina con un robusto gancio di metallo.", before [; Take, Pull: "Arrivi appena a sforiarlo, e sporgendoti sul precipizio."; Tie: if (second==contrappeso) { trytie(); rtrue; } "Non risolveresti niente, cos@`i."; ], has scenery; Object contrappeso "contrappeso" with name 'contrappeso' 'peso' 'anello' 'imbracatura', description "Il contrappeso non @`e altro che una pietra grossa e pesante tenuta legata ad una delle corde con un'imbracatura di metallo. Un anello di ferro si trova adesso proprio vicino al gancio con cui terminava una delle corde.", each_turn [; if (player notin piattaforma) { print "^Scendendo dalla piattaforma hai lasciato la presa dalla fune"; self.falldown(); } ], falldown [; remove self; print " e il contrappeso scivola di nuovo, inesorabilmente, nelle tenebre del precipizio.^"; if (self has general) { remove gancio; move ascensore to DavantiBaratro; "Dopo pochi istanti, tirata in alto dalle corde, una traballante pedana di legno risale fuori dal precipizio, fermandosi a poca distanza."; } rtrue; ], before [; Tie: if (second==gancio) { trytie(); rtrue; } "Non risolveresti niente, cos@`i."; ], has static; Object ascensore "pedana in legno" with name 'pedana' 'ascensore' 'montacarichi' 'in' 'legno', description "Una piccola, traballante, insicura pedana di legno sospesa ad una delle corde; probabilmente una specie di rudimentale montacarichi.", before [; Enter, Climb: if (~~iarin.follower) "Sali sulla pedana, ma il tuo peso, seppur per poco, @`e insufficiente a farla scendere."; solved(h_miniere2); Achieved(26); print "Salite sulla pedana e il vostro peso inizia a farla scendere sempre pi@`u velocemente. Scendete in questo modo nell'abisso, fino a che la pedana non urta la solida roccia sotto di voi. Scendete con prudenza e la osservate risalire verso l'alto mentre il contrappeso scende. Ti chiedi come farete mai a risalire.^"; move iarin to FondoBaratro; PlayerTo(FondoBaratro,2); rtrue; ], has static female; [trytie; if (player in piattaforma) "Da qui non ci arrivi. Dovresti scendere."; give contrappeso general; "Assicuri il contrappeso a una delle corde. Ma questo non pu@`o succedere."; ]; DRoom MagazzinoMiniere "Un piccolo magazzino" with description "Questa piccola caverna evidentemente in passato deve essere stata usata come magazzino. Ora vi rimangono soltanto casse di legno marcito, sacchi strappati e altro materiale inutile.", name 'magazzino' 'caverna', w_to DavantiBaratro, out_to DavantiBaratro, cant_go "L'unica uscita @`e a ovest."; Direction -> "passaggio" with name 'passaggio', dir_to w_obj; Prop -> "materiale inutile" with name 'casse' 'cassa' 'sacchi' 'sacco' 'materiale', description "Niente di tutta questa roba sembra minimamente utilizzabile.", before [; Take: <>; Push, Pull, Search, Turn, LookUnder: "Sposti le casse, i sacchi e il resto del materiale senza trovare alcunch@'e."; ]; Object -> leva "spranga di metallo" with name 'spranga' 'di' 'metallo' 'leva' 'sbarra' 'barra', description "Una spranga di metallo lunga pi@`u di un metro, robusta e ben temprata.", has female; DRoom FondoBaratro "In fondo al baratro" with description "Immersa nella roccia del monte Kalnam, questa caverna naturale dal fondo scosceso sembra essere il punto centrale di tutto il sistema di miniere. Da qui si aprono praticamente in ogni direzione tunnel e gallerie, alcuni naturali, altri scavati dall'uomo. Il pesante contrappeso giace adagiato per terra.", name 'caverna' 'pietra', before [; Go: return(movemine()); Examine: if (noun == pareti) <>; ], cant_go [; if ((action==##Exits)) "Tunnel e gallerie si dirigono in ogni direzione."; "Non puoi andare da quella parte.^"; ], each_turn [; if (mappaminiere in player) { solved(h_notte2); addhint(h_mappa); } if (easy && phase == 8 && (~~ishere(iarin)) && self hasnt general) { give self general; "^Non credi che potresti andare molto lontano senza l'aiuto di Iarin."; } ], initial [; AbovePicture(MineDown_img, -1, -1); ]; Object -> fondogal "gallerie" with name 'gallerie' 'galleria' 'segno' 'simbolo' 'triangolare' 'triangolo', cs 0, description [; if (self.cs >= 3) "Le gallerie si dirigono in ogni direzione, ma un segno triangolare sembra marcare quella che si dirige verso est."; "Le gallerie - naturali e artificiali - si dirigono in ogni direzione."; ], before [; Enter, Climb: "In che direzione?"; ], has female pluralname static scenery; Object -> Contrappesogiu "contrappeso" with name 'contrappeso' 'peso' 'anello' 'corda' 'corde' 'fune' 'funi', description "La grossa pietra imbracata rimane adagiata su di un fianco, ancora agganciata alle due funi che risalgono il precipizio.", before [; Push, Pull, Turn, Take, LookUnder: "@`E enormemente troppo pesante."; ], has scenery; Object -> fulcro "cuneo" with name 'cuneo' 'legno' 'fulcro', description "Un grosso e robusto cuneo di legno seccato e indurito dal tempo.", before [; PutUnder: if (second==macigno) { move self to parent(macigno); "Metti il cuneo alla base del macigno."; } ]; ! Questa e' l'unica stanza di tutto il labirinto delle miniere DRoom Miniere "Le miniere" with desc 0, posx 0, posy 0, dir 0, description [d r; ! Descrizione variabile if (self.desc == 0) self.desc = random(4); switch(self.desc) { 1: print "Le miniere di diamanti sono un complesso dedalo di roccia in cui @`e facilissimo perdersi. Tunnel e gallerie si diramano in ogni direzione. Non sei un esperto, comunque hai la sensazione che le miniere non siano affatto esaurite.^"; 2: print "L'intricato complesso di gallerie sotto il monte Kalnam, alcune usate per l'estrazione dei diamanti, altre no, si stende tutto attorno, diramandosi in ogni direzione.^"; 3: print "Quasi un labirinto di tunnel che corrono in ogni direzione, si intersecano e si biforcano ad ogni svolta, queste sono le miniere di diamanti e le caverne all'interno del monte Kalnam.^"; 4: print "Decine di gallerie - alcune larghe diversi piedi, altre strette tanto da obbligare carponi chi le percorre, si uniscono e si separano formando anditi, grotte e stanze scavate nella roccia.^"; } if (self.posx==2 && self.posy==0) print "Senti un leggero alito d'aria fresca provenire da est.^"; r = self.posx*self.posx + self.posy*self.posy; if (r == 0) { self.posx = 1; r = 1; } d = 5; if (self.posy>0) d = 2; if (self.posy<0) d=8; if (self.posx>0) d++; if (self.posx<0) d--; if (self.posx>0 && self.posy==0) r = 2; if (r >= 3) print "Ti sei allontanato parecchio, rischiando di perderti ma se"; else print "Se"; print " non ti sbagli, il centro delle miniere si trova verso "; switch(d) { 1: print "sud-est"; 2: print "sud"; 3: print "sud-ovest"; 4: print "est"; 6: print "ovest"; 7: print "nord-est"; 8: print "nord"; 9: print "nord-ovest"; } print ".^"; !print "Pos: y=", self.posy, ", x=", self.posx,"^"; rtrue; ], name 'caverna' 'pietra' 'labirinto' 'dedalo' 'miniere' 'miniera' 'galleria', before [; Go: return(movemine()); Drop, ThrowAt, Insert, Transfer, PutOn: "Non osi lasciar niente qui... Non lo ritroveresti mai pi@`u."; Examine: if (noun == pareti) <>; ], each_turn [x y; addhint(h_miniere3); x = child(self); while(x) { y = sibling(x); if (x ~= player && x ~= iarin && x hasnt scenery) move x to player; x = y; } ], ! react_before [; ! Drop: "Non osi lasciar niente qui... Non lo ritroveresti mai pi@`u."; ! ], cant_go [; if ((action==##Exits)) "Tunnel e gallerie si dirigono in ogni direzione."; "Non puoi andare da quella parte.^"; ] has female pluralname; Object -> mingal "gallerie" with name 'gallerie' 'segno' 'simbolo' 'triangolare' 'triangolo', description [; if (Miniere.posx>0 && Miniere.posy==0) "Le gallerie si dirigono in ogni direzione, ma un segno triangolare che si ripete regolarmente sembra marcare un percorso che conduce da est a ovest."; "Le gallerie - alcune naturali, altre scavate dall'uomo - si aprono in ogni direzione."; ], before [; Enter, Climb: "In che direzione?"; ], has female pluralname static scenery; !Object -> fakeMin ! with react_before [; ! Drop: "Non osi lasciar niente qui... Non lo ritroveresti mai pi@`u."; ! ], ! has scenery; [movemine; ! Routine per muoversi nelle miniere if (noun==n_obj or s_obj or e_obj or w_obj or ne_obj or nw_obj or se_obj or sw_obj) { Miniere.desc=random(3); ! Una descrizione a caso ! Uscita secondaria? if (noun==e_obj && Miniere.posx==2 && Miniere.posy==0) { PlayerTo(Cunicolo,2); rtrue; } ! Movimento per coordinate if (noun==n_obj or nw_obj or ne_obj && Miniere.posy<2) Miniere.posy++; if (noun==s_obj or sw_obj or se_obj && Miniere.posy>-2) Miniere.posy--; if (noun==e_obj or ne_obj or se_obj && Miniere.posx<2) Miniere.posx++; if (noun==w_obj or nw_obj or sw_obj && Miniere.posx>-2) Miniere.posx--; ! Centro delle miniere? if (Miniere.posx==0 && Miniere.posy==0) { PlayerTo(FondoBaratro,2); rtrue; } ! Sto seguendo la mappa? if (Miniere.dir && noun==Miniere.dir) { ! direi di si... mappaminiere.path++; Miniere.dir=0; if (mappaminiere.path==4) { mappaminiere.path=-1; Achieved(33); solved(h_mappa); PlayerTo(GalleriaSalita,2); rtrue; } } else { ! purtroppo no... mappaminiere.path=-1; if (Miniere.posy==0 && Miniere.posx>0 && noun==w_obj or e_obj) ; else ! Un po' di casualita' switch(random(12)) { 1: if (Miniere.posy<1) Miniere.posy++; 2: if (Miniere.posy>-1) Miniere.posy--; 3: if (Miniere.posx<1) Miniere.posx++; 4: if (Miniere.posx>-1) Miniere.posx--; } } ! Non si arriva per caso al centro delle miniere while (Miniere.posx==0 && Miniere.posy==0) { Miniere.posx=random(3)-2; Miniere.posy==random(3)-2; } ! Correzione sulle coordinate if (Miniere.posy==2 && Miniere.posx==2) { Miniere.posx=1; Miniere.posy=1; } if (Miniere.posy==2 && Miniere.posx==-2) { Miniere.posx=1; Miniere.posy=-1; } if (Miniere.posy==-2 && Miniere.posx==2) { Miniere.posx=-1; Miniere.posy=1; } if (Miniere.posy==-2 && Miniere.posx==-2) { Miniere.posx=-1; Miniere.posy=-1; } if (Miniere.posy==2 && random(2)==1) Miniere.posy=1; if (Miniere.posy==-2 && random(2)==1) Miniere.posy=-1; if (Miniere.posx==2 && random(2)==1) Miniere.posy=0; !else if (Miniere.posx==2 && random(3)==1) Miniere.posx=1; if (Miniere.posx==-2 && random(2)==1) Miniere.posx=-1; if (iarin in Miniere && iarin in real_location && iarin.follower) remove iarin; PlayerTo(Miniere,0); rtrue; } rfalse; ]; DRoom Cunicolo "Uno stretto cunicolo" with description "Una galleria stretta e bassa, tanto da obbligare chi la percorre a stare carponi, a volte quasi a strisciare, procede da est a ovest, attraversata da una fresca corrente d'aria. Evidentemente qui vicino ci deve essere un'uscita.", name 'cunicolo' 'caverna' 'galleria' 'tunnel', before [; Examine, Search: if (noun == pareti) <>; ], w_to [; miniere.posx=2; miniere.posy=0; return(Miniere); ], e_to [; solved(h_miniere3); Achieved(27); print "Finalmente il cunicolo sbuca all'aria aperta, nella foresta.^"; return UscitaMiniera; ], cant_go "Il cunicolo porta da est a ovest."; Prop -> simboloy2 "simbolo ~Y2~" with name 'y2' 'simbolo' 'simboli' 'pietra', description "Su di una parete sono incisi i simboli ~Y2~.", has static; ORoom UscitaMiniera "Ingresso secondario per le miniere." with description "Un sentiero quasi invisibile, sul versante orientale del monte Kalnam, termina di fronte ad un piccolo cunicolo che d@`a accesso alle miniere. Verso sud si stende la vasta foresta.", name 'ingresso' 'sentiero', w_to Cunicolo, s_to ForestaR5, cant_go "Il cunicolo porta verso ovest, il sentiero verso sud.", has female; Direction -> "cunicolo" with name 'cunicolo' 'galleria' 'caverna', dir_to w_obj, description "Il cunicolo, uno stretto budello di roccia, andando verso ovest conduce all'interno delle miniere."; Direction -> "foresta" with name 'foresta' 'alberi' 'albero' 'bosco', dir_to s_obj, description "La foresta @`e fitta in questo luogo, e nasconde l'ingresso delle miniere, tanto che non lo avresti mai trovato per caso.", has female; DRoom GalleriaSalita "Una galleria in salita" with description "Questa galleria non sembra far pi@`u parte del sistema delle miniere, anche se pare sempre scavata nella roccia da mani umane. Essa ripidamente sale verso l'alto andando verso sud, oppure porta verso nordest, di nuovo verso il labirinto delle miniere.", name 'galleria' 'caverna' 'pietra', ne_to Miniere, d_to Miniere, s_to TunnelStretto, u_to TunnelStretto, cant_go "La galleria sale verso sud, o riscende verso nordest.", each_turn [; if (phase==8 && subphase==0) subphase=1; ], has female; Direction -> "miniere" with name 'miniere' 'miniera' 'labirinto', dir_to ne_obj, has female pluralname; DRoom TunnelStretto "Uno stretto tunnel" with description "Le pareti di roccia si stringono, permettendo a malapena il passaggio di una persona, mentre questo tunnel freddo e umido si inerpica rapidamente verso est, allargandosi in una larga caverna, o ridiscende verso nord.", name 'galleria' 'caverna' 'pietra', n_to GalleriaSalita, d_to GalleriaSalita, e_to GoCavernaLarga, u_to GoCavernaLarga, before [; Listen: "Senti dei rumori venire da pi@`u avanti."; ], each_turn [; if (iarin in self) iarin.follower=TRUE; ], cant_go "Il tunnel curva portando verso nord e verso est."; [GoCavernaLarga; if (creatureguardie in CavernaLarga) { addhint(h_creature); if (player hasnt invisible) "I tuoi passi si arrestano quando ti rendi conto che la caverna non @`e deserta. A giudicare dal rumore si tratta di diverse persone - se di persone si tratta - e procedere @`e decisamente pericoloso."; if (iarin.follower) { print "Vi rendete conto che la caverna pi@`u avanti non @`e deserta. A giudicare dal rumore si tratta di diverse persone. Protetto dal manto d'ombra procedi, ma Iarin @`e costretta ad aspettarti.^"; addhint(h_macigno); iarin.follower=FALSE; } else print "La caverna pi@`u avanti non @`e deserta, ma grazie al manto d'ombra puoi procedere."; } solved(h_creature); return(CavernaLarga); ]; DRoom CavernaLarga "Una vasta caverna" with description "Il tunnel che conduce verso est si allarga in una vasta e alta caverna. Il soffitto di roccia @`e cosparso di stalattiti, e verso sud il suolo roccioso termina in un precipizio, mentre una rampa di roccia sale ripida verso nord, verso la parte pi@`u alta della caverna.", name 'galleria' 'pietra', w_to TunnelStretto, n_to CavernaAlta, u_to CavernaAlta, s_to "Lo strapiombo @`e troppo ripido e profondo per tentare una discesa.", d_to "Lo strapiombo @`e troppo ripido e profondo per tentare una discesa.", cant_go "Puoi solo andare a ovest e a nord.", has female; Direction -> "precipizio" with name 'strapiombo' 'precipizio' 'baratro', dir_to s_obj, description "Il baratro @`e ripido, profondo e si perde nel nulla.", before [; Exit, Climb, JumpOver: <>; ThrownAt, Receive: "Qualunque cosa gettata nel baratro sarebbe persa per sempre."; ] has container; Direction -> "rampa" with name 'rampa' 'salita', dir_to n_obj, description "La rampa sale verso una sorta di piccolo altopiano", before [; Climb: <>; Exit: "La rampa porta verso l'alto."; ], has female; Object -> creatureguardie "creature" with name 'creature' 'creatura' 'esseri' 'essere' 'branco' 'gruppo' 'guardie', description "Una decina di quegli esseri grottechi e mostruosi che hai visto la notte scorsa attorno alla pietra riempie questa caverna. Sembrano star qui di guardia, armati di mazze e bastoni, pronti ad impedire il passaggio a chiunque. Ancora una volta il loro aspetto, simili ad uomini eppure cos@`i diversi, ti colpisce.", aura "Le creature emanano una tenue aura di demenza.", initial "Diverse creature, simili a quelle viste nella foresta, sembrano essere qui di guardia.", pursuit 0, nextloc 0, each_turn [; if (player hasnt invisible) { NoPicture(); deadflag=1; "^Le creature, muovendosi con una velocit@`a di cui non li credevi capaci, ti sono subito addosso. L'ultimo rumore che senti @`e quello delle tue ossa che si spezzano..."; } if (random(5)==1) "Ad un tratto le creature levano la testa verso l'alto e coralmente ripetono una sola sillaba: @<>"; ], life [; NoPicture(); deadflag=1; "Come ti muovi verso di loro, le creature sembrano accorgersi della tua presenza. Subito ti sono addosso. L'ultima cosa che senti @`e il rumore delle tue ossa che si spezzano..."; ], daemon [; ! Gestione dell'inseguimento if (self notin real_location) { if (self.nextloc) { move self to self.nextloc; self.nextloc=0; if (creatureguardie in Primadelponte && real_location==Sulponte) { print "^Le creature subumane lanciate all'inseguimento sono ormai giunte sull'orlo del precipizio, lontane solo pochi metri.^"; } } switch (++self.pursuit) { 2: self.nextloc=CavernaAlta; 4: self.nextloc=GalleriaLunga1; 7: self.nextloc=GalleriaLunga2; 10: self.nextloc=GalleriaLunga3; 14: self.nextloc=Primadelponte; 16: self.nextloc=Sulponte; 18: self.nextloc=Dopoilponte; 20: self.nextloc=Vicinoalcratere; } if (real_location==self.nextloc) { if (real_location==CavernaAlta) "^Le creature si accalcano sulla rampa, infuriate."; if (real_location==Sulponte && cucciolo in Dopoilponte) { give Sulponte general; print "^Mentre le creature si lanciano di corsa sul ponte, anche l'abominio, l'orribile albero di carne, muove i suoi passi sul sottile arco di pietra, che trema visibilmente sotto i tuoi piedi.^"; if (ishere(iarin)) "Iarin prende la tua mano e ti dice soltanto: @<>."; } if (real_location==Sulponte) "^Le creature si avventano in massa sul ponte."; if (real_location==Dopoilponte) "^Le creature corrono sul ponte, facendolo tremare."; "^Il rumore dei passi di corsa delle creature lanciate all'inseguimento ti fa capire quanto adesso siano vicine."; } } if (self in real_location) { NoPicture(); deadflag=1; if (real_location==Sulponte && cucciolo in Dopoilponte) "^L'esile ponte di pietra crolla sotto il peso dell'orribile abominio e delle creature subumane. Provi ben poca soddisfazione nel veder precipitare, insieme a te, questi orrendi esseri verso morte certa."; if (iarin in real_location) print "^Le creature, inseguendovi, vi sono addosso. Tentate "; else print "^Le creature, inseguendoti, ti sono addosso. Tenti "; "un'ultima disperata fuga, ma senza successo. L'ultimo rumore che senti @`e quello delle tue ossa che si spezzano..."; } ], has animate female pluralname; DRoom CavernaAlta "Sopra la vasta caverna" with description "Una sorta di piccolo altopiano si protende dalla roccia, dominando tutta la caverna e il precipizio sottostante. Una larga galleria si apre verso nord, mentre una rampa scende ripida verso sud.", name 'caverna' 'pietra' 'altopiano', s_to GoCavernaLarga, d_to GoCavernaLarga, n_to GalleriaLunga1, cant_go "La rampa scende verso sud, la galleria porta verso nord.", antimagic 1, has female; Direction -> "precipizio" with name 'strapiombo' 'precipizio' 'baratro', dir_to s_obj, description "Il baratro @`e ripido, profondo e si perde nel nulla.", before [; Exit, Climb, JumpOver: <>; ThrownAt, Receive: "Qualunque cosa gettata nel baratro sarebbe persa per sempre."; ] has container; Direction -> "rampa" with name 'rampa' 'salita' 'discesa', dir_to s_obj, description "La rampa scende verso il precipizio.", before [; Exit: <>; Climb: "La rampa porta verso il basso."; ], has female; Direction -> "galleria" with name 'galleria', dir_to n_obj, has female; Object -> macigno "grosso macigno" with name 'pietra' 'macigno' 'pietrone', description "Un grosso e pesante macigno, alto tanto da arrivarti quasi al petto, di forma vagamente sferica.", initial "Un grosso macigno giace sul suolo della caverna.", before [; Push: if (easy && leva in player) <>; "Provi a spingere il macigno a mani nude, ma non riesci a spostarlo nemmeno di un pollice."; PushDir: "Provi a spingere il macigno a mani nude, ma non riesci a spostarlo nemmeno di un pollice."; PushWith: if (second~=leva) "Il macigno, troppo pesante, non si sposta nemmeno di un unghia."; if (fulcro notin parent(self)) "Provi a usare la spranga come leva per spostare il macigno, ma i tuoi sforzi sono vani."; remove macigno; solved(h_macigno); Achieved(34); print "Facendo leva con la sbarra sul cuneo, con poca fatica riesci a ribaltare il macigno che inizia a rotolare lungo la rampa, piombando poi sul gruppo di creature e travolgendo due di esse, per poi cadere nel precipizio.^"; if (iarin in TunnelStretto) { move iarin to real_location; iarin.follower=TRUE; print "Approfittando della confusione, Iarin corre fino alla rampa, mentre le creature osservano precipitare il macigno, e ti raggiunge. Purtroppo le creature si voltano verso di voi"; } else { print "Le creature si voltano nella tua direzione"; } if (player has invisible) { give player ~invisible; print " - qualcuno di loro @`e anche riuscito evidentemente a notarti nonostante il manto d'ombra che ti avvolge -"; } StartDaemon(creatureguardie); " e si avventano poi furiosamente verso la rampa."; ], has static; DRoom GalleriaLunga1 "Una lunga galleria" with description "Attraverso le viscere della montagna questa galleria, ampia e lunga, si snoda nella roccia come un'arteria, procedendo in lieve salita da sud a nord.", name 'galleria' 'pietra', s_to CavernaAlta, d_to CavernaAlta, n_to GalleriaLunga2, u_to GalleriaLunga2, cant_go "La galleria procede da sud a nord.", each_turn [; if ((~~ishere(iarin)) && self hasnt general && easy) { give self general; "^Avrai sicuramente bisogno di Iarin. Devi trovare un sistema per far passare anche lei."; } ], has female; DRoom GalleriaLunga2 "Una lunga galleria" with description "La lunga galleria continua a salire procedendo da sud verso nord, verso il centro del vulcano. In questo punto essa @`e particolarmente alta e spaziosa, e molte fessure si aprono nella roccia del soffitto di roccia.", name 'galleria' 'pietra', each_turn [; if (iarin notin self) "^Ti pare di sentire un ronzio provenire dall'alto."; if (iarin in self && self hasnt general) { give self general; move insetto to self; addhint(h_insetto); "^Ad un tratto dall'alto un'orribile creatura alata, simile ad un enorme mostruoso insetto, si avventa verso Iarin."; } ], s_to GalleriaLunga1, d_to GalleriaLunga1, n_to GalleriaLunga3, u_to GalleriaLunga3, cant_go "Puoi solo andare a sud e a nord.", antimagic 2, has female; Prop -> "fessure" with name 'fessure' 'fessura' 'aperture' 'apertura' 'soffitto', description "Le aperture sopra di te potrebbero nascondere qualsiasi pericolo.", cant_go "Le fessure sono troppo in alto.", has female pluralname; object insetto "creatura simile ad un enorme insetto", with name 'creatura' 'essere' 'insetto', description "Orribile a vedersi, @`e una creatura lunga pi@`u di mezzo metro, dotata di un sottile paio d'ali membranose che ti pare impossibile possano sostenerla, con quattro occhi completamente bianchi, sotto i quali spuntano dei viscidi tentacoli verdastri, e sei zampe simili a quelle di una mosca gigante che spuntano dal ventre grasso e peloso.", aura "La creatura emette una tenue aura di follia e malvagit@`a.", count 0, each_turn [; switch(++self.count) { 1: "^La ragazza si getta a terra, nel tentativo di difendersi dall'enorme insetto che la assale."; 2: "^I tentacoli della creatura avvolgono la testa di Iarin. La ragazza disperatamente cerca di liberarsene, senza riuscirci."; 3: NoPicture(); deadflag=1; "^Ti fermi pietrificato ad osservare il corpo di Iarin che soccombe all'attacco della creatura, e non ti rendi conto che altri insetti ti sono d'un tratto addosso. Il contatto dei loro tentacoli ti stordisce, ti senti sollevare verso l'alto. Inizi a sentire i loro morsi che divorano la tua carne."; } ], before [; Attack: if ((second==0 or spada) && spada in player) { Achieved(35); move insetti to parent(self); remove self; iarin.trust++; iarin.trust++; "Un rapido fendente della tua spada colpisce la creatura. che cade sulla schiena, agitando verso l'alto in modo grottesco le orribili zampe. Iarin si risolleva in piedi cercando di riprendersi, e ad un tratto ti grida di stare attento. Ti rendi conto che decine di altri insetti stanno calando dall'alto."; } if ((second==0 or stiletto) && stiletto in player) "Provi ad attaccare la creatura, ma il tuo pugnale @`e troppo corpo per arrivare a ferirla senza venir afferrato dai suoi tentacoli."; "Non riesci a colpire la creatura."; ThrownAt: move second to parent(self); "Il grottesco enorme insetto si muove troppo velocemente, e il tuo colpo va a vuoto."; ], life [; "La creatura emette un ronzio che in qualche modo sembra una preghiera blasfema all'oscura madre."; ], has static animate female; Object insetti "creature simili ad enormi insetti", with name 'creature' 'esseri' 'insetti', description "Sono lunghe pi@`u di mezzo metro, dotate di un sottile paio d'ali membranose, con quattro occhi completamente bianchi, sotto i quali spuntano dei viscidi tentacoli verdastri, e sei zampe simili a quelle di una mosca gigante che spuntano dal ventre grasso e peloso.", aura "Le creature emettono una tenue aura di follia e malvagit@`a.", each_turn [; if (self has general) { NoPicture(); deadflag=1; "^Gli orribili insetti vi sono addosso. Il contatto dei loro tentacoli ti stordisce, ti senti sollevare verso l'alto. L'ultima cosa che vedi @`e il corpo di Iarin che viene dilaniato, mentre senti i loro morsi che divorano la tua carne."; } give self general; ], life [; Attack: "Sono troppi. Ti circondano da ogni lato."; default: "Sei circondato da queste orride creature alate. Non puoi fare niente contro di loro."; ], react_before [; Go: if (noun == n_obj or s_obj or u_obj or d_obj && ishere(iarin) && (~~ishere(insetto))) solved(h_insetto); print "Fuggite via da quei mostruosi insetti, lasciandovi alle spalle il loro blasfemo ronzio. Fortunatamente non vi seguono, ma vi pare di sentire poco lontano il rumore di pesanti passi che corrono verso di voi.^"; rfalse; ], has static female pluralname animate; DRoom GalleriaLunga3 "Una lunga galleria" with description "La lunga e ampia galleria, voltando da sud a est, continua incessantemente la sua salita. Andando avanti l'aria, gelida nei pressi delle miniere, diventa sempre pi@`u calda.", name 'galleria' 'pietra', s_to GalleriaLunga2, d_to GalleriaLunga2, e_to Primadelponte, u_to Primadelponte, cant_go "La galleria procede da sud a est.", antimagic 2, each_turn [; if ((~~ishere(iarin)) && self hasnt general && easy) { give self general; "^Non ce la farai mai senza Iarin al tuo fianco."; } ], has female; IRoom Primadelponte "Davanti ad un ponte di roccia" with description "La galleria percorsa fino ad ora si allarga quasi repentinamente in una vastissima caverna che scende ripidissima verso le profondit@`a della monte Kalnam. Soltanto un esile e stretto ponte di roccia attraversa il precipizio e permette di oltrepassare questa caverna, stendendosi da est a ovest sopra il vuoto. Dalla sommit@`a la luce del sole penetra fioca.", name 'caverna' 'galleria', w_to GalleriaLunga3, e_to [; if (ponte hasnt solid) { NoPicture(); deadflag = 1; if (iarin in self) "Correte sul ponte, rendendovi conto troppo tardi di quanto sia friabile la roccia sotto i vostri piedi. Siete quasi al culmine del ponte quando questo crolla, facendovi precipitare verso il fondo dell'abisso."; "Corri sul ponte, rendendoti conto troppo tardi di quanto sia friabile la roccia sotto i tuoi piedi. Sei quasi al culmine del ponte quando questo crolla, facendoti precipitare verso il fondo dell'abisso."; } return Sulponte; ], d_to "Ti fermi ad osservare il precipizio valutando l'idea di scendere scalando la roccia, ma comprendi che sarebbe un suicidio.", cant_go "Puoi solo scegliere tra il ponte ad est e la galleria ad ovest.", antimagic 1, initial [; LeftPicture(Bridge_img, -1, -1); ], has female light; Direction -> ponte "ponte" with pname 'ponte' '.x' 'di' '.x' 'pietra', dir_to e_obj, description "Un esile, stretto, fragile e insicuro ponte di roccia attraversa la caverna, slanciandosi sul precipizio.", each_turn [; addhint(h_ponte); ]; IRoom Sulponte "Sopra un ponte di roccia" with description "Un esile ponte di roccia friabile si stende, largo non pi@`u di due braccia, da est a ovest, balzando sopra un precipizio che occupa interamente questa caverna larga pi@`u di cento braccia. Un vento gelido, proveniente dalle profondit@`a dell'abisso che si apre verso il basso, raffresca l'aria calda di queste caverne vicine al centro del vulcano.", name 'ponte' 'caverna' 'pietra', w_to Primadelponte, e_to Dopoilponte, d_to [; << Jump >>; ], before [; Go: if (noun==w_obj && cucciolo in Dopoilponte) { NoPicture(); deadflag=1; "Provi a fuggire oltre il ponte, ma l'abominio procede nel suo inseguimento. L'esile arco di pietra crolla sotto il suo peso, ed esso precipita verso l'abisso. Purtroppo senti la pietra crollare sotto i tuoi piedi e anche tu inizi a precipitare assieme a quell'orribile creatura."; } Jump: if (precipizio.fall) { if (iarin notin self) "Mi sa che qualcosa non va... CAN'T HAPPEN!!!"; print "Stringi la mano di Iarin e dopo una disperata rincorsa assieme saltate verso la piccola cascata.^"; if (self has general) { hintlist.clear(); Achieved(36); print "Il ponte crolla sotto i vostri piedi, e la roccia frana spingendovi verso il passaggio, mentre conduce l'orribile essere e le creature che vi inseguivano ad una sicura morte sul fondo dell'abisso.^"; print "Chiudete i vostri occhi, convinti di precipitare, fino a che non sentite la fredda sensazione dell'acqua sulla pelle. Scivolate per diversi metri attraverso un piccolo condotto umido, fino a che non atterrate malamente in una piccola galleria. Siete storditi, contusi, dolenti, ma siete vivi.^"; move iarin to GalleriaSecondaria; subphase=2; waitkey(); PlayerTo(GalleriaSecondaria,2); rtrue; } NoPicture(); deadflag=1; "Purtroppo arrivate a meno di un metro dal passaggio, per poi precipitare assieme nel baratro."; } NoPicture(); deadflag=1; "Salti e cadi gi@`u dal ponte, precipitando sempre pi@`u velocemente. Per tua immensa fortuna svieni un momento prima dell'impatto."; ], between false, each_turn [; solved(h_ponte); if (cucciolo in Dopoilponte) { solved(h_cucciolo); addhint(h_salto); if (creatureguardie in Primadelponte && (~~self.between)) { self.between = true; if (iarin in self) print "^Ormai siete chiusi"; else print "^Ormai sei chiuso"; " tra due orrori. Fuggire @`e impossibile."; } "^L'abominio, l'orrida creatura figlia dell'oscura madre, pare osservarti, pronto a reagire ad ogni tua mossa."; } if (cucciolo has general && cucciolo in Vicinoalcratere) { move cucciolo to Dopoilponte; if (creatureguardie.pursuit<13 && creatureguardie.pursuit>0) creatureguardie.pursuit=13; "^L'orribile abominio si affaccia sul bordo del precipizio, per arrestarsi proprio al limitare del sottile ponte di roccia."; } ], cant_go "Il ponte si stende da est a ovest.", antimagic 2, has light; IRoom Dopoilponte "Oltre il ponte di roccia" with description "Il ponte di roccia termina il suo balzo oltre il precipizio, attraverso la vastissima caverna, su di una formazione rocciosa da cui si apre una larga e oscura galleria che salendo conduce verso est.", name 'caverna' 'galleria', each_turn [; if (cucciolo notin self && cucciolo has general) { if (++cucciolo.cmove >= 3) move cucciolo to self; if (cucciolo.cmove == 2) "^Senti i pesanti passi dell'orribile abominio che si avvicinano."; } ], w_to Sulponte, e_to Vicinoalcratere, u_to Vicinoalcratere, d_to "Anche da questa parte la discesa nel precipizio @`e infattibile.", cant_go "La galleria conduce ad est, il ponte ad ovest.", antimagic 1, has female light; Direction -> "ponte" with pname 'ponte' '.x' 'di' '.x' 'pietra', dir_to w_obj, description "Un esile, stretto, insicuro ponte di roccia attraversa la caverna, slanciandosi sul precipizio."; Object precipizio "precipizio" with name 'baratro' 'precipizio' 'abisso' 'cascata', description [; print "Il precipizio si apre verso le profondit@`a del vulcano. Nelle sue tenebre vedi riflettere a tratti tante piccole luci e sul fondo ti pare di intravedere un lago sotterraneo.^"; if (self has general) { self.fall=TRUE; print "Ora che Iarin te l'ha indicata, noti chiaramente, con la stessa sensazione che provi quando riesci a penetrare un manto d'ombra, una piccola cascata che esce dalla roccia e che nasconde un passaggio, a pochi metri dal ponte. Potrebbe forse essere anche raggiungibile, ma @`e un salto disperato.^"; if (ishere(iarin) && (~~SulPonte.between)) "Iarin sussurra: @<>."; } ], fall FALSE, found_in Primadelponte Sulponte Dopoilponte, react_before [; Look, Examine, Search: if (noun == d_obj or terreno) <>; ], has scenery concealed; IRoom Vicinoalcratere "Vicino al cratere", with description "La galleria che proviene da ovest si apre in una piccola caverna irta di stalagmiti in cui scorre un piccolo fiume di lava che emette una cupa luminescenza. Una seconda galleria, pi@`u piccola, conduce verso nord.", name 'caverna' 'galleria' 'pietra' 'stalagmiti', w_to Dopoilponte, d_to Dopoilponte, cant_go "Le gallerie portano a ovest e a nord.", antimagic 3, has light female; Prop -> "fiume di lava", with pname 'fiume' '.x' 'di' '.x' 'lava', description "Il fiume di lava proviene dal cuore del vulcano.", cant_go "Per il calore non riesci nemmeno ad avvicinarti."; Object -> cucciolo "enorme abominio", with name 'creatura' 'orribile' 'enorme' 'cucciolo' 'oscuro' 'abominio' 'essere' 'creatura', description "L'orrore che provi vedendo quest'essere mostruoso, nemmeno degno di esistere, alto almeno sei metri, che, lo ricordi bene, hai gi@`a incontrato nei sogni della notte passata. Come un orribile albero di carne i cui rami sembrano tentacoli, esso troneggia nella caverna, le sue fauci irte di denti sembra proferire bestemmie contro tutto il creato nell'adorazione di colei che @`e sua madre. Un ricordo oscuro, che non sapevi di possedere ma che sai essere verit@`a, ti rivela che quello che davanti ai tuoi occhi si para @`e un cucciolo oscuro di Sod Nigguerth.", aura "L'abominio emana un'aura di immenso terrore e pura, irrazionale malvagit@`a.", initial "Un enorme abominio, qualcosa che non dovrebbe esistere in questo mondo, @`e invece qui, davanti a te. La visione ti riempie terrore, il tuo istinto ti spinge a tornare sui tuoi passi.", count 0, cmove 0, kill [; NoPicture(); deadflag=1; print "Il cucciolo oscuro si avventa su di "; if (ishere(iarin)) print "voi"; else print "te"; print ". Ti senti afferrare dai suoi tentacoli, scosso da un dolore che non avevi mai provato prima. "; if (ishere(iarin)) print "Vedi il corpo di Iarin venir portato alle orribili fauci. "; "Poi l'oscurit@`a cade sui tuoi occhi."; ], before [; Examine, Look, AutoCast: ; default: return(self.kill()); ], life [; return(self.kill()); ], each_turn [; addhint(h_cucciolo); give self general; self.count++; if (self.count == 2) { print "L'enorme creatura si volta verso di "; if (ishere(iarin)) print "voi"; else print "te"; print ", avvicinandosi. I suoi passi fanno tremare il suolo, la sua sola vicinanza parla del male infinito che consuma l'universo, e la sua vista riempie l'animo di un terrore senza fine. Il desiderio di fuggire @`e l'unica cosa che riempie la tua mente in questo momento.^"; } if (self.count >= 3 || self notin Vicinoalcratere) return(self.kill()); ], react_before [; Go: if (noun==n_obj) return (self.kill()); ] has static animate; DRoom GalleriaSecondaria "Una galleria secondaria" with description "Questa piccola galleria, che da questo punto procede soltanto salendo ripidamente verso sud, @`e umida e abbastanza fresca, nonostante la vicinanza delle parti pi@`u calde del vulcano. In alto l'acqua cola da un piccolo condotto, formando una piccola cascatella.", name 'galleria' 'secondaria' 'caverna' 'pietra', each_turn [; if (self hasnt general) { give self general; "^Iarin si rialza, ti sorride e dice: @<>. Si avvicina alla cascatella e vi entra per qualche attimo, come per lavarsi di tutto lo sporco di questa vostra avventura sotterranea. Poi aggiunge: @<>."; } ], s_to TunnelScavato, u_to TunnelScavato, cant_go "L'unica uscita @`e a sud.", antimagic 2, has female waterhere; Prop -> "cascatella" with name 'cascata' 'cascatella', description "Dalla cascata cade acqua fresca e pulita.", before [; Touch, Drink: "L'acqua @`e molto fredda ma anche limpida e purissima."; ], has static female; DRoom TunnelScavato "Un piccolo tunnel scavato nella roccia" with description "La galleria naturale @`e diventata qui un tunnel artificiale, rozzamente scavato, che procede da nord a sud, continuando incessantemente a salire. L'aria @`e pi@`u calda, e sulle pareti @`e riconoscibile una frettolosa incisione rappresentante un albero.", name 'galleria' 'caverna' 'pietra', n_to GalleriaSecondaria, d_to GalleriaSecondaria, s_to UltimaStanza, u_to UltimaStanza, cant_go "Puoi andare solo a nord e a sud.", antimagic 1, has ; Prop -> "incisione" with name 'incisione' 'albero', description "L'incisione, nella sua rozzezza, @`e molto simile a quelle che hai visto ieri sera, sulle pareti del tempio sotterraneo.", before [; Touch: "L'incisione @`e stata realizzata in modo abbastanza rozzo, ma rimane sempre piacevole a toccarsi."; ], has female static;