Bug Digimon World 1

Foro dedicado al romhacking en general
Responder
Avatar de Usuario
CUE
Administrador
Administrador
Mensajes: 5601
Registrado: 24 Ene 2011, 16:52

Mensaje por CUE » 04 Mar 2011, 10:48

Más info de las fuentes, para que el chaval de RHDN no ande buscando más:
- están en formato 1bpp, es decir, cada pixel es un bit, o al revés
- todos los caracteres tienen 16 pixeles de ancho por 11 de alto, excepto la americana, que son 12
- los datos se leen de 16 bits en 16 bits, 2 bytes, con la particularidad de que los dos bytes están invertidos, o sea, que si vemos con un editor que los datos son 12-34-56-78-9A-BC realmente leeremos 3412-7856-BC9A.
- la fuente americana tiene 16 bits extras, 2 bytes, 1 fila más, porque indican el ancho del carácter, mientras que en las demás versiones el ancho es fijo

Offsets de la fuente (en hexadecimal):
- americana - SLUS_010.32 - A0880
- japonesa - SLPS_017.97 - 98D38
- británica - SLES_029.14 - 989C0
- alemana - SLES_034.34 - 989D0
- francesa - SLES_034.35 - 98958
- española - SLES_034.36 - 9898C
- italiana - SLES_034.37 - 9898C

Justo antes de los datos de la fuente están los caracteres usados, en UTF-8, si no recuerdo mal, cada uno compuesto por 2 bytes.

Con esos datos es sencillo sacar la fuente: se leen 2 bytes, el menos significativo es el primero, se pasan a binario, donde el '1' representa un pixel y el '0' nada (o al revés), formando una de las filas del carácter, y repetimos el proceso hasta sacar todos los caracteres de la fuente. No merece la pena ni que ponga unas líneas de programa para eso, pues es de lo más simple.

Me llama la atención que todos los ELF europeos tienen la cabecera del japonés, y, por la estructura de la fuente, parece ser que se basaron en esa versión para hacer las distintas localizaciones del juego.


Todas las fuentes en BMP: http://www.megaupload.com/?d=AMHTXBE5

Romsstar
Mensajes: 15
Registrado: 05 Mar 2011, 15:58

Mensaje por Romsstar » 05 Mar 2011, 16:00

Hi, great work in ripping the fonts.
I'm working on this project too.
I have made the table file and located dialogue files.
(Btw Dialogue is not in SLES or SLUS only font and items and lists)
Working on pointer table.
If you want, we can work together.
Btw: Which program you use for ripping the fonts?
Feidian? Or another?
If another can you say which and tell me settings?

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

Mensaje por CUE » 05 Mar 2011, 21:00

I have no interest in digimon games, :(
but I would like to know how to fix the damn bug.

The fonts: I'm using B2B (check your private messages, the tool is not public yet, DO NOT SHARE, PLEASE!!!)
[img]http://img535.imageshack.us/img535/5673/b2b.png[/img]

Código: Seleccionar todo

-e ........ extract the bitmap from the binary file
-i ........ insert the bitmap into the binary file
binName ... binary file
bmpName ... bitmap file (always a BMP 8bpp)
offset .... data offset
yTiles .... vertical tiles
xTiles .... horizontal tiles
yPixels ... tile height
xPixels ... tile width
yBorder ... vertical border (pixels)
xBorder ... horizontal border (pixels)
bpp ....... bits per pixel (1/2/4/8, bit7=1 for reverse order)
bytes ..... data bytes (1/2/4, normally 1, 2 in Digimon)
palette ... palette (0/1)

*** only hex numbers ***
To extract the fonts:

Código: Seleccionar todo

b2b  -e  SLUS_010.32  US.bmp  A0880  05  10  0C  10  1  1  1  2  1
b2b  -e  SLPS_017.97  JP.bmp  98D38  3E  10  0B  10  1  1  1  2  1
b2b  -e  SLES_029.14  UK.bmp  989C0  0C  10  0B  10  1  1  1  2  1
b2b  -e  SLES_034.34  GE.bmp  989D0  0C  10  0B  10  1  1  1  2  1
b2b  -e  SLES_034.35  FR.bmp  98958  0C  10  0B  10  1  1  1  2  1
b2b  -e  SLES_034.36  SP.bmp  9898C  0C  10  0B  10  1  1  1  2  1
b2b  -e  SLES_034.37  IT.bmp  9898C  0C  10  0B  10  1  1  1  2  1
The UK font (with borders for easy edition, without borders):
[img]http://img849.imageshack.us/img849/3107/14341744.png[/img] [img]http://img638.imageshack.us/img638/3521/48151033.png[/img]

To replace the fonts:

Código: Seleccionar todo

use '-i' instead '-e'
More info:

Código: Seleccionar todo

SLUS_010.32 - A07E0, A0880
SLPS_017.97 - 98578, 98D38
SLES_029.14 - 98848, 989C0
SLES_034.34 - 98858, 989D0
SLES_034.35 - 987E0, 98958
SLES_034.36 - 98814, 9898C
SLES_034.37 - 98814, 9898C
The first value is the character table, 2 bytes/char (Shift-JIS based).
The second value is the font offset.

Romsstar
Mensajes: 15
Registrado: 05 Mar 2011, 15:58

Mensaje por Romsstar » 05 Mar 2011, 21:30

Thx, sent you a PM with some infos too.
Maybe they can help^^

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

Mensaje por CUE » 06 Mar 2011, 15:54

do you have a save before the bug? (the ePSX memcard file)

¿alguien tiene un save antes del bug? (el fichero memcard del emulador ePSX)

Romsstar
Mensajes: 15
Registrado: 05 Mar 2011, 15:58

Mensaje por Romsstar » 06 Mar 2011, 16:30

Yes, sent you a PM with the memorycard save,
it is for the german one though.
Have no other, but you can modify it quickly^^
please answer the PM before too;)

EDIT:

Ah also something about the game for my project,
I tried but no results, maybe you can help CUE:

The game stores it's map data in a format called ".TFS"
I tried opening it up in Tile Molester which gave me such a result in 8bpp linear:

Although it is kinda messy you can see a graphics here.

[img]http://img18.imageshack.us/img18/9145/tilemole.png[/img]
Now I wondered. Can I somehow make it display right and maybe rip it properly?
Is any data gainable out of this?

For reference I uploaded the mentioned TFS File and also a ".MAP" which goes with it somehow but seems to contain only some small TIM images but nothing useful.

http://www.sendspace.com/file/uc228f

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

Mensaje por CUE » 06 Mar 2011, 21:56

This is a tiny tool to test the LBA table in the elf files.
Each entry is a file:
- 4 bytes: LBA (0 the last one)
- 4 bytes: length
- 4 bytes: filename offset (you need sub 0x80090000)

Código: Seleccionar todo

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

void Test&#40;unsigned char *filename, unsigned int offset&#41;;
unsigned char *ReadFile&#40;unsigned char *fn&#41;;
unsigned int Get4&#40;unsigned char *buffer, unsigned int position&#41;;

int main &#40;int argc, char **argv&#41; &#123;
//Test&#40;"SLUS_010.32", 0x0008FE1C&#41;; // US
//Test&#40;"SLPS_017.97", 0x00095E18&#41;; // JP
//Test&#40;"SLES_029.14", 0x00095F44&#41;; // UK
  Test&#40;"SLES_034.34", 0x00095F54&#41;; // GE
//Test&#40;"SLES_034.35", 0x00095EDC&#41;; // FR
//Test&#40;"SLES_034.36", 0x00095F10&#41;; // SP
//Test&#40;"SLES_034.37", 0x00095F10&#41;; // IT

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

void Test&#40;unsigned char *fn, unsigned int o&#41; &#123;
  unsigned char *fb;
  unsigned int lba, len, nam;
  unsigned char name&#91;16&#93;, *n;
  unsigned int i;

  fb = ReadFile&#40;fn&#41;;

  for &#40;i = 0; ; i++, o += 12&#41; &#123;
    lba = Get4&#40;fb, o&#41;; if &#40;!lba&#41; break;
    len = Get4&#40;fb, o+4&#41;;
    nam = Get4&#40;fb, o+8&#41;;

    for &#40;n = name; *n = fb&#91;nam++ - 0x80090000&#93;; n++&#41;;

    printf&#40;"%04X &#58; ofs=%08X &#58; lba=%08X len=%08X nam=%08X &#58; %s\n", i, o, lba, len, nam, name&#41;;
  &#125;

  free&#40;fb&#41;;
&#125;

unsigned char *ReadFile&#40;unsigned char *fn&#41; &#123;
  FILE *fp;
  unsigned int fs;
  unsigned char *fb;

  if &#40;&#40;fp = fopen&#40;fn, "rb"&#41;&#41; == NULL&#41; &#123; printf&#40;"Open error\n"&#41;; exit&#40;1&#41;; &#125;
  fs = filelength&#40;fileno&#40;fp&#41;&#41;;
  if &#40;&#40;fb = &#40;unsigned char *&#41; malloc&#40;fs&#41;&#41; == NULL&#41; &#123; printf&#40;"Memory error\n"&#41;; exit&#40;1&#41;; &#125;
  rewind&#40;fp&#41;;
  if &#40;fread&#40;fb, 1, fs, fp&#41; != fs&#41; &#123; printf&#40;"Read error\n"&#41;; exit&#40;1&#41;; &#125;
  if &#40;fclose&#40;fp&#41; == EOF&#41; &#123; printf&#40;"Close error\n"&#41;; exit&#40;1&#41;; &#125;

  return&#40;fb&#41;;
&#125;

unsigned int Get4&#40;unsigned char *fb, unsigned int o&#41; &#123;
  return&#40;fb&#91;o&#93; | fb&#91;o+1&#93;<<8 | fb&#91;o+2&#93;<<16 | fb&#91;o+3&#93;<<24&#41;;
&#125;

Romsstar
Mensajes: 15
Registrado: 05 Mar 2011, 15:58

Mensaje por Romsstar » 06 Mar 2011, 23:15

Nice.
I did a test compile and saved the results of the LBA Table in a txt file.
Uploaded it here
http://www.sendspace.com/file/l1qdjn should be the whole LBA Table.

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

Mensaje por CUE » 07 Mar 2011, 17:38

Bueno, pues he reducido la zona del error de la conversación con Agumón hasta encontrar el fallo. Lo he probado con la versión alemana, que es de la que tengo un save, y funciona sin problemas.

Ahora a ver si la gente se mueve un poco y me pasa unos memcards del emulador ePSX justo antes de que se produzcan los errores en la versión española para ver si esa solución funciona también. Necesitaría dos saves, que son las dos partes donde el juego no permite avanzar, es decir, antes de hablar con Agumón y no-sé-qué de un ascensor (lo siento, pero nunca he jugado a los estúpidos digimones, así que no sé donde es eso).

Romsstar
Mensajes: 15
Registrado: 05 Mar 2011, 15:58

Mensaje por Romsstar » 07 Mar 2011, 17:44

Wow that is cool.
I understand you actually fixed the error in the German version?
Can you explain how please?

Also, will see what I can do about the save files^^

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

Mensaje por CUE » 07 Mar 2011, 20:40

Romsstar escribió:I understand you actually fixed the error in the German version?
No, I solved the first bug in all versions :)
Romsstar escribió:Can you explain how please?
Soon. I'm checking the IT/FR games. But only for you ;)
Romsstar escribió:Also, will see what I can do about the save files
I need the memcard to solve the 2nd bug.


EDITADO: *** imágenes borradas para poner todas en un post posterior ***
Última edición por CUE el 08 Mar 2011, 10:13, editado 1 vez en total.

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

Mensaje por Kuras » 07 Mar 2011, 20:55

¡Enhorabuena CUE! ¡Has arreglado el bug que traía de cabeza a toda una generación de jugones!
Creo que eres un héroe, no sólo a nivel nacional, sino internacional :wink:

Avatar de Usuario
AxxeL
Mensajes: 32
Registrado: 30 Ene 2011, 21:07
Contactar:

Mensaje por AxxeL » 07 Mar 2011, 20:56

jajajaja, dios mio pa no creerselo, mira a ver si te contratan por ahi o algo, por que esto es lo tuyo madre mia.

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

Mensaje por gadesx » 07 Mar 2011, 20:58

a ver cual es el bug del ascensor, que si nadie cuelga un save CUE hará que te
salga "el violador del ascensor" XDDDD

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

Mensaje por Kuras » 07 Mar 2011, 21:08

gadesx escribió:a ver cual es el bug del ascensor, que si nadie cuelga un save CUE hará que te
salga "el violador del ascensor" XDDDD
Dios, que mal rollo...
Pero ya le has dado la idea, con lo cual, lo puede hacer...

Responder