[PRECOMPILACIÓN] Crash Bandicoot 2: Cortex Strikes Back

Hola, Mundo!

Con el auge de los proyectos de recompilación, me sorprende que uno como este haya pasado tan desapercibido: la recompilación estática de Crash Bandicoot 2: Cortex Strikes Back (versión PAL) para PC. No es un desarrollo 100% mío (está fuertemente basado en ughman/c2c), pero lo he avanzado significativamente para hacerlo jugable en PC con un rendimiento bastante bueno.

El proyecto se basa en el análisis estático del ejecutable principal del juego (SCES_009.67), que se desensambla y reconstruye función por función en código C. Para esto, he desarrollado un decompilador PSX-EXE -> C, funcionalmente idéntico al de Ughman, aunque con heurísticas de análisis menos agresivas. Recompilar dicho código C genera un ensamblado nativo i386-pc-windows-msvc (32 bits). Esto permite aplicar optimizaciones de compilación.

Sin embargo, la lógica del juego, incluso recompilada, sigue requiriendo interacción con el hardware para el cual fue originalmente desarrollado. Por ejemplo, tras recompilarse, el programa sigue generando Ordering Tables (OTs), enviándolas a la GPU mediante DMA, etc... Dado que nada de esto funciona directamente en una plataforma como Windows, es necesario el uso de un runtime que implemente estos mecanismos. Para ello, se ha desarrollado una librería basada en el emulador PCSX-R, que actúa como capa de hardware emulado.

Esta aproximación híbrida tiene la ventaja respecto a la emulación pura, de no requerir ni interpretación ni recompilación dinámica para el código del juego, lo que aumenta significativamente el rendimiento. Además, al tener acceso al código fuente tanto del runtime como de la aplicación, es posible ir reimplementando gradualmente los módulos emulados como parte del programa principal, ya sobre una versión funcional del juego!

Módulos ya migrados al programa principal:

  • BIOS: Reescritura de las funciones de la BIOS utilizadas por el juego. Gracias a esto, no es necesario contar con una BIOS de PlayStation para ejecutar el juego recompilado.
  • CDROM: Reescritura del manejo del CDROM, lo que mejora muchísimo los tiempos de carga entre secciones del juego, reduciéndolos a los tiempos de fadeout/fadein.
  • PAD: Implementación mediante XInput. Sin embargo, como es necesario un wrapper para garantizar la compatibilidad con la mayoría de los controladores, esta funcionalidad no está incluida en la release actual.

Módulos aún emulados:

  • GPU: Actualmente, se está utilizando un plugin de emulador para la parte gráfica. Reescribir el renderizador como parte del programa principal permitiría implementar rasterización verdaderamente 3D (sin limitaciones de la plataforma original), además de cambios de texturas y efectos gráficos.
  • SPU: Al igual que con la GPU, se está usando un plugin para emular el audio. De momento, no hay planes inmediatos para reescribirlo como parte del programa principal.

Por supuesto, si tenéis alguna preferencia sobre qué plugins utilizar, podéis reemplazar los incluidos en la release.

Guardado de partida y configuración:

La release incluye un archivo de guardado de partida (save) compatible con herramientas de administración de tarjetas de memoria de PS1. Esto significa que podéis exportar e importar partidas guardadas entre PS1, emuladores y esta versión recompilada.

Además, se ha añadido un archivo config.me, que permite ajustar los módulos emulados (GPU, Audio y PAD) al inicio del juego. Si se elimina este archivo, el juego se lanzará directamente con las configuraciones aplicadas sin mostrar las ventanas de configuración.

Requisitos y cómo ejecutar el juego:

Para ejecutar la release, necesitaréis tener una imagen de CD de Crash Bandicoot 2: Cortex Strikes Back (PAL) en formato BIN, con el siguiente hash SHA-1: b077862d2c6e1b8060c2eae2fe82e708b228de7c

Concretamente: http://redump.org/disc/1056/

Este fichero debe colocarse junto al ejecutable recompilado (SCES_009.67.exe) con el mismo nombre y extensión ".bin" (es decir, "SCES_009.67.bin", sin comillas). Tras esto, basta con ejecutar el juego.

Descarga:

https://www.mediafire.com/file/l46aea42 ... 7.zip/file

Espero que os guste y lo disfrutéis!

Un saludo,

~Sky
Muy interesante pero lo veo poco util , ya que la PS1 es una consola que se puede emular con pocos recursos

Seria mas interesante ver algo asi pero con los juegos exclusivos de sega saturn
1 respuesta