EL JUEGO
Averno es un juego publicado para varios sistemas en el año 1989. Es un juego tipo puzzle en el que controlamos a un fantasma que tiene que recoger todas las llaves que hay en el nivel para poder abrir la puerta. Debe abrir las 13 puertas para poder escapar del averno. Hay que evitar quedarnos sin tiempo o quedarnos atrapados.
El fantasma tiene la capacidad de hacer caer bloques de ladrillos para poder acceder a ciertas partes del nivel o para subirnos a ellos, ya que no puede subir paredes de más de dos bloques de ladrillos. Solo puede hacer caer bloques que no tengan nada debajo.
Esta versión sigue exactamente la misma mecánica y las 13 pantallas son idénticas al juego original, a excepción de que se han eliminado los bloques invisibles, lo que no afecta a la resolución de los niveles.
Controles:
Mueve al fantasma a derecha o izquierda con “Z” y “X”.
Pulsa “Enter” para hacer caer un bloque de ladrillos, según estés encima o parcialmente sobre él.
Pulsa “Esc” si te quedas bloqueado. Perderás una de tus 5 vidas.
Descargar "Averno" para ORIC-Atmos en formato TAP:
Descargar "Averno" para ORIC-1 / ORIC-Atmos en formato TAP:
BLOQUES
Se ha dividido el listado en 10 bloques:
- Declaración de las matrices e inicio del juego.
- Bucle principal de desarrollo.
- Pasar el Nivel o perder una Vida.
- Movimiento del fantasma.
- Presentación e inicio de la partida.
- Rutina para mostrar el nivel.
- Pantalla de victoria final.
- Preparar y mostrar la zona de juego.
- Cargar UDG.
- DATA con los UDG del juego y valores de matrices.
COMO FUNCIONA
Todo el programa ocupa 137 líneas.
10 - Definimos las matrices del juego.
20 – Salto a la subrutina que redefine los caracteres y define variables globales.
30 – Mostrar la pantalla de presentación.
40 – Mostrar el nivel.
100 – Inicio del bucle principal.
105 – Coger la tecla pulsada. Si se pulsa “Esc” salir del bucle y perder una vida.
110 – Movimiento del fantasma según la tecla pulsada.
122 – Refrescar el marcador de tiempo.
125 – Mira que hay debajo del fantasma, actuando en consecuencia.
135 – Descontar tiempo, saliendo del bucle si se acaba.
140 – Volver al REPEAT si la variable U=0.
150 – Al salir del bucle mira el valor de U. U=1 para pasar de nivel o U=2 para perder una vida.
155 – Rutina de muerte.
200 – Mover al fantasma a la derecha.
250 - Mover al fantasma a la izquierda.
300 – Controla la caída del fantasma, mirando si pasa por encima de una llave o puerta.
400 - Muestra el fantasma. Con D=1 mira a la derecha y D=-1 mira a la izquierda.
420 – Rutina de recogida de llave. Pone U=1 si se han recogido todas.
450 - Refresca al marcador del tiempo.
460 - Refresca al marcador de puntos.
500 – Tirar un bloque de ladrillos. Calcula la posición del fantasma para decir que bloque debe caer.
2000 – Pantalla de presentación.
2100 – Rutina que muestra el nivel. Los datos están codificados en la matriz M$.
2130 – Doble bucle que guarda en la matriz D los caracteres de cada posición de la pantalla.
2200 – Pantalla de final de juego al completar el nivel 13.
3000 – Selección de colores, borrar de pantalla, ocultar cursor y ocultar el “CAPS” superior.
3005 – Lectura de los DATA de los UDG.
3010 – Montar matrices con tiras de caracteres y posiciones del fantasma.
9000 – DATA con los gráficos de los UDG, posiciones, bloques de gráficos y codificación de los niveles.
EL LISTADO
Código: Seleccionar todo
Aquí va el código BASIC, pero no hay forma de meterlo !!!
Adjunto en formato TXT...
APUNTES FINALES
Casi cuatro años sin programar nada para el ORIC. Como pasa el tiempo !!!
Pues nada que volvemos al ataque, que chema o hace de Juan Palomo, o pocas novedades encuentra para su sistema favorito.
En esta ocasión he adaptado bastante fielmente un juego que en su día me compré para mi MSX, me gustó mucho y del que guardaba un buen recuerdo. Existen versiones para varios sistemas, y ahora ya se puede añadir la del ORIC, teniendo una mecánica idéntica al original, con alguna mejora y alguna cosilla que he dejado fuera. En una semana he dejado esta versión lista para jugar.
La verdad es que he quedado muy satisfecho ya que el juego tiene los mismos niveles que la versión original, la misma resolución de los niveles y el rendimiento del juego es igual, sino algo superior… excepto en la creación de la pantalla.
Las cosillas de la versión ORIC
Como siempre que se programa en el ORIC, los gráficos se han tenido que rediseñar ya que en lugar de la habitual matriz de 8x8 pixels pasamos a una de 8x6. Como los gráficos se forman con dos bloques de 1x2 caracteres o 2x2 caracteres de 8x8 pixels, tenemos bloques 8x16 pixels o 16x16 pixels. La solución que he tomado ha consistido en usar bloques de 1x3 o 2x3 caracteres, de forma que los bloques tienen 18 pixels de ancho y no 16. Como no puedo usar colores para delimitar los bloques, he dejado una tira de pixels en blanco al principio y al final de algunos gráficos para hacerlos menos confusos. El resultado creo que es bueno. A diferencia de la versión original, tanto a la puerta como a las llaves les he creado una máscara para que queden más integrados con el fondo.
Al poner los gráficos en pantalla, casi se comen el ancho de la pantalla, con lo que he eliminado algunos marcadores, y al resto los he puesto en la parte superior, ya que el ORIC tiene más filas que la mayoría de equipos.
Otro problema ha sido el tema del color, ya que por la forma como gestiona los atributos lo he tenido que hacer monocromo, dando un poco de color en la presentación y en los marcadores. Es una lástima, pero muy ORIC.
Y en este punto llegamos a la creación de la pantalla. Cada pantalla se compone de una matriz de 20 filas y 10 columnas. En cada una de las columnas hay un gráfico o parte de él, como en las puertas y llaves. Codificando de una forma bruta, se podría haber creado una matriz de 13 (pantallas) x 20 (filas) x 10 (columnas). En total 260 líneas de código, con su correspondiente cantidad de memoria, de 600 bytes por nivel. En lugar de esto he optado por codificar los niveles, quedando cada nivel entre los 50 y 100 bytes. La presentación del nivel tarda aproximadamente unos 6 segundos, y la codificación se realizada de la siguiente forma, mientras la pantalla es azul:
- Una letra entre la “A” y la “Z” tiene un valor entre 1 y 26, y corresponde a los bloques de ladrillos del fondo que se han de mostrar.
- Una letra entre la “a” y la “z” tiene un valor entre 1 y 26, y corresponde a los bloques de piedra que se han de mostrar.
- Un número entre 1 y 8 corresponde a un bloque predefinido almacenado en la matriz B$, poniendo lo que entre en la fila correspondiente.
Pero aquí no acaban los problemas, ya que es la primera vez en BASIC que me encuentro con la necesidad de hacer que el protagonista se mueva sobre el fondo sin borrarlo. Para ello hay que hacer un segundo proceso, que consume unos 10 segundos en el que con un doble bucle leo la memoria de pantalla y voy guardando los caracteres de la pantalla en la matriz "S". Durante el proceso de lectura de la memoria de vídeo hago un efecto persiana cambiado el color de la línea al amarillo definitivo. No me acaba de gustar, pero es necesario y sirve para que después el personaje se mueva de forma rápida.
El juego original hace uso de bloques ocultos en un par de niveles, cosa que descubrí viendo un vídeo cuando el juego estaba casi acabado, y opté por ignorarlos. Esto me obligó a hacer algún pequeño cambio en estos niveles, ya que en esta versión los bloques sí que son visibles. Con todo, no afectan a la resolución de los niveles.
Para el control del cursor se lee el teclado mediante un “PEEK 520” y así se evitan problemas con las mayúsculas/minúsculas y te aseguras que siempre lea la última tecla pulsada, accediendo al buffer del teclado.
Y para el sonido, una vez más he tirado de los predefinidos por el ORIC demostrando mi incapacidad en este campo...
Como nota final, con el respeto a los niveles originales, encuentro que la dificultad no es lineal, y los niveles más sencillos están al principio y final del juego. Pero como el juego original es así, así lo he dejado.
Pues nada más, solo me queda esperar que os guste...
Os invito a probarlo.