Munchkin - MSX

Foro dedicado a la programación en todo tipo de sistemas clásicos.
dancresp
Amiga 1200
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

Munchkin - MSX

Mensajepor dancresp » 19 Mar 2013, 16:28

KC-MUNCHKIN

Munchkin_0002.gif
Munchkin_0002.gif (4.59 KiB) Visto 10717 veces


EL JUEGO
Munchkin es el cartucho número 38 de la Magnavox Odyssey² / Philips Videopac G7000.

Diseñado y programado por Ed Averett, “Munchkin” está basada en el juego de Namco “Pac-Man”. En América del Norte fue llamado “KC Munchkin”, en referencia al entonces presidente de Philips Consumer Electronics Kenneth C. Menkin.

El juego es muy parecido a Pac-Man, pero tiene diferencias fundamentales:
- Los fantasmas son llamados Munchers, y hay tres en lugar de cuatro fantasmas. El personaje del jugador se llama Munchkin.
- Sólo hay 12 pastillas (llamado Munchies) en cada laberinto, que parpadean y cambian de color. Comienzan en cuatro grupos de tres, pero se mueven a través del laberinto de forma independiente.
- Algunos de los laberintos se vuelven invisibles cuando el jugador empieza a moverse.
- Tiene un modo programable, donde el jugador puede crear sus propios laberintos.
- Tiene un modo aleatorio, donde un nuevo mapa se genera en cada partida.
- La caja donde se regeneran los fantasmas comidos gira, por lo que los fantasmas pueden salir por cualquier lado. Además, el personaje del jugador es libre de entrar en la caja y, si enciende, puede consumir nuevos monstruos en el momento que se regeneran.

Control:
Pulsa las teclas 1 a 3 para seleccionar el laberinto. Por defecto se juega en el laberinto 1, o el último elegido.
Pulsa disparo para empezar la partida, y utiliza el controlador para mover nuestro Munchkin.


Por gentileza de xgipe (gràcies Xavi) os podéis descargar el CAS para usarlo desde emulador.

Descargar el juego (cargar con CLOAD):
Munchkin.rar
(2.96 KiB) Descargado 363 veces


BLOQUES
Se ha dividido el listado en 12 bloques:
- Declaración de las matrices e inicializar las principales variables. Llamada a rutinas principales.
- Controlar nuestra Munchkin (protagonista).
- Movimiento de los Munchers (enemigos).
- Comer una pastilla.
- Perder la única vida. Fin partida.
- Munchkin se come un Muncher.
- Pantalla de Presentación.
- Rutinas varias.
- Imprimir la zona de juego. Paredes, pastillas y SPRITES.
- Seleccionar el modo de video, leer los SPRITES e inicializar variables.
- DATA con los gráficos del juego.
- DATA con los datos de los laberintos.


COMO FUNCIONA
Todo el programa ocupa 137 líneas.

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

10 - Definimos las matrices del juego.
30 – Leemos los gráficos y variables, y activamos el CTRL+STOP para salir del juego y volver al BASIC.
50 – Vamos a mostrar la pantalla de presentación.
100 – Si el Munchkin se está moviendo salta a 160, sino revisamos si está sobre una pastilla.
105 – Controlamos si el Munchkin está entrando en el pasillo lateral y lo hacemos salir por el lado contrario.
110 – Consultamos el mando seleccionado y saltamos a la línea de la dirección seleccionada.
120 – Comprueba si nos podemos mover hacia la derecha, poniendo “D%=1”.
130 – Comprueba si nos podemos mover hacia abajo, poniendo “D%=2”.
140 – Comprueba si nos podemos mover hacia la izquierda, poniendo “D%=3”.
150 – Comprueba si nos podemos mover hacia arriba, poniendo “D%=4”.
160 – Cambiamos la posición del Munchkin según la dirección elegida. (D%). Controlamos su animación (A%) con (C%).
170 – Actualizamos la posición y animación del SPRITE del Munchkin.
200 – Controlamos si el Munchkin debe estar quieto (EW%), y si de debe mover en una dirección (EC%).
220 – Movemos al Muncher en la dirección seleccionada.
230 – Comprueba si puede mover al Muncher a la derecha. Guardamos la animación (EA%).
240 – Comprueba si puede mover al Muncher hacia abajo. Guardamos la animación (EA%).
250 – Comprueba si puede mover al Muncher a la izquierda. Guardamos la animación (EA%).
260 – Comprueba si puede mover al Muncher hacia arriba. Guardamos la animación (EA%).
270 – Cambiamos la posición del Muncher según su dirección actual.
280 – Controlamos si los Munchkin son vulnerables (Q%>0).
290 – Ponemos al Munchkin en su nueva posición, con la animación correspondiente.
300 – Comprueba si está tocando al Munchkin. Según si son vulnerables o no, van a comer (600) o morir (500).
390 – Con TIME controlamos que la velocidad sea más o menos estable para volver a 100.
400 – Si estamos sobre una pastilla normal recibimos un punto y hace un sonido.
405 – Si estamos sobre una pastilla energética, recibimos tres puntos, hace un sonido y inicializamos ciertas variables.
410 – Borramos el punto de la pantalla y lo sacamos de la matriz que controla su posición.
430 – Aquí llegamos si hemos comido todos los puntos del laberinto, activando la animación correspondiente.
500 – Si perdemos la única vida disponible hacemos una animación, controlamos el récord y volvemos a la presentación.
600 – Cuando nos comemos un Munchkin lo colocamos en su casa y sumamos puntos.
1000 – Bloque que se encarga de mostrar la pantalla de presentación.
1075 – Bloque que se encarga de controlar el laberinto al que queremos jugar.
1090 – Para elegir el controlador, lee la barra espaciadora o disparo de los joysticks.
4000 – Imprime los puntos (N%) en la posición (I%) indicada.
4100 – Hace desaparecer todos los SPRITES de pantalla.
4200 – Hace una pasa según el vaor de (N%).
5000 – Este bloque se encarga de mostrar el laberinto seleccionado en pantalla.
5130 – Mostramos los marcadores de “Puntos” y “Record”.
5500 – Inicializamos las variables necesarias.
5505 – Mostramos el SPRITE del Munchkin.
5510 – Posicionamos y mostramos a los 3 Munchers.
5540 – Reseteamos la matriz que controla donde están las pastillas del laberinto.
5545 – La posición de las 4 pastillas energéticas es fija. Siempre en los extremos.
5555 – Calcula y coloca las 12 pastillas en la posición correspondiente.
6000 – Seleccionamos el modo de video, activando el modo de SPRITES de 8x8 y doble tamaño.
6010 – Leemos los DATA de los SPRITES.
6020 – Leer los DATA de los caracteres redefinidos.
6040 – Montar las distintas piezas que forman el laberinto.
6060 – Definimos los colores de los gráficos definidos.
6080 – Leemos unas DATA que indican la velocidad del Munchkin y los Munchers.
8000 – Al pulsar CTRL+STOP volvemos al BASIC cambiando el modo de video y los colores.
9000 – Líneas DATA con los datos de los gráficos de los SPRITES.
9300 – Líneas DATA con los datos de las velocidades de los personajes del juego.
9500 – DATA con los datos del laberinto 1.
9600 – DATA con los datos del laberinto 2.
9700 – DATA con los datos del laberinto 3.


EL LISTADO
img006_1.jpg
img006_1.jpg (143.89 KiB) Visto 10717 veces

img006_2.jpg
img006_2.jpg (118.28 KiB) Visto 10717 veces

img006_3.jpg
img006_3.jpg (134.16 KiB) Visto 10717 veces


APUNTES FINALES
Este es uno de mis juegos favoritos de la PHILIPS G-7000, y siempre me había tentado la idea de realizar una conversión para otro sistema.Lo primero ha sido analizar el juego en si. Un personaje, tres enemigos y doce pastillas. Todo moviéndose por un laberinto con un pasillo lateral.El laberinto está compuesto por una cuadrícula de 7 filas y 9 columnas. En cada cuadrícula puede ir uno de los 5 bloques posibles: Nada, Pared izquierda, Pared superior, Pared superior-izquierda y un pequeño bloque que sirve para unir.Cuando un elemento se mueve, lo hace desde el centro de uno de los bloques hasta el siguiente. Mientras tanto no puede cambiar su dirección. Como veremos, esto facilitará las cosas. En el aspecto gráfico, los gráficos son de 8x8 pixels (toscos eso si) y con SPRITES de 8x8 ampliados se puede conseguir un aspecto idéntico al original.
Llegado a este punto, toca decidir que cosas tendría que eliminar para adaptarlo al rendimiento del BASIC y al hardware del MSX, y como quería que fuera esta versión.

Descartes:
- Solo se dispone de 3 laberintos, en lugar de los 4 originales.
- No permite diseñar nuevos laberintos.
- Las píldoras no se mueven. En cada pantalla se colocan aleatoriamente.
- Las píldoras energéticas no cambian de color y siempre están en las esquinas.
- Al comer un Muncher aparece en su casa instantáneamente. No tiene que ir hasta ella.
- La casa central de los Munchers no gira.
- Los Munchers no pueden usar los pasillos laterales.
- Los Munchers no avisan cuando se está acabando el efecto de la píldora energética.

Primero de todo, voy a explicar como se organiza el laberinto:
- Como se ha dicho, tiene unas dimensiones de 7 filas y 9 columnas (más 1 de cierre a la derecha).
- Hay 5 posibles bloques, que van en cada una de las posiciones.
- En las líneas DATA (9500 por ejemplo) se ve como se organiza. En cada línea hay la información de una fila.
- El primer dato indica el tipo de bloque que va en una posición: 0 – Nada, 1 – Pared izquierda, 2 – Pared superior, 3 – Pared superior y izquierda, y 4 – Pixel superior izquierdo que se usa como junta entre algunas combinaciones de piezas.
- El segundo dato indica donde hay paredes en esa posición. El formato es binario: 1 – Derecha, 2 – Abajo, 4 – Izquierda, 8 – Arriba. Así, si hay pared arriba y a la izquierda: 8+4=12. De esta sencilla forma podremos controlar los movimientos.

El bloque principal del programa ocupa solo 22 líneas, pero está organizado de forma que se ejecuten la menor cantidad de líneas posibles en cada pasada.

Las primera 9 líneas controlan a nuestro personaje. Si (C<>0) el personaje ya se está moviendo de un bloque a otro y no podemos cambiar la dirección. Igual que en el original.
Al parar, miramos si hay alguna pastilla en esa posición, según información guardada en la matriz (M). En caso afirmativo, vamos a la rutina de comer pastilla (400).

Como cada bloque ocupa 24 pixels (3x3 caracteres) y el Munchkin se mueve de 4 en 4 pixels, al moverlo en una dirección avanzará 6 veces hasta llegar al siguiente bloque. Esto se controla con la variable (C).

Al intentar movernos hacemos un AND con la información de los muros guardada en la matriz (W) para ver si podemos movernos. En caso afirmativo ponemos en (D) la dirección (1-derecha, 2-bajar, 3-izquierda y 4-subir) y el contador C=6. Mientras se mueva hasta el siguiente bloque no podemos rectificar, y simplemente hemos de ir actualizando la posición del SPRITE. Cuando (C=3) (esta a medio camino entre un bloque y otro) se cambia la animación del Munchkin (A).

Con los enemigos hacemos lo mismo, pero primero miramos si esta en pausa (inicio de nivel o nos lo hemos comido) y se decrementa el contador (EW). En caso contrario miramos si ya se esta moviendo entre dos bloques (EC), y sino elegimos una dirección en la que moverse (ED). La dirección puede ser aleatoria (70% de posibilidades) o en la misma dirección que llevaba.

Con (Q>0) controlamos si los enemigos son vulnerables. Se reduce a medida que pasamos niveles.

En cada pasada del bucle principal muevo un único enemigo, de 8 en 8 pixels (doble de rápido que el protagonista). Son más rápidos pero se mueven menos... pero al moverlo compruebo si está tocando al Munchkin. En caso afirmativo perdemos la única vida de que disponemos. Igual que el original.

La velocidad según el movimiento, tanto del protagonista como de los perseguidores se ha guardado en matrices. Va bien para poder incrementar las coordenadas X e Y según convenga sin tener que hacer cálculos o IF extras.

El juego no es todo lo fluido que me gustaría pero funciona más que bien, y el aspecto es idéntico al original, excepto la parte de los marcadores. Se podría haber simulado pero habría llevado demasiado tiempo actualizar el marcador.

La inteligencia de los enemigos tampoco es nada del otro mundo. Simplemente se mueven hacia una dirección elegida la azar. Esto los hace más imprevisibles, pero bastante más tontos. Eso si, agiliza el programa.


Los hay que son el primo de ZUMOSOL,
y los hay que son el primo de ZITROR...

Va por ti, Rafa !!! ;)

Pues nada más, solo me queda esperar que os guste.

Os invito a probarlo.





DSC_0666.jpg
DSC_0666.jpg (109.73 KiB) Visto 10717 veces

Munchkin_0001.gif
Munchkin_0001.gif (4.87 KiB) Visto 10717 veces

Munchkin_0002.gif
Munchkin_0002.gif (4.59 KiB) Visto 10717 veces

Munchkin_0003.gif
Munchkin_0003.gif (4.29 KiB) Visto 10717 veces

Munchkin_0004.gif
Munchkin_0004.gif (4.92 KiB) Visto 10717 veces
Última edición por dancresp el 13 Feb 2017, 18:13, editado 1 vez en total.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
xgipe
Atari 1040 STf
Atari 1040 STf
Mensajes: 941
Registrado: 26 May 2010, 15:59
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sega Master System
Primera consola: Videopac
Ubicación: Ankh-Morpork
Gracias dadas: 88 veces
Gracias recibidas: 69 veces

Re: Munchkin - MSX

Mensajepor xgipe » 19 Mar 2013, 17:42

=D> Gran juego, sí señor. :)

Un placer colaborar con los CAS... :fant:
BLOAD "CAS:",R
Found: WIN3.11

Avatar de Usuario
radastan
Amiga 2500
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: Munchkin - MSX

Mensajepor radastan » 19 Mar 2013, 18:05

¡Buenísimo! y genial ideal lo de proporcionar el CAS y el WAV.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
araubi
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 177
Registrado: 11 Sep 2012, 11:06
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Nintendo SNES
Primera consola: Sony PlayStation 1
Gracias dadas: 4 veces
Gracias recibidas: 4 veces

Re: Munchkin - MSX

Mensajepor araubi » 19 Mar 2013, 18:12

Gracias por este regalito y por toda la información que das.

Me he tomado la libertad de subir un pequeño vídeo a youtube:


Davidgs
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 584
Registrado: 28 Abr 2011, 00:17

Re: Munchkin - MSX

Mensajepor Davidgs » 19 Mar 2013, 18:25

Es genial, que ganas tengo de sentarme a copiar un listado en el MSX. Y luego trastearlo, a ver si aprendo algo!
Que en mi tumba escriban..."Game Over"
http://www.va-de-retro.com

Avatar de Usuario
Mode2
Amiga 2500
Amiga 2500
Mensajes: 2621
Registrado: 08 Oct 2009, 23:53
Sistema Favorito: Amstrad CPC
primer_sistema: Amstrad CPC
consola_favorita: Atari 2600
Primera consola: TV Games/Pong Clone
Ubicación: The Grid
Gracias dadas: 1 vez
Gracias recibidas: 8 veces
Contactar:

Re: Munchkin - MSX

Mensajepor Mode2 » 19 Mar 2013, 19:02

¿Juego divertido más el listado del juego comentado? ¡¡Fabuloso, Danscrep!! Gracias.
BUSCO: VideoPac+, Jaguar, Saturn, Micromanía nº1 1ª época, Amstrad Semanal, MicroHobby, juegos (especialmente Atari, CPC y Vectrex), Newbrain, Aquarius, Sam Copué, 520 ST, manual +3, manual CPC664.

Sankyo
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 240
Registrado: 30 Jul 2007, 20:53
Sistema Favorito: MSX
primer_sistema: MSX
Ubicación: Alicante
Gracias dadas: 5 veces
Contactar:

Re: Munchkin - MSX

Mensajepor Sankyo » 19 Mar 2013, 20:25

Gracias por el trabajo dancresp ¿Podrías pasarlo tú o alguien a formato .rom o .dsk para poder cargarlo directamente en la Flash SCC+ SD de Pazos?

Avatar de Usuario
zitror
Amiga 2500
Amiga 2500
Mensajes: 5349
Registrado: 02 Jul 2006, 00:16
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Ubicación: El interior de un Z80
Gracias dadas: 248 veces
Gracias recibidas: 103 veces
Contactar:

Re: Munchkin - MSX

Mensajepor zitror » 19 Mar 2013, 21:10

Coincido contigo, uno de mis juegos preferidos de Videopac, ¡excelente elección y excelente trabajo! =D>

Salu2 ;)
(C) 1.982 Sinclair Research Ltd

La buhardilla de Zitror

Avatar de Usuario
Jaimen
Amiga 1200
Amiga 1200
Mensajes: 1656
Registrado: 17 Mar 2009, 13:39
Sistema Favorito: Amstrad CPC
primer_sistema: Amstrad CPC
Ubicación: Madrid
Gracias dadas: 156 veces
Gracias recibidas: 19 veces

Re: Munchkin - MSX

Mensajepor Jaimen » 20 Mar 2013, 08:02

Estupendo, gracias por compartirlo... :D
Mi galeria de fotos en 500px.com

Avatar de Usuario
xgipe
Atari 1040 STf
Atari 1040 STf
Mensajes: 941
Registrado: 26 May 2010, 15:59
Sistema Favorito: MSX
primer_sistema: MSX
consola_favorita: Sega Master System
Primera consola: Videopac
Ubicación: Ankh-Morpork
Gracias dadas: 88 veces
Gracias recibidas: 69 veces

Re: Munchkin - MSX

Mensajepor xgipe » 20 Mar 2013, 10:05

Sankyo escribió:Gracias por el trabajo dancresp ¿Podrías pasarlo tú o alguien a formato .rom o .dsk para poder cargarlo directamente en la Flash SCC+ SD de Pazos?


Joer... ¡qué mantas que sois! ¿Dónde está ese espíritu cacharrero? :mrgreen:

Dame un poco de tiempo, y te preparo un DSK. :ordenador2:

Saludos,
Xgipe

Edito:
Venga, una ronda de DSK para todos. Usadlo con moderación... :jumper:
Adjuntos
Munchkin_Scainet.rar
(4.1 KiB) Descargado 327 veces
Última edición por xgipe el 14 Feb 2017, 16:00, editado 1 vez en total.
BLOAD "CAS:",R
Found: WIN3.11


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado