Archivos de la fuente (999)

Lugar donde se intentarán resolver problemas específicos
Responder
Avatar de Usuario
Kuras
Mensajes: 20
Registrado: 25 Feb 2011, 00:34

Archivos de la fuente (999)

Mensaje por Kuras » 05 Ago 2011, 16:43

Pues aquí estoy otra vez, con más dudas, a ver si me echan un cable.
Veréis, he estado trasteando con la fuente del juego, para ver como podía ampliarla, y he sacado varias cosas en claro. Pero hay algunas que se me resisten porque no encuentro su lógica.
Por ejemplo, en esta imagen:
[img]http://i1115.photobucket.com/albums/k54 ... nttulo.png[/img]
Los cuatro primeros bytes que aparecen tras el identificador te llevan a la tabla de punteros, y a partir de la posición 0x10, empiezan los caracteres. Pero, el problema está en que si voy a la dirección que indican los cuatro bytes siguientes a los que indican la posición de la tabla de punteros, me encuentro con una serie de bytes que no se que función tienen, pero que si modifico la longitud del archivo me dicen que nanai, que no van a mostrar la fuente.
Os dejo los archivos de la versión inglesa, a ver si con suerte alguien descubre para que sirven: http://www.mediafire.com/?p9l3y5hb9pepqyb

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

Mensaje por CUE » 05 Ago 2011, 17:21

Son caracteres ASCII de 1bpp, en sus versiones negrita (B), itálica (I), normal (N) y el S no sé. La fuente es un gráfico de 16 bits de ancho, invertidos horizontalmente y hay una serie de datos que tal vez indiquen la anchura/altura de cada carácter. También parece que los datos hay que leerlos de 16 bits en 16 bits, o sea, de 2 en 2 bytes, siendo el primer byte que leemos el menos significativo.

Ahora no tengo por aquí mi maletín de romjáquer, así que no puedo ver si soy capaz de sacar los gráficos, pero básicamente es lo que he comentado.

~~~ AÑADIDO ~~~
Pasando los datos a binario y poniendo 16 bits por fila me sale:
- 2 bytes con el código del carácter
- 3 bytes con ni_idea
- 1 byte con el número de pixeles de ancho a ocupar (*)
- 1 byte con la altura del carácter
- 1 byte con la anchura del carácter
- el carácter, reflejado (invertido) horizonalmente

(*) A ojo, basándome en cómo se graban las fuentes en otros formatos

Los ASCII son los normales, seguidos de unos pocos símbolos (flechas, triángulos, etc.) y después unos iconos.

~~~ MÁS AÑADIDO ~~~
Acabo de darme cuenta que no he puesto lo de los punteros. Se refieren a datos de 16 b¡ts, no de 8 como es lo normal, así que deberás multiplicar por 2 el valor para encontrar el offset real a los datos, sin olvidar añadir los 0x10 bytes de la cabecera. Se ve enseguida porque el primer byte al que apuntan es el código del carácter, que es lo que me ha servido para encontrar su estructura. El valor 0xAAAA parece que se usa como relleno en los punteros.

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

Mensaje por gadesx » 05 Ago 2011, 20:40

S puede ser subrayado?

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

Mensaje por CUE » 06 Ago 2011, 10:12

Los N y S parece que se son fuentes normales, pero de distinta altura.

Los 3 bytes finales de la cabecera de cada carácter son:
- altura del carácter
- anchura del carácter
- altura del tile (al menos en los ASCII)

Los 3 valores anteriores, los 'unk', podrían ser pixeles a saltar o algo de eso, pero para verificarlo necesito imágenes de cómo quedan los textos. Lo ideal sería ver cómo queda el texto y comprobar las separaciones entre los caracteres !"#$%&'(.... El valor en 'unk3' tiene toda la pinta de ser un número negativo. Así, a ojo, 'unk1' podría ser el número de pixeles horizontales a saltar antes de mostrar el carácter, y 'unk2' el número de pixeles verticales a saltar.

La última línea del fichero (16 bytes) no tengo ni idea de lo que es. Parecen ser 5 bytes y el resto el típico relleno con 0xAA.

He pasado de programas gráficos, que es un coñazo tratar con los bytes de cabecera para no incluirlos en la imagen, así que he tratado al fichero como simples datos binarios y los represento con caracteres. El primer fichero me sale así:

Código: Seleccionar todo

fichero.: kanji_b.dat

cabecera: 30524953
offset..:      FFC
longitud:     1140 (sin contar los 0x10 de esta cabecera)
cero....:        0

total...:       94
dato1...:        1
dato0...:        0
inicio..:       10 (o la longitud de esta cabecera o el offset al inicio de los datos)

char=0020  unk1=00  unk2=01  unk3=F8  y=0A  x=04  filas=0A
----············
----············
----············
----············
----············
----············
----············
----············
----············
----············

char=0021  unk1=00  unk2=03  unk3=FC  y=0A  x=03  filas=0C
**-·············
**-·············
**-·············
**-·············
**-·············
**-·············
---·············
**-·············
**-·············
---·············

char=0022  unk1=00  unk2=02  unk3=FC  y=05  x=06  filas=06
**-**-··········
**-**-··········
**-**-··········
**-**-··········
------··········

char=0023  unk1=00  unk2=03  unk3=FC  y=0A  x=06  filas=0C
-*-**-··········
-*-**-··········
*****-··········
-*-**-··········
-*-**-··········
-*-**-··········
*****-··········
-*-**-··········
-*-**-··········
------··········

char=0024  unk1=00  unk2=03  unk3=FC  y=0A  x=06  filas=0C
---*--··········
-****-··········
**-*--··········
****--··········
-***--··········
-****-··········
-*-**-··········
****--··········
-*----··········
------··········


... (aquí un montón más) ...


char=84BC  unk1=01  unk2=01  unk3=00  y=0C  x=0E  filas=0E
-**********---··
*----------*--··
*--*******-*--··
*-*------*-*--··
*-*------*-*--··
*-*------*-*--··
*-*------*-*--··
*-*------*-*--··
*-*----*-*-*--··
*-*****-**-*--··
*----------*--··
-**********---··

char=84BD  unk1=01  unk2=01  unk3=00  y=0C  x=0E  filas=08
-**********---··
*----------*--··
*----------*--··
*--**--**--*--··
*-*--**--*-*--··
*-*------*-*--··
*-*------*-*--··
*--*----*--*--··
*---*--*---*--··
*----**----*--··
*----------*--··
-**********---··

char=84BE  unk1=01  unk2=01  unk3=00  y=0C  x=0E  filas=0E
-**********---··
*----------*--··
*---****---*--··
*---*-**---*--··
*--*-**-*--*--··
*--*----*--*--··
*-*----*-*-*--··
*-*-****-*-*--··
*--*----*--*--··
*---****---*--··
*----------*--··
-**********---··
Muestro con '*' y '-' los valores imprimibles del carácter (punto activo o inactivo), siendo '·' el espacio sobrante.

Todos los ficheros están en http://www.megaupload.com/?d=ETCN11DD
Lo mismo pero mejor: http://www.megaupload.com/?d=O4EMOBF3 (el fichero N tiene un bug con los datos de la 'z' minúscula, así que lo he arreglado y he puesto algo mejor la visualización)

Ahora lo único que falta es que Kuras se explique bien y que diga qué es lo que necesita, qué es lo que ha hecho, qué es lo que no sale, etc.

Avatar de Usuario
Kuras
Mensajes: 20
Registrado: 25 Feb 2011, 00:34

Mensaje por Kuras » 09 Ago 2011, 16:10

Pues el tema está en que quiero ampliar la fuente para meter los caracteres que faltan de nuestro alfabeto, y como soy un vago de cojones y no quiero usar la fuente japonesa por varios motivos (uno de ellos es que hay códigos que están en la fuente inglesa que la fuente japonesa se los come, literalmente), pues quería saber como funcionaba la fuente para modificarla a mi antojo.
Lo de las imágenes para los "unknown" ya las colgaré, que ahora mismo ando justo de tiempo. Y lo de los 5 bytes finales me trae de cabeza, porque en los ficheros japoneses son 6, y siempre están los "0404" al principio -.-"

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

Mensaje por CUE » 09 Ago 2011, 16:59

Pues no debería ser difícil meter caracteres. Están ordenados, así que el que quieras meter lo pones en su posición, copiando más o menos los bytes esos raros de su carácter más parecido (para la 'á' los del 'a', par ala 'ñ' los del 'n', etc) y teniendo en cuenta que lo que cambiará será la altura, por lo que habrá que actualizar el byte correspondiente. Después de esos bytes irán los que definen el carácter, que si has visto como lo he hecho no deberías tener problema, basta con diseñarlos "a mano" y luego pasarlos a hexadecimal. Luego hay que actualizar los 2 punteros del inicio, el que dice donde están los punteros a los caracteres y la longitud. Después hay que actualizar todos los punteros de los caracteres, pues si has metido uno entre medias te tocará meter el nuevo y actualizar todos los siguientes.

Puede haber problemas porque los códigos se corresponden a los caracteres S-JIS, codepage 932, que se pueden ver en http://msdn.microsoft.com/en-us/goglobal/cc305152
Si el juego está bien hecho, no deberá permitirte códigos del 0x80 al 0x8F ni del 0xE0 al 0xFF, pues no existen en SJIS, y todos los que empiecen por un byte superior a 0x80 deberán ser de 2 bytes.

También puede ocurrir que puedas meter caracteres al final, después del último. Esto sería lo ideal, pues sólo tendrías que meter los nuevos datos del carácter, actualizar los 2 punteros iniciales y añadir al final el puntero al nuevo carácter.

Aquí están todas las fuentes, incluso las del juego japonés (las que empiezan por "j_"): http://www.megaupload.com/?d=NEJ1C99K

Responder