// // Astral 1.3 // (c)Cérigo Urbatain // ruberalbert@bigfoot.com // // Todo el juego está construido sobre la librería aventura modelo de VS v2.01 (22.03.2000) hecha // por JSJ... He hecho cambios profundos a lo largo de todo el código. // El resultado debe ser la mejora de la librería modelo, para un futura revisión. // ********** CONSTANTES ********** Declare(CR) CR:="\[R]" Declare(TRUE) TRUE:=1 Declare(FALSE) FALSE:=0 declare(tesoros) declare(prohibidos) tesoros:=ARRAY("ALFOMBRA","PEPITA","JARRON","COJIN","BARRA","ESMERALDA","DIAMANTE","PERLA","TRIDENTE","HUEVO") prohibidos:=ARRAY("COGER","DEJAR","METER","SACAR","ABRIR","CERRAR","PONER","QUITAR","ENCENDER","APAGAR","LANZAR","GOLPEAR","ATAR","DESATAR","SABOREAR","OLER","TOCAR","CORTAR","MOVER","MATAR","BEBER","COMER","SALTAR","BESAR","DAR","BLANDIR") declare(articulos) articulos:=ARRAY("el","la","un","una","unos","unas") declare(heresville) heresville:=FALSE declare(muchacha) muchacha:=FALSE // cuando se ponga a TRUE es que ya ha pasado el golpea de efecto de la muchacha // porcentaje de acierto en una zona del cuerpo al golpear o atacar. declare(exito_cabeza) declare(exito_cuerpo) declare(exito_brazo) declare(exito_pierna) exito_cabeza:=50 exito_cuerpo:=80 exito_brazo:=90 exito_pierna:=95 // esto marca el porcentaje de daño que afecta a la vitalidad general. declare(porc_cabeza) declare(porc_cuerpo) declare(porc_brazo) declare(porc_pierna) porc_cabeza:=80 porc_cuerpo:=50 porc_brazo:=25 porc_pierna:=35 // cansancio, almacena el nivel de cansancio respecto de los mensajes que se imprimen. declare(cansancio) // lo uso para controlar que sólo se imprima los mensajes de status cuando cambien significativamente cansancio:=0 // niveles: nivel 0 - Fuerza óptima. // nivel 1 - un poco cansado. // nivel 2 - bastante cansado. // nivel 3 - completamente agotado. // nivel 4 - sin fuerza, sin poder moverse // Inicializar algunas cosillas, zombies, marabuntas, etc etc. Reciclar(1) Reciclar(2) Reciclar(3) reciclar(8) Generar(1) PSI[1].Localidad:="EXPLANADA1" PSI[1].lentitud:=3 PSI[1].turno:=2 PSI[1].vida_pierna_izq:=40 PSI[1].vida_brazo_dch:=30 PSI[1].direccion:=Array("ESTE","SUR") PSI[1].viene_de:="SUR" Generar(2) PSI[2].Localidad:="EXPLANADA4" PSI[2].lentitud:=3 PSI[2].turno:=4 PSI[2].vida_brazo_dch:=20 PSI[2].direccion:=Array("ESTE","NORTE","OESTE") PSI[2].viene_de:="SUR" Generar(3) PSI[3].Direccion:=Array("BAJAR","OESTE") PSI[3].vida_pierna_izq:=35 Generar(8) PSI[8].Direccion:=Array("BAJAR","SUR") PSI[8].turno:=10 declare(segundaoleada) segundaoleada:=FALSE declare(horasegundaoleada) horasegundaoleada:=Random(40,60) // cuando se llega a este turno, se añaden 2 zombies más declare(marabunta) marabunta:=FALSE declare(horamarabunta) horamarabunta:=Random(61,80) // La marabunta llega declare(turnomarabunta) // control de movimiento de la marabunta turnomarabunta:=2 declare(movmarabunta) movmarabunta:=0 // ********** CONFIGURACION ********** Declare(turnos) // turnos de juego turnos:=1 declare(puntos) puntos:=0 declare(secret) secret:=FALSE Declare(pant_info) // ventana de estado Declare(pant_grf) // ventana de gráficos Declare(musica_fondo) // para referenciar a la música de fondo (ver USR_MusicaFondo) Declare(carga_graba) carga_graba:=FALSE // esto impide cargar o grabar, pues he detectado un bug chungo en el sistema de carga. // de todas formas en este juego no afecta para nada el no poder salvar. Declare(tipo_letra) // ---------- tipo de letra normal tipo_letra:="\[Arial]\[10]" Declare(tipo_letra_info) // ---------- tipo de letra de barra de estado tipo_letra_info:="\[Times New Roman]\[10]" Declare(color_fondo) // ---------- color de fondo de ventana de texto color_fondo:="\[RGBF(000030)]" Declare(color_info) // ---------- color de fondo y texto de línea de estado color_info:="\[RGBF(FFFFFF)]\[RGB(000000)]" Declare(color_letra) // ---------- color de letra normal color_letra:="\[RGB(FFFFFF)]" Declare(dialogo_psi1) // ---------- se imprime antes de lo que dice el PSI Declare(dialogo_psi2) // ---------- se imprime después de lo que dice el PSI dialogo_psi1:="\[Courier New]\[10]\[RGB(00AACC)]---" dialogo_psi2:=" ---" Declare(hay_graficos) // ---------- indica si la aventura tiene gráficos hay_graficos:=FALSE Declare(hay_sonido) // ---------- indica si la aventura tiene sonido hay_sonido:=FALSE Declare(todapantalla) // ---------- indica si la ventana principal ocupará toda la pantalla todapantalla:=FALSE // si es TRUE se ignorarán 'tamx', 'tamy', 'posx', 'posy' Declare(hay_barra) // ---------- indica si habrá una barra destado hay_barra:=TRUE Declare(tamx) // ---------- ancho de la ventana Declare(tamy) // ---------- alto de la ventana Declare(posx) // ---------- posición X de la ventana Declare(posy) // ---------- posición Y de la ventana Declare(tamy_info) // ---------- altura de la ventana de estado Declare(tamy_grf) // ---------- altura de la ventana de gráficos tamx:=640 tamy:=420 posx:=10 posy:=10 tamy_info:=20 tamy_grf:=200 Declare(prompt) // ---------- prompt del input prompt:="¿Y ahora qué?.- " Declare(titulo) // ---------- título de la aventura (se muestra en el título de la ventana) titulo:="Astral" Declare(version) // ---------- versión de la aventura version:="1.3" // ********** Variables Globales **************** // ********** CODIGO DE INICIALIZACION ********** // estilo de la ventana principal If todapantalla Then WindowStyle(0,titulo) tamx:=ResX tamy:=ResY posx:=0 posy:=0 Else WindowStyle(1,titulo) EndIf // creamos una pantalla para información (desc. corta, turnos...) Declare(ajustex) Declare(ajustey) If todapantalla Then ajustex:=0 ajustey:=0 Else ajustex:=6 ajustey:=25 EndIf pant_info:=CreateScreen() ScreenPos(pant_info,0,0) ScreenSize(pant_info,tamx-ajustex,tamy_info) ScreenScroll(pant_info,2) Screen(pant_info) Print(color_info + tipo_letra) // creamos una pantalla para gráficos If hay_graficos Then pant_grf:=CreateScreen() ScreenPos(pant_grf,0,tamy_info) ScreenSize(pant_grf,tamx-ajustex,tamy_grf) Screen(pant_grf) Print("\[RGBF(000000)]") EndIf // definimos la pantalla 0 (la usaremos para texto) ScreenScroll(0,0) If hay_graficos Then ScreenPos(0,0,tamy_info+tamy_grf) ScreenSize(0,tamx-ajustex,tamy-tamy_info-tamy_grf-ajustey) Else ScreenPos(0,0,tamy_info) ScreenSize(0,tamx-ajustex,tamy-tamy_info-ajustey) EndIf Screen(0) Print(color_fondo + color_letra + tipo_letra) // después de inicializar el aspecto de la pantalla // la mostramos y así evitamos molestos efectos de "parpadeo" // NOTA: siempre debe existir un WindowPos o un WindowSize ya que // sino la ventana principal quedaría oculta WindowPos(posx,posy) WindowSize(tamx,tamy) ScreenAt(0,0,120) print("\[N]AVISO: Este juego contiene escenas explícitas de violencia y gore. Así que se recomienda no jugar a gente muy sensible ante este tipo de juegos, escenas o literatura."+CR) print("También, si eres niño menor de 14 años, deberías pedir permiso a tus padres, tutor o profesor, y obtener su visto bueno antes de jugarlo."+CR) print("Pulsa una tecla para empezar... o bien cierra la ventana del juego (pulsa ALT-F4) si crees que este juego no es bueno para ti.\[N]"+CR) pause(0) Principal()