! 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;
];