Programando NUCLEAR INVADERS para MSX

dancresp
Mensajes: 5627
Registrado: 13 Nov 2010 02:08
Agradecido : 308 veces
Agradecimiento recibido: 445 veces

Programando NUCLEAR INVADERS para MSX

Mensajepor dancresp » 12 Abr 2012 15:23

NUCLEAR INVADERS para MSX

Imagen

EL JUEGO
Vuelven los invasores del espacio!!!

En el año 1977 intentaron invadir las ciudades de la tierra, y fracasaron.
Ahora vuelven con un malvado plan: destruir las centrales nucleares para dejar el planeta inhabitable.
Con la ayuda de nuestro tanque debemos evitar que cumplan con su objetivo.

Cada nivel lo componen 30 invasores, y al superarlo aparecerá una central más grande y los invasores deberán recorrer menos distancia para llegar a ella.

Destruye el UFO que aparece por la parte superior para conseguir puntos extras.

Pulsa disparo en la pantalla de presentación para seleccionar los controles.

Descargar fichero WAV: NuclearInvaders.rar


BLOQUES
He dividido el listado en 14 bloques:

- Declaración de las matrices.
- Control de nuestro tanque.
- Control de nuestro disparo.
- Mover UFO.
- Mover invasor.
- Destruir enemigo ó UFO.
- Perder una vida.
- Pasar Nivel.
- Presentación.
- Mostrar pantalla de juego.
- Cargar gráficos. SPRITES y UDG.
- Inicializar variables y matrices del juego.
- Rutinas varias.
- Bloques de gráficos.


COMO FUNCIONA
Todo el programa ocupa 73 líneas.

A continuación indico el principio de las distintas partes del programa:

10 - Definimos las matrices del juego.
30 – Llamada a rutinas para leer gráficos (3000), mostrar presentación(2000) y posicionar gráficos y SPRITES (4000).
100 – Comprobamos si se ha de mover nuestro tanque, cambiando su posición horizontal mediante un VPOKE.
140 – Si hay un disparo en pantalla lo movemos, sino miramos el estado del disparador.
170 – Si hay un UFO en pantalla lo movemos, sino decrementamos el contador (W).
200 – Rutina de movimiento de invasores. Se mueve uno distinto en cada pasada. Primero miramos si todavía hay invasores en la posición correspondiente (3 por nivel), sino hay salimos. Si tiene alguna velocidad asignada lo movemos, y sino mediante un número aleatorio decidimos si se ha de empezar a mover. Durante el movimiento cambiamos su animación y miramos si ha llegado a la central nuclear.
250 – Contador del próximo invasor a mover (M).
260 – Después de cada ciclo de 10 invasores controlados hacemos el sonido de movimiento correspondiente.
300 – Si no se han destruido todos los invasores (T) volvemos a 100, y si no quedan saltamos a 600.
400 – Esta rutina se ejecuta automáticamente cuando dos SPRITES colisionan, a nivel de píxel. Aquí se calcula si se ha tocado un invasor o el UFO y actúa en consecuencia. En 410 se destruye un invasor y en 460 se destruye el UFO.
500 – Rutina que se ejecuta cuando un invasor llega a la central nuclear. Se reproduce un sonido y se borra una vida. Si quedan vidas volvemos a empezar el nivel y sino vamos a la pantalla de presentación después de una pausa.
600 – Rutina de pasar nivel. Se ejecuta cuando destruimos los 30 invasores. Se incrementa el control de dificultad (C) que indicará la anchura de la central nuclear.
2000 – Pantalla de presentación del juego.
2100 – Bucle de detección de controlador. Comprueba el estado de la barra de espacio o de los dos posibles joysticks. Al disparar se guarda el control en la variable (G).
2110 – Borrado de la pantalla de presentación. Mensaje al jugador uno para que esté listo y se dibuja la central nuclear.
3000 – Cargamos los gráficos desde las líneas DATA a la VRAM. Primero se cargan los SPRITES y después los UDG.
4000 – Rutina que se encarga de inicializar la posición de los invasores, UFO y tanque en pantalla. En las matrices se guardan los siguientes datos de los invasores: gráfico correspondiente (B), posiciones iniciales (X e Y), velocidad (S), invasores por posición (Q), puntuaciones (G) y estado de animación (A).
5000 – Rutina para imprimir un número en un marcador. Pasar el valor en (I). Posicionar previamente con un LOCATE.
5100 – Rutina de pausa. Pasar el valor en (N).
5200 – Rutina de borrado de parte de la pantalla, respetando los marcadores superiores y inferiores.
5300 – Borrar todos los SPRITES de pantalla, colocando su posición vertical a 209.
5500 – Al pulsar “CTRL+STOP” se ejecuta esta rutina que nos devuelve al modo texto del SCREEN 0.
9000 – Datos de los SPRITES del juego.
9200 – Datos de los UDG del juego.


EL LISTADO
Imagen

APUNTES FINALES
A finales del 2011 hice una versión de este juego para el DRAGON 32. Era más simple debido a las limitaciones de este sistema. No podía poner los marcadores en pantalla porque no lo permite en modo alta resolución desde BASIC. Había un único tipo de invasor, el movimiento era más brusco ya que no maneja SPRITES, y por rendimiento tuve que aparcar el UFO. Total, que me quedó la sensación de que se podía hacer mejor en otro sistema, y no tenía ninguna duda que el sistema perfecto sería el MSX. El resultado me da la razón.

La principal dificultad del juego ha consistido en conseguir una buena velocidad de ejecución, teniendo en cuenta que el juego original no es especialmente rápido. Afortunadamente este sistema nos permite usar distintas técnicas que nos facilitan la tarea y el juego es más rápido.

La pantalla de presentación es un “duplicado” de la del juego original, excepto por el cambio del nombre del juego. La forma de presentación es distinta ya que aquí se muestra todo de golpe y no letra a letra.

Los SPRITES del MSX pueden ser de 8x8 y de 16x16. En el juego he usado gráficos de 16x8. La rutina de carga de los gráficos está adaptada para no tener que pasar los datos de la mitad inferior de cada gráfico. Así ahorro memoria y se cargan más rápidamente.

El bucle principal de desarrollo va de la línea 100 hasta la 300, 15 líneas en total. Aquí se controla el tanque, el disparo, el UFO y un invasor. Como el proceso es tan rápido, parece que todo se mueve de forma fluida.

He activado el modo SPRITE ON para detectar automáticamente la colisión entre SPRITES. Con el ON SPRITE GOSUB 400 el programa salta a la línea 400 cada vez que dos SPRITES colisionan, a nivel de pixel. Como por posición es imposible que los enemigos colisionen entre si, cuando sucede es porque les ha tocado un disparo. En la línea 400 compruebo por posición vertical si es el UFO, y sino, es un invasor que por posición vertical calculo la fila y por posición horizontal la columna. Ni que decir que esto nos ahorra un montón de cálculos y tiempo de proceso ya que es proceso automático del que se encarga el chip de video del MSX.

Para el tema de sonido, en el que soy un perfecto inútil, he usado el comando PLAY, que convenientemente modificada la forma de la onda y la modulación cumplen con su cometido. De todas formas, me habría gustado que sonara el sonido auténtico aunque creo que desde BASIC no habría sido factible, en cuanto a rendimiento.

He activado el modo STOP ON para que detecte automáticamente si se hace un “CTRL+STOP” y salir del juego para ver el código.

He eliminado todos los cálculos posibles, especialmente multiplicaciones y divisiones, y todos los AND/OR posibles. Uso un IF y si no se cumple ya no tengo que comprobar más valores.

Otro método básico consiste en usar, siempre que sea posible, variables enteras (con el %) ya que la velocidad de cálculo aumenta un 20% aprox.

Pues eso es todo. A pesar de estar programado completamente en BASIC, el juego ha conseguido una velocidad muy decente, y se deja jugar perfectamente. Eso si, mi cruz sigue siendo el sonido.


Y como siempre…

Para terminar, todo este desarrollo se ha programado en un MSX SPECTRAVIDEO SVI-728. El listado se ha impreso en una impresora matricial BROTHER M-1109. A lo retro, como dios manda.


Os invito a probarlo.

Imagen
Imagen
Imagen
Buscando la IP de la W.O.P.R. he encontrado mi índice

dancresp
Mensajes: 5627
Registrado: 13 Nov 2010 02:08
Agradecido : 308 veces
Agradecimiento recibido: 445 veces

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor dancresp » 12 Abr 2012 16:38

Avisar que esta vez el audio lo he capturado con el "audacity" y que lo he podido cargar sin problemas.

Si al resto os funciona bien volveré a subir el audio de los otros programas.

xgipe, esa imagen para emulador, please !!!
Buscando la IP de la W.O.P.R. he encontrado mi índice

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 12 Abr 2012 16:48

dancresp escribió:
xgipe, esa imagen para emulador, please !!!



¡Oído, cocina!

Marrrrrrchando una de CAS en un rato... :)

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 12 Abr 2012 16:59

Pfffffff...

la descarga es leeeeeeeeeeeeeeeeeennnnnnnnnntttttttaaaaaaaaaaaaaa :(

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 12 Abr 2012 17:26

Pues, tras una espera en la descarga... ya tengo el CAS a punto:
[b:]e107 Attachement: [url=../http://retrowiki.es/files/1334244191_144_FT17985_nucinv.rar]nucinv.rar[/url]

CLOAD (+ RUN) y a disfrutarlo, que es bien adictivo... 1000 points y segundo nivel en la primera partida !griuh

dancresp
Mensajes: 5627
Registrado: 13 Nov 2010 02:08
Agradecido : 308 veces
Agradecimiento recibido: 445 veces

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor dancresp » 12 Abr 2012 17:58

Gracias xgipe !!! !birra

Probado en el BlueMSX y luce así de bien...

ImagenImagen

No puedo negar que me siento especialmente orgulloso de este juego... :D
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
ron
Mensajes: 18947
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2023 veces
Agradecimiento recibido: 1739 veces

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor ron » 12 Abr 2012 22:27

... y aún sin ficha ?

Eso se resuelve enseguida.

Enhorabuena Wally !!!

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 13 Abr 2012 11:40

@Dancresp:
Una pregunta tonta,
¿podrías decirme cómo se controla el color de los SPRITES en la pantalla de juego?... He intentado hacer una versión "fósforo verde", pero las naves siguen apareciendo en blanco.
:(

dancresp
Mensajes: 5627
Registrado: 13 Nov 2010 02:08
Agradecido : 308 veces
Agradecimiento recibido: 445 veces

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor dancresp » 13 Abr 2012 12:08

Ya colgarás fotos, que seguro que son curiosas.

Aquí van los cambios.

Línea 3000:
COLOR 15,1,1. Aquí indicas el color de la pantalla y sus caracteres.

Línea 4030:
En VPOKE I%+3,15 pones el color de los SPRITES de los invasores.

Línea 4110:
En VPOKE 6915,15 pones el color del tanque.
En VPOKE 6919,15 pones el color del disparo.
En VPOKE 6963,15 pones el color del UFO.

En resumen, el código 15 es el color blanco. Por norma general, los VPOKE con ese valor están asignando colores.

No he probado lo que te comento pero creo que no me he dejado ninguno.

!alien
Buscando la IP de la W.O.P.R. he encontrado mi índice

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 13 Abr 2012 13:07

ImagenImagen

¿Qué tal?

Esta tarde pongo un par más... !griuh

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 13 Abr 2012 16:18

Y otra versión, con un aire "Dragon"...

ImagenImagen

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 13 Abr 2012 16:33

Adjunto archivo con ambas versiones "verdes" :D, en formato CAS.
Estos "mods" están grabados en formato ASCII, por lo que pueden cargarse escribiendo RUN"CAS: (+Enter)...

[b:]e107 Attachement: [url=../http://retrowiki.es/files/1334327523_144_FT17985_nuclearinvaders.rar]nuclearinvaders.rar[/url]

Saludos,
Xgipe

Avatar de Usuario
ron
Mensajes: 18947
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2023 veces
Agradecimiento recibido: 1739 veces

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor ron » 13 Abr 2012 19:38

El Dancresp haciendo MODS a Medida de Nuclear Invaders, esto es GENEROSIDAD !

Me encanta este hilo !!!

Saludos !

Avatar de Usuario
ron
Mensajes: 18947
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2023 veces
Agradecimiento recibido: 1739 veces

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor ron » 14 Abr 2012 00:18

Hale, versión DSK

Descomprimir y usar con emu, con MESS por ejemplo.

Elegir un MSX con diskette.

Arrancar. Cuando salga el prompt del MSX-DOS, se teclea : BASIC

Una vez en Basic, LOAD "NUCGRE.BAS,A

RUN

jeeje

Imagen

[b:]e107 Attachement: [url=../http://retrowiki.es/files/1334355501_2_FT17985_nuc.rar]nuc.rar[/url]

Avatar de Usuario
[UFO]
Mensajes: 610
Registrado: 02 Jun 2011 21:18

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor [UFO] » 14 Abr 2012 01:19

¡Cómo os lo curráis! Lo he bajado y probado con el BlueMSX y mola una tonelada. Enhorabuena dancresp :)

xgipe

Re: Programando NUCLEAR INVADERS para MSX

Mensajepor xgipe » 16 Abr 2012 18:16

Adjunto una carátula...
;)

Imagen


Volver a “Lenguajes de Programación y herramientas Dev”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados