ROM hacking

De Wikipedia, la enciclopedia libre
(Redirigido desde «Rom Hacking»)
Ir a la navegación Ir a la búsqueda

Se entiende por ROM hacking o ROM hack, al proceso de alteración de la imagen o volcado del soporte original de un videojuego o programa (por ejemplo, la memoria ROM de un cartucho o circuito integrado, o la superficie de un disco óptico --CD-ROM, DVD-ROM o BR-ROM--, generalmente estructurada según el sistema de archivos estándar ISO 9660). Dicho proceso puede tener por objetivos tanto la corrección de fallas o modificación, a veces con fines críticos, creativos o satíricos, de ciertos detalles o aspectos del juego, la traducción, o incluso la creación de nuevos juegos basándose en la mecánica, estructura y el formato de otro original; siendo quizá la traducción la tarea más frecuente, valorada y de mayor aplicación práctica.

El término proviene de la combinación de dos conceptos: ROM y Hacking. La ROM es un acrónimo de la expresión inglesa Read-only memory, traducida como memoria de solo lectura, que, por lo general se refiere a los chips no modificables, programados y ensamblados de fábrica en la mayoría de circuitos integrados y cartuchos insertables en ranuras de expansión de computadoras. Estos, además de controladores o drivers, contienen y permiten la ejecución de juegos y programas de aplicación en ordenadores personales antiguos, o microordenadores, y en muchas videoconsolas[1]​; en el mundo de la emulación y el ROM hacking, el término se aplica comúnmente, por extensión, a las lecturas o volcados (en inglés dumping) que los aficionados a estos juegos y plataformas antiguas han ido realizando, con ayuda del instrumental adecuado, a los soportes de memoria secundaria o almacenamiento de datos, tales como los discos duros, de los ordenadores modernos, en forma de archivos o imágenes ROM.[2]

El hacking, hack, o hackeo, se refiere al arte informático de construir y solucionar problemas que atenten contra la eficacia o vulnerabilidad de un sistema o aplicación o limiten su capacidad, así como a las pequeñas modificaciones hechas a estos para mejorar, modificar o ampliar su funcionamiento. En otras palabras, ROM hacking es el arte de modificar y perfeccionar el funcionamiento de imágenes ROM, o de cualquier soporte o formato cuyo contenido sea el de un programa o un juego, como la imagen ISO de un disco óptico o CD/DVD-ROM, la imagen de cinta secuencial (.TAP, .TZX...) de un casete o cinta magnética, la imagen de disco (.IMG o .DSK) de un disco flexible o el propio archivo ejecutable (.EXE, .COM, .bin o .SCR) o módulo (.DAT, .PAK, etc.) de un programa, directamente desde su código en bruto, ya compilado, en el producto comercial final, sin disponer del código fuente; o lo que es lo mismo, desde su archivo binario o código máquina.

Herramientas necesarias[editar]

El individuo que se dedica a realizar tal labor, ya sea de forma sistemática, u ocasional, como aficionado, se denomina ROM hacker.

Para poder desempeñar su labor de una manera eficaz y precisa, el ROM hacker suele acompañarse de herramientas varias, cuya utilización será tratada en la siguiente sección.

  • Un editor hexadecimal, que da acceso a todos los datos de la ROM o cualquier archivo a partir de sus bytes, convenientemente señalizados mediante sus códigos ASCII, generalmente en números hexadecimales (por ser los más económicos desde el punto de vista de simetría, espacio y representación, capaz de representar 8 bits, 1 byte (256 números posibles), utilizando tan solo dos dígitos (desde el «00» hasta el «FF»)). Algunos de los editores más conocidos son el thingy (y su versión gráfica thingy32), el hex editor o el HxD.
  • Un editor de tiles o de sprites, para poder editar ciertos gráficos necesarios, como la tipografía y símbolos de texto especiales, en las traducciones. Esto es fundamental para incluir, por ejemplo, la eñe, acentos, o ce con cedilla, en lenguas como el castellano, el portugués, y otras lenguas romances; los gráfiumlaut, en las lenguas germánicas; o sistemas cos alternativos, tanto silábicos o ideográficos, en idiomas como el japonés, el coreano o el chino, o alfabéticos, en idiomas como el griego, el ruso (y otras lenguas eslavas) o el árabe.
  • Un buscador de cadenas de texto, que permita localizar la posición exacta de los textos, así como deducir su tabla de caracteres o códigos, en caso de que la codificación del texto no sea estándar (a diferencia de como ocurre en los IBM PC compatibles y en muchas computadoras con el sistema código ASCII), mediante la búsqueda de palabras que aparecen durante el programa o el juego, en modo búsqueda relativa, restando las posiciones de cada letra en el alfabeto en función de su distancia a partir de la letra «a». Esta función suele ser incluida en muchos de los editores hexadecimales especializados modernos.
  • Opcionalmente, una herramienta depuradora, que permita la interpretación y ensamblaje, mediante instrucciones de ensamblador, del código de máquina del juego, específico de la arquitectura de la computadora madre. Esta función puede realizarse manualmente, manipulando los bytes del código mediante el propio editor hexadecimal, si se dispone de la conveniente tabla de códigos e instrucciones de ensamblador del procesador de la computadora madre (a cada código hexadecimal de 1 o más bytes, corresponde una instrucción específica del procesador de la computadora madre, con sus parámetros). Esta técnica manual fue la empleada originalmente, para la programación de los primeros ordenadores, cuando aún no se disponía de las herramientas ensambladoras correspondientes. La herramienta depuradora permite, sin embargo, realizar un seguimiento, instrucción por instrucción, en orden, de cualquier parte del código del programa o juego, y observar el comportamiento efectuado.
  • Herramientas especializadas, preprogramadas y compiladas por otros Rom hackers, como herramientas específicas de ciertos juegos, para editar niveles, objetos, características de enemigos o personajes, etc. Algo muy recurrente en juegos de rol o estrategia o, en el caso de los niveles, en los plataformas.
  • Finalmente, un buen programa emulador del sistema específico del formato al que pertenece el programa o juego, para poder comprobar los cambios efectuados sobre el mismo, y apuntar posibles errores o despistes que hayan podido escaparse, para su corrección futura.

Métodos[editar]

Dado que los juegos son creados por gran variedad de programadores y equipos, los datos de la ROM pueden ser muy diversos.

Edición hexadecimal[editar]

Editar textos es una de las formas más básicas del ROM Hacking. Muchos juegos no almacenan el texto en formato ASCII, y por esto, se han desarrollado algunos editores hexadecimales especializados, que son capaces de decir qué valores de bytes corresponden a cada letra del alfabeto, para facilitar la edición de texto; un archivo que define estas relaciones byte = letra es denominado archivo tabla[3]​. Otros juegos también usan técnicas simples de comprensión de texto (como la codificación de pares de bytes, también llamada codificación dual o DTE, en la cual ciertas combinaciones de dos o mas letras se codifican como un byte) que un editor hexadecimal bien preparado puede facilitar su edición.

Si se conoce la estructura y ubicación de algunos datos binarios y no hay una herramienta especifica del juego que pueda editar esta información, se suele recurrir igualmente a los editores hexadecimales. Algunos hackers intrépidos también realizan una edición de niveles con un editor hexadecimal, pero esto es extremadamente difícil (excepto en juegos cuyo formato de almacenamiento de niveles se asemeja mucho a como se muestra en un editor hexadecimal).

Edición de gráficos[editar]

Otro apartado básico del hacking es la edición de gráficos, que consiste en cambiar la apariencia de los entornos, los personajes, las fuentes u otras cosas del juego. El formato de los datos gráficos varía enormemente de una consola a otra, pero la mayoría de las más antiguas (NES, Super NES, Game Boy, etc.) almacenan gráficos en tiles, los cuales son unidades de datos de 8x8 píxeles, que están dispuestos en pantalla para producir el resultado deseado. La edición de los tiles también es posible mediante un editor hexadecimal, pero generalmente se logra con un editor de tiles, que puede mostrar los datos de la ROM de una manera gráfica, encontrar tiles y editarlos.

Los hacks de gráficos pueden ir desde simples ediciones (editar los sprites del protagonista), portar personajes de otro juego o cambios temáticos (por lo general cambios de paletas; ver mas abajo).

El hacking de gráficos más sofisticado consiste no sólo en cambiar tiles y colores, sino también la forma en que se organizan o se generan grupos de tiles, lo que da más flexibilidad y control sobre la apariencia final del juego. Esto se logra mediante la edición hexadecimal o una herramienta especializada (ya sea para el juego específico o un sistema específico). Un buen ejemplo de hack gráfico es el incompleto Pokémon Torzach, un hack que intentó agregar una nueva generación de Pokémon y una gran variedad de tiles. El hack ha sido descontinuado, pero aun sirve como un buen ejemplo de lo que se puede lograr con las herramientas disponibles.

Edición de paletas[editar]

Otro método común del ROM hacking es la alteración de paletas, donde los valores de color se modifican para cambiar los colores que ve el jugador en el juego (cosa que a menudo va muy de la mano con el hacking de gráficos); los valores de la paleta se almacenan comúnmente en hexadecimal. Esto es bastante fácil para los juegos de NES, cuyos gráficos usan un conjunto predefinido de colores entre los que selecciona el juego; el hacking de paletas en este caso implica cambiar cual de esos colores se seleccionan.

El asunto es un poco mas complicado con los juegos de Super NES y otros sistemas, que almacenan valores de color RGB absolutos. Los editores de paletas suelen ser sencillos y, a menudo, están junto a editores de nivel o editores de gráficos en la misma herramienta.

Edición de niveles[editar]

Una de las formas más populares del ROM hacking, la edición de niveles, implica la modificación o el rediseño de los niveles o mapas de un juego. Esto se hace casi exclusivamente con un editor especialmente diseñado para cada juego, llamado editor de niveles. Se puede editar un nivel para hacer que el juego sea más desafiante, para alterar el flujo de la historia, o simplemente para dar algo nuevo a un juego viejo. Combinado con un amplio hacking de gráficos, el juego puede adoptar una apariencia y sensación muy diferentes.

Edición de datos[editar]

Un componente central de muchos hacks (especialmente de los videojuegos de rol) es la edición de datos como las propiedades del jugador, de los objetos y las de los enemigos. Esto generalmente se hace a mano (con un editor hexadecimal) si se conoce la ubicación y la estructura de los datos, o con una herramienta específica del juego que tenga esta funcionalidad. Con esto, un ROM hacker puede alterar el funcionamiento de las armas, el cómo de fuertes son los enemigos o cómo actúan. Esto se puede hacer para que el juego se mas fácil o mas difícil, o para crear nuevos escenarios para el jugador.

Ensamblación[editar]

Sin duda alguna la técnica de ROM hacking más poderosa, y posiblemente las más difícil, es editar el código real del juego, un proceso comúnmente llamado ASM hacking (ASM significa ensamblación, refiriéndose al método por el cual podemos editar directamente las instrucciones que lee el procesador, llamado código máquina).

No existe un patrón establecido para el ASM hacking, ya que el código varia mucho de un juego a otro, pero la mayoría de los hackers de ASM avanzados utilizan un emulador equipado con un depurador (debugger) o rastreador (tracker), o ejecutan la ROM a través de un desensamblador, luego analizan el código y lo modifican usando un editor hexadecimal o ensamblador, según sus necesidades.

Aunque es bastante complejo en comparación con los métodos nombrados anteriormente, todo es posible con el hacking de ASM (por supuesto, dentro de los límites del hardware/software de la consola), desde la alteración de la inteligencia artificial enemiga hasta el cambio en la aparición de gráficos. Por supuesto, las posibilidades todavía están limitadas por la capacidad del hacker para comprender y modificar el código existente.

Si los desarrolladores usaron otro lenguaje de programación, el hacker puede compilar su propio código para el juego en el mismo idioma si tiene acceso a un compilador adecuado. Un ejemplo de esto sería usar el lenguaje C para hackear juegos de Nintendo 64, ya que MIPSGCC puede compilar código para esta consola.[4][5]

Edición de música[editar]

Los hacks que modifican la música son relativamente escasos, debido a la gran variedad de maneras en que los juegos almacenan datos de música (de ahí la dificultad de localizar y modificar estos datos) y las dificultades de componer música nueva (o transferir música de otro juego). Como la modificación de música es muy poco frecuente, muchos hacks no tienen añadida ninguna música importada o compuesta.

El programa SapTapper se puede utilizar para hackear los datos musicales de Game Boy Advance, sin embargo, muchos juegos de GBA usan el motor M4A (también llamado Sappy Driver) para la música. Se crearon otras herramientas para trabajar con este motor, como Sappy 2006. Existe una variante del mismo motor que se usa en los juegos de Nintendo 64, donde muchos de los juegos usan el mismo formato, aunque utilizan diferentes bancos de sonido. Se creó una herramienta conocida como N64 Midi Tool para editar las secuencias que usan la mayoría de los juegos de Nintendo 64, aunque no funciona en los juegos "first-party" de N64 debido a que usan un motor ligeramente diferente, como es el caso de Super Mario 64.

Varios[6]​ juegos de Mega Drive usan un motor de sonido no oficial conocido como SMPS[7]​, que ha sido investigado durante décadas por muchos hackers[8]​. Hoy en día, existen varias[9]​ herramientas para editar la música de los juegos que usan el motor SMPS (en particular los juegos de Sonic the Hedgehog), y muchos de ellos se publicaron en la workshop de Steam[10]​.

Expansión de la ROM[editar]

En términos generales, un ROM hacker normalmente no puede agregar contenido a un juego, sino simplemente editar el ya existente. Este límite se superar a través de la expansión de la ROM. En este proceso, se aumenta el tamaño de la ROM, dejando espacio para más contenido y, a su vez, un juego más grande. La dificultad para hacer esto varía según el sistema para el que se creó el juego. Por ejemplo, expandir una ROM de NES puede ser difícil o incluso imposible debido al mapper utilizado en el juego. Si un mapper permite 16 bancos de memoria y todos ellos están siendo usados, expandir la ROM aun más es imposible sin convertir de alguna manera el juego a otro mapper, lo que podría ser fácil o extremadamente difícil. Por otro lado, expandir un juego de SNES es (relativamente) fácil y directo. Para utilizar el espacio adicional, las partes del código del juego deben ser modificadas o reescritas (relacionado con el ASM Hacking mencinado más arriba) para que el juego sepa dónde buscar. Otro tipo de expansión de ROM que es bastante fácil es la de ROMs de GBA. Las ROMs en sí son generalmente muy pequeñas, pero el espacio de memoria disponible a veces lo supera en múltiplos de hasta 17.

Distribución[editar]

Una vez que se completa un hack (o una versión incompleta pero adecuada para un lanzamiento provisional, generalmente una beta o una demo) se puede publicar en Internet para que otros usuarios puedan jugarlo. La forma generalmente aceptada de hacer esto es mediante la creación de un parche no oficial (en formato IPS u otros) que se puede aplicar a la ROM no modificada. Esto, y generalmente algún tipo de documentación de ayuda, se guarda en un archivo y se sube a alguna página web.

IPS es un formato para registrar las diferencias entre dos archivos binarios (en este caso, entre la ROM no modificada y la ROM hackeada) y es adecuado para hack ROMs. IPS todavía se usa a día de hoy para parches pequeños; sin embargo, a medida que las ROMs se hicieron más grandes, este formato se volvió inservible, lo que llevó a crear nuevos formatos de archivo, como NINJA y PPF (formato de parche de PlayStation). PPF todavía se utiliza hoy en día, particularmente para parchear archivos de gran tamaño, como imágenes ISO CD y juegos de Nintendo 64.

Un nuevo formato de parche, llamado UPS, también fue desarrollado por la comunidad de ROM hackers, diseñado para ser el sucesor de IPS y PPF.[11]​ Un formato de parche más reciente todavía, el sistema de parches APS[12]​, también ha sido desarrollado por un hacker de GBA. El sistema APS es más eficiente en el uso del espacio, es reversible y es más rápido que sus predecesores[13]​.

El propósito de distribuir un hack en forma de parche es evitar los aspectos legales de la distribución de ROMs completas; el parche registra solo lo que ha cambiado en la ROM, por lo que al distribuirlo no suele (o no debe de) incluir partes del juego original. Un parche también suele ser mucho mas pequeño que una ROM completa (una ROM de NES puede pesar desde 8KB hasta 2MB, una ROM de Super NES puede pesar desde 256KB a 6MB)

En un ejemplo de distribución legal, Sega lanzó un centro virtual basado en Steam para su antigua colección de juegos de Mega Drive/Genesis, llamado Sega Mega Drive Classics Hub. Además de permitir a los jugadores reproducir versiones emuladas de estos juegos más antiguos, aprovecha el soporte Steam para poder descargar el contenido creado por el usuario a través de la Steam Workshop, lo que permite encontrar hack ROMs de cualquiera de los clásicos de Sega.[14]

Clasificación por videojuegos[editar]

En realidad, muchas veces la profundidad del nivel de hacking se diferencia por la ROM base utilizada, ya que estas diferencian enormemente la capacidad de personalización del juego. A pesar de ello, los juegos tienen una tendencia general a ser cada vez más complejos y más difíciles de modificar, acercándose más al desarrollo de videojuegos que al ROM Hacking en sí. Por otro lado, el proceso de ingeniería inversa de cada ROM es muy variado y depende principalmente de la consola, y también en parte de la empresa creadora y la distribuidora. Mientras que, en una misma consola, existen muchísimos tipos de archivos que son genéricos y comunes a muchos juegos de la consola, existen también formatos que pueden llegar a ser exclusivos de un solo videojuego. No obstante, suelen usarse casi siempre métodos similares, explicados más arriba en las herramientas básicas de un ROM hacker, y valiéndose de la información de software y hardware que muchas páginas ofrecen sobre varias consolas.

Muy popular es el Poke Hacking, edición de ROMs de Pokémon, cuya capacidad de admitir nuevos datos es enorme. Actualmente, las páginas más conocidas para esto son The PokéCommunity (en inglés) y Whack a Hack Foro! (en español).

Véase también[editar]

Referencias[editar]

  1. «Basic NES Reproduction». 
  2. «Dictionary of ROMhacking terms». ROMhacking.net. 
  3. «Tabla de conversión estándar para ASCII». www.ascii.cl. 
  4. «vg64tools - Project Hosting on Google Code». Code.google.com. Consultado el 9 de septiembre de 2009. 
  5. «Super Mario 64: Pong Of Death (messiaen)». Sites.google.com. Consultado el 9 de septiembre de 2009. 
  6. «Mega Drive/Genesis Sound Engine List - GDRI :: Game Developer Research Institute». gdri.smspower.org. 
  7. «SMPS - Sega Retro». segaretro.org. 
  8. «Valley Bell's SMPS Research». Sonic and Sega Retro Message Board. 
  9. «Sonic Hacking Utilities - Sonic Retro». info.sonicretro.org. 
  10. «Steam Workshop :: SEGA Mega Drive & Genesis Classics». steamcommunity.com. 
  11. «New patching format, UPS, debuts today». www.romhacking.net. 
  12. «The PokéCommunity Forums - View Profile: HackMew». www.pokecommunity.com. 
  13. «Newest patching format, APS, recently released». www.pokecommunity.com. 
  14. Yin-Poole, Wesley (29 de abril de 2016). «Modders are already having fun with Sega Mega Drive classics on Steam». Eurogamer. Consultado el 3 de mayo de 2016. 

Enlaces externos[editar]

  1. Data Crystal Wiki, la wiki dedicada al ROM hacking (en inglés).
  2. RHWiki, una wiki alemana dedicada al ROM hacking (en alemán).