constant historia "La Pelotita"; constant titular "^(c) 2003 Rockersuke Moroboshi^^Teclea ~AYUDA~ para más información.^^"; constant ADMITIR_COMANDO_SALIDAS; constant NO_LUGARES; constant HAY_CURIOSIDADES; Release 6; global variable_generica; global techo_besado; global encestamientos; global xyzzy_var; Replace EscucharSub; include "EParser"; Object MensajesLibreria with antes [; Cantar: if (esqueleto.contador>0) "¡Te pones a cantar con fervoroso entusiasmo las canciones de los Meteors, lo cual, teniendo en cuenta que estás siendo perseguido por un furioso esqueleto, puede hasta resultar apropiado!"; if (CD in jugador) { print "Sacas el libreto del CD y, con las letras, te pones a cantar las canciones de los Meteors... ¡pero no das el pego como estrella del Rock 'n' Roll!"; if (hada in localizacion) "^No estás seguro de como interpretar la mirada de perpleja fascinación del hada..."; rtrue; } else { print "Intentas imitar con tu voz al cantante de los Meteors, pero no das el tipo... "; if (CD has general) print "(¿quizá no seas lo bastante gordo?)"; if (hada in localizacion) "^Sin perder un ápice de su graciosa majestuosidad, el hada te contempla con los ojos como platos..."; rtrue; } Coger: if (ml_n==6) { if ((uno==pelota) && (ml_o==esqueleto)) "Incluso en el hipotético caso de que fueras lo bastante rápido... ¡podría tomarselo a mal!"; } Inv: if (ml_n==1) "Llevas:^ Nada de nada."; Mirar: if ((ml_n==1) && (ml_o==canasta)) { print " (colgando de ", (el) ml_o, ")"; rtrue; } ! Miscelanea: ! if ((ml_n==30) && (accion_que_seria==##Escuchar)) ! "No oigo eso que dices."; Oler: switch (uno) { nothing: "Ningún olor extraño llama tu atención."; default: print_ret (_El) uno, " no huele", (n) uno, " a nada de particular."; } Sacar: if (ml_n==2) { if ((uno==pelota) && (otro==monstruo)) "No, si el monstruo no tiene la pelota, está durmiendo encima de ella... ¡ese es el problema!"; } Saltar: "Pegas botes compulsivamente hasta llegar a la conclusión de que así no se resolveran los grandes males de la sociedad."; Tocar: "¡No es propio de elegantes, educados y valientes aventureros andar toqueteandolo todo por ahí!"; Probar: if (ml_o has animado) print_ret "Quizá ", (al)ml_o, " no terminase de gustarle",(s)ml_o," la idea."; else switch (ml_o) { obj_arriba: "No eres tan alto como para alcanzar a probar el sabor del techo."; obj_abajo: "Pues la verdad es que, en esta aventura en concreto, el suelo resulta ser bastante insípido."; default: print_ret (_El) ml_o, ", en si mism",(o)ml_o,", no sabe",(n)ml_o," a nada en particular."; } Prompt: print "^¿Y ahora qué?"; Puntuacion: if (banderafin) print "En este juego, tu puntuación ha sido "; else print "Hasta el momento tu puntuación es "; print puntuacion, !" de un total de ", PUNTUACION_MAX, ", en ", turnos, " turno"; if (turnos>1) print "s"; return; ]; include "Acciones"; include "Etemas"; !(c) 1999-2000 Zak McKraken include "BajoNivel"; !(c) 2000 Zak McKracken Class Habitacion with no_puedes_ir "¡Pumba! ostión contra la pared.", abajo "¡Imposible atravesar el frío y duro suelo!", arriba "¡El vuelo no está entre tus facultades aventureras, oh, mero mortal!", has luz; Class Objeto; !************************************** !*********** HABITACIONES *********** !************************************** Habitacion habitacion_abandonada "Habitación abandonada" with antes [; Besar, BesarInanimado: if (jugador in canasta) switch (uno) { obj_arriba: techo_besado=1; "Desde aquí sí que alcanzas a posar tus labios sobre la misteriosa oscuridad del techo."; obj_abajo: "El suelo está demasiado lejano como para poder ser agraciado por el roce de tus labios."; canasta: rfalse; default: if(uno notin jugador) "Por más que estiras los morros, no alcancas a besar ",(al) uno," desde estas canasteras alturas."; } Coger: if ((jugador in canasta)&&(uno notin jugador)) switch (uno) { canasta: "¡No puedes coger la canasta de la que estás colgando!"; default: "Intentas emular a tu ídolo de la infancia, Plastic Man, ¡pero no consigues estirar tanto los brazos como para coger nada desde la canasta!"; } Dejar: if ((uno in jugador)&&(jugador in canasta) ) { move uno to self; move esqueleto to self; print "Rememoras los experimentos de Galileo sobre la gravedad en la Torre de Pisa observando cuidadosamente como ", (el) uno, " desciende desde lo alto de la canasta hasta el suelo."; if (uno==pelota) " Tras lo cual rebota unas cuantas ocasiones antes de cesar su pelotil movimiento."; rtrue; } Escuchar: if (uno~=nothing) rfalse; switch (variable_generica) { 3: switch (parent(jugador)) { canasta: print "¡No se oye nada "; if (telefono hasnt escenario) print "(salvo un distante timbre telefónico) "; "pero la mirada de los inexistentes ojos del esqueleto lo dice todo!."; default: print "Se escucha el eco del rebotar de la pelota por las paredes mientras el esqueleto juega compulsivamente con ella"; if (telefono hasnt escenario) print " (y además se oye sonar un teléfono de fondo)"; "."; } 2: "¡Extraños gritos y rugidos provienen del este!."; } Ir: if (jugador in canasta) switch (uno) { obj_abajo: self.rutina_baja_canasta(); rtrue; obj_arriba: "Ya estás en lo más alto."; } Salir, Salirse, Saltar: if (jugador in canasta) { self.rutina_baja_canasta(); rtrue; } ], despues [; Dejar: if (esqueleto in self) move esqueleto to self; ], descripcion [; switch (parent(jugador)) { canasta:" Desde lo alto contemplas el abandonado paisaje de la habitación."; default:" Estás en una habitación abandonada."; } ], rutina_baja_canasta [; move jugador to self; switch (parent(pelota)) { esqueleto: print "Para regocijo del esqueleto, s"; default: print "S"; } "altas desde la canasta con la intención de aterrizar grácil y elegantemente pero consiguiendo tan sólo darte un monumental morrón contra el suelo."; ], al_e lugubre_camara, al_s salon_misterioso; Habitacion lugubre_camara "Lúgubre cámara" with antes [; Oler: if (uno==nothing) if (monstruo in self) "¡Qué agradable combinación de monstruoso hedor y maloliente pocimerío invade la estancia!"; else "Huele a pócima maloliente, o sea, bastante mal."; Escuchar: if (uno~=nothing) rfalse; switch (variable_generica) { 3: "Al gorgojeo espumoso de la marmita se le unen los rítmicos ronquidos del felizmente dormido monstruito."; default: "Se escucha levemente el hirviente crepitar de la olla."; } ], despues [; Dejar: if (anciano in self) move anciano to self; if (monstruo in self) move monstruo to self; ], descripcion " Estás en una lúgubre cámara.", al_o habitacion_abandonada, al_s oscuro_corredor; Habitacion salon_misterioso "Salón Misterioso" with antes [; Escuchar: if (uno~=nothing) rfalse; if (telefono hasnt escenario) "Se oye el estridente, enervante e insistente timbre del teléfono."; ], despues [; Dejar: if (hada in self) move hada to self; if (telefono hasnt escenario) move telefono to self; ], descripcion " Estás en un salón misterioso en una de cuyas paredes hay empotrado un teléfono.", al_n habitacion_abandonada, al_e oscuro_corredor; Habitacion oscuro_corredor "Oscuro corredor" with antes [; Escuchar: if (uno~=nothing) rfalse; switch (variable_generica) { 0:"Los ronquidos del monstruo inundan la sala dando una apacible sensación de tranquilidad."; 1:"Escandalosos alaridos monstruales llenan la habitación."; 2:"Parece oirse cierta agitación hacia el norte..."; 3: print "¡Hasta aquí llega el sonido del monstruo roncando!"; if (telefono hasnt escenario) " (que compite en sonora intensidad con el ruido del teléfono)"; "."; } Oler: if (uno==nothing && monstruo in self) "Huum, parece que huele a monstruo por aquí..."; ], despues [; Dejar: if (monstruo in self) move monstruo to self; ], descripcion " Estás en un oscuro corredor.", al_n lugubre_camara, al_o salon_misterioso, al_e 0; Habitacion extrana_estancia "Extraña estancia" with descripcion " Estás en una extraña estancia.", despues [; Dejar: move altar to self; ], al_o oscuro_corredor; !************************************ !*********** PERSONAJES *********** !************************************ Objeto monstruo "monstruo" oscuro_corredor with nombre_m 'monstruo' 'monstruito' 'bicho', nombre_f 'criatura', genero G_MASCULINO, antes [; Empujar: switch (variable_generica) { 1: "El monstruo no está de humor como para que le anden empujando."; default: "Con absoluta desconsideración y total falta de escrúpulos, empujas a la criatura... sin conseguir que se inmute ni desplazarlo un milimetro."; } Escuchar: <>; Jugar: switch (variable_generica) { 1: "El atormentado monstruo aparenta no estár predispuesto a distraerse con juegos mientras no recupere su pelota."; default: "El plácidamente dormido monstruo tendría que estar despierto para poder jugar con él a algo."; } MirarDebajo: if (variable_generica==0) "Puedes ver la semiapalstada pelotita bajo la panza de la dormida y dragonosa criatura."; Oler: "El olor del monstruo es... monstruosamente indescriptible!"; Probar: switch (variable_generica) { 1: "En su estado de deseperación podría tomarse a mal que intentaras chupetearlo."; default: "Quizá al dormido monstruo no terminara de gustarle la idea de despertarse siendo relamido."; } Tocar: switch (variable_generica) { 1: "En su estado de histeria pelotera mejor no andar tocandole los... eer, tocandole."; default: "Venciendo el repelús y el temor a despertarlo, tocas suavemente la rugosa, humeda y monstruosa piel."; } ], descripcion [; switch (variable_generica) { 0: "Horripilante... verdoso... e incluso se diría que somniolento."; 1: "Baboso... llorón... y al parecer apasionadamente interesado en las pelotitas."; 2: "En principio esta descripción nunca será visible para el jugador."; default: "Resoplante, sesteador, y, ante todo, contento. Recuerda, ¡un monstruo bien alimentado es un monstruo feliz!."; } ], describir [; switch (variable_generica) { 0: "Ves a un horripilante y verdoso monstruo durmiendo encima de una pelotita."; 1: "El monstruo babeante no deja de lloriquear suplicante:^~¡Quiero la pelotita, BUUAAA...!~"; 2: variable_generica++; move pelota to esqueleto; move anciano to monstruo; move sangre to lugubre_camara; give olla ~escenario; olla.describir="Puedes ver una olla."; give esqueleto transparente animado; give pelota escenario; print "¡Woau, cuanta sangre! El monstruito, muy mosqueado, se está papeando al menda de los conjuros.^~Hombre malo, quitarme pelotita...¡Ñam,ñam!~^"; print "Quedas momentaneamente paralizado por el estupor...^"; EsperarTecla ("[Pulsa una tecla]"); print "^A todo esto la pelotita se va rodando hacia el oeste sin que nadie se cosque.^"; EsperarTecla ("[Pulsa una tecla]"); "^"; default: "El monstruo sestea resoplante mientras hace la digestión del viejo."; } ], reaccionar_antes [; Botar: if ((uno==pelota) & (variable_generica==1)) "Cantas con alegría mientras botas la pelota y el monstruo te mira con los ojos como platos jadeando expectante con gesto de perrito abandonado:^~¡Pelota, pelota, arf, arf!~"; Cantar: switch (variable_generica) { 1: "Lo de la música y las fieras no funciona aquí, piensas mientras tus gorgoritos no hacen sino aumentar la monstruosa rabieta."; default: "Contra todo pronóstico, tus vanos intentos de emitir sonidos armoniosos arrullan los dulces sueños del monstruo."; } ], reaccionar_despues [; Dejar: if ((uno==pelota) & (variable_generica==1)) { move monstruo to oscuro_corredor; "El monstruo se sobresalta al ver como depositas su más preciado objeto y comienza a gimotear:^~¿Pelota, pelota?~"; } ], vida [; Atacar: print "A falta de ningún arma, cargas contra el monstruo con todas tus fuerzas...^...para acabar lanzado contra la pared tras rebotar en su viscosa barriga.^"; switch (variable_generica) { 1: "La criatura cesa momentaneamente sus sollozos...^posa en ti sus ojos enrojecidos...^y se desmorona de pesar mientras continua clamando:^~¡Pelotaaa, mi pelotaaa!~."; default: "El bicho sonríe complacido en sus sueños con la expresión de quien acaba de recibir unas confortables y cosquillosas caricias."; } Besar: "La zoofilia no es la solución."; Dar: switch (variable_generica) { 1: switch (uno) { pelota: variable_generica++; move pelota to monstruo; move monstruo to lugubre_camara; oscuro_corredor.al_e=extrana_estancia; "El bicho se pone la mar de alegre y se va dando saltos bamboleantes hacia el norte dejando un paso libre al este."; default: print_ret "Tu", (s) uno," ", (_nombre_) uno, " se muestra", (s) uno, " claramente insuficiente", (s) uno, " para calmar su desesperación."; } default: print_ret "El dormido monstruo vaga por el mundo de los sueños ajeno a tus intentos de captar su atención con ", (el) uno,"."; } DespertarOtro: switch (variable_generica) { 1: "¡No tiene pinta de estar precisamente dormido!"; default: "Tras cachetear repetidamente el careto del monstruo en una iniciativa honestamente insensata, consigues que abra un ojo, te observe con gesto de confusión, bosteze abrumadoramente y... lo vuelva a cerrar echando su dormida cabeza hacia otro lado."; } Hablar, Preguntar, Orden: switch (variable_generica) { 1: "Tus amables palabras pasan totalmente inadvertidas para el descorazonado monstruo, incapaz de cesar su llanto por la pelota."; default: "Si la criatura te escucha en sueños, no da la menor muestra de ello."; } Mostrar: switch (variable_generica) { 1: switch (uno) { pelota: "La mirada exaltada de la monstruosa criatura se posa frenética sobre la bola mientras exclama entre espasmos:^~¡Pelotaaa, pelotaaa!~."; default: print_ret "La llorosa abominación ni se percata de que le estás enseñando ", (un) uno,"."; } default: print_ret "Si la presencia de tu", (s) uno, " ", (_nombre_) uno, " produce algún efecto en sus profundos sueños es algo que permanecerá en el misterio."; } ], suma_al_alcance cabeza panza piel ronquidos llantos, has animado; Objeto anciano "anciano" lugubre_camara with nombre 'anciano' 'viejo' 'hechizero' 'hechicero' 'mago' 'momio' 'matusaleno' 'brujo', describir [; switch (variable_generica) { 0: "Un anciano de rostro malicioso revuelve una olla llena de malolientes pócimas y te dice:^~Necesito el pergamino para mis conjuros~"; default:"El nota de los hechizos se dedica a sus potingues y no se cuenta nada de particular."; } ], descripcion "Vejestorio y edadepiedroso matusaleno con ropajes y actitudes hechizerales.", antes [; Escuchar: switch (parent(pergamino)) { anciano: "El anciano balbucea incoherencias con gesto de satisfacción."; default: "No para de suspirar incansablemente por su pergamino."; } Empujar: "¡Respeta a la ancianidad, maleducado aventurero!"; Jugar: "El reumatrítico hechicero está ya muy mayor para andarse con juegos."; Tocar: <>; ], reaccionar_despues [; dejar: if (uno==pergamino) { move anciano to lugubre_camara; give self general; "La anciana y hechicerosa mirada del viejo se clava expectante sobre el pergamino que acabas de dejar, mientras que una brusca euforia senil se apodera de su tortuoso ser:^~¡Pergaminoo, mi pergaminoo!~."; } ], ordenes [tema; switch (parent(pergamino)) { anciano: switch (accion) { ##Dar: tema=AveriguarTema(temas); switch (tema) { bola: "El viejo se rasca la cabeza:^~Pero... juraría que te la di hace poco ¿no?~"; papiro: "El demente mago replica bruscamente:^~¡No, es mío~."; default: "El hechicero se te queda mirando extrañado:^~No termino de entenderte, hijo ¿qué me estás pidiendo exactamente...?~^Su tono de locura hace que se te quiten las ganas de pedirle nada."; } default: "El anciano sonríe burlonamente mientras ignora por completo lo que le dices."; } default: "El viejo está completamente enajenado por la obsesión con su pergamino."; } ], vida [tema; Dar: switch(uno) { pergamino: move pergamino to anciano; move pelota to jugador; give pelota ~escenario; variable_generica=1; "El viejo se pone muy contento y dice:^~¡Gracias! Te haré un regalo a cambio~^Se va y vuelve al poco tiempo dandote una pelota."; default: switch (variable_generica) { 0: print "Al ver tu ", (s) uno, (_nombre_) uno, " el anciano exclama atropellada e incoherentemente:^~Sí, sí... claro, ",(el) uno,", grubsssh, ya ¿no tendrías "; if (self has general) "ese pergamino, mejor?~ "; else "un pergamino, mejor?~"; default: print_ret "El viejo mira ", (el) uno, " de refilón y farfulla algo incompresible a modo de gentil rechazo."; } } Atacar: banderafin=3; print "El anciano se defiende dando la voz de alarma:^~¡Perroblastios engominados! ¿qué humillante afrentación es esta? ¡A mí la guardia monstruosa!~^De pronto ves aparecer "; if (oscuro_corredor has visitado) print "al "; else print "un "; "monstruo verduriento corriendo inmisericordemente hacia tí mientras exclama:^~Yo tener hambre... comer humano aventurero... ¡Ñam, ñam!~^El crujir de tus huesos triturados es tu último sentimiento en este mundo."; Besar: if (pergamino in anciano) "La gerontofilia no es la solución."; else "La débil y aguda voz del barbudo anciano exclama con energía:^~¡Nooo, yo no deseo que me acoses sexualmente, yo quiero mi pergamino!.~"; Mostrar: switch (uno) { pergamino: give self general; "El viejo alarga temblorosamente las manos hacia el pergamino mientras la ansiedad hace de su voz un gemido casi ininteligible:^~¡Peeergaaamiiinoooo!~"; default: switch (variable_generica) { 0: print "El anciano te observa con cierta agitación y comenta:^~¡Oh! muy interesante", (s) uno," tu", (s) uno," ",(_nombre_) uno," peroo..."; if (self has general) "¿no tenías por ahí un pergamino?~"; else "¿no habrás visto por ahí un pergamino?~"; default: print_ret "El vejestorio exclama sin mucho entusiasmo:^~¡Ah! muy bonit",(o) uno, " tu",(s) uno," ",(_nombre_) uno,", sí~."; } } Hablar, Preguntar: switch (variable_generica) { 0: tema=AveriguarTema(temas); switch (tema) { papiro: "El acartonado mago proclama con anciana solemnidad:^~¡La adecuada concatenación de los mamparonecios melandronalinos depende de la correcta recitación del hechizo! ¡Mi pergamino!~."; default: "Por toda respuesta el anciano replica con senil vehemencia:^~¡Sí, ya, claro... pero, mi pergamiinoooo!~^Su desviada mirada sugiere que su mente se halla muy lejos de este mundo."; } default: tema=AveriguarTema(temas); switch (tema) { bicho: "El achacoso hechicero comenta distraidamente:^~¡Buen bicho! Llleva ahí durmiendo desde que nació~."; bola: "El anciano mira hacia el vacio y comenta desentonada e incoherentemente:^~¡Pelota! yo tenía una de pequeño, pero de eso hace unos 5000 años...~."; caldera: "El decrepitoso mago exclama:^~¡Mi hermosa olla! En ella preparo mis mágicos conjuros~."; polita: "El viejo mago sonrie lascivamente:^~¡Aaah, si tuviera unos pocos años menos...!~."; huesos: "El anciano canta vivazmente:^~Los esqueletos que no lavan bien sus huesos huelen con el hedor de los quesos~."; papiro: "El viejo se te acerca y te dice al oido con gesto de complicidad algo sobre el pergamino y los conjuros que no eres capaz de entender... ¡suponiendo que tuviera sentido!."; pocimas: "El embrujoso anciano te explica vehementemente:^~¡Mis conjuros! Cuando termine de cocinarlos sabré para qué sirven y entonces... jejeje...~."; rockersuk: "El viejo replica vivazmente pero con la mirada perdida:^~¡Rockersuke Moroboshi, claro! él es, estoo, es... eer... ¿de quién demonios me estás hablando?~."; default: "Con una enajenada sonrisa el viejo te da a entender que no sabe qué responderte."; } } ], suma_al_alcance ropajes, has animado; Objeto hada "hada" with nombre 'hada' 'polita' 'poli' 'flores', articulos "El" "el" "un", descripcion [; switch (self.atacada) { 1 to 2: "Ligeramente despeinada tras tu ataque, pero sin perder su alegría y vitalidad."; 3 to 4: "Notablemente adrenalínica tras tus continuados ataques, incluso se diría que con cierto grado de contenida excitación, pero sin perder su mágica compostura."; default: "Estoo... rubia, despampanante, ojos azules... cuerpo danone escultural... ¡y parece que dice algo de conceder deseos!^Además tiene una misteriosa varita mágica."; } ], describir "Una despampanante hada rubia de ojos azules y escultural cuerpo danone aparece reluciente en medio de la sala:^~¡Hola! Soy Polita Flores, el hada buena de los bosques, y te concederé un deseo~", suma_al_alcance varita, antes [; Empujar: "Optas por reservar tus muestras de rudeza para mejores fines."; Escuchar: if (self.atacada) "Insiste tercamente en que si le pides un deseo ¡lo mismo te lo concede!"; else "El hada mantiene firmemente su proposición sobre conceder deseos."; Oler: "Aunque se llame Polita Flores, no huele a nada de particular."; Jugar: "Sonriendo inocentemente, el hada replica:^~A mi también me gustaría jugar contigo... pero mi misión aquí es conceder deseos...~"; Probar: "Todo es intentarlo, pero... el hada podría hacerse unas ideas muy raras sobre tí..."; Desear: "Por si acaso, prefieres no expresar ese deseo en voz alta... de momento."; Tocar: "¡Prefieres dominar esos impulsos, no sea que tus intenciones fueran demasiado evidentes!"; ], reaccionar_antes [; Desear: switch (uno) { hada: rfalse; default: "No basta con desearlo para tus adentros, tienes que pedirle un deseo al hada."; } ], ordenes [tema eleccion; switch (accion) { ##Dar: tema=AveriguarTema(temas); switch (tema) { vara: "El hada te explica cariñosamente:^~Mi varita mágica jamás te podría dar... Pero un deseo sí te puedo conceder~."; peticion: do { print "^¡Elige tu deseo! (0 para no escoger ninguno)^^-[1] Ser millonario.^-[2] Tener la pelotita.^-[3] Echarle un polvo al hada.^^"; #ifdef TARGET_ZCODE; read buffer parse DibujarLineaEstado; #ifnot; KeyboardPrimitive(buffer, parse); #endif; eleccion = IntentarNumero(1); } until ((eleccion >= 0) && (eleccion <= 3)); switch(eleccion) { 1: self.hada_deseo_01(); rtrue; 2: self.hada_deseo_02(); rtrue; 3: self.hada_deseo_03(); rtrue; default: rtrue; } default: "El hada exclama con una mezcla de excitación e impaciencia:^~¡Deseos! Tienes que pedirme un deseo~."; } default: "El hada sonríe amablemente para mostrar su escasa predisposición a hacerte caso."; } ], vida [tema; Atacar: print "A falta de ningún arma para atacarle, te abalanzas sobre ella furiosamente y...^"; switch (self.atacada) { 1: self.atacada ++; "¡Plas! El hada, sin perder la compostura ni la pinta de pasarselo bien, devuelve tu ataque con un sonoro sopapo que deja sus mágicos dedos marcados en tu aventurero rostro."; 2: self.atacada ++; "¡Zas! Con un suspiro de impaciencia, el hada repele tu alevosa agresión tumbandote de una impactante patada en el estómago (¡ouch!)."; 3: self.atacada ++; "¡Rrreeerrk! Un tanto molesta, el hada invoca mágicamente con su varita una sierra eléctrica que hace desaparecer no sin antes causarte un profundo y doloroso tajo."; 4: banderafin=3; "¡Ratatata! Visiblemente alterada, el hada se saca de la manga una Uzi 5346 cuyo cargador vacía sin piedad sobre tí hasta asegurarse de que ha esparcido tus higadillos por toda la estancia.^Antes de exhalar tu último suspiro, le oyes alecionarte educativamente:^~¡La violencia no es la solución!~"; default: self.atacada ++; "¡Tonk! El hada, sonriendo divertida, te golpea, aunque no muy cariñosamente, con su varita (¡ay! que dura es...)"; } Besar: if (self has general) "Lo bastante elevada del suelo como para estar fuera de tu alcance, el hada te observa expectante con un gesto dubitativo y sugerente a la vez."; else give self general; "Al acercarte al hada con tan cariñosas intenciones, esta se eleva mágicamente unos palmos del suelo mientras una fugaz muestra de rubor cruza sus mejillas... ^~¿De verdad es eso lo que deseas?~^...te parece escucharle susurrar, pero no estás seguro de haberle entendido bien."; Dar, Mostrar: switch (uno) { video: if (video has general) "Quizá sólo es una impresión tuya, pero un amago de mirada reprobadora te hace desistir de insistir con el video."; else give video general; "~¡Malo, maloso, malote!~ Exclama divertida el hada mientras te golpea suavemente con su varita... ~¡Que no te pille yo haciendo guarrerías!~"; default: "El hada contempla con sorpresa ",(el) uno,", para luego sonreir gentilmente mientras te indica con amabilidad: ^~¡Gracias, pero mi misión aquí es conceder deseos!~"; } Hablar, Preguntar: tema=AveriguarTema(temas); switch (tema) { cinta: "El hada te golpea firme pero cariñosamente con su varita mientras exclama:^~¡Picaróóón...!~"; compact: give CD general; "Con un movimiento de su varita, el hada invoca un tomo de la Enciclopedia de la Historia del Rock'n'Roll y lee:^~Meteors, trío ochentero de música Punkabilly y cantante obeso con tupé cuyas canciones hablaban de vampiros mutantes radioactivos e infernales."; huesos: switch (random (2)) { 1: "El hada trata de cambiar de tema silbando distraidamente mientras canturrea:^~Cantan, cantan, los alegres pajarillos entre los verdes árboles del frondoso bosque durante las cálidas mañanas de la florida primavera...~"; 2: "El hada mira hacia otra parte mientras comenta:^~Uuf, hoy sí que hace calor por aquí ¿no?~"; } peticion: print "El hada te explica con seguridad y firmeza, pero en un tono suave y acogedor:^"; switch (random (2)) { 1: "~Las hadas hemos sido enviadas a este mundo para conceder deseos a los intrépidos aventureros... ¡como tú!~."; 2: "~Deseos, sueños, las esperanzas de la humanidad... ese es el juego, tu me pides un deseo, yo te lo concedo ¡es fácil y divertido!~."; } rockersuk: switch (techo_besado) { 1: modo_notificar=0; puntuacion ++; "El hada proclama su revelación con solemnidad:^~¡Las altitudes ya has besado, por tanto el conocimiento puedes tener!^¡Rockersuke Moroboshi es... Radio Marte libre!~."; default: "El hada recita poéticamente cual declamadora de versos:^~Si la identidad de Rockersuke quieres conocer...^...primero las alturas has de besar...~."; } bicho, viejo: if (tema has general) { print "El hada te mira con incrédula curiosidad preguntandote:^~Pero... ¿de verdad quieres que te lo cuente otra vez?~.^"; switch (SiONo()) { 1: print "El hada suspira con una elegante sonrisa de resignación y, tras tomar aire, relata de nuevo:"; self.cuenta_vida(tema); rtrue; default: "El hada suspira aliviada."; } } else { give tema general; print "El hada respira hondo y empieza a relatar:"; self.cuenta_vida(tema); rtrue; } vara: "El hada levanta orgullosamente su varita:^~¡Mi varita mágica posee poderes extraordinarios y además concede deseos!~."; bola: if (bola has general) "El hada te contesta:^~Las hadas no podemos conseguir pelotas... ¡pero podemos conceder deseos!~."; else { give bola general; "El hada responde intrigada:^~Huum... muy interesado en la pelotita te veo yo a ti... no sé, no sé...~."; } papiro: "Tras pensar un poco el hada contesta:^~Sí, pergaminos... creo recordar que por aquí había uno hace tiempo~."; polita: "El hada sonríe y exclama:^~¡Soy un hada y concedo deseos con mi varita mágica!~."; tema_telefono: "El hada te responde condescendientemente:^~Sí, teléfono... ahí mismo tienes uno~."; default: "La sonriente hada se encoge de hombros compungida al no saber qué decirte al respecto."; } ], cuenta_vida [tema; print "^~Como todo el mundo sabe, tras la "; switch (tema) { bicho: "guerra de las Torres Sagradas las huestes de dragones invadieron los pueblos meridionales hasta que el Concilio de los Sabios Ancianos estableció que una virgen debía ser sacrificada para aplacar su ira. Sin embargo, la joven seleccionada fue capturada por la Malvada Bruja quien exigió incontables riquezas a cambio de su vida. Tres apuestos caballeros partieron en su rescate, los tres enamorados en secreto de la doncella y los tres con la oculta intención de escapar con ella antes que entregarla a los dragones. Uno de ellos acabó rescatandola, pero a ambos se los comió un dragón. Otro se las ingenió para largarse con el dinero del rescate y el tercero terminó casandose con la Bruja. De su unión nació un huevo de monstruo que, al parecer, alguien acabó dejandose por aquí...~"; default: "invasion de las galaxias del oeste por las fuerzas demoniacas del malvado extraterrestre Melsurtur, un ejercito de Caballeros del Espacio partió en Sagrada Cruzada para su liberación. Pero un regimiento fue desviado al caer bajo la hipnosis de las Sirenas Vegetales de Kalashilturtur. De la unión de un Caballero y una Sirena surgió la estirpe de las Amazonas del Zodiaco, una raza guerrera semi-animal que se dedicó a la persecución de los Trinocerontes Galácticos. Una desbandada estampìda de estos arrasó una colonia de residentes marcianos en Dimerkasal, cuyo único superviviente, abrumado y con la memoria perdida, se retiró a un convento frailero a practicar la meditación sideral hasta que, en una repentina crisis de fé, invocó un conjuro de teleportación arbitraria y aleatoria que le condujo aquí, de donde no se ha movido en los últimos 5000 años...~"; } ], hada_deseo_01 [; print "Ella exclama sonriente:^~¡Enhorabuena, vas a ser rico!~, "; self.hada_se_va(); give telefono ~escenario; EsperarTecla ("[Pulsa una tecla]^"); MirarSub(); ], hada_deseo_02 [; print"El hada asiente angelicalmente.^¡PLOF! La pelotita aparece por arte de magia en tus manos, "; move pelota to jugador; give pelota ~escenario; self.hada_se_va(); EsperarTecla ("[Pulsa una tecla]^"); ArrancarDaemon(esqueleto); "De repente se oye una cadavérica y enfadada voz desde el norte:^~¡Colega...! ¿y mi pelota?~"; ], hada_deseo_03 [; print "El hada, con cara de no sentirse halagada, te apunta con su varita mientras exclama las palabras mágicas:^~Llor dna kcor led sotreum sol ne ogac em~.^^Todo se vuelve negro a tu alrededor.^^"; EsperarTecla ("[Pulsa una tecla]"); print "^^Te despiertas en la habitación de la canasta y compruebas con horror que te has convertido en un manojo de huesos desparramados.^El esqueleto comenta como quien no quiere la cosa:^~¡Hombre! Tú también elegiste tirarte al hada ¿eh?~"; banderafin=3; ], hada_se_va [; self.hada_se_fue=1; remove self; "tras lo cual el hada desaparece mágicamente en una nube celestial."; ], atacada 0, hada_se_fue 0, has femenino animado; Objeto esqueleto "esqueleto" habitacion_abandonada with nombre 'esqueleto' 'huesos' 'huesudo' 'cadaver' 'muerto', antes [; Escuchar: if (self.contador>0) "La furia esquelética de su voz te hace estremecer."; Oler: "Si se fija uno bien, un poco a muerto sí que huele, sí."; Jugar: if (self has animado) "Tu saludable sentido lúdico no puede con la egoista insociabilidad del esqueleto, que no está dispuesto a compartir la pelotita."; else "Los inertes huesos no responden a tu jugetón entusiasmo."; Tocar: if (self has animado) "No parece que el esqueleto cuente entre sus prioridades el que tú le andes tocando."; else "Rozas los pálidos y fríos huesos, estremeciendote al creer notar un leve movimiento... ¡naaah, imaginaciones!"; Coger: switch (variable_generica) { 3: "Tras plantearte diversas estrategias para interceptarlo, llegas a la sabia conclusión de que el esqueleto no se va a dejar coger."; default: "Descartas de antemano la sóla idea de ponerte a cargar con huesos de muerto."; } Empujar: switch (variable_generica) { 3: "En un momento en que aparentaba quedarse quieto, aprovechas para tomar carrerilla y lanzarte sobre él con intención de empujarle... justo cuando se aparta con un salto para encestar y te acabas estampando contra el muro."; default:"Probablemente sólo conseguirías quedarte con los huesos putrefactos entre las manos (¡aaaghs!)."; } Atacar: switch (variable_generica) { 3: switch (parent(jugador)) { canasta: move jugador to habitacion_abandonada; "Al grito de ~¡¡BANZAI!!~ te lanzas sobre el esqueleto desde la canasta con intención de hacerle un mega-placaje triturador...^...justo en el momento en el que de un grácil salto se aparta y encesta una canasta más mientras tu te estrellas ruidosamente contra el suelo. ¡un buen intento!"; default:"El esqueleto no para de moverse siendo un blanco difícil para un eficaz ataque."; } default: "¡Malvado! No desahogues tu ira con los difuntos!"; } Besar, BesarInanimado: "La necrofilia no es la solución."; Hablar, Preguntar: switch (parent(jugador)) { canasta: "Se diría que al esqueleto le da igual lo que le digas con tal de que le dejes su canasta en paz."; default: "El esqueleto no presta atención más que a su pelota."; } Probar: if (self hasnt animado) "Iiiccks, la sola idea te revuelve las tripas."; ], daemon [; switch (self.contador) { 3: banderafin=3; "^¡Oh no! El huesudo te ha ligado por banda y te atraviesa el corazón con una cimmeriana espada mientras exclama:^~¡Muere, chorizo de esféricos!~.^Tus restos se pudrirán para siempre en estos lóbregos calabozos."; default: self.contador ++; if (self.contador>1) "^Por los pasillos retumba una esquelética voz berreando algo sobre nosequé pelota."; } ], descripcion [; switch (variable_generica) { 3: switch (parent(jugador)) { canasta:"Sientes que te taladra con su mirada de muerto mientras pega impacientes saltos esperando que dejes libre la canasta."; default:"¡Qué expresión de felicidad! Cualquiera diría que echaba de menos eso de echarse unas canastas."; } default: "Cadavérico sujeto que seguro pasó por días mejores."; } ], describir [; switch (variable_generica) { 3: if (self.contador>0) { banderafin=3; remove CD; remove video; "Colega, no sé como lo has hecho pero te has plantado justo enfrente de Mr. Huesos quien te ha arrancado la cabeza de un mordisco tras recuperar su pelota.^Tu cabeza despierta a los pocos días debajo de cierta canasta donde verás al esqueleto ensayando triples por el resto de la eternidad...^No es un mal final."; } if (hada.hada_se_fue==0) move hada to salon_misterioso; switch (parent(jugador)) { canasta:"El esqueleto padece compulsivos temblores de mono de baloncesteo mientras tú bloqueas la canasta."; default:"El esqueleto está jugando a basket con la pelotita sin tener aparentemente ninguna intención de soltarla."; } default:print "Puedes ver un esqueleto debajo "; switch (parent(jugador)) { canasta: "de la canasta de la que estás colgando."; default: "de una canasta de baloncesto."; } } ], reaccionar_despues [; Dejar: move self to localizacion; if (variable_generica < 3) "Por un momento jurarías que, al dejar ",(el) uno,", el esqueleto se movió siguiendol",(o) uno," con la mirada... ¡Qué tontería! ¿Verdad?"; rtrue; ], contador 0, has estatico; !********************************* !*********** OBJETOS *********** !********************************* Objeto altar "altar" extrana_estancia with nombre_m 'altar' 'ofertorio', nombre_f 'mesa''piedra', describir "Un altar de piedra domina majestuosamente el centro de la sala.", descripcion [; print "Primitivo y escasamente ornamentado ofertorio sobre el que puedes observar"; if (children (self)>1) { print ", además de "; if (jugador in self) { print "a tí mismo"; switch (children(self)) { 2: print ""; 3: print " y "; default: print ", "; } } EscribirListaDesde (child(self), ESPANOL_BIT + OCULTAR_BIT); print ","; } " una inscripción grabada."; ], antes [; BuscarEn: ExaminarSub(); rtrue; MirarDebajo: "¡Descubres una inscripción grabada debajo de la superficie del altar!^~Si la identidad del programador de este universo deseas conocer, a los personajes del juego podrías preguntar...~"; Recibir: switch (uno) { video: self.recibe_video(); rtrue; pelota: self.recibe_pelota(); rtrue; } SaltarSobre: if (jugador notin self ) "¡Tienes que subirte al altar para saltar sobre él!"; print "Obviando cualquier forma de respeto por el presumiblemente sagrado carácter de tu soporte, saltas jocosamente sobre el altar"; if (children(self)>2) print " (cuidandote de no espanzurrar en el proceso lo que has dejado sobre él)"; "."; ], reaccionar_antes [; Saltar: if (jugador in self ) <>; Dejar: if (jugador in self ) switch (uno) { video: self.recibe_video(); rtrue; pelota: self.recibe_pelota(); rtrue; } ], recibe_video [; move video to self; "Un estremecimiento de inquietud recorre tu ser al considerar la innobleza de profanar un sagrado lugar con tan libertino avalorio."; ], recibe_pelota [; modo_notificar=0; puntuacion =puntuacion+2; banderafin=2; "De pronto te sientes aliviado de la inmensa responsabilidad universal que recaía sobre tus hombros al intuir que..."; ], has soporte estatico entrable; Objeto inscripcion "inscripcion" altar with nombre 'inscripcion' 'cartel' 'grabado', adjetivos 'grabada', descripcion [; switch (children(altar)) { 1: give self general; "Grabada con histórica elegancia puedes leer en la superficie del altar la frase:^~Sagrado Altar de la Pelotita.~"; 2: move self to altar; if (jugador in altar) print "Tus propios pies tapan"; else print (_El) sibling(self)," tapa",(n) sibling(self); print " parte de la inscripción impidiendo leerla con claridad "; if (self has general) "(aunque ya recuerdas lo que ponía)."; else "(algo de nosequé ~...agrd...alt...otit..~ quizá...)."; default: if (jugador in altar) print "Al estar pisandola, no terminas de poder leer con claridad la inscripción"; else print "Los objetos que hay sobre el altar impiden ver con claridad el texto de la inscripción"; if (self has general) " (aunque ya sabes lo que estaba escrito)."; else "."; } ], antes [; SaltarSobre: <>; ], has escenario; Objeto pergamino "pergamino" salon_misterioso with nombre_m 'pergamino' 'lienzo' 'manuscrito' 'papiro' 'papel', nombre_f 'runa', nombre_fp 'runas', genero G_MASCULINO, adjetivos 'viejo' 'vetusto' 'papeloso', descripcion [; if (self has general) "Las runas del pergamino permanecen ininteligibles... mejor así."; else "Vetusto y papeloso lienzo en el que hay grabadas unas antiquísimas runas cuyo significado sobrepasa una medianía de inteligencia como la tuya."; ], describir "He aquí un viejo pergamino.", antes [; Atacar: if (self has general) "Después de lo de antes prefieres no llevarte sorpresas y no hacerle nada al pergamino."; else { give self general; "Ante tus asombrados ojos, antes de romper el pergamino sus incomprensibles runas se reagrupan mágicamente formando un mensaje legible:^^~Si el objetivo de la aventura deseas cumplir...^...mi integridad debes preservar.^Pero si la muerte deseas descubrir...^¡...a echarme en la olla puedes probar!~^^Tras unos momentos de confusión, vuelven a su original estado de indescifrables y arcanos símbolos."; } ]; Objeto telefono "teléfono" salon_misterioso with nombre 'telefono' 'artefacto', descripcion [; if (telefono has escenario) "Interesante artefacto que en su día revolucionó la sociedad por su capacidad de permitir la comunicación a distancia."; else "El teléfono parece estar pidiendo a gritos que lo cojas."; ], describir "¡RIIINNG! suena el teléfono.", antes [; Coger: if (self has escenario) "Está empotrado en la pared y no puedes llevartelo."; else { self.primi(); rtrue; } Colgar: if (self has escenario) "Ya está colgado."; else "Ahora tiene pinta de que lo juicioso, más que colgarlo, sería cogerlo."; Descolgar: if (self has escenario) "Descuelgas el teléfono y te quedas un rato escuchando el pitidito hasta que, aburrido, lo vuelves a colgar."; else { self.primi(); rtrue; } Escuchar: if (self has escenario) "El teléfono no parece emitir sonido alguno."; else switch (localizacion) { oscuro_corredor, habitacion_abandonada: "Oyes el incansable timbre del teléfono desde la estancia contigua."; default: "El timbre del teléfono sugiere que alguien está llamando, podrías cogerlo a ver..."; } Telefonear: if (self has escenario) "¡La verdad es que no se te ocurre a quién llamar ahora por teléfono!"; else "Ahora más bien lo suyo es coger el teléfono antes que ponerse a llamar por él."; ], suma_al_alcance timbre, primi [; give self escenario; ArrancarDaemon(desesperacion); "^~Buenas noches, le llamamos desde el Primijuego por la primera cadena de Televisión Española: ¿Quiere usted jugar conmigo? ¿sí? ¡oops! Ya han pasado los treinta nanosegundos de que disponía para contestar ¡qué mala suerte! pero no deje de jugar al Zodiaco...~"; ], has escenario; Objeto canasta "canasta" habitacion_abandonada with nombre_f 'canasta''cesta', nombre_m 'aro', adjetivos 'baloncestica' 'baloncestera', antes [; Coger: print "Intentas coger la canasta, pero sólo consigues quedarte colgando estúpidamente de ella..."; switch (variable_generica) { 3: "hasta que un pelotazo del poco complacido esqueleto te hace caer estrepitosamente al suelo!"; default: move jugador to canasta; "¡de niño te encantaba hacer estas cosas!"; } Colgarse: switch (parent(jugador)) { canasta: "¡Ya estás colgando de la canasta!"; default: self.jugador_se_cuelga(); move jugador to canasta; rtrue; } Recibir: switch (uno) { pelota: "Te acercas al aro e introduces a traves suyo la pelota limpiamente, lo cual, decididamente, no te produce ninguna sensación de triunfo."; default: "Te complicas enormemente la vida intentando poner ", (el) uno, " en equilibrio sobre el aro sin ningún éxito."; } RecibirLanzamiento: EncestarSub(); rtrue; ], despues [; Meterse: self.jugador_se_cuelga(); rtrue; ], descripcion [; switch (parent(jugador)) { canasta: print "Baloncestera cesta de la que cuelgas, no muy elegantemente"; if (esqueleto has animado) print ", para desesperación del huesudo, que no parece muy conforme con la situación"; "."; default: "Baloncéstica canasta adosada en lo alto de una pared."; } ], jugador_se_cuelga [; print "De un salto te agarras al aro de la canasta balanceando tus pies en el aire, lo cual no sirve mayormente de nada, "; switch (variable_generica) { 3: "excepto poner visiblemente nervioso al esqueleto que quiere tener libre la canasta para jugar con su pelota."; default:"pero ¡te diviertes un montón!"; } ], has femenino escenario soporte entrable abierta; Objeto CD "CD" habitacion_abandonada with nombre 'CD' 'compact' 'disk' 'disco' 'meteors' 'libreto', descripcion "¡Música verbenera para aventuras rocanroleras!", describir "Ves un CD de los Meteors.", antes [; Escuchar: "¡Como no cantes tú... no tienes nada con lo que escuchar las canciones del CD!"; ]; Objeto video "video" lugubre_camara with nombre_m 'video' 'vhs', nombre_f 'cinta' 'pelicula' 'peli', nombre_corto "video porno", genero G_MASCULINO, adjetivos 'porno' 'erotico' 'pornografico' 'erotica' 'pornografica', descripcion "Pornográfica película titulada ~¡1001 ideas prácticas y sugerentes para realizar con una pelota!~", describir "Por aquí ves un video porno."; Objeto pelota "pelota" oscuro_corredor with nombre_f 'pelota' 'pelotita' 'bola', nombre_m 'balon' 'esferico', genero G_FEMENINO, descripcion [; switch (variable_generica) { 0: "Debajo de la panza del monstruo asoma un trozo de sonrosada e inalcanzable pelotita."; 3: switch (parent(jugador)) { canasta: "Reposa en las nerviosas manos del esqueleto."; default: "Rebota elegantemente por las paredes al compás del rítmico juego del esqueleto."; } default: "Pelotera pelota de las que botan y botan."; } ], describir "Ves una pelotita.", antes [; Tocar: if (self in esqueleto) "El esqueleto es muy celoso de su pelota y no parece pretender permitirlo."; else if (variable_generica==0) "Apenas alcanzas a tocar la bola sobre la que sestea el monstruo."; else "Gomoso tacto de pelota de buena calidad ¡dan ganas de jugar con ella!"; Coger: switch (variable_generica) { 0:"Uuups, imposible sacar la pelota de debajo de la inmensa mole monstruosa."; 3:"Por un momento te planteas quitarle la pelota al esqueleto por la fuerza... ¡noooo!"; } Dejar: if (hada.hada_se_fue==1) "La Pelotita, reconociendo mágicamente en tí al heroico salvador del universo que ha de devolverla a su santuario, rebota majestuosamente en el suelo regresando suavemente a tus brazos."; Desear: if (pelota notin jugador) "De momento no parece que a fuerza de desearla la vayas a conseguir..."; Escuchar: if (self in esqueleto) <>; else "La pelota no emite, por sí misma, ningún sonido perceptible."; Botar: if (esqueleto.contador>0) <>; print "^ ¡¡Bota, bota,^ mi pelota,^ que en la acera^ siempre bota!!^^Recitas con exultante alegría la coplilla infantil mientras el rebotar de la pelota provoca resonantes ecos por las paredes."; if ((localizacion==habitacion_abandonada) &&(variable_generica < 3)) "^¡No puedes evitar la sensación de que el esqueleto observa atentamente tus progresos pelotísticos!"; rtrue; Jugar: if (self in jugador) switch (localizacion) { habitacion_abandonada: <>; default: if ((localizacion==oscuro_corredor) && (variable_generica==1)) <>; else switch (esqueleto.contador) { 0: "Te pones a botar la pelota con abandono y despreocupación... ¡Aah, la feliz infancia...!"; default: "Si el vociferante esqueleto te pilla jugando con su pelota... vaya, ¡tendrías un problema!"; } } else "Deberías coger la pelotita para jugar a algo con ella."; Patear: switch (parent(pelota)) { esqueleto: "Probablamente el esqueleto se enfadaría muuuucho si pateases su pelota."; oscuro_corredor: if (variable_generica==0) "Intentas pegar un balompédico pepinazo a la pelota pero, para tu espanto, sólo consigues acertar en el monstruo... quien suelta un somniolento gruñido sin inmutarse mayormente... ¡uuf!"; default: print "Chutas enérgicamente la pelota, la cual sale volando y, tras rebotar limpiamente por las paredes, regresa suavemente a tus manos... ¿cómo lo habrá hecho?"; if ((monstruo in localizacion) && (variable_generica==1)) "^Al monstruo parecen darle ataques de ansiedad al ver la pelotita:^~¡Pelotaa, pelotaa, BUUAAAA!"; if (esqueleto.contador>0) "^¡Oh no! el ruido atrae la atención del enfadado esqueleto."; rtrue; } ], has escenario; Objeto cabeza "cabeza" monstruo with nombre 'cabeza' 'testa', descripcion "Ciertamente, la cabeza del monstruo es tan horrible como el monstruo propiamente dicho.", antes [; Atacar: <>; Tocar: <>; ], has femenino escenario; Objeto panza "panza" monstruo with nombre 'panza' 'tripa' 'barriga', descripcion [; switch (variable_generica) { 1: "La panza del monstruo se agita frenéticamente en concordancia con sus pesarosos aullidos."; default: "La barriga del monstruo se balancea suavemente al compás de sus ronquidos."; } ], antes [; Atacar: <>; Tocar: <>; ], has femenino escenario; Objeto piel "piel" monstruo with nombre_f 'piel' 'escama' 'pelleja', nombre_fp 'escamas', nombre_m 'pellejo', genero G_FEMENINO, adjetivos 'escamosa' 'verdosa' 'verde' 'monstruosa' 'humeda' 'rugosa', descripcion "Escamosa y verdosa es la monstruosa piel del horripilante monstruo.", antes [; Tocar: <>; ], has femenino escenario; Objeto llantos "llantos" with nombre_m 'llorar' 'lloro' 'lloriqueo' 'llanto' 'gimoteo' 'quejido' 'alarido', nombre_mp 'lloros' 'lloriqueos' 'llantos' 'gimoteos' 'quejidos' 'alaridos', genero G_MASCULINO + G_PLURAL, antes [; Escuchar: if (variable_generica==1) <>; else "¡Pero si ahora el monstruo no está llorando!"; default: ImposibleSub(); rtrue; ], has escenario; Objeto agitacion "agitacion" with nombre 'agitacion', antes [; Escuchar: <>; default: ImposibleSub(); rtrue; ], has femenino escenario; Objeto timbre "timbre" with nombre 'timbre', antes [; Escuchar: if (telefono hasnt escenario) <>; else "Por aquí no oyes ningún timbre."; default: ImposibleSub(); rtrue; ], has escenario; Objeto ronquidos "ronquidos" with nombre_m 'ronquido' 'roncar', nombre_mp 'ronquidos', genero G_MASCULINO + G_PLURAL, antes [; Escuchar: if (variable_generica==1) "¡Pero si ahora el monstruo no está roncando!"; else <>; default: ImposibleSub(); rtrue; ], has escenario; Objeto rugidos "rugidos" with nombre_m 'rugido' 'grito', nombre_mp 'rugidos' 'gritos', adjetivos 'extraño' 'extraños', genero G_MASCULINO + G_PLURAL, antes [; Escuchar: <>; default: ImposibleSub(); rtrue; ], has escenario; Objeto eco "eco" with nombre 'eco' 'rebotar', antes [; Escuchar: <>; default: ImposibleSub(); rtrue; ], has escenario; Objeto pared "pared" with nombre_f 'pared', nombre_fp 'paredes', nombre_m 'muro', nombre_mp 'muros', descripcion "Petreos y mohosos muros confinan estos encantados pasillos.", antes [; Tocar: "Los petreos y mohosos muros te devuelven su petreo y mohoso tacto."; ], esta_en [; rtrue; ], has transparente femenino escenario; Objeto moho "moho" pared with nombre 'moho', adjetivos 'verde' 'verdoso', descripcion "Rastros de verdoso moho esparcidos por las paredes denotan la antiguedad de la estancia.", antes [; Tocar: <>; ], has escenario; Objeto sitio "sitio" with nombre_f 'habitacion' 'estancia' 'camara' 'sala', nombre_m 'salon' 'corredor' 'sitio' 'lugar' 'pasillo' 'pasillos', adjetivos 'misterioso' 'lugubre' 'abandonada' 'oscuro' 'extraña', descripcion [; <>; ], esta_en [; rtrue; ], has escenario; Objeto marmol "marmol" with nombre 'marmol' 'superficie', adjetivos 'marmoleo' 'marmolea', descripcion [; <>; ], esta_en [; rtrue; ], antes [; BesarInanimado: <>; ], has escenario; Objeto varita "varita" hada with nombre 'varita' 'vara', descripcion "Varita encantada de esas que utilizan las hadas para hacer virguerías mágicas.", has femenino transparente; Objeto olla "olla" lugubre_camara with nombre_f 'olla' 'caldera' 'marmita' 'cazuela', nombre_m 'caldero' 'cazo' 'crepitar' 'burbujeo' 'gorgojeo' 'hervidero', adjetivos 'hirviente', descripcion "Humeante caldero de gran tamaño y rebosante de hirvientes y conjurosos brebajes.", describir, antes [; Escuchar: <>; BuscarEn: "No se distingue nada entre los humos de los pocimosos brebajes."; Meterse: "¡Ni en sueños cometerías semejante locura...!"; Oler: <>; Recibir: if (self has general) { switch (self.items) { 0: print "Bueno, decides probar a ver qué pasa de todos modos...^"; 1: print "Ya puestos a corroer cosas, pruebas otra vez...^"; 2: print "Le has pillado el gusto a esto de la desintegración ácidocorrosiva...^"; default: print "Decididamente, te encanta hacer desaparecer las cosas espectacularmente...^"; } self.items ++; switch (uno) { pelota: remove uno; ArrancarDaemon(desesperacion); "¡Chof! arrojas alegremente la pelota a la pocionera marmita y... compruebas estupefacto como la bola se disuelve burbujosa y ruidosamente en sus ácidos contenidos..."; pergamino: banderafin=1; "Ante el asombro primero, y desesperación después, del ancianoso vejestorio, arrojas con indiferencia el pergamino a la hirviente cazuela.^ El viejo, con un marcado rictus de alienación, se lanza hacia él aullando incomprensibles incoherencias con tan arrebatado impulso que cae, arrastrandote consigo, al interior de la marmita.^ La muerte por descomposición ácida es rápida, divertida y con ciertas notas caleidoscópico-psicodélicas, pero su resultado final es el mismo de todas..."; default: remove uno; "¡Uooops! ",(el) uno, " se descompone y volatiliza en una nube de humos crepositantes y sulfurosos."; } } else { give self general; "Al observar el corrosivo burbujeo de los líquidos de su interior, piensas que no es buena idea andar metiendo cosas dentro de la olla."; } Coger, Empujar: "El peso de la olla la hace inamovible... ¡y además quema!"; MirarDebajo: "Si hubiera algo de interés bajo la olla no podrás saberlo mientras su peso impida comprobarlo."; Tocar, BesarInanimado, Probar: "¡Ouch, queeeeemaaa!"; Vaciar: "No se te ocurre ningún modo de vaciar la olla... ¿volcandola quizás?"; Volcar: <>; ], items 0, has abierto escenario estatico femenino recipiente; Objeto brebajes "brebajes" olla with nombre_m 'brebaje' 'liquido' 'potingue', nombre_f 'pocion' 'pocima' 'coccion', nombre_mp 'brebajes' 'liquidos' 'potingues', nombre_fp 'pociones''pocimas', adjetivos 'mareante' 'mareantes' 'corrosivo' 'corrosivos' 'corrosiva' 'corrosivas', descripcion "Hedionda pócima de cualidades netamente mareantes y crepitar plausiblemente corrosivo.", antes [; Beber, probar: "La absoluta impotabilidad de semejante hervidero está fuera de toda cuestión."; BesarInanimado: "¡Qué locura es esa!"; Coger: "Los líquidos brebajes de la olla son un efecto dificilmente cogestible."; Oler: <>; ], genero G_MASCULINO + G_PLURAL, has escenario; Objeto humo "humo" lugubre_camara with nombre 'humo' 'vapor' 'vaporcillo', adjetivos 'humoroso', descripcion "Humoroso vaporcillo desprendido por la ardiente cazuela.", antes [; Atacar, BesarInanimado, Coger, Empujar, Tocar: "¡El humo se escabulle entre tus dedos sin dejarse atrapar!"; Oler: <>; Patear: "Tu certera patada atraviesa el humo sin mayor efcto."; ], has escenario; Objeto fuego "fuego" lugubre_camara with nombre_m 'fuego', nombre_f 'brasa' 'ascua', nombre_fp 'ascuas' 'brasas', genero G_MASCULINO, descripcion "Unas pequeñas brasas bajo la olla alimentan la cocción en su interior.", antes [; Atacar, BesarInanimado, Coger, Empujar, Tocar, Patear: "¡AYAYAYAYAY... quemaaa!"; ], has escenario; Objeto sangre "sangre" with nombre 'sangre''hemoglobina', adjetivos 'roja', descripcion "El glotón monstruo incluso relamió el charco de sangre del que apenas quedan restos.", antes [; Comer, Beber, BesarInanimado, Probar: "¡Refrena tus tendencias vampíricas, por Dios!"; ], has femenino escenario; Objeto ropajes "ropajes" anciano with nombre_mp 'ropajes' 'vestidos', nombre_fp 'ropas' 'vestimentas', nombre_f 'ropa' 'vestimenta', nombre_m 'ropaje' 'vestido', genero G_MASCULINO + G_PLURAL, descripcion "Hechicerales ropajes para un hechiceroso anciano.", antes [; Coger, Sacar: <>; ], has prenda; Objeto desesperacion "desesperacion" with nombre 'desesperacion', contador 0, daemon [; self.contador ++; switch(self.contador) { 2: "^Por algún indeterminado motivo sospechas que la acabas de pifiar profundamente."; 4: "^La inquietud crece en tu interior al temer que has perdido tu última oportunidad de recuperar la pelotita."; 6: banderafin=3; print "^La desazón te consume mientras asumes la imposibilidad de terminar tu misión...^Carente de motivación, deambulas durante siglos por estos absurdos pasillos hasta que tu cuerpo se acurruca "; if (extrana_estancia has visitado) print"bajo el altar"; else print "en la lúgubre cámara"; " en estado de hibernación eterna...^Al cabo de los milenios tu espíritu se hace uno con el universo..."; } ], ; Objeto alturas "alturas" brujula with nombre 'alturas', antes [; MirarHacia, Examinar: <>; ], direcc_puerta arriba, has femenino nombreplural escenario; !**************************************** !*********** OBJETOS ETEMAS *********** !**************************************** Objeto temas; Objeto pocimas "pocimas" temas with nombre 'pocimas' 'pocima' 'potingues' 'potingue' 'pocion' 'pociones' 'brebaje' 'brebajes' 'liquido' 'liquidos'; Objeto caldera "caldera" temas with nombre 'caldera' 'caldero' 'olla' 'marmita' 'cazo'; Objeto cinta "cinta" temas with nombre 'video' 'vhs' 'cinta' 'pelicula' 'peli' 'sexo' 'porno' 'erotico' 'pornografico'; Objeto compact "compact" temas with nombre 'compact' 'cd' 'meteors'; Objeto huesos "huesos" temas with nombre 'huesos' 'esqueleto' 'huesudo' 'calavera' 'cadaver' 'muerto'; Objeto bola "bola" temas with nombre 'bola' 'pelota' 'pelotita' 'balon' 'esferico'; Objeto peticion "peticion" temas with nombre 'peticion ''deseo' 'deseos'; Objeto polita "polita" temas with nombre 'hada' 'polita' 'poli' 'flores'; Objeto rockersuk "rockersuke" temas with nombre 'rockersuke' 'rocker' 'moroboshi' 'rml' 'programador' 'creador' 'autor'; Objeto tema_telefono "telefono" temas with nombre 'telefono'; Objeto vara "vara" temas with nombre 'vara' 'varita'; Objeto bicho "bicho" temas with nombre 'bicho' 'criatura' 'monstruo' 'monstruito'; Objeto viejo "viejo" temas with nombre 'viejo' 'anciano' 'hechicero' 'hechizero' 'brujo' 'mago' 'vejestorio' 'matusaleno'; Objeto papiro "papiro" temas with nombre 'papiro' 'pergamino' 'papel' 'lienzo' 'manuscrito' 'conjuro' 'conjuros' 'mamparonecio' 'mamparonecios' 'melandronalino' 'melandronalinos'; Objeto tema_baloncesto "baloncesto" temas with nombre 'baloncesto' 'basket' 'basket-ball' 'encestar' 'pelota'; Objeto tema_numero "numero" temas with nombre 'numero'; !********************************* !*********** RUTINAS *********** !********************************* [ inicializar; localizacion=habitacion_abandonada; variable_generica=0; techo_besado=0; encestamientos=0; xyzzy_var=0; ]; [Curiosidades; print "-SOBRE CANASTAS Y PUNTUACIONES:^^"; switch (encestamientos) { 0: print " ¡No has marcado ningún punto en la canasta de Baloncesto!"; 1: print " Has encestado la pelota en la canasta una vez."; default: print " Has encestado la pelota en la canasta un total de ", (numero) encestamientos," veces."; } print "^La habilidad del protagonista a la hora de encestar evoluciona según sus aciertos. Comienza siendo un absoluto negado (lanzamientos y lanzamientos sin éxito) a dominar por completo el arte baloncestero (100% de canastas).Todo es cuestión de perseverar. Por supuesto, tal alarde de simulacionismo desatado sólo sería verdadero si la máquina Z ofreciese una función de aleatoriedad real, que tengo entendido que no es el caso.^La orden ~canasta~ o ~canastas~ te daría en cualquier momento el número de veces que lo hayas logrado con éxito, los cuales a su vez se reflejan automáticamente en la puntuación del juego.^Por supuesto, no influye para nada en el resultado de la nano-aventura (y además sólo se puede hacer en un momento determinado de ella).^ Cada canasta vale dos puntos. Se pueden conseguir otros dos puntos adicionales a los que marques encestando por finalizar correctamente el juego (¡cosa que, si estás leyendo esto sin mirar el código fuente, acabas de hacer!) y un punto más (se notaría por tener una puntuación impar) si se descubre a lo largo de la aventura el nick con el que su autor postea en la lista de correo del CAAD.^ Pista: mirar debajo de las cosas podría dar alguna indicación."; print "^(Añadido en la revisión 5: la acción ~xyzzy~ da (o quita) al jugador la habilidad de encestar siempre salvo que ya la hubiera obtenido a base de entrenamiento, en cuyo caso no tendría mayor efecto.)"; print "^^-AGRADECIMIENTOS:^^ A todos los miembros de las listas de correo CAAD e InformATE simplemente por estar ahí, y en particular a Zak McKraken por las librerías Etemas y BajoNivel, y a Jenesis (¡síí, se escribe así!) por su tiempo de betatesteo.^"; ]; [RutinaMirar; if (banderafin~=3) SalidasSub(); ]; [ MensajeMuerte; if (banderafin==3) "Hasta aquí has llegado, muchacho ¿Lo intentas de nuevo?^^"; ]; [MirarHaciaSub; switch (uno) { obj_arriba: "Escudriñas con tu sagaz vista las alturas, pero no puedes distinguir nada en la ominosa oscuridad."; obj_abajo: print"Marmolea pero sin pulir es la superficie sobre la que tus pies se sustentan "; if (jugador in canasta) print ",ahora figuradamente, "; else print "con firmeza "; "en este alocado entorno."; default: M__L (##MirarHacia, 0, uno); } ]; [AyudaSub eleccion; do { print "^Temas de ayuda (teclea ~0~ para seguir el juego):^^-[1] Sobre las ficciones interactivas.^-[2] Acciones más comunes en las aventuras.^-[3] Sobre las nanoaventuras y ~La Pelotita~.^-[4] Sobre el objetivo de esta aventura.^^"; #ifdef TARGET_ZCODE; read buffer parse DibujarLineaEstado; #ifnot; KeyboardPrimitive(buffer, parse); #endif; eleccion = IntentarNumero(1); } until ((eleccion >= 0) && (eleccion <= 4)); switch(eleccion) { 1: print " SOBRE LAS FICCIONES INTERACTIVAS:^^"; print " Una ~ficción interactiva~, también popularmente conocidas como ~aventuras conversacionales~, es un relato, normalmente escrito, en el que la narración avanza en función de la iniciativa del lector (al que se puede, y suele, también denominar ~jugador~), quien podría influir con sus decisiones, siempre según el criterio del autor, en el orden, desarrollo, y hasta en el desenlace de la historia.^^"; print " El modo en que el jugador expresa sus actos dentro de la aventura se basa en un modelo que, dentro de las limitaciones actuales de los ordenadores, trata de parecerse lo más posible al lenguaje natural, aunque en la practica se ciñe a un esquema de ~acción~ + ~objeto sobre el que se realiza esa acción~, o, en los casos más básicos ~verbo en infinitivo~ + ~objeto directo~. Ejemplos:^^"; print " ~Coger espada~^"; print " ~Matar Dragón~^"; print " ~Examinar tesoro~^^"; print " Aunque la mayoría de los programas ya admiten frases un poco más elaboradas como ~coge la espada~, ~examina al dragón y atacaló~, ~dale el tesoro a tu escudero~ y similares, se recomienda no dejar de incluir en el orden más claro posible la secuencia ~acción - objeto~ para tener la mayor probabilidad posible de comprensión. Si todo ha funcionado bien, tras teclear una orden de este tipo, el programa responderá con la información relevante o las consecuencias, si las hubiera, de las acciones expresadas por el jugador.^"; rtrue; 2: " ACCIONES MÁS COMUNES EN LAS AVENTURAS:^^Existen una serie de comandos clásicos comunes a la inmensa mayoría de las ficciones interactivas cuyo conocimiento es de particular utilidad e interés para los recién llegados a este tipo de juegos:^^-INVENTARIO (abreviado ~i~) : muestra la lista de objetos que el jugador lleve encima o haya recogido durante su recorrido.^-AYUDA : puede mostrar información sobre el juego.^-EXAMINA ~objeto~ (abreviado ~x objeto~) : da una descripción, si procediera, del objeto en cuestión.^-N, S, E, O : abreviaturas de los puntos cardinales. Son la forma más común de movimiento y no son más que una forma rápida de decir ~ir norte~ o ~ve hacia el sur~, también suelen funcionar ~sube~ o ~baja~, si hubiera caminos que recorrer en esas direcciones.^-MIRA (abreviado ~m~) : describe el conjunto del entorno en que se halle el jugador en ese momento.^-SALIDAS (abreviado ~x~) : puede mostrar las salidas disponibles desde la ubicación actual del jugador.^-SALVAR : guarda en un fichero la situación actual del juego, que podría recuperarse en cualquier otro momento.^-CARGAR : recupera desde un fichero una partida guardada con el comando anterior.^-HABLAR con ~personaje~, DAR ~objeto~ a ~personaje~, PREGUNTAR ~personaje~ sobre ~tema~, HABLAR con ~personaje~ sobre ~objeto~, ENSEÑAR ~objeto~ a ~personaje~... y multiples variantes posibles : son algunas de las diversas maneras habituales de tratar de interactuar con los personajes que puedan aparecer a lo largo del juego... ¡siempre que ellos estén por la labor de hacer caso!^^Y muchos más... que el jugador podrá ir descubriendo a medida que vaya resolviendo la aventura."; 3: " SOBRE LAS NANOAVENTURAS Y LA PELOTITA:^^ ~La Pelotita~ es lo que se conoce como una ~nanoaventura~, un género de aventuras conversacionales caracterizado por su extrema brevedad o por su caracter experimental, ya fuera por que en ella el autor ensaya nuevas técnicas de juego o programación o por el caracter abiertamente transgresor o surrealista del argumento. En su primera encarnación, presentada para la tercera competición de nanoaventuras española o Nanocomp III, ~La Pelotita~ era un fichero preparado para ejecutarse en cualquier emulador de Spectrum en el que el autor ensayaba la implementación en Basic de 48k de un sistema de aventura textual guiada exclusivamente por menús (similar al de la injustamente criticada en su día ~Aventura Espacial~ de la histórica firma española ~Aventuras AD~) y experimentaba sobre la viabilidad y jugabilidad del resultado. En su forma actual, ~La Pelotita~ es el mismo argumento plasmado en una aventura con un interface ~clásico~ de teclear las acciones, todo ello realizado con la intención de comparar tanto la distinta sensación de juego para el jugador como los distintos tipos de problemas que tiene que resolver el programador.^ La minimalista trama se limita a que el jugador aparece, sin mayor explicación, en un misterioso entorno y, caso de que teclease el comando ~ayuda~ recibe la escueta información de que su objetivo consiste en colocar un determinado objeto en la localidad que le corresponda. El resto del (escaso) desarrollo es, por supuesto, puro desvarío aleatorio."; 4: print "El objetivo de la aventura es dejar la pelotita en su lugar correspondiente"; if ((hada.hada_se_fue==1) && (pelota in esqueleto)) ", aunque presientes que has dejado escapar tu última oportunidad de recuperarla sellando eternamente la aventura de tu destino."; "."; default: rtrue; } ]; [BesarInanimadoSub; switch (uno) { obj_arriba: "Por más que te estiras, no eres lo bastante alto como para besar el techo."; obj_abajo: "¡Por fin! Tantos años de examinar y estudiar detenidamente todos los videos de los viajes de Karol Wojtyla dan sus ansiados frutos."; default: "Gastas saliva con futilidad besando apasionadamente ", (al) uno,"."; } ]; [BotarSub; print (_El) uno," no resulta un elemento particularmente botable.^"; ]; [CanastaSub; print "Hasta el momento "; switch (encestamientos) { 0: "no llevas ninguna canasta marcada a lo largo de la aventura."; 1: "llevas una canasta anotada."; default: "llevas ", (numero)encestamientos, " encestamientos realizados."; } ]; [EncestarSub probabilidad; switch (localizacion) { habitacion_abandonada: switch (otro) { nothing, canasta: switch(uno) { pelota: if (jugador in canasta) "Encestar la pelota subido a la propia canasta resultaría inútil, incómodo, y escasamente satisfactorio."; print "Arrojas el balón hacia la canasta y...^"; probabilidad=10-encestamientos; if (xyzzy_var) probabilidad=0; switch (random(probabilidad)) { 0,1: encestamientos ++; modo_notificar=0; puntuacion=puntuacion+2; print "¡Contra todo pronóstico la pelota atraviesa limpia y elegantemente el aro en una espectacular jugada... de la que nadie ha sido testigo! (pero te cuelgas igual de la canasta por la emoción)."; move jugador to canasta; default: print "¡Con tu habilidad habitual lo envías al extremo opuesto de la habitación! "; } move pelota to localizacion; move esqueleto to localizacion; "^La pelotita queda rodando alegremente por el suelo."; default: print "Uuups, ", (el) uno, " no resulta un elemento particularmente encestable.^"; } default: "¡En ",(el) otro ," no se puede encestar nada!"; } default: "¡Aquí no hay ningún sitio donde se pueda encestar nada!"; } ]; [Encestar_canastaSub; if (pelota in jugador) { uno=pelota; EncestarSub(); } else "No llevas nada encestable en el sentido baloncestero del término."; ]; [ColgarseSub; "No puedes colgarte ", (del) uno,"."; ]; [ColgarSub; "No puedes colgar ", (al) uno, " de ningún sitio."; ]; [DescolgarSub; print_ret (_El) uno, " no se puede",(n) uno, " descolgar."; ]; [JugarSub; "No se te ocurre ningún modo especialmente divertido de jugar con ", (el) uno,"."; ]; [MarcarSub tema; switch (localizacion) { salon_misterioso: tema=AveriguarTema(temas); switch (tema) { tema_numero, tema_telefono: <>; default: "No parece ser posible."; } default: "No hay nada marcable por aquí."; } ]; [DesearSub; switch (uno) { nothing: if (hada in salon_misterioso) "Desear, desear... huum... ¡El hada del salón misterioso parece predispuesta a que le pidas un deseo!"; else "Ten cuidado con tus deseos... podrían volverse realidad."; default: if (uno has animado) <>; if (uno in jugador) "¡Ya tienes ", (un) uno, "!"; else "Desear ", (un) uno, " no te servirá de gran cosa."; } ]; [PatearSub; if (uno has animado) <>; else "No me seas bruto y no malgastes energías dandole patadas ", (al) uno, "."; ]; [TelefonearSub; "¡No puedes llamar por ", (el) uno, " a ningún sitio!."; ]; [SentarseSub; if (uno==nothing) uno=obj_abajo; if (esqueleto.contador>0) "¡No es el momento de sentarse y tomarse las cosas con calma!"; switch (uno) { obj_abajo: if (jugador in localizacion) "Te sientas en el suelo a descansar un ratito para luego continuar con renovadas energías... ¡qué bien!"; else <>; default: <>; } ]; [VolcarSub; if (uno has animado) <>; else "No le encuentras mucho sentido práctico a la idea de volcar eso."; ]; [ImprimirRango; print ", lo que te otorga el rango de "; switch(puntuacion) { 0 to 10: "aprendiz de nano-aventurero."; 11 to 20: "nano-aventurero medianamente curtido."; 21 to 30: "impagable y valeroso encestador."; 31 to 40: "fulgurante estrella de la NBA."; default: "nano-aventurero Michael Jordan."; } ]; [canasta_check; if (uno==canasta) rtrue; else rfalse; ]; [ImposibleSub; "¡Interesante imposibilidad esa que propones!"; ]; [Alcance_Escuchar; switch (estadio_alcance) { 1: rfalse; 2: if (esqueleto.contador>0) PonerAlAlcance (esqueleto); switch (localizacion) { oscuro_corredor: if (variable_generica==2) PonerAlAlcance (agitacion); if (telefono hasnt escenario) { PonerAlAlcance (telefono); PonerAlAlcance (timbre); } if (monstruo in lugubre_camara) { PonerAlAlcance (monstruo); if (variable_generica ~=2) PonerAlAlcance (ronquidos); } habitacion_abandonada: if (variable_generica==2) PonerAlAlcance (rugidos); if ((pelota in esqueleto) && (jugador notin canasta)) PonerAlAlcance (eco); if (telefono hasnt escenario) { PonerAlAlcance (telefono); PonerAlAlcance (timbre); } } rfalse; 3: "No oigo eso que dices."; } ]; [EscucharSub; switch (uno) { nothing: if (esqueleto.contador>0) "Los amenazantes gritos del esqueleto recorren todas las estancias."; else "No escuchas nada inesperado."; default: print_ret (_El) uno, " no produce",(n) uno," sonidos extraños."; } ]; [XyzzySub; if (encestamientos>10) "No sucede nada de particular."; print "De repente te sientes... ¡como más "; switch (xyzzy_var) { 1: xyzzy_var=0; "bajo!"; default: xyzzy_var=1; "alto!"; } ]; !*********************************** !*********** GRAMÁTICA *********** !*********************************** include "Gramatica"; Verb meta 'ayuda' * -> Ayuda; Verb 'bota' * -> Saltar * held -> Botar; Verb 'canasta' 'canastas' * -> Canasta; Verb 'encesta' * noun= canasta_check -> Encestar_canasta * noun=canasta_check 'en//' noun -> Encestar_canasta * held -> Encestar * held 'en//' noun -> Encestar; Verb 'cuelga' 'cuelgate' * noun -> Colgar * 'de//' noun -> Colgarse; VerboIrregular "colgar" with imperativo 'cuelga' 'cuelgate'; Verb 'descuelga' * noun -> Descolgar; Verboirregular "descolgar" with imperativo 'descuelga'; Verb 'llama' * 'por//' noun -> Telefonear; Verb 'marca' * topic -> Marcar; Verb 'desea' * -> Desear * noun -> Desear * topic -> Desear; Verb 'juega' * topic 'con//' noun -> Jugar * 'con//' noun -> Jugar * 'con//' noun 'a//' topic -> Jugar; Verboirregular "jugar" with imperativo 'juega'; Verb 'relame'= 'lame'; Verb 'chuta' = 'patea'; Verb 'vuelca' * noun -> Volcar; Verboirregular "volcar" with imperativo 'vuelca'; Verb 'xyzzy' * -> Xyzzy; Extend 'besa' * noun -> BesarInanimado * 'a//' noun -> BesarInanimado; Extend 'pide' * 'a//' creature topic -> Pedir * topic 'a//' creature -> Pedir reverse; Extend 'sienta' replace * -> Sentarse * 'en' noun -> Sentarse; Extend 'da' first * 'una' 'patada' 'a//' noun -> Patear * 'patada' 'a//' noun -> Patear; Extend only 'patea' replace * noun -> Patear * 'a//' noun -> Patear; Extend 'escucha' replace * -> Escuchar * 'a//' scope=Alcance_Escuchar -> Escuchar * scope=Alcance_Escuchar -> Escuchar;