!================================================================ Constant Historia "^^La Sentencia"; Constant Titular "^(c) 1999 Pedro Ángel Ala.^^"; !================================================================ Constant ADMITIR_INFINITIVOS; Constant HAY_CURIOSIDADES; [ Curiosidades; "Este juego es una adaptación casi literal del relato ~El pozo y el péndulo~ de Edgar Allan Poe. Las diferencias con el relato se deben a las limitaciones de la mini-comp. Si no has leído ese relato, leelo ahora y disfruta comparándolo con el juego.^^ El nombre del autor ~Pedro Ángel Ala~ es falso. Se trata de un seudónimo construido mediante el cambio de orden de las letras de ~Edgar Allan Poe~. Si quieres conocer el nombre del verdadero autor del juego, salta al pozo siendo un pirata (si no entiendes esta frase mistificadora, observa la lista de opciones del programa Frotz).^^ Aunque el juego en sí es bastante lineal (sólo hay una solución posible a cada rompecabezas), el orden en que ejecutas los comandos afecta a las descripciones. Intenta jugarlo de nuevo y probar otras cosas o en otro orden. El texto de respuesta a una misma acción puede variar.^^ Existen cinco muertes diferentes ¿las has descubierto todas?"; ]; ! Constantes para identificar diferentes estados del jugador Constant TIRADO_AL_PRINCIPIO = 1; Constant DE_PIE_AL_PRINCIPIO = 2; Constant JUNTO_A_LAS_PAREDES = 3; Constant JUNTO_AL_POZO = 4; Constant ATADO_A_LA_TABLA = 5; Constant LIBERADO_DE_TABLA = 6; Constant EN_CELDA_MENGUANTE = 7; ! Estados de las ratas Constant RATAS_APARECIENDO = 1; Constant RATAS_OLIENDO = 2; Constant RATAS_ACERCANDOSE = 3; Constant RATAS_COMIENDO = 4; Constant RATAS_TERMINANDO = 5; Constant RATAS_ALEJANDOSE = 6; Constant RATAS_DESAPARECIDAS = 7; Constant RATAS_NO_HAY = 8; Constant RATAS_MERODEANDO = 9; Constant RATAS_ROYENDO = 11; Constant RATAS_ESPERANDO = 12; Constant RATAS_HAN_HUIDO = 13; !**************************************************************** ! Inclusion del parser y definicion de una nueva rutina para dibujar ! la linea de estado. Replace DibujarLineaEstado; Include "EParser"; ! Una linea de estado que simplemente pone centrado el titulo de la ! habitación, sin puntuación ni movimientos [ DibujarLineaEstado j width; width = 0->33; if (width == 0) width = 80; font off; @split_window 1; @buffer_mode 0; @set_window 1; style reverse; @set_cursor 1 1; spaces(width); texto_impreso-->0 = 64; @output_stream 3 texto_impreso; print (name) localizacion; @output_stream -3; j=(width-(texto_impreso-->0))/2; @set_cursor 1 j; print (name) localizacion; spaces(j-1); style roman; @buffer_mode 1; @set_window 0; font on; ]; !**************************************************************** ! El objeto MensajesLibreria sirve para modificar las respuestas por ! defecto de la libreria. Debe escribirse entre el Include "EParser" y ! el include "Acciones" Object MensajesLibreria with antes[; Miscelanea: switch(ml_n) { 26: rtrue; 30: "Hasta donde alcanza tu entendimiento, no hay nada aquí que responda a ese nombre."; ! COGE XADI 39: "No puedes ocuparte de eso ahora."; ! Actuar sobre lo irrelevante 44: "No hay nada a tu alrededor."; ! "Coge todo" si no hay nada } Mirar: if (ml_n>4) { if (localizacion ofclass CeldaOscura) print "^Sabes que "; else print "^Ves que "; if (ml_o~=localizacion) { if (ml_o has soporte) print "sobre "; else print "en "; print (el) ml_o; } else print "aquí "; if (n==5) print "también "; print "hay "; EscribirListaDesde(child(ml_o), ESPANOL_BIT + BANDERAUX_BIT + RECURSIVO_BIT + INFOPARCIAL_BIT + BREVE_BIT + OCULTAR_BIT); if (ml_o~=localizacion) "."; "."; } Tocar: if (ml_n==3) ! Tocarse a sí mismo <>; Dormir: "Tu cuerpo te pide dormir, pero temes que si cedes a esta necesidad fisiológica tus verdugos aprovechen para tenderte alguna trampa más insidiosa aún."; Cantar: "La demencia empieza a apoderarse de tu mente. Tienes que hacer grandes esfuerzos por controlarla."; Trepar: "Las paredes son lisas y resbaladizas. No consigues nada."; Tacos: "Lo desesperado de la situación te hace perder tu normal compostura y jurar de forma innoble."; Nadar: "No puedes nadar sin agua."; Quemar: "No hay nada aquí con lo que hacer fuego."; MirarDebajo: if (localizacion ofclass CeldaOscura) "No ves nada en esta oscuridad."; "No hay nada que pueda servirte."; Frotar: "Frotas ", (el) ml_o, " con las manos, sin lograr resultado alguno."; PonerSobre, Meter: if (ml_o==tabla) "Para poner la tabla en otro lugar tendrías que levantarla, pero pesa demasiado. Sin embargo parece factible empujarla."; Puntuacion: if (banderafin==1) "La inquisición ha terminado contigo."; if (banderafin==2) "Has logrado sobrevivir a tu condena."; "En este juego no hay puntuación. Trata de seguir vivo el máximo tiempo posible."; ]; ! Proporcionamos una funcion ImprimirRango, antes de incluir Acciones, ! para sustituir a la que venia por defecto, que escribia "." La ! nuestra no escribirá nada de nada. [ ImprimirRango; ]; ! Finalmente, reemplazamos la rutina de la accion Lugares. Normalmente ! esta rutina produce una lista de los lugares en que el jugador ha ! estado, pero en este juego resulta inadecuado. Replace LugaresSub; [ LugaresSub; "Has visitado muchos lugares antes de venir a parar a esta lúgubre mazmorra. Probablemente no visitarás ningún lugar más."; ]; ! Inclusion de los restantes ficheros de cabecera Include "Acciones"; Include "Gramatica"; !**************************************************************** ! COMIENZA EL LISTADO PRINCIPAL !**************************************************************** ! ! La filosofia de diseño gira en torno a los diferentes estados en que ! puede hallarse cada objeto del juego, incluyendo al propio ! jugador. El cambio de un estado a otro se produce, bien automáticame ! con el paso del tiempo (a través de daemon o cada_turno), o bien ! ante ciertas acciones del jugador. ! ! Cada objeto debe proporcionar diferentes respuestas según el estado ! en que se halle el jugador y el propio objeto. Por esto la ! codificación de algunos objetos es extraordinariamente larga. ! Global desc=1; ! Contador de descripciones diferentes para la celda Global respiracion=1; !Contador de numero de veces que el jugador RESPIRA ! La clase CeldaOscura, permite compartir código entre las localidades ! CeldaOscura1 y CeldaOscura2, que son casi idénticas. La primera es ! el inicio del juego, y la segunda es una vez que el jugador ha ! descubierto el pozo. Class CeldaOscura with irrelevante 'corazon' 'uñas' 'oxido' 'olor' 'mano' 'manos' 'pie' 'pies' 'miembros' 'miembro' 'pecho' 'espalda' 'pierna' 'piernas', antes [; if (uno==obj_abajo) return EjecutarRutinas(suelo,antes); if (uno==obj_arriba) return EjecutarRutinas(techo, antes); Excavar: "Intentas cavar con tus manos en la fría piedra, pero sólo logras hacerte sangrar las uñas."; Escuchar: "No oyes nada, salvo el latir de tu agitado corazón."; Oler: if (~~uno) "Olfateas el aire, tratando de obtener una pista de tu localización. Percibes el característico olor del moho y la tierra, junto con otro olor más acre, como de óxido."; ], no_puedes_ir "Es imposible saber dónde está el norte o el sur en esta prisión. Si quieres explorar la celda, todo lo más que puedes hacer es caminar al azar.", has luz; ! Jeje !================================================================ ! El lugar inicial !================================================================ Object CeldaOscura1 "En las tinieblas" class CeldaOscura with inicial "^^Finalmente, con una loca angustia en el corazón, abres los ojos. Tu espantoso pensamiento hallase, pues, confirmado. Te rodea la negrura de la noche eterna.", descripcion [; switch(desc++){ 1: "Permaneces tendido en el suelo, en medio de la oscuridad más absoluta. La intensidad de las tinieblas te oprimen y sofocan. La atmósfera es intolerablemente pesada."; 2: if (jugador.estado>; default: "Mejor dejar tus ojos tranquilos. No parecen servir de mucho ahora, pero tal vez los necesites más tarde."; ], esta_en CeldaOscura1 CeldaOscura2, has oculto; Object Suelo "suelo" with ! No pongo propiedad nombre para no confundir al parser, ya que ya ! existe otro objeto llamado suelo, que es obj_abajo. En la celda ! capturo la acción examinar obj_abajo y la redirijo a este objeto. descripcion [; switch (jugador.estado) { TIRADO_AL_PRINCIPIO: if (self hasnt general) { give self general; "Extiendes una mano y pesadamente cae sobre algo húmedo y duro. Durante unos minutos la dejas descansar así, haciendo esfuerzos por adivinar dónde puedes encontrarte y qué ha sido de ti."; } "Palpas de nuevo el suelo, llegando al mismo resultado. Es fría y húmeda piedra."; DE_PIE_AL_PRINCIPIO, JUNTO_A_LAS_PAREDES, JUNTO_AL_POZO: if (self hasnt general) { give self general; "Te agachas para tocar el suelo, y lo encuentras húmedo y duro, como una losa de superficie irregular. Rastreas una pequeña zona pero no hay nada sobre él. Estás seguro de que no hay nada sobre el suelo en toda la celda."; } "De nuevo te agachas para tocar el suelo y cerciorarte de que no hay nada sobre él."; ATADO_A_LA_TABLA: print "Esforzando el cuello, consigues echar un vistazo al suelo sobre el que yaces. "; if (comida in localizacion) { if (comida has general) print "Han puesto a tu lado otro trozo de comida gelatinosa como el que tiraste al pozo. También puedes ver "; else print "A tu lado está tu trozo de comida gelatinosa. También puedes ver "; } else print "Puedes ver "; "el brocal del pozo al que estuviste a punto de caer."; default: "El suelo es de piedra, cubierta de un limo resbaladizo. En su centro hay un gran pozo."; } ], antes [; Examinar: self.descripcion(); rtrue; Tocar: <>; Oler: "El suelo huele a humedad."; Coger, Atacar: <>; Ir: if (pozo in localizacion) "No puedes escalar por las lisas paredes del pozo. Si realmente quieres bajar, tu única posibilidad es saltar al pozo."; "A tus pies sólo hay sólida piedra."; default: "En tu febril obsesión por encontrar sentido a esta situación ya no sabes qué intentar y pruebas ideas absurdas."; ], has oculto escenario; Object techo "techo" with antes [; Examinar: if (jugador.estado>; Oler: <>; default: "El agotamiento y la tensión te hacen concebir ideas absurdas."; ], esta_en CeldaOscura1 CeldaOscura2, has escenario femenino oculta; !================================================================ ! El objeto jugador ! ! Proporciona una descripción variable, por si quiere examinarse a sí ! mismo, y también intercepta algunas acciones según el estado. ! Object preso "ti mismo" CeldaOscura1 with descripcion [; if (jugador.estado>; ATADO_A_LA_TABLA: if (correa in jugador) "Las correas te impiden todo movimiento."; <>; LIBERADO_DE_TABLA: "El techo está demasiado alto."; default: "Saltas con la vana esperanza de tocar el techo, pero no tocas nada. La celda en que te hallas debe de ser de grandes dimensiones."; } Hablar: if (self.Hablo==false) { self.Hablo=true; "Por un momento hablas solo. Pero el sonido de tu propia voz, amplificado por las resonancias de la enorme cavidad en que te hallas, te asusta y te hace consciente de tu penoso estado mental."; } "Murmuras otra vez para tus adentros."; Gritar: if (self.Grito==false) { self.Grito=true; "Gritas tratando de atraer la atención de alguien. La resonancia de la cavidad en que te hallas es extraordinaria y el eco de tu grito tarda un minuto en extinguirse. Pero nada más oyes después. Imaginas a tus verdugos disfrutando con esta situación."; } "No vas a dar de nuevo esa satisfacción a tus verdugos."; DarPalmada: if (self.estado15) "Estabas seguro de que la tabla detendría las paredes. Ya no se te ocurre qué mas hacer. Empiezas a aceptar tu inevitable derrota."; "Esfuerzas tu cerebro tratando de pensar una solución a la terrible situación en que te hallas. Ya has burlado a tus verdugos dos veces ¿serás capaz de volver a hacerlo?"; } ], antes [; if ((self.estado~=ATADO_A_LA_TABLA)&&(accion~=##Examinar)) "Eso no tiene sentido."; Atacar, Retorcer,IrAmbiguo: "Cuanto más te mueves, más se aprietan las correas."; ], has animado propio; Object camison "camisón de estamena" preso with nombre_m 'traje' 'camison', nombre_f 'ropa', adjetivos 'estamena', genero G_MASCULINO, descripcion [; if (jugador.estado==TIRADO_AL_PRINCIPIO) "Tus ropas han sido sustituidas por un vulgar camisón de estamena."; if (jugador.estado~=ATADO_A_LA_TABLA) "Es el camisón con que te han vestido los inquisidores."; if (self has general) { give self ~general; print "Has recuperado tu camisón. Evidentemente es el mismo que habías arrojado al pozo pues está aún húmedo. No puedes dejar de advertir el refinamiento de este nuevo castigo. "; } "El camisón se halla aprisionado por una tira como de cuero que da varias vueltas alrededor de tus miembros y tu cuerpo."; ], antes [; Desatar: "No hay nudos en la ropa."; Atar: "Tu camisón no es lo bastante largo y flexible como para poder anudarlo."; Oler: "Tu ropa huele espantosamente a sudor. O bien llevas aquí más tiempo del que creías o bien te han dado la ropa de otro ajusticiado. Lo último te parece más probable."; Atacar, Cortar: "Intentas arrancar una tira de tu traje, pero la tela es más recia de lo que creías y apenas te quedan ya fuerzas."; Tocar: print "Es una tela áspera y recia"; if (self has general) print " y está empapada"; "."; Desvestir: if (jugador.estado==ATADO_A_LA_TABLA) "No puedes quitarte la ropa. Estás aprisionado por la tira de cuero que se enrolla por todo tu cuerpo."; Lanzar: if (self has puesto) "Tendrías que quitarte", (lo) self, " antes."; ], despues [; Desvestir: "Te quitas el camisón, que era todo tu abrigo. Inmediatamente empiezas a tiritar."; Vestir: "El abrigo que te produce esta prenda es el único placer físico que has experimentado en los últimos días."; Dejar: if (pozo in localizacion) <>; "Depositas en el suelo tu camisón."; ], has prenda puesto; !================================================================ ! FASE 2 Junto al pozo !================================================================ ! Esta localidad podría haberse codificado como parte de ! CeldaOscura1. Realmente la única razón para separarla ha sido poder ! darle otra propiedad "inicial". ! Object CeldaOscura2 "En las tinieblas" class CeldaOscura with inicial "^^Cuando despiertas, al apoyarte para ponerte en pie, tocas con la mano un trozo de algo gelatinoso. Probablemente alguien lo ha depositado aquí mientras dormías.", descripcion "Las tinieblas a tu alrededor son tan densas como antes.", anduvo 1, no_puedes_ir "Es imposible saber dónde está el norte o el sur en esta prisión. Si quieres explorar la celda, todo lo más que puedes hacer es caminar al azar.", antes [; IrAmbiguo: switch(self.anduvo++) { 1: move pozo to localizacion; jugador.estado=JUNTO_AL_POZO; "Decides continuar tus pesquisas, aunque realmente no acabas de encontrarles ningún sentido. Caminas de nuevo alejándote de la pared, con la intención de cruzar la celda, cuando el resbaladizo suelo te hace caer. Entonces descubres algo realmente extraño. Aunque tu barbilla descansa en el suelo, tus labios y nariz están suspendidos en el vacío. Parece que estás asomado a un pozo y sólo un azar extraordinario te ha librado de caer en él. De modo que esta era la muerte que te tenían reservada."; 2: print "Tanteando el suelo en cada paso, temeroso de los innumerables pozos que tu imaginación multiplica en la celda, retrocedes hasta la pared.^^Un extraño olor que te recuerda al de los hospitales parece provenir ahora del lugar donde estabas antes.^"; return JugadorGrogui(); } ]; Object -> comida "trozo de algo gelatinoso" with nombre_corto "trozo de gelatina", nombre_m 'trozo' 'gelatinoso' 'algo', nombre_f 'gelatina' 'comida', genero G_MASCULINO, articulo "un", descripcion [; self.nombre_corto="comida"; self.genero=G_FEMENINO; self.articulo="un trozo de"; if (self hasnt general) { if (jugador.estado>; Oler: "Huele como si fuera comestible. Parece que después de todo no planean matarte de hambre."; Comer, Probar: if (self hasnt general) { give self general; "Tu debilidad puede más que tus escrúpulos y das un bocado al trozo de gelatina. Está terriblemente salada y tu sed se incrementa atrozmente, mientras que tu hambre apenas resulta disminuida. Qué ingenuo fuiste al esperar un rasgo de humanidad de tus verdugos."; } "El hambre te tortura, pero comer esta inmundicia sería peor aún para ti."; Dejar, Lanzar: if ((accion==##lanzar)&&(otro==pozo)) rfalse; if (pozo in localizacion) <>; if (self has general) "Disgustado por la burla de que eres objeto, estás a punto de lanzar el trozo de gelatina. Pero después reflexionas y piensas que tal vez pueda serte útil para sobrevivir unos minutos más, llegado el caso."; "Mejor no perderlo ahora que lo has encontrado. Tal vez sea comestible."; ], despues [; Coger: if (ratas.estado==RATAS_COMIENDO or RATAS_TERMINANDO) "Consigues arrebatarle la comida a la rata."; ], has comestible; ! Al pozo pueden tirarse cosas. Aunque no sirve para nada, da realismo ! al juego. Cuando el jugador se aleja del pozo, se pasa a la siguente ! fase del juego. Si pasan varios turnos y no se aleja, el pozo ! emanará un gas y se avanzará de todas formas a la siguiente fase Object pozo "pozo" with nombre 'pozo' 'abismo' 'brocal', descripcion [; if (jugador.estado>; Oler: print "El olor a humedad de la celda se acentúa aún más debido a la cercanía del pozo"; if ((self.estado>4)&&(self.estado<7)) " y ahora se ha sumado un extraño olor que te recuerda al de los hospitales."; "."; ], antes [; BuscarEn: "Es imposible ver nada en la celda, menos aún en el interior del pozo."; Coger, Empujar, Tirar, EmpujarDir, Girar, Retorcer: "Deliras."; Entrar, Meterse: if (jugador.estado==ATADO_A_LA_TABLA) "No puedes moverte de la tabla a la que estás atado."; banderafin=1; print "Incapaz de soportar un minuto más la tensión nerviosa a la que te ves sometido, decides terminar con esto de una vez por todas. Saltas al pozo y tras una interminable caída, llegas finalmente al fondo del pozo. La pequeña cantidad de agua no sirve para evitar el fatal aplastamiento"; if (paredes.estado>6) print ". Mientras agonizas, escuchas un gran estrépito en tu celda, un ruido de voces humanas, un huracán de trompetas, cuando las tropas francesas que han entrado en Toledo detienen la infernal maquinaria para liberarte. Han llegado demasiado tarde"; @piracy ?sigue; ".^^Lo último que ven tus ojos es una pequeña inscripción fosforescente en la pared del pozo: ~Zak McKracken estuvo aquí.~"; .sigue; "."; SaltarSobre: if (jugador.estadoRATAS_APARECIENDO)&& (ratas.estado5) { paredes.estado=13; "Con un gran esfuerzo empujas la tabla hasta encajarla en la esquina. Esta situación parece no haber sido prevista en el mecanismo que empuja las paredes, ya que momentáneamente su avance se detiene, aunque el retumbar sube cada vez más de volumen."; } "Empujas la tabla con gran esfuerzo hasta encajarla en la esquina de la celda."; } if (otro==pozo) { accion=##Recibir; ejecutarRutinas(pozo, antes); } ], descripcion [; print "La tabla a la que permaneciste atado hasta hace poco es de madera muy oscura y aparentemente muy dura"; if (paredes.estado>14) ", pero no va a soportar la presión de las paredes."; "."; ], has femenino estatico; Object correa "correas" CeldaPendulo with nombre_f 'correa' 'tira' 'cuerda' 'atadura', nombre_fp 'correas' 'tiras' 'cuerdas' 'ataduras', nombre_m 'nudo', nombre_mp 'nudos', adjetivos 'cuero', descripcion [; if (ratas.estado~=RATAS_ROYENDO) "Los inquisidores han hecho un buen trabajo. Con estas ataduras no serías capaz de liberarte ni siquiera en el caso de que estuvieras en plena forma. Menos aún en la situación actual. Las correas dejan libre una zona de tu pecho."; "No puedes ver las correas, están sepultadas por un mar de ratas."; ], reaccionar_antes [; Desatar: "Con la mano libre intentas deshacer los nudos de las correas que te sujetan, pero te resulta absolutamente imposible."; ], listarse "unas correas (que te impiden moverte)", antes [; Coger: "No puedes coger las correas mientras estén aprisionandote."; Dejar: "Ojalá fuera tan sencillo liberarse de estas correas."; Cortar: "No tienes con qué cortarlas, salvo tus dientes, pero la situación de la cabeza te impide hacerlo."; Comer: "Por más que fuerzas el cuello, te resulta imposible morder las correas."; Atacar, Tirar, Empujar, Girar: "Las correas son muy resistentes y cuanto más tiras de ellas, más se aprietan."; Recibir, FrotarContra: if (uno==comida) { print "Embadurnas las correas que te sujetan con la gelatina y esperas unos instantes"; move comida to correa; if (ratas.estado==RATAS_MERODEANDO) ". Enseguida un par de ratas se suben sobre ti y comienzan a roer tus ataduras. ¡El truco ha dado resultado! Pronto todas las ratas están sobre ti."; else "."; } "Eso no tiene sentido."; ], has nombreplural femenino; Object pecho "pecho" CeldaPendulo with nombre 'pecho', descripcion [; print "Las correas que rodean todo tu cuerpo dejan libre el área del pecho"; if (pendulo has general) " ¡justamente en la zona situada en la trayectoria del péndulo!"; else "."; ], antes [; Examinar: rfalse; Recibir: if ((uno==comida)&&(ratas.estado==RATAS_MERODEANDO)) { remove comida; ratas.estado=RATAS_ALEJANDOSE; "Dejas el trozo de comida sobre tu pecho. Inmediatamente una rata salta sobre él y se lo lleva lejos, donde lo devora sin ser molestada."; } "Eso no tiene sentido."; FrotarContra: if (uno==comida) { banderafin=1; "Frotas la gelatina contra tu pecho. Inmediatamente un par de ratas saltan sobre ti atraídas por el fuerte olor de este alimento, y comienzan a morderte en el pecho. Con tu mano libre tratas de ahuyentarlas, pero cada vez más ratas se suman al festín. Has elegido una forma de morir más espantosa aún que la que habían ideado para ti tus verdugos."; } default: "Eso no tiene sentido."; ], has oculto soporte; Object emblemas "emblemas horrorosos" with nombre 'emblema' 'emblemas' 'horrorosos' 'repulsivos' 'demonio' 'demonios' 'imagenes' 'esqueletos' 'esqueleto' 'colores' 'color' 'contorno' 'contornos' 'monstruosidad', descripcion "Figuras de demonios con amenazantes gestos, con formas de demonios y otras imágenes del horror más realista llenan en toda su extensión las paredes. Los contornos de estas monstruosidades aparecen suficientemente claros, pero los colores parecen manchados y estropeados por efecto de la humedad del ambiente.", has escenario nombreplural; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! El inicio del juego !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [Inicializar; CambiarJugador(preso); localizacion=celdaoscura1; box "Cuando, por último, me desataron y pude sentarme," "noté que perdía el conocimiento. La sentencia, la" "espantosa sentencia de muerte, fue la ultima frase" "claramente acentuada que llego a mis oídos. Luego," "el sonido de las voces de los inquisidores me pareció" "que se apagaba en el indefinido zumbido de un sueño." "Y el Universo fue solo noche, silencio, inmovilidad." "" " -Edgar Allan Poe ~El pozo y el péndulo~"; print "^^"; Pause(); print "Un largo e indescriptible período de tiempo transcurrió, durante el cual te viste acosado por multitud de pesadillas entremezcladas con la sensación de estar siendo transportado y depositado, resultándote imposible discernir lo soñado de lo real. Después, la simple conciencia de tu existencia sin pensamiento, sensación que duro mucho. Luego, bruscamente, el pensamiento de nuevo, un temor que te producía escalofríos y un esfuerzo ardiente por comprender tu verdadero estado.^^"; print "No has abierto los ojos hasta el momento. Pero sientes que estás tendido de espaldas y sin ataduras. Tienes una gran impaciencia por hacer uso de tus ojos, pero no te atreves. Tienes miedo de la primera mirada sobre las cosas que te rodean. No es que te aterrorice contemplar cosas horribles, sino que te aterra la idea de no ver nada.^^"; Pause(); Cls(); ]; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! El jugador consigue tantear todo el perímetro de la habitación [ LaVueltaAlRuedo; print "Con tu ropa en el suelo como punto de referencia, inicias confiado la exploración de la pared. El terreno es húmedo y resbaladizo. Tambaleándote, caminas durante un buen rato. Cuando ya llevas contados unos cien pasos, y empiezas a pensar que te has perdido, tropiezas de nuevo con tu ropa en el suelo. De modo que el perímetro de tu prisión es de unos cincuenta metros, sin embargo has tropezado con unos cuantos ángulos, lo que te impide conjeturar la forma de la cueva. Porque no hay duda de que esto es una cueva.^^ Agotado por el esfuerzo, caes dormido.^^"; move camison to CeldaOscura2; Pause(); CLS(); JugadorA(CeldaOscura2); jugador.estado=JUNTO_A_LAS_PAREDES; rtrue; ]; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! El jugador se queda grogui y despierta bajo el péndulo [ JugadorGrogui; print "^Un sueño invencible se apodera de ti. Probablemente el pozo ha exhalado algún tipo de narcótico. Los inquisidores ya se han dado cuenta de que has descubierto el pozo y probablemente van a prepararte un nuevo tipo de agonía. Te duermes con un sueño profundo parecido a la muerte.^^"; Pause(); CLS(); jugador.estado=ATADO_A_LA_TABLA; move camison to jugador; give camison puesto; move comida to CeldaPendulo; give comida oculto; move pozo to CeldaPendulo; move correa to jugador; PararReloj(pozo); ArrancarDaemon(CeldaPendulo); pozo.estado=8; JugadorA(CeldaPendulo); rtrue; ]; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! El jugador ha conseguido levantarse de la tabla [ JugadorLiberado; jugador.estado=LIBERADO_DE_TABLA; give ratas oculto; move tabla to localizacion; remove pendulo; PararDaemon(CeldaPendulo); ArrancarDaemon(paredes); if (techo has general) print "^Tan pronto como te apartas de la trayectoria del péndulo, éste es izado a toda velocidad, desapareciendo por las compuertas del techo. Has conseguido burlar una vez más a tus verdugos ¿qué nueva tortura te estarán preparando?^^"; else print "^Un ruido en el techo llama tu atención. Al mirar hacia arriba descubres que te has librado de una muerte horrible. ¡Un enorme péndulo rematado con una afilada cuchilla estaba oscilando sobre la tabla a la que estabas atado!^^En vista de que su plan ha fracasado, el péndulo es izado a toda velocidad. ¿Qué nueva tortura te prepararán ahora?^^"; <>; ]; ! La celda se aplasta [ ParedesInicianMovimiento; jugador.estado=EN_CELDA_MENGUANTE; ratas.estado=RATAS_HAN_HUIDO; if (tabla has general) paredes.estado=13; "De pronto un espantoso aullido metálico hace temblar toda tu celda, como el quejido de un animal fabuloso herido. Seguidamente un grave retumbar sacude el aire de la prisión, atravesándote de lado a lado. Todas las ratas huyen despavoridas por el pozo."; ]; !================================================================ ! Extensiones y modificaciones a la gramática !================================================================ [ DarPalmadaSub; "Aplaudes entusiasmado. ~Gracias, gracias...~ dice el autor. [BUG]"; ]; [ GritarSub; "¡¡¡Yeaargh!!! [BUG]"; ]; [ NadaDeUsarSub; "Tratas de encontrar un uso para ", (el) uno, " pero tu mente no acierta con la acción concreta."; ]; [ RespirarSub; respiracion++; if (respiracion<5) "Tomas aire con ansia, tratando de oxigenar tu cerebro para clarificar tus ideas."; "Sufres un pequeño mareo debido a la hiperventilación."; ]; [ MarcarSub; "No tiene sentido hacer una marca en ", (el) uno, "."; ]; [ EcharseSub; "Aunque estás realmente agotado, tu estado de excitación te impide ponerte a descansar."; ]; [ DesatarSub; "Qué idea tan absurda."; ]; [ FrotarContraSub; if (uno notin jugador) "Para eso debes coger ", (el) uno, " antes."; if (EjecutarRutinas(uno, antes)) rtrue; if(EjecutarRutinas(otro, antes)) rtrue; print "Frotas ", (el) uno; if (uno==otro) print " contra sí mismo"; else print " contra ", (el) otro; " sin lograr ningún resultado aparente."; ]; [ ConjuroSub; "En estos momentos desearías que las acusaciones de brujería que te han traído aquí fuesen ciertas. Por desgracia no sabes cómo lanzar conjuros."; ]; [ AyudaSub; "PIENSA."; ]; Verb 'ayuda' 'help' * -> Ayuda; Verb 'aplaude' * -> DarPalmada; VerboIrregular "aplaudir" with imperativo 'aplaude'; Extend 'da' first * 'palmada'/'palmas' -> DarPalmada * 'una' 'palmada' -> DarPalmada; Extend only 'grita' replace * topic -> Gritar; ! Eliminados de un plumazo los verbos de conversación Extend 'habla' replace * topic -> Hablar; Extend 'pregunta' replace * topic -> Hablar; Extend 'di' replace * topic -> Hablar; Verb 'usa' 'emplea' 'utiliza' * 'razon' -> Pensar * 'la' 'razon' -> Pensar * noun topic -> NadaDeUsar; Extend 'pon' first * noun -> Vestir; Verb 'respira' * -> Respirar; Verb 'marca' * noun -> Marcar; Verb 'haz' * 'marca' 'en' noun -> Marcar * 'una' 'marca' 'en' noun -> Marcar; VerboIrregular "hacer la marca" with imperativo 'haz'; Verb 'sigue' 'avanza' 'retrocede' 'muevete' 'explora' 'alejate' * -> IrAmbiguo; Verb 'tirate' = 'metete'; VerboIrregular "tirar" with imperativo 'tirate'; Extend 'echate' first * -> Echarse; Verb 'desata' * noun -> Desatar; Extend 'frota' * noun 'con' noun -> FrotarContra reverse * noun 'contra'/'sobre'/'en' noun -> FrotarContra; Verb 'unta' 'embadurna' = 'frota'; Verb 'levanta' = 'coge'; Verb 'muerde' = 'come'; VerboIrregular "morder" with imperativo 'muerde'; Verb 'xyzzy' * -> Conjuro; Extend 'lanza' first * 'conjuro' -> Conjuro; Verb 'arrastra'='empuja'; Extend 'empuja' * noun 'a//' noun -> EmpujarDir; !---------------------------------------------------------------- ! Funciones de utilidad [ Pause i width; width = 0->33; if (width == 0) width = 80; spaces (width - 18); font off;print "[ Pulsa Espacio ]"; font on; do { @read_char 1 0 0 i; } until (i==32 or 10 or 13); CLS(); ]; [ CLS ; @erase_window -1; ];