! ----------------------------------------------------------------------------------------- ! ! Iniziata : 24/04/2002 ! Terminata : 24/07/2002 ! ! Testing : 25/07/2002 - 31/08/2002 ! ! Rilasci : Versione 1 / 020907 ! : Versione 2 / 021012 piccoli bug + img inventario ! ! ----------------------------------------------------------------------------------------- !Batch di compilazione (l'opzione MAX_VERBS perchè ho ecceduto il limite di 140 verbi (default)) ! informbp -G $MAX_VERBS=150 -~S +language_name=italian schizo.inf ! front schizo ! del *.ulx !rXxxx -> Room !cXxxx -> Class !oXxxx -> Oggetto !pXxxx -> Creature !Dichiarazioni per Glulx Global gg_leftwin = 0; Global gg_rightwin = 0; Constant GG_LEFTWIN_ROCK 210; Constant GG_RIGHTWIN_ROCK 211; Global gg_GraphicSupport = false; ! Graphics supported? Global gg_SoundSupport = false; ! Sound supported? Global gg_VolumeSupport = false; ! Change Volume supported? Global gg_HyperlinkSupport = false; ! hyperlink supported? Global gg_MouseInputSupport = false; ! mouse input supported? Constant GG_FORECHAN_ROCK 660; Constant GG_BACKCHAN_ROCK 661; Global gg_forechan = 0; Global gg_backchan = 0; !Alla partenza mi permette di non visualizzare il testo nella status line Global status_line; !Id dell'immagine almomento visualizzata Global curr_img = 0; !Variabile di stato per differenziare restart/restore Global Init = false; !costanti per volume Constant VOL_ALTO 5; Constant VOL_BASSO 2; !Costanti (vocali accentate) per Glulx (per compatibilità tra PC/MAC) !In maiuscolo (grave) Constant em_grave = "@@200"; !In minuscolo (grave) Constant a_grave = "@@224"; Constant e_grave = "@@232"; Constant i_grave = "@@236"; Constant o_grave = "@@242"; Constant u_grave = "@@249"; !In minuscolo (acuta) Constant e_acuta = "@@233"; !***************** INFORM ********************************************** Constant Story "^SCHIZO - Escape to the void"; Constant Headline "^^Esperimento interattivo multimediale di Tommaso Caldarola (t.caldarola@@64libero.it), copyleft 2002 ^ Libreria InfIt ver. 1.0 di Giovanni Riccardi adattata a Glulx da Tommaso Caldarola^^"; Constant MANUAL_PRONOUNS; !UTILE PER IL Baco di scenic.h !Release 1; Serial "020907"; !Primo rilascio Release 2; Serial "021012"; !Seconda versione !Sostituisco le sub relative al punteggio Replace FullscoreSub; Replace ScoreSub; !l'inventario lo visualizzo sempre in un frame Replace InvSub; Include "Parser"; Include "infglk.h"; !Glk wrapper include Include "schizo.bli"; !resource file !Variabili globali.......... Global punti = 0; Global soglia = 0; !Utilizzati per codice d'uscita Global gFineAzioni = 0; Array codice -> 0 0 0 0 0; !per il lancio dalla finestra (termina sil gioco se ne lanci uno così) Attribute pericoloso; !non puoi possedere 2 oggetti pesanti o spostarne uno che a sua volta ne contiene un'altro pesante Attribute pesante; !indica che un oggetto ha la property zona (concetto di luogo nella stanza, es.: sedia vicino la porta) Attribute conzona; !Costanti punteggio (interno) gioco Constant C_ESAURITO = 2; !punti che vengono sommati ogni volta che esegui un'azione esaurita (tipo rompi vetro, etc.) Constant C_VERBO = 3; !punti che vengono sommati ogni volta che viene digitato un verbo tipo suicidati o da sclero Constant C_ALCOOL = 250; !tre bevute al massimo Constant C_ERBA = 500; Constant C_LSD = 1000; Constant C_COCAINA = 5000; Constant C_EROINA = 10000; !Soglie Constant C_SUICIDIO = 14999; !soglia superata la quale il gioco termina col suicidio Constant C_LIMITE = 333; !numero minimo di azioni del gioco (con un max di 666 azioni) Constant C_SERA = 166; !n.ro azioni dopo il quale diventa sera !Sostituisco status window (sotto c'è la routine di personalizzazione) Replace DrawStatusLine; !utilizzato alla fine [ CodiceUscita i; PlaySound(sndOUTRO, -1, gg_forechan); gg_style(style_User1); print " [Codice d'uscita: "; for (i=0: i < 5: i++) print codice->i; if (gFineAzioni) print "-FA-"; else print "-SV-"; print punti, "-", sline2,"] "; gg_style(style_Emphasized); ]; !Personalizzo alcuni msg libreria Object LibraryMessages with before [; Take: switch(lm_n) { 12: "Non puoi, stai portando troppe cose."; } Wait: return gg_U("Ti puoi concedere tutto il tempo che vuoi...^"); WaveHands: "Che fai, inizi a parlare da solo?"; Rub: print "Adesso non ne hai voglia.^"; return gg_U("^Mi fai ridere a volte, hai deciso tu questa clausura e ora vorresti fare le pulizie!!!^"); Listen: if (oStereo.stato) "Di questo CD si salvano solo un paio di pezzi..."; Pray: return gg_U("Mi fai ridere, ti metti a pregare in queste circostanze!!!^"); Sleep: return gg_U("Sei stanco ma non assonnato.^"); Drink: return gg_U("Se avessi qualcosa da bere tra le mani ti accontenterei pure!^"); Mild, Strong: SommaPunti(C_ESAURITO); return gg_U("Hei amico, datti una calmata, non perdere le staffe.^"); Examine: switch(lm_n) { 2: if (lm_o == u_obj) <>; } Miscellany: switch(lm_n) { 3: print " F I N E "; CodiceUscita(); rtrue; 4: print " F I N E "; CodiceUscita(); rtrue; 24: "Lo puoi fare solo con esseri umani."; 30: switch(random(12)) { !default: "Non vedi nulla del genere" 2: "Questo lo ignoro."; 4: "Forse hai avuto una visione."; 6: "L'avrai sognato stanotte."; 8: "Non so tu, ma io non vedo nulla del genere."; 10: "Al massimo nei tuoi pensieri, ma qui non ne vedo."; 12: "Secondo me dovresti prenotare una visita oculistica."; } 32: "Questa cosa non la possiedi, e pure ricordavi di averla..."; 53: "^[Premi un tasto]"; } ]; Include "VerbLib"; Include "Replace"; !----------- Unica stanza ---------------- Object rStanza "La tua stanza" with scenic 'polvere' 0 "Da quando ti sei trincerato qui dentro regna sovrana." 'cane' 0 "L'inquilina di sotto ha rotto le scatole con quel cazzo di cane che abbaia sempre." 'luna' 0 "Una bella luna piena..." 'palazzone' 'palazzoni' 'casermone' 0 "Ti trovi un quartiere periferico costituito prevalentemente da palazzoni." 'quartiere' 'inquilina' 0 NULL, name "stanza" "room" "stanzetta" "camera" "cameretta", sera 0, dormito 0, initial [; gg_style(style_User1); print "^Alex, sono pi", (string)u_grave, " di dieci giorni ormai che non vedi altro che la tua stanza, le tue cose. Da quando tua madre e tua sorella Vanessa ti hanno parlato dello strizzacervelli non ne vuoi pi", (string)u_grave, " sapere di uscire da qui.^"; gg_style(style_Normal); rtrue; ], description [; ShowImg(imgAPP); print "Ti trovi nella tua camera, al decimo piano di un palazzo che ha tutta l'aria di un casermone, una stanza di circa 15 mq che da diversi giorni non vede pi", (string)u_grave, " una scopa e un panno; oltre alla polvere, che regna beata, vedi tutte quelle cose che fino a poco tempo fa erano semplicemente oggetti qualsiasi e che adesso invece sono entrati a far parte della tua vita: "; ElencaOggetti(self); print ".^"; if (IsBuio()) print_ret "^", (string)em_grave, " buio, ma grazie alla luce della luna riesci comunque a vedere bene."; rtrue; ], before [; Sleep: if (player.bevuto > 1 && self.dormito == 0) { PlaySound(sndDEPECHE, 1, gg_forechan); move player to oLetto; pMamma.in_casa = 1; ++self.dormito; print "Ti sdrai sul letto, chiudi gli occhi, cerchi di riposare... Tutto fai tranne che dormire, la sambuca ti ha stordito un pochettino, senti il letto muoversi come se fosse sulla ruota al luna park, hai lo stomaco sotto sopra!! Allunghi la mano, metti su un pezzo qualsiasi e pensi a Stefania!!!^"; gg_U("^Te lo ripetevo spesso che quella non era la ragazza per te, proprio tu che cercavi una tipa aperta, che adorasse i festini, sballarsi, bere e fumacchiare ogni tanto, e invece, ti prendi una secchiona moralista che non appena ha potuto ti ha scaricato.^"); print_ret "^Dopo circa mezz'ora ti svegli perch", (string)e_acuta, " ti ", (string)e_grave, " parso di aver sentito dei rumori..."; } "Ti sei riposato abbastanza..."; ], u_to [; <>; ], cant_go [; if (IndirectlyContains(self, oChiave)) { print "Sai benissimo che l'unica via d'uscita ", (string) e_grave, " la porta.^"; gg_style(style_Note); print "^Mmhh, non ", (string)e_grave, " detto, le vie per la "; SetLink(imgBARA, "morte"); print " sono infinite!!^"; gg_style(style_Normal); rtrue; } else { print "Certo che inizi a comportarti stranamente, hai buttato la chiave e adesso cerchi una via d'uscita?^"; if (~~IsSuicidio()) gg_U("^Mi sa che tua madre non ha tutti i torti nel volerti portare da uno strizzacervelli!^"); else { gg_style(style_Note); print "^A dire il vero ci sarebbe una via d'uscita, la finestra, una porta verso la libert", (string)a_grave, ".^"; gg_style(style_Normal); rtrue; } rtrue; } ], each_turn [ sound; if ((IsSera()) && (~~self.sera)) { ++self.sera; print "^Inizia a imbrunire.^"; } !n.ro azioni if (sline2 == (C_LIMITE + soglia)) <>; !ogni 19 azioni (escludendo tutti i multipli di 17*23) si sente un rumore provenire dalla strada... if ((~~(sline2 % 19)) && ((sline2 % 23) > 0)) { !controllo se la finestra è chiusa if (oFinestra hasnt open) SetVolume(VOL_BASSO, gg_backchan); !le costanti partono da 3 sound = random(9) + 2; PlaySound(sound, 1, gg_backchan, 1); } !ogni 23 azioni entra in casa mamma, o sorella, oppure squilla il telefono (1 sola volta per stefania e marco). if (~~(sline2 % 23)) { switch(random(4 - pRagazza.chiamato - pAmico.chiamato)) { 1: pMamma.in_casa = 1; StartTimer(pMamma, 15); PlaySound(sndPASSI, 1, gg_backchan); 2: pSorella.in_casa = 1; StartTimer(pSorella, 12); PlaySound(sndPASSI, 1, gg_backchan); !telefonata di Stefania o di Marco default: PlaySound(sndTELEFONO, 2, gg_backchan, 1); pTelefono.stato = 1; } } rtrue; ], has scenery light; !----------- PORTA E OGGETTI CONNESSI ----------------------- Object oPorta "porta" rStanza with name "porta", !evito (puoi vedere oggetto qui) senza utilizzare l'attributo concealed, in + lo vedo quando uso la WriteListFrom() describe [; return true; ], description [; print "L'uscita verso la libert", (string)a_grave, ", la realt", (string)a_grave, ", come ripete sempre tua madre!!!^^"; gg_style(style_Note); print "Non pensare alle parole di quella donna, non ti vuole pi", (string)u_grave, " bene, non la curare.^"; gg_style(style_Normal); if (oPoster in self && oChiave in self) "^Attaccati alla porta ci sono diversi vecchi poster, inoltre noti la chiave nella serratura."; if (oChiave in self) "^Vedi la chiave nella serratura."; if (oPoster in self) "^Attaccati alla porta ci sono diversi vecchi poster."; ], react_before [; Smell: if (~~noun) print_ret "Questa stanza ormai ", (string)e_grave, " un porcile, puzza di cane morto!!!"; Exit: if (noun == 0 && parent(player) == rStanza) { print "Decidi di uscire dalla stanza...^^"; <>; } ], before [; Touch: if (verb_word == 'bussa') { if ((~~pMamma.in_casa) && (~~pSorella.in_casa)) "TOC TOC!!^^Nessuno ti risponde."; else { print "Senti una voce femminile che timidamente ti risponde, ma non riesci a percepirne bene la provenienza.^"; return gg_U("^Lascia stare i tuoi familiari, nessuno ti vuole bene in questa casa.^"); } } "Tocchi la porta pensando di uscire da qui e farla finita... ma dopo qualche secondo torni sui tuoi passi."; Open: !se hai gettato la chiave if (~~IndirectlyContains(rStanza, oChiave)) { return gg_U("La chiave l'hai buttata scemo!^"); } !se la chiave l'hai tolta ma non l'hai gettata e digiti apri porta if (~~(IndirectlyContains(self, oChiave)) && (~~second)) "Hai bisogno della chiave per aprirla."; !hai digitato apri porta con chiave gg_style(style_Note); print "Che cosa fai, non ricordi pi", (string)u_grave, " la promessa fatta dopo quello che ti disse tua madre?^"; gg_style(style_Normal); "^Ti ritiri dalla porta come una guardia dal suo ufficiale!"; Unlock: <>; Attack: SommaPunti(C_ESAURITO); print "Preso non so da che cosa colpisci ripetutamente la porta a calci e pugni.^"; if (pMamma.in_casa) { print "~Scemo!!! Vuoi darti una calmata?~ - Tua madre ti ammonisce.^"; gg_U("^Non badare alla stronza di tua madre, un giorno o l'altro gliela farai pagare.^"); } else gg_U("^Calmati, ogni cosa a suo tempo...^"); rtrue; Close: print_ret "Eh mmhh, la porta ", (string)e_grave, " gi", (string)a_grave, " chiusa."; Search: "Non ", (string)e_grave, " un contenitore!"; Receive:if (noun ~= oChiave) { print "Forse ha ragione tua madre, stai proprio impazzendo!^"; gg_style(style_Note); print "^Se il tuo cervello ", (string)e_grave, " partito ", (string)e_grave, " proprio a causa sua.^"; gg_style(style_Normal); rtrue; } move oChiave to oSerratura; "Inserisci la chiave nella serratura."; ], with_key oChiave, has static female openable transparent container open lockable locked; Object oInterruttore "interruttore" rStanza with name "interruttore" "luce", describe [; return true; ], react_before [; Examine: if (noun == self) "L'interruttore della luce."; ], before [; Attack: print "Se la luce ti da fastidio puoi semplicemente spegnerla.^"; return gg_U("^Devi sapere ormai che lui non ragiona come tutti gli altri!!!^"); SwitchOn: if (self has on) print_ret "La luce ", (string)e_grave, " gi", (string)a_grave, " accesa."; SwitchOff: if (self hasnt on) print_ret "La luce ", (string)e_grave, " gi", (string)a_grave, " spenta."; ], after [; SwitchOn: "Hai acceso la luce."; SwitchOff: print "Hai spento la luce. "; if (IsSera()) print_ret (string)em_grave, " sera, ma la luna fa abbastanza luce."; ""; ], has static switchable on; Object oLampadario "lampadario" rStanza with name "lampadario", describe [; return true; ], description "Un lampadario di quelli rigidi con canna da mezzo metro.", before [; if (action ~= ##Examine && action ~= ##SwitchOn && action ~= ##SwitchOff && (~~VicinoSu(self))) "Non ci arrivi."; Attack: gg_style(style_Note); print "Ragiona, hai deciso di non uscire pi", (string)u_grave, " da questo bugigattolo, non potresti vivere senza luce.^"; gg_style(style_Normal); print_ret "^Rimani impalato a fissare il lampadario e ti sorprendi come la tua voce interiore abbia il soppravento sulle tue decisioni. Prova di un'ulteriore sconfitta!!!"; SwitchOn, SwitchOff: print "Non riesci pi", (string)u_grave, " a controllare il tuo istinto... Accendere e spegnere la luce dal lampadario, che idiozia!!^^"; gg_style(style_Note); print "Sei nelle mie mani, ti condurr", (string)o_grave, " alla pace dei sensi, visto che tua madre, tua sorella e la tua cara Stefania ti trattano male.^"; gg_style(style_Normal); "^Ti chiedi come mai la vocina non faccia mai riferimento a tuo padre."; ], has static; Object oPoster "poster" oPorta with name "poster" "mortician" "devourment" "anal" "cunt", ! describe [; return true; ], description "Poster dei Mortician, dei Devourment, dei Cadaver Corpse e degli Anal Cunt.", image imgPOSTER, before [; Smell: "L'odore della carta lucida ti ricordano le figurine dei calciatori."; Attack: print "~Bastardi, bastardi, bastardi, bastardi, bastardi, bastardi!!!~^"; if (~~pRagazza.chiamato) gg_U("^Sei proprio disperato... fatti consolare dalla sgualdrinella della tua ragazza.^"); else gg_U("^Sei proprio disperato... fatti consolare dalla sgualdrinella della tua ex.^"); rtrue; Cut: remove self; ShowInv(); SommaPunti(C_ESAURITO); print "Come se ti avessero fatto uno sgarro, strappi i poster con una violenza inaudita.^"; return gg_U("^Calmati, il vero problema sono le persone che ti circondano, ricordalo!!!^"); Burn: if ((~~second) && oAccendino notin player) "Con che cosa?"; if (second ~= 0 && second ~= oAccendino) { print "~Cazzo, sti fottuti poster, non li voglio pi", (string)u_grave, " vedere!!!~^"; gg_style(style_Note); print "^Mhh, mi sa che non c'", (string)e_grave, " pi", (string)u_grave, " niente da fare, sembra proprio andato.^"; gg_style(style_Normal); rtrue; } remove self; ShowInv(); SommaPunti(C_ESAURITO); "Tiri via i poster e li lasci bruciare, poi prima che le fiamme ti avviluppassero butti tutto dalla finestra."; Pull: if (self in oPorta) { SommaPunti(C_ESAURITO); remove self; ShowInv(); print "~Questi mi hanno gi", (string)a_grave, " stancato.~^ Con un gesto da psicopatico tiri via i poster, li accartocci e li butti fuori dalla finestra.^"; gg_style(style_Note); print "^Anche tu mi hai stancato, sai? Credevo fossi molto pi", (string)u_grave, " intraprendente, e invece...^"; gg_style(style_Normal); rtrue; } ], has pluralname; Object oSerratura "serratura" oPorta with name "serratura", description [; if (oChiave in self) "Vedi la chiave nella serratura della porta."; "La serratura della porta."; ], before [; Open, Close: print "Ma sei matto?^"; gg_style(style_Note); print "^Calmati, perch", (string)e_acuta, " non ti rilassi come sai fare solo tu?^"; gg_style(style_Normal); rtrue; Receive: if (noun ~= oChiave) { print "Forse ha ragione tua madre, stai proprio impazzendo!^"; gg_style(style_Note); print "^Se il tuo cervello ", (string)e_grave, " partito ", (string)e_grave, " proprio a causa sua.^"; gg_style(style_Normal); rtrue; } ], has female static container open; Object oChiave "chiave" oSerratura with name "chiave", ! describe [; return true; ], image imgCHIAVE, description [; "La chiave della libert", (string)a_grave, " e della ragione, come direbbe tua madre."; ], before [; Smell: "Puzza di ferro."; ], has female; !----------- FINESTRA E OGGETTI CONNESSI ----------------------- !oggetto utilizzato solo per il timer sul lancio oggetti Object oLancioDaFinestra "LancioDaFinestra" with attivo 0, oggetto, name "LancioDaFinestra", time_left 0, time_out [; <>; ]; Object oFinestra "finestra" rStanza with name "finestra", rotta 0, describe [; return true; ], description [; if (IndirectlyContains(rStanza, oVetro)) { if (self has open) <>; print_ret "La finestra ", (string)e_grave, " chiusa, oltre il vetro, sporco, non vedi altro che palazzoni."; } print "L'aria fresca ti rilassa un pochino... Ora ti senti meglio.^"; gg_style(style_Note); print "^Hai visto che nella vita si ottiene tutto, basta volerlo. Sar", (string)a_grave, " per l'aria o per aver rotto il vetro?^"; gg_style(style_Normal); rtrue; ], react_before [; Exit: if ((~~noun) && player in self) <>; Lanciati: if ((~~noun) && player in self) <>; Jump: if (player in self) <>; ], before [; Exit: if (player notin self) "Devi salirci prima..."; ThrownAt: if (self hasnt open) { give self open; print "Apri la finestra e lanci ", (the) noun, ".^"; } else { print "Lanci ", (the) noun, " dalla finestra.^"; } SommaPunti(C_ESAURITO); !se pericoloso arriva la polizia e termina il gioco if (noun has pericoloso && (~~oLancioDaFinestra.attivo)) { oLancioDaFinestra.oggetto = noun; ++oLancioDaFinestra.attivo; StartTimer(oLancioDaFinestra, 15); switch(random(3)) { 1: gg_U("^Bravissimo, avevi quasi fatto centro, grande lancio! Hai mancato il vecchietto per poco.^"); 2: gg_U("^Mamma mia che botto, quell'auto parcheggiata sotto l'avrai sfondata. Grande!!!^"); 3: PlaySound(sndURLO, 1, gg_backchan); gg_U("^Uh uh, senti come urla quella signora, l'hai sfiorata per un pelo.^"); } } remove noun; ShowInv(); rtrue; Receive: print "Al massimo puoi lanciare ", (the) noun, " dalla finestra.^"; return gg_U("^Anche tu puoi lanciarti dalla finestra, sai!^"); Search: <>; JumpOver: return SaltaSu(self); Climb: if (player in self) print_ret "Sei gi", (string)a_grave, " salito sulla finestra."; move player to self; PlaySound(sndCUORE); if (self hasnt open) { give self open; print "Sali sulla finestra dopo averla aperta.^"; } else print "Sali sulla finestra.^"; return gg_U("^Dai, non sei mai stato buono in vita tua, dimostra a tua madre che hai davvero le palle!!!^"); Attack: if (IndirectlyContains(rStanza, oVetro)) { !Finestra rotta, il volume rimane alto SetVolume(VOL_ALTO, gg_backchan); SommaPunti(C_ESAURITO); give self open; remove oVetro; move oVetri to rStanza; ShowInv(); print_ret "La tua isteria ormai ", (string) e_grave, " a livelli esasperati. Sferri un pugno che frantuma il vetro della finestra."; } "L'hai appena rotta."; ], after [; Open: SetVolume(VOL_ALTO, gg_backchan); "Aperta."; Close: if (player in self) { print "Non puoi, dovresti scendere prima.^"; return gg_U("^Puoi anche buttarti nel vuoto e fare Jeeg Robot.^"); } if (IndirectlyContains(rStanza, oVetro)) { SetVolume(VOL_BASSO, gg_backchan); "Chiusa."; } else "Non puoi, hai rotto il vetro..."; ], has static female openable supporter; Object oVetro "vetro" oFinestra with name "vetro", scenic 'disegnini' 0 "Non hanno nessun siginificato particolare, sembrano tanti quadratini." 'quadratini' 0 NULL, description [; print_ret "La tua abitudine di alitare verso il vetro fa si che sia sempre sporco, anche perch", (string)e_acuta, " poi ti diverti a fare i disegnini."; ], before [; Open: <>; Close: <>; Attack: <>; ], has static; Object oVetri "cocci di vetro" with name "vetro" "coccio" "cocci" "pezzi", ! describe [; return true; ], description "Residui del vetro della finestra.", image imgVETRI, before [; Open, Close: gg_style(style_Note); print "Il vetro ", (string)e_grave, " rotto. Hai il cervello fuori posto? Ma che domande faccio, mi sembra ovvio.^"; gg_style(style_Normal); rtrue; Attack: print_ret "Qualche pezzo pi", (string)u_grave, " grosso lo rompi ulteriormente."; ], has pluralname; !----------- SCRIVANIA E OGGETTI CONNESSI ----------------------- Object oScrivania "scrivania" rStanza with name "scrivania", esaminata 0, zona oArmadio, !dove si trova l'oggetto nella camera describe [; return true; ], description [; print "Una scrivania in ciliegio, vicino ", (the) self.zona, ", ricordi ancora quando tuo padre la mont", (string)o_grave, ". "; print "Puoi vedere "; ElencaOggetti(self); print ".^"; if (self.esaminata) rtrue; ++self.esaminata; return gg_U("^Ah tuo padre, l'unica persona che forse ti ha voluto veramente bene.^"); ], react_before [; Exit: if ((~~noun) && player in self) <>; Lanciati: if ((~~noun) && player in self) <>; Jump: if (player in self) <>; ], before [; Smell: print_ret "D", (string)a_grave, " di nuovo."; Open: <>; Close: <>; Enter: if (player in self) print_ret "Sei gi", (string)a_grave, " seduto."; move player to self; "Ti siedi."; Attack: print "Stai per colpire la scrivania con pugni e calci quando la vocina richiama la tua attenzione:^"; return Sfogare(self); JumpOver: return SaltaSu(self); Climb: if (player in self) print_ret "Ti trovi gi", (string)a_grave, " sulla scrivania."; move player to self; "Sali sopra ", (the) self, "."; Burn: return AzioneObjCon(noun, second); Take: if (player in self) "Ci sei tu sopra, non puoi."; print (string)em_grave, " troppo pesante.^"; rtrue; !se il cestino non si trova su un altro oggetto e si trova ancora nella stanza LookUnder: if (parent(oCestino) == rStanza && oCestino in rStanza) "Sotto la scrivania vedi il cestino della spazzatura."; Push, Pull: if (player in self) "Ci sei tu sopra, non puoi."; if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; "La sposti di qualche cm."; PushDir: if (player in self) "Ci sei tu sopra, non puoi."; if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; return SpostaOggetto(self, second); ], has female supporter conzona; Object oCassetto "cassetto" oScrivania with name "cassetto", describe [; return true; ], before [; Burn: return AzioneObjCon(noun, second); Attack: if (self has open) { print "Ormai ", (string)e_grave, " aperto, che senso ha colpirlo nuovamente.^"; rtrue; } SommaPunti(C_ESAURITO); give self open; print "Con un calcio colpisci violentemente il cassetto e come per magia si apre.^ Sorridi a te stesso, come se avessi avuto qualche bella soddisfazione dalla vita.^"; return gg_U("^Scemo che non sei altro, le vere soddisfazioni sono altre, non dimenticare le donne che ti hanno rovinato, tua madre, tua sorella e la tua cara Stefania.^"); Take: if (self hasnt open) <>; "Non riesci a tirarlo fuori."; Open: if (self hasnt open) { print "Il cassetto ", (string)e_grave, " incastrato, non riesci a tirarlo fuori.^"; rtrue; } Examine: if (self has open) <>; "Il cassetto della scrivania, chiuso in questo momento."; Close: if (self has open) { print "Non si chiude pi", (string)u_grave, ", dopo il colpo il binario si sar", (string)a_grave, " crepato.^"; rtrue; } ], has container openable; Object oSedia "sedia" rStanza with name "sedia" "nera", describe [; return true; ], zona oScrivania, !dove si trova l'oggetto nella camera image imgSEDIA, description [; "Una sedia nera, di quelle economiche, situata vicino ", (the) self.zona, "."; ], react_before [; Jump: if (player in self) <>; ], before [; Enter: if (player in self) print_ret "Sei gi", (string)a_grave, " seduto."; move player to self; "Ti siedi."; JumpOver: return SaltaSu(self); Climb: if (self in player) move self to parent(player); if (player in self) print_ret "Ti trovi gi", (string)a_grave, " sopra ", (the) self, "."; move player to self; "Sali sopra ", (the) self, "."; Attack: print_ret (string)em_grave, " l'unica sedia della stanza, poi saresti costretto a vivere sul letto o sul divano."; Burn: return AzioneObjCon(noun, second); Take: if (player in self) "Ci sei tu sopra, non puoi."; Push, Pull: if (player in self) "Ci sei tu sopra, non puoi."; "Spostata."; PushDir: if (player in self) "Ci sei tu sopra, non puoi."; if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; return SpostaOggetto(self, second); ], has female supporter pericoloso pesante conzona; Object oAccendino "accendino" oCassetto with name "accendino", rotto 0, image imgACCEND, ! describe [; return true; ], react_before [; Examine: if (noun == self) { if (~~self.rotto) "Un accendino ricaricabile."; "Un accendino scassato."; } ], before [; Burn: "Mi fai ridere..."; Smell: "Senti un po' di gas."; SwitchOn: ; SwitchOff: ; Attack: if (self.rotto) print_ret (string)em_grave, " gi", (string)a_grave, " rotto."; ++self.rotto; SommaPunti(C_ESAURITO); StopTimer(self); print "Scagli con violenza l'accendino. Allo scoppio dello stesso dapprima ti allontani, poi con quel sorriso da ebete ti avvicini, e ti diverte il fatto di averlo rotto.^"; gg_style(style_Note); print "^Vedo con piacere che in fondo sei ancora un bambino, d'altra parte hai solo 19 anni.^"; gg_style(style_Normal); rtrue; ], after [; SwitchOn: StartTimer(self, 3); "Hai acceso l'accendino."; SwitchOff: if (self.time_left > 0) print "Spento."; else print "Spegni l'accendino."; StopTimer(self); ""; ], time_left 0, time_out [; new_line; <>; ], has switchable; Object oLampada "lampada" oScrivania with name "lampada" "portalampada", describe [; return true; ], image imgLAMP1, react_before [; Examine: if (noun == self) { print "Una lampada da tavolo, la utilizzi quando devi studiare."; if (oLampadina notin self) " Manca la lampadina."; ""; } ], before [; Receive: if (noun == oLampadina) <>; print "Sorridi pensando al fatto che non riesci a inserire ", (the) noun, " nel portalampada.^"; return gg_U("^Sei proprio irrecuperabile, le tue rotelle saranno completamente fuori posto!^"); Search: if (oLampadina notin self) "La lampadina l'hai svitata."; Attack: if (oLampadina in self) <>; print_ret (string)em_grave, " inutile colpire il portalampada."; Turn: if (oLampadina in self) <>; "Manca la lampadina."; SwitchOn: if (oLampadina in self) { print "La lampadina ", (string)e_grave, " fulminata.^"; return gg_U("^Saranno anni ormai che quella lampadina si trova in quelle condizioni.^"); } "Manca la lampadina."; ], has female switchable container transparent open pericoloso; Object oLampadina "lampadina" oLampada with name "lampadina", ! describe [; return true; ], image imgLAMP2, description "Una lampadina da 40W.", before [; Attack: SommaPunti(C_ESAURITO); remove self; ShowInv(); "Lanci la lampadina contro la porta!!! Frantumata!!!"; Turn: if (self in oLampada) { move self to player; "Sviti la lampadina."; } move self to oLampada; "Rimetti la lampadina al suo posto."; SwitchOn: if (self notin oLampada) ; print_ret "La lampadina ", (string)e_grave, " fulminata."; SwitchOff: if (self notin oLampada) ; <>; ], has female; Object oMonitor "monitor" oScrivania with name "monitor" "schermo", describe [; return true; ], image imgMONITOR, react_before [; Examine: if (noun == self) "Un 17 pollici a schermo piatto, spento."; ], before [; Burn: return AzioneObjCon(noun, second); Smell: "Puzza di plastica."; Attack: SommaPunti(C_ESAURITO); "Ti piange il cuore spaccare il nuovissimo monitor appena acquistato!!!"; SwitchOn: print "Non c'", (string)e_grave, " alimentazione, il monitor non si accende.^"; gg_style(style_Note); print "^Vedo che hai anche la memoria corta, sono sempre pi", (string)u_grave, " convinto che tua madre ha ragione quando dice che l'esaurimento ti ha portato via la memoria.^"; gg_style(style_Normal); rtrue; ], has pericoloso switchable pesante; Object oCase "case" oScrivania with name "case" "pc" "computer", describe [; return true; ], image imgCASE, react_before [; Examine: if (noun == self) "Il case del tuo computer."; ], before [; Burn: return AzioneObjCon(noun, second); Open: "Adesso non hai voglia di aprire e smontare il tuo computer."; Close: print_ret (string)em_grave, " chiuso."; Attack: SommaPunti(C_ESAURITO); "Ti piange il cuore spaccare il nuovissimo pc appena acquistato!!!"; SwitchOn: print_ret "Non c'", (string)e_grave, " alimentazione, il computer non si accende."; Search: <>; ], has switchable pericoloso pesante; Object oTastiera "tastiera" oScrivania with name "tastiera", describe [; return true; ], image imgTASTIERA, description "La tastiera a 105 tasti del tuo pc.", before [; Burn: return AzioneObjCon(noun, second); Attack, Open, Close, SwitchOn, SwitchOff: SommaPunti(C_ESAURITO); "Non sai proprio cosa fare, vero?"; Push: gg_style(style_Note); print "^Oh oh, questa ", (string)e_grave, " veramente bella, ti metti a digitare col computer spento. Sono sempre pi", (string)u_grave, " convinto che tua madre non abbia tutti i torti quando dice di volerti rinchiudere in un ospedale psichiatrico!!! Ma tu gliela farai pagare, non ", (string)e_grave, " vero?^"; gg_style(style_Normal); rtrue; ], has female pericoloso; Object oMouse "mouse" oScrivania with name "mouse", describe [; return true; ], image imgMOUSE, description "Un vecchio mouse a 2 tasti.", before [; Search: if (oPallino in self) print_ret "C'", (string)e_grave, " il pallino, non puoi vedere nel mouse."; Receive:if (noun ~= oPallino) "Non puoi mettere ", (the) noun, " nel mouse."; Open: <>; Turn: if (oPallino in self) <>; print_ret "Il pallino l'hai gi", (string)a_grave, " svitato."; ], has container open; Object oPallino "pallino" oMouse with name "pallino" "palla", ! describe [; return true; ], image imgPALLINO, description "Il pallino del mouse.", before [; Turn: if (self in oMouse) { move self to player; ShowInv(); "Sviti il pallino."; } move self to oMouse; ShowInv(); "Rimetti ", (the) self, " al suo posto."; Take: if (self in oMouse) <>; ]; Object oPasticca "pasticca" oMouse with name "pasticca" "lsd" "acido", ! describe [; return true; ], image imgPASTICCA, before [; if (self in oMouse && oPallino in oMouse) return L__M(##Miscellany, 30, self); Attack: remove self; ShowInv(); print "La metti sotto i piedi e la schiacci come uno scarafaggio."; return gg_U("^Non ti capisco sai, tanto sacrificio per nulla!! Cosa ti sei perso!!^"); Examine:"Una pasticca del miglior LSD della zona acquistato al rave vicino al mare due settimane fa."; Eat: SommaPunti(C_LSD); remove self; ShowInv(); codice->2 = 1; print "Apri la bocca e ingoi la pasticca, deglutisci... okay, andata!!!^^^^^"; ShowImg(imgLSD); PlaySound(sndLSD, 1, gg_forechan); KeyCharPrimitive(); return gg_U("^Il cervello te lo senti sempre fuori uso.^"); ], has female; Object oPenna "penna" oScrivania with name "penna" "biro", ! describe [; return true; ], image imgPENNA, description "Una biro color nera.", has female; !general se ho visto nel cestino... Object oCestino "cestino" rStanza with name "cestino" "portarifiuti" "spazzatura", describe [; return true; ], description "Un cestino portarifiuti di quelli economici, acquistati al mercato rionale del sabato, in plastica di color nero.", image imgCESTINO, before [; Open, Close: "Non puoi, stupido."; Receive: if (noun has pesante) print_ret "Non puoi mettere ", (the)noun, " nel cestino."; Search: if (children(self) > 0) { give self general; print "Nel cestino della spazzatura "; if (children(self) > 1) print (string)ARE2__TX; else print (string)IS2__TX; ElencaOggetti(self); "."; } ], after [; Drop: "Lo rimetti sotto la scrivania."; ], has container transparent open; Object oFoglio "foglio" oCestino with name "foglio", scritto 0, image imgFOGLIO, ! describe [; return true; ], react_before [; Examine: if (noun == self) { if (oCestino hasnt general) return L__M(##Miscellany, 30); print "Un foglio di carta"; if (self.scritto) " sul quale hai espresso tutto il tuo odio per Stefania."; " bianco."; } ], before [; if (oCestino hasnt general) return L__M(##Miscellany, 30); Leggi: <>; Cut: remove self; ShowInv(); "Fatto in mille pezzi, mentre li butti dalla finestra pensi a Carnevale!!"; SwitchOn: return AzioneObjCon(noun, second); SwitchOff: "Hai la mania del pompiere?"; Burn: if ((~~second) && oAccendino notin player) "Con che cosa?"; if (second ~= 0 && second ~= oAccendino) { return AzioneObjCon(noun, second); } remove self; ShowInv(); SommaPunti(C_ESAURITO); ShowInv(); "Pensi a Stefania mentre vedi il foglio scomparire tra la piccola fiamma."; ], has switchable; Object oTaglierino "taglierino" oCestino with name "taglierino" "lama", image imgTAGLIERINO, description [; print "Un taglierino con la lama scorciata, forse per questo l'avevi cestinato.^"; return gg_U("^Non mi dire che non te lo ricordi, ti incazzasti come una bestia per il semplice fatto che avevi rotto la lama.^ Sai, non saprei dire se ti prefirsco adesso, esaurito, rimbambito e smemorato, o prima, scontroso, nervoso ma NORMALE.^"); ], before [; if (oCestino hasnt general) return L__M(##Miscellany, 30); Attack: SommaPunti(C_ESAURITO); print_ret (string)em_grave, " gi", (string)a_grave, " un po' rotto. Poi sarebbe proprio da buttare."; ]; !----------- LETTO E OGGETTI CONNESSI ----------------------- Object oLetto "letto" rStanza with name "letto", zona oFinestra, describe [; return true; ], description [; print "Il letto, che si trova vicino ", (the) self.zona, ", non viene fatto da quando ti sei rinchiuso, non immagini in che stato saranno le lenzuola!^"; if (children(self) > 0) { !!nascondo le lenzuola nella descrizione (se si trovano sul letto) give oLenzuola concealed; print "Sul letto trovi "; ElencaOggetti(self); give oLenzuola ~concealed; "."; } rtrue; ], react_before [; Exit: if ((~~noun) && player in self) <>; Lanciati: if ((~~noun) && player in self) <>; Jump: if (player in self) <>; ], before [; Open, Close: "La tua pazzia ha raggiunto limiti esasperati."; Enter: if (player in self) print_ret "Sei gi", (string)a_grave, " seduto."; move player to self; "Ti siedi."; Attack: print "Stai per colpire il letto con pugni e calci quando la vocina richiama la tua attenzione:^"; return Sfogare(self); JumpOver: return SaltaSu(self); Climb: if (player in self) print_ret "Ti trovi gi", (string)a_grave, " sul letto."; move player to self; "Sali sopra ", (the) self, "."; Burn: return AzioneObjCon(noun, second); Take: print_ret (string)em_grave, " troppo pesante."; Push, Pull: if (player in self) "Ci sei tu sopra, non puoi."; if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; "Lo sposti di qualche cm."; PushDir: if (player in self) "Ci sei tu sopra, non puoi."; if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; return SpostaOggetto(self, second); ], has supporter conzona; !general se sono legate al lampadario Object oLenzuola "lenzuola" oLetto with name "lenzuola" "lenzuolo", describe [; return true; ], image imgLENZUOLA, react_before [; Examine: if(noun == self) "Le lenzuola ormai ingiallite del tuo letto."; ], before [; Smell: "Sono le stesse da dieci giorni, meglio non ti dica cosa sento..."; Tie: if (self has general) print_ret "Sono gi", (string)a_grave, " legate al lampadario."; if (~~second) "A che cosa?"; if (second ~= oLampadario) { print "Pensi che tutto sommato non serve a un cazzo "; PrintInfinitive(); print_ret " le lenzuola ad ess", (genderandnumber)second, "."; } if (~~VicinoSu(oLampadario)) "Non ci arrivi."; give self general; SommaPunti(C_ESAURITO); print "Fatto!! Un bel nodo resistente intorno al lampadario; fai la mossa di appenderti, ti sembra molto stabile.^"; return gg_U("^Ora si che sei pronto per fare il grande salto! Un ultimo passo, su dai...^"); Cut: "Tutto sforzo inutile!"; SwitchOn: return AzioneObjCon(noun, second); SwitchOff: "Hai la mania del pompiere?"; Burn: return AzioneObjCon(noun, second); ], after [; Take: if (self has general) { give self ~general; "Sleghi le lenzuola dal lampadario."; } ], has female pluralname switchable; Object oPeluche "peluche" oLetto with name "peluche" "orsacchiotto", describe [; return true; ], image imgPELUCHE, react_before [; Examine: if (noun == self) print_ret "Il tuo peluche preferito, avr", (string)a_grave, " almeno 15 anni."; ], before [; Open: <>; Unlock: <>; Close: if (self has open) print_ret "Non puoi perch", (string)e_acuta, " l'hai praticamente sbranato."; "Vorresti chiudere il peluche?"; Cut: if (~~second) "Con che cosa?"; if (second ~= oTaglierino) print_ret "Non ", (string)e_grave, " una bella idea tagliare ", (the) self, " con ", (the) second, "."; if (self has open) print_ret (string)em_grave, " gi", (string)a_grave, " aperto."; give self open; SommaPunti(C_ESAURITO); "Squarti il peluche come un serial killer scuoia le sue vittime! All'interno vedi una pila."; SwitchOn: return AzioneObjCon(noun, second); SwitchOff: "Hai la mania del pompiere?"; Burn: return AzioneObjCon(noun, second); Push: if (oPila in self) "Senti una canzoncina, strana a dire il vero per un peluche."; Search: if (self hasnt open) print_ret (string)em_grave, " chiuso, non puoi vedere all'interno."; "Nulla che possa interessarti."; ], has switchable container; Object oPila "pila" oPeluche with name "batteria" "pila", ! describe [; return true; ], image imgPILA, description "Una pila da 1,5 volt.", before [; !se mi trovo su un oggetto vicino la porta... if (action ~= ##Examine && (~~VicinoSu(oPorta)) && self in oOrologio) "Non ci arrivi."; Attack: "La sbatti violentemente per terra."; ], has female; Object oCuscino "cuscino" oLetto with name "cuscino", describe [; return true; ], image imgCUSCINO, scenic 'sbavo' 0 "Le chiazze del tuo prodotto notturno...", description "Il tuo cuscino con tanto di sbavo.", before [; Open: <>; Unlock: <>; Close: if (self has open) print_ret "Non puoi perch", (string)e_acuta, " l'hai praticamente sbranato."; "Vorresti chiudere il cuscino?"; Cut: if (~~second) "Con che cosa?"; if (second ~= oTaglierino) print_ret "Non ", (string)e_grave, " una bella idea tagliare ", (the) self, " con ", (the) second, "."; if (self has open) print_ret (string)em_grave, " gi", (string)a_grave, " aperto."; give self open; SommaPunti(C_ESAURITO); "Recidi il cuscino come se stessi colpendo a morte una tua vittima predestinata..."; SwitchOn: return AzioneObjCon(noun, second); SwitchOff: "Hai la mania del pompiere?"; Burn: return AzioneObjCon(noun, second); Empty: "Non otterrai nulla."; ]; !**************** LIBRERIA e CONNESSI *************************** Object oLibreria "libreria" rStanza with name "libreria", describe [; return true; ], description [; print "Una libreria in legno massello, sopra vedi "; ElencaOggetti(self); "."; ], before [; Take, Push, Pull, Transfer, Pushdir: print_ret (string)em_grave, " troppo pesante, hai bisogno di una mano per poterla spostare."; ], has female static supporter; Object oLibri "libri" oLibreria with name "libri" "libro", description [; print_ret "Libri che sono l", (string)i_grave, " solo per fare bella figura. Ne avrai letti al massimo due o tre."; ], before [; Leggi: "Non hai per niente voglia."; Burn: return AzioneObjCon(noun, second); Take, Push, Pull, Transfer, PushDir: "Pensi che quello sia il posto giusto."; Attack: SommaPunti(C_ESAURITO); "Pazzo, pazzo, pazzo..."; default: "Non otterrai nulla con questo."; ], has pluralname; Object oCasse "casse dello stereo" oLibreria with name "cassa" "casse", description "Le casse da 80 Watt del tuo Hi-Fi.", before [; if ((~~VicinoSu(oLibreria)) && action ~= ##Examine && action ~= ##Listen) "Non ci arrivi."; Listen: <>; Take, Push, Pull, Transfer, PushDir: "Pensi che quello sia il posto adatto per le casse."; Attack: SommaPunti(C_ESAURITO); "Sono un regalo di tuo padre, ti dispiacerebbe distruggerle."; ], article "le", has female pluralname; Object oCoppa "coppa" oLibreria with name "coppa", describe [; return true; ], description "La coppa vinta come miglior cannoniere all'ultimo torneo di calcetto che hai partecipato.", acqua 0, !1 se c'è sambuca nella coppa eroina 0, !1 se c'è eroina nella coppa image imgCOPPA, before [; if ((~~VicinoSu(oLibreria)) && action ~= ##Examine && self in oLibreria) "Non ci arrivi."; ThrowAt: if (second == oFinestra) {self.acqua = 0; self.eroina = 0; oEroina.sciolta = 0;} Drink: if (self.acqua) "Ti fa schifo bere questa porcheria..."; Empty: if (self.acqua) { if (self.eroina) {self.eroina = 0; remove oEroina;} SommaPunti(C_ESAURITO); self.acqua = 0; ShowInv(); "Butti tutto dalla finestra."; } EmptyT: if (noun == second) { SommaPunti(C_ESAURITO); return gg_U("Mhh, complimenti per questa azione!!!! Ormai sei proprio un tipo perso.^"); } if (self.acqua) { if (self.eroina) {self.eroina = 0; remove oEroina;} SommaPunti(C_ESAURITO); self.acqua = 0; ShowInv(); "Versi la sambuca su ", (the)second, "."; } Search: if (oEroina.sciolta) "La soluzione di sambuca ed eroina pronta per essere iniettata."; if (self.acqua) "La sambuca che hai versato poco fa."; if (children(self) > 0) { print "Nella coppa hai "; ElencaOggetti(self); "."; } print_ret "Non c'", (string)e_grave, " nulla."; Rub: "Cerchi con la mano di spolverare la coppa, ma resta comunque sporca."; LetGo: if (noun == oEroina) self.eroina = 0; Receive: if (oEroina.sciolta) print_ret "Non puoi, c'", (string)e_grave, " l'eroina nella coppa pronta per l'uso."; if (self.acqua && noun ~= oEroina) "Vorresti fare una cialda?"; if (noun == oEroina) { self.eroina = 1; if (self.acqua) { remove oEroina; ShowInv(); } } return OggettoPiccolo(noun); Open, Close: "Non puoi scemo."; Attack: SommaPunti(C_ESAURITO); print "Vuoi proprio cancellare tutto della tua vita?^"; gg_style(style_Note); print "^Perch", (string)e_acuta, " non ti cancelli proprio tu dalla faccia della terra? Togli anche qualche rogna alle tre donne che ti maltrattano!^"; gg_style(style_Normal); rtrue; ], has female container pericoloso open; !****** OROLOGIO , LANCETTE ***************************** [ DescNumeri; oOrologio.description(); ]; Object oOrologio "orologio" rStanza with name "orologio", scenic 'numeri' 0 DescNumeri, numeri 0, ! 1 se hai notato che di sera i numeri sono fluorescenti describe [; return true; ], description [; if (IsBuio()) { self.numeri = 1; print_ret "A luce spenta noti che stranamente solo il numero 6 ", (string)e_grave, " fosforescente."; } print_ret "Un orologio tondo a muro, le lancette segnano le ", (string)oLancette.ora, " ma sembra fermo."; ], before [; !se mi trovo su un oggetto vicino la porta... if (action ~= ##Examine && (~~VicinoSu(oPorta))) "Non ci arrivi."; Open, Close: print_ret "Non ", (string)e_grave, " possibile."; Listen: print_ret "Non senti il tichettio delle lancette. L'orologio ", (string)e_grave, " fermo."; Receive: if (noun ~= oPila) print_ret "Non puoi mettere nell'orologio ", (the) noun, "."; Search: <>; LookDietro: if (oPila in self) "Vedi la pila inserita all'interno dell'orologio."; "Noti che manca la pila all'orologio."; Take, Push, Pull, Transfer, PushDir: print_ret "A te piace l", (string)i_grave, " dov'", (string)e_grave, " adesso."; ], has container open; Object oLancette "lancette" oOrologio with name "lancette" "lancetta", description "Lancette a forma di freccia.", ora "10:10", before [; !se non sono su un oggetto che si trova vicino la porta... if (action ~= ##Examine && (~~VicinoSu(oPorta))) "Non ci arrivi."; Push: if (oOrologio.numeri && oCassaforte hasnt open) { self.ora = "6:30"; print "Sposti le lancette sulle ", (string)self.ora; if (oPila in oOrologio) { give oCassaforte open; ". Senti un CLICK in direzione della finestra."; } " ma non succede nulla di particolare, eppure il 6 fosforescente ti ricorda qualcosa..."; } switch(random(11)) { 1: self.ora = "12:29"; 2: self.ora = "4:48"; 3: self.ora = "5:03"; 4: self.ora = "1:59"; 5: self.ora = "11:41"; 6: self.ora = "9:39"; 7: self.ora = "2:55"; 8: self.ora = "8:11"; 9: self.ora = "10:07"; 10: self.ora = "3:00"; 11: self.ora = "7:47"; } oOrologio.numeri = 0; print_ret "Sposti a caso le lancette sulle ", (string)self.ora, "."; Take, Pull, Transfer, PushDir: "Se le stacchi poi l'orologio lo devi proprio buttare."; Attack: print_ret "Che senso avrebbe, sembra gi", (string)a_grave, " guasto."; ], has female pluralname; !*********************** QUADRI, CASSAFORTE, SIRINGA *********************** Class cQuadro with describe [; return true; ], before [; Attack: print "Ti dispiace, questo quadro ti ricorda tuo padre.^"; gg_style(style_Note); print "^A proposito, perch", (string)e_acuta, " non chiedi a tua madre dov'", (string)e_grave, " tuo padre?^"; gg_style(style_Normal); rtrue; Take, Push, Pull, Transfer, PushDir: print_ret "Pensi che l", (string)i_grave, " stia proprio bene."; ]; cQuadro oQuadroL "quadro di Daqui" rStanza with name "quadro" "di" "Daqui" "natura" "quadri", description "Una natura viva di Salvatore Daqui."; cQuadro oQuadroR "quadro di Fan Mocc" rStanza with name "quadro" "di" "fan" "mocc" "ritratto" "quadri", description "Un ritratto morto del pittore Vinginz Fan Mocc.", before [; LookDietro: if (oCassaforte has general) "Vedi la tua cassaforte personale dietro il quadro."; give oCassaforte general; print "Ecco, cazzo, dove avevo la cassaforte... un po' per volta i miei ricordi vengono alla luce!!!^"; return gg_U("^Vedo che sei ottimista, io piuttosto la vedo in un modo completamente opposto, e quindi non posso che essere d'accordo con tua madre!^"); ]; !general sta per vista la prima volta... Object oCassaforte "cassaforte" rStanza with name "cassaforte", before [; !Nascosta fino a quando non vedo dietro il quadro if (self hasnt general) return L__M(##Miscellany, 30); Examine: if (children(self) > 0) <>; <>; Receive: if (noun has pesante) print_ret "Non puoi mettere ", (the)noun, " nella cassaforte."; Open: if (self hasnt open) { print "La cassaforte ", (string)e_grave, " chiusa. Non ricordi il trucchetto dato che non ", (string)e_grave, " di quelle a combinazione.^"; return gg_U("^Il tuo esaurimento nervoso ti ha bruciato la memoria... eheheh!!!^"); } if (children(self) > 0) { print "Ti aspettavi di trovare dei soldi e invece vedi solo "; ElencaOggetti(self); "."; } Close: if (self has open) "Non ti va di chiuderla, altrimenti poi per riaprirla sei costretto a rifare il giochetto delle lancette."; ], has female container openable concealed static; Object oSiringa "siringa" oCassaforte with name "siringa" "ago", scenic 'sangue' 0 "Il sangue del tuo ultimo buco che risale ad una quindicina di giorni.", rotta 0, image imgSIRINGA, ! describe [; return true; ], description [; if (~~self.rotta) print_ret "Una siringa usata... l'ago infatti ", (string)e_grave, " sporco di sangue."; SommaPunti(C_ESAURITO); "Guardi la siringa rotta, e quasi quasi ti dispiace."; ], before [; Attack: if (self.rotta) print_ret "L'hai gi", (string)a_grave, " rotta."; ++self.rotta; print "Fissi per qualche secondo la siringa, pensi a quel giorno in villa che avevi promesso a te stesso che non ti saresti bucato pi", (string)u_grave, "... con un gesto secco la spezzi in due!!^"; return gg_U("^Ehi, mi sorprendi, questo da te non me lo sarei aspettato, devo preoccuparmi?^"); ], has female; !*********************** CHITARRA, EROINA ****************************** !general se ho visto nella chitarra (rende non visibile l'eroina) Object oChitarra "chitarra" rStanza with name "chitarra", describe [; return true; ], image imgCHITARRA, description [; print_ret "Ricordi quando hai deciso di comprare la chitarra non per impararare a suonarla, ma perch", (string)e_acuta, " era figo averne una (per quando invitavi le tue amiche)."; ], before [; Search: give self general; Receive: if (noun ~= oEroina && noun ~= oTaglierino && noun ~= oChiave && noun ~= oPila && noun ~= oPenna && noun ~= oVetri && noun ~= oPasticca && noun ~= oPallino && noun ~= oLampadina && noun ~= oFoglio && noun ~= oCocaina) "Non entrerebbe mai."; Attack: SommaPunti(C_ESAURITO); print (string)em_grave, " peccato, magari un giorno decidi veramente di prendere lezioni.^"; return gg_U("^Tu lezioni di chitarra? Ma non mi far ridere, magari in un'altra vita.^"); ], has female pericoloso pesante container open; !general sta per esaminata la prima volta Object oEroina "dose di eroina" oChitarra with name "eroina" "droga" "dose", sciolta 0, image imgDOSE, ! describe [; return true; ], description [; if (self.sciolta) "Una dose di eroina pronta per l'uso."; if (self has general) "Una dose per un buco."; give self general; print "Ora tutto ti ", (string)e_grave, " pi", (string)u_grave, " chiaro... Quel giorno, quando fece irruzione quella stronza di tua madre, lanciasti giusto in tempo la dose nella chitarra.^"; gg_style(style_Note); print "^Non ti sei mai chiesto perch", (string)e_acuta, " tua madre lo fece? ", (string)em_grave, " stata quella troia di tua sorella a spifferare tutto!^"; gg_style(style_Normal); rtrue; ], before [; !se non ho visto nella chitarra if (oChitarra hasnt general) return L__M(##Miscellany, 30); if (self.sciolta && action ~= ##Examine && action ~= ##Smell && action ~= ##Eat) "Non puoi, l'hai sciolta."; ThrowAt:if (second == oFinestra) { gg_U("NOOOOOOOOOOOOOOOOO! Cazzo, hai buttato una bella dose di eroina pura!!!! Non ti capisco proprio.^"); print "^Bella soddisfazione, hai avuto la meglio sulla vocina bastarda che ti perseguita da quando ti sei rinchiuso.^^"; } Smell: print_ret "D", (string)a_grave, " di composto chimico."; Eat: print "La vuoi mangiare veramente?^"; return gg_U("^Vorresti sprecare in questo misero modo quel ben di dio?^"); ], has female edible; ! *********************************** TV, COCAINA ******************************************* !general se ho visto dietro la tv Object oTV "tv" rStanza with name "tv" "televisione" "televisore", describe [; return true; ], react_before [; Examine: if (noun == self) print_ret "Un 21 pollici della Mistupisci. In questo momento ", (string)e_grave, " spento."; ], before [; Attack: SommaPunti(C_ESAURITO); "Puo' esserti utile nei momenti di depressione."; LookDietro: if (self has general) "Nulla di interessante."; give self general; move oCocaina to player; "Allunghi la mano dietro la tv, senti qualcosa, la afferri. Ecco dove l'avevi nascosta. I tuoi occhi si illuminano come due fari in piena notte!!! Tutto contento intaschi la cocaina che avevi nascosto tempo fa durante una retata di tua madre."; SwitchOn: "Click, premi il bottone ma la TV non si accende. Ma non funziona un cazzo in questa cazzo di casa!!!"; SwitchOff: print_ret (string)em_grave, " spento."; Burn: return AzioneObjCon(noun, second); Push, Pull, Transfer, Take: print_ret "Tutto sommato sta bene l", (string)i_grave, "."; ], has female switchable; Object oCocaina "cocaina" with name "cocaina" "coca", image imgCOCAINA, description "Dovrebbe venir fuori una bella pista da qui.", before [; !se non ho visto nella chitarra if (oTV hasnt general) return L__M(##Miscellany, 30); ThrowAt:if (second == oFinestra) { gg_U("Ma che razza di coglione sei, hai buttato al vento 50 carte di coca! Sei proprio partito!!^"); print "^Ti senti vincente dopo quello che hai fatto, per una volta tanto non hai dato retta al mostro che ", (string)e_grave, " in te.^^"; } Smell: print_ret "D", (string)a_grave, " di composto chimico."; Eat: print "La vuoi mangiare veramente?^"; return gg_U("^Vorresti sprecare in questo misero modo quel ben di dio?^"); Pull: if (verb_word == 'trascina') "bella questa, sai!!"; <>; ], article "la", has female edible; !****************** ARMADIO, ALCOOL, VESTITI ************************ Object oArmadio "armadio" rStanza with name "armadio", describe [; return true; ], description "Il tuo armadio personale, piccolo ma efficiente.", before [; Attack: SommaPunti(C_ESAURITO); "Sei proprio esaurito..."; Burn: return AzioneObjCon(noun, second); Take, Pull, Push, Transfer, PushDir: print_ret (string)em_grave, " troppo pesante."; ], article "l'", has container openable; Object oBottiglia "bottiglia di sambuca" oArmadio with name "bottiglia" "sambuca", ! describe [; return true; ], quantita 3, image imgBOTTIGLIA, description [; if (~~self.quantita) "Una bottiglia di sambuca vuota."; if (self.quantita) "Una bottiglia di sambuca, ormai agli sgoccioli!!"; "Del buon sambuca; anche se poco, puoi ancora sciaquarti il canarozzo."; ], invent "una bottiglia di sambuca", react_before [; Drink: if ((~~noun) && oBottiglia in player && oBottiglia.quantita > 0) <>; ], before [; if (self hasnt general) return L__M(##Miscellany, 30); Smell: "Di che cosa deve dare se non di sambuca..."; Search: if (~~self.quantita) print_ret (string)em_grave, " vuota."; "Vedi un po' di sambuca."; Empty: if (~~self.quantita) print_ret "La bottiglia ", (string)e_grave, " vuota."; SommaPunti(C_ESAURITO); self.quantita = 0; print "Versi la poca sambuca che ne restava dalla finestra.^"; return gg_U("^E bravo al coglione, quella sambuca poteva servirti per rinfrescarti il canarozzo.^"); EmptyT: if (noun == second) { SommaPunti(C_ESAURITO); return gg_U("Mhh, complimenti per questa azione!!!! Ormai sei proprio un tipo perso.^"); } if (~~self.quantita) print_ret "La bottiglia ", (string)e_grave, " vuota."; if (second ~= oCoppa) "Versi come lo stupido un po' di sambuca su ", (the)second, "."; if (oCoppa in oLibreria && (~~VicinoSu(oLibreria))) "Non ci arrivi."; if (oEroina.sciolta) "Non puoi, rovineresti l'eroina appena riscaldata."; if (children(oCoppa) > 0 && oEroina notin oCoppa) print_ret "Ti conviene togliere quello che c'", (string)e_grave, " dentro prima."; --self.quantita; if (oCoppa.acqua) "Versi altra sambuca nella coppa."; oCoppa.acqua = 1; print "Versi un po' di sambuca nella coppa"; if (oCoppa.eroina) " e noti l'eroina che inizia ad amalgamarsi con la sambuca."; "."; Attack: SommaPunti(C_ESAURITO); remove self; ShowInv(); print "Ogni scusa ", (string)e_grave, " buona per rompere qualcosa!!! Lasci cadere la bottiglia per terra!!!^"; return gg_U("^Bravo, vedo che facciamo progressi. Al massimo la potevi crepare in testa a tua sorella la bottiglia!!^"); Drink: if (~~self.quantita) { print_ret "Sollevi la bottiglia, ma con grande dispiacere il tuo canarozzo rimane all'asciutto. La sambuca ", (string)e_grave, " finita."; } if (~~player.bevuto) SommaPunti(C_ALCOOL); --self.quantita; ++player.bevuto; player.sputato = 0; codice->0 = 1; print "Fai un bel sorso di sambuca... AHHHHH. Ti asciughi le labbra come quando da piccolo ti asciugavi il muco."; if (~~self.quantita) { ShowImg(imgMALE); PlaySound(sndALCOOL, 1, gg_backchan); "^Hai scolato la bottiglia, anzi quel che restava della sambuca. La testa ti gira tantissimo, hai un forte mal di cranio, questi tre sorsi ti hanno proprio sballato."; } ""; ], has pericoloso female concealed; Object oVestiti "vestiti" oArmadio with name "vestiti", ! describe [; return true; ], description "Una montagna di vestiti, tutti accatastati come se fossero da gettare.", before [; Burn: return AzioneObjCon(noun, second); Wear: "Preferisci tenere quelli che indossi."; Search: if (oBottiglia hasnt generaL) { give oBottiglia general; give oBottiglia ~concealed; "Rovistando tra i vestiti trovi una bottiglia."; } Push, Pull, Transfer: <>; Take: "Sei affezionato a quello che indossi..."; ], has pluralname; ! ******************** DIVANO ****************************************** Object oDivano "divano" rStanza with name "divano", zona oFinestra, describe [; return true; ], description [; print "Su questo divano, che si trova vicino ", (the) self.zona, ", trascorri il 90% del tuo tempo, lo usi anche per dormire da qualche tempo!"; if (children(self) > 0) { print " Su di esso vedi "; ElencaOggetti(self); "."; } ""; ], react_before [; Exit: if ((~~noun) && player in self) <>; Lanciati: if ((~~noun) && player in self) <>; Jump: if (player in self) <>; ], before [; Smell: "Mhh, pelle... a te fa venire il mal di testa la pelle nuova."; Cut: SommaPunti(C_ESAURITO); print_ret (string)em_grave, " abbastanza comodo, ti dispiacerebbe rovinarlo."; Open, Close: "La tua pazzia ha raggiunto limiti esasperati."; Enter: if (player in self) print_ret "Sei gi", (string)a_grave, " seduto."; move player to self; "Ti siedi."; Attack: SommaPunti(C_ESAURITO); return Sfogare(self); JumpOver: return SaltaSu(self); Climb: if (player in self) print_ret "Ti trovi gi", (string)a_grave, " sul divano."; move player to self; "Sali sul", (the) self, "."; Burn: return AzioneObjCon(noun, second); Take: print_ret (string)em_grave, " troppo pesante."; Push, Pull: if (player in self) "Ci sei tu sopra, non puoi."; if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; "Lo sposti di qualche cm."; PushDir: if (player in self) "Ci sei tu sopra, non puoi."; if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; return SpostaOggetto(self, second); ], has supporter conzona; !************************ PIANTA, TERRA ED ERBA *************************************** !general (cerca in pianta) Object oPianta "pianta" rStanza with name "pianta" "grassa" "terra" "cactus", zona oFinestra, image imgPIANTA, describe [; return true; ], description [; print "Vicino ", (the) self.zona, " ammiri la pianta grassa che ti ha regalato Stefania l'anno scorso per il tuo compleanno. Pensi proprio che sia stato il regalo pi", (string)u_grave, " brutto che tu abbia ricevuto.^"; gg_U("^Oh oh, finalmente lo ammetti, ricordo quella sera quando lei ti diede il pacco, credevi cosa fosse, e poi... una pianta!!! Parlava di radiazioni, tutte cazzate!!! E tu che le dicevi, bellissimo, grazie grazie grazie!!! Ipocrita.^"); rtrue; ], before [; Search: if (self hasnt general) { move oErba to player; give self general; print "Per caso guardi la terra un po' smossa, e ti viene in mente quel giorno in cui nascondesti l'erba nella terra. La prendi, e ti senti contento.^"; gg_style(style_Note); print "^Ti manca un po' di buona erba, una decina di giorni senza maria giovanna ", (string)e_grave, " peccato.^"; gg_style(style_Normal); rtrue; } "Nulla di interessante."; Receive: SommaPunti(C_ESAURITO); if (noun has pesante) "Non puoi stupido."; "Magari poi te ne dimentichi e impazzisci per ritrovarl", (genderandnumber)noun, "."; Cut:SommaPunti(C_ESAURITO); "Pensando al fatto che te l'abbia regalato Stefania, infilzi il cactus come se fosse proprio lei."; Open, Close, Enter: "La tua pazzia ha raggiunto limiti esasperati."; Attack: SommaPunti(C_ESAURITO); "Ti d", (string)a_grave, " fastidio in quel posto? Spostala o falla volare, semplice no!"; JumpOver: "Vai alle giostre se vuoi saltare."; Burn: return AzioneObjCon(noun, second); Push, Pull: if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; "La sposti di qualche cm."; PushDir: if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; return SpostaOggetto(self, second); ], has female pesante pericoloso container open; Object oErba "erba" with name "erba", image imgERBA, description "Un po' di buona erba, non ne fumavi da un bel pezzo.", before [; !se non ho visto nella pianta if (oPianta hasnt general) return L__M(##Miscellany, 30); ThrowAt:if (second == oFinestra) { gg_U("NOOOOOOOOOOOOOOOOO! Cazzo, hai buttato dell'erba fantastica!!!! Non ti capisco proprio.^"); print "^Ti senti felice perch", (string)e_acuta, " hai avuto la meglio sulla vocina.^^"; } Smell: "La annusi attentamente, veramente ottima."; Eat: print "La vuoi mangiare veramente?^"; gg_U("^Scusa eh, se hai deciso di restare qui a vita, la roba poi chi te la passa, un piccione viaggiatore?^"); rtrue; ], article "dell'", has female edible; !****************** STEREO *************************************** Object oStereo "stereo" rStanza with name "stereo", describe [; return true; ], stato 0, !0 = spento, 1 = acceso song 0, shuffle 0, automatico 0, react_before [; Examine: if (noun == self) "Uno stereo della Zony che ti ha regalato tuo padre."; ], before [; SwitchOff: <>; Smell: "Quell'odore comune tra gli elettrodomestici."; Cut: SommaPunti(C_ESAURITO); "Sei veramente esaurito allora."; Open, Close, Listen, SwitchOn: "Se vuoi ascoltare lo stereo usa i comandi [play, stop, next, prev, shuffle]"; JumpOver:"La tua pazzia ha raggiunto limiti esasperati."; Enter, Climb:"Non puoi, staresti scomodo."; Attack: SommaPunti(C_ESAURITO); print_ret "Ti dispiacerebbe, forse ", (string)e_grave, " l'unica cosa che funziona in questa stanza."; JumpOver: return SaltaSu(self); Burn: return AzioneObjCon(noun, second); Take: print_ret (string)em_grave, " troppo pesante."; Push, Pull, PushDir: if (ContieneObjAttr(player, pesante)) "Con quello che stai portando non ci riusciresti mai."; if (ContieneObjAttr(self, pesante)) print_ret "Non ci riesci, ", (string)e_grave, " troppo pesante."; "Lo sposti di qualche cm."; ], has switchable container open; Object oCD "CD" oStereo with name "cd", describe [; return true; ], before [; Examine: "Non ricordi chi ti ha regalato questo CD compilation."; Listen: <>; default: "Preferisci di no."; ]; !*************** Classe Oggetti virtuali utilizzati per conversare con NPC ********************* !In questo modo posso gestire comandi tipo: >chiedi cena a mamma Class cOggettivirtuali with name "scooter" "cena" "pranzo" "pasto" "colazione" "bere" "vino" "soldi" "moneta" "strizzacervelli" "psicologo" "neurologo" "dottore" "manicomio" "ospedale" "papà" "babbo" "padre" "papa", before [; return L__M(##Miscellany, 30); ], has concealed animate; cOggettivirtuali oVirtuale rStanza; ! ----------------- NPC ----------------------------- !mamma, sorella, amico (al telefono), la tua ragazza (al telefono) Object pMamma "tua madre" rStanza with name "mamma" "tua" "madre", in_casa 0, !inteso che ti ascolta (si trova in casa) dispiace 0, risposta 0, marito 0, pianto 0, time_left 0, time_out [; self.in_casa = 0; self.dispiace = 0; self.risposta = 0; self.marito = 0; self.pianto = 0; PlaySound(sndPASSI); ], before [; if ((~~self.in_casa) && (action == ##Sorry or ##Aiutami or ##Fanculo or ##Listen)) return NonInCasa(); Examine:"Non la vedi."; Push, Pull, Transfer, Attack, WaveHands: "Scusa, ma tu sei solo in stanza."; Ricorda:print "Ricordi quando da piccolo ti portava a spasso, ti comprava le ciccie polente, le patatine con la sorpresa, oppure ti portava al parco dove giocavi per ore intere alle giostrine...^"; gg_style(style_Note); print "^Vero, ma non dimenticare tante piccole ingiustizie, tua sorella vinceva tutti i suoi capricci mentre tu no, tua sorella pur essendo un'anno pi", (string)u_grave, " piccola di te gi", (string)a_grave, " a 15 anni si ritirava dopo di te, tua sorella ha avuto lo scooter e tu no... devo continuare?^^"; gg_style(style_Normal); print_ret "Ti fermi a pensare che ", (string)e_grave, " tutto vero e che questa canzone deve finire."; Chiama: if (~~self.in_casa) "Non ti risponde nessuno."; print "~Mammaaaaaaaaaaaaaaaaaaaaa?~ Urli come(?) un pazzo, senti tua madre bisbigliare per poi risponderti:^^", "~Cosa vuoi?~^"; return gg_U("^Vedi come fa la tua cara mammina!! Fosse stata tua sorella si sarebbe precipitata!^"); Think: print "La tua mamma, beh, da diversi giorni puoi solo immaginarla, dato che non le permetti di entrare in camera. Addirittura ti fai lasciare la colazione e il pasto dietro la porta. Ad ogni modo pensi che ti voglia sempre bene.^"; gg_style(style_Note); print "^Non dire idiozie, quante volte te lo devo ripetere che lei ", (string)e_grave, " la complice della sgualdrina che ti ha mollato.^"; gg_style(style_Normal); rtrue; Sorry: if (self.dispiace) print_ret "~Lasciami in pace, parlare con te ", (string)e_grave, " solo tempo perso.~"; ++self.dispiace; print "~Allora esci da quella stanza, andiamo dai dottori, sono buoni, non ti faranno nulla, solo una visitina e poi ce ne torniamo a casa.~^"; gg_U("Non la curare, la pazza ti porta dallo strizzacervelli e alla fine marcirai in un ospedale psichiatrico."); rtrue; Aiutami:if (self.dispiace) <>; print "Quando ti deciderai ad uscire da quella stanza allora avrai tutto il nostro aiuto.^"; return gg_U("^Non te lo permetto, sai benissimo cosa significa il suo aiuto, rinchiuderti in un manicomio.^"); Fanculo:SommaPunti(C_ESAURITO); print "~Continua, pazzo che non sei altro. Se ci fosse stato tuo padre non ti saresti comportato in questo modo.~ Tua madre inizia ad urlare. ~La tua razionalit", (string)a_grave, " ", (string)e_grave, " propedeutica alla pazzia!!!~^"; return gg_U("^L'hai sentita o no? Ti ha chiamamto pazzo!!! Ecco cosa pensa veramente di te.^"); Listen: "La senti borbottare, ma non fa riferimento a te."; ], Life [; if (~~self.in_casa) return NonInCasa(); WakeOther, ThrowAt, Give, Show: return NonPuoiACreature(noun, self); Kiss: return gg_U("Non vorrei che tu avessi dimenticato il motivo per il quale da dieci giorni non esci da questa stanza, e che tua madre sostiene fermamente che il tuo esaurimento ha fuso il tuo cervello, pertanto se tu non l'abbia capito la tua mammina, e non solo, ti considera un PAZZO!!!!^"); Ask, Tell: switch(second) { 'chiave': "~Non fare lo spiritoso, mi dici come ho fatto a prenderla?~"; 'droga', 'cocaina', 'erba', 'lsd', 'acidi', 'acido', 'pasticca', 'spinello', 'eroina': print "~Che c'", (string)e_grave, " sei in astinenza! Vuoi che ti vada a comprare un po' di roba? Drogato pazzo esaurito!!!~^"; return gg_U("^Spiritosa la tua mammina, hai capito... sta perdendo le staffe!!^"); 'alcool', 'sambuca', 'liquore': "~Ah oltre la droga ora ti sei messo anche a bere, madonna mia, pure alcolizzato...~"; 'siringa': "~Ti devo bucare il cervello io, per vedere cos'hai in quella testa marcia!!!~"; 'cassaforte': "~Hai dimenticato per caso il codice? Tanto non hai manco i soldi per piangere!!!~"; 'tv', 'televisore': print "~La TV l'hai scassata quel giorno, dopo il tuo primo attacco di schizofrenia! Non lo ricordi, certo che non puoi, ormai sei andato...~^"; return gg_U("^La tua mammina continua ad offenderti, non puo' bastare, che ne dici.^"); 'computer', 'pc', 'monitor': "~Si l'ho preso io il cavo, sei contento ora?~"; 'vanessa', 'sorella': "~Lasciala stare, lei non c'entra nulla in questa storia.~"; 'amico', 'marco', 'drogato', 'drogati', 'amici': "~I tuoi amici ti hanno rovinato, quella massa di drogati, non ti potevano lasciare in pace.~"; 'scuola': "~Non mi interessa niente della scuola, io voglio solo aiutarti a rimetterti in salute.~"; 'stefania', 'ragazza': if (pRagazza.chiamato) "~Stefania ti ha aiutato fin troppo, tu non hai voluto darle ascolto, lei cercava di aiutarti~"; else "~Tienila fuori da questa storia, anzi lasciala, non farla soffrire.~"; 'morte', 'scomparsa': print_ret "~Adesso non ", (string)e_grave, " il momento di parlarne.~"; !virtuali.... 'papà', 'padre', 'babbo', 'papa': if (self.marito) "~Non lo nominare, hai capito? Come hai il coraggio di parlarne!!!~"; ++self.marito; print "Silenzio, dopo qualche secondo con voce tremante tua madre ti dice che molto ", (string)e_grave, " cambiato dopo la sua scomparsa. Ti ricorda che quando hai iniziato a dare di matto l'hai anche offeso.^"; gg_style(style_Note); print "^Tappati le orecchie, sta dicendo un mucchio di cazzate, tu andavi d'accordo solo con tuo padre, e se quel giorno l'hai offesso ", (string)e_grave, " stato semplicemente per difenderti dalle sue accuse infami.^"; gg_style(style_Normal); rtrue; 'ospedale', 'manicomio': print_ret "~Se continui di questo passo, quella sar", (string)a_grave, " la tua prossima casa.~"; 'scooter': "~Te lo puoi scordare, vai a lavorare e compratelo.~"; 'cena', 'pranzo', 'colazione', 'bere', 'vino', 'alcool', 'sambuca': print "~Da oggi la cameriera sciopera, ti devi arrangiare.~^"; return gg_U("^La vedo dura adesso amico mio...^"); 'soldi', 'moneta', 'euro': "~E hai pure la faccia tosta di chiedere soldi? Scordateli!!!~"; 'strizzacervelli', 'psicologo', 'neurologo', 'dottore': print "~Figlio mio, andiamo dal dottore, fidati, faremo solo un controllo! Esci da quella porta, dai...~^"; gg_style(style_Note); print "^Non la curare, ", (string)e_grave, " una trappola.^"; gg_style(style_Normal); rtrue; !fine virtuali.... default: "Tua madre ti caca."; } Answer: if (self.risposta) print_ret "~Stai zitto, non ti sopporto pi", (string)u_grave, ".~"; ++self.risposta; print "~Mi hai rotto, non ti voglio pi", (string)u_grave, " ascoltare, dici solo stronzate!!! Ed esci subito da quella fottuta stanza che adesso puzzer", (string)a_grave, " peggio di un porcile.~^"; gg_U("^Hai visto che bel linguaggio usa tua madre con te, e tu povero illuso continui a darle qualche speranza.^"); rtrue; ], Orders [ w i; SommaPunti(C_ESAURITO); if (~~self.in_casa) return NonInCasa(); Kiss: "~Tu devi essere proprio matto figlio mio.~"; Attack: switch(noun) { pAutore: print "COMPLIMENTI!!! Azione intelligente.^"; return gg_P("^Mi dispiace ma io piloto tutti i personaggi di questa storia, e quindi nessuno puo' farmi fuori (n.d.a.).^"); pAmico: gg_style(style_Note); print "Hey, in questo modo dimostri a tua madre quello che sostiene da diversi giorni. Se Marco ti ", (string)e_grave, " antipatico, quando esci di qui lo fai fuori, semplice no?^"; gg_style(style_Normal); rtrue; pRagazza: if (pRagazza.chiamato) { print "~Sono proprio contento che t'abbia mollato, altrimenti avresti rovinato anche lei.~^"; gg_style(style_Note); print "^In questa frase tua madre mostra tutto il suo male nei tuoi confronti: pensa che tu abbia rovinato la loro esistenza e che avresti potuto rovinare anche quella di Stefania, inoltre contribuisce a farti soffrire perch", (string)e_acuta, " Stefania poteva in un certo senso aiutarti, e invece non ha fatto che peggiorare le cose.^"; gg_style(style_Normal); rtrue; } "~Ma lasciala in pace quella brava ragazza.~"; pSorella: if (self.pianto) "~Povero figlio, sei proprio andato.~ Tua madre sembra rassegnata."; ++self.pianto; print "~PAZZO, ESAURITO, SCHIZOFRENICO. Ecco cosa sei!!!! Non ce la faccio pi", (string)u_grave, " con te, aiutooooooooooooooooo!!!~ Tua madre scoppia in lacrime!!!^"; return gg_U("^Sante parole, ehehe. Dai non te la prendere, sai meglio di me che qualche rotella si trova fuori posto!!!!^"); default: print_ret "~Ma tu devi essere proprio andato... Ges", (string)u_grave, " aiutami tu.~"; } Pray: gg_style(style_Note); print "Stanne certo che lo far", (string)a_grave, "... per la tua "; SetLink(imgBARA, "morte"); print"!!!^"; gg_style(style_Normal); rtrue; Sorry: <>; Aiutami:<>; Fanculo:<>; Tell, Ask: switch(noun) { pAutore: print "~L'"; SetLink(imgAUTORE, "autore"); print " ha creato questo capolavoro a senso unico, rassegnati.~^"; return gg_P("^Complimenti per l'azione (n.d.a.)^"); pAmico: print_ret "~Cosa vuoi da Marco, lui puo' aiutarti? Non credo proprio, magari ", (string)e_grave, " un pretesto per avere altra roba!!~"; pRagazza: if (pRagazza.chiamato) { print "~Ha preso la sua decisione ed ha fatto bene, ora tu devi pensare solo alla tua salute.~^"; gg_style(style_Note); print "^Hey sembra una congiura, tua madre sa che t'ha mollato, sono complici, ma il loro piano fallir", (string)a_grave, ".^"; gg_style(style_Normal); rtrue; } else { print "~Tienila fuori da questa storia, anzi lasciala, non farla soffrire.~^"; gg_style(style_Note); print "^Tu farla soffrire, ma hai sentito come ragiona tua madre? Lei non si ", (string)e_grave, " neppure degnata di una telefonata...^"; gg_style(style_Normal); rtrue; } pSorella: print "~Fammi un piacere, lascia stare tua sorella, lei ti vuole aiutare, ma tu ostile come sei non le dai la possibilit", (string)a_grave, ".~^"; return gg_U("^Lo vedo come vuole aiutarti, si sono alleate le tre zoccolone per volerti rinchiudere in un manicomio!!! Non lo devi permettere, mi raccomando.^"); } "Tua madre ti caca."; Portami, Dammi, Give: switch(noun) { oVirtuale: !scorro tutte le parole digitate for (wn = 1: w ~= -1: w = NextWord()) { !per ogni parola vedo se c'è nella lista dei name dell'oggetto virtuale for (i = 0: i < (noun.#name)/WORDSIZE: i++) { if (noun.&name-->i == w) { !trovata, la gestisco con Ask <>; } } } "Tua madre ti caca."; !per tutti gli altri oggetti (in scope) rimando ad Ask passando il primo sinonimo dell'oggetto default: <0>>; } default: !gestisce anche parole non in dizionario (se non presente NotUnderstood) switch(random(4)) { 1: print "Tua madre non ti ha sentito.^"; return gg_U("^Invece fa l'orecchio del mercante.^"); 2: print "Tua madre ignora la tua richiesta.^"; return gg_U("^Come ha sempre fatto d'altronde.^"); 3: "~Che cosa vuoi? Non ti capisco quando parli come lo scellerato.~"; 4: "~Ti ho detto di lasciarmi in pace, chiamami solo se vuoi andare dal dottore.~"; } ], has proper female animate concealed; Object pSorella "Vanessa" rStanza with name "sorella" "vanessa", in_casa 0, !inteso che ti ascolta (si trova in casa) incazzata 0, !il timer lo rimette a zero time_left 0, time_out [; self.in_casa = 0; self.incazzata = 0; PlaySound(sndPASSI); ], before [; if ((~~self.in_casa) && (action == ##Sorry or ##Aiutami or ##Fanculo or ##Listen)) return NonInCasa(); Examine:"Non la vedi."; Push, Pull, Transfer, Attack, WaveHands: "Scusa, ma tu sei solo in stanza."; Chiama: if (~~self.in_casa) print_ret "Nessuna risposta. Forse non ", (string)e_grave, " in casa."; if (self.incazzata) "Nessuna risposta, probabilmente non ti sente, o non vuole sentirti."; "~Si cosa vuoi?~ Tua sorella sembra darti retta."; Ricorda:print "L'hai considerata sempre una rompipalle, sono state rare le volte in cui sei andato d'accordo con lei; tutto sommato un po' ti penti di questa tua repulsione verso di lei.^"; gg_style(style_Note); print "^Adesso non fare il pentito di turno, forse dimentichi tutto quello che ha spifferato tua sorella quando uscivi con la tossica Mara, la prima a saperlo ", (string)e_grave, " stata proprio tua madre, per non parlare di quando ti vide mentre ti spinellavi dietro la stazione... e non continuo!!!^"; gg_style(style_Normal); rtrue; Think: <>; Sorry: if (self.incazzata) { print "~Oh ti dispiace adesso, vuoi che ti aiutiamo? Falla finita, apri questa porta e fatti curare!!~^"; gg_style(style_Note); print "^Perch", (string)e_acuta, " non la metti a tacere una volta per tutte?^"; gg_style(style_Normal); rtrue; } print "~Non devi chiedere scusa a me, devi semplicemente uscire da questa maledetta porta, cosa ci perdi? Noi ti vogliamo aiutare, non lo capisci?~^"; gg_style(style_Note); print "^C'", (string)e_grave, " puzza di bruciato sotto, non ti fidare, ricorda, lei ", (string)e_grave, "fatta della stessa pasta di Stefania"; if (pRagazza.chiamato) print ", la tua ex sgualdrina"; print ".^"; gg_style(style_Normal); rtrue; Aiutami:if (self.incazzata) <>; print "~Quando ti deciderai ad uscire da quella stanza allora avrai tutto il nostro aiuto.~^"; return gg_U("^Non te lo permetto, sai benissimo cosa significa il loro aiuto, rinchiuderti in un manicomio.^"); Fanculo:SommaPunti(C_ESAURITO); if (self.incazzata) "~Divertiti pure, esaurito!!! Sei proprio un coglione!!!~"; ++self.incazzata; print "~Sei un esaurito, ecco cosa sei, la mamma ha ragione, hai bisogno del manicomio!!^"; gg_style(style_Note); print "^Te lo dovevi aspettare mio caro, nella sua ira tua sorella ti ha detto la sacrosanta verit", (string)a_grave,".^"; gg_style(style_Normal); rtrue; Listen: "Tua sorella non sta dicendo nulla."; ], Life [; if (~~self.in_casa) return NonInCasa(); if (self.incazzata) "L'hai fatta incazzare, non ti da retta."; WakeOther, ThrowAt, Give, Show: return NonPuoiACreature(noun, self); Kiss: return gg_U("L'astinenza (sessuale) inizia a farsi sentire... Devi adattarti purtroppo!!!^"); Ask, Tell: switch(second) { 'chiave': print_ret "~Questa ", (string)e_grave, " bella, vorresti uscire e non trovi la chiave? Sei solo uno stronzo.~"; 'droga', 'cocaina', 'erba', 'lsd', 'acidi', 'acido', 'pasticca', 'spinello', 'eroina': "~Scemo non posso aiutarti, non te la posso comprare!!!!~^"; 'alcool', 'sambuca', 'liquore': "~Ah oltre la droga ora ti sei messo anche a bere!!!! Tu sei proprio matto!!!~"; 'siringa': "~Ancoraaaa!!! Io in farmacia non vado a prendere quella porcheria!!!!~"; 'cassaforte': "~Scemo, quel trucchetto l'hai inventato tu, e solo tu sai come aprirla!!! Non te lo ricordi??? Ahahah, mi fai ridere!!!~"; 'tv', 'televisore': "~Bastardo, quello era il mio prima che me lo fregassi!!!~"; 'computer', 'pc', 'monitor': "~Lo sai che odio i computer.~"; 'amico', 'marco', 'drogato', 'drogati', 'amici': "~I tuoi amici non mi sono mai piaciuti, quei fighettini fascisti di merda!!! Ti hanno rovinato.~"; 'scuola': "~Adesso devi solo pensare a te stesso, potrai recuperare tutto il tempo perduto.~"; 'stefania', 'ragazza': "~Non giudicarla, anche lei sta attraversando un brutto periodo, sta soffrendo molto.~"; 'mamma', 'madre': print "~Mamma non vuole rinchiuderti, vuole solo aiutarti, ma devi necessariamente andare in ospedale per delle visite!!!~^"; return gg_U("^Falzissimo, ti vogliono rinchiudere e farti passare come pazzo, vogliono liberarsi di te.^"); 'morte', 'scomparsa': "~Ma lo fai lo scemo o lo sei? Alex per favore, non scherzare su queste cose.~"; !virtuali.... 'papà', 'padre', 'babbo', 'papa': print "~Per favore Alex, preferisco non parlarne.~^"; gg_style(style_Note); print "^Tua sorella, d'altronde come te, ", (string)e_grave, " rimasta scossa dalla prematura scomparsa di vostro padre.^"; gg_style(style_Normal); rtrue; 'ospedale', 'manicomio': print "~Mamma non vuole rinchiuderti, vuole solo aiutarti, ma devi necessariamente andare in ospedale per delle visite!!!~^"; return gg_U("^Falzissimo, ti vogliono rinchiudere e farti passare come pazzo, vogliono liberarsi di te.^"); 'scooter': print_ret "~Non ", (string)e_grave, " il momento giusto per parlarne.~"; 'cena', 'pranzo', 'colazione', 'bere', 'vino', 'alcool', 'sambuca': print_ret "~Dopo vedr", (string)o_grave, " se di nascosto ti porto qualcosa da sgranocchiare.~^"; 'soldi', 'moneta', 'euro': "~Non posso aiutarti, mamma se ne accorgerebbe.~"; 'strizzacervelli', 'psicologo', 'neurologo', 'dottore': print "~Alex ascolta, quando mamma parla di dottore vuole semplicemente che tu ti faccia qualche controllo, in buona fede, vuole solo tirarti fuori da questa situazione, non lo capisci, ", (string)e_grave, " tua madre, sei suo figlio, fallo per me, esci da questa maledetta stanza!!!!~^"; return gg_U("^Te lo devi ripetere ancora una volta???^"); !fine virtuali.... default: "Tua sorella ti ignora."; } Answer: print_ret "~Adesso l'importante ", (string)e_grave, " che tu esca al pi", (string)u_grave, " presto da qui.~"; ], Orders [ w i; SommaPunti(C_ESAURITO); if (~~self.in_casa) return NonInCasa(); if (self.incazzata) "Dopo quello che le hai detto non credo abbia ancora voglia di ascoltarti."; Kiss: print "~Adesso non fare lo stupido.~^"; gg_style(style_Note); print "^Tua sorella in un certo senso ", (string)e_grave, " da ammirare, non ti dice chiaramente che sei fuori di testa, anche se, ne sono (sei) convinto, che lo pensa.^"; gg_style(style_Normal); rtrue; Attack: switch(noun) { pAutore: "~Tommaso ti ha creato, lo devi solo ringraziare.~"; pAmico: print_ret "~Alex dai, smettila di fare lo scemo... adesso non ti do pi", (string)u_grave, " retta.~"; pRagazza: if (pRagazza.chiamato) { print "~Se ti ha mollato l'ha fatto per il tuo bene, in questo momento ci sono cose pi", (string)u_grave, " importanti a cui pensare.~^"; print "^~Non ci credo, lei poteva benissimo aiutarmi, stammi vicino, e magari la storia poteva andare diversamente~ Ti sfoghi un pochino con tua sorella.^"; return gg_U("^Non dire stronzate, tu il suo aiuto non l'avresti proprio accettato.^"); } "~Che vuoi da Stefania, adesso mi fai incazzare.~"; pMamma: ++self.incazzata; print "~Mi fai schifo, volere la morte della mamma, sei uno stronzo rimbambitoooo!!!!~^"; return gg_U("^Hai fatto piangere Vanessa, bene bene, queste donne ti hanno rovinato, e la devono pagare, vero Alex?^"); default: "~Cazzo dici Alex...~"; } Pray: "~Alex le preghiere non hanno senso se non esci da quella stanza.~"; Sorry: <>; Aiutami:<>; Fanculo:<>; Tell, Ask: switch(noun) { pAutore: print "~L'"; SetLink(imgAUTORE, "autore"); print_ret " ", (string)e_grave, " un gran bel ragazzo.~^"; pAmico: "~Cosa vuoi che gli dica? Sarebbe il caso che tu non lo vedessi per diversi giorni.~"; pRagazza: if (pRagazza.chiamato) "~Ormai ha deciso, e io non ho nessuna intenzione di farle cambiare idea.~"; else "~Lasciala stare, anche lei non sta bene in questo periodo.~"; pMamma: print "~Alex, ficcatelo una buona volta, mamma si sta facendo in quattro per poter trovare una soluzione, la migliore, per te, quindi non devi pensare che lei voglia rinchiuderti in un ospedale "; gg_P("- manicomio, vorrai dire - "); "quindi pensaci bene, esci da questa stanza.~"; } "Tua sorella ti caca."; Portami, Dammi, Give: switch(noun) { oVirtuale: !scorro tutte le parole digitate for (wn = 1: w ~= -1: w = NextWord()) { !per ogni parola trovo il name matching dell'oggetto virtuale for (i = 0: i < (noun.#name)/WORDSIZE: i++) { if (noun.&name-->i == w) { !trovata, la gestisco con Ask <>; } } } "Tua sorella ti caca."; !per tutti gli altri oggetti (in scope) rimando ad Ask passando il primo sinonimo dell'oggetto default: <0>>; } default: !gestisce anche parole non in dizionario (se non presente NotUnderstood) switch(random(4)) { 1: "Forse tua sorella non ti ha sentito."; 2: "Tua sorella ti ignora."; 3: "~Non ti capisco.~"; 4: "~Dimmi chiaramente quello che vuoi.~"; } ], has proper female animate concealed; Object pTelefono "telefono" oScrivania with name "telefono", describe [; return true; ], stato 0, !0 = libero, 1 = squilla, 2 = in conversazione persona 0, !chi sta al telefono time_left 0, time_out [; if (self.persona == pAmico) { print "^~Beh, adesso devo lasciarti, stammi bene, ci sentiamo, ciao!!!~ Riagganci.^"; } else { print "^~Prima di lasciarti devo dirti una cosa Alex~ ..... Attimi interminabili di silenzio .....^^"; gg_P("Voce tremolante, ho dei brutti presentimenti mio caro (n.d.a.)^"); print "^~Volevo solo dirti che..., beh..., mmmhhh..., vorrei dirti di dimenticarmi, non pensare pi", (string)u_grave, ", dimentica il mio nome, il mio numero... insomma, non farti sentire mai pi", (string)u_grave, ", non ha senso continuare questa farsa!~ [CLICK]^"; gg_style(style_Note); print "^Azzo caro mio, ti aspettavi che lei fosse vicino in questo triste periodo della tua vita!!! Ascoltami, ", (string)e_grave, " arrivato il momento di reagire, gliela devi far pagare alla tua sgualdrinella, scusami, ex!!!^"; gg_style(style_Normal); } self.stato = 0; self.persona.in_casa = 0; self.persona = 0; rtrue; ], before [; Examine:"Un telefono fisso, vecchio modello."; Tie, Fill, JumpOver, Dig, Open, SwitchOn: "Azione inutile."; Climb: print "Tu sei pazzo.^"; return gg_P("^Ma va? (n.d.a.)^"); Burn: return AzioneObjCon(noun, second); Taste: "Vorresti spaccarti i denti?"; Smell, Touch: "Non senti nulla di particolare."; Buy: print_ret (string)em_grave, " vostro, non ce n", (string)e_grave, " bisogno."; Squeeze, Attack, Swing, Cut: SommaPunti(C_ESAURITO); if (verb_word ~= 'ammazza' && verb_word ~= 'uccidi') { print_ret (string)em_grave, " l'unico mezzo di comunicazione a tua disposizione, non ti conviene."; } return L__M(##Miscellany, 37); Take: print_ret "Non ", (string)e_grave, " un cordless.^^ (Se vuoi chiamare qualcuno usa la forma [telefona a PERSONA])"; Listen: if (self.stato == 1) "Sta squillando!!!"; if (self.stato == 2) print_ret "Al telefono c'", (string)e_grave, " ", (name)persona, "."; "Senti il TU TU di linea libera."; Answer: switch(self.stato) { 1: ++self.stato; StopPlay(); switch(pRagazza.chiamato + pAmico.chiamato) { !nessuna telefonata ricevuta... 0: if (random(2) > 1) return Telefonata(pAmico); else return Telefonata(pRagazza); !uno dei due ha chiamato 1: if (~~pAmico.chiamato) return Telefonata(pAmico); else return Telefonata(pRagazza); } 2: print_ret "Sei gi", (string)a_grave, " in conversazione con ", (the)self.persona, "."; !per eventuali bachi gestisco come libero default: "Non squillava mica il telefono, forse stai sognando, o meglio vorresti che squillasse."; } Push, Pull, Transfer: print_ret "Sta bene l", (string)i_grave, " sulla scrivania."; !Per tutti gli altri verbi visualizzo msg standard default:return L__M(##Miscellany, 37); ], Life [; return L__M(##Miscellany, 37); ], Orders [; return L__M(##Miscellany, 37); ], has talkable; [ Telefonata obj; if (~~obj) return; obj.in_casa = 1; obj.chiamato = 1; pTelefono.persona = obj; StartTimer(pTelefono, 2 + random(5)); if (obj == pAmico) { print "~Ciao Alex, sono Marco come stai? Volevo chiamarti prima ma ho avuto da fare. Non ti fai pi", (string)u_grave, " vedere!!! Tutti a scuola chiedono di te, ma cosa ti ", (string)e_grave, " successo?~^"; return gg_U("^Io lo prenderei con le pinze, non mi fido tanto, secondo me sa tutto.^"); } else { print "~Ciao Alex~ - "; gg_U(" WOW, Stefania "); print "- ~Sono diversi giorni che non ti ci si vede!!! Come va?~^"; gg_U("^Secondo te non sa nulla? Io non ci scommetterei!!!^"); print "^~Ascolta..., ehm..., esci una di queste sere?~^"; gg_style(style_Note); print "^C'", (string)e_grave, " qualcosa nella sua voce che non mi convince...^"; gg_style(style_Normal); rtrue; } ]; !La ragazza del player Object pRagazza "Stefania" rStanza with name "ragazza" "stefania" "fidanzata", in_casa 0, !al telefono chiamato 0, ricordare 0, before [; if ((~~self.in_casa) && (action ~= ##Think && action ~= ##Ricorda && action ~= ##Telefona)) return L__M(##Miscellany, 30); Ricorda:if (pTelefono.persona == self) print_ret "Pensi che adesso non ", (string)e_grave, " il momento giusto."; if (self.chiamato && self.ricordare) "Non ne hai per niente voglia."; if (self.chiamato) { ++self.ricordare; print "Ti fermi un attimo a pensare: con Stefania all'inizio ti trovavi bene, certo, fino a quando le uscite col gruppo 'perso' si sono fatte pi", (string)u_grave, " frequenti e da allora sono iniziati i problemi... Il fatto che tu fumassi tanto a lei non andava proprio, e meno male che ignorava delle pasticche, della coca, dell'eroina, altrimenti... Tutto sommato ti divertivi con lei, stavi abbastanza bene.^"; gg_style(style_Note); print "^Dai adesso non fare il mim", (string)i_grave, ", volevi privarti dei piaceri della vita? Quante volte hai ripetuto a te stesso che non te ne fregava nulla di Stefania, e che la tua vera vita erano gli amici, il gruppo? Devo anche ricordarti che l'hai tradita? O che quella volta tutto fatto davanti ai tuoi amici le dicesti che non provavi nulla? Beh, vedo che annuisci, quindi non ti rimangiare le parole e le promesse fatte a te stesso, sii forte, ce la faremo anche senza di lei!!! Anzi, a tal proposito, se l'avessi dimenticato, vorrei ricordarti che lei ti ha chiamato dopo dieci giorni.^"; gg_style(style_Normal); rtrue; } print "Bella e docile ragazza, speri che dopo tutto quello che sta succedendo lei possa capirti, aiutarti e accoglierti fra le sue braccia.^"; return gg_U("^Ahh povero fesso e illuso, bada bene a quello che pensi...^"); Think: <>; Examine: "Non la vedi."; WaveHands: print "~Ciao Stefania.~ Timidamente la saluti.^"; "^~Ciao Alex~"; Push, Pull, Transfer, Attack: "Via cavo?"; Chiama: "Sei al telefono con lei, stupido..."; Sorry: print "~Alex, non devi chiedermi scusa, bisogna guardare avanti, pensa a te stesso, alla tua salute...~^"; return gg_U("^Quel pensa a te stesso non mi piace, guai in vista amico mio!!!^"); Aiutami:print "~Non posso aiutarti, ascolta tua madre e tua sorella e vedrai che tutto andr", (string)a_grave, " per il meglio.~^"; return gg_U("^Oh oh, le tre donne della tua vita alleate per distruggerti, sono loro che ti stanno affossando mio caro, tieniti alla larga da loro...^"); Fanculo:StopTimer(pTelefono); SommaPunti(C_ESAURITO); pTelefono.stato = 0; pTelefono.persona = 0; self.in_casa = 0; print "~Beh sai che ti auguro, brutto esaurito schizofrenico drogato stronzo fottuto bastardo, che tu possa andare all'inferno!!!~ [CLICK] - Ha chiuso.^"; return gg_U("^Hai visto la tua cara sgualdrinella, te la sei scelta dura la tipetta!!!! Mi sei piaciuto, stai progredendo alla grande. Ah dimenticavo, quella zoccola di tua madre ha spifferato tutto, eh!!^"); Listen: "Sembra che non abbia molte cose da dire."; ], Life [; if (~~self.in_casa) return L__M(##Miscellany, 30); WakeOther, ThrowAt, Give, Show: return NonPuoiACreature(noun, self); Kiss: return gg_U("L'astinenza (sessuale) inizia a farsi sentire... Devi adattarti purtroppo!!!^"); Ask, Tell: switch(second) { 'droga', 'cocaina', 'erba', 'lsd', 'acidi', 'acido', 'pasticca', 'spinello', 'eroina', 'alcool', 'sambuca', 'liquore', 'siringa', 'soldi', 'moneta', 'euro': "~Proprio a me parli di questo? Hai dimenticato tutte le liti allora!!!~"; 'cassaforte': "~Che vuoi che ne sappia io della tua cassaforte.~"; 'amico', 'marco', 'drogato', 'drogati', 'amici': "~Non mi ricordare i tuoi amici, chiamamoli amici, gentaglia piuttosto!!! Vuoi un consiglio, la tua guarigione inizia proprio da loro.~"; 'scuola': "~Adesso devi solo pensare a te stesso, potrai recuperare tutto il tempo perduto.~"; 'amore': print_ret "~", (string)em_grave, " una parola grossa in questo momento, non mi sembra il caso di parlarne.~"; 'mamma', 'madre': "~Tua madre vuole solo aiutarti, mi ha detto che la stai facendo soffrire, dalle retta, vuole solo aiutarti.~"; 'sorella', 'vanessa': "~Vanessa, come tua madre, vuole solo il tuo bene, le stai facendo soffrire inutilmente.~"; 'sesso': print "~Sei il solito porco, anche in queste circostanze.~^"; return gg_U("^Soprattutto direi io.^"); 'uscire', 'sera', 'serata', 'sere', 'serate', 'discoteca': print "~Mi chiedevo se una sere di queste... insomma, se uscirai di casa.~^"; return gg_U("Hey, sembra mandata da tua madre, non credi? Hai sentito come parla."); !virtuali.... 'papà', 'padre', 'babbo', 'morte', 'scomparsa', 'papa': "~Penso che io non sia la persona giusta con cui parlarne, non credi.~"; 'ospedale', 'manicomio': "~Tutte idiozie le tue, ma che manicomio, devi solo fare qualche controllo, tutto qui.~"; 'cena', 'pranzo', 'colazione', 'bere', 'vino', 'alcool', 'sambuca', 'scooter': "~Che vuoi che ne sappia io!!!~"; 'strizzacervelli', 'psicologo', 'neurologo', 'dottore': "~Alex ascolta, quando tua madre parla di dottore vuole semplicemente che tu ti faccia qualche controllo, lo fa per la tua salute.~"; !fine virtuali.... default: switch(random(2)) { 1: "~Alex, non so di che cosa tu stia parlando.~"; 2: "~Alex, che vuoi che ne sappia io!!!~"; } } Answer: print_ret "~Ok... ehmm, ho capito... io dovrei parlarti per", (string)o_grave,".~"; ], Orders [ w i; SommaPunti(C_ESAURITO); if (~~self.in_casa) return L__M(##Miscellany, 30); Kiss: "~Adesso non fare lo stupido.~^"; Attack: "~Ma sei fuori? Se continui chiudo eh.~"; Pray: "~Alex ascolta tua madre, per favore.~"; Sorry: <>; Aiutami:<>; Fanculo:<>; Tell, Ask: switch(noun) { pAutore: print "~L'"; SetLink(imgAUTORE, "autore"); print_ret " ", (string)e_grave, " un gran bel ragazzo.~^"; pAmico: "~Cosa vuoi che gli dica? Sarebbe il caso che tu non lo vedessi per diversi giorni.~"; pMamma, pSorella: print "~Alex, ho avuto modo di chiacchierare sia con tua madre che con tua sorella, vogliono portarti dal dottore per una semplice e banale routine di controllo, ecco tutto, ma cosa ti sei ficcato in mente?~^"; return gg_U("^Banale routine di controllo? Vogliono richiuderti, non la curare a quella stronza...^"); } "Stefania ti ignora."; Portami, Dammi, Give: switch(noun) { oVirtuale: !scorro tutte le parole digitate for (wn = 1: w ~= -1: w = NextWord()) { !per ogni parola trovo il name matching dell'oggetto virtuale for (i = 0: i < (noun.#name)/WORDSIZE: i++) { if (noun.&name-->i == w) { !trovata, la gestisco con Ask <>; } } } "Stefania ti ignora."; !per tutti gli altri oggetti (in scope) rimando ad Ask passando il primo sinonimo dell'oggetto default: <0>>; } default: "~Non dire stronzate Alex.~"; ], has female proper animate concealed; !Non è mai in casa... Object pAmico "Marco" rStanza with name "amico" "marco", in_casa 0, !al telefono chiamato 0, before [; if ((~~self.in_casa) && (action ~= ##Think && action ~= ##Ricorda && action ~= ##Telefona)) return L__M(##Miscellany, 30); Ricorda:if (pTelefono.persona == self) print_ret "Pensi che adesso non ", (string)e_grave, " il momento giusto."; print_ret "Marco in buona sostanza ", (string)e_grave, " un bravo ragazzo, paraculo, fighettino con un bel po' di soldi, anche lui tira, fuma, e ha provato anche a bucarsi..."; Think: <>; Examine: "Non lo vedi mica."; WaveHands: print "~Ciao Marco.~^"; print "^~Carissimo Alex, che si dice di bello? Ti sento in forma~^"; return gg_U("^Ti sta pigliando per il culo...^"); Push, Pull, Transfer, Attack: "Via cavo?"; Chiama: "Sei al telefono con lui, stupido..."; Sorry: "~E de che? Se posso un giorno di questi passo da casa tua, okay?~"; Aiutami:"~Come faccio Alex, tua madre e tua sorella sono peggio di due carabinieri, magari quando vedi che non ci sono fammi uno squillo e ne riparliamo.~"; Fanculo:"~Adesso non fare lo scemo, non mi voglio tirare indietro, solo che... beh te la devi vedere tu con tua madre, io, come gli altri, non posso far nulla per aiutarti!!~"; Listen: "Sembra che a te, dopotutto, quello che sta dicendo Marco non te ne frega niente."; ], Life [; if (~~self.in_casa) return L__M(##Miscellany, 30); WakeOther, ThrowAt, Give, Show: return NonPuoiACreature(noun, self); Kiss: "Tendenze omosessuali?"; Ask, Tell: switch(second) { 'droga', 'cocaina', 'erba', 'lsd', 'acidi', 'acido', 'pasticca', 'spinello', 'eroina', 'alcool', 'sambuca', 'liquore', 'siringa': "~Alex che dici, per un po' di tempo stanne fuori, ascoltami, ti sentirai meglio...~"; 'soldi', 'moneta', 'euro': "~Lo sai che quelli scarseggiano sempre!!!~"; 'scuola': "~Tutti mi chiedono di te, loro sanno che sei ammalato...~"; 'stefania', 'ragazza': "~Non l'ho vista per niente da quel giorno alla festa, se la vedo te lo faccio sapere.~"; 'mamma', 'madre': "~Non non ti preoccupare, so come comportarmi con lei.~"; 'sorella', 'vanessa': "~Tua sorella non la conosco bene, non saprei come prenderla.~"; 'uscire', 'sera', 'serata', 'sere', 'serate', 'discoteca': "~Allora Alex, fatti vedere, dai, che ci spariamo della roba garbata.~^"; !virtuali.... 'papà', 'padre', 'babbo', 'papa': "~Penso che io non sia la persona giusta con cui parlarne, non credi.~"; 'ospedale', 'manicomio', 'strizzacervelli', 'psicologo', 'neurologo', 'dottore': print_ret "~Cos'", (string)e_grave, " sta storia dell'ospedale psichiatrico... tua madre ", (string)e_grave, " pazza.~"; !fine virtuali.... default: switch(random(3)) { 1: "~Ah ehm mhh, si, ho capito...~"; 2: "~Che vuoi che ne sappia io!!!~"; 3: print "~Ok Alex, ho capito, lascia stare...~^"; return gg_U("^Secondo me anche Marco pensa che ormai sei fuori di testa.^"); } } Answer: switch(random(3)) { 1: "~Ah ehm mhh, si, ho capito...~"; 2: "~Che vuoi che ne sappia io!!!~"; 3: print "~Ok Alex, ho capito, lascia stare...~^"; return gg_U("Secondo me anche Marco pensa che ormai sei fuori di testa.^"); } ], Orders [ w i; SommaPunti(C_ESAURITO); if (~~self.in_casa) return L__M(##Miscellany, 30); Kiss: "~Cazzo dici Alex...~^"; Attack: print "~Oh Alex, ma ti sei rintronato il cervello? Non ci penso nemmeno...~"; return gg_U("^Ha centrato in pieno il tuo problema, vero Alex?^"); Pray: "~Alex, adesso sei diventato religioso?~"; Sorry: <>; Aiutami:<>; Fanculo:<>; Tell, Ask: switch(noun) { pAutore: print "~L'"; SetLink(imgAUTORE, "autore"); print_ret " ", (string)e_grave, " ragazzo in gamba.~^"; pRagazza, pMamma, pSorella: <0>>; } <>; Portami, Dammi, Give: switch(noun) { oVirtuale: !scorro tutte le parole digitate for (wn = 1: w ~= -1: w = NextWord()) { !per ogni parola trovo il name matching dell'oggetto virtuale for (i = 0: i < (noun.#name)/WORDSIZE: i++) { if (noun.&name-->i == w) { !trovata, la gestisco con Ask <>; } } } "Marco ti ignora."; !per tutti gli altri oggetti (in scope) rimando ad Ask passando il primo sinonimo dell'oggetto default: <0>>; } default: "~Non dire stronzate Alex.~"; ], has proper animate concealed; Object pVocina "la voce interiore" rStanza with name "voce" "vocina" "interiore", before [; SommaPunti(C_ESAURITO); if (action ~= ##Ask && action ~= ##Tell && action ~= ##Answer && action ~= ##Aiutami && action ~= ##Fanculo) return gg_U("Fidati di me, sono la tua guida pisco-socio-attitudinale. Non aver paura.^"); Aiutami: return gg_U("Non ti preoccupare, non ti lascio, io sono sempre presente, non mi invocare, io mi faccio vivo in tuo aiuto in ogni momento quando ne hai bisogno.^"); Fanculo: return gg_U("Dovrei considerare questo tuo comportamento da idiota? Faccio finta di non aver udito, so come ti senti in questo periodo, tua madre, tua sorella e Stefania che tutto fanno tranne che aiutarti.^"); ], Life [; if (action ~= ##Ask && action ~= ##Tell && action ~= ##Answer) return gg_U("Fidati di me, sono la tua guida pisco-socio-attitudinale. Non aver paura.^"); Ask, Tell: switch(second) { 'droga', 'cocaina', 'erba', 'lsd', 'acidi', 'acido', 'pasticca', 'spinello', 'eroina', 'alcool', 'sambuca', 'liquore', 'siringa': if (IndirectlyContains(rStanza, oeroina)) return gg_U("Tu non ricordi dove l'hai nascosta... io non posso aiutarti.^"); else return gg_U("Adesso ti senti molto meglio, certo con la sambuca non era il massimo...^"); 'soldi', 'moneta', 'euro': return gg_U("Chi non ne vorrebbe tanti.^"); 'stefania', 'ragazza': if (pRagazza.chiamato) return gg_U("Te lo dicevo io, lasciala lasciala, e invece ti sei fatto fregare!!!^"); else return gg_U("La devi lasciare il prima possibile.^"); 'mamma', 'madre': return gg_U("La causa di tutto questo, devi farla fuori appena puoi.^"); 'sorella', 'vanessa': return gg_U("Come tua madre, non sta facendo nulla per tirarti fuori da questa situazione.^"); !virtuali.... 'papà', 'padre', 'babbo', 'papa': return gg_U("L'unica persona che ti ha veramente amato. Peccato per la sua prematura scomparsa.^"); 'ospedale', 'manicomio', 'strizzacervelli', 'psicologo', 'neurologo', 'dottore': return gg_U("Tua madre, tua sorella e Stefania finiranno al manicomio, vero Alex?^"); !fine virtuali.... default: return gg_U("Adesso torna a pensare alle tue care donne!!^"); } Answer: return gg_U("Adesso torna a pensare alle tue care donne!!^"); ], Orders [ w i; Attack: return gg_U("Uno alla volta penseremo a tutti.^"); Aiutami:<>; Fanculo:<>; Tell, Ask: switch(noun) { pAutore: print "~L'"; SetLink(imgAUTORE, "autore"); print_ret " ", (string)e_grave, " ragazzo in gamba.~^"; pRagazza, pMamma, pSorella: <0>>; } <>; Portami, Dammi, Give: switch(noun) { oVirtuale: !scorro tutte le parole digitate for (wn = 1: w ~= -1: w = NextWord()) { !per ogni parola trovo il name matching dell'oggetto virtuale for (i = 0: i < (noun.#name)/WORDSIZE: i++) { if (noun.&name-->i == w) { !trovata, la gestisco con Ask <>; } } } return gg_U("Adesso torna a pensare alle tue care donne!!^"); !per tutti gli altri oggetti (in scope) rimando ad Ask passando il primo sinonimo dell'oggetto default: <0>>; } default: return gg_U("Adesso torna a pensare alle tue care donne!!^"); ], has proper female animate concealed; !***************** Il player (tu) ***************** Object pNewPlayer "tu" rStanza with name "Alex" "me" "te" "stesso" "medesimo", bevuto 0, vomitato 0, sputato 0, sega 0, pisciato 0, before [; Examine: "Diciannovenne, alto 1 m e 70, capelli castano scuro, occhi castani, fai la 5° liceo."; default: "Mi devi aiutare, dobbiamo sbrogliare questa situazione di merda. Io in manicomio non ci voglio andare."; ], capacity 5, !In questo caso la costante MAX_CARRIED non ha effetto quindi ridefinisco la property has concealed animate proper transparent; !!! required !***************** Ebbene si, puoi conversare con l'autore ***************** Object pAutore "Tommaso" rStanza with name "autore" "tommaso" "caldarola", uscire 0, before [; if (action ~= ##Ask && action ~= ##Tell && action ~= ##Answer && action ~= ##Aiutami && action ~= ##Fanculo && action ~= ##Examine) return gg_P("L'obiettivo non sono io.^"); Examine: ShowImg(imgAUTORE); "Visita il sito http://digilander.libero.it/tommyzombie per ulteriori dettagli."; Aiutami: gg_style(style_Preformatted); print "Sii pi", (string)u_grave, " specifico.^"; gg_style(style_Normal); rtrue; Fanculo: switch(self.uscire) { 0: ++self.uscire; return gg_P("Rifallo che ti faccio fuori.^"); 1: gg_P("Parli seriamente? [Rispondi si o no]^^"); if (YesOrNo()) { gg_B("^COMPLIMENTI, HAI FEGATO.^^^[Premi un tasto]"); KeyCharPrimitive(); glk_exit(); } else return gg_P("^Ti sei salvato in corner.^"); } ], Life [; if (action ~= ##Ask && action ~= ##Tell && action ~= ##Answer) return gg_P("Non mi interessa.^"); Ask, Tell: switch(second) { 'calcio', 'pallone', 'sport', 'bari', 'juve', 'juventus', 'inter', 'milan', 'roma', 'lazio', 'parma', 'bologna', 'fiorentina', 'torino': ShowImg(imgBARI); return gg_P("Solo e soltanto forza BARI.^"); 'droga', 'eroina', 'siringa': gg_style(style_Preformatted); print "Questo ", (string)e_grave, " un enigma alla Monkey Island. ", (string)em_grave, " il pi", (string)u_grave, " difficile, ma stando in una sola stanza non impossibile.^"; gg_style(style_Normal); rtrue; 'cocaina': return gg_P("Molto banale questo enigma, trovi tutto l'occorrente facilmente.^"); 'erba', 'spinello': return gg_P("Semplice, non posso dirti nulla.^"); 'lsd', 'acidi', 'acido', 'pasticca': return gg_P("La pasticca la trovi in un posto impensabile, ma molto reale!!!^"); 'alcool', 'sambuca', 'liquore': return gg_P("Ce l'hai davanti agli occhi.^"); 'stefania', 'ragazza': return gg_P("E' una zoccola.^"); 'mamma', 'madre': return gg_P("Una mamma sconsiderata.^"); 'sorella', 'vanessa': return gg_P("Una sorella menefreghista.^"); 'marco', 'amico': return gg_P("Amico... una grossa parola.^"); !virtuali.... 'papà', 'padre', 'babbo', 'papa': return gg_P("Assente.^"); 'ospedale', 'manicomio', 'strizzacervelli', 'psicologo', 'neurologo', 'dottore': return gg_P("Tu finirai al manicomio se continui di questo passo.^"); !fine virtuali.... default: return gg_P("Non mi rompere le scatole, torna a giocare!!^"); } Answer: return gg_P("Adesso torna a giocare!!^"); ], Orders [ w i; Attack: if (noun has animate) return gg_P("Non sono un sicario.^"); return gg_P("Non sono un esaurito come te.^"); Aiutami:<>; Fanculo:<>; Tell, Ask: switch(noun) { pAutore: print "~L'", SetLink(imgAUTORE, "autore"); print_ret " ", (string)e_grave, " un ragazzo in gamba.~^"; pRagazza, pMamma, pSorella: <0>>; } <>; Portami, Dammi, Give: switch(noun) { oVirtuale: !scorro tutte le parole digitate for (wn = 1: w ~= -1: w = NextWord()) { !per ogni parola trovo il name matching dell'oggetto virtuale for (i = 0: i < (noun.#name)/WORDSIZE: i++) { if (noun.&name-->i == w) { !trovata, la gestisco con Ask <>; } } } return gg_P("Adesso torna a giocare!!^"); !per tutti gli altri oggetti (in scope) rimando ad Ask passando il primo sinonimo dell'oggetto default: <0>>; } default: return gg_P("Adesso torna a giocare!!^"); ], has concealed animate proper; !------------------------------------------------------------------------------- ! Entry point !------------------------------------------------------------------------------- [ Initialise; Init = true; !rendo variabile il n.ro di azioni max consentite 333 + [1..333] (max = 666) soglia = random(C_LIMITE); ChangePlayer(pNewPlayer, 0); !contiene la location di inizio !Non visualizzo il titolo la prima volta sulla status bar status_line = 0; DrawStatusLine(); glk_set_window(gg_mainwin); print "^^Ogni riferimento a fatti o persone ", (string)e_grave, " puramente casuale."; print "^^Il gioco potrebbe risultare diseducativo, offensivo e immorale, se pensi che ci", (string)o_grave, " possa ledere la tua morale ti suggerisco di abbandonare.^"; print "^Sei sicuro di voler continuare? >"; if (~~YesOrNo()) { gg_B("^^^ [Premi un tasto per uscire.]^"); glk_exit(); } gg_style(style_Preformatted); print "^^^ - Digita HELP per informazioni^^"; print " - Utenti Windows: utilizzare interprete WinGlulxe versione 1.21 o superiore.^^"; print " - Consigliata risoluzione 1024 x 768 con finestra massimizzata.^^"; print " - Invia una e-mail all'autore con il codice d'uscita al termine del gioco, GRAZIE.^^"; print " - ACCENDI LE CASSE E VAI!!!^^^^"; gg_B("[PREMI UN TASTO PER CONTINUARE]^^^"); KeyCharPrimitive(); PlaySound(sndINTRO, 1, gg_forechan); status_line = 1; DrawStatusLine(); glk_window_clear(gg_mainwin); DrawFrame(); ]; !Se sto portando un oggetto pesante non permetto di prenderne un altro [ GamePreRoutine count obj objPesante; objectloop (obj in player) { if (obj has pesante) { ++count; objPesante = obj; break; } } if (action == ##Take && noun has pesante && count > 0 && noun notin player) { print_ret "Stai gi", (string)a_grave, " portando con te ", (the) objPesante, ", non riusciresti a tenere anche ", (the) noun, "."; } rfalse; ]; [ GamePostRoutine; ShowInv(); rfalse; ]; !Aggiorno l'inventario [ ShowInv obj; !evita errori sul restart/restore if (~~player) return; glk_set_window(gg_rightwin); glk_window_clear(gg_rightwin); gg_B(" INVENTARIO:^^"); objectloop (obj in player) { print " "; glk_image_draw(gg_rightwin, obj.image, imagealign_InlineCenter, 0); ! print " ", (the)obj; } glk_set_window(gg_mainwin); ]; ! ############################## G L U L X S U B ################################## [ InitGlkWindow winrock; switch (winrock) { 0: ! Phase 1: Start of execution ; GG_MAINWIN_ROCK: ! Phase 2: About to set up story window !Come impostare gli stili da programma glk_stylehint_set(wintype_TextBuffer, style_Normal, stylehint_TextColor, $000080); glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_TextColor, $00000000); glk_stylehint_set(wintype_TextBuffer, style_Preformatted, stylehint_TextColor, $008000); glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_TextColor, $00FF0000); glk_stylehint_set(wintype_TextBuffer, style_Subheader, stylehint_TextColor, $00000000); glk_stylehint_set(wintype_TextBuffer, style_Alert, stylehint_TextColor, $00000000); glk_stylehint_set(wintype_TextBuffer, style_Note, stylehint_TextColor, $00000000); glk_stylehint_set(wintype_TextBuffer, style_BlockQuote, stylehint_TextColor, $00000000); glk_stylehint_set(wintype_TextBuffer, style_Input, stylehint_TextColor, $0000FF); !Stile personalizzato 1: blue, indentato di 5, proporzionale glk_stylehint_set(wintype_TextBuffer, style_User1, stylehint_TextColor, $0000FF); glk_stylehint_set(wintype_TextBuffer, style_User1, stylehint_Paraindentation, 5); glk_stylehint_set(wintype_TextBuffer, style_User1, stylehint_Proportional, 0); !Stile personalizzato 2: corsivo marrone glk_stylehint_set(wintype_TextBuffer, style_User2, stylehint_TextColor, $800000); glk_stylehint_set(wintype_TextBuffer, style_User2, stylehint_Oblique, 1); glk_stylehint_set(wintype_TextBuffer, style_User2, stylehint_Weight, 1); ; GG_STATUSWIN_ROCK: ! Phase 3: About to set up status window ; 1: ! Phase 4: After window setup !Inserire qui codice se si vogliono frame dall'inizio... !vari controlli sulle feature supportate dall'interprete gg_GraphicSupport = glk_gestalt(gestalt_Graphics, 0); if (~~gg_GraphicSupport) print "^[Impossibile visualizzare le immagini, utilizza un interprete aggiornato]^^"; gg_HyperlinkSupport = glk_gestalt(gestalt_Hyperlinks, 0); if (~~gg_HyperlinkSupport) print "^[Hyperlink non supportati, utilizza un interprete aggiornato]^^"; gg_MouseInputSupport = glk_gestalt(gestalt_MouseInput, wintype_Graphics); if (~~gg_MouseInputSupport) print "^[Mouse Input non supportati, utilizza un interprete aggiornato]^^"; gg_SoundSupport = glk_gestalt(gestalt_Sound, 0); if (~~gg_SoundSupport) print "^[Impossibile riprodurre file audio, utilizza un interprete aggiornato]^^"; else { !creo i 2 canali audio gg_forechan = glk_schannel_create(GG_FORECHAN_ROCK); if (~~gg_forechan) print "^[Impossibile creare un canale audio, utilizza un interprete aggiornato]^^"; gg_backchan = glk_schannel_create(GG_BACKCHAN_ROCK); if (~~gg_backchan) print "^[Impossibile creare un canale audio, utilizza un interprete aggiornato]^^"; } gg_VolumeSupport = glk_gestalt(gestalt_SoundVolume, 0); if (~~gg_VolumeSupport) print "^[Impossibile modificare il volume, utilizza un interprete aggiornato]^^"; ; GG_QUOTEWIN_ROCK: ! Phase 5: Quote window needed during game ; } rfalse; ! Continue with standard setup ]; !Da implementare sempre se si usano extra window o canali audio [ IdentifyGlkObject phase type ref rock id; if (phase == 0) { ! Zero out references to our objects. gg_rightwin = 0; gg_leftwin = 0; gg_forechan = 0; gg_backchan = 0; return; } !solo per extra window/stream/fileref if (phase == 1) { switch (type) { 0: ! it's a window switch (rock) { GG_LEFTWIN_ROCK: gg_leftwin = ref; GG_RIGHTWIN_ROCK: gg_rightwin = ref; } 1: ! it's a stream ! But we don't create any. 2: ! it's a fileref ! But we don't create any. } return; } !Inserire codice per aggiornare lo stato del gioco (come restart ad es.) if (phase == 2) { ! Iterate through all the existing channels -- there should ! be either none or one -- and identify ours. id = glk_schannel_iterate(0, gg_arguments); while (id) { switch (gg_arguments-->0) { GG_FORECHAN_ROCK: gg_forechan = id; GG_BACKCHAN_ROCK: gg_backchan = id; } id = glk_schannel_iterate(id, gg_arguments); } SetVolume(VOL_ALTO, gg_backchan); SetVolume(VOL_ALTO, gg_forechan); !Se non avessi avuto l'introduzione avrei semplicemente inserito !la chiamata a DrawFrame per la creazione dei frame, invece con l'introduzione !non va bene perché in caso di restart i frame non vanno creati, mentre !vanno creati in caso di restore. !Se Init = true vuol dire che sono in fase di restore if (~~Init) DrawFrame(-1); !aggiorno l'inventario sul carica ShowInv(); } ]; [ HandleGlkEvent ev context abortres newcmd cmdlen; context = 0; !elimina warning switch (ev-->0) { evtype_Redraw, evtype_Arrange: !qui va messa l'immagine corrente ShowImg(curr_img); evtype_SoundNotify: !ev-->2 mi dice l'id della risorsa che ha scatenato l'evento switch(ev-->2) { sndCANE, sndUCCELLI: SetVolume(VOL_ALTO, gg_backchan); gg_style(style_Normal); print "^Che palle sti animali di merda...^"; new_line; !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; sndAEREO, sndELICOT, sndSIRENA, sndTRENO, sndFRENATA: SetVolume(VOL_ALTO, gg_backchan); gg_style(style_Normal); print "^Che palle tutti questi rumori...^"; new_line; !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; !Dopo l'accensione dell'auto faccio scattare la sgommata sndAUTO: PlaySound(sndSGOMMATA, 1, gg_backchan); gg_style(style_Normal); print "^Ma come cazzo guidano sti pazzi...^"; new_line; !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; !Dopo il tuono un po' di pioggia sndTUONO: PlaySound(sndPIOGGIA, 1, gg_backchan, 1); gg_style(style_Normal); print "^Mhhh, inizia a piovere..., beh tanto io non esco!!!^"; new_line; !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; sndPIOGGIA: SetVolume(VOL_ALTO, gg_backchan); gg_style(style_Normal); print "^Ha gi", (string)a_grave, " smesso di piovere! Era solo una nuvola di passaggio.^"; new_line; !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; !Le song dello stereo sndSONG1, sndSONG2, sndSONG3, sndSONG4, sndSONG5, sndSONG6, sndSONG7, sndSONG8: if (ev-->2 == sndSONG8 && (~~oStereo.shuffle)) { oStereo.stato = 0; gg_style(style_Normal); print "^Il CD ", (string)e_grave, " terminato.^"; !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) new_line; return -1; } glk_cancel_line_event(gg_mainwin, 0); if (oStereo.shuffle) newcmd = "shuffle"; else { oStereo.automatico = 1; newcmd = "next"; } cmdlen = PrintAnyToArray(abortres + WORDSIZE, INPUT_BUFFER_LEN - WORDSIZE, newcmd); abortres-->0 = cmdlen; new_line; return 2; !Non hai risposto al telefono sndTELEFONO: pTelefono.stato = 0; gg_style(style_Normal); print "^Il telefono non squilla pi", (string)u_grave, ".^"; if (pRagazza.chiamato) gg_P("^E se Stefania ci avesse ripensato e cercava una riconciliazione?^"); else gg_P("^Ti lamentavi del fatto che Stefania non chiamasse mai, e se era lei al telefono?^"); new_line; !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; !Hai provato a telefonare a Stefania sndCOMPONI: gg_style(style_Normal); print "^Squilla ma non risponde^"; gg_U("^Scemo, hai visto, adesso nemmeno risponde alle tue chiamate.^^"); !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; !E' terminato il pezzo di quando ti sei bucato sndDRUG: gg_style(style_Normal); print "^Adesso mi sento molto meglio...^"; gg_U("^Infatti il tunisino vende dell'ottima eroina!!!^^"); !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; sndHORROR: gg_U("^Caspita, te la sei vista brutta, eh amico! Se lo rivedi al pregiudicato, gliene devi dire quattro a quello stronzo!!!^^"); !per visualizzare il testo del comando in stile input gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; !Dopo il caricamento cozza, lo sputo... sndRACKSMAL: PlaySound(sndSPUTO, 1, gg_backchan, 1); gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; sndSPUTO: PlaySound(random(11) + sndPIOVERE - 1, 1, gg_backchan); gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; !Dopo il caricamento cozza, lo sputo... (secondo tipo) sndRACKBIG1, sndRACKBIG2: PlaySound(sndSPUTOBIG, 1, gg_backchan, 1); gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; sndSPUTOBIG: PlaySound(random(11) + sndPIOVERE - 1, 1, gg_backchan); gg_style(style_Input); !continuo a gestire il comando che il player aveva digitato (anche parzialmente) return -1; sndBEDUINO, sndCHECOSA, sndCOLPITO, sndCORNUTO, sndFARE, sndPICCOLO, sndPUTTANA, sndSALIRE, sndSORD, sndTRIMONE: !inseriti solo per evitare warning !di norma va utilizzata l'istruzione System_file } evtype_MouseInput: !questo mi serve per riabilitare ogni volta il frame a mouse input glk_request_mouse_event(gg_leftwin); glk_cancel_line_event(gg_mainwin, 0); switch(curr_img) { imgAPP: newcmd = "x stanza"; cmdlen = PrintAnyToArray(abortres + WORDSIZE, INPUT_BUFFER_LEN - WORDSIZE, newcmd); abortres-->0 = cmdlen; new_line; return 2; } evtype_Hyperlink: switch(ev-->2) { imgBARA: ShowImg(imgBARA); PlaySound(sndMORT, 7, gg_forechan); gg_style(style_Normal); print "^Proprio come il poster, ti senti un CADAVER CORPSE!!!^"; gg_style(style_Input); new_line; return -1; imgAUTORE: ShowImg(imgAUTORE); gg_P("^Ahh, qui stavo pensando proprio al gioco... il giorno del mio 32-esimo compleanno.^"); gg_style(style_Input); new_line; return -1; } } ]; [ DrawFrame par; !se par = -1 vuol dire che ho eseguito un restart if (par == -1) { glk_window_close(gg_leftwin); glk_window_close(gg_rightwin); gg_leftwin = 0; gg_rightwin = 0; glk_window_close(gg_statuswin); gg_statuswin = 0; return; } !creo frame di destra (conterrà testo per inventario) if (~~gg_rightwin) gg_rightwin = glk_window_open(gg_mainwin, (winmethod_Above+winmethod_Fixed), 17, wintype_TextBuffer, GG_RIGHTWIN_ROCK); ! e frame di sinistra (conterrà solo immagini) if (~~gg_leftwin && gg_rightwin) gg_leftwin = glk_window_open(gg_rightwin, (winmethod_Left+winmethod_Fixed), 440, wintype_Graphics, GG_LEFTWIN_ROCK); !abilito il mouse input sul frame glk_request_mouse_event(gg_leftwin); ]; [ ShowImg id wid hgt res; if ((~~id) || (~~gg_GraphicSupport)) return; if (gg_leftwin) { !leggo le dimensioni del frame di sinistra glk_window_get_size(gg_leftwin, gg_arguments, gg_arguments + WORDSIZE); wid = gg_arguments-->0; hgt = gg_arguments-->1; !imposto sfondo nero glk_window_fill_rect(gg_leftwin, $00000000, 0, 0, wid, hgt); !visualizzo immagine a partire dall'angolo di coordinate (0,0) ! print "^SHOWIMG id: ", id, "^"; res = glk_image_draw(gg_leftwin, id, 0, 0); } curr_img = id; if (~~res) "^[Impossibile visualizzare l'immagine [", id, "].^"; ]; [ PlaySound id num chan evt res; if ((~~id) || (~~gg_SoundSupport)) return; !se dovessi dimenticare il parametro num (dato che mi è capitato) if (~~num) num = 1; !canale di default (gg_backchan), gg_forechan utilizzato solo per lo stereo if (~~chan) chan = gg_backchan; !solo x debug ! print "^PLAYSOUND - id: ", id, " num: ", num, " chan: ", chan, " evt: ", evt, "^"; if (evt) res = glk_schannel_play_ext(chan, id, num, evtype_SoundNotify); !mi serve il notify event else res = glk_schannel_play_ext(chan, id, num); !non mi serve il notify event if (~~res) "^[Impossibile ascoltare la risorsa audio [", id, "].^"; ]; [ StopPlay chan; if (~~chan) chan = gg_backchan; ! print "STOPPLAY chan: ", chan, "^"; glk_schannel_stop(chan); ]; [ SetVolume val chan; if (~~gg_VolumeSupport) return; if (~~chan) chan = gg_backchan; ! print "SET VOLUME val: ", val, " - chan: ", chan, "^"; if (val > 0) glk_schannel_set_volume(chan, val * 16384); ]; [ SetLink id txt; if ((~~id) || (~~gg_HyperlinkSupport)) return; !va eseguito ogni volta per abilitare l'hyperlink glk_request_hyperlink_event(gg_mainwin); glk_set_hyperlink(id); PrintAnything(txt); glk_set_hyperlink(0); ]; [ gg_style sty; switch (sty) { style_Normal: glk_set_style(style_Normal); style_Emphasized: glk_set_style(style_Emphasized); style_Note: glk_set_style(style_User2); style_Preformatted: glk_set_style(style_Preformatted); style_Header: glk_set_style(style_Header); style_Subheader: glk_set_style(style_Subheader); style_Input: glk_set_style(style_Input); style_User1: glk_set_style(style_User1); style_User2: glk_set_style(style_User2); } return sty; ]; !Le routine commentate non vengono utilizzate (non essendo in un file include non disabilito i msg di warning) [ gg_B txt; gg_style(style_Emphasized); print (string) txt; gg_style(style_Normal); ]; !Qui dovrebbe starci style_Note al posto di style_User2, ma dato che l'ho personalizzato... [ gg_U txt; gg_style(style_User2); print (string) txt; gg_style(style_Normal); ]; [ gg_P txt; gg_style(style_Preformatted); print (string) txt; gg_style(style_Normal); ]; ![ gg_H txt; gg_style(style_Header); print (string) txt; gg_style(style_Normal); ]; ![ gg_S txt; gg_style(style_Subheader); print (string) txt; gg_style(style_Normal); ]; ![ gg_I txt; gg_style(style_Input); print (string) txt; gg_style(style_Normal); ]; ![ gg_1 txt; gg_style(style_User1); print (string) txt; gg_style(style_Normal); ]; ![ gg_2 txt; gg_style(style_User2); print (string) txt; gg_style(style_Normal); ]; ! ############################## INFORM S U B ################################## [ Sfogare obj; gg_style(style_Note); print "^Non ", (string)e_grave, " con ", (the)obj, " che ti devi sfogare, ma con chi ti sta intorno, sono loro gli artefici di questa tua maledetta situazione.^"; gg_style(style_Normal); rtrue; ]; [ NonInCasa; if (action ~= ##Examine) print_ret "Silenzio assoluto, evidentemente non ", (string)e_grave, " in casa."; else print_ret "Non ", (string)e_grave, " in casa."; ]; [ NonPuoiACreature obj persona; print "Fino a quando sei chiuso qui dentro non puoi "; PrintInfinitive(); print_ret " ", (the)obj, " a ", (name)persona, "."; ]; [ OggettoPiccolo obj; if (obj ~= oEroina && obj ~= oTaglierino && obj ~= oChiave && obj ~= oPila && obj ~= oPenna && obj ~= oVetri && obj ~= oPasticca && obj ~= oPallino && obj ~= oLampadina && obj ~= oFoglio && obj ~= oCocaina) "Non entrerebbe mai."; rfalse; ]; [ ElencaOggetti obj; WriteListFrom(child(obj), ENGLISH_BIT + CONCEAL_BIT); ]; !Torna 1 se il player si trova su un oggetto che è vicino all'oggetto dest [ VicinoSu dest obj; objectloop (obj in rStanza) { if (player in obj && obj has conzona && obj.zona == dest) return 1; } return 0; ]; !JumpOver [ SaltaSu obj; if (player in obj) print_ret "Ti trovi gi", (string)a_grave, " su ", (the) obj, "."; print "Hai perso quello smalto che avevi fino a qualche anno fa.^"; return gg_U("^Altro che atleta, non saresti buono nemmeno a scavarti una fossa.^"); ]; !In seguito a PutOn (testo = " sul" oppure " nel" ![ RiceviOggetto source dest testo; ! if (dest has pesante) ! print_ret "Non puoi mettere ", (the) dest, (string)testo, " ", source, "."; ! rfalse; !]; !PushDir [ SpostaOggetto source dest; switch(dest) { !caso particolare (orologio considerato come porta) oOrologio: if (source.zona == oPorta) print_ret (The) source, " si trova gi", (string)a_grave, " sotto ", (the)dest, "."; source.zona = oPorta; print_ret "Sposti ", (the) source, " vicino ", (the)oPorta, "."; oCoppa: !a differenza dell'orologio la coppa non è fissa, quindi questo ha senso solo se si trova sulla libreria if (oCoppa in oLibreria) { if (source.zona == oLibreria) print_ret (The) source, " si trova gi", (string)a_grave, " sotto ", (the)dest, "."; source.zona = oLibreria; print_ret "Sposti ", (the) source, " vicino ", (the)oLibreria, "."; } "Non servirebbe a nulla."; oPorta, oFinestra, oLetto, oScrivania, oLibreria: if (source.zona == dest) print_ret (The) source, " si trova gi", (string)a_grave, " vicino ", (the)dest, "."; source.zona = dest; print_ret "Sposti ", (the) source, " vicino ", (the)dest, "."; oLampadario: if (source.zona == dest) print_ret (The) source, " si trova gi", (string)a_grave, " sotto ", (the)dest, "."; source.zona = dest; print_ret "Sposti ", (the) source, " sotto ", (the)dest, "."; default: "Pensi che spostandol", (genderandnumber)source, " in quel posto l'arredamento della stanza diventi uno schifo."; } ]; !Azione su obj1 con obj2 [ AzioneObjCon obj1 obj2; if ((~~obj2) && (oAccendino notin player)) "Con che cosa?"; if (obj2 ~= 0 && obj2 ~= oAccendino) { print "~Calma, che cosa sto combinando.~ Sorridi al pensiero delle idee strampalate che ti vengono in mente.^"; gg_style(style_Note); print "^Eh eh bella questa, "; PrintInfinitive(); print " ", (the) obj1, " con ", (the) obj2, ". Il fatto ", (string)e_grave, " che il tuo cervello ", (string)e_grave, " partito! Ti manca qualche rotella!!^"; gg_style(style_Normal); rtrue; } SommaPunti(C_ESAURITO); print "Potresti provocare un incendio, e allora s", (string)i_grave, " che sarebbe la fine.^"; gg_style(style_Note); print "^Ma tu vuoi proprio quello vero? Ci sono tante altre soluzioni indolori e immediate!!!^"; gg_style(style_Normal); rtrue; ]; [ AccendinoRottoSub; if (oAccendino.rotto) print_ret (string)em_grave, " rotto.^"; ]; !Buio nella stanza... (sera con la luce spenta) [ IsBuio; if ((IsSera()) && oInterruttore hasnt on) return 1; return 0; ]; !1 se è sera [ IsSera; if (sline2 > C_SERA) return 1; return 0; ]; !Torna 1 se l'oggetto Cont contiene almeno un oggetto con attributo Attr [ ContieneObjAttr Cont Attr obj; objectloop (obj in Cont) { if (obj has Attr) return 1; } return 0; ]; !ti suicidi dalla finestra [ MuoriFinestraSub; deadflag = 1; print "MAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... In pochi secondi vedi sfrecciare dinnanzi a te la tua breve vita.^^"; ShowImg(imgBARA); glk_image_draw(gg_mainwin, imgSPLATTER, imagealign_MarginLeft, 0); print "^^Lo schianto ti sar", (string)a_grave, " fatale.^"; print_ret "Morirai sul colpo, e dato^ il tipo di vita che conducevi^ forse ", (string)e_grave, " la miglior soluzione!^"; ]; !Fine gioco perchè hai lanciato qualcosa dalla finestra. [ LancioOggettiSub; deadflag = 1; !mettere apertura porta...???? print "^Ecco il brusio che sentivi, era la fottuta madama...^ Qualcuno apre la porta dall'esterno, sono gli sbirri. Vedi tua madre, davanti alla porta, col suo ghigno malefico, non intuisci, da piccolo ", (string)e_grave, " stato sempre cos", (string)i_grave, ", se sia triste o felice per quello che hai combinato. Non opponi resistenza, ti ammanettano e ti portano via.^"; gg_style(style_Note); print "^Bastardi che non sono altro, hai semplicemente lanciato ", (the) oLancioDaFinestra.oggetto, " dalla finestra. Comunque alla fine quello che conta ", (string)e_grave, " che tu sei uscito ancora una volta sconfitto. Tua madre li ha fatti entrare ai bastardi.^^"; gg_style(style_Normal); print_ret "^^Qualche mese pi", (string)u_grave, " tardi morirari suicidato nell'ospedale psichiatrico della tua citt", (string)a_grave, ".^^"; ]; [ SommaPunti pt; punti = punti + pt; ]; [ IsSuicidio; if (punti > C_SUICIDIO) return 1; else return 0; ]; !invocata dopo un certo n.ro di azioni [ FineAzioniSub; ! punti = 1; if (punti == 0) { print "^^Complimenti, sei stato cos", (string) i_grave, " forte da non lasciarti tentare, hai sconfitto il nemico principale, la tua voce interiore, quella parte di te che in ogni momento ti tentava e che cercava di farti vedere le cose dal lato distorto della vita, approffittando della tua crisi psico-fisica. Ti rimetterai in sesto dopo una trentina di giorni e tornerai quello di sempre. Non vedrai mai pi", (string)u_grave, " Stefania.^^"; } else if (IsSuicidio()) { print "^^Il tredicesimo giorno di clausura desisterai e lascerai che tua madre ti dia in pasto agli strizzacervelli. Dopo la prigionia volontaria la tua vita non sar", (string) a_grave, " pi", (string) u_grave, " quella di prima.^^"; } else if (~~IsSuicidio()) { print "^^Vista la situazione in cui ti sei venuto a trovare, mostrerai bandiera bianca ma ti toglierai la vita qualche mese pi", (string) u_grave, " tardi dopo che tua madre avr", (string)a_grave, " firmato il tuo ricovero in un ospedale psichiatrico.^^"; } deadflag = 1; gFineAzioni = 1; rtrue; ]; !test ![ InScope; ! if (scope_reason == PARSING_REASON) print "PARSING_REASON - noun: ", (the)noun, " - second: ", (the)second, "^"; ! if (scope_reason == TALKING_REASON) print "TALKING_REASON - Actor: ", (name) actor, ".^"; ! rfalse; !]; [ myScenicError; switch(random(2)) { 1: "E' solo scenografia."; 2: "Vuoi manipolare la mia scenografia?"; } ]; Constant ScenicError myScenicError; [ SoffittoSub; if (IsSuicidio()) { print "Come un rimbambito rimani a fissare il soffitto... sembra come se il lampadario ruotasse.^"; gg_style(style_Note); print "^Stupido, guarda che ", (string)e_grave, " il tuo cranio che gira, dopo quello che ti sei frecato.^"; gg_style(style_Normal); rtrue; } else { print "Rimani per qualche secondo a fissare il soffitto. ^"; if (~~pRagazza.chiamato) { print "Ti sembra di vedere Stefania, la tua ragazza, al di l", (string) a_grave, " del lampadario, come se ne ruotasse intorno.^"; gg_U("^Stupido, tu vedi soltanto quello che vuoi vedere... Tu sei qui e magari lei fa la puttanella in questo momento!^"); } else { print "Stefania, perch", (string)e_acuta, " mi hai lasciato, io volevo solo starmene per conto proprio qualche giorno!^"; gg_style(style_Note); print "^Qualche giorno? Ma se sono passati gi", (string)a_grave, " dieci giorni, e poi fidati di me, meglio cos", (string)i_grave, ", la sgualdrinella non ti meritava affatto!^"; gg_style(style_Normal); } rtrue; } ]; [ DrawStatusLine width; ! If we have no status window, we must not try to redraw it. if (~~gg_statuswin) return; ! If there is no player location, we shouldn't try either. if (location == nothing || parent(player) == nothing) return; glk($002F, gg_statuswin); ! set_window StatusLineHeight(gg_statuswin_size); glk($0025, gg_statuswin, gg_arguments, gg_arguments+4); ! window_get_size width = gg_arguments-->0; glk($002A, gg_statuswin); ! window_clear if (status_line) { glk($002B, gg_statuswin, 1, 0); ! window_move_cursor print "La tua cameretta"; } new_line; glk($002F, gg_mainwin); ! set_window ]; ! ############################## S U B ################################## !########################## H E L P S E C T I O N ############################### [ HelpMenu; glk_window_clear(gg_mainwin); ! questo è il titolo della schermata di aiuto if (menu_item==0) { item_name = "SCHIZO - Escape to the void"; return 6; } ! questi sono i vari argomenti if (menu_item==1) { item_name = "Autore"; } if (menu_item==2) { item_name = "Inform e Glulx"; } if (menu_item==3) { item_name = "Comandi per luoghi, oggetti e personaggi"; } if (menu_item==4) { item_name = "Per non vedenti"; } if (menu_item==5) { item_name = "Credits"; } if (menu_item==6) { item_name = "Build History"; } ]; [ HelpInfo; glk_window_clear(gg_mainwin); new_line; if (menu_item == 1) { ShowImg(imgAUTORE); gg_style(style_Preformatted); print "^Ben ritrovati giocatori e giocatrici a ~SCHIZO - Escape to the void~, il mio terzo lavoro. Ricordo che le mie due precendenti avventure ~Uno zombie a Deadville~ e ~OLD WEST Episodio I: Pecos Town~ sono scaricabili dal mio sito "; gg_B("http://digilander.libero.it/tommyzombie"); gg_P(" o dal sito dell'Interactive Fiction Italia "); gg_B("http://www.ifitalia.cjb.net"); gg_style(style_Preformatted); print "^^~SCHIZO - Escape to the void~, ", (string)e_grave, " stata scritta in inform-glulx, pertanto godetevi il supporto di audio, grafica, eventi, hyperlink e mouseclick.^ La storia non presenta difficolt", (string)a_grave, " insormontabili, anche perch", (string)e_acuta, " il tutto ", (string)e_grave, " ~girato~ in una sola stanza.^^ Buon divertimento e arrivederci alla prossima (OLD WEST Episodio II).^^"; gg_style(style_Normal); gg_P("Autore: "); gg_B("Tommaso Caldarola"); gg_P(" aka "); gg_B("tomb^"); gg_P("Mail: "); gg_B("t.caldarola@@64libero.it^"); gg_P("Homepage: "); gg_B("http://digilander.libero.it/tommyzombie^"); gg_P("Bitonto (Bari) "); gg_B("24 Aprile 2002 - 24 Luglio 2002^^"); } if (menu_item == 2) { gg_style(style_Preformatted); print "^Questo gioco ", (string)e_grave, " stato scritto in "; gg_B("inform-glulx"); gg_P(". Per maggiori informazioni riguardanti Inform visitate "); gg_B("http://www.inform-fiction.org/"); gg_P(" mentre per Glulx "); gg_B("http://www.eblong.com/zarf/glulx/^"); gg_P("Inoltre, per l'adattamento alla lingua italiana ho utilizzato la libreria "); gg_B("InfIt v. 1.0 (http://inform.composizioni.com/) "); gg_P("scritta da Giovanni Riccardi e adattata a "); gg_B("Glulx "); gg_P("dal sottoscritto.^"); gg_style(style_Preformatted); print "Al momento del rilascio non ", (string)e_grave, " stato concordato ancora nulla per quanto riguarda la libreria italiana per inform-glulx, pertanto vi inviterei a non richiedermi la suddetta libreria prima di un accordo con Giovanni Riccardi per un'eventuale violazione di copyright di InfIt.^^ Per informazioni riguardanti l'Interactive Fiction Italia visitate il sito "; gg_B("http://digilander.libero.it/ifitalia^^"); } if (menu_item == 3) { gg_style(style_Preformatted); print "^Per quanto riguarda i luoghi non c'", (string)e_grave, " molto da dire essendo una One Room Game.^ La descrizione della stanza ti viene fornita attraverso il comando >guarda o semplicemente >l (elle), non ", (string)e_grave, " detto, tuttavia, che questa sia sempre una descrizione completa. Alcuni degli oggetti menzionati nella descrizione possono essere indagati ulteriormente con il comando ~esamina~ (x), essere manipolati, presi, mangiati, usati come supporto, ecc. Naturalmente non tutti gli oggetti presenti sono sempre visibili, e in questo caso la loro presenza va dedotta e poi analizzata ulteriormente.^^ I comandi per gestire le partite sono: ^>salva [salva la partita] ^>carica [carica una partita salvata] ^>annulla [annulla l'ultima azione (se supportata dall'interprete] ^>ricomincia [ferma la partita in corso e riparte da capo]^^ Le tue azioni vanno comunicate in seconda persona.^^ Ecco alcuni esempi validi: ^>esamina la scatola ^>prendi libro (notare che l'articolo pu", (string)o_grave, " essere omesso) ^>lascia libro ^>nord ^^Alcune abbreviazioni importanti sono: ^esamina x (eXamine) ^guarda l (Look) ^aspetta z ^^Come si interagisce con i personaggi.^ ^Per chiedere qualcosa a un personaggio, la sintassi necessaria ", (string)e_grave, ": ^>chiedi/parla a(l/la/lo) [Personaggio] di [argomento] oppure ^poniamo, ad esempio, che tu voglia ottenere da un personaggio di nome Marco informazioni su Fantascienza: ^^>parla a Marco di Fantascienza ^^oppure ^^>chiedi a Marco di Fantascienza ^^Nel caso, invece, dovesse tornar utile rispondere, la sintassi ", (string)e_grave, ": ^>rispondi [parola] a [Personaggio] ^Esempio: ^>rispondi si a Marco ^^Se si intende chiedere un oggetto particolare ad una persona: ^^>chiedi soldi a Ciccio ^^infine, ", (string)e_grave, " anche possibile impartire ordini, del tipo: ^^>Antonio, prendi la sedia ^^oppure ^^>Mamma, parla a pap", (string)a_grave, " di nonno^^"; gg_style(style_Normal); } if (menu_item == 4) { gg_style(style_Preformatted); print "^Informazioni per i non vedenti.^^ Dalla versione 1.20 di WinGlulxe, ", (string)e_grave, " possibile utilizzare Microsoft's Speech Engine API 4.0 per la sintesi vocale. Microsoft Speech Engine pu", (string)o_grave, " essere scaricato dal sito Microsoft al seguente link: "; gg_B("http://www.microsoft.com/downloads/release.asp?ReleaseID=26299^"); gg_style(style_Preformatted); print "Scegliete SAPI4SDKSUITE.exe (circa 40MB).^ Dopo averlo installato, lanciate WinGlulxe, andate sulla maschera delle opzioni (alla voce Glk/Options) e all'etichetta General troverete un pulsante che vi permetter", (string)a_grave, " di scegliere il tipo di voce da utilizzare per la sintesi vocale.^^"; gg_style(style_Normal); } if (menu_item == 5) { gg_P("^Doverosi ringraziaemti a:^^ Mia moglie Sara e la gigietta in arrivo^ Graham Nelson per "); glk_image_draw(gg_mainwin, imgINFORM, imagealign_InlineCenter, 0); gg_P(" e Andrew Plotkin per Glulx "); glk_image_draw(gg_mainwin, imgGLULX, imagealign_InlineCenter, 0); gg_P("^ David Kinder per Windows Glk e per il supporto datomi durante lo sviluppo^ John 'katre' Cater per infglk.h (glk wrapper)^ Adam Cadre per gli esempi di giochi in Inform-Glulx con relativa documentazione (GULL)^ L. Ross Raszewski per il blorb packager^ Olivier Lapicque per Modplug Tracker^ Giovanni Riccardi per InfIt^ Claudio Todeschini per la pubblicazione su TGM^ Francesco Barbieri per l'immagine della stanza^ Marco Saccone per il testing^ ^"); gg_style(style_Emphasized); print "^Schizo ", (string)e_grave, " dedicata a Walter (R.i.p. 1975 - 2001)^^"; gg_style(style_Normal); } if (menu_item == 6) { gg_style(style_Preformatted); print "^Questa volta, pensando, erroneamente, alla brevit", (string)a_grave, " della storia, avevo deciso di tenere traccia dello sviluppo:^^ 15/04/2002 - (idea) 04/06/2002 - (libreria) 03/07/2002 - (NPC)^ 24/04/2002 - (intro) 05/06/2002 - (TV) 04/07/2002 - (NPC)^ 26/04/2002 - (stanza) 10/06/2002 - (armadio) 05/07/2002 - (NPC)^ 30/04/2002 - (stanza) 12/06/2002 - (armadio) 09/07/2002 - (NPC)^ 10/05/2002 - (bozza storia) 13/06/2002 - (player) 10/07/2002 - (NPC)^ 16/05/2002 - (porta) 17/06/2002 - (divano) 11/07/2002 - (NPC)^ 20/05/2002 - (porta) 18/06/2002 - (pianta) 12/07/2002 - (GLULX)^ 21/05/2002 - (finestra) 20/06/2002 - (NPC) 15/07/2002 - (GLULX)^ 22/05/2002 - (scrivania) 24/06/2002 - (NPC) 16/07/2002 - (help)^ 23/05/2002 - (scrivania) 25/06/2002 - (GLULX) 17/07/2002 - (inventario)^ 24/05/2002 - (scrivania) 26/06/2002 - (GLULX) 20/07/2002 - (GLULX)^ 27/05/2002 - (scrivania) 27/06/2002 - (GLULX)^ 29/05/2002 - (letto) 28/06/2002 - (GLULX)^ 31/05/2002 - (orologio) 01/07/2002 - (GLULX)^ 03/06/2002 - (quadri) 02/07/2002 - (NPC)^^"; gg_style(style_Normal); } ]; [HelpSub; gg_statuswin = 0; DoMenu("Informazioni generali:^ ^ 1 - L'autore ^ 2 - Inform e Glulx ^ 3 - Comandi per luoghi, oggetti e personaggi ^ 4 - Note per i non vedenti ^ 5 - Credits ^ 6 - Build History^", HelpMenu, HelpInfo); ]; ! ########################## F I N E H E L P ############################### ! Include ------------------------------------------------------ Include "scenic"; Include "italiang"; ! ########################## V E R B I ############################### [ UseSub; "Usa il cervello piuttosto."; ]; [ TagliatiSub; SommaPunti(C_VERBO); if (~~noun) "E come?"; if (noun == oVetro) "Non credi che dovresti romperlo prima?"; if (noun ~= oVetri && noun ~= oTaglierino) "Non riusciresti a tagliare nemmeno la carta con ", (the) noun, "."; return gg_U("Non lo fare scemo, scegliti una morte meno sofferente!!!^"); ]; [ SuonaSub; if ((~~noun) && (oChitarra notin player)) "Che cosa?"; if (((~~noun) && (oChitarra in player)) || (noun == oChitarra)) "Non hai mai imparato."; print "Ma dai, vorresti suonare veramente ", (the)noun, "?^"; gg_style(style_Note); print "^Io piuttosto te le suonerei, visto il tuo alto livello di stupidit", (string)a_grave, ".^"; gg_style(style_Normal); rtrue; ]; [ ChiamaSub; "Non ti sembra una buona idea chiamare in questo momento ", (name) noun, "."; ]; [ ScopaSub; !gestirlo direttamente sugli NPC (mamma e sorella) SommaPunti(C_ESAURITO); if (~~noun) "E chi sarebbe la sfortunata?"; "Sei arrapato per caso? Pensa al bricolage."; ]; [ ImpiccatiSub; SommaPunti(C_VERBO); if (oLenzuola hasnt general) "Hai bisogno di qualcosa a cui legare il tuo bel collo."; if (~~VicinoSu(oLampadario)) "Ok, hai legato le lenzuola, adesso devi solo salire su qualcosa al posto giusto..."; ShowImg(imgBARA); deadflag = 1; print "Con un colpo di reni ti sposti in avanti... TRAAAKKK... senti il lampadario cedere sotto il tuo peso... speri che non regga...^"; gg_style(style_Note); print "^Sei stato bravissimo, ormai la tua vigliaccheria aveva raggiunto il top, l'unica salvezza sarebbe stata la morte e cos", (string)i_grave, " ", (string)e_grave, " stato. Tua madre, tua sorella e la tua Stefania hanno vinto.^"; gg_style(style_Note); rtrue; ]; [ AmmazzatiSub; SommaPunti(C_VERBO); !se sei sulla finestra muori lanciandoti... if (player in oFinestra) <>; if (~~IsSuicidio()) { print "Ma che razza di pensieri ti vengono in mente...^"; gg_U("^La zoccola di tua madre ha ragione quando dice che sei pazzo!!!^"); } else { print "Hai tanta voglia di farla finita!! Ma il coraggio ti manca!!^"; gg_style(style_Note); print "^La verit", (string)a_grave, " ", (string)e_grave, " che sei un codardo! Fai vedere chi sei veramente!!^"; gg_style(style_Normal); rtrue; } ]; [ SparatiSub; SommaPunti(C_VERBO); print "Non hai un'arma da fuoco; comunque ci sono diversi modi per togliersi davanti alle scatole.^"; gg_U("^E secondo me faresti anche un gran piacere alla troia di tua madre e a quella sgualdrina di Stefania.^"); ]; [ AffacciatiSub; if (noun ~= oFinestra && noun ~= 0) "Mhh, e magari vorresti uscire dal muro..."; if (oFinestra hasnt open) { give oFinestra open; print "Apri la finestra, ti sporgi in avanti e dai un rapido sguardo panoramico a destra e sinistra. "; } else print "Ti affacci alla finestra, l'aria ", (string)e_grave, " abbastanza fresca, i tuoi polmoni ne sono grati!! "; if (~~IsSera()) print (string)em_grave, " ancora giorno, "; else print "Fuori ", (string)e_grave, " buio, "; if (~~IsSuicidio()) { if (~~IsSera()) print "sembra una bella giornata.^"; else print "sembra una bella serata.^"; gg_U("^Mhh, non direi proprio, so io di che cosa hai bisogno tu!"); } else { print "a momenti ti viene un capogiro.^"; gg_style(style_Note); print "^Perch", (string)e_acuta, " non fai un bel salto e la finiamo di girare questa commedia?"; gg_style(style_Normal); } new_line; ]; [ LanciatiSub; if (~~noun) "Da dove?"; if (player in oFinestra) <>; if (noun == oFinestra) { print "Dovresti salirci prima.^"; return gg_U("^Si, vediamo se sei un vero uomo... ricordi, lo ripetevi spesso alla tua Stefania e a tua madre.^"); } print "Ti vien voglia di lanciarti da qualcosa, ti senti un po' esaltato.^"; return gg_U("^Sbaglio o al tuo cervello manca qualche rotella? Se vuoi puoi farlo dalla finestra, prova questa sensazione!!^"); ]; [ ScriviSub; if (~~second) "Con le mani?"; if (second ~= oPenna) print_ret "Non puoi scrivere ", (the) noun, " con ", (the) second, "."; if (oFoglio.scritto) print_ret "Non hai pi", (string)u_grave, " voglia di scrivere."; ++oFoglio.scritto; oFoglio.image = imgFOGLIO2; ShowInv(); if (player in oSedia) print "Seduto comodamente alla sedia "; else print "Ti siedi comodamente alla sedia e "; print "decidi di scrivere una bella lettera alla tua cara Stefania, dicendole che al pi", (string)u_grave, " presto ritornerai alla tua vita e che non la abbandonerai mai pi", (string)u_grave, ". Questo ", (string)e_grave, " quello che pensi, ma stranamente la tua mano ", (string)e_grave, " guidata da un'altra mente, e quello che viene fuori ", (string)e_grave, " un autentico dettato fatto di odio e disprezzo!!!^"; gg_style(style_Note); print "^Scemo, credevi che ti lasciassi soccombere cos", (string)i_grave, " facilmente dalla tua sgualdrinella, lei usa l'amore per distuggerti, se ti amasse per davvero sarebbe gi", (string)a_grave, " venuta a trovarti.^"; gg_style(style_Normal); move player to rStanza; print "^Ti alzi nervosamente e inizi a girare per la stanza, ripetendo a te stesso (auto convinzione?) che "; if (pRagazza.chiamato) print_ret " Stefania in effetti non si ", (string)e_grave, " fatta sentire per niente."; else print_ret " la puttanella in effetti alla prima occassione ti ha scaricato."; ]; [ LeccaSub; if (~~noun) "Che cosa?"; if (noun ~= oPila) "Lascia perdere..."; print_ret "Avvicini, con un pizzico di timore, la lingua alla pila, senti un leggero solletico, evidentemente ", (string)e_grave, " carica."; ]; [ MasturbatiSub; SommaPunti(C_ESAURITO); if (player.sega) "Non hai proprio voglia adesso."; ++player.sega; "Inizi a pensare a Stefania, ma subito il suo viso scompare dalla tua mente, ruoti su te stesso cercando un poster, ricordavi di avere qualche poster hard da qualche parte, ma niente, la stanchezza psico-fisica non ti permette di continuare; abbandoni ogni idea..."; ]; [ BucatiSub; SommaPunti(C_VERBO); if (oSiringa notin player) "Hai bisogno di una spada per bucarti."; if (oSiringa.rotta) "Non puoi con una siringa rotta."; if (~~oEroina.sciolta) "Per bucarti ti serve eroina e dell'acqua distillata."; SommaPunti(C_EROINA); remove oEroina; ShowInv(); move player to oLetto; codice->4 = 1; ShowImg(imgEROINA); PlaySound(sndDRUG, 1, gg_forechan, 1); print "Prendi la siringa, controlli che l'ago non sia otturato, tiri l'eroina dalla coppa, ti massaggi il braccio sinistro all'altezza del gomito, poi senza indulgiare infili l'ago nella vena, con calma inietti pian pianino l'eroina, ti senti molto meglio... senti che inizia a circolare nel tuo sangue!!! Ti rilassi sul letto e attendi che la roba faccia il suo corso...^"; gg_style(style_Note); print "^E tu che ripetevi a te stesso che quella volta in villa sarebbe stata l'ultima, che non ne avevi bisogno, che la tua non era tossicodipendenza!!!! Tutte balle, e lo sapevi...^ Per", (string)o_grave, " alla fine sono contento, quando vuoi riesci a farti valere e ad ottenere quello che ti sei prefissato, ora ti senti come il ragazzo pi", (string)u_grave, " forte di questo mondo, puoi finalmente competere alla grande con la troia di Stefania, la stronza di tua sorella e l'isterica di tua madre!!!^^^^^^^^"; gg_style(style_Normal); KeyCharPrimitive(); ShowImg(imgAPP); rtrue; ]; [ FumaSub; SommaPunti(C_VERBO); if ((~~noun) && oErba notin player) "Ti manca la materia prima."; if ((~~noun) && oErba in player) jump Smoke; if (noun == oEroina) "Quella la preferisci nelle vene."; if (noun == oCocaina) "Quella la preferisci sniffare."; if (noun ~= oErba) print_ret "Tu stai dando proprio di matto se pensi di voler fumare ", (the)noun, "."; .Smoke; if (oFoglio notin player) "Ti serve la cartina."; if (oAccendino notin player) "Ti serve l'accendino."; SommaPunti(C_ERBA); remove oFoglio; remove oErba; ShowInv(); codice->1 = 1; ShowImg(imgVETRATA); PlaySound(sndERBA, 1, gg_forechan); print "Prepari con accuratezza la canna utilizzando il foglio di carta, non sar", (string)a_grave, " il massimo ma in mancanza d'altro ti accontenti, e ti godi questa bella canna!!!! Ti rilassi... inizi a fantasticare e a pensare al fatto che con tutte queste canne i tuoi polmoni li vedi al museo... imbalsamati!!!^Sar", (string)a_grave, " un caso che ogni tuo pensiero porta alla "; SetLink(imgBARA, "morte"); print "!!^"; gg_style(style_Note); print "^Si mio caro, che bello, come godo... ora mi sento benissimo!!! E tu non fai altro che lamentarti con tua madre, con tua sorella e la tua "; if (pRagazza.chiamato) print "ex"; else print "ragazza"; print ", pensa alle cose belle!!! Manda a fanculo tutti, fregatene e fumaci sopra!!^"; gg_style(style_Normal); "^Ti senti completamente sballato..."; ]; [ SniffaSub; SommaPunti(C_VERBO); if ((~~noun) && oCocaina notin player && oEroina notin player) "Che cosa?"; if (((~~noun) && oCocaina notin player && oEroina in player) || noun == oEroina) "L'eroina la preferisci iniettarla nel sangue."; if ((~~noun) && oCocaina in player) jump Coca; if (noun ~= oCocaina && noun ~= oEroina) print_ret "Il tuo cervello ", (string)e_grave, " completamente andato, che idiozia sniffare ", (the)noun, "."; !label for jump .Coca; if (oPenna notin player) "Hai bisogno di un aggeggio per poter sniffare la cocaina."; SommaPunti(C_COCAINA); remove oCocaina; ShowInv(); codice->3 = 1; PlaySound(sndHORROR, 1, gg_forechan, 1); ShowImg(imgELFO); print "Dopo aver preparato accuratamente la pista, allarghi la narice per inserire l'involucro della penna, inizi a tirare la coca, prima con la narice destra e poi con la sinistra!!!! Ahh, ti senti rinvigorire!!!^"; gg_U("^Cosa ti dicevo io, i bei vecchi tempi, li rimpiangi vero? Adesso, puoi tranquillamente pensare alle donne della tua vita!^"); print "^Cazzo, ti senti malissimo... hai paura, ti vedi gi", (string)a_grave, " morto e stecchito... "; if (player notin oLetto) { move player to oLetto; print "Ti siedi sul letto e ti riposi un pochino.^^^^"; } else print "Ti riposi qualche minuto!!!!^^^^"; KeyCharPrimitive(); glk_window_clear(gg_mainwin); ShowImg(imgAPP); rtrue; ]; !specializzato se gestito nell'oggetto, altrimenti come LookUnder [ LookDietroSub; <>; ]; [ SciogliSub; if (oEroina.sciolta && oCoppa.acqua) print_ret "Non serve riscaldarla di nuovo, ", (string)e_grave, " pronta, ti serve solo una siringa adesso."; if (((~~second) && oAccendino notin player) || (second ~= 0 && second ~= oAccendino)) return AzioneObjCon(noun, second); !a questo punto ho l'accendino if (noun == oCocaina) "La cocaina la preferisci sniffare."; if (noun ~= oEroina && noun ~= oCoppa) return AzioneObjCon(noun, second); if (noun == oCoppa && oEroina notin oCoppa) "Vedi un alone nero sulla parte riscaldata, ma alla fine non ottieni nulla."; !a questo punto noun = eroina if (~~oCoppa.eroina) { print "Dato che non hai un cucchiaio, ti servirebbe qualcosa che faccia da supporto.^"; return gg_U("^Se poi te la vuoi sciogliere in mano allora fai pure.^"); } if (~~oCoppa.acqua) "Hai bisogno di qualcosa che faccia da acqua per l'eroina."; oEroina.sciolta = 1; print "Pieghi ad un lato la coppa e con l'accendino riscaldi la coppa, vedi l'eroina sciogliersi e amalgamarsi con l'acqua.^"; if (oSiringa notin player) { gg_style(style_Note); print "Adesso ti manca solo la siringa e il gioco ", (string)e_grave, " fatto."; gg_style(style_Normal); } rtrue; ]; [ LeggiSub; if (~~noun) "Che cosa?"; "Che idee strampalate che ti vengono a volte."; ]; [ VomitaSub; if (player.vomitato) "Ora ti senti meglio, non ne hai bisogno."; if (player.bevuto < 2) "Stai male, ma non al punto di asfaltare."; ++player.vomitato; PlaySound(sndVOMITO, 1, gg_backchan); print "Da diversi giorni mangi pochissimo, molte volte butti il pranzo che ti passa tua sorella dalla finestra, ma ora dopo aver bevuto la sambuca a digiuno ti senti male, ti gira tutto, cos", (string)i_grave, " infili le dita in gola ed ecco che i conati si fanno sempre pi", (string)u_grave, " forti. Alla fine per", (string)o_grave, " butti fuori solo un po' di acido gastrico.^"; return gg_U("^Si si, vomita pure, dopo tutto il veleno che ti hanno fatto fare in questi giorni tua madre e tua sorella ne hai proprio bisogno.^"); ]; [ SputareSub id; SommaPunti(C_ESAURITO); if (player.sputato) "Non hai altro materiale da espellere."; if (~~player.bevuto) "Non hai materiale da espellere."; ++player.sputato; switch(random(3)) { 1: id = sndRACKSMAL; 2: id = sndRACKBIG1; 3: id = sndRACKBIG2; } PlaySound(id, 1, gg_backchan, 1); print "Ti gratti il canarozzo - KRRRR, KRRAAAHH - prepari la cozza"; if (oFinestra hasnt open) { print ", apri la finestra e la spari via."; } else { print " e la lanci dalla finestra."; } return gg_U("^^Uh uh, senti i passanti come borbottano!!!^"); ]; [ PungitiSub; SommaPunti(C_VERBO); if ((~~noun) && oSiringa notin player) "Con che cosa?"; if (((~~noun) && oSiringa in player) || noun == oSiringa) "Se hai voglia di farti una pera usa il verbo bucati."; if (noun == oVetri or oPenna or oTaglierino) { return gg_U("Hai voglia di bucarti? Fatti una pera.^^"); } "Certo he tu devi essere proprio matto."; ]; [ FattiSub; "Che cosa?"; ]; [ RicordaSub; "Non hai voglia di farlo."; ]; [ PortamiSub; "Usa la forma >[CREATURE, portami oggetto]"; ]; [ DammiSub; "Usa la forma >[CREATURE, dammi oggetto]"; ]; [ AiutamiSub; if (~~noun) "Devi imparare a sbrigartela da solo, ormai sei grande."; "Non ti pensa proprio."; ]; [FanculoSub; SommaPunti(C_ESAURITO); if (~~noun) "Ogni tanto sfogarsi fa bene..."; "Non ti caca proprio."; ]; [ScoreSub; <>; ]; [FullScoreSub; !se il player muore non appare msg if (deadflag) return; return gg_P("Pensa a tirarti fuori dai guai piuttosto che ai punti.^"); ]; [InvSub; "Nel frame in alto a destra puoi vedere l'inventario."; ]; [ TelefonaSub; if (pTelefono.stato == 1) print_ret "Sta squillando non puoi chiamare, al massimo rispondere, se vuoi."; if (pTelefono.stato == 2 && noun ~= pTelefono.persona) print_ret "Sei al telefono con ", (the)pTelefono.persona, ", non puoi telefonare."; if (~~noun) "A chi vuoi telefonare?"; switch(noun) { pMamma: "Tua madre non ha il cellulare."; pSorella: "L'ha acquistato da pochi giorni e non ricordi il suo numero."; pRagazza: if (pTelefono.persona == noun) "Sei al telefono con lei, non ha senso."; if (~~pRagazza.chiamato) { return gg_U("Non ti chiama da dieci giorni, non ti azzardare a prendere in mano il telefono!!! Con le donne devi essere duro e tenace.^"); } pAmico: "Come lo scemo buttasti l'agenda e adesso non ricordi il suo numero."; } PlaySound(sndCOMPONI, 1, gg_backchan, 1); print "Attendi (o speri?) che Stefania risponda.^"; return gg_U("^Ma guardalo, fai tutte quelle moine, lei ti pianta e ora tu che fai, la chiami... oh amoricino, scusami, ti perdono, sono un bravo bambino... pietoso!!^"); ]; [ RiattaccaSub; if (pTelefono.stato == 0) "Non sei al telefono con nessuno."; if (pTelefono.stato == 1) { pTelefono.stato = 0; StopPlay(); "Scocciato alzi e riabbassi la cornetta. Hai chiuso il telefono in faccia praticamente."; } "Stai per chiudere, ma poi ci ripensi..."; ]; [ PlaySub; if (oStereo.stato) print_ret "Stai gi", (string)a_grave, " ascoltando lo stereo."; ++oStereo.stato; oStereo.song = 0; <>; ]; [ StopSub; oStereo.stato = 0; oStereo.shuffle = 0; oStereo.automatico = 0; StopPlay(gg_forechan); "[TIC]"; ]; [ NextSub; oStereo.stato = 1; if (oStereo.song == sndSONG8 or 0) oStereo.song = sndSONG1; else ++oStereo.song; PlaySound(oStereo.song, 1, gg_forechan, 1); if (~~oStereo.automatico) print "[TIC]^"; oStereo.automatico = 0; rtrue; ]; [ PrevSub; oStereo.stato = 1; if (oStereo.song == sndSONG1) oStereo.song = sndSONG8; else --oStereo.song; PlaySound(oStereo.song, 1, gg_forechan, 1); "[TIC]"; ]; [ ShuffleSub; if (~~oStereo.shuffle) print "[TIC]^"; oStereo.stato = 1; oStereo.shuffle = 1; PlaySound(random(8) + sndSONG1 - 1, 1, gg_forechan, 1); rtrue; ]; [ AlitaSub; if (~~noun) "Che cosa?"; if (noun == oVetro) "Una volta ti divertiva fare disegnini sui vetri appannati."; if (noun == oVetri) "Il vetro della finestra ", (string)e_grave, " rotto."; SommaPunti(C_ESAURITO); return gg_U("Mi sto convincendo anch'io ormai che sei proprio andato.^"); ]; [ AddioSub; print_ret "Questo ", (string)e_grave, " semplicemente un gioco, quando spegni dimentica tutto, mi raccomando..."; ]; [ RuttaSub; SommaPunti(C_ESAURITO); "Non sei mai stato bravo a fare i rutti finti."; ]; [ CacaSub; SommaPunti(C_ESAURITO); "Non senti nessuno stimolo per adesso..."; ]; [ PisciaSub; SommaPunti(C_ESAURITO); if (player.pisciato) "Mhh, non ti viene."; ++player.pisciato; give oFinestra open; PlaySound(random(11) + sndPIOVERE - 1, 1, gg_backchan); "Dato che non hai nessuna voglia di andare al cesso, decidi di pisciare dalla finestra."; ]; !*************** GRAMMATICHE ****************************************** Verb "riposa" = "dormi"; Verb "ingoia" = "mangia"; Verb "digita" = "premi"; Verb "immergi" = "metti"; Verb "spara" = "colpisci"; Verb "bussa" = "tocca"; Verb "alzati" = "scendi"; Verb "urla" = "grida"; Verb "versa" = "svuota"; Verb "porcino" "troia" = "merda"; Verb "scusati" "scusami" = "scusa"; Verb meta "punti" = "fullscore"; Verb meta "aiuto" "help" "informazioni" "intro" "about" "comandi" "info" * -> Help; Verb "lanciati" * -> Lanciati * 'da'/'dal'/'dallo'/'dalle^'/'dagli'/'dai' noun -> Lanciati; Verb "buttati" = "lanciati"; Verb "masturbati" * -> Masturbati; Verb "impiccati" * -> Impiccati; Verb "sparati" * -> Sparati; Verb "ammazzati" * -> Ammazzati; Verb "ucciditi" "suicidati" = "ammazzati"; Verb "usa" * -> Use * noun -> Use * noun 'con' held -> Use; Verb "passa" * 'in'/'nel'/'nello'/'nell^'/'nella'/'nei'/ 'negli'/'nelle'/'dentro'/'attraverso' -> Enter * 'in'/'nel'/'nello'/'nell^'/'nella'/'nei'/ 'negli'/'nelle'/'dentro'/'attraverso' noun -> Enter; Verb "sputa" * -> Sputare; Verb "suona" * -> Suona * noun -> Suona; Verb "chiama" * creature -> Chiama; Verb "scopa" * -> Scopa * creature -> Scopa * 'con' creature -> Scopa; Verb "scopati" "tromba" = "scopa"; Verb "affacciati" * -> Affacciati * 'a'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/'alle' noun -> Affacciati; Verb "tagliati" * -> Tagliati * 'con' held -> Tagliati; ! * topic 'con' held -> Tagliati; Verb "scrivi" * noun -> Scrivi * noun 'con' held -> Scrivi; Verb "lecca" * -> Lecca * noun -> Lecca; Verb "bucati" * -> Bucati; Verb "drogati" "iniettati" = "bucati"; Verb "avvita" "svita" = "gira"; Verb "sniffa" * -> Sniffa * held -> Sniffa; Verb "sciogli" * noun -> Sciogli * noun 'con' held -> Sciogli; Verb "scalda" "riscalda" = "sciogli"; Verb "vomita" * -> Vomita; Verb "pungiti" * -> Pungiti * 'con' held -> Pungiti; Verb "fatti" * -> Fatti * 'canna' -> Fuma * 'pera' -> Bucati * 'dose' -> Bucati * 'buco' -> Bucati * 'eroina' -> Bucati * 'una'/'la' 'canna' -> Fuma * 'una'/'la' 'pera' -> Bucati * 'una'/'la' 'dose' -> Bucati * 'di' 'eroina' -> Bucati * 'un'/'il' 'buco' -> Bucati; Verb "prepara" "preparati" = "fatti"; Verb "fuma" * -> Fuma * held -> Fuma; Verb "ricorda" * creature -> Ricorda * 'tua'/'tuo' creature -> Ricorda; Verb "portami" * -> Portami * noun -> Portami; Verb "porta" = "portami"; Verb "dammi" * -> Dammi * noun -> Dammi; Verb "mandami" = "dammi"; Verb "aiutami" * -> Aiutami * creature -> Aiutami; Verb "fanculo" * -> Fanculo * creature -> Fanculo; Verb "vaffanculo" = "fanculo"; Verb "telefona" * -> Telefona * 'a'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/'alle' creature -> Telefona; Verb "riattacca" * -> Riattacca; Verb "riaggancia" = "riattacca"; Verb "play" * -> Play; Verb "stop" * -> Stop; Verb "next" * -> Next; Verb "prev" * -> Prev; Verb "shuffle" * -> Shuffle; Verb "alita" * -> Alita * noun -> Alita; Verb "addio" * -> Addio; Verb "arrivederci" = "addio"; Verb "rutta" * -> Rutta; Verb "caca" * -> Caca; Verb "piscia" * -> Piscia; Extend "pensa" last * 'a'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/'alle' creature -> Think; Extend "scendi" first * -> Exit; !per bussa Extend "tocca" last * 'a'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/'alle' noun -> Touch; Extend "chiedi" last * 'scusa' 'a'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/ 'alle' creature -> Sorry; Extend "lancia" last * held 'da'/'dal'/'dallo'/'dalle^'/'dagli'/'dai' noun -> ThrowAt; Extend "spingi" last * noun 'verso'/'vicino'/'sotto' noun -> PushDir; Extend "sposta" last * noun 'verso'/'vicino'/'sotto' noun -> PushDir; Extend "guarda" last * 'dietro' noun -> LookDietro; !Mi serve per gestire il comando bevi (senza complemento) Extend "bevi" first * -> Drink; !Sostituisco completamente il verbo leggi Extend "leggi" replace * -> Leggi * noun -> Leggi; Extend "svuota" last * noun 'dentro'/'in'/'nel'/'nello'/'nell^'/'nella'/ 'negli'/'nelle'/'nei' noun -> EmptyT; Extend "rispondi" first * 'a'/'all^'/'allo'/'alla'/'al'/'agli'/'ai'/'alle' creature -> Answer; ! ########################## F I N E V E R B I ############################### ! ------------------------------------------------------ ! F I N E !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ! #############################################################################