Vale ya he conseguido desentrañar todos los misterios creo de los tbb, ahora estoy haciendo un script para conseguir que todo esto se haga automático pero esta muy complicado porque hay código entre los textos. Voy a dejar aquí mis conclusiones para que en un futuro si alguien quiere traducir el Ys XI o el que sea tenga algún punto de partida, aunque sea yo mismo que para entonces igual me he olvidado xD.
Hay 2 fases en las que el juego analiza el texto, la primera al escribirlo en la RAM y después el motor para mostrar el texto. Ambas suponen cambios en lo que mide el texto.
FASE ESCRITOR DE EN RAM desde TBB:
- Hay un sistema de doble puntero uno es R14 y el otro es RSI, cuando RSI cae en un código por debajo de 20 en hex tiene significado para el escritor en la RAM y marca absolutamente todo para poder hacer la traducción.
- Si RSI cae en 00 es que se viene una frase y va seguido de la longitud de la frase, en cristiano si entre lo textos o al inicio hay un byte 00 esto marca el inicio de una frase y va seguido de un byte con la longitud de la frase:
ejemplo 00 2C (00 abre el texto 2C es el numero de bytes en hexadecimal que serán la siguiente frase).
Hex:
31 00 00 30 00 59 39 41 56 30 30 30 31 5F 30 31 00 57 68 61 74 20 68 61 70 70 65 6E 65 64 54 45 53 54 21 3F 00 2D
ASCI:
0�Y9AV0001_01�What happenedTEST!?
- Todas las frases vienen precedidas por 30 00 59 39 41 56 30 30 30 31 5F 30 + numero de comentario 30, 31 , 32 etc... (todas las frases vienen precedidas por 0�Y9AV0001_01�)
-Si RSI cae en un byte 01 a un numero en hex inferior a 20 en hex que no sea 0A hace retroceder el puntero de escritura el valor de R14 y copia un numero de bytes de RSI y vuelve a la posición en la que estaba. Esto es porque han usado un Compresión de Diccionario (tipo LZ77 o LZSS). Que es por lo que posiblemente no haya herramientas ya creadas en la comunidad porque hace muy difícil todo...Quien sabe porque FALCON querría ahorrar un puñado de bytes de RAM para este juego que no es precisamente pesado...
FASE INTERPRETACION DEL MOTOR:
-El byte 0A introduce un salto de lineal, no es interpretado por el escritor en la RAM, lo interpreta después cuando el juego lee la RAM para mostrar el mensaje).
- Todos los textos deben terminar en -10�-60 (2D 31 30 00 2D 36 30) son indicaciones de cuanto tiempo y posición debe permaneces el mensaje en pantalla. Es la parte mas dificil porque debido a la Compresión de Diccionario (tipo LZ77 o LZSS) lo han hecho con punteros de retorno y como cambiamos el tamaño de los textos se vuelve muy complicado calcular.
- Los encabezados del tbb están al inicio del archivo, los archivos tbb son como tablas con sus parámetros, nosotros solo tenemos el hexadecimal asique hay que comérselo a pelo pero siempre son bastante intuitivos:
43 43 53 56 46 49 4C 45 CCSVFILE el juego identifica este texto para saber que el formato es correcto si los primeros 8 bytes no son esto sencillamente lo descarta.
00 00 01 00 versión del tbb por ahora siempre han sido 00 00 01 00.
07 00 00 00 columnas de la tabla
11 00 00 00 filas de la tabla
10 06 00 00 Tamaño total del archivo sin el encabezado que son 60 bytes. Si agregamos 4 bytes hay que sumarle 4.
01 00 00 80 Sin datos por ahora no hay que cambiar nada para que acepte los textos.
01 00 00 00 Sin datos por ahora no hay que cambiar nada para que acepte los textos.
14 04 00 00 Marca el inicio de los punteros secundarios hay que sumarle el numero de bytes.
14 04 00 00 Marca el inicio de los punteros secundarios hay que sumarle el numero de bytes.
10 06 00 00 Tamaño total del archivo sin el encabezado que son 60 bytes. Si agregamos 4 bytes hay que sumarle 4.
0C 04 00 00 Inicio de otros punteros Si agregamos 4 bytes hay que sumarle 4.
10 06 00 00 Tamaño total del archivo sin el encabezado que son 60 bytes. Si agregamos 4 bytes hay que sumarle 4.
Casi todos los datos se repiten y hay que ponerlos todos porque el juego lo comprueba para evitar fallos de poder escribir en la RAM, que luego darían opción a ejecutar código malicioso.
Después al final del archivo esta el tema de los punteros al texto, por ahora y por como he visto que se ejecuta en código fuente parece que el juego tiene un offset de 480 en decimal o 1E0 en hex entre los punteros y el texto tbb, esto tiene que ver como el escritor de RAM agrega el texto y todos los parámetros del TBB.
Por lo que he podido ver casi siempre los textos están al final del texto y quizá la clave para poder detectarlos si el offset de 480 varia entre archivos sean los archivos japoneses ya que mantienen los mismos punteros hasta que empiezan los textos por lo que podría hacer el script, por ahora 480 (1E0) esta funcionando.
Referido a act0001.tbb el primer mensaje del juego:
32 05 00 00 Posiblemente etiqueta del archivo de voz. (si es el primero no se mueve)
3E 05 00 00 Inicio de What happened!? (primer texto) (suponiendo que agregas 4 bytes TEST despues de What happened?!TEST)
4E 05 00 00 hay que sumarle 4.
52 05 00 00 hay que sumarle 4.
56 05 00 00 hay que sumarle 4.
59 05 00 00 hay que sumarle 4.
5A 05 00 00 hay que sumarle 4.
5C 05 00 00 Posiblemente etiqueta del archivo de voz. hay que sumarle 4.
68 05 00 00 Inicio de: No reports received so far. Did a prisoner break outO3�!� Suponiendo que agregar otros 4 bytes test o reports received so far. Did a prisoner break outO3�!�TEST.
9E 05 00 00 hay que sumarle 8.
A2 05 00 00 hay que sumarle 8.
A6 05 00 00 hay que sumarle 8.
A9 05 00 00 hay que sumarle 8.
AA 05 00 00 hay que sumarle 8.
AC 05 00 00 Posiblemente etiqueta del archivo de voz.
B8 05 00 00 Inicio de: That's impossible. You'd have toUdKt�h wisht�rye�scape this place! (agregamos 4 mas hat's impossible. You'd have toUdKt�h wisht�rye�scape this place!TEST).
08 06 00 00 hay que sumarle 12.
0C 06 00 00 hay que sumarle 12.
Los siguientes pasos es escribir un script que interprete lo datos de forma automática, por ejemplo que lea los 0A, los 00 + tamaño de la frase y los vaya separando en una tabla excel o CSV, y ponga separe todos los textos pero recordando su posición y los bytes programados, después que ponga todos los textos en las columnas para que el traductor IA los traduzca y después que vuelva a escribir el tbb con los cambios sin fallos y que funcione.
Yo creo que es bastante difícil pero no creo que sea imposible, haber donde me deja Gemini pro que no se le da mal comenzar y hacer una estructura buena, aunque luego nunca funcionan bien xD y hay que hacer arreglos. De todas formas se puede jugar con los textos traducidos pero los tbb en ingles, porque es dificil, si me atasco o no consigo que funcione os comentare, pero no será como el arreglo para la herramienta de Ys IX de americana a europea que han sido literalmente 2 líneas.