ZZT escribió:Genial Pepe, no se si lo sabes, pero Montezuma es el juego que todo el mundo recuerda, se puede decir, que es el número uno. Muchas veces conversé con más de alguien sobre la modificación del juego.
Podrías contarnos un poquito más como lo hiciste?
Claro que estoy al tanto, de hecho para mi es por lejos el juego numero uno de Atari y el gran abuelo del Super Mario Bros. y una obra maestra.
De niño siempre quise un atari, lo jugaba adictivamente en casa de primos y amigos, hasta que finalmente tuve uno mas bien tarde, por el año 89/90 (65xe con xc12). Mi primer juego fue el Montezuma, el cual ya conocía, fue el primero que compré en el Compumanque y lo jugaba en un televisor blanco y negro.
Actualmente soy Informatico básicamente gracias a Montezuma y Atari, siendo Basic Atari el primer lenguaje en que programé (cuantas horas programando desde revistas cientos de lineas para programar una nave que aterrizaba en la luna, todo por texto jaja)
Alrededor del año 2000, y producto de la nostalgia, llegue a los emuladores, y volvi a jugar éste y muchos otros juegos clasicos (y no tantos) que recordaba de mi niñez, tanto para Atari, Nintendo, Super nintendo, Mame, etc. Incluso por esa epoca programé incompletamente un emulador de Chip-8, que de alguna forma me ayudó a entender mucho mejor como funcionan los emuladores (y entre otras cosas, como entender opcode y codigo hexadecimal)
Como anécdota, al día siguiente del terremoto del 2010, yo viviendo un depto. en santiago, al salir de mi depto. veo que el vecino había dejado algunos "escombros" para ser botados a la basura... entre ellos un Atari 65XE con una casetera XC11 y todos los cables funcionando

!! Eso fue claramente una señal, pero no fue hasta unos 3 a 4 años mas tarde que tomé este Atari y empecé a "jugar" con él, grabando juegos en cassette con el cas2wav y luego empezando a armar mi pequeña colección (actualmente tengo 2 800xl, 1 65xe y 1 130xe, ademas de caseteras, controles y un sio2sd de lotharek). También me he armado de una pequeñísima coleccion de Super Nintendo, luego que reparé uno que tenia de hace 20 años, el cual nunca pude usar porque se compró en USA y mi hermana lo conectó sin saber sin conversor de voltaje. Por suerte era solo el fusible asi que busque por youtube y logre reemplazarlo, así que ahí está funcionando sin problemas.
Ya ultimamente, diría finales del año pasado, me picó el bichito por "explorar" un poco mas allá el Montezuma, mas que nada buscar los típicos cheats (vidas infinitas, cambios de piezas, cambio de puntaje, etc), con el fin de entretenerme un poco y de pasada, ver si podía cumplir un sueño de niño, ver que hay mas allá de los bordes de la pirámide. Qué había mas allá de esa muralla que no permitía cruzar hacia el otro lado del borde de la piramide? Qué había a la izquierda del Lava Pit? Era posible cruzar al otro lado?
Existe algo cruzando la frontera del mapa?

Teniendo estas inquietudes en mente, me topé rapidamente con Altirra, que tiene lejos el mejor debugger de emulador de 800xl en la actualidad. Ademas posee un sistema de busqueda de Cheats bastante util (aunque un poco limitado), que rapidamente me permitio empezar a entender donde se almacenaban las vidas, la etapa, la pieza, el piso, el puntaje y asi hasta que llegue al sector de memoria donde se almacenan las piezas para ser desplegadas. He ahí el santo grial, que me permitió modificar en ese sector para poder borrar las murallas que no permitían cruzar las "fronteras" de la pirámide. Otro punto importante fue descubrir las posiciones de memoria que almacenaban el eje X e Y de Panama Joe, ya que también me permitiría cruzar el Lava Pit y ver que habia al otro lado.
Cruzamos el Lava Pit, que tendremos al otro lado?

Espero hacer un video pronto con los resultados de estos experimentos. Tambien liberaré más versiones modificadas del Montezuma, entre otros tengo una versión en la que eliminé todos los enemigos e items, además permite seleccionar todas las etapas (de la 2 a la 9, a diferencia del juego original que permite la 2 y 3) desde el inicio del juego, con el fin de realizar una exploración completa de las 100 piezas que componen la pirámide.
Por último, uno de los temas el cual tengo que seguir buscando una buena solución es el poder comprimir aun más las piezas para que ocupen el menos espacio posible. En memoria pesan 1000 bytes (el tamaño de cada pieza son 40 bytes de ancho por 25 de alto), pero he logrado almacenarlas en el XEX comprimidas y utilizo el algoritmo de compresion LZ4 HC, que me permite almacenarlas a 1/4 de su tamaño, unos 200 a 250 bytes, y descomprimirlas "on the fly" sin impactar casi la performance del juego. Pero si consideramos que la piramide completa son 100 piezas y como quiero que sean todas custom y diferentes entre si, ya necesito 25kb aprox solo para almacenarlas, tal vez alguien me puede sugerir otros método de compresión o alternativas que me puedan servir.
Saludos,
Pepe
PD: Toda el codigo nuevo que le he insertado al ejecutable ha sido realizado utilizando HxD y Opcodes en hexadecimal, los cuales transcribo desde unas notas en pseudo assembler donde programo las funcionalidades y subroutines que luego voy integrando en el código del juego. Me agarro de la subrutina que realiza la carga de la pieza (que se utiliza al partir el juego y cada vez que se cambia de pieza), ahí hago un JMP a mi codigo donde realizo mi propia carga de la pieza, enemigos e items, de una forma similar a como lo carga el juego original, pero utilizando mis definiciones.
PD2: Entre las herramientas que estoy utilizando para este romhack están:
HxD
Omnivore
Altirra
AtariMapMaker
AtariFont Maker
PD3: Entre las webs de consulta mas recurrentes están:
https://www.atarimax.com/jindroush.atari.org/aopc.htmlhttps://atariwiki.org/wiki/Wiki.jsp?page=Atari%20Assembler%20Editorhttps://www.atariarchives.orgentre otros y mucho google