Algo para este "formato"?

Lugar donde se intentarán resolver problemas específicos
Responder
Avatar de Usuario
cralso
Mensajes: 86
Registrado: 19 Ago 2013, 16:57

Algo para este "formato"?

Mensaje por cralso » 19 Ago 2013, 18:04

Hola, pues me pregunto si existe algun programa para descompilar/trabajar un "formato" que encuentro desde hace tiempo en muchos juegos.

Es simple pero termina resultando una gran molestia traducir con eso de por medio al final.

Así va la cosa:
Por ejemplo en Age of Wonders y una traducción algo mas desente queda así:
"16 Queda(n) %s turno(s) "
Esta claro que el "16" dice en hex que son 22 caracteres, pero es una pesadilla traducir tanto texto de esta forma.

ojo, no es el unico juego que usa esto, en su mayoria suelen ser juegos para telefonos (.jar)

por ejemplo esto es en Resident Evil Genesis:
"08 New Game"
este ya tiene una traducción, pero me gustaria hacer una por mi cuenta, ademas de que no funciona el juego desde sierto punto, pero ya es otro tema.

en fin, hay algun programa que se encarge de esa parte de "cantidad de caracteres"?
quisas algo que decompile los textos en varias lineas junto con su valor pero en decimal.

Avatar de Usuario
CUE
Administrador
Administrador
Mensajes: 5521
Registrado: 24 Ene 2011, 16:52

Mensaje por CUE » 19 Ago 2013, 18:54

Eso depende del fichero. Si las líneas de textos necesitan punteros es peor que de costumbre porque hay que recalcular los punteros además de las longitudes. Si no hay punteros, no veo el problema, se puede hacer a mano. Se pone siempre un carácter específico, por ejemplo, un '#' en lugar de la longitud y después se traduce todo. Cuando se haya acabado es cuestión de armarse de paciencia e ir sustituyendo los '#' por el valor real de la longitud de cada mensaje. Lo mejor es usar un carácter no usado que se vea a simple vista, para evitar confusiones.

De todas formas, lo mejor es siempre ver uno de esos ficheros. Así se ve si tiene punteros, si usa caracteres separadores entre mensajes, si hay que alinear cada mensaje a 4 bytes, ...

Avatar de Usuario
cralso
Mensajes: 86
Registrado: 19 Ago 2013, 16:57

Mensaje por cralso » 20 Ago 2013, 03:38

Eso depende del fichero. Si las líneas de textos necesitan punteros es peor que de costumbre porque hay que recalcular los punteros además de las longitudes. Si no hay punteros, no veo el problema, se puede hacer a mano.
No se mucho sobre eso de los punteros, aunque me parece que vi algunas partes de texto donde al añadir mas texto se "expandia de mas" y causa un desorden/error aunque coloco la longitud de caracteres, quisas tenga algo que ver.
Se pone siempre un carácter específico, por ejemplo, un '#' en lugar de la longitud y después se traduce todo. Cuando se haya acabado es cuestión de armarse de paciencia e ir sustituyendo los '#' por el valor real de la longitud de cada mensaje. Lo mejor es usar un carácter no usado que se vea a simple vista, para evitar confusiones.
Buena idea, no se me ocurrio eso :P
De todas formas, lo mejor es siempre ver uno de esos ficheros. Así se ve si tiene punteros, si usa caracteres separadores entre mensajes, si hay que alinear cada mensaje a 4 bytes, ...
Dejo dos archivos que contienen textos del juego RE Genesis:
http://temp-host.com/download.php?file=op29wk

Pueden buscarse estos textos:
events.bin: What...
m.class: New Game

Supongo no existe ningun programa para esto.

Avatar de Usuario
CUE
Administrador
Administrador
Mensajes: 5521
Registrado: 24 Ene 2011, 16:52

Mensaje por CUE » 20 Ago 2013, 08:53

En event.bin los textos se separan con un simple 00. Puede que lleve punteros, pero en ese caso estarán en otro fichero. Si no los usa se pueden cambiar los 00 por 0D0A con algún editor hexadecimal. Se graba el fichero y se abre con cualquier editor de texto para cambiar los textos. Una vez cambiado todo se graba y se vuelve a abrir con el editor hexadecimal, cambiando ahora los 0D0A por 00. En principio parece que no hay límite de caracteres a meter.

El m.class es un fichero java compilado. Los textos van precedidos de 3 bytes, que son un 01 que indica que comienza un texto y dos bytes que indican la longitud del texto, con el byte más significativo primero. No conozco el formato que se usa en java, así que no sé si se usan punteros o lee los textos secuencialmente, que sería la razón para guardar la longitud de cada uno, pero parece que todos los textos, incluso mensajes internos, se almacenan igual. La zona de textos va de 0x15F4 a 0x3F5E, puede que 0x3F5F si el 00 que hay al final es un ajuste para rellenar hasta un múltiplo de 16, y todos los textos están ordenados alfabéticamente, aunque no creo que eso sea necesario para traducir.

Lo primero sería cambiar dos textos seguidos para ver si se usan punteros o no. Hay un "GAME LOADED" seguido de un "GAME SAVED" que puede servir. El primero ocupa 00-0B bytes y el segundo 00-0A, 11+10=21 bytes entre los dos. Para probar ponemos 8 bytes con el texto "ABCDEFGH" seguidos de 13 bytes con "abcdefghijklm", recordando poner bien la longitud y el 01 inicial. Ahora hay que probar el juego con ese fichero para ver si los dos textos salen bien, lo que indicaría que no se usan punteros, en cuyo caso se podría hacer algo en medio minuto para sacar los textos (meterlos es otra cosa).

Responder