Preliminary Monty

El origen de este juego fue una filtración de la versión previa a la final que reprogramo Parker Brothers para 16k de memoria, ya que en ese tiempo era lo más económico para realizar cartuchos en ese tamaño.


El nombre original es Montezuma's Revenge igual que el demo que programo y vendió Robert Jaeger a Parker Brothers.


Preliminary Monty fue muy conocido con el alias de Montezuma. En el foro extinto de atariware por el mes de Febrero 13 del 2013, se realizó un pequeño análisis de esta versión la cual se expone a continuación.

Análisis


Primero que todo el modo grafico usado es el ANTIC 4, si no te suena en ATARI BASIC se conoce como grafico 28 (12+16) un ejemplo:

10 GRAPHICS 28
20 PRINT #6;"ATARIWARE.CL"
30 GOTO 30

Ahora desactivemos el Font del juego y agregamos el por defecto de la rom del atari. Pokeando la posición de memoria CHBAS con el valor $E0.



Como se ve todo está diseñado usando el cambio de juegos de caracteres, eso es cambiar la forma de una letra por otra cosa, ejemplo el fuego del juego son las letras DEFG. El personaje principal es lo único que está hecho usando Players.


Ahora que significa CHBAS ($2F4 o 756) es la posición de memoria donde está la definición del set de caracteres, por defecto nuestro ATARI está definida en $E0. Pero los juegos traen su propia y la definen en otra posición de memoria.


Bueno aquí nos damos cuenta de cuantos caracteres se usan para hacer ciertos objetos del juego, por ejemplo las llaves se usan 4 letras. También que las calaveras son Players.


https://www.atariware.cl/archivos/preliminary/preliminary6.png

Aquí se nota cuando se abre una puerta y el puntaje son caracteres cambiados, o sea que no es numero en pantalla, sino un conjunto de letras que forman el número del puntaje.


https://www.atariware.cl/archivos/preliminary/preliminary5.png

Por lo que se ve no es tan fácil como se ve.


Overlapping


Este efecto se trata de hacer 3 colores usando dos players juntos. Así lograron el personaje principal de este juego, si lo ven tiene 3 colores amarillo, rojo y un color rosado.


https://www.atariware.cl/archivos/preliminary/preliminary7.png

El tercer color se forma donde se unen algunos pixeles de los players, en este caso amarrillo y rojo formando el color piel. Este tercer color se forma usando el OR binario de los colores $1C (amarillo) y $34 (rojo) dando el color Rosado $3F.
Lo que me llama la atención antes ese efecto era muy poco usando en los juegos antiguos de la época.


Estaba pensando si puedo sacar sin gran complicación el set de caracteres. Me doy cuenta que el carácter que no se cambio es el espacio en blanco, ahora me pregunto si busco la serie de número que componen ese carácter en el binario daré con la redefinición de caracteres? ... o sea buscar 8 números 0 en algún editor hexadecimal.


Abrimos nuestro editor HxD y buscamos la secuencia $00 $00 $00 $00 $00 $00 $00 $00, se repite como 4 veces en todo el binario del juego, debemos tomar 1024 caracteres suponiendo que redefine todo el set de caracteres. Eureka lo he encontrado a la segunda prueba. He tomado desde la posición 10046 hasta 11069 (1024 caracteres de largo)


https://www.atariware.cl/archivos/preliminary/preliminary8.png

Copie lo seleccionado y genere un nuevo archivo montefont.fnt desde HxD y pegue el bloque seleccionado anterior mente. Veamos con algún editor de Font el contenido del nuevo archivo.


https://www.atariware.cl/archivos/preliminary/preliminary9.png

Con esto concluimos que no cambia todo el Font, sino que solo cambia 106 caracteres de un total de 128.


Hoy en día es fácil saber los pixeles que se usan para los players, gracias a la herramienta omnivore que te lo muestra en forma gráfica en unas de sus columnas.


https://www.atariware.cl/archivos/preliminary/preliminary10.png

Como se ve sale fácil detectar los bytes correspondiente a los movimientos de la calavera, después araña, etc… todos los personajes que usan los players.

Mejoras


A continuación con todo lo analizado y aprendido de cómo funciona el juego realice una versión con mejoras.

Personaje


En la versión previa y final nuestro personaje le faltan unos pixeles, tal como ves se en las imágenes.


https://www.atariware.cl/archivos/preliminary/preliminary1.png

Caminando a la izquierda le falta un pixel arriba del brazo y otro caminando a la derecha le falta otro pixel entremedio de los dos botones de la camisa.


Detalles de los cambio en el player usando omnivore

38FEF6F7

Se cambia F7 por FF para que no aparezca el pixel en la camisa.

3E1C7E6F

Se cambia 7E por 7F para colocar pixel faltante arriba del brazo.

Nivel


Hay un nivel que llama la atención, todo se preguntaron en su momento que hay más allá.


https://www.atariware.cl/archivos/preliminary/preliminary2.png

Pero en realidad nada, ya que eran bytes erróneos que hacen que no se dibuje correctamente la pantalla. Nuestro amigo José Tomas Parga que creo un hack de este mismo juego llamado Montezuma Again! tuvo la gentileza de informar y la reparamos.


https://www.atariware.cl/archivos/preliminary/preliminary3.png

Detalles para reparar la pantalla :

BCF1: 08                PHP
BCF2: 05 CF             ORA $CF
BCF4: 05 E8             ORA $E8
BCF6: 03 A0             SLO ($A0,X)
BCF8: 25 00             AND $00

Se cambia 08 por CC y 00 por CC para colocar correctamente los ítems en la parte superior en la pantalla :

BCFD: 0A                ASL
BCFE: 01 08             ORA (WARMST,X)

Se cambia 0A por 3A y 08 por CC para dibujar correctamente el resto del la pantalla.


También se arregló esta otra pantalla.


https://www.atariware.cl/archivos/preliminary/preliminary11.png

Que por un byte erróneo muestra otra pantalla.


https://www.atariware.cl/archivos/preliminary/preliminary12.png

Detalles para reparar la pantalla :

BCFE: 01 08             ORA (WARMST,X)
BCFF: 08                PHP

Se cambia el último 08 por CC, para que dibuje la pantalla que corresponde.

Seleccionar niveles


En ambas versiones al inicio se puede seleccionar el nivel a partir desde 1 al 3 presionando la tecla SELECT, pero ahora puedes seleccionar hasta el Nivel 9 que es el último.


https://www.atariware.cl/archivos/preliminary/preliminary4.png

Detalle del byte cambiado :

AB07: A5 82             LDA $82
AB09: C9 03             CMP #$03
AB0B: D0 04             BNE $AB11

Se cambia 03 por 09 para que cuente hasta el 9.

Conclusiones


Entre ambas versión la filtrada y la original la única diferencia a la vista es que la original tiene un sonido cuando matas enemigos con el puñal y que la pantalla con problema esta reparada, por el momento la única que comparten es la del personaje.

Descarga


  • Versión Atariware reparada.
  • Versión Final en disco que vendió Parker Brothers.