Yo en lo personal no soy un jugador hardcore gamer de última generación, con los años me he vuelto más casual y tiendo a deshacer los pasos jugando juegos retro, aparte de eso, mi personalidad es anti mainstream y tiendo a buscar las cosas raras, joyas ocultas, juegos indies, hacks y mods de juegos.
Últimamente en estas vacaciones me descargué un pack de juegos hack de un montón de juegos de NES, algunos son traducciones, otros cambian los sprites y algunos parecen juegos completamente distintos, donde cambian tanto los sprites, los niveles, la historia y hasta las canciones, todo a base de modificar la memoria del juego. Eso me antojó de querer hacer mi propia versión de Super Mario Bros,
En esta ocasión aprovecharemos para entrar un poco a hablar de la memoria y a modificarla un poco untándonos la mano y cometiendo errores, para ello es necesario descargar la rom de Super Mario Bros original, tener el emulador FCEUX, que tiene algunas herramientas interesantes para toquetear la memoria y un programa que sirve para modificar sprites el YYCHR_net.
Modificando Sprites
Para eso procedemos a abrir el programa YYCHR, este programa es muy simple de usar, solo basta abrir una rom e ir al final para ver las partes que componen los sprites. El programa cuenta con dos pantallas, la primera permite visualizar los datos en una vista general, la segunda permite modificar una parte seleccionada de la vista general.
El programa es capaz de abrir varios tipos de roms, desde atari, NES, game boy, Sega y SNES, en resumen juegos de 16 bits hacia abajo, también cuenta con paletas de colores que puedes escoger a tu gusto para visualizar mejor lo que haces.
Quizás nada de lo que ves en esta imagen tenga sentido, pues es muy parecido a cuando se corrompe una rom en medio de una partida, pero a la vez puedes identificar las partes del juego seccionadas en pedazos, cada trozo tiene un ancho y alto de 8x8 y cada trozo admite cuatro colores, de los cuales tres son colores y uno representa transparencia.
Como puede verse, hay retos importantes, ¿Como aprovechar esas limitaciones para mejorar la apariencia del juego?. Entender este reto te hará crecer como diseñador en cualquier ámbito, aunque los programas te permitan libertad total, el imponernos limitaciones hace que trabajemos más rápido y de forma consecuente.
Aparentemente no hay muchos cambios aparentes, solo algunos cambios sutiles que he hecho a base de ensayo y error, jugando el juego una y otra vez.
¿Cómo afronté las limitaciones?. En este caso usé el color que se usa para la transparencia como un color ambiental si el cielo es rojo, entonces los ladrillos se teñirán en alguna esquina de rojo, si el cielo es azul, lo mismo ocurrirá en los bordes.
La otra técnica que apliqué fue usar el patrón dithering para dar la sensación óptica de que existe más tonos de los que no hay, pero no debes abusar de esta tecnica porque en exceso todo tiende a aparentar verse como ruido.
Por último apliqué colores antagonistas en las esquinas opuestas, Mario Bros es un juego de cubos y generalmente los cubos los pintan homogéneamente del mismo color en las 4 esquinas, en este caso apliqué luz en las esquinas superiores y sombra en las inferiores, para darle un poco más de vida.
Modificando las paletas del juego.
Lo primero que hay que entender es que los colores de la NES son limitados y vienen en código hexagesimal, más o menos 16 tonos distintos y 4 valores de brillo distintos. Guarde esta imagen, ya que le servirá como croquis para lo que viene.
FCEUX tiene ventanas interesantes, en este caso destaco PPU Viewer, que nos da información de lo que se ve en la pantalla del juego, permitiendo identificar los objetos y las paletas de color, estos valores son cambiantes de acuerdo a lo mostrado en pantalla.
Como vamos a modificar los colores del juego, vamos a fijarnos en la paleta de colores mostrados. Rápidamente edité la imagen para mostrar que hay 8 grupos distintos, donde el primer grupo son el azul del cielo y los tubos verdes, el segundo es el color del suelo y los ladrillos, el tercero puede ser las nubes y el HUD, El cuarto no lo sé, el quinto es Mario Bros, el sexto es el color del hongo de vida y las tortugas verdes, el séptimo es el color del hongo de crecimiento y las tortugas rojas, el octavo tampoco sé que es.
Si pasas el cursor sobre los colores, en la palabra palettes, te mostrará el código de ese color en concreto, anota al menos cuatro para en línea para encontrar la dirección de memoria.
Para modificar los valores esta la ventana e Hex Editor, que nos permite cambiar los valores dentro de la memoria, ver los cambios en el juego y grabar una rom modificada por nosotros.
Esta ventana permite modificar cuatro apartados, la primera es la memoria en la consola, esta es mejor no modificarla porque podría hacer que crashee el emulador, la segunda es la memoria PPU, que es la memoria gráfica y es donde podremos modificar las paletas y los sprites en el juego, pero su valor solo durará en la escena, si se cambia de escena y luego se regresa a la escena que modificamos, volverá a los valores originales, así que esta solo nos sirve para ver los cambios.
OAM Memory contiene el juego en sí, la música, las físicas, los textos, las escenas, los valores del HUD, pero al igual que PPU, solo conserva los valores en la escena.
Por último ROM Memory, esta es la que nos permite modificar los valores del juego y prácticamente hacer que cambie por completo, es aquí donde hay que hacer los cambios para que se guarden definitivamente.
Vamos a modificar el color del tubo por ejemplo: tomamos los primeros 4 valores 22-29-1A-0F
y en view, seleccionamos PPU Memory y presionamos CTRL+F, eso nos lleva a la dirección 3F00. Por un gusto personal quiero cambiar el verde 1A a 1C, si el cambio nos gustó entonces seleccionamos ROM Memory y buscamos los valores 22291A0F, si no lo encontramos, entonces pruebe a reducir las cifras, a mí me funcionó con 291A0F, esto me llevo en la dirección 0CD0 y procedo a cambiar el valor 1A por 1C, luego guardo los cambios en File/Save ROM y cargo nuevamente la ROM de Super Mario, para verificar que los cambios hayan surtido efecto.
El resto es repetir los pasos, al principio cuesta un poco adaptarse a hacer los cambios, pero luego le tomas cariño y puedes hacer cambios visuales más drásticos. Tiene que tener en cuenta que algunas escenas comparten las mismas paletas de colores, por ejemplo todas las escenas que son de día, con modificar una escena modificas todas, lo mismo ocurre con las escenas nocturnas, si modificas el color de los ladrillos se verá afectado tanto en las escenas diurnas como nocturnas al aire libre, cosa que es distinta en las escenas bajo tierra donde los ladrillos son azules.
También tiene que tener en cuenta que modificar el color de algunos objetos, puede afectar el color de otros objetos, por ejemplo los gumbas están asociados al color del suelo, lo mismo ocurre con los hongos y las tortugas, con los tubos y las montañas.
Conclusiones
contamos con apenas 64 colores o sea 8 bytes de color, una cuarta parte de los colores disponibles para un mapa de bits, estos colores varían según la región si es PAL o NTSC, donde si el emulador te permite modificar la paleta general, 8 tonos por canal, quizás para algunos estos sean muy pocos colores, pero creo que son más que suficientes para hacer un buen diseño.
El tamaño de los sprites tienen un tamaño fijo de 8x8 o sea 64 píxeles o 8 bytes, normalmente los sprites de un personaje son de 16x16, para Mario pequeño o Kirby, para Mario grande es de 16x32 y con base en estas unidades está construido los demás elementos que interactúan con el personaje.
Para ahorro de memoria, los arbustos en el juego es el mismo sprite de las nubes, las bolas de fuego de Mario, son las mismas bolas de la regleta de fuegos en los castillos, el mismo tubo donde está el banderín de victoria del nivel, es la cuerda de las poleas en la escena 3-1, las mismas hojas de las plantas carnívoras, son las mismas para la flor.
Trabajar con la memoria de las Roms de NES, te enseña como hacían los antiguos desarrolladores y grafistas para ahorrar recursos y nos da ideas de como aprovechar algunas técnicas para hacerlo en nuestros juegos.
A continuación dejo a disposición mi ROM hack para que la estudien y la sigan modificando, recomiendo que lean la documentación del mismo emulador y la del programa YYCHR para mejor entendimiento, esto es solo un abrebocas de como modificar una ROM.
No siendo más nos vemos en un próximo blog.
Commentaires