Autor Tema: Nancy Drew Saga (Traducción) [En proceso]  (Leído 967 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mmogas

  • Altair 8800
  • *
  • Mensajes: 29
  • País: 00
  • Fecha de registro: Octubre 26, 2025, 18:24:46 pm
    • Ver Perfil
Nancy Drew Saga (Traducción) [En proceso]
« en: Febrero 25, 2026, 21:53:10 pm »
Hola:

Me estoy planteando un nuevo reto: La traducción de la saga de Nancy Drew (clásicos soportados por SCUMMVM).

Por el momento estoy recopilando información de como descomprimir y manipular los ficheros del juego.

He localizado varias paginas muy útiles y herramientas como:

RavioliGameTools_v2.10
QuickBMS
GameExtractor
https://shimmerfairy.neocities.org/nd/ff_ciftree
Fuentes SCUMMVM

Pero aun así me falta información para avanzar.

Si alguien ha investigado antes sobre estos juegos y quiere ponerlo en común se lo agradecería.

Retos:
- Analisis de CifTree.DAT, *.CIF ,*.CAL , *.CAB
- Localizar fuentes
- Localizar y formato textos/subtítulos
- Localizar y formato imágenes (para editar)

Un saludo

Desconectado pakolmo

  • Webmasters
  • Sovereign
  • *****
  • Mensajes: 5106
  • País: es
  • Sexo: Masculino
  • Fecha de registro: Enero 16, 2015, 02:57:33 am
    • Ver Perfil
    • Parches Amateurs Aventuras Gráficas
Re: Nancy Drew Saga (Traducción) [En proceso]
« Respuesta #1 en: Febrero 26, 2026, 07:42:39 am »
Ni idea, pero asperet tradujo Nancy Drew: Secrets Can Kill (Remastered).

Desconectado walas74

  • Moderador Global
  • Intel Pentium III
  • *****
  • Mensajes: 829
  • País: co
  • Fecha de registro: Septiembre 22, 2007, 14:58:22 pm
    • Ver Perfil
    • Email
Re: Nancy Drew Saga (Traducción) [En proceso]
« Respuesta #2 en: Febrero 26, 2026, 13:23:17 pm »
Alguna vez me planteé traducir Nancy Drew, pero la verdad no lo vi nada sencillo y suelen haber muchas imágenes para traducir.

Le he escrito a asperet al respecto a ver qué dice, pero puede ser que en el remastered hayan cambiado el motor que se use y la forma de traducir sea más sencilla, no sé...
« Última modificación: Febrero 26, 2026, 13:24:49 pm por walas74 »



Desconectado mmogas

  • Altair 8800
  • *
  • Mensajes: 29
  • País: 00
  • Fecha de registro: Octubre 26, 2025, 18:24:46 pm
    • Ver Perfil
Re: Nancy Drew Saga (Traducción) [En proceso]
« Respuesta #3 en: Febrero 28, 2026, 19:50:38 pm »
Hola:

Por lo que he podido ver, en la versión de asperet de Nancy Drew: Secrets Can Kill (Remastered) el fichero CIFTREE.DAT se puede desempaquetar con RavioliExplorer y GameExtractor, mostrando ficheros con texto plano (p.e. SCK_CONVO_SCRIPT_SC) y otros con imágenes PNG.

Algunos ficheros CIFTREE.DAT  son desempaquetables con RavioliExplorer.  He podido extraer el CIFTREE.DAT de NANCY2, NANCY6 y NANCY7. (*) . Los otros no me ha dejado.

Voy a trabajar con los juegos instalados que poseen el CIFTREE.DAT. Así tendré una mejor visión de los archivos disponibles.

NANCY2 (*):
43 49 46 20 54 52 45 45 20 57 61 79 6E 65 53 69 6B 65 73 00 00 00 00 00 02 00 01 00 51 05 00 00
C   I   F        T   R  E   E        W  a  y   n   e   S   i    k   e   s
NANCY3:
43 49 46 20 54 52 45 45 20 57 61 79 6E 65 53 69 6B 65 73 00 00 00 00 00 02 00 01 00 B5 05 00 00
NANCY4:
43 49 46 20 54 52 45 45 20 57 61 79 6E 65 53 69 6B 65 73 00 00 00 00 00 02 00 01 00 69 06 00 00
NANCY5:
43 49 46 20 54 52 45 45 20 57 61 79 6E 65 53 69 6B 65 73 00 00 00 00 00 02 00 01 00 2C 07 00 00
NANCY6 (*):
43 49 46 20 54 52 45 45 20 57 61 79 6E 65 53 69 6B 65 73 00 00 00 00 00 02 00 01 00 95 08 00 00
NANCY7 (*):
43 49 46 20 54 52 45 45 20 57 61 79 6E 65 53 69 6B 65 73 00 00 00 00 00 02 00 01 00 F3 0A 00 00

Mi apuesta es que esos archivos CIFTREE.DAT contengan fuentes y los textos a traducir.

Voy a intentar varios algoritmos LZSS y analizar las fuentes de SCUMMVM por si veo como se gestionan esos ficheros.

Empezaré por NANCY6 ya tiene texto y voz a la vez desde el principio y la estructura de ficheros parece más clara.
« Última modificación: Marzo 02, 2026, 23:41:58 pm por mmogas »

Desconectado mmogas

  • Altair 8800
  • *
  • Mensajes: 29
  • País: 00
  • Fecha de registro: Octubre 26, 2025, 18:24:46 pm
    • Ver Perfil
Re: Nancy Drew Saga (Traducción) [En proceso]
« Respuesta #4 en: Marzo 22, 2026, 14:18:59 pm »
Después de analizar el código fuente del motor de NANCY en SCUMMVM y el contenido hexadecimal de ficheros CIFTREE.DAT,  he descubierto los siguiente:

- Los juegos NANCY1 , NANCY2 , NANCY3 al 5 y NANCY6 y posteriores tienen estructuras del fichero CIFTREE.DAT diferentes (abajo la indico).
- El contenido de los ficheros de este contenedor se almacenan en formato PLAIN (valor 03) o COMPRESSED (02) [también ESPECIAL (04).
- Los datos están comprimidos por LZSS y ofuscados.
- En general se componen de:
 + Una cabecera HEADER de 0x32 bytes con información de la versión y del numero de ficheros ENTRY que contienen
 + Una zona de HASH (que no he analizado aun en detalle).
 + Zona con las ENTRY's que dan información de los como el contenido de los ficheros está almacenado en al zona de DATA.
 + Zona de DATA donde esta el contenido de los ficheros
 + Los ficheros almacenados como COMPRESSED son generalmente imágenes del juego
 + Entre los ficheros PLAIN he localizado ficheros de escena (S*.) que es donde se presenta información de la escena y los subtítulos en una estructura parecida a "<c1>Nancy ..... text text text.<c0><n><o>"
 + Otro fichero PLAIN interesante es el BOOT que entre otras cosas parece que prepara los caracteres a partir de los ficheros gráficos #FONT.

Ahora mismo he preparado una herramienta .py más o menos operativa que extrae el contenido de CIFTREE.DAT. Incluso he conseguido extraer las imagenes (frames, objetos, fuentes, pantallas, menus,...).


Para los ficheros PLAIN, entre los que están las escenas, estoy trabajando en otra herramienta que me clasifique y permita editar el contenido de cada una.

Después tocará hacer la tarea inversa de volver a reconstruir el fichero CIFTREE.DAT con el contenido modificado.

>ESTRUCTURA CIFTREE.DAT NANCY1:
proximamente...

ESTRUCTURA CIFTREE.DAT NANCY2:
Proximamente...

ESTRUCTURA CIFTREE.DAT NANCY3-5:
Proximamente...

ESTRUCTURA CIFTREE.DAT NANCY6+:
Proximamente...



« Última modificación: Marzo 24, 2026, 20:13:30 pm por mmogas »

Desconectado mmogas

  • Altair 8800
  • *
  • Mensajes: 29
  • País: 00
  • Fecha de registro: Octubre 26, 2025, 18:24:46 pm
    • Ver Perfil
Re: Nancy Drew Saga (Traducción) [En proceso]
« Respuesta #5 en: Marzo 22, 2026, 14:54:47 pm »
ESTRUCTURA CIFTREE.DAT NANCY 1:

HEADER:
HEADER_START= 0x000000      # Inicio HEADER (0x000000-0x00001D)
HEADER_SIZE = 0x1E         # Tamaño total de la cabecera (30Bytes)
HEADER_SIGNATURE_POS = 0x0   # Posicion SIGNATURE
HEADER_SIGNATURE_SIZE = 0x13   # Tamaño SIGNATURE (0x13 = 19Bytes)
HEADER_VERSION = 0x18         # Version (4Bytes)
HEADER_NUM_ENTRY_POS = 0x1C   # Posicion numero de ENTRYs (2Bytes)

HASH:
HASH_START = 0x00001E         # Inicio del HASH (0x1E = 30)
HASH_SIZE = 0x00800         # Tamaño del HASH (0x800 = 2048Bytes)

ENTRY:
ENTRY_START = 0x00081E      # Inicio ENTRY AREA
ENTRY_SIZE = 0x26         # Tamaño de cada ENTRY (0x26 = 38Bytes)
name        = data(0x00)      # Nombre del fichero [8Bytes]
value1      = data(0x08)       # Valor fijo 0x00 [1Byte]
index       = u16(0x09)      # Indice ENTRY [2Bytes]
width       = u16(0x0B)      # Anchura de la imagen comprimida [2Bytes]
height      = u16(0x0F)      # Altura de la imagen comprimida [2Bytes]
bpp         = data(0x11)       # Profundidad de color de la imagen [1Byte]
value2     = data(0x12)       # Valor fijo 0x02 [1Byte]
offset      = u32(0x13)       # Offset de donde empieza el contenido el fichero en campo area DATA [4Bytes]
decomp_sz   = u32(0x17)       # Tamaño del fichero descomprimido  [4Bytes]
packed_sz   = u32(0x1F)       # Tamaño del fichero enpaquetado dentro del area de DATA [4Bytes]
ftype       = data[0x23]       # 0x02 = Comprimido, 0x03 = Plain (sin comprimir) [1Byte]

DATA:
DATA_START = 0x########

ESTRUCTURA CIFTREE.DAT NANCY 2:

HEADER:
HEADER_START= 0x000000         # Inicio HEADER (0x000000-0x00001F)
HEADER_SIZE = 0x20         # Tamaño total de la cabecera (32Bytes)
HEADER_SIGNATURE_POS = 0x0      # Posicion SIGNATURE
HEADER_SIGNATURE_SIZE = 0x13      # Tamaño SIGNATURE (0x13 = 19Bytes)
HEADER_VERSION = 0x18         # Version (4Bytes)
HEADER_NUM_ENTRY_POS = 0x1C      # Posicion numero de ENTRYs (2Bytes)

HASH:
HASH_START = 0x000020         # Inicio del HASH (0x20 = 32)
HASH_SIZE = 0x00800         # Tamaño del HASH (0x800 = 2048Bytes)

ENTRY:
ENTRY_START = 0x000820         # Inicio ENTRY AREA
ENTRY_SIZE = 0x46                 # Tamaño de cada ENTRY (0x46 = 70Bytes)
name        = data(0x00)              # Nombre del fichero [8Bytes]
value1      = data(0x08)               # Valor fijo 0x00 [1Byte]
index       = u16(0x09)         # Indice ENTRY [2Bytes]
width       = u16(0x13)         # Anchura de la imagen comprimida [2Bytes]
height      = u16(0x17)         # Altura de la imagen comprimida [2Bytes]
value1      = u16(0x2B)         # Campo desconocido [2Bytes]
value2      = u16(0x2D)         # Campo desconocido [2Bytes]
value3      = u16(0x2F)         # Campo desconocido [2Bytes]
bpp         = data(0x31)               # Profundidad de color de la imagen [1Byte]
value4      = data(0x32)               # Valor fijo 0x02 [1Byte]
offset      = u32(0x33)               # Offset de donde empieza el contenido el fichero en campo area DATA [4Bytes]
decomp_sz   = u32(0x37)               # Tamaño del fichero descomprimido  [4Bytes]
packed_sz   = u32(0x3F)               # Tamaño del fichero enpaquetado dentro del area de DATA [4Bytes]
ftype       = data[0x43]               # 0x02 = Comprimido, 0x03 = Plain (sin comprimir) [1Byte]

DATA:
DATA_START = 0x########

ESTRUCTURA CIFTREE.DAT NANCY 3-5:

HEADER:
HEADER_START= 0x000000         # Inicio HEADER (0x000000-0x00001F)
HEADER_SIZE = 0x20         # Tamaño total de la cabecera (32Bytes)
HEADER_SIGNATURE_POS = 0x0      # Posicion SIGNATURE
HEADER_SIGNATURE_SIZE = 0x13      # Tamaño SIGNATURE (0x13 = 19Bytes)
HEADER_VERSION = 0x18         # Version (4Bytes)
HEADER_NUM_ENTRY_POS = 0x1C      # Posicion numero de ENTRYs (2Bytes)

HASH:
HASH_START = 0x000020         # Inicio del HASH (0x20 = 32)
HASH_SIZE = 0x00800         # Tamaño del HASH (0x800 = 2048Bytes)

ENTRY:
ENTRY_START = 0x000820         # Inicio ENTRY AREA
ENTRY_SIZE = 0x5E                 # Tamaño de cada ENTRY (0x5E = 94Bytes)
name        = data(0x00)         # Nombre del fichero [32Bytes]
index       = u16(0x21)         # Indice ENTRY [2Bytes]
width       = u16(0x2B)         # Anchura de la imagen comprimida [2Bytes]
height      = u16(0x2F)         # Altura de la imagen comprimida [2Bytes]
bpp         = data(0x0x49)                # Profundidad de color de la imagen [1Byte] Valor 0x10
decomp_sz   = u32(0x57)          # Tamaño del fichero descomprimido (dudas original 0x43 , 0x45 , 0x47) [4Bytes]
offset      = u32(0x4B)          # Offset de donde empieza el contenido el fichero en campo area DATA [4Bytes]
packed_sz   = u32(0x57)          # Tamaño del fichero enpaquetado dentro del area de DATA [4Bytes]
ftype       = data[0x5B]          # 0x02 = Comprimido, 0x03 = Plain (sin comprimir) [1Byte]

DATA:
DATA_START = 0x########

ESTRUCTURA CIFTREE.DAT NANCY 6+:

HEADER:
HEADER_START= 0x000000         # Inicio HEADER (0x000000-0x00001F)
HEADER_SIZE = 0x20         # Tamaño total de la cabecera (32Bytes)
HEADER_SIGNATURE_POS = 0x0      # Posicion SIGNATURE
HEADER_SIGNATURE_SIZE = 0x13      # Tamaño SIGNATURE (0x13 = 19Bytes)
HEADER_VERSION = 0x18         # Version (4Bytes)
HEADER_NUM_ENTRY_POS = 0x1C      # Posicion numero de ENTRYs (2Bytes)

HASH:
HASH_START = 0x000020         # Inicio del HASH (0x20 = 32)
HASH_SIZE = 0x00800         # Tamaño del HASH (0x800 = 2048Bytes)
HASH2_START = 0x000820
HASH2_SIZE = 0x59         # Tamaño del HASH (0x59 = 89Bytes)

ENTRY:
ENTRY_START = 0x000820         # Inicio ENTRY AREA (Deberia ser 0x00087E)
ENTRY_SIZE = 0x5E         # Tamaño de cada ENTRY (0x5E = 94Bytes)
name        = data(0x00)      # Nombre del fichero [32Bytes]
index       = u16(0x21)         # Indice ENTRY [2Bytes]
offset      = u32(0x23)       # Offset de donde empieza el contenido el fichero en campo area DATA [4Bytes]
width       = u16(0x31)         # Anchura de la imagen comprimida [2Bytes]
height      = u16(0x35)         # Altura de la imagen comprimida [2Bytes]
decomp_sz   = u32(0x49)       # Tamaño del fichero descomprimido (dudas original 0x43 , 0x45 , 0x47) [4Bytes]
bpp         = data(0x4F)       # Profundidad de color de la imagen  [1Byte] Valor 0x10
value1      = u16(0x50)         # Campo desconocido [1Bytes] siempre valor 0x02
packed_sz   = u32(0x59)       # Tamaño del fichero enpaquetado dentro del area de DATA [4Bytes]
ftype       = data[0x5D]       # 0x02 = Comprimido, 0x03 = Plain (sin comprimir) , 0x04 = Especial pack [1Byte]

« Última modificación: Marzo 24, 2026, 20:59:18 pm por mmogas »

Desconectado mmogas

  • Altair 8800
  • *
  • Mensajes: 29
  • País: 00
  • Fecha de registro: Octubre 26, 2025, 18:24:46 pm
    • Ver Perfil
Re: Nancy Drew Saga (Traducción) [En proceso]
« Respuesta #6 en: Marzo 24, 2026, 19:51:41 pm »
Comparto más información sobre la estructura de los juegos:

Ficheros comunes en los juegos:

[Próximamente .... ]

En Nancy6 y posteriores la traducción va a ser bastante más fácil ya que gran parte de texto está en el fichero AUTOTEXT contenido en CIFTREE.DAT. La estructura es la siguiente:

AUTOTEXT:

HEADER:
Signature: 0x00 - 0x0F (16Bytes)
Padding: 0x10-0x11 (2Bytes)
Value: 0x12-015 (4Bytes)

A partir de offset 0x16

DATA:
Name: 0x00-0x1F (32Bytes)
Padding: 0x20 (1Byte)
Text_Lenght: 0x21 (2 Bytes) 
Text: 0x23  ... text ...  (#Text_Lenght# Bytes)

New Line <n>
New Page <n><n>

y así hasta el final.

Estoy trabajando en una aplicación python para que vuelva a generar el fichero CIFTREE.DAT: Genera nueva versión del fichero con HEADER y HASH originales , comprime LZSS y ofusca los datos de cada ENTRY de forma temporal, añade los nuevos ENTRYs modificados al CIFTREE y a continuación pega consecutivamente todos los datos de las ENTRYs).  Me falta investigar mecanismo de la zona de HASH (solo si se va a querer jugar fuera de SCUMMVM) y algunos de los valores que se almacenan en las ENTRYs.

También trabajo en otra aplicación para volver a compactar el fichero AUTOTEXT con los textos traducidos.
« Última modificación: Marzo 24, 2026, 20:10:39 pm por mmogas »