!% -~D !% -~S !% +include_path=..\lib\base,..\lib\contrib,..\games\Forrajeo !Poner "% -~S" (sin las ") permite compilar para generar archivo Forrajeo.z5 (máquina Z versión 5) !Poner "!% -~D" al principio del archivo (sin las ") permite compilar en modo Release (No Debug) ! "Forrajeo" ! ! REALIZADO POR: Sebastián Armas ! ! Copyright (C) 2011 ! CONSTANTES Constant Historia "~Forrajeo~^ Cuando el remedio es peor que la enfermedad"; Constant Titular "^Realizado por: Sebastián Armas (Incanus)^ (C) Año 2011^^ Ingresa AYUDA para indicaciones generales y otros comandos.^ Ingresa PISTAS para resolver problemas o salir de atascos.^ Ingresa PUNTUACION TOTAL para tu puntaje y problemas resueltos.^ Ingresa ANIMAR para alternar entre texto animado y texto normal.^^"; Serial "010101"; Release 1; ! v01.01.01: ! ! Primera versión publicable Constant ADMITIR_COMANDO_SALIDAS; ! Constant DEBUG; ! No queremos usar los comandos 'Lugares' y 'Objetos' Constant NO_LUGARES; ! Puntuación con sistema de tareas Constant HAY_TAREAS; Constant PUNTUACION_MAX 8; Constant NUMERO_TAREAS = 8; ! El array que contiene los puntos por cada tarea realizada... ! 0 1 2 3 4 5 6 7 (en total son 8 tareas) Array puntuacion_tareas -> 1 1 1 1 1 1 1 1; ! (de 1 punto cada una) ! Tenemos Curiosidades Constant HAY_CURIOSIDADES; ! Definiciones para curiosidades [curiosidades; ZIPI_RunMenuT(ZIPI_Menu6); ]; !-------------- Include -------------- Include "zipi.inf"; ! Módulo para Menues Include "EParser"; ! Módulo para InformATE! ! MensajesAlternativos [MensajeMuerte; style fixed; style bold; switch(banderafin) { 3: print "*** A buscarse la vida o la muerte: lo que primero salga... ***^^"; style roman; 4: print "*** Mejor muerto, que muerto en vida... ***^^"; style roman; 5: banderafin = 2; print "*** Me largo de esta ciudad de mala muerte... ***^^"; style roman; 6: print "*** ¡Sale un muerto que camina!... ***^^"; style roman; } style roman; rfalse; ]; ! Codigo para Puntuacion por Tareas ! Imprimir el nombre de cada tarea dada [ ImprimirTareas tarea; print "por "; switch(tarea) { 0: "matar al zombi de la bodega"; 1: "encontrar la pistola"; 2: "bloquear la puerta con el gabinete"; 3: "bloquear la ventana con la mesa"; 4: "saquear el gabinete rojo"; 5: "saquear el gabinete verde"; 6: "saquear el gabinete azul"; 7: "salir con vida"; } ]; ! Imprime el rango que el jugador a conseguido de acuerdo a la ! puntuacion que tiene actualmente [ ImprimirRango; print ", otorgándote el rango de: ~"; switch (puntuacion) { ! la variable global de puntuacion 0 to 1 : print "Carterista"; 2 to 3 : print "Ratero"; 4 to 7 : print "Ladrón"; 8 to 8 : print "Forrajero"; } print_ret "~."; ]; Include "Msg1P"; ! Módulo para mensajes de InformATE! en primera persona singular ("yo") Include "Acciones"; ! Módulo para InformATE! Include "Gramatica"; ! Módulo para InformATE! Include "Cortos_mod"; ! Módulo para texto animado ATENCION: fue modificado para usar ANIMAR Attribute legible; ! Definiciones para lectura !------------ End Include ------------ ! Ayuda de la Aventura ! Aquí va el código ZIPI ZIPI_Menu ZIPI_Menu1 with ZIPI_titulo "Ayuda de la Aventura", ZIPI_item ZIPI_Menu2 ZIPI_Menu3 ZIPI_Otro2 ; ZIPI_Menu ZIPI_Menu2 with ZIPI_titulo "Instrucciones", ZIPI_item ZIPI_Otro0 ZIPI_Otro1 ; ZIPI_Menu ZIPI_Menu3 with ZIPI_titulo "Pistas", ZIPI_item ZIPI_Menu4 ZIPI_Menu5 ZIPI_Pista4 ZIPI_Pista5 ; ZIPI_Menu ZIPI_Menu4 with ZIPI_titulo "Sobrevivir primero", ZIPI_item ZIPI_Pista0 ZIPI_Pista1 ; ZIPI_Menu ZIPI_Menu5 with ZIPI_titulo "Ganar tiempo", ZIPI_item ZIPI_Pista2 ZIPI_Pista3 ; ZIPI_Menu ZIPI_Menu6 with ZIPI_titulo "Curiosidades y Otros", ZIPI_item ZIPI_Menu7 ZIPI_Otro6 ; ZIPI_Menu ZIPI_Menu7 with ZIPI_titulo "Curiosidades", ZIPI_item ZIPI_Otro3 ZIPI_Otro4 ZIPI_Otro5 ; ZIPI_Pista ZIPI_Pista0 with ZIPI_titulo "Cómo acabo con el zombi en la bodega", ZIPI_pistas "Cuando caíste a la bodega, aterrizaste en una mesa..." "...que puedes examinar." "Verás que una de sus patas quedó separada." "Puedes cogerla..." "...con COGER PATA..." "...y usarla para matar al zombi.." "...con MATA ZOMBI o MATA ZOMBI CON PATA" ; ZIPI_Pista ZIPI_Pista1 with ZIPI_titulo "Con qué más puedo defenderme", ZIPI_pistas "Una vez que mates al zombi, fíjate en el cadáver que estaba comiendo." "Verás que tiene un agujero de bala..." "...y eso no pudo hacérselo el zombi." "Registra el cadáver..." "...con REGISTRAR CADAVER..." "...y tendrás en tu poder una pistola cargada." "Puedes matar zombis con ella..." "...con DISPARA A ZOMBI o MATA A ZOMBI CON PISTOLA..." "...pero cuida de conservar las balas o te harán falta después." ; ZIPI_Pista ZIPI_Pista2 with ZIPI_titulo "La ventana", ZIPI_pistas "Para evitar que entren zombis por la ventana..." "...necesitas bloquearla con algo." "La mesa tiene la cubierta intacta y es grande..." "...así que levántala..." "con LEVANTA MESA o COGE MESA y bloquearás la ventana." "Hazlo pronto o lo lamentarás." ; ZIPI_Pista ZIPI_Pista3 with ZIPI_titulo "La puerta", ZIPI_pistas "La puerta está cerrada..." "...pero no estaría demás algo que la bloqueara." "Si te fijas en los gabinetes..." "...verás que el rojo no está fijo al muro y está al lado de la puerta." "Puedes empujarlo..." "con EMPUJA GABINETE ROJO y bloquearás la puerta." "Ahora, dedícate a abrir los gabinetes." ; ZIPI_Pista ZIPI_Pista4 with ZIPI_titulo "Conseguir la mercancía", ZIPI_pistas "Si intentas abrir los gabinetes..." "...verás que están bien cerrados." "Si tienes la pistola..." "puedes abrirlo con DISPARA A GABINETE ROJO, por ejemplo." "Si quieres conservar balas..." "Fíjate en el gabinete verde..." "...y verás que hay un extintor en su costado." "Cógelo y úsalo para abrir los gabinetes a golpes..." "con GOLPEA GABINETE ROJO CON EXTINTOR, por ejemplo." "Una vez abierto, coge los remedios que encuentres..." "...y mételos en tu bolso." ; ZIPI_Pista ZIPI_Pista5 with ZIPI_titulo "Salir de la bodega", ZIPI_pistas "La única salida es por la puerta..." "...y si la abres llegarán los zombis." "Procura conseguir primero algo con qué abrirte paso." "Si registras el cadáver..." "...con REGISTRAR CADAVER..." "tendrás en tu poder una pistola cargada." "Conserva la munición..." "...y cuando lleguen los zombis podrás salir vivo." "Trata de conseguir la mercancía primero..." "...siguiendo las instrucciones de la pista con ese nombre." ; ZIPI_Otro ZIPI_Otro0 with ZIPI_titulo "Comandos Principales", ZIPI_ejecutar [; print "Las órdenes siguientes son básicas y pueden encontrarse en casi cualquier aventura conversacional. El jugador puede tratar siempre de hacer otras acciones.^^"; style fixed; print "ayuda"; style roman; print " : obtener esta ayuda.^"; style fixed; print "puntuacion"; style roman; print " : obtener puntaje acumulado en el juego.^"; style fixed; print "puntuacion total"; style roman; print " : obtener puntaje acumulado en el juego, con detalle por tareas cumplidas.^"; style fixed; print "pistas"; style roman; print " : obtener pistas para resolver el juego (evite la tentación...).^"; style fixed; print "animar"; style roman; print " : alternar texto animado con texto normal.^"; style fixed; print "save, guardar"; style roman; print " : grabar el estado actual de la partida (recomendable...).^"; style fixed; print "load, cargar"; style roman; print " : recuperar un estado de partida ya guardado.^"; style fixed; print "quit, fin, terminar"; style roman; print " : terminar la partida en juego.^^"; style fixed; print "salir, salir de x"; style roman; print " : salir del lugar o del objeto x.^"; style fixed; print "salidas"; style roman; print " : mostrar las salidas del lugar.^"; style fixed; print "i, inventario"; style roman; print " : mostrar una lista de los objetos llevados.^"; style fixed; print "mirar"; style roman; print " : mostrar una descripción del lugar en que estás.^^"; style fixed; print "ex x, examinar x"; style roman; print " : mostrar una descripción del lugar u objeto x.^"; style fixed; print "buscar en x, mirar en x"; style roman; print " : revisar el objeto x para ver si contiene algo más...^"; style fixed; print "coger x, dejar x"; style roman; print " : el objeto x pasa a ser o deja de ser llevado.^"; style fixed; print "meter x en y"; style roman; print " : el objeto x deja de ser llevado y queda dentro de y.^"; style fixed; print "sacar y de x"; style roman; print " : el objeto y sale de x para pasar a ser llevado.^^"; style fixed; print "tirar de x"; style roman; print " : tirar del objeto x.^"; style fixed; print "empujar x"; style roman; print " : empujar el objeto x.^^"; style fixed; print "golpea x con y"; style roman; print " : Golpea el objeto x con el objeto y.^^"; style fixed; print "habla con x"; style roman; print " : Habla al personaje x.^"; style fixed; print "dale y a x"; style roman; print " : Entrega el objeto y al personaje x.^"; style fixed; print "muestra y a x"; style roman; print " : Enseña el objeto y al personaje x.^"; style fixed; print "mata x con y"; style roman; print " : Mata al personaje x usando el objeto y.^"; style fixed; print "dispara a x con y"; style roman; print " : Dispara al personaje x usando el arma y.^"; ]; ZIPI_Otro ZIPI_Otro1 with ZIPI_titulo "Otros Comandos", ZIPI_ejecutar [; print "Las órdenes, en general, se pueden dar según:^"; style fixed; print ""; style roman; print " o bien^"; style fixed; print " "; style roman; print " o bien^"; style fixed; print " ^"; style roman; ]; ZIPI_Otro ZIPI_Otro2 with ZIPI_titulo "Agradecimientos", ZIPI_ejecutar [; print "A mi infatigable tester: Jenesis.^^"; print "A toda la comunidad IF española: el foro del CAAD y tantísimos sitios web con ejemplos y documentos invaluables.^^"; print "A Alessandro Schillaci y Luis Fernández, creadores de JIF (en español), un pedazo de herramienta para el desarrollo en InformATE!^^"; print "A Baltasar, por convocar la V Mini Comp.^^"; print "A todos los que creen que en lo ajeno reina la desgracia..."; ]; ZIPI_Otro ZIPI_Otro3 with ZIPI_titulo "Medidas desesperadas", ZIPI_ejecutar [; print "Prueba SUICIDATE. Si te ves rodeado y tienes la pistola cargada, intenta SUICIDATE CON PISTOLA."; ]; ZIPI_Otro ZIPI_Otro4 with ZIPI_titulo "Sobre gustos...", ZIPI_ejecutar [; print "Prueba a HABLA CON ZOMBI o BESA A ZOMBI."; ]; ZIPI_Otro ZIPI_Otro5 with ZIPI_titulo "Carga útil", ZIPI_ejecutar [; print "Si ya lo registraste, prueba COGER CADAVER."; ]; ZIPI_Otro ZIPI_Otro6 with ZIPI_titulo "Historia de ~Forrajeo~^^", ZIPI_ejecutar [; print "Sobre la Creación de la Obra^^"; print "Finalizaba un 2011 más bien escaso en producción aventurera y Baltasar decidió que era un buen momento para una Mini Comp.^"; print "Sabiendo ya que (más allá de toda discusión) la única forma de que haya más aventuras es creándolas ;-) me sumé a la convocatoria, aunque los plazos fueran apretados y el fin de año se me viniera encima, con todas sus actividades escolares, laborales y familiares.^"; print "Y aquí está el resultado.^^"; print "Sobre el Tema de la Obra^^"; print "El género de los zombis nunca fue de mi agrado o de mi interés... hasta que recibí, de aquí y allá, algunas atinadas recomendaciones.^"; print "Primero fue ~Slither~, una película estadounidense ~horriblemente~ divertida.^"; print "Luego, por un comentario en facebook, llegué a ~World War Z: An Oral History of the Zombie War~ de Max Brooks, planteado como una narración de la post guerra mundial... con los zombis.^"; print "Después vino ~The Walking Dead~, una serie de televisión estadounidense donde los zombis no son más que el trasfondo para la lenta desintegración de lo que hace humanos a los que sobreviven a la catástrofe.^"; print "Finalmente, cayó en mis manos la trilogía literaria ~Apocalipsis Z~ de Manel Loureiro, un estupendo relato de zombis de origen y ambientación español.^^"; print "Sirva todo esto para que el lector tenga también sus primeros pasos en un subgénero del horror que a primera vista puede parecer poco atractivo, je...^^"; print "Y aquí, con prisa y entusiasmo, está mi aporte a esta Mini Comp y al ~corpus~ :-P de los relatos de zombis, desde la perspectiva de la ficción interactiva...^^"; print "Santiago de Chile, 21 de Diciembre, 2011"; ]; ! CLASES GENERICAS ! Meta Clase para Habitaciones Class Habitacion with antes [; Meterse: if (uno==0) "¿Y dónde voy a sentarme...?"; !num Comer: if (uno==0) "Pero... si aquí no hay nada para comer..."; Beber: if (uno==0) "Pero... si aquí no hay nada para beber..."; Soplar, Gesticular : "Me pongo a hacer morisquetas y meneo los brazos y piernas..."; Dormir : "Qué más quisiera, pero aquí no creo que vuelva a despertar..."; Despertarse : "Más despierto, imposible."; ! Tacos : ! "Mis padres me educaron mejor que eso..."; Rezar : "No creo que me ayude en lo más mínimo a salir de esta..."; Responder: print "Para hablar con los personajes, usa:^"; style fixed; print "HABLA CON "; style roman; rtrue; Oler: if ( (uno==0) || (uno==Objeto_Localidad) ) "El lugar apesta..."; Escuchar: if ( (uno==0) || (uno==Objeto_Localidad) ) "Se escuchan los gemidos de las criaturas aquí cerca..."; BuscarEn, Tocar: if (uno == obj_arriba) "No alcanzo..."; else if (uno == obj_abajo) { if (otro==0) <>; else <>; } Examinar: if (uno == obj_arriba) { "El techo está sucio y apenas se ve nada en la penumbra..."; } else if (uno == obj_abajo) <>; ], has luz; ! Clase para PSI Class PSI class Object with nombre_m 'zombi' 'zombie' 'muerto' 'andrajo' 'pedazo' 'cuerpo' 'mano' 'pie' 'brazo' 'dedo' 'musculo' 'pelo' 'pecho' 'torso' 'puno' 'decapitado', nombre_mp 'andrajos' 'pedazos' 'manos' 'pies' 'brazos' 'dedos' 'musculos' 'pelos' 'punos', nombre_f 'criatura' 'pierna' 'cintura' 'cara' 'piel' 'una' 'espalda', nombre_fp 'piernas' 'unas' 'espaldas', adjetivos 'viviente' 'sucio' 'sucios' 'roto' 'rotos' 'descompuesto' 'descompuestos', descripcion [; if (self hasnt general) { give self general; self.descripcion_larga(); } else { give self ~general; self.descripcion_corta(); } rtrue; ], descripcion_larga "descripción larga del PSI", descripcion_corta "descripción corta del PSI", antes [; Escuchar: if (self has encendido) "El zombi emite un gruñido bajo y profundo."; else "El zombi no emite sonido alguno: está como muerto, je..."; Oler: "Apesta..."; BuscarEn: <>; Coger, Empujar: <>; Frotar, Probar, Oler: <>; BuscarEn: <>; ], vida [; Mostrar, Dar: "¿Para qué? No hay manera de negociar con los muertos..."; Hablar: "Los muertos no hablan, je..."; Besar: "No, qué asco..."; Responder: print "Para hablar con los personajes, usa:^"; style fixed; print "HABLA CON "; style roman; rtrue; ], has animado; ! Clase para Objetos que el jugador puede coger y manipular ! y que son parte de algún puzzle Class Objeto_Puzzle class Object with descripcion [; if (self hasnt general) { give self general; if (self.descripcion_larga ofclass string) self.descripcion_larga(); else indirect(self.descripcion_larga); } else { give self ~general; if (self.descripcion_corta ofclass string) self.descripcion_corta(); else indirect(self.descripcion_corta); } rtrue; ], descripcion_larga "descripción larga del objeto", descripcion_corta "descripción corta del objeto", antes [; BuscarEn: <>; Oler: "El lugar apesta... y todo lo que hay en él, también..."; Escuchar: "No produce ningún sonido."; ], has ~general; ! Clase para Objetos que son parte del jugador Class Objeto_Jugador class Object ; ! El Jugador Objeto_Jugador miJugador with descripcion "Soy un tío normal y, como la mayoría estos días, voy sucio, medio muerto de hambre y vestido con cualquier cosa... ", antes [; Tocar : "Tengo la piel tersa: no salgo mucho al sol, es verdad."; Oler : "Estoy hecho un asco y apesto..."; Atacar, Suicidar, DispararA: if ( (GrupoZombisVentana in Limbo) || (PuertaBodega.cantidad > 4) ) "La cosa no es tan grave, vamos..."; else if (otro == 0) "Lo estoy considerando, pero prefiero que sea indoloro... y rápido."; else if (otro == Pata) "Lo estoy considerando, pero prefiero que sea indoloro... y rápido: no creo ser capaz de golpearme a muerte: caería inconsciente antes..."; else if (otro == Pistola) {; if (Pistola.cantidad == 0) "No es una opción: está descargada..."; else { Suicidio.proyeccion(); banderafin = 4; rtrue; } } Cortar: "Ya hay bastantes cosas peligrosas en mi negocio, como para hacérmelas yo solo."; Escuchar : "Mi corazón late bien, mi respiración está tranquila... estoy en forma, parece."; Frotar : "Frotándome con energía, gano un poco de calor."; ]; ! La ropa del Jugador Objeto_Jugador Ropa "ropa puesta" miJugador with nombre_f 'ropa' 'camiseta', nombre_mp 'pantalones' 'zapatillas', adjetivos 'puesta' 'usada', listarse "mi ropa puesta", descripcion "Son una camiseta, unos pantalones y un par de zapatillas. Ropa usada que me queda fatal, pero peor es ir desnudo...", antes [; Desvestir : "¿Y andar desnudo? Qué frío..."; ], has femenino prenda puesto; Objeto_Jugador Bolso "bolso amplio" miJugador with nombre_m 'bolso' 'saco', nombre_f 'bolsa', adjetivos 'sintetico' 'amplio' 'holgado' 'resistente', ! listarse ! "un bolso amplio", descripcion "Es un bolso sintético, bien amplio, holgado y muy resistente; el compañero ideal de un ladrón. Lo llevo colgando del hombro.", reaccionar_antes [; Meter: if (uno == Pistola) "Prefiero tenerla a mano..."; else if ( (uno == Pata) || (uno == Extintor) ) { print "No creo poder meter "; print (el) uno; " en el bolso: es amplio, pero no es el bolso de Mary Poppins..."; } ], antes [; Dejar: "Primero muerto..."; ], has masculino recipiente abierto; ! Clase para Objetos del escenario manipulables por el jugador y que ! pueden ser parte de algún puzzle Class Objeto_Escenario class Object with descripcion [; if (self hasnt general) { give self general; self.descripcion_larga(); } else { give self ~general; self.descripcion_corta(); } rtrue; ], descripcion_larga "descripción larga del objeto", descripcion_corta "descripción corta del objeto", antes [; BuscarEn: <>; Examinar: rfalse; Frotar : "No voy a estar limpiándolo todo, tengo otras cosas que hacer."; Coger, Empujar : "No voy a empezar a desordenarlo todo, que el tiempo apremia..."; Escuchar: <>; Oler: "El lugar apesta... y todo lo que hay en él, también..."; ], has escenario; ! Habitación Limbo Habitacion Limbo "El Limbo" with descripcion "¡Eh! ¿Cómo has llegado aquí? Estos Betatesters...", afuera Bodega, has luz; ! Objetos del Jugador ! ================= Localidades =============== ! El centro del parque Habitacion Bodega "La bodega" with descripcion [; print "Estoy en la bodega, que por lo visto tiene un techo altísimo: se nota que los dueños eran ambiciosos y pensaban hacer crecer el negocio, pero los imprevistos, ya se sabe, dan al traste con los mejores planes, si lo sabré yo....^ El lugar está en semi penumbra y todo se ve apenas iluminado con la poca luz que se cuela por la ventana"; if ( (ZombiVentana notin Limbo) && (ZombiVentana has encendido) ) switch(ZombiVentana.cantidad) { 4: print ", por la que puede verse un zombi: tenemos visita.."; 3: print ", por la que se está metiendo un zombi"; 2: print ": el zombi que entró por ella se ha levantado"; 1: print ": el zombi que entró por ella se me viene encima.."; }; if (GrupoZombisVentana notin Limbo) switch(GrupoZombisVentana.cantidad) { 4: print ", por la que se ven llegar varios zombis: malo, malo, malo.."; 3: print ", por la que se están metiendo los zombis: esto pinta mal.."; 2: print ": los zombis avanzan hacia mí. Esto ya no tiene vuelta.."; 1: print ": los zombis que entraron por ella se me viene encima.."; }; if (Mesa has encendido) print " que he conseguido bloquear casi por completo, encajándole la cubierta de la mesa"; print ".^"; if (Mesa hasnt encendido) {; print "La mesa en que aterricé está en el suelo, con casi todas sus patas destrozadas"; if (Pata in Bodega) print " salvo una que se ha separado de la mesa por completo"; print ". "; } print "Por lo demás, el amoblado es inexistente, cortesía de mi aterrizaje, así que el lugar está (casi) impecable: hay "; if (Extintor in self) print "un extintor de incendios colgado del costado de uno de los "; if (PuertaBodega has encendido) print "dos gabinetes alineados a las paredes, otro gabinete bloqueando la puerta"; else print "tres gabinetes alineados en las paredes, una puerta"; " y poco más..."; ], antes [; Salidas: "Sólo se puede salir de aquí por la ventana o por la puerta."; ], afuera [; <>; ], ; ! Decorados ! Objeto para que reaccione a <>> Objeto_Escenario Objeto_Localidad "lugar" Bodega with nombre_m 'lugar' 'sitio' 'bodega', nombre_f 'localidad' 'habitacion', descripcion [; <>; ], antes [; Salirse: <>; Escuchar: <>; Empujar, Coger : "Si pudiera, me llevaba la maldita habitación conmigo..."; ], has masculino; Objeto_Escenario Objeto_Luz "luz" Bodega with nombre_f 'luz' 'semi' 'penumbra' 'sombra' 'oscuridad' 'noche', nombre_fp 'penumbras' 'sombras', ! descripcion ! "Está muy oscuro y apenas se ve algo entre las sombras. La luz que llega de la calle no ilumina ! gran cosa...", antes [; Examinar: "Está muy oscuro y apenas se ve algo entre las sombras. La luz que llega de la calle no ilumina gran cosa..."; Empujar, Coger, Tocar, Frotar : "Si supiera cómo, me guardaría el dato y mi trabajo sería más fácil..."; Encender, Apagar: "No veo el interruptor de luz por ninguna parte. Parece que contaban con la luz natural para trabajar..."; ], has femenino conmutable encendido; Objeto_Escenario Piso "piso" Bodega with nombre 'piso' 'suelo' 'cemento', adjetivos 'aspero' 'liso' 'sucio', descripcion "El suelo de la bodega es de cemento.", antes [; Coger: "No entiendo para qué querría un trozo del suelo..."; Tocar: "Es áspero y liso."; BuscarEn: "No es más que el suelo de la bodega, más bien sucio..."; Frotar : "No voy a estar limpiándolo todo, tengo otras cosas que hacer."; ], has masculino; Objeto_Escenario Techo "techo" Bodega with nombre 'techo' 'cielo', descripcion [;<>;], antes [; Coger: <>; Quemar: <>; Empujar, Tocar: <>; BuscarEn: <>; ], has masculino; Objeto_Escenario Paredes "paredes" Bodega with nombre_f 'pared', nombre_fp 'paredes', nombre_m 'muro' 'cemento', nombre_mp 'muros', adjetivos 'aspero' 'aspera' 'liso' 'lisa' 'sucio' 'sucia', descripcion "Las paredes de la bodega son de cemento.", antes [; Coger: "No entiendo para qué querría un trozo de la pared..."; Tocar: "La pared es áspera y lisa."; Empujar: "La pared sigue en su sitio, por más que la empuje. Construcción sólida..."; BuscarEn: "No es más que la pared de la bodega, más bien sucia... no tiene nada de especial."; Frotar : "No voy a estar limpiándolo todo, tengo otras cosas que hacer."; ], has femenino; Objeto_Escenario PuertaBodega "puerta de metal" Bodega with nombre_f 'puerta' 'manilla' 'chapa', nombre_m 'marco', adjetivos 'bodega' 'cerrada' 'solida' 'metal' 'metalica', descripcion_larga [; print "La puerta de la bodega es de metal y se ve bastante sólida. Es una de las pocas cosas buenas de este ~trabajo~ hasta el momento, especialmente dadas las circunstancias. "; if (self has encendido) "Tuve la astuta idea de empujar uno de los gabinetes para que quedara frente a la puerta y actuara como barrera, lo que me hace sentir mucho mejor."; else "Está cerrada y la manilla se ve en buen estado, lo que es aun mejor..."; ], descripcion_corta [; print "La puerta de la bodega se ve sólida, lo cual es buena cosa dadas las circunstancias. "; if (self has encendido) "Tengo puesto uno de los gabinetes en frente para actuar como barrera, lo que es mucho mejor."; else "Está cerrada y la chapa se ve en buen estado, lo que es aun mejor..."; ], ! Ciclos automáticos cada_turno [; ! El ciclo se incia si hemos bloqueado la Ventana if (Mesa has encendido) ArrancarDaemon(self); ], cantidad 10, daemon [; ! El ciclo se detiene si hemos bloqueado la Puerta if (self has encendido) { self.cantidad=10; PararDaemon(self); rtrue; } if (self.cantidad > 0) self.cantidad--; switch(self.cantidad) { 4: "^¡Algo golpea la puerta!"; 3: "^¡Los golpes en la puerta son cada vez más fuertes!"; 2: "^¡El marco de la puerta está vibrando y han saltado trozos de cemento!"; 1: "^¡Ya puedo oír los gemidos de las criaturas!"; 0: PararDaemon(self); print "^La puerta se abre como una lata doblada y varios zombis entran en la bodega.^"; if ( (Pistola notin Jugador) || ((Pistola in Jugador) && (Pistola.cantidad == 0)) ){ if (Extintor in Jugador) print "Intento darle a uno en la cabeza con el extintor, pero pesa demasiado.^"; if (Pata in Jugador) MataZombisVentanaPata.proyeccion(1); ZombisMuerden.proyeccion(1); banderafin = 6; rtrue; ! No hay suficientes balas } else if (Pistola.cantidad <= 6) { DisparaZombisDentro.proyeccion(1); ZombisMuerden.proyeccion(1); banderafin = 6; rtrue; ! Salvamos la vida } else { ! puntuacion++; Conseguido(7); DisparaZombisPuerta.proyeccion(1); if (velocidad_texto == 0) PrintPausa("^^",0); ! No tenemos los medicamentos if ( (Anestesicos in GabineteRojo) && (Antibioticos in GabineteVerde) && (Analgesicos in GabineteAzul) ) { HuirSinRemedios.proyeccion(); banderafin = 3; ! Salimos con el botín } else { HuirConRemedios.proyeccion(); banderafin = 5; } Final.proyeccion(1); rtrue; } }; ], antes [; Meterse, Entrar, Abrir, Empujar, Tirar, Coger: if (self has encendido) "Ni de broma: si me di el trabajo de empujar el gabinete, no fue para abrir la puerta..."; else "La puerta está cerrada y por más que muevo la manilla sigue igual. Perfecto..."; DispararA: if (Pistola.cantidad == 0) "La pistola está descargada: ya no tengo balas..."; else "Mala idea: si abro la puerta a balazos, seguro llegarán zombis antes de que pueda hacerme del botín..."; Cerrar: if (self hasnt encendido) { if (otro == 0) <>; else if (otro ofclass Objeto_Puzzle_Gabinete) <>; else { print "Con "; print (el) otro; " no puedo bloquear la puerta..."; } } else "Con el gabinete rojo en frente ya no hace falta..."; ], has abrible femenino; Objeto_Escenario Ventana "ventana" Bodega with nombre 'ventana' 'calle', descripcion_larga [; print "Es una ventana de ventilación, más bien estrecha y cerca del techo... o sea al nivel de calle. "; if (Mesa hasnt encendido) { print "Ahora mismo está despejada y "; if (GrupoZombisVentana in Bodega) "varios zombis están intentando entrar por ella. Cómo me arrepiento de no haberme ocupado de bloquearla antes..."; else if (ZombiVentana in Bodega) { if (ZombiVentana.cantidad > 2) print "un zombi está intentando entrar por ella. "; else print "un zombi ya ha entrado por ella. "; "Como no la cierre pronto, voy a tener problemas."; } else "alguien... o algo, podría entrar por ella.^ No me gusta nada esa ventana abierta."; } else "Le he encajado la mesa y ha quedado cubierta casi por completo. Mucho mejor..."; ], descripcion_corta [; print "Es una ventana de ventilación al nivel de la calle. "; if (Mesa hasnt encendido) { print "Ahora mismo está despejada y "; if (GrupoZombisVentana in Bodega) "varios zombis están intentando entrar por ella."; else if (ZombiVentana in Bodega) { if (ZombiVentana.cantidad > 2) "un zombi está intentando entrar por ella. "; else "un zombi ya ha entrado por ella. "; } else "algo podría entrar por ella: mala cosa..."; } else "Le mesa la bloquea casi por completo: mucho mejor..."; ], ! Ciclos automáticos cada_turno [; ! El ciclo se incia si hemos matado al ZombiInicial if (ZombiInicial hasnt encendido) ArrancarDaemon(self); ], cantidad 7, daemon [; ! El ciclo se detiene si hemos tapado la ventana if (Mesa has encendido) { self.cantidad=7; PararDaemon(self); rtrue; } if (self.cantidad > 0) self.cantidad--; switch(self.cantidad) { 4: if (ZombiVentana has encendido) { move ZombiVentana to Bodega; move Zombis to Bodega; "^¡Un zombi ha llegado hasta la ventana! Curioso, pero se ve casi fresco..."; } else { move GrupoZombisVentana to Bodega; move Zombis to Limbo; "^¡Varios zombis han llegado hasta la ventana!"; } ! Reiniciamos el ciclo 0: self.cantidad=7; }; ], antes [; Meterse, Entrar: "Está demasiado alto para eso."; Abrir: if (Mesa hasnt encendido) "Esta bien abierta, así que no hace falta..."; else "No moví la mesa para luego sacarla..."; Cerrar: if (Mesa hasnt encendido) { if (otro == 0) <>; else if (otro == Mesa) <>; else { print "Con "; print (el) otro; " no puedo tapar la ventana..."; } } else "Con la mesa encajada ya no hace falta..."; ] has femenino nombreplural abrible; Objeto_Escenario Muebles "muebles" Bodega with nombre_m 'amoblado' 'amueblado', nombre_mp 'muebles', descripcion [; if (Mesa has encendido) print "He usado la cubierta de la mesa para bloquear la ventana. "; else {; print "La mesa en que aterricé está en el suelo, con casi todas sus patas destrozadas"; if (Pata in Bodega) print " salvo una que se ha separado de la mesa por completo"; print ". "; } print "Por lo demás, el amoblado está reducido al mínimo, cortesía de mi aterrizaje: hay "; if (Extintor in Bodega) print "un extintor de incendios colgado del costado de uno de los "; if (PuertaBodega has encendido) print "dos gabinetes alineados a las paredes, otro gabinete bloqueando la puerta"; else print "tres gabinetes alineados en las paredes, una puerta"; " y poco más..."; ], antes [; Abrir, Cerrar, Empujar, Coger, Tirar: "¿Cuál concretamente: la cubierta de la mesa, el gabinete rojo, el gabinete verde o el gabinete azul?"; ], has masculino nombreplural; Objeto_Escenario Gabinetes "gabinetes" Bodega with nombre 'gabinetes', adjetivos 'metalicos' 'pintados', descripcion_larga "Hay 3 gabinetes metálicos en la bodega: si no hubieran estado aquí al llegar, estaría de veras desesperado en este momento. Están alineados a las paredes y cada uno está pintado de un color diferente: rojo, verde y azul. Supongo que será para distinguir sus contenidos...", descripcion_corta "Hay 3 gabinetes metálicos en la bodega, cada uno pintado de un color diferente: rojo, verde y azul.", antes [; Abrir, Cerrar, Empujar, Coger, Tirar: "¿Cuál concretamente, el gabinete rojo, el gabinete verde o el gabinete azul?"; ], has masculino nombreplural; ! PSI Objeto_Escenario Zombis "gabinetes" Limbo with nombre 'zombis' 'zombies', antes [; Examinar, BuscarEn, DispararA, Atacar, Tocar, Empujar, Tirar, Frotar, Probar, Oler, Besar, Coger : "El zombi podrido y el zombi fresco están a mano, pero tendré que decidirme por alguno primero..."; ], has masculino nombreplural; PSI Cadaver "cadáver" Bodega with nombre_m 'cadaver' 'muerto' 'amasijo' 'cuerpo' 'tipo' 'agujero' 'mano' 'pie' 'brazo' 'dedo' 'musculo' 'pelo' 'pecho' 'torso' 'puno', nombre_mp 'manos' 'pies' 'brazos' 'dedos' 'musculos' 'pelos' 'punos', nombre_f 'pierna' 'cintura' 'piel' 'una' 'espalda' 'cabeza' 'cara' 'esquina', nombre_fp 'piernas' 'unas' 'espaldas', adjetivos 'desnudo', ! describir ! "El cadáver está abandonado en una esquina.", descripcion_larga [; if (ZombiInicial has encendido) "El zombi está frente al cadáver y no puedo ver detalles."; else "El cadáver está desnudo y casi totalmente devorado. El cuerpo ha quedado reducido a un amasijo de pelos y músculos mordidos por el zombi, que no ha respetado ni la cara de este tipo.^ En el costado de su cabeza se ve un agujero de bala, así que por lo visto no sufrió demasiado."; ], descripcion_corta [; if (ZombiInicial has encendido) "El zombi está frente al cadáver y no puedo ver detalles."; else "El cadáver está hecho un amasijo de pelos y músculos roídos por el zombi. En el costado de su cabeza se ve un agujero de bala."; ], antes [; Escuchar: "El cadáver no emite sonido alguno: está como muerto, je..."; Coger, Empujar, Tirar, BuscarEn: if (ZombiInicial has encendido) "El zombi está frente al cadáver y no puedo registrarlo. Suerte perra..."; else if (Extintor in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo el extintor primero."; else if (Pata in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo la pata de la mesa primero."; else if (Pistola notin Jugador) { ! puntuacion++; Conseguido(1); move Pistola to Jugador; EncontrarPistola.proyeccion(1); ! Final si ya tenemos la Pistola y todos los Remedios if ( (Anestesicos notin GabineteRojo) && (Antibioticos notin GabineteVerde) && (Analgesicos notin GabineteAzul) ) { print "Como ya tengo lo que vine a buscar, por fin es hora de salir del edificio... y esta arma será mi seguro de vida contra los zombis, ya que como la ventana está fuera de mi alcance, no queda más que salir por la puerta y enfrentarme a lo que me espera del otro lado; "; if (PuertaBodega has encendido) print "saco primero el gabinete rojo que la bloqueaba y "; print "me dispongo a esperar, con calma, a que los zombis lleguen de visita: no quiero cansarme derribándola.^^ No tardan en llegar...^"; give PuertaBodega ~encendido; PuertaBodega.cantidad = 0; ArrancarDaemon(PuertaBodega); rtrue; } else rtrue; } else "Ya lo registré y no creo que sea buena idea cargar con un peso muerto, je..."; ], vida [; Besar: if (ZombiInicial has encendido) "El zombi está frente al cadáver y no acercármele..."; else "No, qué asco..."; Atacar: if (ZombiInicial has encendido) "El zombi está frente al cadáver y no acercármele..."; else "No hay para qué: está muerto..."; ] has masculino escenario; PSI ZombiInicial "zombi podrido" Bodega with nombre_m 'podrido', describir [; if (self hasnt encendido) "El cuerpo decapitado del zombi podrido afea el lugar, incluso estando junto a un cadáver, vaya."; else switch(self.cantidad) { 4: "Todo se ve bien, salvo el zombi que está royendo un cadáver en una esquina. Mierda..."; 3: "El zombi se ha puesto de pie."; 2: "El zombi se está acercando..."; 1: "¡El zombi me ataca!"; }; ], descripcion_larga [; if (self has encendido) print "Es horrible, sin ninguna expresión en su rostro, que como todo el resto de su cuerpo se está cayendo a pedazos. "; else print "El haberle reventado la cabeza de un golpe ha mejorado algo su aspecto, pero no demasiado. "; "Apenas va vestido con unos andrajos tan sucios y manchados como el propio zombi. Un asco, pero se nota que lleva tiempo en proceso de... ~zombificación~ o lo que sea."; ], descripcion_corta [; print "Está como muchos muertos vivientes: hecho un asco y cayéndose a pedazos"; if (self hasnt encendido) "... y sin cabeza, cortesía de este servidor."; else "."; ], ! Ciclos automáticos cada_turno [; ! El ciclo se incia si no lo hemos matado if (self has encendido) ArrancarDaemon(self); ], cantidad 4, daemon [; ! El ciclo se detiene si ya lo matamos if (self hasnt encendido) { self.cantidad=4; PararDaemon(self); rtrue; } if (self.cantidad > 0) self.cantidad--; switch(self.cantidad) { 3: "^El zombi me ha visto y se está poniendo de pie.^ Tengo que matarlo antes que me alcance..."; 2: "^El zombi está acercándose, leeento pero seguro..."; 1: "^¡El zombi está casi encima mío!"; 0: ! El zombi nos ataca <>; }; ], antes [; Empujar, Tocar, Tirar: if (self hasnt encendido) "Mientras menos lo toque, mejor..."; else <>; Atacar: if (self hasnt encendido) "No hace falta, ya está... bueno, definitivamente muerto, je..."; ! Atacamos a mano desnuda else if ( (otro==0) && (Pata notin Jugador) ) { ZombiMuerde.proyeccion(1); PararDaemon(self); banderafin = 6; rtrue; ! Atacamos con la pata } else { MataZombiInicial.proyeccion(1); give self ~encendido; !give Cadaver ~escenario; PararDaemon(self); ! puntuacion++; Conseguido(0); rtrue; } ], has masculino encendido; PSI ZombiVentana "zombi fresco" Limbo with nombre_m 'fresco', describir [; if (self hasnt encendido) "El cuerpo decapitado del zombi ~fresco~ contribuye al estilo del lugar."; else rtrue; ], descripcion_larga [; if (self has encendido) print "Es horrible, sin ninguna expresión en su rostro, aunque aún no se cae a pedazos: se ve que está ~fresco~. "; else print "El haberle reventado la cabeza de no ha mejorado su aspecto: fresco o no, es un monstruo. "; "Va vestido con unos andrajos ligeramente sucios: es horrible, pero los zombis no son precisamente un modelo de estilo en el vestir."; ], descripcion_corta [; print "Está como algunos de los muertos vivientes: un asco aunque algo más ~fresco~"; if (self hasnt encendido) "... y sin cabeza, cortesía de este servidor."; else "."; ], ! Ciclos automáticos cada_turno [; ! El ciclo se incia si no lo hemos matado if (self has encendido) ArrancarDaemon(self); ], cantidad 4, daemon [; ! El ciclo se detiene si ya lo matamos if (self hasnt encendido) { self.cantidad=4; PararDaemon(self); rtrue; } if (self.cantidad > 0) self.cantidad--; switch(self.cantidad) { 3: "^El zombi de la ventana está metiéndose por ella."; 2: "^El zombi ha caído de la ventana al piso de la bodega y comienza a levantarse."; 1: "^¡El zombi se me echa encima!"; 0: ! El zombi nos ataca <>; }; ], antes [; Empujar, Tocar, Tirar: if (self hasnt encendido) "Mientras menos lo toque, mejor..."; else <>; Atacar: if (self hasnt encendido) { print "No hace falta.."; if (Mesa hasnt encendido) ".^Será mejor que vea cómo bloquear la ventana."; else "."; ! Si aun no entra, solo vale la pistola como arma } else if (self.cantidad > 2) { if (otro~=Pistola) { print "No puedo golpearlo"; if (otro~=0) { print " con "; print (el) otro; } ": está muy alto y no lo alcanzo."; } else <>; ! En caso de que ya esté dentro ! Atacamos desarmados } else if ( (otro==0) && (Pata notin Jugador) && (Pistola notin Jugador) && (Extintor notin Jugador) ) { ZombiMuerde.proyeccion(1); PararDaemon(self); PararDaemon(Ventana); PararDaemon(PuertaBodega); banderafin = 6; rtrue; ! Atacamos con la pata } else if ( (otro==Pata) || (Pata in Jugador) ) { MataZombiVentanaPata.proyeccion(1); give self ~encendido; PararDaemon(self); rtrue; ! Atacamos con la Pistola } else if ( (otro==Pistola) || (Pistola in Jugador) ) <>; ! Atacamos con el Extintor else if ( (otro==Extintor) || (Extintor in Jugador) ) { print "^Intento darle al zombi en la cabeza con el extintor, pero pesa demasiado.^"; ZombiMuerde.proyeccion(1); PararDaemon(self); PararDaemon(Ventana); PararDaemon(PuertaBodega); banderafin = 6; rtrue; } DispararA: if (self hasnt encendido) { print "No hace falta.."; if (Mesa hasnt encendido) ".^Será mejor que vea cómo bloquear la ventana."; else "."; } else if (Pistola.cantidad == 0) { print "La pistola está descargada: ya no tengo balas...^"; if (self.cantidad <= 2) <>; else rtrue; } else { ! Una bala menos... Pistola.cantidad--; ! Si aun no entra, cae muerto afuera if (self.cantidad > 2) { DisparaZombiVentanaAfuera.proyeccion(1); move self to Limbo; move Zombis to Limbo; ! De lo contrario, le matamos dentro } else DisparaZombiVentanaDentro.proyeccion(1); give self ~encendido; PararDaemon(self); rtrue; } ], has masculino encendido; PSI GrupoZombisVentana "grupo de zombis" Limbo with nombre_m 'grupo' 'zombi', nombre_mp 'varios' 'zombis' 'zombies', describir [; rtrue; ], descripcion_larga "Son horrendos, abriendo y cerrando sus bocas, mientras estiran sus brazos en mi dirección. Van vestidos de cualquier manera y mientras más los veo más desesperado me siento...", descripcion_corta "Los monstruos abren y cierran sus fauces mientras se estiran para alcanzarme.", ! Ciclos automáticos cada_turno [; ! El ciclo se incia si no lo hemos matado if (self has encendido) ArrancarDaemon(self); ], cantidad 4, daemon [; ! El ciclo se detiene después de 4 turnos if (self hasnt encendido) { self.cantidad=4; PararDaemon(self); rtrue; } if (self.cantidad > 0) self.cantidad--; switch(self.cantidad) { 3: "^Los zombis se están metiendo por la ventana."; 2: "^Varios zombis han caído de la ventana al piso de la bodega y comienzan a levantarse."; 1: "^¡Los zombis se me echan encima!"; 0: ! Los zombis nos atacan <>; }; ], antes [; Oler: "Apestan..."; Escuchar: "Los zombis emiten un gruñido bajo y profundo, como un coro salido del averno..."; Atacar, Tocar: ! Si aun no entran, solo vale la pistola como arma if (self.cantidad > 2) { if (otro~=Pistola) { print "No puedo golpearlos"; if (otro~=0) { print " con "; print (el) otro; } ": está muy alto y no los alcanzo."; } else <>; ! En caso de que ya esté dentro ! Atacamos desarmados } else if ( (otro==0) && (Pata notin Jugador) && (Pistola notin Jugador) && (Extintor notin Jugador) ) { ZombisMuerden.proyeccion(1); PararDaemon(self); PararDaemon(Ventana); PararDaemon(PuertaBodega); banderafin = 6; rtrue; ! Atacamos con la pata } else if ( (otro==Pata) || (Pata in Jugador) ) { MataZombisVentanaPata.proyeccion(1); ZombisMuerden.proyeccion(1); PararDaemon(self); PararDaemon(Ventana); PararDaemon(PuertaBodega); banderafin = 6; rtrue; ! Atacamos con la Pistola } else if ( (otro==Pistola) || (Pistola in Jugador) ) <>; ! Atacamos desarmados o con el Extintor else if ( (otro==Extintor) || (Extintor in Jugador) ) { print "^Intento darle a un zombi en la cabeza con el extintor, pero pesa demasiado.^"; ZombisMuerden.proyeccion(1); PararDaemon(self); PararDaemon(Ventana); PararDaemon(PuertaBodega); banderafin = 6; rtrue; } DispararA: if (Pistola.cantidad == 0) { print "La pistola está descargada: ya no tengo balas...^"; if (self.cantidad <= 2) { ZombisMuerden.proyeccion(1); PararDaemon(self); PararDaemon(Ventana); PararDaemon(PuertaBodega); banderafin = 6; rtrue; } else rtrue; } else { ! Una bala menos... Pistola.cantidad--; ! Si aun no entran, cae muerto afuera if (self.cantidad > 2) DisparaZombisVentanaAfuera.proyeccion(1); ! De lo contrario, le matamos dentro else DisparaZombisDentro.proyeccion(1); ZombisMuerden.proyeccion(1); PararDaemon(self); PararDaemon(Ventana); PararDaemon(PuertaBodega); banderafin = 6; rtrue; } ], has masculino encendido; ! Objetos de Puzzle Objeto_Puzzle Mesa "cubierta de la mesa de madera" Bodega with nombre_f 'mesa' 'cubierta', nombre_m 'mueble', nombre_fp 'patas', adjetivos 'madera' 'gruesa' 'larga', describir [; rtrue; ], descripcion_larga [; print "La mesa quedó hecha pedazos cuando aterricé encima y sólo conserva intacta la cubierta, que es bastante larga y gruesa"; if (Pata in Limbo) { print ". Las patas quedaron hechas nada, salvo una que se separó de cuajo y ha quedado entera"; move Pata to Bodega; } if (self has encendido) ". La he dejado encajada en el hueco de la ventana y la tapa casi por completo. Seguro evitará que me lleguen visitas desde la calle..."; else "."; ], descripcion_corta [; print "La mesa sólo conserva la cubierta intacta"; if (self has encendido) ", pero sirve para tapar la ventana y evitar que me lleguen visitas desde la calle..."; else "."; ], antes [; Empujar, Tirar, Coger: if ( (ZombiInicial has encendido) || ((ZombiVentana in Bodega) && (ZombiVentana has encendido)) || (GrupoZombisVentana in Bodega) ) "Mejor me ocupo de esta peste de zombis primero..."; else if ( (Anestesicos in Jugador) || (Antibioticos in Jugador) || (Analgesicos in Jugador) ) "Tengo las manos demasiado ocupadas... mejor voy metiendo en el bolso los medicamentos que ya tengo."; else if (Extintor in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo el extintor primero."; else if (Pata in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo la pata de la mesa primero."; else if (self hasnt encendido) { ! puntuacion++; Conseguido(3); give self encendido; "Con cuidado levanto la mesa y la encajo en el hueco de la ventana, que queda así tapada casi por completo. Seguro evitará que me lleguen visitas desde la calle..."; } else "Mejor no moverla de donde está: me cuida las espaldas..."; ], has femenino ; Objeto_Puzzle Pata "pata de la mesa" Limbo with describir [; if (Mesa has encendido) "Una pata de madera que se ha separado de la mesa está tirada aquí al lado."; else rtrue; ], nombre 'pata' 'maza' 'porra', adjetivos 'separada' 'mesa' 'madera' 'solida' 'pesada', descripcion_larga "La pata se ha separado de la mesa cuando le he caído encima. Se ve sólida...", descripcion_corta "Es una sólida pata de la mesa.", antes [; Coger : if ( (Anestesicos in Jugador) || (Antibioticos in Jugador) || (Analgesicos in Jugador) ) "Tengo las manos demasiado ocupadas... mejor voy metiendo en el bolso los medicamentos que ya tengo."; else if (Extintor in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo el extintor primero."; ], despues [; Coger : "Es bastante pesada y podría usarse como argumento contundente en una discusión acalorada..."; ], has femenino; Objeto_Puzzle Pistola "pistola" Limbo with nombre_f 'pistola' 'arma', nombre_m 'revolver' 'cargador', adjetivos 'cargada' 'descargada' 'semi' 'automatica', cantidad 10, describir "La pistola está junto al cadáver.", descripcion_larga [; print "La pistola semi automática está en buen estado de mantención aunque se ve que ha tenido uso... reciente. Por el peso, puedo ver que está "; if (self.cantidad == 0) "descargada, así que no sirve de mucho."; else "cargada, así que me viene bien para resolver discusiones acaloradas..."; ], descripcion_corta [; print "La pistola semi automática está "; if (self.cantidad == 0) "descargada, así que no sirve de mucho."; else "cargada, por el peso: viene bien para resolver discusiones acaloradas..."; ], antes [; Dejar: if (self.cantidad > 0) "Mientras tenga balas, no pienso separarme de esta belleza..."; Abrir: print "Aunque por el peso tengo una idea bastante clara, decido confirmar: saco el cargador y efectivamente la pistola "; if (self.cantidad == 0) print "está descargada, así que no sirve de mucho. "; else { print "aun tiene " ; print self.cantidad; print " balas. "; } "Satisfecho (es un decir) pongo el cargador de vuelta en la pistola."; ], despues [; Coger: <>; Dejar: "Descargada ya no sirve de mucho, así que dejo la pistola junto al cadáver..."; ], has femenino; Objeto_Puzzle Extintor "extintor químico" Limbo with nombre 'extintor' 'extinguidor' 'matafuego' 'matafuegos' 'aviso', adjetivos 'quimico' 'incendio' 'incendios' 'colgado' 'vencido', describir [; rtrue; ], descripcion_larga [; print "Es un extintor químico de incendios, de tamaño regular"; if (self notin Jugador) print " y está colgado del costado del gabinete verde"; else print " y pesa lo suyo"; if (ZombiInicial has encendido) ". El zombi está justo en frente y no puedo ver más detalles..."; else ". Por lo que leo en su aviso, está vencido, pero igualmente puede tener otros usos..."; ], descripcion_corta [; print "Es un extintor de incendios"; if (self notin Jugador) print " colgado del costado del gabinete verde"; if (ZombiInicial has encendido) ". El zombi no me deja ver más detalles..."; else ". Está vencido."; ], antes [; Coger, Empujar, Tirar, BuscarEn: if (ZombiInicial has encendido) "El zombi está justo en frente y no puedo alcanzarlo. Suerte perra..."; else if ( (Anestesicos in Jugador) || (Antibioticos in Jugador) || (Analgesicos in Jugador) ) "Tengo las manos demasiado ocupadas... mejor voy metiendo en el bolso los medicamentos que ya tengo."; else if (Pata in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo la pata de la mesa primero."; ], has masculino; Class Objeto_Puzzle_Gabinete class Objeto_Puzzle with nombre_m 'gabinete' 'mueble', nombre_f 'manilla' 'chapa', adjetivos 'metalico' 'metal' 'sencilla', con_llave Extintor, reaccionar_antes [; Meter: if (otro==self) "No tengo ganas de meter cosas en él..."; ], antes [; Atacar, Tocar: if (ZombiInicial has encendido) "El zombi está justo en frente y no llego al gabinete..."; else if (self has abierto) <>; else if (otro==Extintor) { ! puntuacion++; switch (self) { GabineteRojo: Conseguido(4); GabineteVerde: Conseguido(5); GabineteAzul: Conseguido(6); } give self abierto; "Con un fuerte golpe del extintor, destrozo la chapa y abro el gabinete."; } else { print "Al golpearlo"; if (otro~=0) { print " con "; print (el) otro; } " el gabinete resuena, pero no se abre..."; } DispararA: if (Pistola.cantidad == 0) "La pistola está descargada: ya no tengo balas..."; else if (self hasnt abierto) { ! puntuacion++; switch (self) { GabineteRojo: Conseguido(4); GabineteVerde: Conseguido(5); GabineteAzul: Conseguido(6); } ! Una bala menos... Pistola.cantidad--; give self abierto; "De un certero balazo destrozo la chapa y abro el gabinete."; } else <>; QuitarCerrojo, Abrir: if (self hasnt abierto) { if ( (GabineteRojo hasnt encendido) && (GabineteVerde hasnt encendido) && (GabineteAzul hasnt encendido) ) { give self encendido; GabineteCerrado.proyeccion(1); if (Extintor in Jugador) {; print "^"; <>; } else rtrue; } else if (otro==0) { if (Extintor in Jugador) <>; else "El gabinete está cerrado y por más que muevo la manilla sigue igual."; } else <>; } else "No hace falta, ya lo abrí..."; Cerrar: if (self hasnt abierto) "El gabinete ya está cerrado."; else "De la forma que lo abrí, ya no se puede..."; EmpujarDir, Empujar, Coger, Tirar: "Está fijo a la pared: no hay como moverlo."; ], has masculino escenario recipiente abrible cerrojo; Class Objeto_Puzzle_Medicamentos class Objeto_Puzzle with nombre_m 'medicamento' 'remedio' 'texto', nombre_f 'etiqueta' 'medicina' 'droga', nombre_fp 'etiquetas' 'medicinas' 'drogas', nombre_mp 'medicamentos' 'remedios', adjetivos 'envasado' 'envasados', antes [; Comer, Beber, Probar: "Mejor no mezclar trabajo con placer y llevarme el botín completo..."; Coger, Sacar: if (Extintor in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo el extintor primero."; else if (Pata in Jugador) "Tengo las manos demasiado ocupadas... mejor dejo la pata de la mesa primero."; else if ( (Anestesicos in Jugador) || (Antibioticos in Jugador) || (Analgesicos in Jugador) ) "Tengo las manos demasiado ocupadas... mejor voy metiendo en el bolso los medicamentos que ya tengo."; Dejar: if (self in Jugador) "Con lo que me ha costado conseguirlos, ni de broma..."; ], despues [; ! Incrementar contador de bolso Coger, Sacar: ! Final si ya tenemos la Pistola y todos los Remedios if ( (Anestesicos notin GabineteRojo) && (Antibioticos notin GabineteVerde) && (Analgesicos notin GabineteAzul) && (Pistola in Jugador) ) { print "Como ya tengo lo que vine a buscar, por fin es hora de salir del edificio... y esta arma será mi seguro de vida contra los zombis, ya que como la ventana está fuera de mi alcance, no queda más que salir por la puerta y enfrentarme a lo que me espera del otro lado; "; if (PuertaBodega has encendido) print "saco primero el gabinete rojo que la bloqueaba y "; print "me dispongo a esperar a que los zombis lleguen de visita: no quiero cansarme derribándola.^^ No tardan en llegar...^"; give PuertaBodega ~encendido; PuertaBodega.cantidad = 0; ArrancarDaemon(PuertaBodega); rtrue; } ], has nombreplural comestible; Objeto_Puzzle_Gabinete GabineteRojo "gabinete rojo" Bodega with nombre_m 'rojo' 'mueble', descripcion_larga [; print "Es un gabinete metálico de color rojo "; if (PuertaBodega has encendido) print "que me costó no poco trabajo moverlo frente a la puerta "; else print "que está instalado al costado de la puerta "; if (self hasnt abierto) "y está bien cerrado, por desgracia."; else { print "y que por fin he conseguido abrir"; if (Anestesicos in self) ": contiene un interesante surtido de medicamentos dentro. Progresamos..."; else " aunque ahora está vacío: ya me hice de los contenidos."; } ], descripcion_corta [; print "Es un gabinete rojo "; if (PuertaBodega has encendido) print "que he movido frente a la puerta"; else print "que está costado de la puerta"; if (self hasnt abierto) " y está cerrado."; else { print ": está abierto"; if (Anestesicos in self) "... y con un surtido de medicamentos dentro. Progresamos..."; else " aunque vacío."; } ], antes [; Vaciar: if (self hasnt abierto) <>; else if (Anestesicos in self) <>; else "No hace falta: ya me hice de los contenidos."; EmpujarDir: if (PuertaBodega has encendido) "No hace falta: ya está donde lo quiero."; else if (otro==PuertaBodega) <>; else { print "No sirve de nada empujar el gabinete rojo hacia "; print (el) otro; "..."; } Empujar, Coger, Tirar: if (PuertaBodega has encendido) "No hace falta: ya está donde lo quiero."; else { ! puntuacion++; Conseguido(2); give PuertaBodega encendido; MoverGabineteRojo.proyeccion(1); rtrue; } ]; Objeto_Puzzle_Medicamentos Anestesicos "jeringas con anestésicos" GabineteRojo with nombre_f 'jeringa' 'hipodermica' 'aguja', nombre_fp 'jeringas' 'hipodermicas' 'agujas', nombre_m 'anestesico' 'inyeccion', nombre_mp 'anestesicos' 'inyecciones', descripcion_larga "Por lo que leo en las etiquetas, son jeringas con anestésicos. Pueden suponer la diferencia entre un sufrimiento espantoso y el alivio...", descripcion_corta "Son anestésicos. Qué alivio...", has femenino nombreplural; Objeto_Puzzle_Gabinete GabineteVerde "gabinete verde" Bodega with nombre_m 'verde' 'mueble', descripcion_larga [; print "Es un gabinete metálico de color verde fijado a un muro "; if (self hasnt abierto) "y está bien cerrado, por desgracia."; else { print "y que por fin he conseguido abrir"; if (Antibioticos in self) ": contiene un interesante surtido de medicamentos. Progresamos..."; else " aunque ahora está vacío: ya me hice de los contenidos."; } ], descripcion_corta [; print "Es un gabinete verde fijo a un muro"; if (self hasnt abierto) " y está cerrado."; else { print ": está abierto"; if (Antibioticos in self) "... y con un surtido de medicamentos dentro. Progresamos..."; else " aunque vacío."; } ], antes [; Vaciar: if (self hasnt abierto) <>; else if (Antibioticos in self) <>; else "No hace falta: ya me hice de los contenidos."; ], despues [; Examinar: if (Extintor in Limbo) { move Extintor to Bodega; "^Vaya... hay un extintor colgando costado del gabinete."; } else if (Extintor notin Jugador) "El extintor está colgando costado del gabinete."; ]; Objeto_Puzzle_Medicamentos Antibioticos "frascos con antibióticos" GabineteVerde with nombre_f 'botella', nombre_fp 'botellas', nombre_m 'frasco' 'pote' 'antibiotico', nombre_mp 'frascos' 'potes' 'antibioticos', descripcion_larga "Por lo que se ve en las etiquetas, son frascos de antibióticos. En estos tiempos, hacerse heridas no es difícil y estos medicamentos pueden evitar no pocos problemas...", descripcion_corta "Son antibióticos. Vendrán bien...", has masculino nombreplural; Objeto_Puzzle_Gabinete GabineteAzul "gabinete azul" Bodega with nombre_m 'azul' 'mueble', descripcion_larga [; print "Es un gabinete metálico de color azul fijado a un muro "; if (self hasnt abierto) "y está bien cerrado, por desgracia."; else { print "y que por fin he conseguido abrir"; if (Analgesicos in self) ": contiene un interesante surtido de medicamentos. Progresamos..."; else " aunque ahora está vacío: ya me hice de los contenidos."; } ], descripcion_corta [; print "Es un gabinete azul fijo a un muro"; if (self hasnt abierto) " y está cerrado."; else { print ": está abierto"; if (Analgesicos in self) "... y con un surtido de medicamentos dentro. Progresamos..."; else " aunque vacío."; } ], antes [; Vaciar: if (self hasnt abierto) <>; else if (Analgesicos in self) <>; else "No hace falta: ya me hice de los contenidos."; ]; Objeto_Puzzle_Medicamentos Analgesicos "píldoras de analgésicos" GabineteAzul with nombre_f 'grajea' 'pildora' 'pastilla' 'tableta', nombre_fp 'grajeas' 'pildoras' 'pastillas' 'tabletas', nombre_m 'analgesico', nombre_mp 'analgesicos', descripcion_larga "Las etiquetas indican que se trata de píldoras de analgésicos. Nada especial, pero una molestia menor no lo parece tanto si uno la padece por horas...", descripcion_corta "Son analgésicos. Para no sufrir por deporte...", has femenino nombreplural; !------------------------------------------------------------------- ! Punto de Inicio !------------------------------------------------------------------- ! Aquí empieza el juego. Este es el punto para imprimir el mensaje ! inicial de bienvenida y puesta en situación [Inicializar tecla; ! Modo "verbose", descripciones siempre largas modomirar = 2; box "~Forrajeo~^" "Cuando el remedio es peor que la enfermedad" "Realizado por: Sebastián Armas (Incanus)" "(C) Año 2011 " "Release 01.01.01 para V Mini Comp 2011" "I para NO VER la Intro," "A para ver textos animados," "R para Recuperar una Partida" "Otra para Empezar"; cambiarJugador(miJugador); ! Localización donde comienza el jugador localizacion = Bodega; ! Texto no animado por defecto velocidad_texto = 0; @read_char 1 -> tecla; if ( (tecla=='i') || (tecla=='I') ) { print ""; } else if ( (tecla=='r') || (tecla=='R') ) <>; else { if ( (tecla=='a') || (tecla=='A') ) velocidad_texto = 20; Introduccion1.proyeccion(); PrintPausa("^^",0); Introduccion2.proyeccion(); if (velocidad_texto == 0) PrintPausa("^^",0); Introduccion3.proyeccion(); if (velocidad_texto == 0) PrintPausa("^^",0); Introduccion4.proyeccion(); PrintPausa("^^^^",0); } ! Iniciar ambientador universal ! ArrancarDaemon(ambientador_universal); ]; ! CORTOMETRAJES cortometraje LimpiaPantalla with descripcion "" ; cortometraje Introduccion1 with descripcion "La verdad, " "los zombis apestan. " "Y no lo digo sólo por lo del olor ¿eh?^^" "Antes de la catástrofe " "(ya saben, " "esto de que haya gente no-muerta " "caminando por todas partes) " "yo era un ladrón... " "y no era malo en mi oficio. " "~Conseguía~ artículos escasos o exclusivos, " "a pedido o para reventa y tenía una buena reputación: " "sin preguntas, " "sin testigos y " "sin pistas que me delataran a mí o a mis ~clientes~.^^" "¿Que moría gente en mi trabajo? " "Por supuesto " "y a los policías, " "médicos, " "bomberos " "y demás también les pasa " "y nadie les apunta con el dedo por ello, " "pero ya ven lo hipócrita que es la gente " "(salvo mis clientes, " "claro).^^" "Pero vino la catástrofe... " "y me quede sin clientes, " "sin trabajo " "y luchando por sobrevivir." ; cortometraje Introduccion2 with descripcion "Uno pensaría que mi vida sería mucho más sencilla " "después del derrumbe de la civilización, " "la ley y el orden ¿no?^^" "Pues ha sido todo lo contrario: " "los pocos que han quedado con vida " "defienden lo suyo con uñas y dientes... " "Y no es una expresión: tengo marcas por todas partes. " "Toda la gente lucha ahora con abandono bestial " "y la total seguridad de que nada ni nadie los llevara a juicio " "ni mucho menos a la cárcel por ello.^^" "En suma, " "el asalto " "(armado o no) " "ha pasado a ser una forma más de susidio, " "estos días.^^" "En cuanto al robo propiamente dicho, " "no va mucho mejor.^^" "Si logras esquivar a los muertos que caminan, " "te encuentras con una de dos: " "o alguien se te adelantó y no " "encuentras nada " "o bien alguien está allí en ese momento. " "En esos casos impera la ley del más fuerte... " "y yo no lo soy, " "no contra gente desesperada, " "aunque les caiga por la espalda, " "como ya he comprobado hasta el hartazgo " "y tengo heridas para probarlo.^^" "Los zombis arruinaron mi vida, " "ya te digo." ; cortometraje Introduccion3 with descripcion "Cuando encontré el campamento en el foso de los leones del zoológico, " "comprendí que era una oportunidad. " "Gente capaz de quitarle el habitat a semejantes fieras " "es por fuerza gente de cuidado... " "pero también son un buen árbol " "si su sombra tu cobija.^^" "Lamentablemente, " "ellos también lo sabían.^^" "Les ofrecí mis servicios, " "pero no los necesitaban; " "tenían lo que necesitaban " "y no les hacía falta otra boca más, " "especialmente una de alguien con mi reputación: " "despiadado, " "egoísta y " "oportunista.^^" "Por desgracia, " "eso también lo sabían.^^" "Desesperado, " "me ofrecí a traerles medicamentos, " "que escasean, " "a cambio de la oportunidad de tener un lugar en su campamento, " "que se notaba estaban levantando ya: " "la movilidad es la norma, " "estos días. " "Era un ofrecimiento irracional, " "suicida... " "y muy ventajoso para ellos: " "no tenían nada que perder " "e incluso puede que se libraran de mi molesta presencia " "sin demasiado esfuerzo.^^" "Y aceptaron." ; cortometraje Introduccion4 with descripcion "Como era de esperar, " "al llegar al centro las cosas se complicaron: " "los zombis detectaron mi presencia " "y aunque no había demasiados cerca de la farmacia, " "estas cosas se dan maña para rodearte " "y acorralarte hasta dejarte sin salida y a su merced.^^" "No teniendo arma alguna, " "sólo me quedaba tratar de ser más rápido que ellos: " "llegar a la farmacia, " "coger los medicamentos rápido " "y huir antes de que llegaran al lugar.^^" "Todo salió a pedir de culo.^^" "El acceso principal de la farmacia estaba bloqueado por un auto " "que lo embistió de frente " "y para cuando encontré la entrada trasera, " "los zombis me estaban alcanzando, " "por lo que no lo pensé dos veces " "y me tiré por una ventana " "que daba a la bodega subterránea del local.^^" "De no haber aterrizado en una mesa, " "me habría partido la espalda, " "lo que supongo que es buena suerte.^^" "La bodega, " "por desgracia, " "apesta a un olor ya demasiado reconocible.^^" "Zombis. " "Arruinaron mi vida, " "ya te digo..." ; cortometraje ZombiMuerde with descripcion "^El zombi se me echa encima " "y me aferra con sus manos sarmentosas.^" "Intento luchar pero es inútil: " "me inmoviliza con una fuerza prodigiosa " "y abriendo su boca al máximo, " "me da una mordida salvaje en el cuello.^^" "Por lo visto, " "voy a quedarme aquí más rato de lo que pensaba...^" ; cortometraje MataZombiInicial with descripcion "^El zombi se me echa encima, " "así que sin pensármela dos veces " "le doy un tremendo golpe en la cabeza, " "usando la pata como maza.^" "El efecto es devastador: " "su cabeza revienta como un melón seco " "y la criatura cae al suelo " "como una marioneta rota, " "sin que salgan sesos " "o salpique sangre alguna a la vista.^^" "Vaya.^^" "Llevaba muert... " "bueno, " "como zombi, " "bastante más tiempo de lo que yo creía..." ; cortometraje EncontrarPistola with descripcion "Levanto el cadáver con cuidado " "y veo que debajo de él hay una pistola.^^" "Es la primera arma que veo en mucho tiempo " "sin que alguien me esté apuntando con ella: " "mi suerte está mejorando, parece.^^" "La empujo con el pie " "y dejo el cadáver como estaba. " "Luego, " "cojo la pistola con cuidado " "y la admiro: " "es una semi automática en buen estado de mantención, " "aunque se ve que ha tenido uso reciente.^^" "Ejem...^^" "Por el peso, " "que de armas entiendo y no poco, " "puedo ver que está cargada, " "así que me viene bien para resolver discusiones acaloradas.^^" "Puede que logre salir con vida de esto, " "después de todo...^^" ; cortometraje Suicidio with descripcion "De pronto, " "decido que ya no vale la pena seguir luchando.^^" "Si salgo de esta, " "no me quedará más que integrarme a una comunidad " "para sobrevivir: " "sólo ya no me basto. " "Habrá que congeniar con desconocidos, " "trabajar en equipo, " "hacer mi parte, " "integrarme al grupo...^^" "...y descubro que no me interesa: " "si hubiera podido o querido hacerlo, " "lo habría hecho antes de la catástrofe.^^" "Y sin gente que cuide de mí " "y yo de ellos " "¿qué me queda?^^" "Una vida de forrajeo permanente, " "luchando contra muertos y vivos " "simplemente para tener las fuerzas..." "para seguir buscándome la vida yo solo.^^" "Suspiro.^^" "Pongo el arma en mi sien " "y mi último pensamiento " "es que esto al menos dolerá menos " "y será más rap^^" "¡BANG!" ; cortometraje MoverGabineteRojo with descripcion "La verdad, " "por sólida que se vea la puerta, " "prefiero tomar algunas precauciones adicionales... " "y como este gabinete no está fijo al muro, " "debiera ser posible usarlo.^^" "Empujo el gabinete por el costado " "y consigo moverlo un poco: " "2 centímetros, nada menos... " "así que insisto una y otra vez " "hasta que consigo ponerlo frente a la puerta " "que queda así bloqueada.^^" "Tardo unos momentos en recuperar el aliento, " "pero estoy satisfecho... " "y algo más tranquilo, la verdad." ; cortometraje GabineteCerrado with descripcion "El gabinete tiene una manilla sencilla " "con una chapa de llave común y corriente, " "del tipo que yo podía abrir con los ojos cerrados... " "cuando tenía mis herramientas " "y vivía cómodamente de mi habilidad.^^" "Aunque no haya perdido mi habilidad, " "la triste realidad es que una de las primeras cosas que perdí " "después que todo se fue al carajo " "fue mi paquete de herramientas; " "me lo quitaron un grupo de sobrevivientes, " "cuando me sorprendieron saqueando su campamento. " "Aquella vez tuve suerte, " "ya que sólo me dieron una feroz paliza " "y se contentaron luego con dejarme apenas con lo puesto.^" "Otras veces no fui tan afortunado...^^" "El hecho es que el gabinete está bien cerrado " "y para abrirlo no tengo más lo que haya a mano en la bodega: " "eso y mi fuerza bruta, " "que no es precisamente mi punto más fuerte, " "je..." ; cortometraje MataZombiVentanaPata with descripcion "^El zombi se me echa encima, " "así que tomando impulso " "le doy un tremendo golpe en la cabeza, " "usando la pata como maza.^" "El efecto es demoledor: " "su cabeza sale volando por la ventana " "y la criatura cae al suelo " "como un títere vacío, " "sin que apenas se vea " "sangre alguna a la vista.^^" "Más vale que vea " "cómo bloquear esa ventana de una vez...^" ; cortometraje DisparaZombiVentanaDentro with descripcion "^El zombi se me echa encima, " "así que tomando puntería " "le disparo en la cabeza, " "que con el impacto " "a tan corta distancia " "sale volando por la ventana. " "La criatura cae al suelo " "como un títere vacío, " "sin que apenas se vea " "sangre alguna a la vista.^^" "Más vale que vea " "cómo bloquear esa ventana de una vez...^" ; cortometraje DisparaZombiVentanaAfuera with descripcion "^Antes de que el zombi consiga entrar, " "tomo puntería " "y le disparo en la cabeza. " "Con el impacto " "la criatura retrocede " "y cae hacia atrás, " "así que su cuerpo queda fuera de la vista de la ventana.^^" "Más vale que vea " "cómo bloquear esa ventana de una vez...^" ; cortometraje ZombisMuerden with descripcion "^Los zombis se me echan encima " "y me aferran con sus manos sarmentosas.^" "Intento luchar " "pero son demasiados: " "me inmovilizan con una fuerza prodigiosa " "y abriendo sus bocas al máximo, " "me dan mordidas en el cuello, " "en los brazos, " "en las piernas...^^" "Por lo visto, " "voy a quedarme aquí más rato de lo que pensaba...^" ; cortometraje MataZombisVentanaPata with descripcion "^El zombi que va en frente me ataca, " "así que tomando impulso " "le doy un tremendo golpe en la cabeza, " "usando la pata como maza.^" "La criatura cae al suelo, " "decapitada, " "pero detrás siguen llegando otros más, " "que pasan encima del caído sin mirarlo^^" "Creo que no voy a salir de esta...^" ; cortometraje DisparaZombisDentro with descripcion "^El zombi que va en frente me ataca, " "así que tomando puntería " "le disparo en la cabeza.^" "La criatura cae al suelo, " "decapitada, " "pero detrás siguen llegando otros más, " "que pasan encima del caído sin mirarlo.^^" "Creo que no voy a salir de esta...^" ; cortometraje DisparaZombisVentanaAfuera with descripcion "^Antes de que todos los zombis consigan entrar, " "tomo puntería " "y le disparo a uno en la cabeza. " "Con el impacto " "la criatura retrocede " "y cae hacia atrás, " "así que su cuerpo queda fuera de la vista de la ventana.^^" "Por desgracia, detrás siguen llegando otros más.^^" "Creo que no voy a salir de esta...^" ; cortometraje DisparaZombisPuerta with descripcion "^El zombi que va en frente me ataca, " "así que tomando puntería " "le disparo en la cabeza.^" "La criatura cae al suelo, " "decapitada, " "pero detrás siguen llegando otros más, " "que pasan encima del caído sin mirarlo.^^" "No son demasiados, " "así que me tomo mi tiempo " "y los voy liquidando con calma, " "uno " "a " "la " "vez, " "hasta que la salida queda despejada.^^" "Seguro que pronto llegarán más, " "así que lo mejor será largarme " "ahora que tengo la oportunidad." ; cortometraje HuirSinRemedios with descripcion "Bueno, " "lo dicho: " "los zombis no hacen más que arruinarme la vida.^^" "Lo más probable " "es que esta buena gente no me reciba con las manos vacías... " "y escapar de los muertos que caminan " "para morir a balazos " "me parece un poco estúpido.^^" "Y como ya está visto " "que para sobrevivir ya no me basto a mí mismo, " "no me quedará más que integrarme a otra comunidad: " ; cortometraje HuirConRemedios with descripcion "Corriendo la mayor parte del camino " "logré llegar al zoológico " "y me encontré con esta gente justo a la salida.^^" "La verdad, " "no me recibieron con los brazos abiertos... " "pero me han aceptado " "y de momento viajo con ellos.^^" "Supongo que lo que más futuro tiene en este momento " "es integrarme a esta comunidad: " ; cortometraje Final with descripcion "congeniar con desconocidos, " "trabajar en equipo, " "hacer mi parte, " "integrarme al grupo... " "toda esa mierda de vida en sociedad " "que nunca acabó por convencerme.^^" "Porque si no " "¿qué me queda?^^" "Una vida de forrajeo permanente, " "luchando contra muertos y vivos " "simplemente para tener las fuerzas..." "para seguir buscándome la vida yo solo.^^" "Paso: " "demasiado trabajo.^^" "Quién sabe, " "puede que hasta me acostumbre " "al trabajo honesto... " "faltaría mas.^^" "Qué peste, esto de los muertos vivientes, ya te digo..." ; ! LINEAS DE GRAMATICA ! Definiciones para ayuda Verb 'ayuda' * -> ayuda * topic ->ayuda; [AyudaSub; ZIPI_RunMenuT(ZIPI_Menu1); @erase_window $ffff; JugadorA(localizacion); ]; ! Definiciones para pistas Verb 'pistas' * -> pistas * topic ->pistas; [PistasSub; ZIPI_RunMenuT(ZIPI_Menu3); @erase_window $ffff; JugadorA(localizacion); ]; ! Definiciones para Texto Animado Verb 'anima' * -> animar; [animarSub; if (velocidad_texto==0){ velocidad_texto=20; "Texto animado ACTIVADO."; } else { velocidad_texto=0; "Texto animado DESACTIVADO."; } ]; ! Extensiones según la localidad para la que fueron originalmente modificados ! Definiciones para lectura de postes Extend 'lee' first * legible -> Leer; [ LeerSub; <>; ]; ! Definiciones para Bloquear Puerta o Ventana Extend 'tapa' * noun 'con' noun -> Cerrar; Extend 'cubre' * noun 'con' noun -> Cerrar; Verb 'bloquea' * noun -> Cerrar * noun 'con' noun -> Cerrar; Verb 'oculta' * noun -> Cerrar * noun 'con' noun -> Cerrar; ! Definiciones para Sentarse Extend 'sienta' first * -> Meterse; Extend 'echate' first * -> Meterse; Extend 'sientate' first * -> Meterse; Extend 'echarse' first * -> Meterse; Extend 'sentarse' first * -> Meterse; Extend 'echarte' first * -> Meterse; Extend 'sentarte' first * -> Meterse; ! Definiciones para Atacar Extend 'ataca' * creature 'con' held -> Atacar * 'a//' creature 'con' held -> Atacar; ! Definiciones para Golpear Extend 'golpea' * 'a//' noun 'con' held -> Tocar * noun 'con' held -> Tocar; ! Definiciones para salir por ventana Extend 'sal' * 'por' noun -> Meterse; ! Definiciones para Levantar Verb 'levanta' 'encaja' * noun -> Coger; ! Definiciones para Extintor Verb 'cuelga' 'colgar' * noun -> Dejar; Verb 'descuelga' 'descolgar' * noun -> Coger; ! Jugador Verb 'suicida' * -> Suicidar * noun -> Suicidar * 'a//' noun -> Suicidar * noun 'con' held -> Suicidar * 'a//' noun 'con' held -> Suicidar; [SuicidarSub; if (uno==0) "Matar ¿qué?..."; else if (uno~=Jugador) { if (uno ofclass PSI) "Lo que tengo que hacer es matarlo..."; else "Las cosas no se suicidan..."; } ]; ! Definiciones para Disparar Pistola Verb 'dispara' * -> disparar * noun -> dispararObj * noun 'con' held -> dispararA * 'a//'/'hacia'/'cerca' noun -> dispararA * 'a//'/'hacia'/'cerca' noun 'con' held -> dispararA * held 'a//'/'hacia'/'cerca' noun -> dispararA reverse * 'con' held 'a//'/'hacia'/'cerca' noun -> dispararA reverse; [ dispararObjSub ; if (uno~=Pistola) "Con ", (el) uno, " no se puede disparar."; else <>; ]; [ dispararSub; if (Pistola notin jugador) "No tienes nada con que disparar."; else "Mejor no gastar balas y dispararle a algo..."; ]; [ dispararASub ; if (otro~=0) { if (otro~=Pistola) "Con ", (el) otro, " no se puede disparar."; } if (Pistola notin jugador) "No tengo nada con que disparar..."; ]; ! Saludar a PSIs Extend 'saluda' * 'a//' creature -> Hablar;