! NOTAS: ! ! EL código es un poco caótico porque es mi primera eventuar con inform ! y...no nos engañemos...porque yo soy así de sucio programando. ! ! ! ! Verás que algunos objetos tienen definida una misma palabra en nombres y adjetivos, ! ello es para darles prioridad cuando existen otros objetos con la misma palabra ! en su nombre. ! ! ! ! ! genhag@yahoo.com ! !Constant TARGET_GLULX; !Constant WORDSIZE 4; Constant Historia "Insomnio de una noche de verano"; Constant Titular "^Una historia que nos habrá pasado a todos.^"; !Constant ADMITIR_INFINITIVOS; Constant ADMITIR_COMANDO_SALIDAS; Constant HAY_CURIOSIDADES; Global musik = 0; Release 2; Replace DibujarLineaEstado; !Serial "020725"; ! Incluimos los ficheros InformATE habituales Include "EParser"; Object MensajesLibreria with antes [; Puntuacion: rtrue; ! No imprimir nada Dar: if (uno in jugador); else "No puedes dar lo que no tienes."; Coger: if(uno has escenario) "No puedes hacerte con eso."; Coger: if(uno == yo) "Eso no es viable."; Saltar: if(minicadena has general)"Te pones a pegar botes, agitando los brazos a diestro y siniestro, como un bakala flipando al ritmo de la música, si no puedes dormir al menos te lo vas a pasar bien...^CHUNDA-CHUNDA-CHUNDA-CHUNDA ..."; else rfalse; Soso: "Tu más!!"; Cantar: "Ahora no te apetece cantar."; Soplar: "Resoplas con nerviosismo."; Pensar: "Pensar es bueno, sobre todo antes de actuar."; Escuchar: if(minicadena has general)"No puedes evitar escuchar el horripilante ruido de la música máquina de tu vecino, puesta a todo volumen."; else "Todo está en calma."; Oler: "No percibes ningún olor especial."; Dormir: "En eso estamos"; Rezar: "Es tarde para rezar"; Atacar: "No conseguirás nada productivo así."; Apagar: "No puedes apagar eso."; Meterse: "¡¿En Dónde?!"; Ir: "Parece que no puedes ir por ahí."; Salir: "¡¿De dónde?!"; Salirse: "¡¿De dónde?!"; BuscarEn: "No encuentras nada especial."; ]; Include "Acciones"; ! Y la librería de Efectos de sonido, la cual define el objeto ! EfectosSonoros que se ocupa de manejar dos canales de sonido ! independientes (que pueden sonar a la vez). En esta demo solo se usa ! el canal1 Include "bajonivel"; ! Para EsperarTecla y BorrarPantalla !Include "barra.h"; !Para quitar la barra de estado Include "Efectos"; ! funciones de GLK Include "infglk"; ! Finalmente, el fichero generado por BLC, que contiene las definiciones de ! constantes que usaremos para referirnos a los recursos del juego ! (en este caso, para referirnos a las canciones MOD) Include ">insomnio.bli"; !================================================================ ! RUTINA QUE HACE SONAR UNA CANCION !================================================================ ! La rutina Musica, llama al objeto EfectosSonoros (del modulo ! Efectos.h) para que ponga en marcha esa canción, en bucle ! infinito, pasándole también el volumen a que suena. ! Comprobamos además si ha ocurrido algún error [ Musica cancion vol; if (cancion==0) { EfectosSonoros.DesactivarEfecto(); return; } EfectosSonoros.Volumen(vol); if (EfectosSonoros.ActivarEfecto(cancion, SONIDO_BUCLE_INFINITO)) return; "[Error. No puede reproducirse el sonido, ", cancion, "]^"; ]; ! ########################################### ! ########################################### ! LOCALIDADES ! ########################################### ! ########################################### object limbo "el limbo" with descripcion "NADA", has luz; Object interiorcoche "Dentro del coche del vecino" with irrelevante 'salpicadero' 'volante' 'freno' 'mano' 'asiento' 'asientos' 'techo' 'guantera' 'luna' 'cenicero' 'colillas' 'manchas' 'tapiceria' 'candado' 'esterillas' 'esterilla', descripcion "El interior del coche está hecho una pena. El cenicero lleno de colillas, manchas de variada procedencia en la tapicería y barro en las esterillas del suelo.", antes [; Salidas: "La única salida es: SALIR."; coger: if(uno == llaves && llaves in interiorcoche) print "Mira que dejarse un juego de llaves en el coche..."; rfalse; ], afuera lacalle, abajo lacalle, no_puedes_ir "El coche no es ningún salón, solo puedes salir.", has escenario luz valepuntos; !este coche falso es para que admita salir del coche y bajar del coche Object cochex "coche" interiorcoche with nombre 'coche' 'vehiculo', descripcion"", antes[; coger: "Si le robaras el coche en el fondo le harías un favor, pues está en un estado lamentable. Es inexplicable que esto pueda seguir pasando la I.T.V."; Salirse:<>; Disminuir:<>; examinar:<>; ], has oculto escenario; Object habitacion "Tu habitación" with irrelevante 'habitacion' 'casa' 'mi' 'piso' 'mueble' 'muebles' 'armario' 'mesilla' 'salon' 'cocina' 'bano' 'cuarto' 'manta' 'mantas' 'sabanas' 'sabana' 'almohada', descripcion[; if(minicadena hasnt general)"Tu habitacion con tu cama, algunos muebles y la ventana que da al tranquilo patio. Es muy tarde y necesitas descansar.^"; else "Las paredes de tu habitación tiemblan por la potencia de la música del vecino de arriba. La cama da pequeños saltitos de un lado a otro y los cristales de las ventanas rechinan."; ], volumen $C000, !El Volumen va en hexadecimal (máximo 10000) antes[; !atacar, llamar: if (uno==arriba)"Aporreas el techo sin ningún resultado."; dormir: <>; ], afuera [; cambiavol(escaleras3.volumen); return escaleras3; ], has luz; Object lacalle "En la Calle, junto a tu portal" with irrelevante 'farolas' 'acera' 'aceras' 'pavimento' 'calle' 'calles' 'portal' 'calzada' 'pegatinas' 'pegatina', descripcion [; print"Tu calle no es un paso muy transitado, y menos a estas horas de la noche. No obstante, los omnipresentes coches, aparcados apretujadamente en los extremos de la calzada, descansan sus motores y dan fe de la existencia de vidas humanas residentes en el barrio, que a la mañana siguiente los tripularán, o no"; if (minicadena has general)".Tu vecino del cuarto, por ejemplo, seguramente no viva para usar su coche, como lo pilles..."; else "."; ], adentro portal, no_puedes_ir [;if(pijama has puesto)"No son horas de recorrer las calles con un pijama amarillo."; else "No es buena idea pasear por las calles en pelotas a altas horas de la noche."; ], has luz escenario; Object portal "Interior de tu portal" with irrelevante 'puerta' 'portal' 'escaleras' 'escalera' 'calle', descripcion "El interior del portal de tu edificio. Afuera aguarda la calle, desierta en la madrugada.", volumen $2000, afuera lacalle, arriba [; cambiavol(escaleras1.volumen); return escaleras1; ], has escenario luz; Object escaleras1 "En las escaleras" with descripcion "Estás en las escaleras del primer piso.", volumen $2000, arriba [; give musicat ~oculto; cambiavol(escaleras2.volumen); return escaleras2; ], abajo [; cambiavol(portal.volumen); return portal; ], has luz; Object escaleras2 "En las escaleras" with descripcion "Estás en las escaleras del segundo piso.", volumen $4000, arriba [; cambiavol(escaleras3.volumen); return escaleras3; ], abajo [; give musicat oculto; cambiavol(escaleras1.volumen); return escaleras1; ], has luz; Object escaleras3 "En las escaleras" with descripcion "Estás en las escaleras del tercer piso, donde está tu apartamento.", volumen $8000, antes[; ], adentro [; if(ventana has abierto)cambiavol(habitacion.volumen); else cambiavol(escaleras2.volumen); return habitacion;], arriba [; cambiavol(escaleras4.volumen); return escaleras4; ], abajo [; cambiavol(escaleras2.volumen); return escaleras2; ], has luz; Object escaleras4 "En las escaleras" with descripcion [; print "Estás en las escaleras del cuarto piso."; if(minicadena has general) ".^Una música ensordecedora llega del otro lado de la puerta del apartamento de tu vecino."; "."; ], volumen $C000, antes[; Subir: "No hay más pisos"; ], abajo [; cambiavol(escaleras3.volumen); return escaleras3; ], has luz; Object habvecino "La habitación del vecino." with irrelevante 'ventana' 'cama' 'ventanas' 'pared' 'paredes' 'puerta' 'salida' 'habitacion' 'habitaciones' 'dormitorio' 'cuarto' 'salon', with descripcion "La habitación del vecino está prácticamente vacia, el equipo de música ocupa un lugar preferente en un espacio, por lo demás, despersonalizado.", volumen $10000, antes[; SALIDAS: "Salidas: afuera."; ], afuera [; if(minicadena has general)"¿Te vas a ir dejando la música puesta?.^ ¿Entonces para qué te has molestado en llegar hasta aquí?."; if(disco in yo){print "sales, cerrando la puerta con práctico y cauto sigilo...^"; pararreloj(bater); return escaleras4;} else "No debes irte de aquí sin asegurarte de que el vecino no volverá a poner la música"; ], has luz; ! ########################################### ! ########################################### ! OBJETOS VARIADOS ! ########################################### ! ########################################### object coches "coches" lacalle with nombre 'coches' 'vehiculos' 'bugas', adjetivos 'coche' 'coches' 'vehiculos', descripcion [; print "Como está muy mal aparcar, no hay una sola plaza libre. Los vehículos se amontonan a lo largo de las aceras, brillantes cadáveres andandes.^"; if(minicadena has general && coche hasnt general) {move coche to lacalle; give coche general; "Oh, pero que ves, si aquí está el coche de tu vecino del Cuarto!!!.";} if(minicadena has general)"Entre los coches reconoces el Peugeot Blanco de tu vecino del Cuarto."; else rtrue; ], has escenario oculto nombreplural; object coche "coche de tu vecino." limbo with nombre 'blanco' 'coche' 'vehiculo' 'buga' 'puerta' 'puertas' 'parachoques' 'tu' 'vecino' 'cuarto', adjetivos 'coche' 'peugeot' 'vehiculo' 'buga', descripcion "Es un Peugeot 205 Blanco de segunda mano, matricula TO-0000-O, curioso. Sin duda tendrá varios años y otras tantas estancias en talleres. Detrás lleva algunas pegatinas Acid.", antes[; Abrir: "Vaya!, las puertas del coche de tu vecino del cuarto están abiertas."; Cerrar: "Pasando de cerrar las puertas"; atacar: "Tampoco hay que ser tan radical."; empujar: "No lo podrías mover, tiene un coche delante y otro detrás, muy pegados, parachoques contra parachoques. A ver como se las ingenia para sacarlo mañana."; aumentar:<>; Meterse, subir:print "El muy tonto se ha dejado las puertas abiertas, como si no hubiera chorizos en el barrio, se va a enterar...^"; JugadorA(interiorcoche,2); rtrue; ], has escenario oculto puerta abierto transparente valepuntos; object cama "cama" habitacion with nombre 'tu' 'mi', adjetivos 'cama' 'piltra', descripcion [; if(minicadena hasnt general)"Tu tranquila y apacible cama."; else "La cama se mueve de aquí para allá, con pequeños brincos producidos por las vibraciones de la habitación ante la potencia de la música bakalao que está poniendo el vecino de arriba."; ], antes[; Dormir: <>; coger: <>; Meterse: if (minicadena has general) "No podrás dormir con esa música infernal sonando; además, la cama no para de moverse, chocando de una pared a otra."; else {if(disco has movido){FINAL();rtrue;} else give minicadena general; print "Te acuestas en la cama y empiezas a conciliar un agradable sueño...^"; EsperarTecla(); print "...cuando de repente...^"; EsperarTecla(); !ActivarSonidosSub(); if(musik==0)Musica(Tune1, habitacion.volumen); "...una música infernal empieza a sonar a través del patio, e inconscientemente te levantas de un respingo."; } ], has escenario soporte transparente femenino; object patio "patio" habitacion with nombre 'patio', adejativos 'patio' 'ventana' 'vecino', descripcion "", antes[; examinar, BuscarEn:if(minicadena has general)"Observas con odio la única ventana que permanece encendida, a parte de la tuya, en el patio: la de tu vecino del cuarto, que es precisamente de donde procede la música."; else if(disco has movido) <>; else "Todo está en calma y oscuridad en el patio. La única ventana que permanece encendida, a parte de la tuya, es la de tu vecino del Cuarto."; ], has masculino escenario; object ventanavecino "ventana del vecino" habitacion with nombre 'ventana' 'ventanas' 'luz' 'cuarto' 'arriba' 'cristal' 'cristales', adjetivos 'vecino', descripcion "", antes[; examinar:if(disco has movido) "Todas las ventanas del patio están apagadas. Todo está en calma de nuevo."; else "Observas en el patio la luz encendida de la ventana del vecino de arriba"; default:"Desde aquí no podrás."; ], has luz escenario oculto; object ventana "ventana" habitacion with nombre 'ventana' 'ventanas' 'cristal' 'cristales', adjetivos 'ventana' 'ventanas', descripcion [; if((ventana has abierto) && (minicadena has general)) "A través de las ventanas abiertas llega la música infernal del patio."; if(ventana has abierto)"Las ventanas están abiertas, es verano y conviene que entre algo de fresquito."; if(minicadena has general) "Pese a que las ventanas están cerradas, esa música horrible que llega del patio sigue atormentando mis oidos."; "Las ventanas están cerradas."; ], antes [; Atacar: "¡No pretenderás romper tus propias ventanas!."; Meterse: <>; Salir: "Sería un suicidio."; Abrir: if(ventana has abierto)"Las ventanas ya están abiertas."; else give ventana abierto; !if ((minicadena.volumen)&&(minicadena.cantidad)) { minicadena.volumen=habitacion.volumen; EfectosSonoros.Volumen(minicadena.volumen);!} "Abres las ventanas."; Cerrar: if(ventana hasnt abierto)"Las ventanas ya están cerradas."; else give ventana ~abierto; !if ((minicadena.volumen)&&(minicadena.cantidad)) { minicadena.volumen=escaleras2.volumen; EfectosSonoros.Volumen(minicadena.volumen);!} "Cierras las ventanas."; BuscarEn:<>; ], has escenario abierto femenino; ! Y la maquina de discos. Observa como usamos la propiedad "cantidad" ! para almacenar la música que está sonando. Esto lo usamos para ! modificar la propiedad "describe" que es la que usa InformATE ! para listar este objeto en las descripciones de localidad Object minicadena "minicadena" habvecino with nombre 'sony' 'musical' 'volumen' 'rueda' 'control' 'controles' 'compartimento', adjetivos 'minicadena' 'cadena' 'equipo' 'musica' 'altavoces' 'bafles' 'radio' 'aparato' 'lector' 'cd' 'cds', cantidad 0, ! Numero de la canción que está sonando volumen $10000, ! Volumen a que suena describir [; if(minicadena has general) "La Minicadena está encendida emitiendo la horrible música Máquina a todo volumen."; else "La Minicadena está apagada."; ], descripcion [; print "Una minicadena reproductora de Cds equipada con dos buenos bafles de 175 W. cada uno."; if(minicadena has general)". El aparato suena a todo volumen."; if(minicadena hasnt general && disco in minicadena) ". Parece haber un CD dentro del compartimento."; else "."; ], reaccionar_antes[; ponersobre, meter: if(uno==disco) {move disco to minicadena; "Introduces el CD en la minicadena.";} else "Eso no cabe en el compartimento de CDs de la cadena."; ], antes [; abrir:if(disco in minicadena) "Prueba a sacar el CD."; else "No hay nada dentro del compartimento de CD de la cadena."; cerrar:"No es necesario. El compartimento de CD de la cadena se cerrará solo al meter un CD."; activar, Encender: if(~~(disco in minicadena))"La minicadena no sonará si no tiene un CD dentro."; if(minicadena has general) "Ya estaba encendida."; else Musica(Tune1, self.volumen); give minicadena general; "Enciendes el equipo de música. La música vuelve a sonar."; Apagar: if(minicadena hasnt general) "Ya estaba apagada."; else Musica(0, self.volumen); give minicadena ~general; "Apagas el equipo de música."; aumentar: if (minicadena has general) "La rueda del volumen está estropeada, la música suena al máximo volumen."; else <>; Girar, disminuir: if(minicadena has general) "La rueda del volumen está estropeada, no se puede bajar la música."; else "Giras la rueda de volumen de la cadena."; empujar: "No me sevirá de nada mover la cadena"; coger: "El equipo de música pesa demasiado."; atacar: if (minicadena has general && otro == 0)"Pateas con rabia la cadena, pero ésta sigue sonando,impertérrita."; else "El caso es que debe costar un pastorro, por esta vez decides perdonarle la vida a la cadena."; ], has estatico recipiente transparente femenino valepuntos; object enchufe "enchufe" habvecino with nombre 'enchufe' 'conexion' 'electricidad' 'energia', antes[; default: "No hay ningún enchufe por aquí, la cadena debe funcionar por energía atómica o algo por el estilo."; ], has escenario oculto; object disco "Disco Rallada Total" minicadena with nombre 'bakalao' 'rallada' 'total' 'mortal' 'cd' 'cds', adjetivos 'disco' 'compact' 'disc' 'compacto' 'cd', articulo "el", descripcion "", antes[; Examinar:if(disco in minicadena)"El CD está dentro de la Minicadena"; else print "El CD Rallada Total 2002.^ Temas:^"; print (v)"-Rallada total Original (by DJ Maluva) 8:30^ -Rallada total remix (by DJ Tralla) 12:34^ -Rallada total Extended (by DJ Maruja) 18:23^ -Rallada Total Ibiza Sesion (by DJ Ojeras) 5:30^ -Rallada Total Formentera Sesion (by DJ Pacopepe) 1:30^ -Rallada Total-Santa Maria Stella Do Dia a Capella Jam (by DJ Padre Prior) 3:20^ -Rallada Mortal (by Dj Aventurero) 6:66^ -Rallada Total Opereta (Pavarotti & friends) 3:10 ^ -Rallada Total Unemplugged (by DJ Pobre) 2:20^ -Rallada Total 'Noches Habaneras' remix (by DJ Maracas & the Machins) 4:20^ ^Grabado en los estudios Aguamarga de Almería entre Julio del 2002 y Julio del 2002. ^(c) 2002. "; " "; Atacar: "Tampoco hay que pasarse."; Coger:if(disco in minicadena)<>; Sacar:if(otro ==minicadena){ if(disco in minicadena) {move disco to yo; print "Extraes el CD de la minicadena."; if(minicadena has general){ give minicadena ~general; Musica(0, minicadena.volumen); "La Música deja de sonar y el equipo se apaga automáticamente."; }else " "; }else "No hay ningun disco en la minicadena";} ], ; Object bater "el bater" habvecino with nombre 'puerta' 'cuarto' 'vecino' 'traves' 'lado', adjetivos 'bano' 'aseo' 'bater' 'wc' 'w.c.' 'vecino', articulo "el", describir "", descripcion "Parece que el vecino está dentro del báter, mejor será arreglar el asunto antes de que salga.", tiempo_restante 0, tiempo_agotado[; pararreloj(self); arrancarreloj(self,5); if(minicadena hasnt general) switch (random (3)) { 1: "^Escuchas unas pedorretas procedentes del baño."; 2: print "^A través de la puerta del baño llega una maldición:^"; print (v) "-'¡No fastidies que ha petado la cadena!'"; ".^"; 3: print "^Del otro lado de la puerta del baño llega un grito:^"; print (v)"-'¡maldita cadena!,¡¿por qué no suena?!"; ".^"; } ], antes[; llamar: if(minicadena has general)"Aporreas la puerta del baño pero no recibes respuesta, seguramente no te oiga"; else borrarpantalla(); print "^Aporreas la puerta del baño "; muertesubita();rtrue; meterse, abrir, ir: "Mejor no entrar ahí."; atacar, empujar :"No seas maleducado. Pese a que hace un rato deseabas matar al vecino, ahora que eres consciente de que puedes resolver el asunto de una forma limpia, no te vas a manchar las manos."; escuchar: if(self.tiempo_restante>0)"Pegas la oreja a la puerta del bater y escuchas algunas pedorretas."; else {if(minicadena has general) "Con la música sonando de fondo no logras escuchar nada.";else" ";} responder: if(minicadena has general)"Con el ruido de la música no te escuchas ni a ti mismo."; else "No te molestes en hablar con el vecino, esto se puede arreglar sin dejar huella de tu paso."; ], vida[; default: if(minicadena has general)"No crees que tu voz se escuche con la música de fondo."; else "No merece la pena hablar con el vecino."; ], ordenes[; default: <>; ], has oculto hablable estatico; !################################## !################################## ! ! OBJETOS MULTILOCALIZADOS ! !################################## !################################## object luze "luz" with nombre 'luz' 'luces' 'bombilla' 'interruptor', descripcion "", antes[; examinar:"No tiene mucho misterio."; apagar:if(localizacion==habitacion)"Apagaré las luces en cuanto me meta en la cama"; default: "No es necesario hacer eso."; ], esta_en [;if(yo in localizacion ) rtrue;], has luz femenino escenario; Object yo "ti mismo" habitacion with nombre 'aventurero' 'tu' 'jugador' 'persona' 'humano' 'hombre', with descripcion [;print "Estás muy cansado y tienes muchas ganas de dormir.^"; if(pijama has puesto && pijama in yo) "Llevas puesto tu pijama amarillo."; else "Estás en bolas."; ], has animado transparente; object llaves "llaves" limbo !interiorcoche with nombre_fp 'llaves', nombre_f 'llave', nombre_mp 'llavero' 'manojo', adejetivos 'llave' 'llaves' 'llavero' 'manojo' 'vecino', articulo "unas", descripcion "Un manojo de llaves y no son llaves de coche.", genero G_FEMENINO + G_PLURAL, ; object pijama "pijama amarillo fosforito" yo with nombre 'pijama' 'amarillo' 'fosforito', adjetivos 'pijama', articulo "tu", descripcion"Es tu pijama preferido,¿quien dijo que el amarillo es de horteras?", has masculino prenda puesto; Object orejas "tus oidos" with nombre_fp 'oreja' 'orejas', nombre_mp 'oidos', articulo "", descripcion "", antes[; examinar: "Una oreja a cada lado."; Cerrar:if(minicadena has general)"Aunque te tapes los oidos no servirá de nada. La música trallera penetra por todos tus poros."; else "¿para qué querrías taparte los oidos? Todo está en calma."; default: "No necesitas hacer eso con tus oidos"; ], esta_en [;if(yo in localizacion ) rtrue;], genero G_MASCULINO + G_PLURAL, has oculto estatico escenario; ! ############################## ! VECINO ! ############################## ! ############################## ! ############################## ! ############################## ! ############################## ! ############################## object vecino "vecino" with nombre 'joputa' 'cabron' 'puta' 'hijo' 'vecino', adjetivos 'vecino' 'vecinos' 'arriba' 'cuarto', descripcion "", antes[; Examinar, escuchar: if (minicadena has general) "El muy cabrón se lo debe estar pasando en grande con la música a todo volumen sin pensar en el resto de los vecinos."; else "No veo a ningúno de mis vecinos por aquí."; coger, atacar, llamar: if(minicadena has general) "No lo tengo al alcance, pero como pille al vecino del Cuarto, lo mato.";else "No puedes."; default: "No veo a ninguno de mis vecinos por aquí."; ], esta_en [;if(yo in localizacion) rtrue;], has estatico oculto; Object musicat "musica trallera de fondo" with nombre_f 'musica' 'maquina' 'core' 'trallera' 'horrible' 'horripilante' 'canera' 'chunda' 'bakalao', nombre_m 'ruido', adjetivos 'musica' 'tralla' 'ruido' 'traya' 'chundachunda' 'chunda', !descripcion "", describir [; if(minicadena has general)"Tus nervios van a estallar de un momento a otro como no pare de sonar la música 'chundachunda'."; else rtrue; ], antes[; !if(minicadena has general) give musicat ~oculto; else give musicat oculto; examinar, escuchar: if (minicadena has general) "Es pura tralla y está puesta al máximo volumen. Proviene del vecino del Cuarto."; else "No escuchas musica. Todo está en calma."; coger: if(minicadena has general) "Más que coger la música estás deseando coger al joputa de tu vecino"; else "Menuda burrada que acabas de soltar."; apagar, quitar: if(localizacion==habvecino)<>; activar, encender: if(localizacion==habvecino)<>; Aumentar: if(localizacion==habvecino)<>; Disminuir:if(localizacion==habvecino) <>; default:"No podrás hacer eso."; ], esta_en [;if(yo in localizacion) rtrue;], genero G_FEMENINO, has estatico; object puertavecinos "puerta" with nombre 'vecino' 'vecinos' 'cuarto' 'segundo' 'puerta' 'timbre' 'primero' 'apartamento' 'cerradura', adjetivos 'puerta' 'timbre', descripcion "", antes[; examinar: "Observas en este piso una única puerta de madera, con un timbre al lado."; llamar, empujar, retorcer:"Nadie responde al otro lado de la puerta."; Abrir:"La puerta está cerrada."; dejar, atacar:"Forcejeas intentando abatir la puerta pero sin éxito."; QuitarCerrojo: if(otro==llaves && disco has movido)"No tienes por qué volver ahi, ya le has quitado al vecino su disco favorito. En estos momentos estará atravesando una silenciosa depresión, tratando de explicarse cómo ha desaparecido el CD."; if(otro==llaves &&llaves in yo){Borrarpantalla();print "^Una de las llaves encaja perfectamente en la cerradura. Abres la puerta con un sigilo estúpido, innecesario, y accedes al interior.^ Ha llegado la hora..."; EsperarTecla(); cambiavol(habvecino.volumen); glk($0086, 3); ! set_style print"^ LA HORA DEL COMBATE FINAL!!!^"; EsperarTecla(); move vecino to limbo; vecino.esta_en=limbo; give musicat oculto; ArrancarReloj (bater,5); glk($0086, 0); ! set_style print"Lo cierto es que el confrontamiento se vuelve un poco frustrante, ya que nada más entrar descubres que el vecino se encuentra en esos momentos dentro del báter, lo cual te deja via libre para acceder a la Minicadena. Lo piensas mejor y dejas a un lado tus deseos asesinos contra su persona."; JugadorA(habvecino,1);rtrue;} Abrir: "La puerta está cerrada."; Meterse:"La puerta del vecino está cerrada"; default: "No insistas."; ], esta_en escaleras4 escaleras2 escaleras1, has escenario femenino; object telefonillo "telefonillo" with nombre_m 'telefonillo' 'portero' 'por' 'con' 'vecino' 'cuarto' 'arriba', nombre_mp 'telefonillos', adjetivos 'telefonillo' 'automatico' 'interfono' 'telefonillos', descripcion"", antes [; Examinar: "Los telefonillos están junto al portal."; atacar, coger : "No logras arrancar el telefonillo"; default: if(telefonillo hasnt general){ give telefonillo general; "Vaya, ahora recuerdas que el telefonillo lleva estropeado desde que te fuiste. Aun no lo han arreglado.";} else "El telefonillo está estropeado."; ], esta_en lacalle portal, genero G_MASCULINO, has estatico hablable animado oculto; object varios "eso" with nombre 'wuwuwu', adjetivos 'pared' 'paredes' 'puerta' 'escalon' 'piso' 'escalera' 'escaleras' 'apartamento' 'casa', articulo"", antes[; examinar: "No te preocupes por esas cosas."; default: "No merece la pena."; ], esta_en [;if(yo in localizacion ) rtrue;], has luz femenino escenario; !#######################################3 !#######################################3 ! ! FUNCIONES Y DEMAS ! !#######################################3 !#######################################3 !## ESTILOS GLK [ InitGlkWindow ventana; switch (ventana) { GG_MAINWIN_ROCK: !Estilo personal (aqui usado para dialogos) glk_stylehint_set(wintype_TextBuffer, style_User1, stylehint_BackColor, $000000); glk_stylehint_set(wintype_TextBuffer, style_User1, stylehint_Proportional, 0); glk_stylehint_set(wintype_TextBuffer, style_User1, stylehint_TextColor, $FF6633); !Estilo normal glk_stylehint_set(wintype_TextBuffer, style_Normal, stylehint_BackColor, $010002); glk_stylehint_set(wintype_TextBuffer, style_Normal, stylehint_Proportional, 0); glk_stylehint_set(wintype_TextBuffer, style_Normal, stylehint_TextColor, $FFFF00); !estilo del HEADER titulo del juego glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_BackColor, $010002); glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_TextColor, $FFCC11); !estilo del subheader (Nombre de las localidades) glk_stylehint_set(wintype_TextBuffer, style_Subheader, stylehint_BackColor, $010002); glk_stylehint_set(wintype_TextBuffer, style_Subheader, stylehint_TextColor, $EEFF22); !estilo del input glk_stylehint_set(wintype_TextBuffer, style_Input, stylehint_BackColor, $010002); glk_stylehint_set(wintype_TextBuffer, style_Input, stylehint_TextColor, $22FF44); } rfalse; ]; [curiosidades; Borrarpantalla(); print "Asi que curioso?...^"; Esperartecla(); Borrarpantalla(); print " ^Este es el primer juego que hago con Informate asi que no os extrañeis si en algún momento ha aflorado algún error, la aventura se sostiene por un hilo de araña bituminosa, caldo de cultivo para iteracciones inesperadas entre los objetos.^^ Podría haber estado más currada; faltan muchas descripciones de decorado, pero se trata de una Nano y mi debut en Glulxe, de modo que he decidido no entretenerme más en ella para centrarme en otro proyecto más complejo.^"; "Por cierto:^ ¿Os ha gustado el disco de Rallada Total?^ Lo podreis encontrar en los mejores puntos de venta dentro de ciertos meses. (si, no os preocupeis, también incluirá un bonus track con el 'Para Elisa' de Beethoven con el vecino de abajo al piano)XD.^^ Mis agradecimientos a todos los que me han dado los primeros auxilios con Informate. No los cito para evitar omitir alguno.^^ Fin de la transmisión. "; ]; !#######################################3 !#######################################3 ! ! inicio ! !#######################################3 !#######################################3 [ Inicializar; EfectosSonoros.InicializarCanales(); cambiarJugador(yo); !move llaves to yo; localizacion = habitacion; !localizacion = escaleras4; move llaves to interiorcoche; parser_listo=0; modomirar=2; modo_notificar = 0; ! Que no avise de la suma de puntos !cambia color del background !glk_window_set_background_color (0,0); !glk($00EB, 0); ! set_style portada(); ]; ! ### REDEFINIENDO LA LINEA DE ESTADO [ DibujarLineaEstado; ! Si no hay linea de estado, retornamos sin hacer nada más if (gg_statuswin == 0) return; ! 1) Cambiamos de ventana (la línea de estado es en realidad una ! ventana) glk_set_window(gg_statuswin); ! 2) La borramos glk_window_clear(gg_statuswin); gg_statuswin=0; ! 3) Posicionamos el cursor en la sexta columna (la primera ! columna tiene el número cero) ! glk_window_move_cursor(gg_statuswin, 5, 0); ! 4) Imprimimos el texto deseado, en este caso el tanto por ciento ! de descarga ! print "INSOMNIO DE UNA NOCHE DE VERANO"; ! 5) Finalmente, una vez impreso el texto, volvemos a la ventana ! principal para que el juego pueda mostrar en ella sus mensajes. glk_set_window(gg_mainwin); ]; ! La función de formato v, que se usa con print (v) "texto de prueba", ! recibe el texto a imprimir. Simplemente llama a Glk para poner el ! estilo User1 (cuyas características se han fijado en la función ! InitGlkWindow), imprime el texto, y vuelve al estilo normal [ v texto; glk_set_style(style_User1); print (string) texto; glk_set_style(style_Normal); ]; ! Esta función se define vacía para eliminar un punto y aparte que ! de lo contrario aparecería al final del juego. [ ImprimirRango; rtrue; ]; [portada; BorrarPantalla(); glk($0086, 4); ! set_style print "^^^^^ ATENCIÓN:^Para jugar a esta aventura necesitas encender los altavoces del ordenador y subir bastante el volumen.^ Es fundamental para la ambientación.^"; EsperarTecla(); glk($0086, 0); ! set_style borrarpantalla(); print "^^^^^^^^^Llegaste por fin a tu casa después del largo viaje.^ Tu querida cama te esperaba con las sábanas abiertas^ y la tranquila noche prometía un reparador descanso.^"; print "^"; EsperarTecla(); borrarpantalla(); "^^^"; ]; [muertesubita; print "y, casi instantáneamente un rostro plano, como el culo de una plancha, rapado y con larga perilla asoma con curiosidad.^"; print (v) "^-¡Anda!, ¡un ladrón!."; print "^^El sujeto desaparece por unos segundos pero rápidamente reaparece.^ Esta vez observas como a la altura del pomo de la puerta empieza a emerger el extremo de un bate de beisbol, y una sonrisa psicótica se dibuja en la cara del vecino."; EsperarTecla(); print "^^La puerta se termina de abrir entonces, de golpe, y el mamotreto, vestido con una camiseta blanca, unos calzoncillos azulgranas y calcetines bicolores, arremete con ira contra ti, a golpe de bate...^"; EsperarTecla(); banderafin=3; ]; [MensajeMuerte; switch(banderafin) { 3: glk($0086, 3);print " R. I. P.^ ";glk($0086, 0);rtrue; 4: glk($0086, 3);print " F I N^ ";glk($0086, 0);banderafin=2;rtrue; !Musica(0, escaleras1.volumen); } ]; [FINAL; print"Te acuestas en la cama y ya, más relajado, empiezas a conciliar un agradable sueño...^"; EsperarTecla(); print "...cuando de repente...^"; EsperarTecla(); !ActivarSonidosSub(); minicadena.volumen=habitacion.volumen; Musica(Tune2, minicadena.volumen); print "...¡Maldición!, corres de un pingo hasta la ventana y te asomas al patio: La luz del segundo está encendida y tu vecino de abajo, que cursa primero en el conservatorio, ha decidido aprovechar el insomnio del calor veraniego para practicar unas tonadillas al piano.^^"; EsperarTecla(); print "Definitivamente: agarras las maletas, que afortunadamente no habías desecho aún al volver del viaje, y te plantas en medio de la solitaria calle arrastrándote desesperadamente hacia la cercana estación de ferrocarril.^"; EsperarTecla(); BorrarPantalla(); minicadena.volumen=minicadena.volumen/5*4; cambiavol(minicadena.volumen); print"La música sigue sonando en tu cabeza, en tu imaginación, será el eco que tarda en disiparse, pero las notas se aposentan en tus neuronas y las luces de las calles parecen tililar al ritmo de la música acompañando tus compases de cuatro pasos en 'stacatto' con un pequeño silencio al final de cada serie.^ De esta pintoresca 'maniera' el andante llega a la estación, donde tan solo hay algo de personal de servicio.^"; minicadena.volumen=minicadena.volumen/3*2; cambiavol(minicadena.volumen); print (v) "-Por favor: ¿Hay A.V.E.s nocturnos?."; print"^^ La señora de la limpieza te mira sorprendida. Es para sorprenderse que un tipo cargado de maletas y "; if(pijama has puesto)print"vestido con un pijama amarillo ";else print "en pelotas "; print"te pregunte sobre aves nocturnas en la entrada de la estación a las 4:00 de la madrugada...^^ Trás un instante de sorpresa la señora responde:^"; print (v) "-¿Es que tengo cara de 'pajaróloga'?.^^"; EsperarTecla(); minicadena.volumen=minicadena.volumen/3*2; cambiavol(minicadena.volumen); BorrarPantalla(); glk($0086, 4); print " ^^^ Continuará en: La Venganza del Vecino de Arriba..."; glk($0086, 0);print " ^ "; EsperarTecla(); banderafin=4; ]; [ayudaSub; "_________________________________________________________^ AYUDA:^ M: Redescribe la localidad^ EX: examinar^ I: Inventario^ X: Salidas^ LOAD/SAVE para recuperar/guardar tu posición en el juego^ SONIDO OFF: Elimina el sonido (no se puede volver a recuperar)^ Otros verbos útiles:^ COGER DEJAR PONER PONERTE GOLPEAR LLAMAR^ EMPUJAR ABRIR DAR COMER ENCENDER LANZAR^ ...^ _________________________________________________________ "; ]; [bailarsub; if(minicadena hasnt general)"Estás muy cansado para bailar ahora.";else <>; ]; [jarelSub; "^(c) Jarel 2002. genhag@@64yahoo.com^"; ]; [levantaSub; "No ayudará a tus propósitos levantar eso."; ]; [ayudaleSub; "Ahora no estás como para ayudar a nadie."; ]; [ReirSub; "Te ries aunque no sabes muy bien de qué."; ]; [xyzzySub; "Aquí no funcionarán las palabras mágicas."; ]; [LloraSub; "Lloras un poquito."; ]; [SonarSub; "Para soñar primero hay que dormir."; ]; [chillarSub; if(minicadena hasnt general &&localizacion==habvecino){ BorrarPantalla(); print "Chillas con todas tus ganas "; muertesubita();rtrue;} else "Chillas con todas tus fuerzas."; ]; [RecordarSub; "No recuerdas mucho."; ]; [mojarSub; "No necesitas mojar nada."; ]; [LevantaConSub; "Aunque utilices ", (el) otro, " no servirá de mucho levantar ", (el) uno, "."; ]; [LlamarSub; "¿A quién quieres llamar?"; ]; [arrodillarSub; "Te echas en el suelo."; ]; [IntentarSub; "No creo que puedas hacer eso.."; ]; [activarSub; "Eso no se puede encender."; ]; [asomarsub; "Como no digas a dónde te quieres asomar..."; ]; [aumentarsub; "Eso no es viable."; ]; [disminuirsub; "No es viable."; ]; [levantartesub; "Ya estás levantado."; ]; [sonidosub; "Usa: SONIDO OFF para eliminar el sonido"; ]; [sonidonosub; "EL sonido está desasctivado. Para jugar con sonido de nuevo deberás reiniciar."; ]; [especificarsub; "Cómo no especifiques más..."; ]; Include "Gramatica.h"; ! !Con esto pretendo evitar que se intenten coger objetos de escenario ! Verb 'entrega' 'dona' 'otorga' 'cede' * noun 'a//' creature -> Dar; ! El definir verb 'entrega' antes que extend 'da' influye... Extend 'da' first * estatico -> Intentar * escenario -> Intentar; Extend 'ponte' first * estatico -> Intentar * escenario -> Intentar; Extend 'lanza' first * estatico -> Intentar * escenario -> Intentar; Extend 'muestra' first * estatico -> Intentar * escenario -> Intentar; Extend 'come' first * estatico -> Intentar * escenario -> Intentar; ! Esto es para que el parsers no pille el ultimo objeto referenciado o el que le venga en gana ! Extend 'coge' first * ->especificar; Extend 'examina' first * ->especificar; Extend 'quita' first * ->especificar; Extend 'deja' first * ->especificar; ! Verb 'ayuda' 'instrucciones' * -> ayuda * topic ->ayudale; Verb 'xyzzy' * ->xyzzy; Verb 'llora' * -> Llora; verb 'introduce' * ->ponersobre; VerboIrregular "introducir" with imperativo 'introduce'; Verb 'jarel' 'creditos' 'autor' * -> Jarel; Verb 'levanta' 'alza' 'aupa' * noun -> levanta * noun 'con' held -> levantaCon * noun 'usando' held -> levantaCon * noun 'haciendo' 'palanca' 'con' held -> levantaCon * noun 'haciendo' 'fuerza' 'con' held -> levantaCon; Verb 'recuerda' * -> Recordar * 'algo//' 'alguna//' 'cosa//' 'a'/'por'/'sobre'/'acerca' topic -> Recordar * topic -> Recordar; VerboIrregular "recordar" with imperativo 'recuerda'; Verb 'para' 'deten' * ->apagar * noun ->apagar * noun 'de//' noun ->apagar; VerboIrregular "detener" with imperativo 'deten'; verb 'extrae' 'expulsa' * ->sacar * noun 'de//' recipiente ->Sacar; Verb 'rie' * -> Reir * 'algo//' 'alguna//' 'cosa//' 'a'/'por'/'sobre'/'acerca' topic -> Reir * topic -> Reir; VerboIrregular "reir" with imperativo 'rie'; Verb 'suena' * -> Sonar * 'algo//' 'alguna//' 'cosa//' 'a'/'por'/'sobre'/'acerca' topic -> Sonar * topic -> Sonar; VerboIrregular "sonar" with imperativo 'suena'; Verb 'manga' 'pilla' 'roba' 'trinca' * noun -> Coger; verb 'traspasa' 'transpasa' 'atravesa' * noun -> Entrar; Verb 'moja' * -> mojar * noun -> mojar; Verb 'llama' 'aporrea' * noun ->llamar * 'a//' noun -> llamar * noun 'con' held ->llamar *noun 'a//' creature -> Llamar; verb 'pega' * noun 'a//' creature -> Atacar; Extend only 'enciende' first * noun -> activar; Extend only 'levantate' 'levantarse' 'levantarte' first * -> levantarte; verb 'aumenta' 'eleva' * -> aumentar * noun ->aumentar; verb 'disminuye' * -> disminuir * noun ->disminuir; VerboIrregular "disminuir" with imperativo 'disminuye'; Extend 'sube' first * 'a//' valepuntos -> aumentar * valepuntos -> aumentar; Extend 'baja' first * 'de//' valepuntos -> disminuir * valepuntos -> disminuir; Extend only 'grita' first * -> chillar * noun -> chillar * 'a//' creature -> responder; verb 'acuestate' * -> Dormir * 'en//' noun -> Dormir * noun -> Dormir; VerboIrregular "acostarte" with imperativo 'acuestate'; verb 'taparte' 'tapate' * noun -> cerrar; verb 'derriba' * noun -> Atacar; Verb 'chilla' * ->chillar * noun -> chillar * 'a//' creature -> responder; verb 'desviste' 'desvistete' 'desvestirte' 'desvestirse' * noun -> Desvestir; verb 'tumbarte' 'tumbate' 'arrodillarte' 'agacharte' 'agachate' 'postrarte' 'postrate' * ->arrodillar; verb 'maricon' 'hijo' 'gilipollas' 'imbecil' 'gilipuertas' 'egoista' 'egocentrico' * -> Soso; verb 'baila' 'danza' * -> bailar * noun -> bailar * 'con' noun -> bailar; verb 'asomate' 'asoma' 'otea' 'asomarte' 'asomarse' * -> asomar * noun ->BuscarEn * 'a//' noun ->BuscarEn * 'por' noun ->BuscarEn; VerboIrregular "sonar" with imperativo 'suena'; VerboIrregular "vestir" with imperativo 'viste'; VerboIrregular "desvestir" with imperativo 'desviste'; Extend 'cava' last * 'bajo' noun -> Excavar * 'bajo' noun 'con' held -> Excavar * 'bajo' noun 'usando' held -> Excavar * 'bajo' noun 'utilizando' held -> Excavar; Extend 'examina'last * 'por' noun ->BuscarEn * 'atraves' 'de' noun -> BuscarEn * 'a' 'traves' 'de' noun -> BuscarEn; Extend 'mira'last * 'atraves' 'de' noun -> BuscarEn * 'a' 'traves' 'de' noun -> BuscarEn; Extend 'golpea' last * noun 'con' held -> atacar; Verb 'sonido' * 'on' -> sonidono * 'off' -> DesactivarSonidos * ->sonido; ![ActivarSonidosSub; ! EfectosSonoros.Volumen(minicadena.volumen); ! musik=0; ! "[Sonido activado]"; !]; [ DesactivarSonidosSub; EfectosSonoros.Volumen(0); musik=1; "[Sonido desactivado]"; ]; [cambiavol vol; if(musik==1)rtrue; minicadena.volumen=vol; EfectosSonoros.Volumen(minicadena.volumen); ];