! POR LA NECEDAD HUMANA ! Juego hecho en informatE, usando Sonidos.h y PNJMovil.h ! Versión 1.1 ! ! ATENCIÓN: NO SIGAS LEYENDO SI NO HAS TERMINADO EL JUEGO, ! LO PUEDES ESTROPEAR SI LEES NADA MÁS UN POQUILLO HACIA ABAJO. ! ! ! ! COSAS INTERESANTES PARA AÑADIR: ! ! -Un final totalmente con simulación. ! ! -Una librería de literatura automática, para que relate bien el ! dormitorio de los niños. ! ! -Averiguar cierto bug raro de los ruidos contínuos y de PNJMovil. ! ! -Reportar a Mel los bugs o posibles mejoras de sonidos.h ! ! -Completar la decoración de objetos, por ejemplo el uniforme de ! Tetsuo. O poner gallinas picoteando el suelo. ! Constant Historia "^^Por la Necedad Humana"; Constant Titular "^(c) 2000 Urbatain y Undeath^Basado en el relato del mismo nombre por Undeath^Programado por Urbatain^"; Constant ADMITIR_COMANDO_SALIDAS; Constant HAY_CURIOSIDADES; ! Constant IMPRIMIR_DEDUCCIONES; replace dibujarlineaestado; ! Reemplazamos la lista de estado. Include "EParser"; Include "NueEsc"; ! nuevo escuchar para sonidos ! Inclusión de acciones y funciones. Include "Acciones"; Include "PNJMovil"; ! Ciertas cosas que deben de ir sin más cojones, delante de la gramática. [ Curiosidades ; print "Ante todo decir que tanto para el relato original y el juego, no se ha investigado a fondo la hiroshima del año 1945, asi que es probable que cometiésemos errores graves de documentación o de ambiente verídico, tanto como pueda ser en la tecnología que usaban, ropa, costumbres, tipos de casas, etc. Pero bueno, creemos que nos sabrán perdonar este pequeño desliz.^ ^ Respecto al juego, tiene bastantes cosas implementadas que por la naturaleza del protagonista no pueden ser interactuadas. Escribe xyzzy en cualquier momento del juego para hacerte sólido.^^ Sitios interesantes en la red sobre el tema son:^^ Hiroshima Archive: Magnífica web con diverso material sobre el horror de la bomba. Hay una galería de fotos de después del estallido que es espeluznante, con pié de foto comentando la historia del objeto representado que te hará casi llorar.^ ^ Hiroshima Peace Site: Es un museo virtual dedicado a enseñar la crudeza de lo que pasó. Incluso una copia de la orden del lanzamiento de la bomba, que sorprende por su frialdad y el minucioso espanto que supone una máquina estropeada por dentro pero con un inmenso poder, como pueden llegar a ser las potencias mundiales.^ ^ Cualquier comentario, o reporte de errores será bienvenido a: ^^ En memoria de las víctimas de la guerra, el terrorismo y el terrorismo de estado.^^ Undeath y Urbatain^^"; ]; [ MensajeMuerte; switch(banderafin) { 3: print "^Y en ese momento el Infierno abrió sus destructoras fauces sobre la casa de los Tsugonawa, vomitando fuego sobre sus ocupantes en un enorme torbellino de llamas y aires calientes... en poco tiempo la casa quedó reducida a poco más que escombros y cenizas... ni siquiera quedaron cadáveres que enterrar... todo se convirtió en un extenso y gris desierto radiactivo...^"; EsperarTecla(); BorrarPantalla(); print "^^...la familia de Aiko Tsugonawa quedó devastada y consumida por la lucha sin tregua de dos gigantes ciegos y necios. Por la necedad humana decenas de miles de familias quedaron rotas y diezmadas del mismo modo esa lúgubre mañana veraniega. Por la necedad humana la Muerte mordió esa oriental tierra llamada Hiroshima. Por la necedad humana también morirá la humanidad antes de poder ver el Amanecer de un nuevo siglo; esperemos, al menos, que la Madre Tierra sobreviva al más bastardo de sus hijos, nosotros.^^"; } banderafin=2; ]; ! Inclusión de los verbos de la gramática. Include "Gramatica"; Include "Sonidos"; Include "BajoNivel"; ! Para EsperarTecla y BorrarPantalla ! Variables globales ! Atributos Attribute ignifugo; !Attribute ardiendo; ! Sonidos TipoDeSonido RuidoCamion "un ruido ronco de un motor" with usarDistancia true, usarPotencia false; TipoDeSonido RuidoFrigorifico "un zumbido de traqueteo constante y molesto"; TipoDeSonido RuidoRadio "un zumbido de estática"; TipoDeSonido VozAiko "una voz de niña" with adjetivoDeVoz [; switch(Aiko.estado) { espera_carta: return "esperanzada"; coge_carta, revolotea, corre_cuarto: return "entusiasmada"; pelea_Tetsuo: return "molesta"; habla_Arame: return "agradecida"; default: return 0; } ], verboDecir [; switch(Aiko.estado) { espera_carta: return "susurra"; coge_carta, revolotea, corre_cuarto: return "grita"; pelea_Tetsuo: return "grita"; habla_Arame: return "dice"; default: return 0; } ], reconocible true; TipoDeSonido VozArame "una voz de mujer" with adjetivoDeVoz [; switch(Arame.estado) { peina: return "cansada"; regana: return "severa"; habla_Aiko: return "cariñosa"; default: return 0; } ], verboDecir [; switch(Arame.estado) { peina: return "se lamenta"; regana: return "regaña"; habla_Aiko: return "dice"; default: return 0; } ], reconocible false; TipoDeSonido VozTetsuo "una voz de niño" with adjetivoDeVoz [; switch(Tetsuo.estado) { juega: return "ensimismada"; pelea_Aiko: return "burlona"; va_cuarto: return "resignada"; default: return 0; } ], verboDecir [; switch(Tetsuo.estado) { juega: return "susurra"; pelea_Aiko: return "dice"; va_cuarto: return "refunfuña"; default: return 0; } ], reconocible false; ! Ruidos Contínuos NO FUNCIONAN BIEN!!! (en este juego al menos no, extrañamente) ! El ruido que emite la radio: !Ruido zumbidoRadio "zumbido de estática" !with nombre 'zumbido' 'ruido' 'sonido' 'estatica', !descripcion "Es el zumbido de una radio sin sintonizar.", !voz ruidoRadio, !frase 0, !intensidad 7, !origen Radio; ! El ruido que emite el frigorífico: !Ruido zumbidoFrigo "zumbido de traqueteos" !with nombre 'zumbido' 'ruido' 'sonido' 'traqueteo' 'traqueteos' ! 'constante' 'molesto', !descripcion [; ! if (Frigorifico has abierto) ! "Es un zumbido de traqueteo de un frigorífico bastante ! ruidoso. Parece como si en cualquier momento se fuese ! a desarmar."; ! else "Es un zumbido de traqueteo de un frigorífico."; ! ], !voz ruidoFrigorifico, !frase 0, !intensidad [; ! if (Frigorifico has abierto) return 10; ! else return 8; ! ], !origen Frigorifico, !sonando false; ! Aqui van las definiciones de localidades ! y los objetos del juego Lugar Calle "Calle seca y polvorienta" with descripcion [; print "A ambos lados de la calles se agolpan las casas; algunas de ellas son puestos con toldos de bambú que en el pasado mostraban a los posibles clientes los alimentos que ofrecían, el resto son simples casas blancas y normales de una sola planta. Los unicos detalles que hacen que la vista sea inquietante son el hecho de que practicamente todas las ventanas estan ciegas y las puertas llenas de sacos de arena. Justo en frente contemplas la casa de los Tsugonawa.^"; if (Aiko.estado==espera_carta) print "^La pequeña Aiko Tsugonawa está mirando por la sucia ventana de su cuarto hacia la calle."; if (turnos<2) print " Mientras, el resto de su familia recoge sus cosas para marchar. Ella se ha levantado antes expresamente para hacer sus maletas; espera algo importante y no puede irse sin ello."; ""; ], al_n PasilloSur, ! esto son conexiones sonoras por donde el sonido pasará, ! pero no los personajes cercanoA obj_n DormitorioNinos obj_n Salita obj_o Limbo, has luz; ! Objetos de la calle: Object casas "casas" Calle with nombre 'casas' 'blancas', descripcion "Son achaparradas con fachadas encaladas pero agrietadas por el descuido, quizás por ser una zona pobre de la ciudad. Estás en frente de la casa de la familia Tsugonawa, que está en el norte.", has escenario transparente nombreplural; Object puestos_toldos "puestos con toldos de bambú" casas with nombre 'puestos' 'toldos' 'puesto' 'toldo' 'bambu', descripcion "Vacíos... recuerdo del comercio menor que una vez hubo en esta calle.", has escenario nombreplural; Object clientes_alimentos "clientes de los puestos" Calle with nombre 'clientes' 'alimentos', descripcion "Quizás en un pasado... ahora no hay nada.", has escenario nombreplural; Object ventanas "ventanas de las casas" casas with nombre 'ventanas', descripcion "La gran mayoría están cegadas con sacos de arena, o cerradas a cal y canto. De las de la casa de los Tsugonawa, una está cegada pero la otra no.", has escenario nombreplural; Object sacos "sacos de arena" casas with nombre 'sacos ' 'saco', descripcion "Llenan las puertas y las ventanas cerradas y cegadas de esta calle.", has escenario nombreplural; Object casa "casa de la familia Tsugonawa" Calle with nombre 'casa' 'tsugonawa', descripcion "Es de planta baja, con la pared blanca desgastada y resquebrajada. Tiene dos ventanas, una a cada lado de la entrada. La de la derecha está cegada, mientras que la de la izquierda permanece abierta de par en par.", has escenario transparente; Object ventana_izq "ventana abierta de par en par" Calle with nombre 'ventana' 'abierta' 'izquierda', esta_en Calle DormitorioNinos, descripcion "Está sin cegar.", antes [; BuscarEn: if (localizacion==Calle) "Puedes ver un dormitorio con dos camas."; else "Puedes ver la polvorienta calle."; ], has escenario femenino; Object ventana_dch "ventana cegada" Calle with nombre 'ventana' 'cerrada' 'cegada' 'derecha', esta_en Calle Salita, descripcion "Está cerrada a cal y canto.", antes [; BuscarEn: "Imposible atisvar nada, está cerrada."; ], has escenario femenino; ! Dormitorio de los niños Lugar DormitorioNinos "Dormitorio de los niños" with descripcion "Austero cuarto cuya única luz proviene de la única ventana que Arame se negó a cegar como singular rechazo a la inminente Guerra.", ! Como único mobiliario posee un reducido armario de carcomida ! madera y dos camas.", irrelevante 'cuarto' 'dormitorio' 'habitacion', al_n DormitorioPadres, al_e PasilloSur, cercanoA obj_s Calle, has luz; ! Objetos en el dormitorio de los niños ! el armario Object armario_pequeno "reducido armario de carcomida madera" DormitorioNinos with nombre 'armario' 'reducido' 'pequeno' 'ropero' 'carcomido' 'carcomida' 'madera', descripcion "Un gastado y pequeño armario ropero.", has recipiente abrible estatico; ! las camas Class Cama with nombre 'cama' 'camastro' 'camas' 'camastros', articulo "una", listar_juntos "camas", has soporte estatico abierto femenino entrable; Cama cama_tetsuo "que es un completo caos" DormitorioNinos with nombre 'que' 'es' 'un' 'completo' 'caos' 'desordenada' 'imperfecta', adjetivos 'tetsuo'; Cama cama_aiko "que está perfectamente hecha" DormitorioNinos with nombre 'que' 'esta' 'hecha' 'perfectamente' 'perfecta' 'ordenada', adjetivos 'aiko'; ! las maletas Class Maleta with nombre 'maleta' 'maletas', articulo "la", listar_juntos "maletas", has recipiente abrible femenino; Maleta maleta_aiko "maleta de Aiko" cama_aiko with adjetivos 'aiko', descripcion "Es de la pequeña Aiko."; Maleta maleta_tetsuo "maleta de Tetsuo" cama_tetsuo with adjetivos 'tetsuo', descripcion "Es de Tetsuo, el hermano de Aiko.", has abierto; ! la ropa Class Ropa with nombre 'ropa' 'ropas' 'prenda' 'prendas', has femenino nombreplural; Ropa ropa_aiko "ropas de niña" maleta_aiko with nombre 'nina', adjetivos 'aiko', descripcion [; print "Son distintas prendas de niña. "; if (self has general) "Estan perfectamente dobladas y ordenadas."; else "Están hechas un embrollo."; ], has general; Ropa ropa_tetsuo "ropas de niño" cama_tetsuo with nombre 'nino', adjetivos 'tetsuo', descripcion [; print "Ropas variadas de vestir de niño. "; if (self has general) "Estan perfectamente dobladas y ordenadas."; else "Están hechas un embrollo."; ]; ! Pasillo zona sur Lugar PasilloSur "Zona sur del pasillo" with descripcion "Ninguna entrada da la bienvenida a la casa, sino un corto y estrecho pasillo de paredes desnudas. Hay una puerta a cada lado del mismo.", irrelevante 'pared' 'paredes' 'pasillo' 'puerta' 'puertas', al_n PasilloNorte, al_s Calle, al_e Salita, al_o DormitorioNinos, has luz; ! Objetos del pasillo sur ! NO HAY ! Salita de estar Lugar Salita "Salita de estar" with descripcion "Esta sala está en penumbra ya que la ventana que da a la calle en la pared sur, está completamente cegada.", al_n Cocina, al_o PasilloSur, cercanoA obj_s Calle, has luz; ! Objetos de la salita Object Mesa "mesa baja" Salita with nombre 'mesa' 'mesita' 'baja', describir "Una baja mesa de madera descolorida, rodeada de cuatro sillas, descansa en el centro.", antes [; Coger, Empujar, Girar, Tirar: print "Deja los muebles en paz.^"; rtrue; ], has femenino estatico; Object Sofa "roido sofá" Salita with nombre 'sofa' 'sofan' 'sillon', describir "Además puede verse un roido sofá que no parece estar en buenas condiciones.", has estatico; ObjetoHablante Radio "radio" Salita with nombre 'radio', inicial [; if (self has encendido) "Una radio rota que alguién se olvidó de apagar zumba en alguna parte de la estancia."; else "La radio permanece aquí muda, ante su falta de utilidad."; ], descripcion [; print "Es un aparato destartalado y viejo, de un sólo altavoz frontal y varias ruedas de sintonización, asi como una que hace la función de ON/OFF. "; ], voz RuidoRadio, antes [; escuchar : if (self has encendido) "Sólo emite el incesante zumbido de la estática."; else "Está muda."; ], despues [; apagar: PararDaemon(self); encender: ArrancarDaemon(self); ], daemon [; if (random(100)<=30) self.habla(0,nivelNormal); ], has femenino conmutable encendido; ! Dormitorio de los padres Lugar DormitorioPadres "Dormitorio de los padres" with descripcion "Un ventanuco en la pared norte que da al patio trasero ilumina las descorchadas y vacías paredes de la estancia dándole un aspecto bastante pobre y lúgubre.", al_e PasilloNorte, al_s DormitorioNinos, cercanoA obj_n Patio has luz; ! Objetos del dormitorio de los padres Object ventanuco "ventanuco redondo" with nombre_m 'ventanuco' 'redondo' 'ventana', descripcion "Es un agujero redondo y sin cristal.", esta_en DormitorioPadres Patio, antes [; BuscarEn: if (parent(self)==Patio) "Ves un dormitorio casi vacío."; else "Ves el patio desolado de la casa."; ], has escenario; Object somier "somier grande" DormitorioPadres with nombre 'somier' 'cama' 'grande', describir "Un somier grande y oxidado sin colchón que sostener ocupa la mayor parte de la habitación.", descripcion "El lecho nupcial de esta casa es un amasijo de hierro, muelles maltrechos y manchas de óxido.", has estatico; Object armario "armario" DormitorioPadres with nombre 'armario', has estatico abrible abierto recipiente; Object biombo "biombo de tela agujereada" DormitorioPadres with nombre 'biombo' 'tela' 'agujereada', descripcion "Con motivos de flores entrelazadas formando un patrón que se repite por toda la tela. Salvo, claro está, por los desgarrones y los agujeros.", has estatico; ! Pasillo zona norte Lugar PasilloNorte "Parte norte del pasillo" with descripcion [; print "El corredor termina en una oxidada puerta metálica. "; if (PuertaMetalica hasnt abierto) "Esta zona está en penúmbra, ya que la única fuente de luz es los pobres rayos que entran a través de la ventana de la puerta metálica cerrada."; else "Está abierta, arrojando una haz de luz sobre esta zona; te deslumbra y alumbra el polvillo que flota en el ambiente."; ], al_n PuertaMetalica, al_s PasilloSur, al_e Cocina, al_o DormitorioPadres, has luz; ! Objetos en el pasillo, parte norte. Object PuertaMetalica "puerta metálica" PasilloNorte with nombre 'puerta', adjetivo 'oxidada' 'metalica', descripcion [; print "Es una maltrecha puerta de metal, corroida por la falta de un buena capa de pintura que la proteja. Tiene una ventanita de cristal que permite ver el otro lado"; if ((parent(self)==PasilloNorte)||(self has abierto)) { if (Pestillo has abierto) " y un pestillo que está quitado."; else " y un pestillo que está echado."; } "."; ! esto sale cuando no está en el pasillo. ], puerta_a [; if (parent(self)==PasilloNorte) return Patio; else return PasilloNorte; ], direcc_puerta [; if (parent(self)==PasilloNorte) return al_n; else return al_s; ], esta_en PasilloNorte Patio, antes [; abrir: if ((Pestillo hasnt abierto) && (self hasnt abierto)) "Tiene el pestillo echado. Impide abrirla."; cerrar: if ((Pestillo hasnt abierto) && (self has abierto)) "El pestillo choca con el marco de la puerta, impidiendo que esta se cierre."; ], has femenino escenario puerta abrible abierto transparente; Object Pestillo "pestillo" PuertaMetalica with nombre 'pestillo' 'cerrojo', descripcion [; if ((parent(PuertaMetalica)==PasilloNorte)||(PuertaMetalica has abierto)) { if (self has abierto) "Está abierto, o sea, permite que se pueda abrir o cerrar la puerta."; else "Está echado, o sea, impide que se pueda abrir la puerta."; } else "Está en el otro lado."; ], antes [; if ((parent(PuertaMetalica)==Patio)&&(PuertaMetalica hasnt abierto)) "Está en el otro lado."; PonerSobre: <>; Desvestir, Quitar: <>; ], has abrible; Object Ventanita "ventanita de la puerta" PuertaMetalica with nombre 'ventanita' 'ventana' 'ventanilla', adjetivo 'pequena', has femenino; ! La Cocina Lugar Cocina "Cocina austera" with descripcion "El estrecho cuarto contiene los utensílios indispensables para la cocina además de una pequeña mesa para los desayunos y un frigorífico grande y aparatoso que no para de emitir un zumbido constante y molesto", al_s Salita, al_o PasilloNorte, cercanoA obj_n Bano obj_n Patio, has luz; ! Objetos de la cocina: Object Utensilios "utensílios" Cocina with nombre_mp 'utensilios', nombre_m 'hornillo' 'fogon' 'fregadero' 'mueble' 'mueblecito', nombre_f 'cocina', descripcion [; print "Forma parte de todo lo necesario para cocinar y alimentar a la familia de una forma más o menos decente: un hornillo de gas con fogón, y un fregadero con un mueblecito para guardar cosas."; if (self hasnt general) { move cuchillo to Cocina; print " Ves un cuchillo pequeño en el fregadero."; give self general; } print "^"; rtrue; ], genero G_MASCULINO+G_PLURAL, has escenario; Object Mesa_cocina "mesa pequeña" Cocina with nombre 'mesa', adjetivo 'pequena' 'desayuno', descripcion "Es tan pequeña que sólo permite comer de dos en dos en los desayunos. Asi que la familia prefiere almorzar en el salón... o al menos preferían.", has femenino escenario; ObjetoHablante Frigorifico "frigorifico" Cocina with nombre 'frigorifico' 'frigo' 'refrigerador' 'nevera', descripcion "Es grande en anchura, pero bajito y panzudo. Grisáceo más que blanco de los años que debe de tener.", antes [; escuchar: if (self hasnt abierto) "Emite un zumbido molesto de traqueteos del interior."; else "El sonido es ahora horroroso, parece como si tuviera vida propia, una vida aburrida que le hacer renquear todo el rato."; ], contador 4, voz ruidoFrigorifico, daemon [; if (random(100)<=35){ if (self has abierto) self.habla(0,nivelAlto); else self.habla(0,nivelNormal); } ], has abrible escenario recipiente; Object Tarro "tarro" Frigorifico with nombre 'tarro' 'recipiente' 'bote' 'soja', descripcion "Un tarro de salsa de soja vacío.", antes [; abrir: "Lo abres, miras su interior vacío y lo vuelves a cerrar."; ]; ! El Patio Lugar Patio "Patio desolado" with descripcion [; print "Un patio con el suelo de tierra que a duras penas deja ver algún verde. En la pared norte se alzan una hilera de jaulas bajas con rejas oxidadas; y en la esquina suroeste, un pequeño cobertizo de ladrillo con una cortinilla que parece ser el baño. La puerta de salida al resto de la casa permanece "; if (PuertaMetalica has abierto) print "abierta de par en par "; else print "cerrada "; "en la pared sur, y a su lado derecho, un ventanuco sin cristal."; ], al_s PuertaMetalica, adentro Bano, cercanoA obj_s Cocina, has luz; ! Objetos en el Patio Object Jaulas "jaulas metálicas" Patio with nombre 'jaula' 'jaulas' 'metalicas' 'oxidado', descripcion "Es un conjunto de amasijos de alambre oxidado. Probablemente para contener animales. Tiene una verja de apertura.", has femenino abrible transparente escenario; ! El baño Lugar Bano "Baño cobertizo" with descripcion "Un claustrofóbico cuarto de baño de mohosas baldosas ya grises. Una estrecha ducha, un lavabo viejo con un espejo gastado sobre él y un bater es todo cuanto contiene; además de varias perchas oxidadas de las que antes colgaron toallas.", afuera Patio, cercanoA obj_s Cocina, has luz; Object ducha "ducha estrecha" Bano with nombre 'ducha', descripcion "Tiene un escaso metro cuadrado, con una leve inclinación y un agujero de desague. Sobre ella tiene la alcachofa de la ducha, con una llave de paso a media altura.", has escenario femenino; Object alcachofa "alcachofa de la ducha" ducha with nombre 'alcachofa' 'grifo', descripcion "Parece atorada por la cal del agua. Es de un diseño funcional y rudimentario, unida a un tubo que recorre la pared y acaba en la alcachofa con agujeritos.", has femenino escenario; Object llave_paso "llave de paso" ducha with nombre 'llave' 'paso' 'grifo', descripcion "Una pequeña palanquita que abre el paso del agua por la tubería.", has femenino escenario; Object tuberia "tubería" ducha with nombre 'tubería', descripcion "Sale de la pared este, y llega hasta mitad altura donde está la llave de paso y asciende hasta la alcachofa de la ducha.", has femenino escenario; Object lavabo "lavabo viejo" Bano with nombre 'lavabo', descripcion "Un viejo lavabo con surcos de agua y bastante desgastado. Sobre él hay un espejo.", has escenario; Object espejo "espejo" Bano with nombre 'espejo', descripcion "Es un pequeño espejo muy gastado y oxidado.", antes [; BuscarEn: "Dentro del espejo ves una habitación igual a esta, con todos los objetos salvo uno: tu mismo. No te reflejas."; ], has escenario; Object bater "bater" Bano with nombre 'bater' 'water' 'retrete', descripcion "No tiene tapa. Tiene manchas de óxido y surcos de agua en algunas zonas, auque el interior está bastante limpio.", has escenario; ! El LIMBO!!!! Lugar Limbo "El Limbo" with descripcion "Eh. ¿cómo has llegado aquí? Malditos betatesters...", cercanoA obj_e calle; ! Otros objetos Object camion "camioneta militar" Limbo class ObjetoHablante, with nombre 'camion' 'camioneta' 'militar' 'japonesa', descripcion "Es de color verde oscuro, con un remolque cubierto por una lona amplia para almacenar cosas o llevar soldados. En la puerta tiene dibujada la bandera japonesa,.", contador 2, voz RuidoCamion, daemon [; self.Habla(0,nivelAlto); self.contador--; if ((parent(self)==Limbo)&(self.contador<=0)) { move self to calle; if (localizacion==parent(self)) print "La camioneta llega hasta aqui y se detiene en frente de la casa de los Tsugonawa."; } else if (Aiko in parent(self)) { if (localizacion==parent(self)) print "Un soldado del camión extiende su mano con una carta hacia la pequeña Aiko, esta la atrapa con ansia.^"; Aiko.habla("¡Gracias señor!",nivelNormal); if (localizacion==parent(self)) print "El soldado sonríe y la camioneta continúa su camino, alejandose por la calle hasta perderse de vista en una humareda de polvo.^"; CambiaEstado(Aiko,revolotea); move carta to Aiko; move self to Limbo; PararDaemon(self); } ], has femenino; Object cuchillo "pequeño cuchillo de cocina" Limbo with nombre 'pequeno' 'cuchillo' 'punal' 'hoja' 'cuchilla', inicial "Un cuchillo pequeño yace en el fregadero.", descripcion "Un pequeño cuchillo, de untar salsas."; Object carta "la carta de Aiko" Limbo with nombre 'carta' 'amado' 'aiko', descripcion "Es lo que estaba esperando la pequeña Aiko con tanta ilusión. Una carta de su amado.", has femenino ignifugo; ! PERSONAJES: ! El jugador es un ente astral Object fantasma "tu mismo" Limbo with nombre 'tu', descripcion "Mírate al espejo. Sí, eres tu mismo, pero la luz te traspasa y puedes ver a través de tu cuerpo, como un fantasma.", vida, reaccionar_antes [; coger, empujar, abrir, cerrar, atacar, encender, apagar: "Tu mano atraviesa la materia."; ], suma_al_alcance [; if ((Aiko.estado==espera_carta)&(Localizacion==calle)) PonerAlAlcance(Aiko); ], has animado propio; ! Clase PSI Class persona class PNJMovil ObjetoHablante ObjetoOyente, with nombre 'persona', turno_psi 2, conversa 0, estado sin_hacer_nada, vida "No puede verte ni oirte, no te esfuerces.", ordenes "No te puede escuchar.", has propio animado ignifugo transparente; ! Estados de los PSIs: ! estados de Aiko Constant sin_hacer_nada 0; Constant espera_carta 1; Constant coge_carta 2; Constant revolotea 3; Constant pelea_Tetsuo 4; Constant habla_Arame 5; Constant corre_cuarto 6; ! estados de Arame ! sin_hacer_nada Constant peina 1; Constant busca_Aiko 2; Constant regana 3; Constant habla_Aiko 4; !estados de Tetsuo ! sin_hacer_nada Constant juega 1; Constant pelea_Aiko 2; Constant va_cuarto 3; ! Aiko Tsugonawa Object Aiko "Aiko Tsugonawa" DormitorioNinos class persona, with nombre 'aiko' 'tsugonawa' 'nina' 'hija' 'hermana', descripcion [; print "Aiko Tsugonawa es una niña pequeña de unos 8 años de edad, pelo negro y liso que cae hasta la mitad de su espalda y ojos negros. Viste un sobrio traje escolar gris y unas sandalias. "; switch(self.estado) { sin_hacer_nada: rtrue; espera_carta: "Está apoyada en la ventana, mirando hacia la calle, con una mirada de esperanza."; coge_carta: "Está corriendo hacia la camioneta del ejército."; revolotea: "Está revoloteando por aqui con la carta en mano y gritando eufórica de alegría."; pelea_Tetsuo: "Está forcejeando con su hermano Tetsuo para que no le quite su preciada carta"; habla_Arame: "Está hablando con su madre."; corre_cuarto: "Está corriendo hacia su cuarto."; } ], describir [; switch(self.estado) { espera_carta: print "^La pequeña Aiko Tsugonawa está mirando por la sucia ventana de su cuarto hacia la calle."; if (turnos<2) print " Mientras, el resto de su familia recoge sus cosas para marchar. Ella se ha levantado antes expresamente para hacer sus maletas; espera algo importante y no podía irse sin eso."; ""; coge_carta: "^Aiko está aqui, corriendo."; revolotea: "^Aiko Tsugonawa revolotea por aqui, carta en mano, gritando eufórica."; pelea_Tetsuo: "^Aqui están Aiko y Tetsuo peleándose."; habla_Arame: "^Aqui está Aiko hablando con su madre."; corre_cuarto: "^Aqui está Aiko corriendo hacia su cuarto, muy contenta."; default: rfalse; } ], turno_psi 1, voz VozAiko, oido [ _sonido; switch(self.estado) { espera_carta: if (_sonido.clase == RuidoCamion) { if (PruebaDeAlcance(self)) print "Al escuchar el camión la niña ve venir con ilusión una camioneta de las fuerzas militares japonesas al fondo de la terriza calle levantando una enorme polvareda; y sale corriendo hacia la puerta.^"; CambiaEstado(self,coge_carta); self.habla("¡¡¡Por fin!!!, ¡¡¡Ya ha llegado!!!",nivelAlto); } } ], accion_antes [; self.turno_psi--; if((self.estado==revolotea)&(parent(self)==DormitorioPadres)) { PNJ_Ruta(self,parent(Tetsuo),CAMINO_CUALQUIERA); } if(self.estado==corre_cuarto) if(parent(self)==DormitorioNinos) { CambiaEstado(self,sin_hacer_nada); banderafin=3; } if(self.turno_psi<=0) { self.turno_psi=random(3,4); if (self.estado==espera_carta) { switch(self.conversa) { 0: self.habla("Venga, ven...",nivelNormal); self.conversa++; 1: self.habla("Veeen...",NivelNormal); self.conversa--; } } if (self.estado==revolotea) { switch(self.conversa) { 0: self.habla("¡¡Mami!!... ¡¡Mira lo que me ha llegado!!... ¡¡¡por fin!!!",nivelAlto); self.conversa++; 1: self.habla("¡¡Bieeeen!!",nivelAlto); self.conversa++; 2: PNJ_Ruta(Aiko,MOVIMIENTO_POR_META,salita,CAMINO_CUALQUIERA); self.conversa=0; } } if (self.estado==pelea_tetsuo) { switch(self.conversa) { 0: self.habla("¡¡Mami!!... ¡¡Ven!!",nivelAlto); self.conversa++; 1: self.habla("¡¡Deja mi carta!!... ¡¡idiota!!",nivelNormal); self.conversa--; } } if (self.estado==habla_Arame) { self.habla("Por cierto mami, ¿alli donde vamos podré escribir a Koichi?",nivelNormal); Arame.habla("Claro que si hija, claro que si.",nivelNormal); CambiaEstado(self,corre_cuarto); CambiaEstado(Arame,sin_hacer_nada); self.habla("¡¡Bien!!",nivelAlto); } } ], has femenino; Object vestido_nina "vestido de Aiko" Aiko with nombre 'vestido' 'aiko' 'uniforme' 'escolar', descripcion [; "Es un vestido gris de una sola pieza. Tiene cuello de camisa y es de manga corta, con un poco de vuelo en la falda lisa, completamente liso salvo por 2 bolsillos delanteros."; ], has ignifugo; Object sandalias "sandalias de madera" Aiko with nombre 'zuecos' 'sandalias' 'madera', descripcion "Son unas sandalias de madera, tradicionales, un poco elevadas por dos tacos de madera en cada una, como un zueco. De sujección del pié llevan dos ligeras cintas de tela con motivos de letras japonesas que no alcanzas a entender.", has femenino nombreplural; ! Arame Tsugonawa Object Arame "Arame Tsugonawa" Bano class persona, with nombre 'arame' 'madre' 'tsugonawa', descripcion [; "Arame es una mujer muy tradicional, de unos 30 años, con la cara amable aunque un poco arrugada del trabajo diario; lleva el pelo, negro aunque con algunas canas, recogido en un moño, Viste un kimono y unas zapatillas."; ], describir [; switch(self.estado) { peina: "Aquí está Arame Tsugonawa, retocándose el moño."; regana: "Arame regaña a sus dos hijos."; default: rfalse; } ], accion_antes[; if ((parent(self)==localizacion)&(VozArame.reconocible==false)) VozArame.reconocible=true; if ((parent(self)==parent(Aiko))&(self.estado==busca_Aiko)) { CambiaEstado(self,regana); self.habla("¡A ver!, ¿Qué pasa aquí?...",nivelNormal); Aiko.habla("Es Tetsuo que no para de molestarme... ¡¡quiere quitarme la carta!!",nivelNormal); self.habla("¿Pero no sabéis que vuestro padre quiere irse? Ha ido para ver si las carreteras estén transitables... y va a venir dentro de poco, así que dejaos de tonterías. Coged vuestras cosas que nos vamos ya.",nivelNormal); CambiaEstado(self,habla_Aiko); CambiaEstado(Aiko,habla_Arame); CambiaEstado(Tetsuo,va_cuarto); Tetsuo.habla("Vale, ya voy...",nivelNormal); Aiko.habla("Gracias mami.",nivelNormal); } ], voz vozArame, oido [ _sonido ; if (self.estado==peina) if ((_sonido.clase==VozAiko)&(Aiko.estado==pelea_Tetsuo)) { self.habla("Estos niños...",nivelMurmullo); CambiaEstado(self,busca_Aiko); } ], has femenino; Object kimono "un kimono" Arame with nombre 'kimono', descripcion "Es como una especie de bata cruzada larga de mangas anchas, sujeta con un fajín atado con un lazo a la espalda. Es de color azul celeste con relieves bordados de motivos de flores y bonsáis."; Object zapatillas "unas zapatillas blancas" Arame with nombre 'zapatillas', descripcion "Son blancas con bodados de flores colores vivos. Son planas y de un número bastante pequeño con la punta muy redondeada.", has femenino nombreplural; ! Tetsuo Tsugonawa Object Tetsuo "Tetsuo Tsugonawa" Salita class persona, with nombre 'tetsuo' 'nino' 'tsugonawa', descripcion [; "Tetsuo Tsugonawa es un niño travieso de unos 10 años. Lleva el pelo muy corto que apenas asoma por la gorra del uniforme escolar que lleva puesto."; ], describir [; switch(self.estado) { sin_hacer_nada: "^Aqui está Tetsuo."; juega: "^Tetsuo Tsugonawa está aqui jugando sólo, con un avióncito de juguete y un soldado de plomo."; va_cuarto: "^Tetsuo se dirige a su cuarto con cara de pocos amigos."; default: rtrue; } ], turno_psi 2, accion_antes[; if ((parent(self)==localizacion)&(VozTetsuo.reconocible==false)) VozTetsuo.reconocible=true; if (self.estado==juega) if (Aiko.estado==revolotea) if (parent(self)==parent(Aiko)) { if (parent(self)==localizacion) print "Aiko se para en seco al ver a Tetsuo, su hermano...^"; CambiaEstado(self,pelea_Aiko); CambiaEstado(Aiko,pelea_Tetsuo); self.habla("¿Qué llevas ahí Aiko?... ¿¡una carta!? ¿Y de quién es si se puede saber?... ¿es otra vez de tu amado?",nivelNormal); Aiko.habla("¡¡¡Deja en paz mi carta!!!, y si es de Koichi... ¿pasa algo?",nivelNormal); } if (self.estado==va_cuarto) if (parent(self)==DormitorioNinos) CambiaEstado(self,sin_hacer_nada); self.turno_psi--; if (self.turno_psi<=0) { self.turno_psi=random(4,5); switch(self.estado) { juega: if (random(2)==2) self.habla("El avión ataca... ¡¡niiiiiooouuunnn!!",nivelMurmullo); else self.habla("¡¡Dispara!!, ¡¡taka taka taka taka!!",nivelMurmullo); pelea_Aiko: if (random(2)==2) self.habla("¡¡Dámela, quiero verla!!",nivelNormal); else self.habla("Na, na, na, na, ¡Aiko tiene novio!...",nivelNormal); } } ], voz vozTetsuo, oido; Object avion "un avión de juguete" Tetsuo with nombre 'avion' 'juguete', descripcion "Es un avioncito de combate japonés, de un sólo motor frontal. En las alas tiene dibujadas la bandera japonesa."; Object soldado "un soldadito de plomo" Tetsuo with nombre 'soldado' 'soldadito' 'plomo', descripcion "Es una figurilla con platafora para mantenerse de pié. Representa un soldado parado portando un fusil."; ! Director del juego Object Director with daemon [; switch(turnos) { 7: ArrancarDaemon(Camion); PararDaemon(self); } ]; ! Inicialización del juego [ Inicializar; CambiarJugador(fantasma); ! lugar de comienzo del personaje localizacion = Calle; ! Esto es para que siempre describa las habitaciones al entrar. modomirar=2; ! Variables de configuración de Sonidos.h costePorObstaculo = 2; ! he bajado los valores originales, para ! tener que tocar lo mínimo. costePorHabitacion = 1; costePorContenedor = 1; costePorContenedorCerrado = 2; max_longitud_camino=7; ! esta es pa PNJMovil.h CambiarDefecto(no_puedes_ir, "Aunque en tu forma actual podrías ir donde quisieses, no hay nada interesante en esa dirección."); ArrancarDaemon(Director); ArrancarDaemon(radio); ArrancarDaemon(frigorifico); ArrancarDaemon(Aiko); ArrancarDaemon(Arame); ArrancarDaemon(Tetsuo); ! Inicialización de personajes CambiaEstado(Aiko,espera_carta); CambiaEstado(Arame,peina); CambiaEstado(Tetsuo,juega); Tetsuo.estado=juega; PNJ_Ruta(Tetsuo,MOVIMIENTO_NINGUNO); ! Introducción print "Te recuerdo que estás aqui de forma privilegiada y en espíritu, por lo que no podrás intervenir, ni hablar con las personas que veas, asi como tocar, coger o manipular las cosas. Eres sólo un espectador, un fantasma más bien. Un espectador especial, por cuanto yo te permito asistir a esta historia.^^"; EsperarTecla(); BorrarPantalla(); print "^^La fecha y el lugar poco le importa ya a los protagonistas de la historia que estoy a punto de mostrarte... A mí tampoco me importa, tan sólo te diré que fue una soleada mañana veraniega, temprano, a eso de las nueve de la mañana. Los protagonistas, aunque tampoco importan, son una familia de la clase vulgar, que apenas si tienen para comer, de una remota ciudad japonesa cuyo nombre tampoco importa, lo único destacable de esta atroz historia es el suceso en sí.^^ La familia Tsugonawa ha vivido tranquilamente en su localidad durante generaciones. Han compartido momentos entrañables y han tenido malos momentos, pero ahora tienen que irse de la casa en la que han vivido desde tiempos inmemoriales. Tienen problemas y pretenden huir de ellos, en realidad todo el mundo tiene problemas, ya que todo el mundo está en guerra...^^"; EsperarTecla(); BorrarPantalla(); ]; ! ESTO IBA A SER LA BOMBA SIMULADA!!!! ![ OndaFuego x ; !objectloop (x) if (parent(x)==0) ArrasaLoc(x); !]; ! ![ ArrasaLoc x loc ; !objectloop (x in loc) if (x has ignifugo) Quema(x); !]; ! ![ Quema obj ; !give obj ardiendo; !ArrasaLoc(obj); !]; Verb 'Xyzzy' * -> xyzzy; [ xyzzySub ; if (Jugador==objjugador) "No hay vuelta atrás amigo."; print "Te vuelves sólido.^"; move objjugador to localizacion; CambiarJugador(objjugador); move fantasma to Limbo; ]; [ CambiaEstado psi est ; if (est==sin_hacer_nada) { psi.estado=sin_hacer_nada; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; } psi.conversa=0; if(psi==Aiko) switch(est) { espera_carta: psi.estado=espera_carta; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; coge_carta: psi.estado=coge_carta; PNJ_Ruta(psi,MOVIMIENTO_POR_META,calle,CAMINO_CUALQUIERA); rtrue; revolotea: psi.estado=revolotea; PNJ_Ruta(psi,MOVIMIENTO_POR_META,DormitorioPadres,CAMINO_CUALQUIERA); rtrue; pelea_Tetsuo: psi.estado=pelea_Tetsuo; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; habla_Arame: psi.estado=habla_Arame; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; corre_cuarto: psi.estado=corre_cuarto; PNJ_Ruta(psi,MOVIMIENTO_POR_META,DormitorioNinos,CAMINO_CUALQUIERA); rtrue; } if (psi==Arame) switch(est) { peina: psi.estado=peina; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); busca_Aiko: psi.estado=busca_Aiko; PNJ_Ruta(psi,MOVIMIENTO_POR_META,parent(Aiko),CAMINO_CUALQUIERA); rtrue; regana: psi.estado=regana; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; habla_Aiko: psi.estado=habla_Aiko; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; } if (psi==Tetsuo) switch(est) { juega: Tetsuo.estado=juega; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; pelea_Aiko: Tetsuo.estado=pelea_Aiko; PNJ_Ruta(psi,MOVIMIENTO_NINGUNO); rtrue; va_cuarto: Tetsuo.estado=va_cuarto; PNJ_Ruta(psi,MOVIMIENTO_POR_META,DormitorioNinos,CAMINO_CUALQUIERA); rtrue; } ]; [ dibujarlineaestado ; @split_window 2; @set_window 1; @set_cursor 1 1; @erase_window; style reverse; print " Por la Necedad Humana "; style roman; @set_window 0; ];