! *********************************************************************** ! A LO LEJOS, EL FARO ! de Manuel Ignacio Monge García ! Alpha Aventuras 1999 ! *********************************************************************** !------------------------------------------------------------------------ ! DEFINICION DE CONSTANTES Y OTRAS EVENTUALIDADES NECESARIAS !------------------------------------------------------------------------ Constant Historia "-- A lo lejos, un Faro --"; Constant Titular "^Una siniestra historia sobre la culpa.^^(c) Manuel Ignacio Monge García.^(c) Alpha Aventuras 1999.^^Teclea HISTORIA para saber cómo y por qué se hizo.^AYUDA cuando estés desesperado.^^"; Release 1; Serial "200599"; Constant ADMITIR_COMANDO_SALIDAS; Constant ADMITIR_INFINITIVOS; Include "EParser"; Object MensajesLibreria with antes [; Prompt: print "^>> "; rtrue; Miscelanea: switch (ml_n) { 10: rtrue; 30: "No encuentro eso que dices..."; 27: "Las palabras se te agolpan en los labios."; 38: "¿Qué quieres decir con eso?"; } ]; Include "Acciones"; Include "PNJMovil"; Include "Gramatica"; Include "Decir"; !------------------------------------------------------------------ ! INICIAMOS EL JUEGO !------------------------------------------------------------------ [ Inicializar; print "^^~La aventura podrá ser loca, pero el aventurero debe ser cuerdo.~^Gilbert K. Chesterton, ~El hombre que fue jueves~.^^"; localizacion=alto_faro; move nene to limbo; move pistola to jugador; modomirar=2; ]; ! ----------------------------------------------- ! A esto le llamo yo enriquecer un juego, señores ! ----------------------------------------------- Class Habitacion with describir [; print (string) self.descripcion; print "^"; ], antes [; Examinar: if (uno == jugador) { if (mujer hasnt general) "Pareces salido de alguna pesadilla."; if (jugador in alto_faro && mujer has general) { if (pistola in jugador) { move pistola to localizacion; "Con la pistola en tus manos, es imposible evitar que te sientas culpable por la muerte de la mujer. Asustado de ti mismo tiras la pistola al suelo."; }; if (pistola in alto_faro) "No puedes evitar echarte a temblar cuando ves la pistola junto al cadáver de la mujer."; "Tu vida parece insultante junto al cadáver de la mujer."; }; "En tu mente aún permance la imagen de la mujer muerta en lo alto del faro."; } Disparar: if (uno == 0) <>; Follar: if (uno == 0) "La región oscura de tu mente te domina..."; Esperar: "El faro va haciéndose parte de ti..."; Salir: "No puedes abandonar el faro. Viniste aquí para resolver un asunto."; SalirSe: if (uno == faro) "No sin antes haber cumplido tu objetivo."; ], has luz; Object limbo; !------------------------------- ! 1) En la parte alta del Faro | !------------------------------- Habitacion alto_faro "Parte alta del Faro" with descripcion "Desde aquí, en la zona más alta del faro, el aullido del viento arremete contra los muros con una violencia sobrenatural. Su fuerza hace tambalear la estructura del faro como un débil velero en mitad de la tormenta. Una vieja escalera de caracol conduce hacia la parte baja del faro.", abajo bajo_faro, arriba "Esta es la zona más alta del faro, es imposible seguir subiendo.", no_puedes_ir [; switch (random (2)) { 1: "El canto de sirena de la gravedad te llama, pero aún no es el momento."; 2: "Deja que los demonios hagan eso por ti."; }; ], antes [; if (antorcha in jugador && antorcha has encendida) { give antorcha ~encendida; give antorcha ~luz; print "^Una ráfaga de viento apaga la antorcha.^"; } Saltar: "No hay motivos para acabar así."; Examinar: if (uno == obj_arriba) { if (mujer hasnt general) "Miras hacia el techo buscando los sueños de la mujer."; "Miras arriba buscando su alma."; } if (uno == obj_abajo) { if (mujer hasnt general) "En el frío suelo duerme una mujer."; "En el suelo yace el frío cadáver."; } ], cada_turno [; if (random (3)~=1) rtrue; print "^"; switch (random (7)) { 1: "El graznido de las gaviotas repiquetea a tu alrededor como una lluvia insana."; 2: "Un golpe de viento llena las ventanas de inquietud."; 3: "El rugido de un trueno suena en la carpa del cielo."; 4: "El viento apoya su frente en las ventana y te observa."; 5: "Caen algunas gotas de lluvia sembrando el suelo con ortigas de frío."; 6: "Pasa unas gaviotas como un cortejo fúnebre..."; 7: "El viento te lame la cara con su lengua de gato."; } ], ; Object alrededor "alrededor" with nombre 'alrededor' 'enderredor', antes [; Examinar: <>; ], esta_en alto_faro bajo_faro, has escenario oculto; Object faro "faro" with descripcion [; if (localizacion == alto_faro) "Como un suicida dudando al borde del abismo, el faro se asoma a las faldas del precicipio. Es un edificio arañado por el tiempo y la desidia, que en su lucha constante contra los elementos se ido conviertiendo en un lugar sombrío y solitario."; if (localizacion == bajo_faro) "El faro es una estructura descomunal, una mole de ladrillos y entereza, que a pesar de los años aparenta conservar toda su integridad."; if (localizacion == laberinto3) "Justo sobre tu cabeza se alza el faro. Desde aquí parece un coloso oteando el horizonte."; ], nombre_m 'faro' 'recibidor' 'edificio', nombre_f 'estructura' 'zona' 'base' 'baja' 'alta' 'parte', esta_en bajo_faro alto_faro laberinto3, has escenario oculto; Object precipicio "precipicio" with nombre 'precipicio' 'acantilado' 'costa' 'orilla' 'rompiente', descripcion "Con la obstinación de un abnegado, el acantilado ofrece eternamente su otra mejilla al mar.", esta_en alto_faro bajo_faro, has escenario oculto; Object pared "paredes" with descripcion [; if (localizacion == alto_faro) "A lo largo de los años, el viento del exterior parecen calado através de las paredes, dejando multiples agujeros por donde penetra el aire con un silbido insoportable."; else if (localizacion == bajo_faro) "En la base del faro las paredes son más gruesas para soportar el peso toda la estructura. Aún así, no te proporcionan confianza alguna."; else if (localizacion == laberinto1 or laberinto2 or laberinto3) "Están húmedas y reblandecidas."; ], antes [; Tocar: <>; Agitar, Empujar, Excavar: banderafin = 1; "Introduces tus manos lentamente en la húmeda tierra de la pared. De pronto escuchas un crujido sordo desde el techo, y los muros se te echan encima cubriéndote de tierra en un fanganoso abrazo."; ], nombre_fp 'paredes' 'piedras', nombre_f 'pared' 'piedra', nombre_mp 'muros', nombre_m 'muro', genero G_FEMENINO + G_PLURAL, esta_en [; if (localizacion has luz) rtrue; ], has escenario oculto; Object ventanas "ventanas" with descripcion [; if (localizacion == alto_faro) "Son las pequeñas bocas por donde respira el faro. Desde ellas se puede ver la enorme extensión del mar."; "En la zona baja del faro el mar asfixia por completo las ventanas con su impecable azul."; ], nombre_f 'ventana', nombre_fp 'ventanas', nombre_m 'marco' 'portal' 'agujero', nombre_mp 'portales' 'marcos' 'agujeros', genero G_FEMENINO + G_PLURAL, esta_en alto_faro bajo_faro, has escenario oculto; Object mar "mar" with descripcion [; if (localizacion == alto_faro) "Su azul insondable se recorta en las ventanas como un cuadro de insoportable escrupulosidad."; else if (localizacion == bajo_faro) "Desde aquí el mar abraza con su azul todas las ventanas."; else if (localizacion == laberinto3) "La vasta inmensidad del mar ocupa todo aquello a lo que miras."; ], nombre_m 'mar' 'oleaje' 'rompiente' 'agua' 'azul' 'insondable', nombre_f 'ola' 'orilla', nombre_fp 'olas' 'aguas', genero G_MASCULINO, esta_en alto_faro bajo_faro laberinto3, antes [; Beber: "Dicen que sus aguas está envenenada con la sangre de los muertos."; Tocar: if (parent (self) == laberinto3) "El agua está helada."; Coger: if (parent (self) == laberinto3) "El ya te tiene a ti..."; Escuchar: if (localizacion == alto_faro) "Decían los marineros más viejos, cuando a la luz de una hoguera se reunían para contar historias, que este mar tenía el espíritu de una mujer con el corazón roto... Ahora paga su desamor con el cuerpo de los marineros más jóvenes."; else if (localizacion == bajo_faro) "El rumor de las olas llega hasta aquí con un murmullo de sombría caracola."; else if (localizacion == laberinto3) "Parece un máquina construida para olvidar."; ], has escenario oculto; Object viento "viento" with descripcion [; switch (random(3)) { 1: "En noches de luna y lobos es el aliado de las bestias."; 2: "Su silbido infernal, como el de una flauta de encantadores de cobras, hace que el faro se zarandee de un lado para otro."; 3: "Su aullido arrastra consigo el lamento de los marineros muertos."; } ], reaccionar_antes [; Oler: "El intenso olor del salitre te inunda los pulmones."; Escuchar: if (uno == nothing) <>; ], antes [; Escuchar: switch (random (3)) { 1: "El viento parece un lobo malherido."; 2: "Parece el lamento de los infelices que arden en el infierno."; 3: "Ni la caracola más oscura acogería el sonido de este viento."; }; ], nombre_m 'viento' 'aullido' 'hurancan' 'aire' 'brisa', adjetivos 'diabolico' 'diabolica' 'infernal', genero G_MASCULINO, esta_en alto_faro bajo_faro laberinto3, has escenario oculto; Object tormenta "tormenta" with nombre_f 'tormenta' 'tempestad' 'lluvia' 'gota' 'gotas', nombre_m 'torrencial' 'torrente' 'horizonte' 'lejos' 'trueno' 'rayo', genero G_FEMENINO, descripcion "Como un barco fantasma surgido del horizonte, la tormenta arremete contra el faro tratando de abordarlo.", esta_en bajo_faro alto_faro laberinto3, antes [; Escuchar: "Como una ejército infernal, el ruido de la tormenta llega desde el horizonte bajo el oscuro mando del viento."; ], has escenario oculto; Object escalera "vieja escalera de caracol" with nombre_m 'caracol' 'escalon', nombre_f 'escalera', nombre_mp 'escalones', nombre_fp 'escaleras', adjetivos 'peligrosa' 'destartalado' 'destartalada' 'peligroso' 'vieja' 'envejecida' 'vetusta', genero G_FEMENINO, descripcion [; if (localizacion == alto_faro) "Conduce", (n)self, " sinuosamente hacia la parte baja del faro."; print "^Como una invitación sombría ", (el) uno ," se retuerce como una serpiente hacia la parte alta del faro."; if (bala hasnt general) " Algo reluce bajo los escalones."; ], puerta_a [; if (localizacion == alto_faro) return bajo_faro; else return alto_faro; ], direcc_puerta [; if (localizacion == alto_faro) return abajo; else return arriba; ], antes [; MirarDebajo: if (bala hasnt general && localizacion == bajo_faro) { move bala to localizacion; give bala general; "Era una bala lo que relucía. Debió caer aquí rodando escaleras abajo."; } "Polvo y suciedad."; BuscarEn: <>; ], esta_en alto_faro bajo_faro, has escenario puerta abierto oculto; !------------------------- !2) Parte Baja del Faro | !------------------------- Habitacion bajo_faro "Parte baja del Faro" with descripcion "Estás en la base del faro. En su día debió ser el recibidor del edificio. Con los años la mayor parte del mobiliario fue vendido después de que se cerrara el faro, el resto fue robado.", no_puedes_ir [; if (nene in limbo) { if (mujer hasnt general) "No puedes abandonar a la mujer."; "¿Y dejar el cadáver para que sea pasto de las ratas?"; } "¿Y dejar al niño aquí sólo?"; ], antes [; Examinar: if (uno == obj_abajo) <>; if (uno == obj_arriba) { if (mujer hasnt general) "Arriba te aguarda la mujer dormida."; "Arriba está el cadáver de la mujer."; } ], arriba alto_faro, abajo trampilla, afuera "¿Y abandonar tan pronto?", ; Object trampilla "trampilla" with nombre_f 'trampilla' 'puerta' 'puertecilla' 'puertecita' 'compuerta', nombre_m 'acceso', genero G_FEMENINO, puerta_a [; if (parent (self) == bajo_faro) return laberinto1; else return bajo_faro; ], reaccionar_antes [; Meter: if (otro == trampilla) { if (localizacion == bajo_faro) {if (self has abierta) { if (uno in jugador) { move uno to laberinto1; "^", (_El) uno, " cae por la trampilla tragad", (o) uno, " por la oscuridad."; } "No tienes eso."; } else if (self hasnt abierta && uno in jugador) { move uno to localizacion; print "^", (_El) uno, " cae al suelo rebotando sobre la trampilla cerrada.^"; rtrue; } "Difícilmente podré hacer eso."; } else if (localizacion == laberinto1 && otro == trampilla) "Desde aquí arriba es bastante difícil."; } rfalse; ], antes [; BuscarEn: if (localizacion == bajo_faro) { if (self has abierta) { print "^Através de la oscuridad de la trampilla puedes distinguir un pasillo húmedo y fanganoso."; if (children (laberinto1) ~= nothing) print " Puedes distinguir en el suelo "; EscribirListaDesde (child (laberinto1), ESPANOL_BIT); "."; } "Cerrada no puedes ver lo que hay debajo."; } <>; ], descripcion [; if (self has abierta) { if (parent (self) == bajo_faro) {print "La trampilla está abierta como una boca oscura."; <>; } "Hasta aquí llega la luz de la parte baja del faro y el ruido del viento."; } if (self hasnt abierta) {if (parent (self) == bajo_faro) "La trampilla está cerrada a tus pies."; "Arriba la trampilla está cerrada."; } ], describir [; if (self has abierta) { if (parent (self) == bajo_faro) "^Una trampilla conduce hasta abajo."; "^La trampilla lleva hasta la parte baja del faro."; } else if (self hasnt abierta) {if (parent (self) == bajo_faro) "^Hay una trampilla cerrada en el suelo."; "^La trampilla está cerrada."; } ], direcc_puerta [; if (parent (self) == bajo_faro) return abajo; else return bajo_faro; ], reaccionar_despues [; Abrir: if (uno == self) give laberinto1 luz; Cerrar: if (uno == self) give laberinto1 ~luz; ], esta_en bajo_faro laberinto1, has estatico puerta abrible recipiente; Object mobiliario "mobiliario" bajo_faro with descripcion "De aquellos muebles que adecentaban -y en parte, humanizaban- la fría estructura del edificio, tan sólo queda restos inservibles.", nombre_m 'mobiliario' 'cuadro' 'adorno', nombre_mp 'muebles' 'cuadros' 'adornos', nombre_f 'mesa' 'silla', nombre_fp 'mesas' 'sillas', genero G_MASCULINO, antes [; Coger: "La tentación de llevarte algo del faro es muy fuerte, sin embargo, nada de lo que hay aquí tiene valor como para venderlo."; ], has escenario oculto; Object restos "restos" bajo_faro with descripcion "Nada de lo que sobrevivió al tiempo y a los ladrones merece la pena. Tan sólo sirven de quincalla para el recuerdo.", nombre_m 'resto', nombre_mp 'restos', nombre_f 'basura', nombre_fp 'basuras', adjetivos 'inservible' 'inservibles', genero G_MASCULINO + G_PLURAL, antes [; Coger: "¿De qué te servirían?"; ], has escenario oculto; Object foto "fotografía" bajo_faro with descripcion [; if (foto has general && localizacion == bajo_faro) "Es la fotografía de la madre del niño."; if (localizacion == alto_faro) { if (foto has general) "Sin duda es la madre del niño."; "Tiene un gran parecido con ella."; }; if (localizacion == bajo_faro) { move nene to localizacion; give foto general; "^~- Es mi mama.~, dice un niño aparenciendo desde un oscuro rincón."; }; ], antes [; Dejar: if (jugador in alto_faro) { move foto to bajo_faro; give foto ~general; "Una repentina ráfaga de viento arrastra la foto por la ventana."; } ], nombre_f 'fotografia' 'instantánea' 'foto', nombre_m 'retrato', genero G_FEMENINO, inicial [; if (foto hasnt general) "El viento ha arrastrado una foto hasta aquí."; "Aquí está la fotografía de la madre del niño."; ], ; !------------------------------ ! 3) Ahora comienza la acción | !------------------------------ Object pistola "pistola" with nombre_f 'pistola' 'escopeta', nombre_m 'revolver''arma' 'cargador', articulo "la", genero G_FEMENINO, descripcion [; if (bala notin self) "Pesada y fría, como una mala pesadilla. Está descargada."; "Cargada y preparada para matar."; ], describir "^También veo una pistola.", antes [; Disparar: if (pistola in jugador) {if (bala in pistola) "No malgastes la única bala que te queda."; "¡CLICK!";} DispararA: if (uno == jugador) "No tientes a la suerte..."; Recargar:if (bala notin jugador or localizacion) "No tienes balas."; move bala to self; "Cargada."; Descargar: if (bala in pistola) {move bala to jugador; "Bien, ahora la pistola está descargada."; } "La pistola no está cargada."; BuscarEn: if (bala in self) "Sólo hay una bala en el cargador... Suficiente."; "No hay balas en el cargador."; ], reaccionar_antes [; Meter: if (uno == bala && otro == self) {move uno to pistola; "Cargada y preparada."; } else if (uno ~= bala && otro == self) "No tiene sentido intentar eso."; ], listarse [; if (etapa_inventario == 2) { if (bala in self) " cargada."; " descargada."; } ], has recipiente transparente abierto; Object mujer "mujer" alto_faro with descripcion [; if (self hasnt general) "Su piel tiene el color de la luna, y su pelo parece un campo de trigo mecido por las manos del viento. Duerme plácidamente... Apenas se la oye respirar."; "Su cuerpo conserva toda la belleza que tuvo en vida, como si se resistiese a creer que ya en él no habita ya el alma... Lo cierto es que jamás volverá a amar."; ], describir [; if (self hasnt general) "^Sobre el suelo hay una mujer dormida."; "^Sobre el suelo hay una mujer muerta."; ], nombre_m 'cadaver' 'muerto' 'fiambre' 'cuerpo', nombre_f 'muerta' 'mujer' 'ella' 'señora' 'señorita' 'dama' 'chica', articulo 'la', genero G_FEMENINO, antes [; Besar: if (self hasnt general) "Sus labios están fríos como el mármol."; "En silencio, bajo el canto fúnebre del viento y las olas, besas a la mujer en la frente dándole su última despedida."; DespertarOtro: if (self has general) "Jamás despertará de ese sueño..."; give self general; "Con cierto apuro te acercas hasta ella, la zarandeas levemente por los hombros, pero sus ojos siguen cerrados. La agitas con más fuerza infructuosamente... Tal y como temías, está muerta."; Reanimar: if (uno == mujer && localizacion == alto_faro) { if (self has general) "No tiene sentido intentarlo."; give mujer general; "Sin saber siquiera si realmente está muerta, tratas desesperamente de devolverle la vida, pero su alma ya se marchó hace tiempo."; }; DispararA: if (pistola in jugador) { if (bala in pistola) { if (uno == self) { if (mujer hasnt general) "Creo que no es la mejor forma de despertarla."; "No creo que eso haga falta ya."; } } "¡CLICK!"; } "Aun sin pistola no lo harías."; Follar: if (mujer hasnt general) "Hay algo en ella que aleja de ti ese tipo de pensamientos."; "Con un suspiro de alivio apartas de tu mente ese pensamiento."; Tocar: if (mujer hasnt general) "Al pasar tus dedos sobre su cara te sorprende el frio de su piel."; "Su cuerpo reposa en las manos frías de la muerte."; Escuchar: <>; Coger: if (mujer hasnt general) "No me atrevo a molestarla."; "Prefiero no moverla de ahí."; BuscarEn: if (mujer hasnt general) "No me parece la actitud más apropiada para un caballero."; "No eres unas sabandija... Deja a los muertos en paz."; ], vida [; Hablar, Preguntar, Consultar, Responder: if (self hasnt general) "No hay respuesta."; "Tus palabras no pueden llegar tan lejos."; Dar: "Allá donde está no necesitará eso."; Mostrar: "Sus ojos ahora mirán mucho más lejos."; Atacar: "Sería como arrancarle las alas a un ángel."; ], ordenes [; if (self hasnt general) "Su cuerpo permanece inmóvil."; "Tus palabras no pueden llegar tan lejos."; ], reaccionar_antes [; Empujar, Tirar, Girar: if (self hasnt general) <>; "Dejémosla descansar en paz."; Disparar: if (uno == self && pistola in jugador) <>; Follar: if (uno == jugador && otro == mujer) <>; ], reaccionar_despues [; Dejar: if (uno == pistola) { if (self has general) "Al dejar caer la pistola sobre el suelo te preguntas si fuiste tú el asesino.^"; "La pistola cae al suelo con un sonido metálico."; }; move pistola to localizacion; ], has estatico animado hablable; !--------------------------------------------------------------------------------- ! Describamos a la mujer !--------------------------------------------------------------------------------- Object respiracion "respiracion" alto_faro with nombre 'respiracion', antes [; Escuchar: if (mujer has general) "Sin querer admitir la evidencia, vuelves a arrodillarte junto a ella... Definitivamente está muerta."; give mujer general; "Te arrodillas junto a ella y te acercas escuchar. Lo que habías creído su respiración era el viento que entraba através de las rendijas de las ventanas. La zarandeas tratando de despertarla pero su cuerpo inerte sólo es una muñeca de trapo dejándose llevar en tus manos...Definitivamente está muerta."; Examinar: <>; ], has femenino escenario oculto; Object ojos "ojos" alto_faro with nombre_m 'ojo', nombre_f 'mirada', nombre_mp 'ojos', genero G_MASCULINO + G_PLURAL, descripcion [; switch (random (2)) { 1: "Tras la jaula de sus párpados se oculta agazapada la bestia de la muerte."; 2: "Sus párpados ocultan un mar en calma."; } ], antes [; Abrir: "No te atreves a enfrentarte a la negrura que hay trás ellos."; Cerrar: "Ya los tenía cerrados."; ], has escenario oculto; Object piel "piel" alto_faro with nombre_m 'piel' 'pie' 'pelo' 'cabello' 'brazo' 'dedo' 'culo' 'trasero', nombre_f 'mano' 'oreja' 'uña' 'espalda' 'rodilla' 'pierna' 'teta', nombre_fp 'manos' 'orejas' 'uñas' 'espaldas' 'rodillas' 'piernas' 'tetas', nombre_mp 'brazos' 'pies' 'dedos' 'cabellos' 'pelos', genero G_MASCULINO, descripcion [; if (mujer has general) "Todo en ella es muerte."; "Cada parte de su cuerpo es una perfecta sinfonía."; ], has escenario oculto; Object cara "cara" alto_faro with nombre_f 'cara' 'faz' 'expresion', nombre_m 'gesto' 'rostro', genero G_FEMENINO, descripcion [; if (mujer has general) "Cuánto silencio en su rostro."; "Parece un ángel dormido."; ], has escenario oculto; Object ropa "ropa" alto_faro with nombre 'ropa' 'vestidos' 'vestido' 'traje' 'ropas' 'tela' 'telas', descripcion "Livianas telas sobre la delicada piel de su cuerpo. Hay una pequeña mancha de sangre en la zona del pecho.", antes [; Coger: "Ella no se merece que le hagas eso."; ], has escenario oculto; Object pecho "pecho" alto_faro with nombre 'pecho' 'torax' 'peto' 'sangre' 'mancha' 'herida', descripcion [; if (mujer has general) "Por aquí debió entrar la bala... Curiosamente hay poca sangre..."; give mujer general; "Tiene el pecho manchado de sangre... Me temo que ella está muerta."; ], antes [; Coger: <>; Beber: "No eres ningún vampiro."; Tocar: "Te manchas las manos con su sangre. Aterrado y asqueado, te las limpias con rapidez."; Oler: "Tiene un olor metálico."; ], has escenario oculto; Object bala "bala" with nombre_f 'bala' 'municion', genero G_FEMENINO, descripcion "Parece increíble que algo tan pequeño te pueda llevar al infierno.", esta_en limbo, ; !------------------------------------------------- ! El Siniestro Niño !------------------------------------------------- Object nene "niño" with nombre 'niño' 'infante' 'nene' 'chico' 'bebe', articulo "el", descripcion "Hay algo aterrador en él.", describir [; print "^Un niño de ojos profundos y enigmática mirada está aquí"; if (child (nene) ~= nothing) ", con ", (a) child(nene), " entre sus manos."; "."; ], reaccionar_antes [; if (pistola in localizacion && pistola notin jugador && pistola notin nene) move pistola to nene; else if (pistola in nene && bala in nene && random (5) == 1) {move nene to limbo; move pistola to localizacion; "El niño carga la pistola y accidentalmente se mata."; } else if (pistola in nene && bala in pistola && random (8) == 1) {move nene to limbo; move pistola to localizacion; move bala to limbo; "El niño se pega un disparo accidentalmente y cae al suelo desintegrándose..."; } Examinar: if (uno == foto && localizacion == bajo_faro) switch (random (3)) { 1: print "^~- ¿Verdad que es guapa?~^^"; 2: print "^~- Es la madre más guapa del mundo.~^^"; 3: print "^~- Se parece a mí.~^^"; } Ir: if (uno == obj_abajo && trampilla has abierta) print "^~- Debería tener cuidado ahí abajo, señor.~, dice el niño.^"; if (uno == obj_arriba) { if (random (3) == 1) print "^~- Adios, señor.~^"; } Meter: if (uno == foto && otro == trampilla) print "^~- No la tire, señor, devuélvamela.~^^"; Coger: if (uno in nene) "^~- ¿Por qué me ", (lo) uno, " quieres quitar ahora?~"; ], tedio 0, vida [ x; Aburrirse (); Preguntar, Hablar, Consultar: x = AveriguarTema (TemasNene); switch (x) { t_mama: switch (random (2)) { 1:"^~- ¿Sabe usted dónde está?~"; 2:"^~- Me dijo que la esperara aquí.~"; } t_faro: "^~- Esta ha sido mi casa desde siempre, señor. Vivo aquí con mi madre.~"; t_escapar: "^~- No lo sé, señor. Jamás he salido de mi casa.~"; t_foto: if (foto in nene) "~- Me la dio mi mama para que nunca la olvidara.~, te dice mientras aprieta la fotografía entre sus manos."; "^~- ¿Podría devolvermela, señor?~"; t_cadaver: "^~- ¡No es verdad! Eso es mentira... Esa no es ella.~"; t_viento: "^~- Me gustan los truenos...~"; t_escalera: "^~- No sé lo que hay arriba, mi mama nunca me deja subir.~"; t_pistola: if (pistola in jugador or localizacion) "^~- Me gusta mucho su juguete... ¿Me la deja?"; else if (pistola in nene) "^~- Me gusta jugar a los vaqueros...~"; "^~- No sé donde está.~"; t_ti: "^~- No lo conozco, señor. Es la primera vez que lo veo en mi casa. ¿Es usted un invitado de mi mama?~"; t_trampilla: "^~- Es donde juego con mi mascota...~"; t_bestia: "^~- Le gusta jugar conmigo... Aunque es algo traviesa... Y no le gusta la luz.~"; t_mobiliario: "^~- Nunca hemos necesitado muebles.~"; t_ladrones: "^~- No, señor, aquí no han robado nada. Todo está como siempre.~"; t_farero: "^~- El faro ha sido siempre nuestro. Mi mamá es la dueña.~"; default: switch (random (4)) { 1: "^~- Soy demasiado pequeño para saber todo de las cosas.~"; 2: "^~- Yo sé muy poco, señor.~"; 3: "^~- Sólo soy un niño.~"; 4: "^~- No sé.~"; } } Responder: x= AveriguarTema (TemasNene); switch (x) { t_hola: switch (random (3)) { 1:"^~- ¡Hola!~"; 2:"^~- He perdido a mi madre. Podría buscarla, por favor.~"; 3:"^El niño te saluda receloso."; } t_ven: "^~- ¿A dónde quiere que vaya?~"; t_tacos: "Es demasiado joven para oir esas palabras."; t_edad: "El niño levanta una mano con los cinco dedos extendidos."; t_ayuda: "^~- Sólo soy un niño. ¿En qué podría ayudarle?~"; t_conocer: "^~- No le he visto antes. Es la primera vez que hablo con usted.~"; default: switch (random (4)) { 1: "El niño te mira con una tristeza infinita sin entenderte."; 2: "El niño sonríe enseñándote una ristra de lápidas por dientes."; 3: "^~- Habla usted raro, señor...~"; } } Dar: if (uno == foto && foto in jugador) { move foto to nene; "^~- Gracias, señor. ¿Sabe usted dónde está mi mama?~"; } if (uno == pistola && pistola in jugador) { move pistola to nene; "^~- ¡Gracias, señor! Nadie me había hecho un regalo antes.~"; } if (uno == bala) { move bala to nene; "El niño coge la bala y se la guarda en un bolsillo."; } "^~- No gracias, señor.~"; Besar: "^~- Puag...~"; Atacar: move nene to limbo; give trampilla estatico; "El niño desaparece antes de que puedas alcanzarlo."; Mostrar: if (uno == foto) "^~- Es la foto de mi mamá... ¿Podría devolvérmela, señor?~"; else if (uno == pistola) "^~- Me gusta... ¿Me deja jugar con ella?~"; else if (uno == bala) "^~- ¿Un caramelo?~"; ], cada_turno [; if (random (3)~=1) rtrue; print "^"; switch (random (2)) { 1: "Metiéndose un dedo en la nariz, el niño rebusca en ella con afán de espeleólogo."; 2: "~- ¡Sniff!~"; } ], reaccionar_despues [; Dejar: if (uno == pistola) "Dejas la pistola en suelo. El niño la coge y se pone a jugar con ella."; Abrir: if (uno == trampilla) print "^~- No debería bajar ahí abajo, señor.~^^"; ], ordenes [; if (accion == ##Subir) "^~- Me dan miedo las alturas.~"; else if (accion == ##Bajar) "^~- No quiero jugar ahora...~"; Ir: if (uno == obj_arriba) "^~- Me dan miedo las alturas.~"; else if (uno == obj_abajo) "^~- No tengo ganas de jugar ahora...~"; "^~- Estoy esperando a mi mama, señor, no puedo irme.~"; Soso: "El niño con voz de vinilo te dice: ~- ¿Qué le he hecho yo a usted, señor?"; Tacos: "Es demasiado pequeño para oir esas cosas."; Seguir: "^~- No puedo ir... Debo esperar a mi mama.~"; Dar: if (uno in nene && otro == jugador) { if (uno == foto) "^~- La foto es de mi mama.~"; move uno to jugador; "El niño te devuelve resignado ", (el) uno,"."; } "^~- No tengo eso, señor.~"; Ayuda: "^~- Lo siento, señor, no puedo ayudarle. Sólo soy un niño.~"; Abrir: if (uno == trampilla && trampilla hasnt abierta) "^~- No puedo hacerlo, señor. Si lo hago se escapara...~, el niño se tapa la boca y ríe maliciosamente."; "^El niño te mira algo sorprendido y te señala la trampilla abierta."; Cerrar: if (uno == trampilla && trampilla has abierta) {give trampilla ~abierta; "^~- Bueno...~, y cierra la trampilla con sus delicadas manos."; } "^~- Ya está cerrada.~"; Meter: if (uno in nene && uno ~= foto) { if (trampilla has abierta) {move uno to laberinto1; "^~- No creo que a mi mascota le guste, pero bueno...~";} "^~- Está cerrada.~"; } else if (uno == foto && foto in nene) "^~- No voy a tirar la foto de mi mama~"; "^~- No tengo eso, señor.~"; NoComprendido: "^~- Echo de menos a mi mama.~"; default: "^~- Mi mamá está buscándome, señor. ¿Puede ayudarme?~"; ], antes [; EmpujarDir: if (uno == nene) "^~- No, señor, mi mama me dijo que la esperara aquí.~"; Empujar: if (uno == nene) "^~- No quiero moverme de aquí. Mi madre tiene que llegar.~"; Coger: if (uno == nene) "^~- Ya soy mayor para ir solo.~"; Disparar: if (pistola in jugador) { if (bala notin pistola)"El niño te mira con ojos de cachorro abandonado."; move nene to limbo; "Apuntas a su cabeza con la frialdad de un asesino... Aprietas el gatillo... Pero antes de que la bala le alcance el niño desaparece..."; } "Apuntas con tu dedo y disparas... El niño se ríe y hace lo mismo.^^~- ¡Me gusta este juego!~"; DispararA: <>; ], has animado hablable transparente; !--------------------------------------------------------------------------- ! El labertinto de la mente !--------------------------------------------------------------------------- Lugar laberinto1 "Entrada a los Pasadizos" with descripcion [; print "Parece que estos son los antiguos túneles por donde se introducía el contrabando desde la costa. Las paredes están humedas debido a la cercanía del mar."; if (trampilla has abierta) print " Un rayo de luz atraviesa el aire enrarecido desde la trampilla abierta.^"; ], arriba trampilla, al_e laberinto2, antes [; Examinar: if (uno == obj_arriba) <>; Escuchar: if (trampilla hasnt abierta) "Con la trampilla cerrada, todo está silencioso... Como una emboscada."; "El ruido del viento llega sordo y apagado desde arriba."; ], cada_turno [; if (nene in bajo_faro && trampilla has abierta) { move nene to limbo; give trampilla ~abierta; give self ~luz; "^Ves la sombra del niño recortándose en el cuadrado de la trampilla. Sonríe maliciosamente y cierra la trampilla, que cae como un golpe seco.";} ], ; Lugar laberinto2 "Tunel Este" with descripcion "A medida que los pasillos se van internando en la tierra, la humedad en el ambiente se va haciendo más intensa. Hasta aquí llega un sonido del oleaje. Sin duda, el mar no debe andar muy lejos.", al_o laberinto1, al_s laberinto4, al_n laberinto3, ; Lugar laberinto3 "Salida al Mar" with descripcion "Este es el final del pasillo, más allá está el mar. La orilla se interna unos pasos hasta adentro, por lo que desde aquí sólo puede verse el inquieto horizonte.", al_s laberinto2, cada_turno [; ArrancarDaemon (self); ], cantidad 1, daemon [; if (localizacion == laberinto3) { if (self.cantidad ~=0) {self.cantidad=0; switch (random (2)) { 1: "^Las olas llegan a la orilla como garras."; 2: "^El mar abraza por unos instantes tus pies y después los abandona tímidamente."; } } else if (self.cantidad == 0) {self.cantidad =1; rtrue; } } ], antes [; if (antorcha in localizacion && antorcha notin jugador && antorcha has luz && self.cantidad ~= 0) { give antorcha ~luz; give antorcha ~encendida; "^Una ola apaga la antorcha.^"; } Nadar: banderafin =1; "Te internas en las oscuras aguas de este mar... A medida que te alejas de la costa puedes observar la impresionante estructura del faro erigida con orgullo frente al viento... Las olas te balancean y te columpian a su antojo, mientras las fuertes corrientes de este mar se te enrollan a tus pies con cintas de agua... El frío entumece tus músculos y tu pensamiento... Un relámpago sacude el cielo con un escalofrío eléctrico... Después le sigue un trueno... Finalmente el mar te abraza con las sábanas tibias del olvido."; ], has luz; Lugar laberinto4 "Pasadizo Sur" with descripcion "Con los años y el desuso, estos pasadizos se han convertido en animales huraños que rechazan tu compañía. El aire enrarecido te advierte, como un perro dormido que levanta su cabeza y gruñe ante la presencia de un extraño, que este sitio no está falto de peligro.", al_n laberinto2, ; Lugar laberinto5; Lugar laberinto6; Object antorcha "antorcha" laberinto3 with nombre_f 'antorcha', genero G_FEMENINO, inicial "En una de las paredes hay una antorcha.", antes [; Examinar: print "Probablemente era utilizada por los antiguos contrabandistas para internarse en la oscuridad de estos pasillos."; if (self hasnt encendida) " Ahora está apagada."; " Y brilla con una tenue luz."; ], describir [; print "^Puedes ver una antorcha"; if (self has encendida) print " alumbrando."; " apagada."; ], despues [; Encender: give self luz; Apagar: give self ~luz; ], has femenino conmutable; !------------------------------------------------- ! La Bestia !------------------------------------------------- Object bestia "bestia" laoscuridad with nombre_m 'ente' 'mounstruo' 'pegajoso' 'viscoso' 'ser' 'demonio' 'bicho' 'fantasma', nombre_f 'cosa' 'criatura', genero G_FEMENINO, cada_turno [; ArrancarDaemon (self); ], cantidad 0, daemon [; if (localizacion ~= laoscuridad) { self.cantidad=0; PararDaemon (self); rtrue; } switch (++(self.cantidad)) { 1: "^Algo se ha movido cerca de ti."; 2: "^De repente sientes naúseas y un terror que se te congela en las entrañas."; 3: "^Algo húmedo y viscoso ha pasado rozándote la cara."; 4: "^Sientes el aliento fétido de algo a tu espalda."; 5: banderafin=1; "^De pronto una oscuridad profunda y viscosa te cubre como una capa, tus huesos comienzan a astillarse con sonoros crujidos... Antes de que seas consciente de lo que ocurre, tu cuerpo forma parte de una difícil digestión."; } ], has oculto; !------------------------------------------------- ! Definición de nuevos verbos !------------------------------------------------- [ RecargarSub; "No creo que eso pueda recargarse."; ]; [ DescargarSub; print (_El) uno, " no tiene balas."; rtrue; ]; [ DispararSub; if (uno == jugador) { if (bala in pistola) { banderafin = 1; "^^Sin temer a la muerte, colocas la pistola en tu sien. Afuera, el viento azota las riendas del aire. Llueve intensamente... Mientras la bala atraviesa los frágiles muros de tu mente, un último pensamiento recorre las viejas vías de tu memoria: el sabor apagado de unos labios de mujer."; } } "No tienes la pistola."; ]; [ DispararASub; if (pistola in jugador) "De nada te sirve ir haciendo el vaquero por ahí."; "No tienes la pistola."; ]; [ ReanimarSub; "No se le puede devolver la vida a aquello que nunca la tuvo."; ]; [ FollarSub; "Tus pensamientos divagan por sendero tenebroso..."; ]; [ HistoriaSub; print "^~A lo lejos, un Faro~^"; print " Esta es mi primera aventura empleando el Inform, y posiblemente, la primera también después de muchos años apartado de las aventuras conversacionales. Probablemente esté llena de errores y se la pueda achacar de simple, absurda, aburrida..., pero sólo tuve tres o cuatro días para empaparme a fondo del modo en que funciona el Inform (que no es fácil), teniendo en cuenta que hacia años que no veía ni de lejos una aventura conversacional. Además, el objetivo de este juego (si se le puede llamar así), es para mí bien siempre: enseñarme. No lo he hecho con el fin de terminarlo siquiera, sólo he buscado en él aprendizaje para futuras aventuras.^^ La idea surgio hace unos meses, cuando los antiguos integrantes de lo que en su tiempo se denominó ~Alfa Aventuras~, nos reunimos y decidimos retormar las cosas por donde las habíamos dejado. Este afán no surgió espontáneamente, sino que a raíz de nuestro conocimiento del CAAD y de la labor que estaba desempeñando para mantener vivo el espíritu de la aventura, resurgió en nosostros toda la energía y el entusiasmo que durante tantos años nos proporcionó crear aventuras conversacionales."; print "^ El primer gran problema que se nos planteó fue qué parser usar. Nuestra experiencia provenía en gran parte de lo que conocíamos, es decir, el PAWs. Sin embargo, este nos pareció demasiado arcaico (esto lo digo con todo el cariño y el más sincero agradecimiento a ese dichoso programita que durante tantas horas me entretuvo y me mantuvo pegado delante del ordenador). Nos pusimos en marcha entonces, a la búsqueda de un parser que cumpliera con todas nuestras exigencias (que no eran pocas) y que no se asemejara a nuestro querido PAWs ni pecase de sus deficiencias."; print "^^ El primero de los elegidos fue el Prometeo, diseñado por uno de nuestros integrantes (Ricardo Pérez López). Y esta iba a ser nuestra elección hasta descubrir el Inform. Las razones por las que finalmente nos decidimos por él me parecen obvias y tendría que extenderme demasiado para alabar cada una de sus cualidades."; print "^^ Pero antes, debemos agradecer a ~Zack MacKraken~ por su traducción al español de los manuales y las librerias del Inform, y le animamos a que termine su fantástico trabajo. También debemos felicitar a Linus Trovalds por tener la fantástica idea de crear esa maravilla llamada Linux, sin el cual, esta aventura se habría retardado unas semanas más."; print "^^ ~A lo lejos, un Faro~ es una prueba de lo que en un futuro será la ~Fuga de Colditz~, una aventura ambiciosa, descomunal, con multitud de de PSIs (o PNJs), donde hemos volcado todo este rejuvenecido entusiasmo.^^ Disfrútala, y gracias.^^"; print " El equipo de Alpha Aventuras.^"; print "...^"; <>; ]; [ AyudaSub; switch (random (5)) { 1: "Que no te engañen las apariencias..."; 2: "No todo es lo que parece..."; 3: "Resuelve tus asuntos..."; 4: "Donde hay un arma hay un crimen..."; 5: "¿Qué hace a un sueño tan real?..."; } ]; [ SeguirSub; "Las sombras acuden a ti..."; ]; [Aburrirse ; self.tedio++; if (self.tedio >= 100) {move self to limbo; print "^", (_El) self , " aburrido por tu interrogatorio, desaparece."; } if (self.tedio >= 50 && self.tedio <100) { if (random (3) == 1) print "^", (_El) self, " está distraído y no te presta atención"; } ]; !--------------------------------------------------- ! Temas para el Niño Siniestro !-------------------------------------------------- include "Etemas"; Class Tema has propio; Object TemasNene; Tema -> t_pistola "sobre la pistola" with nombre 'pistola' 'arma' 'revolver'; Tema -> t_mama "sobre la madre" with nombre 'mama' 'madre' 'mujer' 'señora' 'acompañante'; Tema -> t_faro "sobre el faro" with nombre 'faro' 'estructura'; Tema -> t_farero "sobre el farero" with nombre 'farero' 'dueño' 'antiguo' 'inquilino' 'propietario'; Tema -> t_escapar "sobre como escapar" with nombre 'escapar' 'escapada' 'huir' 'salida' 'salidas' 'salir' 'como' 'como' 'donde'; Tema -> t_foto "sobre la foto" with nombre 'foto' 'fotografia' 'retrato'; Tema -> t_viento "sobre el viento" with nombre 'viento' 'tormenta' 'torrencial' 'huracan' 'brisa'; Tema -> t_cadaver "sobre el cadaver" with nombre 'cadaver' 'muerta' 'muerto' 'cuerpo' 'fiambre'; Tema -> t_escalera "sobre las escaleras" with nombre 'escalera' 'escaleras' 'escalones' 'escalon' 'caracol'; Tema -> t_mobiliario "sobre los muebles" with nombre 'mobiliario' 'mueble' 'muebles'; Tema -> t_ladrones "sobre los ladrones" with nombre 'ladron' 'ladrones' 'saqueador' 'saquedores'; Tema -> t_ti "sobre ti" with nombre 'ti' 'mi' 'mismo' 'conoce' 'conoces' 'si' 'me'; Tema -> t_bestia "sobre el monstruo" with nombre 'monstruo' 'cosa' 'bicho' 'ente' 'asesino' 'criatura' 'oscuridad' 'mascota' 'animal'; Tema -> t_trampilla "sobre la trampilla" with nombre 'trampilla' 'puerta' 'abajo' 'que' 'hay' 'abajo' 'a' 'donde' 'lleva' 'compuerta' 'conduce'; Tema -> t_conocer with nombre 'si' 'me' 'conoce' 'ti' 'mismo' 'conoces'; Tema -> t_hola with nombre 'hola' 'tal' 'saludo' 'te' 'encuentras' 'como' 'que' 'estas' 'saludos'; Tema -> t_ven with nombre 'ven' 'sigueme' 'acompañame' 'conmigo'; Tema -> t_tacos with nombre 'gilipollas' 'subnormal' 'cabron' 'puta' 'joputa' 'mamon' 'follen' 'jodan' 'jodete' 'mierda'; Tema -> t_edad with nombre 'cuantos' 'años' 'edad'; Tema -> t_ayuda with nombre 'ayuda' 'ayudame' 'salvame' 'socorro'; !------------------------------------------------- Verb 'recarga' * noun -> Recargar; Verb 'descarga' * noun -> Descargar; Verb 'dispara' 'acribilla' 'fulmina' * -> Disparar * noun -> Disparar * noun 'a//' noun -> Disparar * 'a//' noun -> DispararA; Verb 'revive' 'reanima' * noun -> Reanimar * 'a//' noun -> Reanimar; VerboIrregular "revivir" with imperativo 'revive'; Verb 'folla' 'follate' * 'a//' noun -> Follar * noun -> Follar; VerboIrregular "follar" with imperativo 'follate'; Verb 'ayuda' 'ayudame' * -> Ayuda; Verb 'historia' * -> Historia; Verb 'sigueme' 'ven' 'sigame' 'acompañame' 'siga' 'venga' * -> Seguir;