Hola
@jotascHe tenido la oportunidad de echar un vistazo al juego tanto en PC como en PS2, y aquí te dejo algunos comentarios sobre lo que he encontrado:
1) Las texturas SSH son estructuras SHPS, comunes en juegos de EA de la época. Sin embargo, como habrás notado, utilizan un modo no compatible con las herramientas disponibles actualmente (0x84).
En este modo, los datos de imagen comienzan siempre con "GM" (0x47 0x4D), y el juego los descomprime en la función localizada en 0x00223FE0. Esta función toma dos argumentos en sus respectivos registros:
- A0 → Dirección de memoria de los datos comprimidos (entrada).
- A1 -> Dirección de memoria de los datos descomprimidos (salida).
Una vez finalizada la descompresión, el resultado es una textura en color directo de 32 bits (ABGR Little Endian, típica en PS2). Sin embargo, siguen existiendo dos problemas principales:
- Si sigues el código ensamblador de la función de descompresión en un depurador, notarás que, en lugar de descomprimir los datos en la CPU, la función configura la transferencia de estos a otro sistema y luego espera a que los datos descomprimidos terminen de escribirse en memoria. Es posible que la descompresión se realice de forma acelerada en los VU0 / VU1, lo que dificultaría el desarrollo de una herramienta equivalente.
- Una vez que los datos descomprimidos son recibidos, no están dispuestos de forma lineal, sino en tiles de 16 píxeles de ancho.
Teniendo todo esto en cuenta, es posible extraer las texturas:
Sin embargo,este enfoque de depuración impide la reinserción. Por lo tanto, se necesita más investigación para comprender mejor los detalles del sistema de compresión. Además, no es posible utilizar otros modos soportados por la especificación SHPS, ya que el juego solo es compatible con el modo 0x84:
2) Las texturas WCT están bien documentadas, por lo que no he necesitado investigarlas demasiado. Simplemente he confirmado que la documentación tiene sentido y coincide con las estructuras encontradas en los archivos del juego. Estas texturas consisten en datos de crominancia / luminancia (YCbCr) comprimidos en LZSS:
https://opentpw.gu3.me/formats/wct.html3) Los paquetes SDT son bastante sencillos y similares tanto en la versión de Windows como en la de PlayStation 2. En ambos casos, contienen un array de punteros a diferentes pistas de audio, cada una identificada por una cabecera de 0x28 (40) bytes. Esta cabecera incluye detalles sobre la pista, como su nombre, frecuencia de muestreo, la cantidad de memoria a reservar para las muestras de audio descomprimidas, etc...
La principal diferencia entre la versión de Windows y la de PS2 es que, en la primera, cada puntero apunta a la cabecera de su pista correspondiente (con los datos de audio almacenados justo después); mientras que en la segunda, cada puntero apunta directamente a los datos de audio (estando las cabeceras ordenadas en un segundo array, justo después del de punteros).
El audio siempre está en formato MP2, a 22050 Hz, 48 Kbit/s, mono:
https://jumpshare.com/s/R8vomhY3a04nOCBFG0jxMucha suerte con el proyecto!
Un saludo,
~Sky