Galaxy Wars para Commodore-16
-
- Amiga 1200
- Mensajes: 1393
- Registrado: 23 Dic 2008, 17:53
- Sistema Favorito: MSX
- primer_sistema: ZX81
- Primera consola: Atari 2600
- Gracias dadas: 3 veces
- Gracias recibidas: 20 veces
Galaxy Wars para Commodore-16
EL JUEGO
Este videojuego arcade fue desarrollado por Universal y manufacturado por Taito en 1979.
El objetivo del juego consiste en destruir la flotilla de invasores que hay en la zona superior de la pantalla. Para ello controlamos una plataforma con un misil. Al disparar el misil debe esquivar los asteroides y los disparos enemigos e impactar en un invasor.
Controles:
Pulsa Z o X para mover la plataforma y el misil a izquierda o derecha.
Pulsa la barra espaciadora para disparar el misil.
Descargar el juego en formato ".D64":
BLOQUES
He dividido el listado en 11 bloques:
- Declaración de las matrices. Llamada a rutinas principales.
- Controlar nuestra plataforma o misil.
- Control de los invasores y asteroides.
- Control de los disparos enemigos.
- Detección de impacto del misil. Toca asteroide, invasor o disparo enemigo.
- Perder una vida.
- Pantalla de Presentación.
- Inicio de la partida.
- Rutinas varias.
- DATA con rutina en código máquina que duplica el juego de caracteres en otra posición.
- DATA con los gráficos del juego.
COMO FUNCIONA
Todo el programa ocupa 87 líneas.
A continuación indico el principio de las distintas partes del programa:
10 - Definimos las matrices del juego.
30 – Inicializamos el récord (R) y vamos a la rutina que redefine los gráficos.
50 – Vamos a la presentación del juego.
100 - Movemos la plataforma o misil en la dirección indicada.
130 - Si se ha disparado el misil (T=2) salta a 160.
140 – Si se pulsa el espacio disparamos el misil y borramos la plataforma.
160 – Borramos el misil y modificamos la posición vertical (Y).
170 – Si la punta del misil toca algo saltamos a 400.
180 – Ponemos el misil en la nueva posición.
200 – Movemos una de las 6 filas de enemigo o asteroides en la dirección correspondiente. (B=1: Derecha, B=-1:Izquierda).
210 – Imprimimos la fila del enemigo.
250 – Miramos si esta activa una de las 6 bombas enemigas.
260 – Si no lo está, miramos si en una posición de la pantalla hay un invasor para activar su disparo.
270 – Si el disparo toca la plataforma o misil salta a 500.
400 – Si la posición Y es mayor de 5 es que hemos impactado con un asteroide o disparo y salta a 500.
410 – Calculamos la posición del invasor destruido.
420 – Ponemos la explosión, suena un sonido y calculamos los puntos (50, 100 o 150).
430 – Borramos el invasor de la fila y restamos un invasor a los restantes (Q).
440 – Mostramos los puntos y hacemos una pausa (5500) y actualizamos el marcador.
500 – Ponemos una explosión en la posición del misil y reproducimos un sonido.
520 – Actualizamos el marcador de vidas.
550 – Si no hay más vidas finaliza la partida.
2000 – Pantalla de presentación del juego.
2050 – Al pulsar una tecla borramos la pantalla (5400) y se hace parpadear el marcador del jugador 1.
2500 – Montamos las tiras de los invasores.
2510 – Rutina que genera aleatoriamente las tiras de los asteroides. Más llenas en niveles avanzados.
2570 – Inicialización de las variables principales de la partida.
5000 – Inicio de rutina para redefinir el juego de caracteres. Aquí se baja el RAMTOP 1KB.
5010 – Se carga la rutina en ensamblador desde los DATA en memoria y se ejecuta.
5020 – Copiamos los DATA de los gráficos en la nueva posición y cambiamos los colores de pantalla.
5040 – Inicializamos la matriz de la altura de los distintos enemigos V().
5050 – Guardamos en una matriz los colores de cada tira C$().
5100 – Rutina que activa el juego de caracteres redefinido.
5200 – Activa el juego de caracteres original. El nuestro queda residente en memoria.
5300 – Activa los colores por defecto del C-16 cuando está en BASIC.
5400 – Rutina de borrado de pantalla.
5500 – Rutina de PAUSA. Valor en (J).
5600 – Muestra las 6 filas de enemigos en su posición y con el color correspondiente.
8000 – Valores DATA de la rutina en código máquina que duplica el juego de caracteres en otra posición de memoria.
9000 – Línea DATA con los gráficos del juego.
EL LISTADO
APUNTES FINALES
Llevaba tiempo dándole vueltas a programar este juego y ha sido ideal para mi primera incursión en la programación del C-16.
Por fin un equipo Commodore con un BASIC decente !!!
Principales descartes respecto al original:
- Esta versión es más ancha y menos alta ya que en el juego original la pantalla es vertical.
- Hay alguna fila de asteroides menos, debido al tamaño vertical.
- Durante el ascenso del misil podemos controlarlo horizontalmente, pero no controlamos la velocidad.
- Los invasores no aceleran cuando solo quedan un par.
- Los asteroides no descienden al llegar a los extremos.
- Las puntuaciones están limitas a 50, 100 y 150 puntos.
- No hay animaciones en los enemigos.
El primer problema ha consistido en poder redefinir los gráficos, ya que este sistema no lo permite desde el BASIC.
Por suerte tenía una rutina en unas fotocopias de una revista de C-16 y tras alguna ligera modificación la he podido usar sin problemas. La rutina se encarga de bajar el RAMTOP 1KB y copia los 128 caracteres del SET 1. A partir de aquí los podemos redefinir desde BASIC sin problema. Con un par de POKE podemos activar y desactivar este juego de caracteres alternativo.
El control de los enemigos es muy simple. Hay 6 tiras con los enemigos en su posición correspondiente. Las filas pares rotan a la izquierda y las impares a la derecha. Con LEFT$ y RIGHT$ muevo un carácter de un extremo al otro e imprimo la fila con el color correspondiente. Todo muy rápido y sencillo gracias al comando CHAR.
El bloque principal del programa ocupa solo 17 líneas. En cada pasada muevo una fila de enemigos y controlo un disparo enemigo. El contador es común en los dos casos (A).
Para ganar velocidad he prescindido de las animaciones de los enemigos. He optado por usar los gráficos intercalados.
En las colisiones solo reviso si la cabecera del misil toca algo, pero no la parte baja. Respecto a las bombas enemigas solo la activa revisa si toca algo. Esto hace que el juego sea más rápido pero se puede dar el caso que toquemos algo y no nos pase nada. Como el proceso es rápido, tiene su riesgo... y mejor no jugársela.
Para detectar las colisiones accedo directamente a la zona de memoria reservada al video. Hay 1 KB para los caracteres y otro para los atributos de color.
Respecto al equipo
Este es mi primer programa con el C-16 y la verdad es que la experiencia ha sido plenamente satisfactoria. Por fin he podido usar un equipo Commodore y programarlo con comodidad.
Tiene un buen BASIC con muchos comandos impensables en el VIC-20 y el C-64.
Temas tan engorrosos como poner algo en una posición concreta de la pantalla, reproducir un sonido o acceder a un joystick tiene sus propios comandos.
También hay comandos para acceder a la disquetera fácilmente. Ver el contenido de un disquete, copiar o borrar un fichero ya no supone ningún problema.
Las únicas pegas que le he encontrado es que el casete es muy lento, algo típico en los equipos Commodore, y que han tenido el detalle de cambiar los conectores del casete y los joystick. Así no ha sido necesario usar los comandos que nos permiten acceder a las palancas de control.
El equipo tiene poca memoria pero la verdad es que cunde bastante. Incluso permite el uso de gráficos en alta resolución en modo multicolor. Por ahora ignoro como se hace…
Pues nada más, solo me queda esperar que os guste.
Os invito a probarlo.
Última edición por dancresp el 13 Jun 2013, 09:24, editado 1 vez en total.
Buscando la IP de la W.O.P.R.
- radastan
- Amiga 2500
- Mensajes: 4542
- Registrado: 11 Jun 2007, 19:29
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Sega Genesis/Megadrive
- Primera consola: TV Games/Pong Clone
- Ubicación: Córdoba
- Gracias dadas: 9 veces
- Gracias recibidas: 40 veces
- Contactar:
Re: Galaxy Wars para Commodore-16
Madre mía, lo he probado con el Yape para Windows x64 (una delicia) y va fluido el juego, una conversión genial.
No parece realizado en BASIC.
No parece realizado en BASIC.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
-
- Amiga 1200
- Mensajes: 1393
- Registrado: 23 Dic 2008, 17:53
- Sistema Favorito: MSX
- primer_sistema: ZX81
- Primera consola: Atari 2600
- Gracias dadas: 3 veces
- Gracias recibidas: 20 veces
Re: Galaxy Wars para Commodore-16
radastan escribió:Madre mía, lo he probado con el Yape para Windows x64 (una delicia) y va fluido el juego, una conversión genial.
No parece realizado en BASIC.
El BASIC tiene sus limitaciones pero se le puede sacar su juguillo...

Buscando la IP de la W.O.P.R.
- mentalthink
- Amiga 2500
- Mensajes: 2840
- Registrado: 11 Abr 2010, 15:06
- Gracias dadas: 45 veces
- Gracias recibidas: 14 veces
Re: Galaxy Wars para Commodore-16
Una preguntilla, porque la verdad me gustaría hacer cosillas para el commodore, y aunque supongo que pasar del ASM del Z80 al del 6250(creo que es l anomenclatura no?¿), no debe ser algo extremadamente complejo... En basic como ese juego que has hecho se podrían hacer juegos más elaborados graficamente?¿, es que en la página de C64 de lobo gris tiene unos ejemplos hechos en basic, y por ejemplo un Sprite que es enorme dándo vueltas no le cuesta absolutamente nada al C64...
también una preguntilla del basic de C64, va todo por pokes o es algo normal como el zx o el Amstrad, porque según tengo entendido en el Basic del C64 es un poco engorroso...
también una preguntilla del basic de C64, va todo por pokes o es algo normal como el zx o el Amstrad, porque según tengo entendido en el Basic del C64 es un poco engorroso...
-
- Amiga 1200
- Mensajes: 1393
- Registrado: 23 Dic 2008, 17:53
- Sistema Favorito: MSX
- primer_sistema: ZX81
- Primera consola: Atari 2600
- Gracias dadas: 3 veces
- Gracias recibidas: 20 veces
Re: Galaxy Wars para Commodore-16
mentalthink escribió:Una preguntilla, porque la verdad me gustaría hacer cosillas para el commodore, y aunque supongo que pasar del ASM del Z80 al del 6250(creo que es l anomenclatura no?¿), no debe ser algo extremadamente complejo... En basic como ese juego que has hecho se podrían hacer juegos más elaborados graficamente?¿, es que en la página de C64 de lobo gris tiene unos ejemplos hechos en basic, y por ejemplo un Sprite que es enorme dándo vueltas no le cuesta absolutamente nada al C64...
también una preguntilla del basic de C64, va todo por pokes o es algo normal como el zx o el Amstrad, porque según tengo entendido en el Basic del C64 es un poco engorroso...
El BASIC del C64 es una asco ya que todo funciona a base de POKES, a parte de otras carencias muy básicas tipo "LOCATE", "ELSE", etc.
Lo que si que es cierto es que tiene la posibilidad de gestionar SPRITES por hardware, con lo que se pueden hacer cosas más complejas, al igual que pasa con los MSX. La diferencia es que con el MSX es muy simple y con el C64 vuelve a ser complejo porque otra vez se tiene que hacer todo a base de POKES.
Con los equipos Commodore tienes dos opciones:
- El C-16 y el Plus/4 tienen un BASIC muy mejorado y como puedes ver, fácilmente se pueden hacer cosas como el "Galaxy Wars" o el "Lunar Rescue". Encima es rápido.
- El Commodore 128 tiene lo bueno del C-16 más el hardware del C-64, con lo que puedes usar SPRITES de una forma mucho más sencilla.
Tu eliges.
Buscando la IP de la W.O.P.R.
- scooter
- Amiga 1200
- Mensajes: 1031
- Registrado: 17 Jul 2012, 09:25
- primer_sistema: C64
- Ubicación: Alicante
Re: Galaxy Wars para Commodore-16
El basic del c64 es el mismo que el del pet, con eso te lo digo todo
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados