Fuente Radiant Historia

Lugar donde se intentarán resolver problemas específicos
Responder
Skye
Mensajes: 95
Registrado: 03 Ago 2011, 20:09

Fuente Radiant Historia

Mensaje por Skye » 10 Ago 2011, 20:18

Buenas, tengo un problema con el Radiant Historia de DS. Hace tiempo que quiero traducir este juego, y he estado mirando la rom. Tampoco hay mucho que mirar: una carpeta con archivos de sonido, y una carpeta Data. En esa carpeta hay tres archivos: Data.bin, Data.idx, y Data.ndx. El bin es un megaarchivo de 33mb y es donde están tanto los gráficos como los textos. Los gráficos y demás archivos del sdk de nintendo los puedo sacar con un cutre programa que he escrito en python.

Bien, el problema es que no consigo encontrar la fuente por ningún lado.

Y también he visto algunas cosas curiosas, como código fuente de C o algo parecido.

Por cierto, al mirar el idx y el ndx (los otros archivos) he visto que el ndx tiene nombres de archivo, mientras que el idx sólo tiene números. Igual se puede usar el idx y el ndx para sacar los archivos del bin con su nombre correspondiente, pero hasta ahora no he visto relación alguna entre ellos. Debo ser muy torpe ^^

Bueno, si alguien pudiera ayudarme con lo de la fuente, estaría muy agradecida ^^

Avatar de Usuario
gadesx
Administrador
Administrador
Mensajes: 2040
Registrado: 24 Ene 2011, 16:43
Ubicación: El puche
Contactar:

Mensaje por gadesx » 11 Ago 2011, 00:26

bienvenida al foro, creo haber mirado este juego y creo que va todo empaquetado,
de DS es de los RPGs mas interesantes, a ver si se pasa cuecín XDDDDD

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

Mensaje por CUE » 11 Ago 2011, 10:47

Tengo por aquí alguna cosilla, pero sin terminar. Me falta por sacar los ficheros del 'Data.bin', pero tengo todo el árbol de ficheros creado, 27872 nombres, de los cuales 2614 son carpetas. Por eso pasé del juego, porque tenía muchas cosas que mirar.

Las fuentes están justo antes de los textos, en la carpeta de los mensajes:
- Msg/font.bin
- Msg/fonttbl.bin
- Msg/br (vacío)
- Msg/en (vacío)
- Msg/fr (vacío)
- Msg/ge (vacío)
- Msg/it (vacío)
- Msg/ja (aquí van los textos, tanto en la versión JAP como en la USA)

Skye
Mensajes: 95
Registrado: 03 Ago 2011, 20:09

Mensaje por Skye » 11 Ago 2011, 13:03

Impresionante O.O
¿Lo has hecho usando el data.ndx?

Mirando el data.ndx, he visto que las extensiones de los archivos coinciden con lo extraído por mi cutre programa. Puede que los archivos en el data.bin estén en orden respecto al ndx. Vamos, que el ndx dice un archivo nanr, seguido de un ncer, seguido de un nanr... y así están en el bin.
A lo que no consigo encontrarle sentido es al data.idx :/

Y la fuente, mira que no pensar en buscar en el ndx... ahí está el nombre de archivo, pero parece que no es un NTFR... a ver cómo se saca/edita...

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

Mensaje por CUE » 11 Ago 2011, 13:20

Lo único que tengo apuntado del idx es que empìeza con:
- 4 bytes con el número de elementos (son 0x800)
- 4 bytes a 0
Luego vienen los elementos, que son dos valores de 3 bytes que no sé qué son, donde el primero va en orden creciente:

Código: Seleccionar todo

- 006011 0009B0
- 006113 000F74
- 006279 000DB0
- 006391 006F24
- 00647D 008100
- 0065F5 000600
- 006769 0001FC
- 006939 000168
  ...
Después, a partir de 0x3008, hay más datos que tampoco sé qué son.

En algún lugar de toda esa maraña están las longitudes y offsets de los ficheros.

Para el ndx he usado lo siguiente, que me crea la estructura de carpetas:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

void Tree&#40;FILE *fp, char *fb, int sum, char *path&#41;;
void Folder&#40;char *path&#41;;

int main &#40;void&#41; &#123;
  FILE *fp;
  int fs;
  char *fb;

  if &#40;&#40;fp = fopen&#40;"data.ndx", "rb"&#41;&#41; == NULL&#41; exit&#40;-1&#41;;
  fs = filelength&#40;fileno&#40;fp&#41;&#41;;
  if &#40;&#40;fb = &#40;char *&#41; malloc&#40;fs&#41;&#41; == NULL&#41; exit&#40;-1&#41;;
  if &#40;fread&#40;fb, 1, fs, fp&#41; != fs&#41; exit&#40;-1&#41;;
  if &#40;fclose&#40;fp&#41; == EOF&#41; exit&#40;-1&#41;;

  Tree&#40;fp, fb, 0, "data"&#41;;

  free&#40;fb&#41;;

  return&#40;0&#41;;
&#125;

void Tree&#40;FILE *fp, char *fb, int sum, char *path&#41; &#123;
  int num, len, pos, fic;
  char filename&#91;256&#93;;
  int i;

  num = *&#40;short int *&#41;&#40;fb + sum&#41;; sum += 2;
  while &#40;num--&#41; &#123;
    len = *&#40;short int *&#41;&#40;fb + sum&#41;; sum += 2;
    for &#40;i = 0; path&#91;i&#93;; i++&#41; filename&#91;i&#93; = path&#91;i&#93;;
    filename&#91;i++&#93; = '/';
    fic = 0;
    while &#40;len--&#41; &#123;
      if &#40;*&#40;fb + sum&#41; == '.'&#41; fic = 1;
      filename&#91;i++&#93; = *&#40;fb + sum++&#41;;
    &#125;
    filename&#91;i&#93; = 0;
    pos = *&#40;int *&#41;&#40;fb + sum&#41;; sum += 4;
    if &#40;!fic&#41; &#123;
      printf&#40;"<DIR> %s\n", filename&#41;;
      Folder&#40;filename&#41;;
    &#125; else &#123;
      printf&#40;"      %s\n", filename&#41;;
    &#125;
    if &#40;pos&#41; Tree&#40;fp, fb, pos, filename&#41;; 
  &#125;
&#125;

void Folder&#40;char *path&#41; &#123;
  int i;

  for &#40;i = 0; path&#91;i&#93;; i++&#41; &#123;
    if &#40;path&#91;i&#93; == '/'&#41; &#123;
      path&#91;i&#93; = 0;
      if &#40;mkdir&#40;path&#41; > 0&#41; exit&#40;-1&#41;;
      path&#91;i&#93; = '/';
    &#125;
  &#125;
  if &#40;mkdir&#40;path&#41; > 0&#41; exit&#40;-1&#41;;
&#125;
Todo en: http://www.megaupload.com/?d=GTS7YUB5

Skye
Mensajes: 95
Registrado: 03 Ago 2011, 20:09

Mensaje por Skye » 11 Ago 2011, 19:14

Muchas gracias por tu ayuda CUE :)
Entonces "sólo" queda sacar los archivos...
He estado mirando (otra vez) el idx... en el ndx hay un .msg llamado BOMB_FIND_REST_4.msg, el cual supongo corresponde al texto que hay en 0x16F386C en el bin. He estado buscando los offsets del texto y del nombre de archivo, pero no aparecen :/

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

Mensaje por CUE » 12 Ago 2011, 10:16

Yo no sé por qué hay 0x800 elementos de 2*3 bytes al principio del fichero. Después, a partir de 0x3008 se observa que hay valores de 3 y de 4 bytes, y, a simple vista, no veo qué pauta siguen. A veces parece que hay 1 de 3 seguido de 2 de 4, se repite varias veces, luego hay otros valores, luego parece repetirse, etc.

Esos textos que dices tienen una longitud justo antes. En 0x16F3738 pone la longitud de la primera frase, hasta llegar la 0xFF separador. Lo mismo pasa en 0x16F36D0. En otros casos no veo la relación. Así que la longitud de los textos está dentro de los mismos.

Skye
Mensajes: 95
Registrado: 03 Ago 2011, 20:09

Mensaje por Skye » 12 Ago 2011, 14:28

Bueno, tengo más o menos el "formato" de los textos. El texto en 0x16F3D18, por ejemplo:
Al final del texto anterior, vemos 0x1C. Esto es la longitud del header, por llamarlo de alguna forma, del texto en cuestión.
Luego 0x1 seguido de 0x0. Esto dice que el primer "trozo" de texto comienza en 0x0 relativo al final del header.
0x2 seguido de 0x35. El segundo trozo empieza en 0x35.
0x3 seguido de 0x69. El tercer trozo empieza en 0x69.
Luego 4 bytes y empieza el texto.

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

Mensaje por CUE » 12 Ago 2011, 15:25

Eso es, y además amplío un poco más. Esos valores, 1-2-3..., indican el número de texto, de forma secuencial, y no tienen por qué comenzar en 1 (0x16AEDE0, por ejemplo, donde comienza por 0x02BD), hasta que se lee 0, que indica el final de los punteros. El bloque entero de textos va ajustado a 4 bytes.

La estructura de los textos queda así:
- 4 bytes con la longitud de la zona de punteros, sin contar con estos 4 bytes
- 4 bytes con el índice/número de texto correlativo, 0 si es el final
- 4 bytes con el offset absoluto del texto, empezando a contar desde el primer byte después de la zona de punteros (o sea, desde el inicio de la cabecera, sumar a este valor 4 más la longitud indicada al principio)
- textos, todos seguidos, ajustando a 4 bytes el final, rellenando con ceros si es el caso

Todo esto no sirve para mucho si no se pueden extraer los ficheros, pues estamos con el típico problema de tener que adaptarnos al espacio existente, sin poder ampliarlo ni reducirlo. Poder cambiarse puede hacerse, pero siempre he pensado que es un sistema bastante chapucero, propio de consolas más antiguas con serias limitaciones de espacio, y la DS no entra en esa categoría.

¿Me lo parece a a mí o hay textos japoneses y textos ingleses?

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

Mensaje por CUE » 13 Ago 2011, 13:46

Me estaba aburriendo un poco (no había nada curioso en la tele) y he fisgado un poco más los ficheros.

Parece ser que los textos empiezan en 0x016AED10. He mirado unos cuantos para ver relaciones y creo que algo he sacado. Lo que dije antes de que los bloques de textos están ajustados a 4 bytes creo que más bien es que los ficheros van ajustados a 4 bytes, así que se puede saber dónde empieza cada uno y su longitud:
- 0x016AED10, 0x23 bytes
- 0x016AED34, 0xA0 bytes
(solo los dos primeros, que no es plan de gastar el teclado)

Ojito, que hay textos en UTF-8, con caracteres de 1-2-3 bytes, y en ellos el 0x05 es el espacio. Para más info sobre la codificación, guguel es la solución (cómo mola cuando pones algo y rima).

Al estar cada fichero ajustado a 4 bytes nos indica que su longitud es múltiplo de 4 sí o sí, así que divido el offset de cada fichero entre 4. Lo hago porque me da la gana y porque quiero, que para eso es mi tiempo, además de que la experiencia debe servir para algo. Así que ahora tenemos:
- 0x016AED10 / 4 = 0x5ABB44, 0x23 bytes
- 0x016AED34 / 4 = 0x5ABB4D, 0xA0 bytes

Fisgoneando en el idx encontramos (y pasando del '0x', que también me desgasta el teclado):
- en 0003BD02 aparece la secuecia 44-BB-5A-00 + 23-00-00-00
- en 00025724 aparece la sencuecia 4D-BB-5A-00 + A0-00-00-00

¡¡¡Chorprecha!!! Ya sabemos que en el idx están almacenadas la longitud, en bloques de 32 bits (4 bytes, para los despistados) y el tamaño. El cómo y demás preguntas metafísicas (dónde, cuándo, etc.) ya te lo dejo a ti para que te lo curres.

Skye
Mensajes: 95
Registrado: 03 Ago 2011, 20:09

Mensaje por Skye » 13 Ago 2011, 19:08

Genial xD gracias CUE, ya seguiré intentándolo :P Si lo consigo, lo pondré aquí ^^

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

Mensaje por CUE » 14 Ago 2011, 11:48

¿Estás segura de que quieres traducir este juego? (respuestas posibles: "Sí", "No", "No sabe/No contesta", "Oh, my god!").

Es que jugueteando un poco he sacado 13912 ficheros con textos, japoneses incluidos, además de uno que no tiene nada, aunque podría haber más. Si ya sería un auténtico coñazo traducirlo teniendo los punteros, no quiero pensar lo que sería hacerlo por el método del editor hexadecimal, sin pasarse del tamaño preestablecido para cada uno de ellos. Bueno, sé que hay gente loca, pero no sé yo si hasta este punto. Ojo, que el ser muchos ficheros no significa que sean muchas líneas. Hay ficheros con una línea, otros con dos, otros con definiciones, etc., vamos, lo normalucho, pero es un preñazo tenerlo todo separado en tantas partes.

En la lista de ficheros hay 13913, uno más, que no sé dónde narices se ha metido, pero como que paso de buscarlo. Total, sólo es el 0.007% de los ficheros, así que prefiero pensar que he sacado el 99.993% de los que hay y me quedo tan ancho.

Y eso que sólo he mirado los textos. Como alguien quiera mirar en la inmensidad de ficheros para buscar gráficos que traducir... (puntos suspensivos).

En un post has dicho que has hecho algo en python (sic), puedo darte la "cosa" extractora para que te lo curres, que, en realidad, es una chorrada. En teoría sólo tendrías que hacer una pequeña utilidad que compruebe que los textos traducidos no ocupen más del original y volver a meter todo en el "Data.bin". Ja, visto así parece muy simple.

Skye
Mensajes: 95
Registrado: 03 Ago 2011, 20:09

Mensaje por Skye » 14 Ago 2011, 12:31

Sí que quiero traducir el juego. ¿Loca? Me lo dicen mucho xD
Tampoco hay tantos gráficos con texto, afortunadamente... vamos por lo que he visto jugando.
Lo primero sería encontrar la fuente, meter nuestra querida eñe y vocales con tildes...
Y los punteros... por algún lado estarán, espero. Por ahora seguiré mirando.

Bueno, si me dieras la cosa extractora esa te lo agradecería :) Ya veré que puedo hacer en python, aunque debería empezar a aprender algún C, que son los que sirven para cualquier cosa...

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

Mensaje por CUE » 14 Ago 2011, 14:24

Pues a esperar todo el mundo (One Piece, Radiant Historia, etc.), que acabo de decidir irme esta tarde a pasar unos días a la playa, a [s]que la nenas admiren mi hermoso cuerpo[/s] bañarme y [s]mirar a las pibitas[/s] tomar el sol.

¿Encontrar la fuente? ¿Te refieres a una especie de tabla gráfica que contiene los 1280 posibles caracteres que se pueden poner en el juego, contando ASCIIs, hiraganas, katakanas, kanjis, y sin contar los 2 caracteres especiales que hay, repartidos en 5 subtablas de 256 caracteres cada una? No sé, pero creo, imagino, pienso, me da la impresión que algo puede hacerse :D :) :lol: :P :twisted: :wink:

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

Mensaje por CUE » 16 Ago 2011, 17:37

Sólo para poner los dientes largos y que a alguna muchacha se la caiga la baba, o sea, mi mala hostia habitual para fastidiar :twisted:
[img]http://img148.imageshack.us/img148/2235/test1m.png[/img] [img]http://img171.imageshack.us/img171/3469/test2ut.png[/img]
[img]http://img685.imageshack.us/img685/498/test3et.png[/img] [img]http://img11.imageshack.us/img11/6679/test4k.png[/img]

Cuando tenga tiempo miro lo que me faltaba por postear, que ahora estoy recién llegado y tengo un montón de cosas que hacer.

Responder