Hola gente, quiero hacer pública una herramienta que comencé a desarrollar hace 5 meses, si bien ya era pública, no le hice mayor promoción, ya que queria pulirla lo suficiente como para atreverme a crear una guía y tutorial, a sabiendas de que muchas cosas podian salir mal. Su nombre HexString.
1. ¿Qué es HexString?
Es un volcador (dump) de texto, que nos permite extraer e insertar el texto de una ROM, facilitando en gran medida la traducción (o edición para romhacks) de un videojuego. Esta específicamente desarrollada para la edición de texto con punteros, de esta forma solo traducimos, mientras el programa se encarga de calcular el largo de los punteros, y por ende codificar completamente una tabla de punteros, para que no tener que hacerlo a "mano".
1.1 Funcionalidades.
- Interfaz de usario con un diseño simple y fácil.
- Extracción e Inserción de texto.
- Cálculo automático de punteros y su inserción.
- División de la líneas por medio del código de fin de línea.
- Soporte a punteros de distintos tamaños (2, 3 y 4 bytes) y de distinto orden (little, big endian).
- Soporte para punteros divididos en 2 partes.
- Soporte para juegos con DTE/MTE, con busqueda optimizada.
- Soporte para juegos que no tienen un código de fin de línea claro, permite dividir el texto dependiendo del largo del puntero, como tambíén su inserción.
- Permite usar tu paréntesis favoritos, para los códigos de texto.
- Permite guardar y cargar ficheros .json con la configuración.
- Rellenar el espacio vacío.
- Entre las más importantes.
1.2 No soporta.
- Bueno como dije arriba, este programa esta hecho para juegos que tengan una tabla de punteros, si no lo tiene, pues no servirá.
- Espacio vacío entre punteros.
- Punteros muy desordenados (se puede pero tendrás que crear múltiples configuraciones, honestamente no es lo óptimo, aunque posible).
- Encontrar punteros, saber identificarlos, formato común por consola, y orden.
- Saber que son los códigos de texto e identificarlos.
- Saber crear tablas thingy (.tbl).
- Saber editar las fuentes.
- HexString (última versión aquí).
- Un editor de texto, recomiendo Notepad++, usen siempre UTF-8.
- Emulador del juego, MESEN 2 es un buen emulador con un buen debbug.
- Editor hexagecimal, como Translhextion, Windhex.
- Editor de gráficos de ROMs, Tilelayerpro, TileMoslester. o yychr.
- El ROM
- El archivo .tbl
- Largo de los punteros.
- Orden de los punteros.
- Dirección donde Inician los punteros.
- Dirección donde Terminan los punteros.
- La base de los punteros (hablaré de este termino más adelante).
- Dirección donde Inicia el texto.
- Dirección donde Finaliza el texto.
- Código finalizador de línea.
Bien este juego posee mucha información en internet, por ejemplo aquí en Data Cristal. Analizando la tabla que se proporciona nos damos cuenta que el juego ocupa compresión por DTE, copiamos y creamos un archivo .tbl con el nombre "Final Fantasy (USA).tbl". La tabla también debe estar en UTF-8.
Nota: No cierren el programa antes de guardar la configuración, ir a file-> Save config y guardamos la configuración.
2.3 Edición del script.
Si abrimos el archivo de salida, nos quedará algo así. Recomiendo ir a vista -> ajuste de texto.
- El caracter ";" al inicio de uan línea se usa para comentar y por tanto toda la línea es ignorada.
- Si al inicio de una línea hay caracteres "@" y "|" también son ignoradas.
- La primera línea tiene un formato distinto, esta es una línea de control, por lo tanto nunca la modifiquen o cambien de lugar, especificamente si van utilizar la consola para crear script.
Como pueden ver las líneas se encuentran enumeradas después de @, luego tenemos la dirección donde tenemos el texto, además de una copia de la línea (es posible deshabilitar). la línea a modificar y para finalizar un "|" que indica que ese bloque de texto ha terminado. La línea que tienes que modificar es la que no empieza con nada.
A modo de ejemplo editaré la línea que mostraba el NPC, en este caso es el puntero número #50, la modificaré a "ESTO ES UNA PRUEBA DE HEXSTRING POR KODA 2025".
Nos vamos a HexString y ahora cargamos el archivo de texto que modificamos en "Open Script", ya solo nos queda insertarlo. Si cerraron el programa, solo deben volver a cargar la configuración, previamente guardada, para eso vamos a file-> open config .
Una vez todo listo presionamos "Insert Script to ROM", nos saldrá una ventana emergente anunciando que se ha insertado el texto.
Está perfectamente formateado, por tanto es evidencia de la inserción a sido todo un éxito y el cálculo de los punteros posteriores también son correctos.
Nota: Más abajo en Tips dejo otro método para saber si hay errores al insertar scripts.
Ya solo queda traducir todo el script, editar las fuentes para agregar los símbolos del español, y codificarlo en el .tbl.
At extract ignore and line code until some character are decode: Algunos juegos cuentan con códigos de texto iguales al finalizador de línea, como por ejemplo star fox 2 de SNES, como podemos notar con algún texto, el código finalizador de línea es $00, genial, ocupamos hexstring y nos encontramos con esto.
El inicio de cada bloque de texto consta de 2 códigos hexagecimales, el primero es el personaje que habla, y el segundo que coincide con el finalizador de línea, es el efecto del mensaje (Si tiene que tambalearse por ejemplo), obviamente el mensaje se mostrará incompleto, tal y como se aprecia arriba, si activamos esta opción el programa ignorará hasta que algún caracter presente en el .tbl sea decodificado, quedandonos como debería.
Not use end line code for split lines (Use pointers lenght):
Esta opción deshabilita que se ocupe un codigo de fin de linea para ir dividiendo el texto, al extraer se tomará como referencia la diferencia en bytes que exista entre cada puntero, y se divide en base a este número. Útil para juegos que no tengan un código fijo o se dividan puntero en base a muchos códigos finalizadores de línea. Ejemplo de uso: Miracle Girls (Japan) de SNES.
Importante: Al insertar cada línea del script se interpretará como un puntero. Y no con un código como es lo usual.
Si extraes el texto con el casilla marcada, también debes usarla para insertar el texto.
2.6 Tips
Mejor visualización del largo de línea: Esto no lo mencioné, pero si usamos el end line como divisor de punteros, puedes dividir la linea dentro de sus respectivos "@" y "|" para tener una mejor idea de que largo tiene la línea, para utilizar mejor el separador de líneas, tal que así:
Comprobar siempre la reinserción: Es importante comprobar que tanto la extracción e inserción de texto se está haciendo bien, antes de comenzar un proyecto, sobretodo si este tiene mucho texto, para evitar problemas después y evitar el tiempo perdido. Como recomendación una vez extraído un script, siempre creo una copia de la ROM a traducir, y vuelvo a reinsertar el script. Asi tendremos una rom original limpia y una copia de la ROM con nuestra modificación y aquí viene la mágia, podemos usar programas incluso el mismo cmd para hacer una comparación hexagecimal entre los archivos, yo ocupo "HexCmp.exe" programa gratuito, si todo esta bien al terminar la comparación deberiamos obtener este mensaje:
Función repetir último puntero: En algunos juegos, nos encontraremos con esto:
Hola Koda, esta interesnte, muy agradecidoesto podria aydar a nuevos traductores. De mi parte quiero aprender como va esto, yo traduzco a lo cavernicola. Seria bueno un tutorial con un video .
ResponderBorrarUn gusto poder ayudar a los demás, principalmente espero que los conocimientos previos que detallo no sean tan grandes como para que cualquier persona pueda iniciarse en este humilde rubro, si quieres empezar puedes hacer uso de las configuraciones que incluyo con el programa, un saludo.
Borrar