Sega Rally 2 (PC) (1999)


Seguramente la máquina arcade en la que más dinero he gastado en mi vida. Eché tantas monedas de veinte duros que me habría resultado más barato comprarme una twin cabinet de este juego, un juego que llegó, vio y dio una patada en el culo a la competencia. Sega y su placa Model 3 no tenían rival. La capacidad técnica de la Model 3 era tan superior a todo lo demás que estaba, literalmente, adelantada a su tiempo: hay que recordar que Scud Race, otro mítico de carreras de la misma placa, salió en 1996 y sus gráficos eran tan avanzados que parecía, literalmente, venido del futuro. Ningún sistema arcade o doméstico se le acercaba. La placa tuvo varias revisiones más potentes que permitieron, en 1998, la salida de juegos como Daytona USA 2 y este Sega Rally 2, los cuales alcanzaron directamente el olimpo de las recreativas. Y de ese olimpo, la obra maestra de Tetsuya Mizuguchi fue lanzada en sistemas domésticos (Dreamcast y PC) en tan sólo un año.

De la versión apresurada de Dreamcast, que para más inri corría sobre el Windows CE de la consola, se ha hablado bastante ya. Sirva, simplemente, este apunte: ni emulando una Dreamcast overclockeada con Flycast he conseguido que el rendimiento de este juego sea estable a 60 fps. Parece ser, por lo que he podido ver en YouTube, que Redream cosigue acercarse más a los ansiados 60 fps estables, pero tampoco termina de conseguirlo:



Sin embargo, el port de PC, que es, supuestamente, un port de la versión de Dreamcast, no ha heredado semejantes problemas de rendimiento: corre a 4K y 60 fps sólidos como una roca en ordenadores actuales, pero el rendimiento ya era excelente en equipos de la época (con un procesador y tarjeta aceleradora decentes, claro). También he leído que, al estar siendo ambas versiones desarrolladas al mismo tiempo, partes de la versión de PC fueron porteadas a Dreamcast. Además, he encontrado en esta web lo siguiente:
The Windows port of Sega Rally 2 is the base for the Windows CE-based Dreamcast port.
En 2024, el verdadero reto al que nos enfrentamos con esta versión es conseguir que funcione correctamente en sistemas modernos. A lo largo de esta guía veremos cómo lograrlo.
 

╔════════════════════════════╗
INSTALACIÓN DEL JUEGO
╚════════════════════════════╝

Lo primero que necesitas es encontrar el juego. No lo vas a poder comprar digital en ninguna tienda oficial, ni Steam, ni GOG... Tema de licencias con las marcas de coches, supongo. En físico tienes, de segunda mano, varias versiones a tu disposición: la original de Empire Interactive distribuida en Europa y otros países en 1999, la comercializada en España a cargo de Dinamic Multimedia en ese mismo año (todo igual que la de Empire salvo por la carátula y trasera del jewelcase) y la reedición de FX Interactive en 2002. Esta última, pese a estar completamente doblada al castellano, está compuesta por un solo CD, lo que significa que no incluye las famosas músicas del juego, presentes en el CD 2 como pistas CDDA normales en el resto de ediciones. No estoy seguro, pero por la fecha diría que el juego salió directamente para la colección de videojuegos de quiosco del periódico El Mundo en el año 2002:


Pero volviendo a las versiones en 2 CDs, en este directorio de Archive.org tienes a mano las imágenes del CD1 y del CD2 para descargar.

Una vez descargadas y descomprimidas, montaremos el primer disco en una unidad virtual con WinCDEmu, DaemonTools, o cualquier otro programa similar. Abriremos el CD y haremos doble clic en AUTORUN.EXE y luego en INSTALL, o ejecutaremos directamente el archivo SETUP.EXE. Si, por casualidad, el instalador no arranca, abriremos el administrador de tareas (Ctrl+Mayus+Esc), iremos al apartado Detalles de la columna de la izquierda, buscaremos el proceso "Setup.exe", haremos clic con el botón derecho sobre él y escogeremos la opción "Analizar cadena de espera" del menú contextual. Nos mostrará qué proceso o procesos están impidiendo que el instalador arranque ya que, por alguna razón, está esperando que dicho/s proceso/s se cierre/n. En mi caso, el proceso que estaba impidiendo que el instalador arrancase era "Widgets.exe", perteneciente al propio Windows. Bastó cerrarlo para que la instalación comenzase. Esto no me ha sucedido en mi anterior instalación de Windows 11 Pro, concretamente la 22H2. Sin embargo, ahora sí me ocurre en la 23H2, aunque no me ocurre en el portátil con Windows 11 Home 23H2. Ya empezamos con mierdas. Aquí comienza mi particular Vietnam con este juego.

Bien, pues por fin arrancará el instalador:



Por defecto, el juego se instalará en C:\Archivos de Programa (x86)\Sega\Sega Rally 2.

Puede que sea placebo, pero creo que he tenido menos errores y problemas al instalarlo directamente en C:\SEGA RALLY 2. Además, a diferencia de "Archivos de Programa", la carpeta de instalación en C: no está protegida ni toca los cojones pidiendo permisos especiales para mover y copiar archivos. Ahí queda la recomendación.

En cuanto al tipo de instalación, escogeremos siempre la instalación máxima:


Al concluir la instalación es posible que te aparezca este mensaje:


Si no te apareciera, puede que sea porque ya tengas DirectPlay habilitado. Si no fuera el caso, deberás habilitar DirectPlay manualmente desde el panel de control de Windows, concretamente desde Programas y características (Win + R → appwiz.cpl). En dicha ventana, a mano izquierda verás una opción para habilitar o deshabilitar características de Windows. Si haces clic, te saldrá esta ventana:


En ella deberás desplegar "Componentes heredados" o "Legacy Components" y habilitar "DirectPlay".


╔════════════════════════════╗
Eliminar la protección Safedisc
╚════════════════════════════╝

Desde ahora, necesitarás tener montado el segundo CD para jugar, a menos que desactives la protección SafeDisc con esto (te recomiendo guardar copia del ejecutable original, por si acaso):


Nota: Si lo vas a parchear tú, ahora es el momento de hacerlo, ya que, si lo haces después de aplicar el parche para la música, la aplicación de desprotección del exe dará error de CRC y no lo parcheará.

Por si este parcheador dejase de funcionar en el futuro, creo que es interesante hacer aquí una relación de los bytes que modifica en el ejecutable del juego, fácilmente identificables comparando, mediante un editor hexadecimal, el exe modificado con el original. Sólo son 11 bytes:
Offset: 000269C0
        Byte 06 → Cambiar valor 0F por 90
        Byte 07 → Cambiar valor 8C por 90
        Byte 08 → Cambiar valor 3C por 90
        Byte 09 → Cambiar valor FF por 90
        Byte 0A → Cambiar valor FF por 90
        Byte 0B → Cambiar valor FF por 90

Offset: 00026B60
        Byte 08 → Cambiar valor E8 por 90
        Byte 09 → Cambiar valor 55 por 90
        Byte 0A → Cambiar valor 11 por 90
        Byte 0B → Cambiar valor 06 por 90
        Byte 0C → Cambiar valor 00 por 90
En las webs de siempre puedes encontrar un ejecutable del juego ya parcheado, pero requiere usar el modo de compatibilidad con Windows 98, lo que reduce brutalmente el rendimiento incluso en equipos potentes. Una cosa curiosa de esos ejecutables es que suelen venir acompañados, aunque no siempre, de otro archivo. Concretamente, del archivo "BINDATA \ TENYEAR \ 10_3 \ 10_3.dat", como si estuviera modificado de alguna forma, y lo cierto es que no lo está: es idéntico hasta el último bit al archivo vanilla de la versión de Empire / Dinamic / FX del juego recién instalado. No tiene ningún sentido que lo incluyan.

Sea como sea, te recomiendo pasar de esas webs y usar el parcheador o modificar tú mismo el exe con un editor hexadecimal como HxD, según el cuadro anterior.


╔════════════════════════════╗
Parche recuperación música
╚════════════════════════════╝

El CD2 tenía su utilidad originalmente, ya que contiene las músicas en formato CD-Audio que sonarán durante las carreras. En Windows modernos los juegos ya no pueden leer las pistas de música en dicho formato, por lo que necesitaremos dos cosas:
  • Una utilidad para hacer que el juego lea la música, pero no desde el CD, sino desde archivos de música que previamente habremos ripeado.
  • Los propios archivos de música en formato WAV, FLAC, mp3...
La utilidad se llama "_inmm.dll". Existen varias versiones, pero no todas funcionan: paradójicamente  la versión enlazada en la entrada dedicada a Sega Rally 2 en PCGamingWiki, es decir, la 2.38, hace que el juego crashee al darle a Continuar para reanudar la partida tras pausarla (por defecto, tecla Enter) durante una carrera.

Lo he comprobado personalmente con la v2.38 y así ocurre, pero parece ser que también sucede con la 2.37, según el creador de esta famosa versión portable:
- PROBLEM 3 (Crash on resume in paused menu): 
  After patching the original files "SEGA RALLY 2.exe" and "MGAudio.dll" using _inmm.dll Ver. 2.3.8.0 (as seen on youtube tutorials :( )
  the game crashes when select "Continue" in paused menu (in game > pause the game using [Enter] > Select "Continue" or hit [ESC] = Game crashes)
- The finding: The game works ok with no administrator mode or no compatibility mode, no crashes on resume in paused menu but also without music as well :(, but if you delete the file "_inmm.dll" the game worked fine, so the problem was with the _inmm patching thing...
- Fix: Patch the game with older version of _inmm.dll Ver. 2.3.6 and problem fix, turns out the versions of "_inmm.dll Ver. 2.3.8.0" and "_inmm.dll Ver. 2.3.7.0" are falty.
Me he registrado en PCGamingWiki expresamente para modificar la entrada relacionada con este asunto. Por un lado he completado la información especificando qué versión hay que utilizar:
Restore BGM
Extract the *.WAV audio files from the CD2 with an audio ripping program such as Exact Audio Copy.
Save the *.WAV files in an easy to access folder, such as <path-to-game>/MUSIC. Keep the tracks as originally numbered.
Download the _inmmdll tool and install it. 

Note: With this version of _inmdll (2.38) music will work but the game will crash when pausing and then hitting on Continue during a race. _inmdll v2.36 doesn't have such issue and works fine.

Run _inmmcnf.exe.
In the first tab method, change default to DirectShow.
Go to the Patch tab and search for SEGA\Sega Rarry 2 and click patch. Confirm the action.
Go to the _inmm.ini tab. Click in Add and select all the *.WAV files. Then click on Save to save the generated list in the game's folder.
Launch the game.
También he dejado otro recadito en los comentarios de la descarga del archivo:
(This comment is awaiting approval by a moderator)
This one's not good for Sega Rally 2: it makes the game crash when you pause and then hit on Continue during a race.

Version 2.36 is the one you need. Please find it attached.
No puedo facilitar en ese comentario un enlace oficial de descarga porque lo desconozco, no he sido capaz de encontrarlo. Al menos queda claro que la versión buena es la 2.36, y es la que hay que utilizar. A mí me la pasó un contacto por Discord y es la que he estado utilizando sin ningún problema. Te la dejo aquí y aquí.

Una vez descargada la aplicación, la instalaremos con las opciones por defecto:


Cuando la hayamos instalado, y antes de abrirla desde el acceso directo que nos habrá colocado en el escritorio, crearemos una carpeta llamada "MUSIC" en el directorio principal del juego, en la que colocaremos los archivos musicales. Me he tomado la molestia de ripear los archivos y comprimirlos sin pérdida al formato FLAC para conservar el 100% de su calidad original. Los puedes descargar desde aquí. La primera pista de audio, llamada "02 - Track02.flac", que suena en el modo demo/attract en las versiones de PC y Dreamcast, no es la misma que suena en el modo attract del arcade original. Por eso he incluido el archivo "02 - Track02 (arcade).flac", que no deja de ser un duplicado del archivo "06 - Track06.flac" (la música que suena en el circuito de Riviera). Si queremos usar la versión arcade, podemos hacer una de estas dos cosas:
  • Renombrar el archivo "02 - Track02 (arcade).flac" a "02 - Track02.flac".
  • Modificar la primera línea del archivo _inmm.ini que vamos a crear en un momento.
Ahora sí, abriremos la aplicación desde el acceso directo "_inmm.dll Setup". Se nos presenta una ventana con varias pestañas. En la primera de ellas, añadiremos, en la cuarta fila, *.flac y, a su derecha, escogeremos DirectShow como reproductor, ya que los codecs DirectShow soportan el formato FLAC:


Después, iremos a la pestaña "Patch". Buscaremos en el listado de la izquierda "SEGA" y, en el de la derecha, "Sega Rarry 2", escrito tal cual (grande el japonés que ha creado la aplicación). Una vez seleccionado el juego, haremos clic en el botón "Patch":



Encontrará automáticamente la carpeta de instalación del juego y lo parcheará. Cuando termine, nos devolverá un mensaje de confirmación y otro que no he podido determinar, pues está supuestamente en japonés y me falta el juego de caracteres necesario, mostrándose una mezcla de letras y símbolos totalmente ininteligible. Da igual, no es relevante: aceptamos y salimos.

Por último, iremos a la pestaña "_inmm.ini", donde crearemos un archivo con ese nombre, que contendrá simplemente el listado de archivos de música y su ubicación:


Haremos primero clic en el botón "Add" y se nos abrirá una nueva ventana, desde la que navegaremos hasta la carpeta MUSIC. En un principio aparecerá vacía, pero si quitamos de dicha ventana el filtro de archivos de la parte inferior de manera que nos muestre todos los archivos y extensiones, los archivos FLAC aparecerán y podremos seleccionarlos. Selecciona todos menos "02 - Track02 (arcade).flac". Una vez seleccionados aceptaremos y nos devolverá a la ventana principal del programa, que ahora contendrá el listado de archivos musicales. Haremos clic en "Save" y guardaremos el archivo en la carpeta principal del juego (ojo que, por defecto, lo intenta guardar en la carpeta "Music", lo cual provocará un error de "archivo _inmm.ini no encontrado" cuando intentemos ejecutar el juego).

Si no te ha quedado claro y prefieres crearlo a mano, simplemente crea un archivo llamado "_inmm.ini" (asegúrate de que .ini sea la extensión real del archivo, y no parte del nombre) que contenga lo siguiente:
MUSIC\02 - Track02.flac
MUSIC\03 - Track03.flac
MUSIC\04 - Track04.flac
MUSIC\05 - Track05.flac
MUSIC\06 - Track06.flac
MUSIC\07 - Track07.flac
MUSIC\08 - Track08.flac
MUSIC\09 - Track09.flac
MUSIC\10 - Track10.flac
MUSIC\11 - Track11.flac
MUSIC\12 - Track12.flac
MUSIC\13 - Track13.flac
MUSIC\14 - Track14.flac
Como ves, y a pesar de que el archivo .ini creado por el configurador de _inmm.dll (_inmm.dll setup) refleja la ruta absoluta a cada uno de los archivos, no es necesario que sea así para nada: puedes escribir la ruta relativa, como he hecho yo, que simplemente refleje el nombre de la carpeta donde están los archivos, es decir, MUSIC.

Como hemos mencionado antes, si quieres que la música del modo demo/attract sea la de la versión arcade, puedes cambiar la primera línea del ini por:
MUSIC\02 - Track02 (arcade).flac
Una vez hecho todo esto, habremos terminado con la música. Si antes has quitado la protección SafeDisc del ejecutable, ya no necesitarás el CD 2 para jugar. Si no has desprotegido el exe, ahora ya no podrás, por lo que he comentado antes. Pero tranquilo, puedes descargar el mío libre de Safedisc y ya parcheado para la música aquí.

Los filtros DirectShow que traen Windows 10 y 11 por defecto sólo reproducen un puñado de formatos de audio, como el WAV, MP3, MIDI y poco más. Lo bueno que tiene DirectShow es que se trata de un estándar abierto y se pueden crear codecs de DirectShow para reproducir cualquier formato de audio o de vídeo. A menos que hayamos instalado un pack de estos codecs (como K-Lite Codec Pack, por ejemplo), lo más seguro es que no podamos reproducir archivos FLAC a nivel de sistema, arranquemos el juego y el proceso "_inmmserv" nos muestre un mensaje de error relacionado con eso (error que también sucede con archivos OGG, por ejemplo). En tal caso, y si solamente queremos los codecs de audio, descargaremos los filtros DirectShow del proyecto open-source xiph.org. En el momento de escribir esto, la última versión de los opencodecs es la 0.85.17777. Puedes descargar el instalador para Windows de 32 y 64 bits aquí o en este mirror. Instálalo y ya no aparecerá dicho mensaje de error. La alternativa es usar archivos WAV o MP3. Si quieres un pack de codecs/filtros DirectShow más completo, siempre puedes optar por el mencionado K-Lite Codec Pack.

Si en algún momento entramos al juego y descubrimos que la música ha dejado de sonar, simplemente saldremos del juego y cerraremos el proceso _inmm.exe desde el administrador de tareas. Se volverá a abrir automáticamente cuando ejecutemos el juego nuevamente y la música volverá a funcionar.

Pero, ¿cómo funciona _inmm.dll?

winmm.dll es parte de la API de Windows Multimedia, que incluye funciones para controlar la reproducción de medios, incluyendo las pistas de audio en CDs. En los juegos antiguos, esta DLL se utilizaba para enviar comandos MCI (Media Control Interface) a la unidad de CD-ROM para reproducir pistas de audio directamente desde el CD. Esto permitía que la música de fondo y otros efectos de audio se reprodujeran sin necesidad de almacenarlos en el disco duro del usuario. A partir de versiones modernas de Windows, incluyendo Windows 10 y 11, la capacidad de reproducir pistas de audio directamente desde CDs a través de comandos MCI ha sido limitada o desactivada, ya sea por:
  • obsolescencia.
  • seguridad.
  • estupidez de Microsoft.
  • todas las anteriores son correctas.
_inmm.dll, por otro lado, es una biblioteca desarrollada para "restaurar" la capacidad de reproducir pistas de audio CD en juegos antiguos que se están ejecutando en sistemas modernos. Actúa interceptando las llamadas de winmm.dll y redirigiéndolas a archivos de audio locales en lugar de a la unidad de CD. Esto permite que los juegos antiguos que esperan encontrar la música en el CD puedan reproducir la música desde archivos en el disco duro al convertir las peticiones de comandos MCI para que funcionen con formatos de audio digital como MP3, WAV, FLAC... que están almacenados en el disco duro y ordenados en un archivo .ini como lo están en el CD original, simulando así la presencia de un CD físico.

La aplicación "_inmm.dll Setup" incluye un listado con todos los juegos soportados. Se sirve de él para lanzar el proceso "_inmmserv.exe" cada vez que se abre uno de dichos juegos. Por lo tanto, y volviendo a Sega Rally 2, al parchear el ejecutable del juego y el archivo MGAudio.dll no se crea ningún vínculo específico entre la aplicación y el juego. De hecho, si usamos los archivos parcheados (SEGA RALLY 2.EXE y MGAudio.dll) y el archivo "_inmm.ini" de otro equipo, ni siquiera necesitaremos abrir jamás la aplicación "_inmm.dll Setup": bastará con tenerla instalada y el proceso "_inmmserv.exe" se ejecutará en cuanto abramos el juego.

El parcheador creará, con extensión .org, una copia de seguridad de los archivos originales. Si borramos esas copias no podremos "desparchear" los archivos. Si te ha ocurrido esto, siempre puedes deshacer los cambios a  mano con un editor hexadecimal.

Si quieres saber qué modificaciones hace exactamente la aplicación en los dos archivos mencionados, aquí las tienes, por si necesitaras deshacerlas a mano en un momento dado:

SEGA RALLY 2.EXE (Empire)
=========================

Offset: 000A5F60
Valor (hex) sin parchear: 4B 33 32 2E 64 6C 6C 00 98 00 74 69 6D 65 47 65
Valor (hex) parcheado:    4B 33 32 2E 64 6C 6C 00 98 00 5F 69 6D 65 47 65

Offset: 000A5F70
Valor (hex) sin parchear: 74 54 69 6D 65 00 57 49 4E 4D 4D 2E 64 6C 6C 00
Valor (hex) parcheado:    74 54 69 6D 65 00 5F 49 4E 4D 4D 2E 64 6C 6C 00
MUSASHI\MGAudio.dll	
===================

Offset: 0000A0A0
Valor (hex) sin parchear: 02 A5 00 00 00 00 00 00 65 00 6D 69 78 65 72 43
Valor (hex) parcheado:    02 A5 00 00 00 00 00 00 65 00 5F 69 78 65 72 43

Offset: 0000A0B0
Valor (hex) sin parchear: 6C 6F 73 65 00 00 68 00 6D 69 78 65 72 47 65 74
Valor (hex) parcheado:    6C 6F 73 65 00 00 68 00 5F 69 78 65 72 47 65 74

Offset: 0000A0C0
Valor (hex) sin parchear: 44 65 76 43 61 70 73 41 00 00 71 00 6D 69 78 65
Valor (hex) parcheado:    44 65 76 43 61 70 73 41 00 00 71 00 5F 69 78 65

Offset: 0000A0D0
Valor (hex) sin parchear: 72 4F 70 65 6E 00 6D 00 6D 69 78 65 72 47 65 74
Valor (hex) parcheado:    72 4F 70 65 6E 00 6D 00 5F 69 78 65 72 47 65 74

Offset: 0000A0E0
Valor (hex) sin parchear: 4C 69 6E 65 49 6E 66 6F 41 00 6F 00 6D 69 78 65
Valor (hex) parcheado:    4C 69 6E 65 49 6E 66 6F 41 00 6F 00 5F 69 78 65

Offset: 0000A0F0
Valor (hex) sin parchear: 72 47 65 74 4E 75 6D 44 65 76 73 00 33 00 6D 63
Valor (hex) parcheado:    72 47 65 74 4E 75 6D 44 65 76 73 00 33 00 5F 63

Offset: 0000A110
Valor (hex) sin parchear: 6D 69 78 65 72 53 65 74 43 6F 6E 74 72 6F 6C 44
Valor (hex) parcheado:    5F 69 78 65 72 53 65 74 43 6F 6E 74 72 6F 6C 44

Offset: 0000A120
Valor (hex) sin parchear: 65 74 61 69 6C 73 00 00 6B 00 6D 69 78 65 72 47
Valor (hex) parcheado:    65 74 61 69 6C 73 00 00 6B 00 5F 69 78 65 72 47

Offset: 0000A140
Valor (hex) sin parchear: 66 00 6D 69 78 65 72 47 65 74 43 6F 6E 74 72 6F
Valor (hex) parcheado:    66 00 5F 69 78 65 72 47 65 74 43 6F 6E 74 72 6F

Offset: 0000A150
Valor (hex) sin parchear: 6C 44 65 74 61 69 6C 73 41 00 57 49 4E 4D 4D 2E
Valor (hex) parcheado:    6C 44 65 74 61 69 6C 73 41 00 5F 49 4E 4D 4D 2E
Por cierto, una alternativa interesante a tener que instalar _inmm.dll es usar sus archivos sueltos. Puedes cogerlos de la versión instalada y luego desinstalarla, o descargarlos de aquí. Deberás colocarlos todos en la carpeta raíz del juego:
  • _inmmcnf.exe → el configurador. Originalmente en la carpeta de instalación del programa (por defecto, en C:\ Archivos de Programa (x86) \ _inmm). Los cambios que hagamos en él se guardan en el registro de Windows, independientemente de que lo hayamos instalado o estemos usando los archivos sueltos, y, por lo tanto, afectarán a todos los juegos compatibles que tengamos instalados en el sistema. Ésta es la entrada donde se guardan las modificaciones de _inmmcnf.exe:
    HKEY_CURRENT_USER\Software\irori\_inmm.dll\Player
Para que _inmm.dll funcione sin instalarlo, necesitaremos que exista no sólo la subclave "\Player" en la dirección del registro, sino también los propios valores contenidos en la clave superior, "\_inmm.dll". Es interesante conocer este dato de cara a la creación de un repack totalmente automatizado. Pero, más allá de eso, si sólo nos interesa jugar, la manera más sencilla de crear la entrada completa en el registro es, directamente, ejecutando "_inmmserv.exe", hagamos o no modificaciones en él. Si usamos archivos WAV o MP3 no necesitaremos hacer ninguna modificación. Si usamos los archivos FLAC, deberemos añadir "*.flac" en la pestaña "Method" de la utilidad de configuración, como hemos visto antes.
  • _inmmcnf.ini → la base de datos con todos los juegos soportados por _inmm.dll y sus configuraciones. Originalmente en la carpeta de instalación del programa (por defecto, en C:\ Archivos de Programa (x86) \ _inmm).
  • _inmmserv.exe → el servicio que corre en segundo plano y permite que suene la música. Originalmente en la carpeta de instalación del programa (por defecto, en C:\ Archivos de Programa (x86) \ _inmm). Se ejecuta automáticamente al ejecutar el juego.
  • _inmm.dll → el dll que engaña al juego haciéndole creer que está usando winmm.dll. Si usamos el instalador de _inmm.dll, éste coloca el archivo _inmm.dll en C:\ Windows \ SysWOW64 (en el caso de sistemas operativos de 64 bits). Lo coloca ahí para que esté disponible a nivel de sistema, de modo que todos los juegos compatibles puedan hacer uso de él. Sin embargo, si cogemos este archivo y lo colocamos en la carpeta del juego, el efecto para éste será el mismo: buscará siempre el archivo winmm.dll en la carpeta del juego, primero, y, si no está ahí, entonces en la de Windows. En este caso buscará el archivo "_inmm.dll" y no "winmm.dll" porque hemos parcheado el ejecutable y MGAudio.dll. En general, archivos como dinput.dll, dinput8.dll, winmm.dll, etc., son buscados por muchos de estos juegos de manera recurrente en la carpeta del juego y en la de Windows; si no encuentran el archivo en la carpeta del juego, lo buscan en la de Windows. La ventaja de tener los archivos necesarios en la carpeta del juego es la posibilidad, junto con otros archivos y claves de registro, de obtener una versión del juego apta para ser instalada en un repack sin necesidad de instalar nada adicional fuera de la carpeta del juego, contribuyendo a la preservación del juego en estado funcional.
Siguiente parada: dgVoodoo.


╔════════════════════════════╗
Descarga, instalación 
y configuración de dgVoodoo
╚════════════════════════════╝

dgVoodoo traducirá el arcaico DirectX 6 de este juego a un más actual DirectX 11 y nos permitirá ejecutarlo a la resolución que queramos (con filtrado anisotrópico de hasta 16x y Multisampling Anti-Aliasing de hasta 8x), nos ayudará a corregir algunos problemillas de Z-Fighting aumentando la precisión del depth buffer y también nos allanará el camino para poder usar ReShade.

Para empezar, descargaremos la última versión de dgVoodoo de su web oficial. La última versión disponible ahora mismo es la 2.82.5. Una vez descargado, extraeremos del zip los siguientes archivos a la carpeta del juego:

dgVoodoo.conf
dgVoodooCpl.exe
MS\x86\D3DImm.dll
MS\x86\DDraw.dll.

Ahora, ejecutaremos dgVoodooCpl.exe como administrador para que nos guarde los cambios en el propio archivo dgVoodoo.conf ubicado en la misma carpeta. Si no lo ejecutamos como administrador, los cambios se guardarán en otro archivo dgVoodoo.conf generado automáticamente en [Disco de sistema] \ Usuarios \ [Tu usuario] \ AppData \ Roaming \ dgVoodoo, cosa que no es lo más óptimo. Si alguna vez has visto o realizado cambios en dgVoodoo que luego no se ven reflejados en el juego, es probable que dgVoodoo esté utilizando dicho archivo de configuración. Lo mejor que puedes hacer es eliminar todo lo que contenga dicha carpeta y ejecutar ya siempre dgVoodoo como administrador.

Una vez abierta la interfaz de dgVoodoo, haremos clic con el botón derecho sobre alguna zona libre de la ventana y nos saldrá un menú contextual, del que seleccionaremos "Show all sections of the configuration". Nos aparecerán, entonces, varias pestañas nuevas. Nos aseguraremos de que las opciones de las dos pestañas generales y las dos de DirectX quedan como en las capturas que se muestran a continuación:





En la resolución de pantalla de la pestaña DirectX (segunda captura) he escogido "Max". Eso ejecutará el juego a la resolución de mi escritorio. En mi caso, 3840x2160. Podría haber introducido ese valor a mano en dicho apartado, pero poniendo "Max" el resultado es idéntico y puedo compartir el archivo con gente que tenga una resolución de escritorio distinta a la mía. Te dejo los archivos de dgVoodoo aquí, incluida mi configuración. Ten en cuenta que el archivo .conf puede dejar de ser compatible con futuras versiones de dgVoodoo, de las que tampoco incluiría las novedades o últimas características. Por ello te recomiendo decargar siempre la última versión de dgVoodoo y modificar a mano el archivo dgVoodoo.conf con ayuda de las capturas.

Otro punto a destacar: en la pestaña DirectX hemos desmarcado las opciones "Application controlled fullscreen/windowed state" y "Disable Alt-Enter to toggle screen state": gracias a dgVoodoo tendremos control total del modo a pantalla completa y ventana del juego, y el cambio de uno a otro sin que el juego crashee. Esta característica nos vendrá muy bien a la hora de configurar el multijugador la primera vez, como luego veremos.

Si quieres evitar que las texturas con transparencia presenten un feo contorno negro al ser filtradas, puedes hacer una de estas dos cosas:
  • Desactivar por completo el filtrado de texturas seleccionando la opción "Force point sampled" del desplegable que aparece en la pestaña "DirectX", apartado "Texturing" - "Filtering". Marcando la opción desactivamos el filtrado y desmarcándola lo activamos. Desactivar el filtrado puede ser atractivo a priori por el aire retro de las texturas sin filtrar, pero genera un shimmering un poco feo que resta estabilidad y limpieza a la imagen en movimiento, y que no se soluciona forzando el MSAA o el filtrado anisotrópico desde el panel de control de Nvidia. Quizás se podría conseguir forzando otro tipo de anti-aliasing como SSAA desde Nvidia Inspector, pero no lo he probado. De todos modos el juego original arcade siempre ha tenido filtrado de texturas.
  • Cambiar, de nuevo desde la pestaña "DirectX", la tarjeta gráfica "emulada" por defecto, es decir, la "dgVoodoo Virtual 3D Accelerated Card" a, por ejemplo, la "GeForce 4 Ti 4800", subiéndole la VRAM a 256 MB, como se ve en la captura.
Así sería el antes y el después:


(NOTA: Para esta comparativa de capturas he activado el filtrado del HUD para hacer más evidente la diferencia. Si lo dejamos sin filtrar, el contorno negro lógicamente no aparece. El filtrado del HUD y otros elementos 2D como menús y textos se controla desde la pestaña DirectX de dgVoodoo, en la opción "Force filter only if not point sampled". Desmarcaremos la casilla para activar el filtrado y la marcaremos para desactivarlo. Véase captura n.º 2 de los ajustes de dgVoodoo).

Fíjate en los contornos de las texturas con transparencia: vallas publicitarias, las personas del público, los árboles y el HUD: como ves, dichos contornos no están filtrados en ninguno de los dos casos, dejando ese aspecto pixelado/con dientes de sierra en los bordes, a pesar de que el interior de la textura sí está filtrado y no presenta pixels. Es un filtrado bastante guarro, ya sea con el contorno negro o sin él, y es muy similar al que nos podemos encontrar en la versión TombATI del primer Tomb Raider (base del proyecto Tomb1Main, recientemente renombrado a TR1X):

Izquierda: filtrado versión 3dfx con GliDOS. Derecha: filtrado versión TombATI

Izquierda: filtrado versión TombATI. Derecha: filtrado versión 3dfx con GliDOS

Con el filtrado anisotrópico a x16, el MSAA a x8 y el Mipmapping en "Auto-gen with bilinear filter" (este último no supone, en mi experiencia, ninguna diferencia respecto a dejarlo en "App driven" en mi PC con gráfica dedicada Nvidia, pero sí produce una mejora importante en la reducción del shimmering en un MiniPC con gráfica integrada AMD, por lo que merece la pena dejarla siempre en "Auto-gen with bilinear filter", tengas el equipo que tengas) forzados en la pestaña DirectX de dgVoodoo, obtendremos una imagen tremendamente sólida y nítida, salvo en los contornos de las texturas/sprites con transparencia. Esto no tiene nada que ver con lo mencionado anteriormente de los bordes negros: ahora hablamos de aliasing, independientemente de que la textura tenga filtrado o no. Para solucionarlo y conseguir un acabado sin nada de shimmering ni aliasing en dichas texturas, activaremos el anti-aliasing de transparencia desde el panel de control de la gráfica. En el caso de Nvidia, crearemos un perfil para este juego en el panel de control y dejaremos el antialising de transparencia y el resto de opciones como se muestran en negrita en la siguiente captura:


Vuelvo a poner por aquí una captura de una entrada antigua que lo ilustra bastante bien:


En la zona 1 de esta captura aumentada al 300%, vemos el MSAA aplicado al contorno del tejadillo de la estación. En el 2, vemos que también se aplica al borde de la textura con transparencia, pero no en su interior (zona 3). Para que se aplique en esa zona, hay que activar el anti-aliasing de transparencia en el panel de control de la gráfica, tal y como acabamos de ver. Si has seguido correctamente las indicaciones disfrutarás de una imagen sin shimmering, inestabilidad, ruido ni hormigueo en las texturas oblicuas cuando hay movimiento, y que no hace constante la imagen de la textura de un fotograma al siguiente

Sin embargo, tienes que tener en cuenta un pequeño problema que se puede presentar si te pones a tocar cosas en el perfil creado para este juego en el panel de control de Nvidia, y es que, posiblemente debido a algún bug, ocurre en ocasiones que, si tocas las opciones de anti-aliasing, e incluso si vuelves a dejarlas como estaban, el filtrado anisotrópico que forzamos desde dgVoodoo se desactiva y vuelve a aparecer ese shimmering en las texturas. Esto sólo se soluciona eliminando el perfil del panel de control de Nvidia o revirtiéndolo a los valores por defecto, aplicando los cambios y luego volviéndolo a dejar como lo teníamos configurado. Quizá sea más inconsistencia de dgVoodoo que de Nvidia. Lo desconozco.

Por otro lado, si tienes una gráfica AMD, y dado que forzar SSAA desde el panel de control, sea de Nvidia o de AMD, no tiene efecto alguno en el juego, me temo que vas a tener que quedarte con las texturas con transparencia sin su ración de anti-aliasing, pues parece ser que Adrenalin, su panel de control, no incluye una opción dedicada a eso. Eso sí, asegúrate, al menos, de dejar el filtrado anisotrópico controlado por la aplicación (SR2/dgVoodoo), o interferirá con dgVoodoo y no aplicará el filtrado x16, lo que se traduce en más shimmering.


╔════════════════════════════╗
Ajustes de estabilidad y compatibilidad
╚════════════════════════════╝

La mera presencia de dgVoodoo no es suficiente para garantizar la compatibilidad y estabilidad de este bendito juego. Sin ir más lejos, se nos pueden presentar diversos errores y crasheos, tanto del juego como del applet para configurar los controles. Sirva este pequeño listado para señalar los problemas que nos podemos encontrar:
  • A veces el juego no arranca o se cierra nada más arrancar. La solución, más abajo.
  • En ocasiones el juego crashea antes de llegar a la pantalla de título del juego, justo después de la splash screen de Empire Interactive y justo antes del menú principal. La solución a esto es cargarnos dicha pantalla de Empire Interactive eliminando o renombrando el archivo "VendorLogo.dll" que está en la carpeta principal del juego.
  • En otras ocasiones conseguiremos llegar al menú e incluso iniciar una partida, pero el juego crasheará en la pantalla de selección de Campeonato o Práctica. Este fallo suele darse junto con otro en el que el juego cambia los ajustes gráficos y de sonido dentro del mismo al mínimo. Por mucho que los modifiquemos, cada vez que lo volvamos a ejecutar seguirá todo al mínimo. Es como si cada vez que saliéramos del juego, éste restaurase unos valores mínimos, que ni siquiera son los valores por defecto. Pues bien, cuando se ha dado circunstancia el juego ha crasheado en la pantalla de selección de Campeonato o Práctica, es decir, la pantalla inmediatamente anterior a la selección de vehículo, como comentaba. Por suerte, toda esta mandanga sólo me ha pasado una vez, por lo que lo considero un error muy raro. Sólo lo pude solucionar desinstalando el juego por completo y volviéndolo a instalar. Desde entonces no ha vuelto a suceder.
  • En ocasiones, el juego no tendrá música. Este problema y la solución ya han sido descritos en el apartado anterior.
  • Otras veces, arrancaremos el juego y escucharemos música pero no sonido. Cuando sucede esto dejan de funcionar, también, los mapeos de control externos que hayamos podido hacer con Joy2Key, DS4Windows, etc. Está relacionado con la pérdida de foco de la ventana, aunque a priori sigamos viendo el juego a pantalla completa. A veces se soluciona fijando el foco en otra ventana con Alt+TAB y volviendo a la ventana del juego. Si eso falla, cerraremos el juego y lo volveremos a abrir. Y si eso no funciona, probaremos a reiniciar el PC.
  • En el momento de guardar un replay, el juego crasheará. Puede que nuestros avances y el propio replay se guarden, o puede que no. Y puede que se guarde el archivo de replay pero no nuestros avances. Me ha pasado alguna vez y no he visto manera de solucionarlo. El visor de eventos de Windows dice que el error lo produce el archivo "C:\Windows\SYSTEM32\ntdll.dll". Ignoro si este fallo se puede remediar de algún modo. Yo no he encontrado la solución. Por cierto: los replays se guardan en archivos con extensión .SR2 dentro de la carpeta del juego, y los avances del juego y ajustes que toquemos en los menús in-game quedan registrados en el archivo "SR2_SAVE.DAT", en esa misma carpeta. Ah, y aquí tienes un archivo de partida guardada con el 100% del juego completado. Si quieres usarlo, simplemente pégalo en la carpeta del juego.
  • En el modo demo/attract el juego crashea a veces tras la splash screen con la URL, justo antes de mostrarse los gráficos 3D. No es lo más común, y se soluciona con la última configuración y combinación de archivos que describiré en breve.
  • El applet del panel de control para configurar los controles puede funcionar siempre sin problema o, como en m icaso, puede hacerlo una de cada 100 o 200 veces, al menos en Windows 11 Pro 23H2, porque en otro PC con Windows 11 Home 23H2 funciona siempre. En cualquier caso, lo vamos a solucionar. Sigue leyendo.
La buena noticia es que podemos solventar la inmensa mayoría de estos problemas mediante unos sencillos ajustes, salvo los indicados expresamente:
  • Para el ejecutable del juego, SEGA RALLY 2.exe, lo ejecutaremos en modo compatibilidad con Windows XP SP3. Con esto nos aseguraremos de que dgVoodoo funcione: de otro modo, no lo hará. Raro pero cierto. Aparte de eso, marcaremos la opción de ejecutar como administrador. Si tienes una resolución nativa alta, como 4K, te recomiendo también cambiar los ajustes de DPI y dejar que sea la propia aplicación la que lo gestione. En resumen, déjalo todo como esta imagen:
  • En cuanto al otro ejecutable de la carpeta, LAUNCH.EXE, te recomiendo que marques sólo la opción de ejecutar como administrador. Pero no dejes de marcarla.
  • Además, añadiremos a la whitelist del Data Execution Prevention de Windows (DEP) ambos ejecutables presentes en la carpeta del juego. Esto se hace desde la ventana de propiedades del sistema: iremos a Inicio - Ejecutar y escribiremos "sysdm.cpl". Aceptaremos y se nos abrirá dicha ventana. Iremos a la pestaña "Avanzado" y haremos clic en "Ajustes" dentro del apartado "Rendimiento". Se nos abrirá otra ventana. Iremos a la última pestaña, la relativa al DEP, y añadiremos los dos ejecutables:

  • Eliminaremos o renombraremos, como ya hemos mencionado, el archivo VendorLogo.dll. Adiós al logo de Empire Interactive, pero es por una buena causa. Además, el logo bueno, el de SEGA, sigue estando.
  • En cuanto al ajuste de controles, ya sabes que en este Sega Rally 2 no se realiza desde el propio juego sino desde una aplicación externa, que en este caso es un applet del clásico panel de control de Windows. Totalmente rocambolesco, pero es lo que hay. Tenemos 3 maneras de ejecutar dicho applet:
    • Desde el launcher (LAUNCH.EXE) de la carpeta del juego (ejecutando SIEMPRE como administrador). Te recomiendo utilizar esta vía si quieres tener la garantía de que los ajustes que hagas en los controles van a quedar guardados para la siguiente partida.
    • Desde el antiguo panel de control de Windows. Podemos acceder fácilmente desde Inicio - Ejecutar -  "Control Panel".
    • Ejecutando directamente el archivo de panel de control que se crea cuando se instala el juego. Se llama "sr2_cpl.cpl" y está en "C: \ Windows \ SysWOW64". (Como nota al margen, en dicha carpeta el juego copia también otro archivo: "CABINET.DLL". Es un archivo de Microsoft para gestionar la descompresión de archivos .cab. Los Windows actuales tienen una versión más pesada y actualizada de dicho archivo, y no permitirán al instalador del juego sustituirlo por el antiguo, a menos que hayas tomado posesión de la carpeta SysWOW64. No hace falta: todo funciona igual de bien con el archivo moderno).
Como he mencionado antes, que el applet se ejecute correctamente en Windows 11 Pro 23H2 (y anterior) es algo totalmente desquiciante por su aleatoriedad: puede ejecutarse a la primera, como no ejecutarse en absoluto, como hacerlo después de clicar 100 veces. Además, de los tres ordenadores donde he probado, sólo me pasa en el PC de sobremesa. Todo un misterio que ni siquiera el visor de eventos de Windows (eventvwr → Windows logs → Application) me ha ayudado a comprender. Sin embargo, dado que a veces apuntaba al archivo dinput.dll presente en dicha carpeta SysWOW64, tuve la feliz idea de sustituirlo por el de Dinputto8, un wrapper de DirecInput 1-7 a DirectInput 8.

Si no has tenido problemas para ejecutar el configurador de control, puedes omitir lo que viene ahora, que se basa en la sustitución del archivo "dinput.dll" ubicado en la carpeta SysWOW64 de Windows. Y, si como yo, estás teniendo problemas para ejecutar el configurador, esto te interesa, pero te advierto que, para meterle mano a archivos y carpetas del sistema, vas a tener que reclamar su propiedad. Esto se realiza mediante la característica "Take Ownership" de Windows, que se puede añadir como opción del menú contextual que aparece cuando hacemos clic con el botón derecho sobre cualquier archivo o carpeta en Windows. En este enlace te muestra primero cómo hacerlo tú a mano paso a paso, pero luego al final te lo da ya hecho en forma de archivo .reg que no tienes más que ejecutar una vez (mirror aquí). Funciona sin problemas en Windows 11. Al ejecutar el archivo "Add Take Ownership to Context menu.reg" nos dirá que es peligroso modificar el registro, bla bla bla... Lo de siempre, vaya. Aquí es cuando tengo que decir que no me hago responsable de tal y tal y tal... No me ha dado ningún problema, y además se puede revertir ejecutando el otro archivo del zip, "Remove Take Ownership from Context Menu (Default).reg".

Una vez que lo tengas, ve a la carpeta Windows, busca la carpeta SysWOW64, haz clic con el botón derecho para desplegar el menú contextual y haz clic en la nueva opción "Take Ownership" ("Tomar posesión" o como se diga en español, si es que viene en español). Te saldrá una ventana de CMD donde se muestra cómo te estás haciendo dueño y señor de todos y cada uno de los archivos y carpetas contenidos en SysWOW64. Cuando termine el proceso ya podrás sustituir el archivo "dinput.dll" por el de Dinputto8. Es curioso. El creador de Dinputto8 recomienda expresamente en su web no hacer lo que acabamos de hacer:
Note: Do not attempt to overwrite any .dll in a Windows system directory as it is currently not supported and will not work.
Sin embargo, a mí sí me ha funcionado, ya lo creo. En todo caso, te recomiendo que no elimines el archivo dinput.dll original y simplemente lo renombres a algo como "dinput.dll.old" o similar, por lo que pudiera pasar.

Con esta maniobra habremos conseguido que el configurador de mandos y controles se ejecute correctamente el 100% de las veces. Si a ti ya te funcionaba bien, es ahora cuando puedes seguir leyendo.
  • Para evitar el resto de crasheos señalados como solucionables, especialmente al arrancar el juego, la solución es la misma: pegar el archivo "dinput.dll" de Dinputto8 en la carpeta del juego. De hecho, vamos a usar una combinación de Dinputto8 y Xidi, puesto que también pondremos en la carpeta del juego el archivo dinput9.dll de la carpeta Win32 del zip de Xidi. En el apartado de controles comentaremos esto en detalle.
  • Por último, restringiremos al máximo los procesos que arrancan con el sistema para evitar que otras aplicaciones puedan acaparar el foco, y que pueden provocar que nuestro juego se ejecute fuera de foco. Iremos a Inicio - Ejecutar y escribiremos y ejecutaremos "msconfig". En la ventana que nos saldrá iremos a la pestaña "Servicios". En la parte inferior marcaremos la casilla de "Ocultar todos los servicios de Microsoft" y, del listado que queda, desmarcaremos todo menos el panel de control de Nvidia:


Igualmente podemos desactivar, desde el Administrador de tareas, el arranque de aplicaciones que no queremos que se ejecuten al iniciar Windows (Ctrl+Mayus+Esc) y buscaremos a la izquierda "Startup apps", o como quiera que venga en español. Allí podremos desactivar el inicio de todo lo que no queramos que arranque con Windows:


Antes de continuar al siguiente apartado, no olvides activar DirectPlay tal como se explica al final del proceso de instalación del juego, si no lo habías hecho ya.


╔════════════════════════════╗
Ajustes de control
╚════════════════════════════╝

Antes hemos avanzado que usaremos una combinación de, de nuevo, Dinputto8 y Xidi. Dinputto8 "traducirá" DirectInput 1-7 a DirectInput 8, y Xidi terminará el trabajo de DirectInput8 a XInput. Podríamos utilizar sólo Xidi para wrappear DirectInput 1-7 a XInput, pero con Dinputto8 ganamos la estabilidad que necesitamos para que el juego arranque correctamente prácticamente el 100% de las veces, cosa que no ocurre ni de lejos cuando sólo usamos Xidi. De hecho, un amigo probó en su PC y sólo con Xidi el juego ni le arrancaba. Sin embargo, con Dinputto8 + Xidi, sí.

Eso sí, te aconsejo ejecutar el juego desde "SEGA RALLY 2.exe" y no desde "LAUNCH.EXE", pues este último provoca que la ventana del juego arranque minimizada y fuera de foco, como ocurría con el launcher del Ford Racing Off-Road, lo que nos obliga a seleccionarla manualmente. Estas pérdidas de foco muchas veces terminan en crasheos.

Si has leído hasta aquí, ya deberías haber descargado Dinputto8 (mirror) y Xidi (mirror). También deberías haber colocado el archivo dinput.dll de Dinputto8 y el archivo dinput8.dll de Xidi (carpeta Win32 del zip de Xidi) en la carpeta del juego. Además, y sólo si tienes problemas para ejecutar el applet de configuración de control, deberías haber colocado otra copia del archivo dinput.dll de Dinputto8 en la carpeta SysWOW64 de Windows.

Bien, pues ahora ejecutaremos el configurador de control:


A pesar de que soy muy de la vieja escuela y que suelo asignar acelerador y freno a botones digitales del mando en vez de a los gatillos analógicos, me gusta que la opción esté y se pueda utilizar.

Ahora, para poder asignar los dos gatillos a dos ejes analógicos completamente independientes, tenemos que hacer dos cosas:

1ª.- Crear un archivo Xidi.ini con este contenido:
    [Mapper]
    Type            		   = ModifiedExtendedGamepad
    Type.1                             = ModifiedExtendedGamepad
    Type.2                             = ModifiedExtendedGamepad
    Type.3                             = ModifiedExtendedGamepad
    Type.4                             = ModifiedExtendedGamepad
    
    [CustomMapper:ModifiedExtendedGamepad]
    Template	    = ExtendedGamepad
    DpadUp              = Keyboard(UpArrow)
    DpadDown            = Keyboard(DownArrow)
    DpadLeft            = Keyboard(LeftArrow)
    DpadRight           = Keyboard(RightArrow)
    ButtonStart         = Keyboard(Enter)
    ButtonBack	    = Keyboard(TAB)
    StickRightY 	    = Split(Keyboard(PgDn), Keyboard(PgUp))
    ButtonRS	    = Keyboard(NumpadMinus)
    ButtonLS	    = Keyboard(NumpadStar)
    
    [Properties]
    MouseSpeedScalingFactorPercent      = 100
    UseBuiltInProperties                = yes
    DeadzonePercentStickLeft            = 0
    DeadzonePercentStickRight           = 0
    DeadzonePercentTriggerLT            = 0
    DeadzonePercentTriggerRT            = 0
    SaturationPercentStickLeft          = 100
    SaturationPercentStickRight         = 100
    SaturationPercentTriggerLT          = 100
    SaturationPercentTriggerRT          = 100
    
    [Log]
    Enabled                             = no
    Level                               = 1
    
    [Import]
    dinput.dll                          = C:\Windows\system32\dinput.dll
    dinput8.dll                         = C:\Windows\system32\dinput8.dll
    winmm.dll                           = C:\Windows\system32\winmm.dll

En ese archivo estamos usando un mapper personalizado basado en el mapper ExtendedGamepad, que de por sí permite usar los dos gatillos como ejes analógicos totalmente independientes uno del otro. 

La personalización consiste en la introducción de los siguientes mapeos/asignaciones de cosecha propia orientados a la navegabilidad por la interfaz del juego:
  • Cruceta del mando asignada a los cursores del teclado para poder movernos por los menús con la cruceta ya que, por defecto, la navegación por los menús se realiza con el stick izquierdo.
  • Botón START / OPTIONS (PlayStation) / MENU (Xbox) del mando asignado a la tecla Intro para pausar / despausar el juego, y también para salir del modo demo / replay. Con esto nos ahorramos el usar joy2key o crear un perfil custom de DS4Windows, Xpadder, reWASD, etc.
  • Botón SELECT / SHARE (PlayStation) / BACK (Xbox)  del mando asignado a la tecla TAB del teclado para poder acceder al menú de configuración de partida (y ajustes de coche) en el modo multijugador online.
  • Eje vertical del stick derecho del mando asignado a las teclas Re.Pág (PgUp) y Av.Pág (PgDn) para poder movernos por algunos menús como, por ejemplo, los récords. También para poder acceder a los modelos alternativos de algunos coches (ver sección de trucos hacia el final de esta guía), y para ajustar la distancia de la cámara libre en el modo repetición. Fíjate en la sintaxis de este mapeo en concreto:
    StickLeftY = Split(Keyboard(PgDn), Keyboard(PgUp))
    Como ves, he tenido que poner primero la tecla PgDn (Av.Pág) y luego PgUp (Re.Pág), ya que parece que primero mapea el eje Y negativo del stick y luego el positivo.
A estas alturas queda claro que Xidi y su sintaxis se basan en el esquema de mando clásico de Xbox 360, el estándar XInput por excelencia:


El juego asigna por defecto la acción de aceptar al botón X (PlayStation) / A (Xbox) y cancelar al Circulo (PlayStation) / B (Xbox). Como es un esquema clásico que se sigue usando a día de hoy, no he incluido ninguna modificación al respecto en el mapper personalizado.

2º.- Ir a la configuración de mandos del juego y dejar el acelerador y el freno tal como se ve en esta captura (en unos párrafos explicaré por qué):


Xidi define varios tipos de mapeadores integrados, como se indica a continuación:
  • StandardGamepad emula los antiguos gamepads tipo Sony PlayStation, como el Logitech RumblePad 2. Como era común en estos mandos, el stick derecho se asigna a los ejes Z y Z-rotation. LT y RT están asignados a botones digitales; toda la funcionalidad analógica de los gatillos se elimina, pero los controles son utilizables.
  • DigitalGamepad emula los antiguos gamepads completamente digitales como el Gravis GamePad Pro. Todos los ejes son digitales, es decir, sin funcionalidad analógica. Tanto el stick izquierdo como la cruceta se asignan a los mismos ejes X e Y. Aunque los mandos de este tipo típicamente solo tenían dos ejes, el stick derecho, no obstante, es asignado a los ejes Z y Z-rotation de forma digital.
  • ExtendedGamepad es como StandardGamepad pero conservando la funcionalidad analógica de los gatillos LT y RT, a los que se les asignan los ejes de X-rotation e Y-rotation para mantener la asignación del stick derecho a los ejes Z y Z-rotation.
  • XInputNative emula el comportamiento en Windows anteriores a Windows 10 cuando se conectaba un mandode Xbox One. El stick derecho se asigna a los ejes X-rotation e Y-rotation, y los gatillos se asignan individualmente a los ejes Z y Z-rotation. Esta configuración rompe muchos juegos antiguos, pero se presenta como una opción para aquellos que la requieren.
  • XInputSharedTriggers refleja el comportamiento actual de Windows 10 cuando se conecta un mando de Xbox One o Xbox 360. El stick derecho se asigna al eje X-rotation e Y-rotation, pero los gatillos comparten el eje Z. Esto preserva la funcionalidad analógica de los gatillos, pero evita que se usen de forma independiente.
Escogeremos el mapeador que más nos interese en cada ocasión. También hay que tener en cuenta que podemos modificar cada uno de ellos a nuestro antojo y crear mapeadores personalizados basados en los que ya existen, como el que hemos visto hace un momento. En este enlace hay más información de cómo funciona la sintaxis de Xidi.

El configurador de controles del juego reconoce las pulsaciones de los botones digitales y ejes analógicos del mando, pero una cosa son esas pulsaciones que reconoce fuera del juego (por ejemplo, reconoce los gatillos LT y RT como el eje analógico Z- y Z+, respectivamente) y otra cosa es el control dentro del juego, momento en el que Xidi aplica por la fuerza un mapeador, ya sea integrado o personalizado. Esto explica que, por ejemplo, entremos al juego y descubramos que el acelerador y freno analógicos se manejan en realidad con el eje X+ y X- del stick derecho, en vez de con los gatillos, como lo habíamos configurado en el applet. La explicación:


Como vemos en esta tabla, se puede escoger el mapeador de Xidi que más se adapte a las necesidades de cada juego, especificándolo en el archivo Xidi.ini. Si no especificamos nada o no usamos archivo Xidi.ini, Xidi aplicará por defecto el mapeador "StandardGamepad", en el que los gatillos se vuelven botones digitales.

Sin ejecutar el juego, Xidi no actúa para nada y nuestro mando XInput responde de forma nativa, es decir, como lo haría Xidi si aplicáramos el mapeador "XInputNative" (los gatillos son el eje Z). Sin embargo, una vez entramos al juego y Xidi comienza a aplicar el mapeador ExtendedGamepad (que es el único que permite separar los gatillos en dos ejes), vemos que la parte del mando asignada al eje Z, que es el que eje que habíamos asociado a las acciones de acelerar y frenar en el applet configurador, ha cambiado al stick derecho, como se puede ver en la parte superior de la columna ExtendedGamepad. Los gatillos LT y RT, como se ven en esa misma columna marcados en amarillo, han pasado a controlar los ejes X- e Y-, respectivamente. Por lo tanto, lo que tenemos que hacer para controlar el acelerador y el freno con los gatillos es configurar el applet de tal manera que el acelerador se accione con el eje Y- y el freno con el X- para que, cuando entremos al juego y Xidi aplique el mapeador ExtendedGamepad, quien controle los ejes X- e Y- sean los gatillos LT y RT, respectivamente, tal y como hemos hecho y se muestra en la captura anterior a la tabla.

Y, por esta misma razón, el/los mando/s virtual/es creado/s por Xidi, "Xidi Virtual Controller" (tantos mandos como le hayamos indicado en el archivo Xidi.ini), no aparecen en la lista de mandos en el applet configurador externo, porque Xidi no está actuando aún. Si se pudieran ver los mandos conectados al equipo desde los ajustes dentro del propio juego, estos mandos virtuales de Xidi figurarían en la lista con total seguridad. Explico esto porque, a finales del año pasado, pude hacer una captura del applet en la que "Xidi Virtual Controller 1" figuraba en el desplegable de mandos detectados:


Esta captura fue realizada muy al principio de meterme con este juego, a finales de 2023, cuando todavía no había conseguido que el juego funcionase de manera estable ni arrancase a la primera. Recuerdo tener a veces que matar el proceso del juego desde el administrador de tareas cuando el juego no había terminado de arrancar correctamente, cosa que ocurría con cierta frecuencia. Seguramente en una de esas ocasiones, estando cerrada la ventana del juego pero con el proceso aún en ejecución de manera furtiva, debí de abrir el configurador de controles del juego mientras Xidi todavía seguía activo, por estarlo también el propio proceso del juego. Y, si Xidi estaba activo, el "Xidi Virtual Controller" lo estaba también y aparecía en la lista de mandos conectados.

Pero, más allá de la anécdota, el que para mí es el plato fuerte de Xidi es su capacidad para solventar el mayor problema de la retrocompatibilidad de XInput con DirectInput: la ausencia de vibración en juegos DirectInput al usar un mando XInput (gracias, Microsoft). Xidi restaura esa vibración, haciendo que funcione en un mando XInput. En efecto, este juego tiene vibración / force feedback. Que yo sepa, este dato no viene especificado en ningún sitio: ni manual, ni menú de ajustes. Además, ni siquiera permite configurarla, activarla, desactivarla, cambiar la intensidad... Es como si, durante el proceso de portear el juego de Dreamcast a PC, no hubieran reparado en la vibración y simplemente funcionase porque se la hubieran dejado habilitada en el código. Y realmente la vibración es muy fiel a lo que podemos experimentar en el arcade original: la notaremos, sobre todo, al girar el volante. Es como si lo que estuviéramos experimentando con el mando fuesen directamente las señales de force-feedback del volante de la recreativa trasladadas tal cual a DirectInput. En un mando normal, simplemente se produce vibración. Si conectamos un volante, quizá tengamos una experiencia de resistencia del volante como en el arcade. Es de las pocas cosas que no he podido probar, de momento. Volviendo al mando, aunque no giremos la dirección, éste vibrará también con el terreno, los baches y las colisiones. No sé qué tipo de vibración tiene el juego en Dreamcast, pero imagino que será idéntica. Ahora, gracias a Xidi, podremos experimentar todo eso en nuestro mando XInput. Lástima que la vibración pueda ser un poco potente a veces y Xidi no permite regularla. Sin embargo, sí permite desactivarla. Para ello, bastará con introducir los siguientes comandos en nuestro archivo Xidi.ini, al final de la sección CustomMapper:
ForceFeedback.LeftMotor      = Disabled
ForceFeedback.RightMotor     = Disabled
Por último, si escojo Xidi por encima del driver de Masahiko Morii (más info de esto en entradas anteriores) es por dos motivos:
  • Xidi tiene muchas más opciones de configuración con los mapeadores por defecto, los mapeadores custom que utilizan un mapeador como base, o los mapeadores totalmente custom. Esto permite, entre otras cosas, asignar ciertas partes del mando al teclado, como hemos hecho en este juego con la cruceta y varios botones. Esto nos evita tener usar más programas (joy2key, DS4Windows, reWASD, etc.). También permite cambiar la sensibilidad de los ejes y muchas otras cosas.
  • La vibración funciona en cualquier mando XInput, sea de 360, de One, de Series o XInput genérico, y ya esté conectado por cable o por bluetooth. El driver de Masahiko, por ejemplo, está limitado a un puñado de Hardware IDs, por lo que no funciona ni mucho menos con todos los mandos XInput.
Estos son todos los mandos que he probado esta vez. El éxito ha sido del 100%, y sin necesidad de instalar el driver de Masahiko Morii, es decir, sólo con Xidi. Creo que son mandos lo suficientemente dispares como para hacernos una idea de la versatilidad de Xidi:
  • Dualshock 4 conectado por bluetooth: gracias a DS4Windows (definitivamente, ahora sí que de verdad de la buena, extinto y sucedido por este fork), el sistema operativo lo reconoce como mando XInput de Xbox 360 y, por lo tanto, podremos usarlo con Xidi. El custom mapper que estamos utilizado evitará que tengamos que crear un perfil específico de DS4Windows para este juego, al estar la cruceta y el botón Start/Options asignados a los cursores y al Intro, respectivamente.
  • 8BitDo Ultimate C Wired Controller conectado por cable USB: es un mando XInput genérico. Windows no lo reconoce como mando de 360 ni One, a diferencia de otros. Sin embargo, también funciona a la perfección con Xidi.
  • Mando de Xbox Series conectado por bluetooth: también funciona a la perfección.
De hecho, los tres mandos deberían funcionar exactamente igual con un mismo perfil configurado en el applet de configuración de los controles. No he usado volante, pero no debería haber ningún problema para hacerlo funcionar con Xidi, siempre y cuando sea XInput. Para obtener una experiencia lo más cercana posible al arcade original usando esta versión de PC (ya sabemos que el arcade original de Model 3 se puede emular a la perfección en Supermodel), deberás limitar el ángulo de giro a 270º en cada dirección, si tu volante lo permite. La mayoría de arcades de conducción de Model 2 y Model 3 tienen ese ángulo de giro (+info). Un ejemplo de volante que permite ajustar los ángulos topes de giro es el Thrustmaster T300RS

Si tenemos algún viejo mando DirectInput guardado en un cajón, como el RumblePad 2 USB de Logitech, la forma de hacerlo funcionar con Xidi sería wrappeándolo primero a un mando de Xbox 360 / One virtual, como hace DS4Windows con el Dualshock 4 y el DualSense. En el caso del Rumblepad 2 tendríamos que usar algo como XOutput para que Xidi lo reconozca como un mando XInput. Eso o Xidi a un lado y usar el mando directamente en modo DirectInput que es. Lo malo es que muchas veces la vibración en este tipo de mandos no funciona a menos que instalemos drivers o software de control específicos para ese modelo. Dicho software suele estar totalmente obsoleto y dar más problemas que soluciones.

Por último, y dejando a un lado el tema Xidi, añado aquí que todos los ajustes que hemos realizado en el applet de configuración de los controles del juego se quedan guardados en el registro de Windows, concretamente en esta dirección:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Sega\SEGA RALLY 2\InputSettings\0
Lo he podido comprobar mediante la aplicación RegScanner, que nos permite ordenar todas las entradas del registro por fecha de modificación. Eso sí, la localización de guardado de esos ajustes no pasa de ser una mera anécdota, pues poco o nada podemos hacer intentando modificarlo de manera manual (imposible identificar los controles en ese batiburrillo hexadecimal. Requeriría unas herramientas de análisis y unos conocimientos que no tengo). Aparte, no tiene sentido, puesto que ya tenemos el applet configurador de controles funcionando perfectamente.

                                        

Por último, quiero dejar aquí constancia de los controles para las cámaras en las repeticiones. Por defecto, la cámara que se nos presenta es la de televisión, pero disponemos de otras a las que podremos acceder mediante los cursores del teclado (o la cruceta, si usamos el perfil de Xidi que he puesto anteriormente):
  • Cursor o cruceta arriba/abajo → rotaremos entre las cuatro principales cámaras: cámara de lateral del coche, cámara interior, cámara exterior libre, y vuelta a la cámara de TV. Las cámaras irán en este orden si usamos cursor o cruceta arriba, o en el orden inverso si usamos cursor o cruceta abajo.
  • Podremos modificar todas las cámaras salvo la de TV. Para ello, elegiremos con el cursor o cruceta arriba/abajo la cámara que nos interesa y pulsaremos el cursor o cruceta izquierda/derecha. Éstas son las posibilidades:
    • En cámara lateral podremos alternar entre lado izquierdo y lado derecho.
    • En cámara interior podremos alternar entre interior y exterior. Estas dos cámaras son las mismas que usamos al jugar.
    • En cámara exterior libre podremos rotar libremente la cámara alrededor del coche en 360º. Eso sí, en el mismo plano horizontal. Rotar la cámara hasta colocarla en el morro del coche mirando hacia atrás es lo más parecido a un espejo retrovisor que vamos a tener en este juego. Es una pena que esta cámara no pueda usarse para jugar.
  • Con las teclas Av.Pág y Re.Pág (mapeados a Stick derecho arriba y Stick derecho abajo con Xidi), haremos zoom in o zoom out (realmente la cámara se acerca o aleja físicamente del coche, no es un zoom como tal). Funciona con la cámara libre.
Además, podremos quitar o poner el HUD durante las repeticiones. Puede ser interesante para ver las imágenes de la carrera sin ninguna otra distracción visual. Se desactiva con la tecla Suprimir y se activa con la tecla Insertar. Si usamos mando, ambas acciones se realizan con un mismo botón: X (Playstation) / A (Xbox).

A modo de resumen, dejo aquí el esquema de control para mando, que combina los controles personalizados del applet de configuración, y el perfil de Xidi hecho para la ocasión, donde se mapean al mando diversos controles de teclado que nunca fueron trasladados al mando:



╔════════════════════════════╗
Ajustes gráficos y de sonido
╚════════════════════════════╝

Los ajustes gráficos y de sonido del juego están repartidos entre el configurador externo y los propios menús in-game. Vamos a comentar rápidamente algunos aspectos. Para ello, ejecutaremos LAUNCH.EXE (siempre como administrador) y nos dirigiremos al apartado "Configuración de pantalla" o "Display Settings":


Resulta que en ese apartado se encuentran no sólo ajustes gráficos sino, también, de sonido:



Poco que comentar, aparte de ese desafortunado "Hardwear" en el título de la ventana, que da a entender que este port ha sido llevado a cabo por algún estudio japonés: podemos dejar la resolución que viene por defecto, 640x480, o cambiarla a 800x600, ya sea desde aquí o desde el menú de opciones gráficas dentro del juego (enseguida te muestro con capturas qué cambia de 640x480 a 800x600). No marcaremos la opción "Use AGP Memory". Creo que da igual marcarla o no, pero por defecto viene desmarcada.

En cuanto al sonido, dejaremos la opción por defecto: Stereo. El sonido 3D no tiene ninguna pinta de ser EAC. Apenas lo he probado y no sé qué repercusión puede tener en la estabilidad. De hecho, en el Readme.txt del juego recomiendan no usarlo..:
SOUND (DISPLAY SETTINGS)
Please select either STEREO or MONO.  Do not choose 3D SOUND.
Acojonante. No llegarían a tiempo para incluirlo en condiciones, se quedó a medias y jamás lo parchearon. Por suerte, el modo stereo funciona bien.

Si entramos en el juego, nos encontramos con los siguientes ajustes gráficos y de sonido:


Todos los ajustes gráficos vienen al máximo, salvo la resolución. Te recomiendo dejarlos así, incluyendo los 60fps (sin judder ni framepacing, estables como una roca), y dejar la resolución en 800x600. Te puede surgir la duda: si es dgVoodoo quien decide a qué resolución se renderiza el juego, ¿existe alguna diferencia entre elegir 640x480 u 800x600 dentro del mismo? Claro que sí: como ya sabrás si has leído otras entradas de este blog, un cambio de resolución a nivel interno suele significar un cambio en el tamaño del HUD y/o menús/elementos 2D del display. En resumen: a 640x480 se verá el HUD más grande que a 800x600, a pesar de que los elementos 3D del juego estarán siempre renderizándose a la misma resolución marcada por dgVoodoo. Te paso un par de capturas con la diferencia de tamaño del HUD que te ayudarán a elegir la que más se adapte a tus gustos:

640x480

800x600

Personalmente me quedo con 800x600, ya que el HUD resulta menos intrusivo y se sigue leyendo a la perfección. A pesar de eso, la inmensa mayoría de las capturas que verás en esta entrada del blog pertenecen a la versión 640x480, cuando aún no me había decidido por 800x600.

Por cierto, y ya que estamos delante de las capturas: si te fijas en la parte inferior derecha de la sombra del coche, puedes ver algunas líneas negras. Esto pequeño fallo gráfico sin importancia está presente también en Dreamcast y en PC con hardware y sistemas operativos de la época, por lo que no es problema de Windows 11, de dgVoodoo ni de ReShade.

En cuanto al sonido, la primera opción es la misma que la del configurador externo. Y, de nuevo, vienen escogidos por defecto los ajustes de mayor calidad. Eso sí, he intentado bajar el volumen de la música BMG pero parece que tiene efecto únicamente en la música de algunos menús y de los finales de carrera, es decir, en toda la música del juego que no sea CDDA. Por cierto, gracias a "_inmm.dll" podemos volver a disfrutar durante las carreras, como hemos explicado en detalle en el apartado de recuperación de la música, de las geniales músicas de este juego.

Algo me dice que usando el CD físico original del juego en un equipo de la época, el volumen de la música CDDA tampoco se podía ajustar desde ese menú, pero no tengo medios para confirmarlo o desmentirlo. 

Sin embargo, en realidad sí podemos controlar el volumen de la música de CD de manera independiente en este juego en Windows modernos. Tenemos dos maneras, que realmente vienen a ser la misma:
  • Puesto que estamos gestionando el estado pantalla completa/ventana y el cambio de uno a otro con Alt+Enter mediante dgVoodoo, podemos arrancar el juego, esperar a que arranque el proceso _inmmserv, poner el juego en modo ventana con Alt+Enter, ir a los ajustes de volumenes de audio de Windows y bajar o subir el correspondiente a dicho proceso, que está gestionando únicamente la música CD-Audio.
  • La otra opción es usando la Xbox Game Bar que viene por defecto instalada en Windows 10-11. Si arrancamos el juego y, en cualquier momento, pulsamos la combinación de teclas Win+G, nos aparecerá dicha barra con un montón de opciones. Nos iremos a los ajustes de audio en la parte izquierda y, desde allí, podremos gestionar el volumen del proceso _inmmserv y el del propio juego también, aunque no te recomiendo tocar este último, ya que, si lo bajas del 100%, funcionará en esta partida, pero cuando cierres el juego y lo vuelvas a abrir, no tendrá sonido (la música sí sonará). Si quieres bajar el volumen del juego, por tanto, te recomiendo hacerlo desde los ajustes de sonido dentro del propio juego. No obstante, considero que el valor por defecto, con efectos de sonido y música a tope, es el ideal.
Aquí la vista general de la barra:


Y aquí la vista ampliada de los controles de volumen de audio:


Por último, todos los ajustes de gráficos y sonido del propio juego se guardan en el archivo "SR2.CFG" dentro de su carpeta, no así los de los controles del applet externo, que se guardan en el registro de Windows, como hemos comentado antes.


╔════════════════════════════╗
ReShade
╚════════════════════════════╝

Reshade es un inyector de efectos por post-procesado -tales como oclusión ambiental, profundidad de campo, aberración cromática, grano/ruido, correcciones de color, etc.- desarrollado por Crosire, que podemos aplicar a nuestro juego para cambiar y mejorar su aspecto gráfico. ReShade funciona con juegos en DirectX 9, 10, 11, 12, OpenGL y Vulkan.

Primero, descargaremos ReShade desde su web oficial. En el momento de escribir esto, la última versión disponible sigue siendo la 6.1.1. Al ejecutar el archivo nos pedirá que localicemos el ejecutable del juego donde queremos inyectar ReShade (por defecto, el juego se instala en C:\Archivos de Programa (x86)\Sega\Sega Rally 2, aunque recomiendo instalarlo en C:\SEGA RALLY 2):


A continuación, tenemos que decirle a ReShade qué API gráfica está usando nuestro juego. El juego corre bajo DirectX 6, pero ya sabemos que, por mediación de dgVoodoo, el juego está siendo "convertido" a DirectX11 "al vuelo" (más que "conversión", el término correcto es "wrapping"), por lo que marcaremos la segunda opción:


En el siguiente paso, podemos simplemente continuar y crear nosotros nuestro propio preset jugando con los distintos shaders y configuraciones, o podemos importar uno ya hecho, como se ve en la parte inferior de la siguiente captura. Éste es el preset que yo he creado, el cual comentaré en detalle al concluir la instalación de ReShade. Si lo usas, te recomiendo que lo guardes en la carpeta del juego. Así, sólo tendrás que buscarlo allí y seleccionarlo:


Al seleccionar el perfil podemos ver cómo automáticamente se han seleccionado sólo los shaders que intervienen en dicho perfil, dejando desmarcados los demás. Si vamos a trastear con los shaders, puedes marcar todos los que quieras. Si no, puedes dejarlo como está y darle a "Next". A continuación, el programa se conectará a internet para descargar los shaders seleccionados. Una vez terminado, sólo queda hacer clic en "Finish" para concluir la instalación:


El perfil que he creado puede ser utilizado de dos maneras: con el filtro VHS activado o desactivado. He aquí un ejemplo de cada:

Sin filtro VHS

Con filtro VHS

En cualquier caso, lo verdaderamente interesante es el overlay o bezel personalizado. Lo tienes disponible para su descarga aquí. Colócalo en la carpeta "reshade-shaders \ Textures" dentro de la carpeta del juego. En mi caso, en "C:\ SEGA RALLY 2 \ reshade-shaders \ Textures". Sustituye el archivo dummy con el mismo nombre (Overlay.png) y ya lo tienes listo para funcionar. El filtro VHS se puede desactivar desde los ajustes de ReShade. Ésta sería la pinta del perfil completo de ReShade:


En la parte superior ves la lista de efectos aplicados. Cada uno de esa lista afecta sólo a los que tiene por encima y se ve afectado por los posteriores. Por eso, el efecto Overlay es el último de esa lista, quedando en pantalla por encima de todos los demás efectos. El funcionamiento es justo el contrario al de aplicaciones como Photoshop.

Desactivar el efecto VHS es tan sencillo como acceder a la interfaz de ReShade (tecla Home / Inicio del teclado) y desmarcar la casilla "VHS_RA [VHS-RA.fx]". Después del listado de shaders activos puedes ver la configuració individual de cada uno de ellos, a menos que tengas activado el "Performance Mode" (esquina inferior derecha de la ventana de ReShade). 

Para no machacar tu perfil sin darte cuenta, te recomiendo desactivar el guardado automático en la parte superior derecha de la ventana de ReShade e, incluso, para ir más sobre seguro, puedes modificar los atributos del archivo de perfil para convertirlo en archivo de sólo lectura:


A continuación, 4 capturas más: sin ReShade, sólo con el overlay sin otros efectos, con overlay + efectos sin VHS y con overlay + efectos + VHS:


Normalmente juego como en la tercera captura, es decir, con todo activado en el perfil ReShade salvo el filtro VHS, pero en ocasiones me apetece echar una partida con ese efecto activado.

Una vez lo tengas todo a tu gusto, te recomiendo activar la casilla "Performance mode", en la esquina inferior derecha de la interfaz de ReShade, aunque en este caso seguramente no vayas a notar mejora de rendimiento, pero viene bien para no hacer cambios accidentales al preset. Igualmente, te recomiendo desactivar el Autosave, en la parte superior derecha de la ventana, ya que viene activado pr defecto. 

Por último, en la pestaña "Settings" activaremos la casilla "Load only enabled effects" para que, al arrancar el juego, sólo se carguen los shaders que jueguen un papel en nuestro preset. Esto hará que ReShade cargue muchísimo más rápido. Infinitamente más rápido, de hecho.

Tengo que añadir que, el mismo día en el que terminaba esta guía, y tras varias semanas de pruebas, me encontré con el siguiente problema: al ejecutar Sega Rally 2 tras una hibernación de Windows (algo que suelo hacer con frecuencia, en vez de apagar completamente el sistema), el juego crasheaba nada más arrancar, en la pantalla del logo de SEGA, mientras cargaban los shaders de ReShade. El problema no era el juego, ya que, si desactivaba ReShade (renombrando el archivo dxgi.dll en la carpeta del juego), arrancaba sin ningún problema. El problema apareció cuando quité de la carpeta del juego los archivos png de captura de pantalla hechos por ReShade con sus archivos .ini correspondientes (tengo activadas en ReShade las opciones de guardar 2 pngs por captura, con y sin efectos, más una copia del perfil de ReShade utilizado). Si los volvía a colocar en la carpeta del juego, todo funcionaba bien. Si los quitaba pero reiniciaba el equipo, también funcionaba todo correctamente, siempre y cuando no hibernara, deshibernara y tratara de arrancar el juego. Pensé que podía estar corrupto el archivo "Perfil ReShade Sega Rally 2.ini", o incluso el png con el overlay. El visor de eventos de Windows indicaba esto:
Faulting application path: C:\SEGA RALLY 2\SEGA RALLY 2.exe
Faulting module path: C:\SEGA RALLY 2\MUSASHI\MGInput.dll
Algo relacionado con el input. Recuerdo que, hace un par de años el creador de ReShade rompió la vibración en juegos DirectInput (que se conseguía con Xidi, el driver de Masahiko Morii, ...) en la versión 5.3.0 (extracto de nuestra conversación en su canal de ayuda de Discord el 9 de agosto de 2022):
[11:57 PM]crosire: ReShade 5.3 hooks DirectInput (to block keyboard/mouse input when overlay is open in games that use DInput for that). That vibration driver presumably hooks DirectInput too. Only one can win. Unfortunately for you in this case that one is ReShade, therefore no vibration (at least that is my guess without trying it).
A lo que añadió:
[11:59 PM]crosire: I can add an option to disable the DInput hooks ReShade does for this particular use case.
Y el problema fue solucionado en la versión 5.4.0:
Bug fixes:
Fixed crash in Tony Hawk American Wasteland
Fixed crash in vkQuake
Fixed crash when D3D9 runtime is using D3D9on12 internally
Fixed crash with VKD3D
Fixed black screen in Jak Project
Fixed config changes not saving when there are multiple runtime instances
Fixed window size used for scaling mouse position not updating after resize
Fixed incorrect SPIR-V code generation for matrix multiplications with a scalar variable (fixes MotionEstimation.fx under Vulkan)
Fixed controller force feedback not working in DirectInput games like Mafia
Fixed potential crash on old OpenGL drivers without support for OpenGL 4.5
Fixed add-on API pipeline handles created by application in OpenGL
Fixed depth buffer detection in DOOM Eternal again (and other games that render and present on different queues)
En esta ocasión se ha podido generar un bug similar, del que no he sido consciente hasta hoy, momento en el que se han dado al mismo tiempo estas dos circunstancias tan específicas:
  • He intentado correr el juego en un sistema que ha salido de una hibernación.
  • He quitado las capturas de pantalla de la carpeta principal del juego.
Aunque a priori suene absurdo, he hecho la siguiente prueba: he desinstalado ReShade por completo y borrado todos los archivos residuales relacionados con el mismo. Después, lo he instalado sin usar ningún perfil base y sin copiar el archivo Overlay.png. El juego ha arrancado y ReShade ha cargado. A continuación, he hibernado el equipo, deshibernado y vuelto a ejecutar el juego. El resultado: el juego ha crasheado en la splash screen de SEGA, igual que antes. Entonces, he reiniciado y vuelto a ejecutar el juego, el cual ha funcionado sin problema. Es en ese momento en el que he generado una captura de pantalla con ReShade (por defecto, tecla Impr Pant), he salido, hibernado, deshibernado y vuelto a ejecutar el juego y, esta vez, ha funcionado perfectamente. 

Es decir, por ridículo que suene, existe algún tipo de problema en ReShade 6.1.1 y, seguramente, anteriores, por el cual, si has hibernado y no tienes capturas de pantalla hechas con ReShade en la carpeta del juego, éste puede crashear al arrancar. No me ha ocurrido en todas estas semanas (casi 1 mes), pese a hibernar y deshibernar continuamente, porque en todo momento ha habido archivos de captura de pantalla en la carpeta del juego.

De hecho, el tema parece bastante caprichoso en cuanto a qué archivos de captura deben estar o no presentes en la carpeta del juego, ya que fui probando a quitarlos y ponerlos por lotes, y al quitar un archivo determinado no pasaba nada, al quitar otro sin quitar el anterior tampoco, pero quitando ámbos sí crasheaba el juego.

En resumen: si no sueles hibernar Windows, no vas a tener ningún problema. Si, como yo, recurres constantemente a la hibernación, asegúrate de correr el juego al menos una vez tras un reinicio fresco y, una vez dentro del mismo, haz una captura de pantalla con ReShade para que se guarde en la carpeta del juego. Ya no volverás a tener problemas aunque ejecutes el juego en una sesión de Windows deshibernada. Por tanto, podremos instalar ReShade con el perfil que queramos y usarlo sin ningún problema, ya que el problema está en otro sitio, a saber cuál.


╔════════════════════════════╗
Multiplayer online
╚════════════════════════════╝

Es genial que, en pleno 2024 a.D., sea posible jugar carreras online a 4 jugadores en este juego. Hay diversos métodos y programas externos que pueden usarse. Me basaré en el único que conozco y he probado: Radmin VPN.

Lo primero, descargaremos Radmin VPN de su web oficial. En el momento de escribir esta guía, la última versión disponible es la 1.4.4642.1. Tras la descarga, procederemos a la instalación.

El funcionamiento es relativamente sencillo: desde Radmin VPN crearemos o nos uniremos a una red virtual específicamente creada para el juego. A esta red se pueden unir los jugadores y permanecer en una especie de lobby virtual dentro del propio programa. Al mismo tiempo, Radmin VPN crea un adaptador de red virtual (se puede ver en el administrador de dispositivos de Windows) con capacidad de emular una red local en tu pc. Dicha red local emulada se corresponde con la red virtual que está dentro de Radmin VPN y puede ser detectada por todas las aplicaciones de Windows que tengan capacidad para ello, como es el caso del juego que nos ocupa, siempre y cuando el proceso del mismo haya sido añadido manualmente a la white list del firewall que integra Radmin VPN. Para poder añadir el proceso a dicha lista de excepciones del firewall, el juego tiene que estar corriendo, ya que, si no, el proceso "Sega Rally 2 PC RALLY.EXE [PentiumIII]", que así se llama, no se mostrará en la lista.

Es para esto para lo que nos viene muy bien que dgVoodoo tenga el control total de la ventana del juego y podamos salir y entrar del modo a pantalla completa con Alt + Intro: lanzaremos el juego, y con Alt + Intro saldremos del modo a pantalla completa, abriremos Radmin VPN y haremos clic en la parte superior de la ventana, en System → Firewall Exceptions → Add Application. Como el juego está corriendo, ahí nos debería aparecer. Lo seleccionamos y listo. Desde ahora, Sega Rally 2 detectará la red local automáticamente, permitiendo crear partidas o unirse a la que haya creado otra persona. Puede crear partida multiplayer en Sega Rally 2 cualquier miembro que esté en la red virtual del juego dentro de Radmin VPN. Es decir, no necesariamente tiene que ser el creador de dicha red virtual. De hecho, la red virtual no tiene por qué ser una creada específicamente para el juego (antes he afirmado lo contrario por simplificar), ni que se llame "Sega Rally 2", ni nada de nada: cualquier red virtual dentro de Radmin VPN servirá siempre y cuando todos los miembros interesados estén en esa misma red. Desde el menú superior, en Network → Join Network, podremos unirmos fácilmente a dicha red, que puede ser pública y accesible desde el buscador, o privada, e incluso protegida por contraseña. Y, a todo esto: Radmin VPN tiene que estar permanentemente corriendo en segundo plano. Nos aseguraremos, también, de que el firewall de Windows o el de nuestro antivirus no se interpongan en nuestro camino.

Una vez que tenemos claro cómo va la red y Radmin VPN, vamos ahora a proceder desde dentro del juego. Entraremos en el apartado de multi-jugador:


Lo primero que nos pedirá si nunca hemos entrado será escribir nuestro nombre de piloto:


Y es aquí donde nos encontramos con un curioso problema: el texto que escribamos no será visible. He desactivado ReShade y también dgVoodoo y el problema persiste, no es culpa de ninguno. La única forma de arreglarlo es ejecutar el juego en modo compatibilidad con Windows 98, pero el rendimiento general del mismo se resiente y apenas alcanzaremos los 60fps, aun estando dgVoodoo funcionando. Además, el juego no arrancará todas las veces, habrá cuelgues, etc. Por eso, no merece la pena. Además, el hecho de no poder ver el texto no nos va a influir para nada, como enseguida veremos.

Bien, pues una vez escrito nuestro nombre y aceptado, nos saldrá la siguiente ventana, donde seleccionaremos el modo de conexión TCP/IP:


Después, llegaremos hasta esta pantalla:


En esta ventana podremos unirnos a una partida de forma manual, crear partida y buscar automáticamente partidas creadas en la red local:
  • Unirnos (join) a una partida (team) de forma manual: tecleando la dirección IP del host. Más allá de la complicación de tener que teclear números sin ver en pantalla lo que estamos escribiendo, esta opción no nos va a ser útil ahora.
  • Crear (create) partida (team): como su nombre indica, seremos los creadores de la partida. Gracias al custom profile de Xidi podremos usar el botón Select (genérico) / Share (PlayStation) / Back (Xbox) del mando como si fuera el tabulador, por lo que no necesitaremos utilizar el teclado para nada, salvo para escribir el nombre del lobby, cosa que nos va servir para poco porque nadie lo va a poder ver:
  • Hacer que el juego localice una partida automáticamente (Show teams). Al elegir esa opción, nos deja introducir la IP del host de la partida o, mucho mejor, hacer que el juego busque la partida automáticamente al pulsar Intro / X (Playstation) / A (Xbox), y es lo que haremos:

Vamos a suponer que alguien ha creado la partida y está esperando a que nos unamos. En ese caso, y suponiendo, como es lo más lógico, que, de todos los miembros presentes en la red virtual, sólo uno ha creado partida, el juego encontrará una sola, y aparecerá marcada/seleccionada con una franja horizontal blanca (ahí debería aparecer el nombre de la partida, pero no sale nada, como hemos dicho antes). Sólo tendremos que aceptar (Join) para unirnos:


Si hubiera más de una creada, nos mostraría un listado, pero no sabríamos cuál elegir porque no aparecerían los nombres. No he podido hacer captura de pantalla de eso, pero este gif de la pantalla de selección de pilotos lo ilustra perfectamente:


Una vez nos unamos, entraremos en la sala de espera del juego, en la que el chat funcionará perfectamente sin ningún contratiempo:


Como se ve por el aspecto del lobby, el total de jugadores admitidos por partida es de cuatro. Con el botón Select / Share (PlayStation) / Back (Xbox) de nuestro mando accederemos al menú de ajustes de nuestro coche.

Hay una pequeña comunidad en Discord donde se organizan partidas de vez en cuando. Desde aquí te puedes unir. El creador, Agnostic X (agonostic_x) tiene bastante experiencia con el juego. Hasta hoy sólo hemos podido correr un puñado carreras. Aquí dejo lo que él mismo grabó para su canal de YouTube:




La verdad es que la experiencia con Radmin VPN fue bastante buena. Es un software bastante sencillo de usar y funciona perfectamente. Únicamente hay una cosa que no me termina de convencer: hay una parte de Radmin VPN que no se puede desinstalar. Son una serie de entradas en el registro de Windows, ubicadas aquí:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Famatech
Ni desinstalando la app de forma normal ni a través de programas específicos de desinstalación he conseguido eliminar esa parte, que es precisamente donde se almacena nuestro nombre y alguna cosa más. He preguntado en el soporte técnico de su comunidad de Discord pero no me han hecho el más mínimo caso.

Por último, si quieres tener música durante las partidas online, deberás activarla en los ajustes, ya que viene desactivada por defecto. No en los ajustes de audio, sino en los ajustes generales:



Por cierto: la famosa versión portable mencionada en algún momento, creada por un tal Alcino Major, no permite el juego online, entre otros problemas que presenta. Éste es el aspecto de la misma. Seguro que te has topado con ella alguna vez:


Todos hemos recurrido a esta versión en un momento u otro, casi siempre por comodidad, pero a estas alturas es mucho mejor instalar la versión normal. Además, por lo visto, el creador recibió quejas infundadas sobre la presencia de virus en su versión, falsos positivos debidos, seguramente, a las técnicas de virtualización empleadas. El caso es que el tipo se enfadó y decidió pasar de todo. Aquí se puede leer lo que pasó, escrito por él mismo hace cosa de año y medio:


Esto es lo que pasa cuando la gente va de lista y se dedica a tirar por tierra el trabajo de los demás por pura ignorancia.


╔════════════════════════════╗
Traducción y doblaje al castellano
de la edición FX de 2002
╚════════════════════════════╝

FX Interactive tomó el testigo de la edición original de Dinamic Multimedia de 1999 y relanzó el juego en 2002 en un solo CD (o sea, sin las músicas de carrera), pero completamente traducido y doblado al castellano, tanto los dos copilotos (hombre y mujer) como el narrador que describe las características e historia de cada coche, y que cuenta con la voz de José Ángel Juanes, quien, entre otros muchos trabajos, puso voz a Henry Warnimont, padre adoptivo de Punky Brewster, y es voz habitual de muchos otros juegos de FX y de los documentales de La 2 de David Attenborough que tan bien nos acompañan a la hora de la siesta.

El caso es que la versión de FX es compatible con todo lo que hemos estado mostrando hasta ahora. Es decir, que es totalmente intercambiable con la versión retail original. Sin embargo, en esta ocasión no nos vamos a centrar en instalar y configurar la edición de FX, sino que únicamente haremos uso de los archivos relacionados con el doblaje y la traducción. Yo los obtuve de la siguiente manera: realizando una instalación completa de dicha edición y, desde la carpeta del juego, haciendo una búsqueda tipo *.* ordenando todos los archivos por fecha de modificación: si están modificados en 1999, son originales. Si lo están en 2002, son archivos alterados por FX para localizar el juego. Esos archivos son de varios tipos:
  • Archivos dll: además de contener librerías y otros recursos, albergan una serie de  cadenas de texto de la interfaz traducidas al español, visibles con un editor hexadecimal. Son 4 archivos.
  • Archivos .txr: son archivos de texturas que contienen textos traducidos al castellano. Son 94 archivos.
  • Archivos .bmp: son fondos y botones de los menús del modo multijugador traducidos al castellano. Son 62 archivos.
  • Archivos .wav: las voces de los dos copilotos y del narrador. Son 160 archivos.
  • Archivos .bg: no tengo claro si son archivos de texturas u otros recursos. Son 26 archivos.
  • Ejecutable SEGA RALLY 2.EXE: contiene varias cadenas de texto del HUD y de la interfaz que presenta el resumen de carreras y campeonatos con los tiempos obtenidos.
La cuestión es que utilizaremos todos los archivos mencionados, salvo uno: el ejecutable. ¿Por qué no usar el ejecutable de FX, que ya está en español, en vez del ejecutable original de Empire? Si hasta el parcheador de "_inmm.dll Setup" para la música es compatible con el ejecutable de FX. ¿Cuál es el problema, entonces? Pues la dichosa protección: el parche NOCD para el ejecutable de Empire no sirve para el ejecutable de FX, y editar a mano los famosos 11 bytes tampoco surte efecto: hay trazas de SafeDisc pero parece que eliminándolas no conseguimos nada. Ha de tener algún otro tipo de CD Check rudimentario, pero no he conseguido eliminarlo. Por ello, lo que haremos será utilizar el exe de Empire que ya tenemos sin SafeDisc y le copiaremos las cadenas de texto en castellano que contiene el ejecutable de FX. Lo haremos antes de parchear finalmente el exe para la música.

Pero antes de entrar en detalle, y si no te quieres complicar con todo lo que viene a partir del siguiente párrafo y simplemente quieres los archivos ya preparados, puedes descargar el pack de traducción al español aquí. Si te lo has pensado mejor y prefieres volver a la versión en inglés, aquí tienes los archivos que necesitas. En cualquier caso, copia el contenido de la carpeta "Archivos" directamente a la carpeta del juego. Además, deberás copiar uno de los ejecutables con su carpeta MUSASHI que contiene su archivo "MGAudio.dll" correspondiente. Como ves, cada pack incluye dos ejecutables: con el parche de música aplicado y sin aplicar. Si no tienes "_inmm.dll" instalado porque no te fías del programa y puedes pasar perfectamente sin la música (pobrecillo), puedes usar el ejecutable sin el parche de música aplicado, que va con su dll "MGAudio.dll" también sin parchear. Ahora bien, si ya tienes "_inmm.dll" instalado, puedes copiar el exe y el dll sin parchear y parchearlo tú con la aplicación, o copiar directamente las versiones ya parcheadas, pero no lo uses directamente sin parchear o dará error al ejecutar el juego.

Si ya lo tienes, te recomiendo pasar al siguiente apartado, a menos que te interesen los pormenores de cómo he llegado a traducir el ejecutable de Empire al castellano, ejecutable que, por cierto, está ya un poco manoseado, pues lo he editado un total de tres veces, en este orden:
  1. Eliminación la protección SafeDisc, ya sea con el parche o modificando los 11 bytes a mano.
  2. Traducción el exe a mano (traslado de las cadenas en castellano del ejecutable de FX al de Empire/Dinamic) según las tablas que pondré a continuación.
  3. Aplicación el parche de la música.
Lo hago en este orden porque el parche de la música crea una copia de seguridad del ejecutable para poder restaurarlo después. Si la copia de seguridad es el exe ya traducido, se puede volver a restaurar si nos interesa, y seguiríamos teniendo el exe traducido. Sin embargo, si aplicamos primero el parche de la música y luego la traducción, la copia de seguridad estará, en caso de restaurarla, sin traducir.

El ejecutable de FX tiene unas cuantas cadenas de texto traducidas al español, pero no todas: sólo aquellas que cabían en el espacio de las cadenas de texto originales.

Se han traducido, por ejemplo, los nombres de las pistas:

- DESERT → SAHARA
- MOUNTAIN → CATALUNYA (el exe no admite la Ñ, que sí aparece en las pantallas de carga)
- SNOWY → FINLANDIA
- RIVIERA → MONTECARLO
- MUDDY → INDONESIA
- ISLE → CORCEGA
- SUPER S. S. → ESPECIAL

Sin embargo, no están traducidos en todas las ocasiones. Por ejemplo, al final del modo arcade nos saldrán los tiempos de las cuatro pistas. Pues bien, "Riviera" seguirá figurando como "Riviera" y no como "Montecarlo". Parece que, como digo, sólo han traducido el nombre completo cuando la disposición del original permite poner dicho nombre sin pisar nada posterior en el mismo offset ni salirse de los 16 bytes establecidos, a menos que el original lo haga. Parece que ha habido poco trabajo en ese sentido, ya que han evitado al máximo el tener que desplazar bytes de un sitio a otro. Igualmente, han reutilizado los nombres de archivo de los BMPs de la versión en inglés, sufijo "_US" incluido, para conseguir mapas de bits traducidos sin tener que hacer ninguna modificación más a nivel interno, ya sea en el ejecutable del juego o en archivos .dll, donde figuran los nombres de dichos BMPs.

Esto deja a las claras que se trata de una edición de bajo presupuesto, en la que han eliminado, incluso, el segundo CD para abaratar costes, sacrificado con ello la música en las carreras (que se puede recuperar con el parche, ya que también es compatible con el ejecutable de FX). Es, sin duda, la forma que han encontrado de editar un producto localizado al español que se ha de vender junto a un periódico por escasos 5 € del año 2002, que equivaldrían a 8,36 € de 2024 contando la inflación. Es decir: precio de derribo. En algún momento FX lo debió de editar manera independiente a la colección del periódico, al igual que hizo con muchos otros títulos como Hollywood Monsters, The Longest Journey, etc. No tenía constancia de una edición independiente, pero esta portada así lo demuestra.

En vista de que vamos a trasladar la traducción del ejecutable de FX al de Empire/Dinamic, vamos a ver qué cadenas son exactamente y cómo lo vamos a hacer. Todo para no tener que usar el CD de FX, que nos obliga a tener montada la imagen del CD del juego cada vez que queramos jugar:


El primer cuadro representa el ejecutable original en inglés (Empire/Dinamic). En la primera columna podemos ver el Offset o la posición donde se encuentran los bloques a modificar. La segunda columna contiene dichos bloques en formato hexadecimal, y la tercera muestra el texto que esos bloques representan. 

El segundo cuadro representa el ejecutable de FX interactive traducido al castellano. O, mejor dicho, muestra únicamente las partes que han sido traducidas. Para saber cuáles son me he dedicado a comparar ambos ejecutables de forma manual, ya que, como puedes ver, los textos se encuentran en offsets diferentes, o sea, en lugares diferentes del exe, por lo que hacer una comparación 1:1 línea a línea no es tan sencillo. La comparación ha consistido en tener ambos archivos abiertos en el editor hexadecimal, e ir deteniéndome en cualquier dirección de offset que tuviera como valor un texto reconocible, ya fuera en inglés (ejecutable original) o en español (ejecutable FX). Si no conseguía hacer coincidir una sección de un ejecutable con la sección equivalente del otro, entonces hacía búsquedas manuales de los valores hexadecimales de un ejecutable en el otro. Si no lo encontraba, significa que había sido traducido, y tocaba buscar el offset donde se encontraba dicha traducción. Normalmente, los textos van por bloques, y si encuentras uno, tienes unos cuantos más alrededor. En definitiva: una vez identificada una misma sección en ambos ejecutables, se trataba de copiar el código hexadecimal de uno al otro. En este caso, del de FX al de Empire/Dinamic. En total son 57 las cadenas que han sido traducidas para la edición de FX. Para asegurarme, he revisado una por una todas las cadenas en castellano del ejecutable de FX para cotejarlas con el de Empire/Dinamic y asegurarme de que no había nada más.

Si te fijas, en ese segundo cuadro hay dos cadenas remarcadas en un tono rosado. Esas dos cadenas, al pasarlas al ejecutable de Empire, provocaban que el juego se colgara al mostrar los créditos al final del modo arcade cuando aparece el replay y se empiezan a suceder de manera individual los nombres y tiempos de cada pista, en la esquina inferior izquierda de la pantalla. El problema debía estar relacionado con alguno de esos nombres. Después de localizarlos,, aislarlos (me tuve que pasar el modo arcade unas cuantas veces hasta dar con los bloques problemáticos) y compararlos con los del exe original, me di cuenta de una sutil diferencia: dentro de un mismo bloque, a veces se daba el caso de que, en los caracteres adicionales al propio texto que podían aparecer, había diferencias entre la versión en inglés y la versión en español. Y, curiosamente, esos caracteres solían aparecer de forma recurrente en las líneas anteriores y posteriores a ese offset.

Así, por ejemplo, "..K.SNOWY...MOUN" en el exe original, era "..S.FINLAND.CATA" en el exe de FX. Es decir, mñás allá de la propia traducción, tenemos una "K" y una "S" que no coinciden. Pues bien, la versión en inglés tiene muchas otras cadenas con esa letra, mientras que en el ejecutable de FX ocurre lo mismo con la "S". Sabiendo esto era cuestión de cambiar simplemente "..S.FINLAND.CATA" por "..K.FINLAND.CATA" y "  ..PILOTO .°.S." por "  ..PILOTO .°.K.", como se muestra en el último cuadro, que muestra el ejecutable original de Epire/Dinamic ya modificado con todas las cadenas en español del ejecutable de FX.

Si decides probar suerte, simplemente abre tu editor hexadecimal de confianza como administrador, importa el ejecutable de Empire/Dinamic y sustituye, uno por uno, los 57 valores originales por las versiones traducidas:
SEGA RALLY 2.EXE (Empire/Dinamic)	
=================================	

Offset:	000AEBE0
Valor (hex) original:	1C 01 4B 00 53 4E 4F 57 59 00 00 00 4D 4F 55 4E
Valor (hex) traducido:	1C 01 4B 00 46 49 4E 4C 41 4E 44 00 43 41 54 41
	
Offset:	000AEBF0
Valor (hex) original:	54 41 49 4E 00 00 00 00 44 45 53 45 52 54 00 00
Valor (hex) traducido:	4C 55 4E 59 41 00 00 00 53 41 48 41 52 41 00 00
	
Offset:	000AEC00
Valor (hex) original:	53 55 50 45 52 20 53 2E 53 2E 00 00 49 53 4C 45
Valor (hex) traducido:	45 53 50 45 43 49 41 4C 20 2E 00 00 49 53 4C 45
	
Offset:	000AF6A0
Valor (hex) original:	44 52 49 56 45 52 00 00 54 4F 54 41 4C 20 54 49
Valor (hex) traducido:	50 49 4C 4F 54 4F 00 00 54 4F 54 41 4C 20 20 20
	
Offset:	000AF6B0
Valor (hex) original:	4D 45 00 00 44 52 49 56 45 52 20 00 B0 0E 4B 00
Valor (hex) traducido:	20 20 00 00 50 49 4C 4F 54 4F 20 00 B0 0E 4B 00
	
Offset:	000B2450
Valor (hex) original:	82 6E 82 72 82 64 00 00 53 70 65 63 74 61 74 6F
Valor (hex) traducido:	82 6E 82 72 82 64 00 00 45 73 70 65 63 74 61 64
	
Offset:	000B2460
Valor (hex) original:	72 20 6D 6F 64 65 00 00 8A CF 90 ED 83 82 81 5B
Valor (hex) traducido:	6F 72 20 20 20 20 00 00 8A CF 90 ED 83 82 81 5B
	
Offset:	000B2470
Valor (hex) original:	83 68 00 00 42 6F 6F 73 74 3A 20 4F 46 46 00 00
Valor (hex) traducido:	83 68 00 00 41 79 75 64 61 3A 20 4E 4F 20 00 00
	
Offset:	000B2480
Valor (hex) original:	42 6F 6F 73 74 3A 20 4F 4E 00 00 00 4C 41 50 3A
Valor (hex) traducido:	41 79 75 64 61 3A 20 53 49 00 00 00 4C 41 50 3A
	
Offset:	000B2490
Valor (hex) original:	20 25 64 00 54 69 6D 65 44 69 66 66 20 20 25 64
Valor (hex) traducido:	20 25 64 00 44 69 66 65 72 2E 20 20 20 20 25 64
	
Offset:	000B24A0
Valor (hex) original:	20 73 65 63 00 00 00 00 53 65 74 74 69 6E 67 20
Valor (hex) traducido:	20 73 65 67 00 00 00 00 41 6A 75 73 74 61 6E 64
	
Offset:	000B24B0
Valor (hex) original:	55 70 00 00 90 DD 92 E8 92 86 81 49 00 00 00 00
Valor (hex) traducido:	6F 20 00 00 90 DD 92 E8 92 86 81 49 00 00 00 00
	
Offset:	000B24E0
Valor (hex) original:	49 50 20 41 64 64 72 65 73 73 20 3A 20 25 64 2E
Valor (hex) traducido:	20 20 20 20 20 20 20 20 20 49 50 3A 20 25 64 2E
	
Offset:	000B2570
Valor (hex) original:	2E 42 4D 50 00 00 00 00 57 49 4E 20 52 41 54 49
Valor (hex) traducido:	2E 42 4D 50 00 00 00 00 50 4F 52 43 45 4E 54 41
	
Offset:	000B2580
Valor (hex) original:	4F 3A 20 25 64 25 25 00 52 45 54 49 52 45 44 3A
Valor (hex) traducido:	4A 45 20 25 64 25 25 00 52 45 54 49 52 41 44 4F
	
Offset:	000B2590
Valor (hex) original:	20 25 64 00 57 49 4E 53 3A 20 25 64 20 2F 20 25
Valor (hex) traducido:	20 25 64 00 47 41 4E 41 3A 20 25 64 20 2F 20 25
	
Offset:	000B25A0
Valor (hex) original:	64 00 00 00 57 49 4E 3A 20 25 64 2F 25 64 00 00
Valor (hex) traducido:	64 00 00 00 56 49 43 54 20 25 64 2F 25 64 00 00
	
Offset:	000B4240
Valor (hex) original:	53 75 70 65 72 20 53 53 00 00 00 00 54 55 4E 45
Valor (hex) traducido:	45 53 50 45 43 49 41 4C 00 00 00 00 54 55 4E 45
	
Offset:	000B4270
Valor (hex) original:	34 41 54 00 45 76 65 6E 69 6E 67 00 4E 69 67 68
Valor (hex) traducido:	34 41 54 00 54 61 72 64 65 20 20 00 4E 6F 63 68
	
Offset:	000B4280
Valor (hex) original:	74 00 00 00 42 6C 69 7A 7A 61 72 64 00 00 00 00
Valor (hex) traducido:	65 00 00 00 54 6F 72 6D 65 6E 74 61 00 00 00 00
	
Offset:	000B4290
Valor (hex) original:	48 65 61 76 79 20 53 6E 6F 77 00 00 53 6E 6F 77
Valor (hex) traducido:	47 72 61 6E 69 7A 6F 20 20 20 00 00 4E 69 65 76
	
Offset:	000B42A0
Valor (hex) original:	69 6E 67 00 46 6F 67 67 79 00 00 00 52 61 69 6E
Valor (hex) traducido:	65 20 20 00 4E 69 65 62 6C 61 00 00 4C 6C 75 76
	
Offset:	000B42B0
Valor (hex) original:	79 00 00 00 43 6C 65 61 72 00 00 00 53 75 6E 6E
Valor (hex) traducido:	69 61 00 00 43 6C 61 72 6F 00 00 00 53 6F 6C 65
	
Offset:	000B42C0
Valor (hex) original:	79 00 00 00 53 75 70 65 72 20 53 2E 53 2E 00 00
Valor (hex) traducido:	61 64 6F 00 53 75 70 65 72 20 53 2E 53 2E 00 00
	
Offset:	000BA990
Valor (hex) original:	00 00 00 00 53 55 50 45 52 20 53 20 53 00 00 00
Valor (hex) traducido:	00 00 00 00 45 53 50 45 43 49 41 4C 20 00 00 00
	
Offset:	000BA9A0
Valor (hex) original:	49 53 4C 45 00 00 00 00 4D 55 44 44 59 00 00 00
Valor (hex) traducido:	43 4F 52 43 45 47 41 00 49 4E 44 4F 4E 45 53 00
	
Offset:	000BA9B0
Valor (hex) original:	53 55 50 45 52 20 53 50 45 43 49 41 4C 20 53 54
Valor (hex) traducido:	45 54 41 50 41 20 45 53 50 45 43 49 41 4C 20 20
	
Offset:	000BA9C0
Valor (hex) original:	41 47 45 21 00 00 00 00 49 53 4C 45 20 53 54 41
Valor (hex) traducido:	20 20 20 20 00 00 00 00 43 4F 52 43 45 47 41 20
	
Offset:	000BA9D0
Valor (hex) original:	47 45 21 00 4D 55 44 44 59 20 53 54 41 47 45 21
Valor (hex) traducido:	20 20 20 00 49 4E 44 4F 4E 45 53 49 41 20 20 20
	
Offset:	000BA9E0
Valor (hex) original:	00 00 00 00 52 49 56 49 45 52 41 20 53 54 41 47
Valor (hex) traducido:	00 00 00 00 4D 4F 4E 54 45 43 41 52 4C 4F 20 20
	
Offset:	000BA9F0
Valor (hex) original:	45 21 00 00 53 4E 4F 57 59 20 53 54 41 47 45 21
Valor (hex) traducido:	20 20 00 00 46 49 4E 4C 41 4E 44 49 41 20 20 20
	
Offset:	000BAA00
Valor (hex) original:	00 00 00 00 4D 4F 55 4E 54 41 49 4E 20 53 54 41
Valor (hex) traducido:	00 00 00 00 43 41 54 41 4C 55 4E 59 41 20 20 20
	
Offset:	000BAA10
Valor (hex) original:	47 45 21 00 44 45 53 45 52 54 20 53 54 41 47 45
Valor (hex) traducido:	20 20 20 00 53 41 48 41 52 41 20 20 20 20 20 20

Offset:	000BAA20
Valor (hex) original:	21 00 00 00 4E 45 54 5F 52 45 53 55 4C 54 2E 54
Valor (hex) traducido:	20 00 00 00 4E 45 54 5F 52 45 53 55 4C 54 2E 54
	
Offset:	000BAA40
Valor (hex) original:	43 4C 45 41 52 45 44 00 52 45 54 49 52 45 44 00
Valor (hex) traducido:	41 43 41 42 41 44 41 00 44 45 52 52 4F 54 41 00
	
Offset:	000BAA50
Valor (hex) original:	43 4C 45 41 52 20 54 49 4D 45 00 00 00 00 00 00
Valor (hex) traducido:	54 49 45 4D 50 4F 20 20 20 20 00 00 00 00 00 00
	
Offset:	000E0AE0
Valor (hex) original:	00 00 00 00 20 4C 45 46 54 20 54 48 45 20 47 41
Valor (hex) traducido:	00 00 00 00 20 53 41 4C 49 52 20 20 20 20 20 20
	
Offset:	000E0AF0
Valor (hex) original:	4D 45 00 00 43 48 41 4E 47 45 20 53 45 54 54 49
Valor (hex) traducido:	20 20 00 00 43 41 4D 42 49 41 52 20 41 4A 55 53
	
Offset:	000E0B00
Valor (hex) original:	4E 47 53 00 45 4E 44 20 52 45 50 4C 41 59 00 00
Valor (hex) traducido:	54 45 53 00 20 20 53 41 4C 49 52 20 20 20 00 00
	
Offset:	000E0B10
Valor (hex) original:	45 4E 44 20 54 45 53 54 20 52 55 4E 00 00 00 00
Valor (hex) traducido:	20 20 20 53 41 4C 49 52 20 20 20 20 00 00 00 00
	
Offset:	000E0B20
Valor (hex) original:	43 41 52 20 53 45 4C 45 43 54 00 00 43 48 41 4E
Valor (hex) traducido:	4F 54 52 4F 20 43 4F 43 48 45 00 00 20 54 45 4D
	
Offset:	000E0B30
Valor (hex) original:	47 45 20 59 45 41 52 00 43 48 41 4E 47 45 20 43
Valor (hex) traducido:	50 4F 52 41 44 41 20 00 4F 54 52 4F 20 43 49 52
	
Offset:	000E0B40
Valor (hex) original:	4F 55 52 53 45 00 00 00 43 4F 4E 54 49 4E 55 45
Valor (hex) traducido:	43 55 49 54 4F 00 00 00 20 20 53 45 47 55 49 52
	
Offset:	000E0B50
Valor (hex) original:	00 00 00 00 43 48 41 4E 47 45 20 43 41 52 00 00
Valor (hex) traducido:	00 00 00 00 4F 54 52 4F 20 43 4F 43 48 45 00 00
	
Offset:	000E0B60
Valor (hex) original:	52 45 53 54 41 52 54 00 45 58 49 54 00 00 00 00
Valor (hex) traducido:	45 4D 50 45 5A 41 52 00 53 41 4C 49 52 00 00 00
	
Offset:	000E0C30
Valor (hex) original:	54 58 52 00 50 4F 53 49 54 49 4F 4E 00 00 00 00
Valor (hex) traducido:	54 58 52 00 50 4F 53 49 43 49 4F 4E 00 00 00 00
	
Offset:	000E0C50
Valor (hex) original:	4C 41 50 20 54 49 4D 45 00 00 00 00 53 54 41 47
Valor (hex) traducido:	56 55 45 4C 54 41 53 20 00 00 00 00 33 20 4D 45
	
Offset:	000E0C60
Valor (hex) original:	45 20 54 4F 50 20 33 00 50 41 53 53 49 4E 47 00
Valor (hex) traducido:	4A 4F 52 45 53 20 20 00 50 41 53 53 49 4E 47 00
	
Offset:	000E0C70
Valor (hex) original:	44 49 46 46 45 52 45 4E 43 45 00 00 46 41 53 54
Valor (hex) traducido:	44 49 46 45 52 45 4E 43 49 41 00 00 4D 41 53 20
	
Offset:	000E0C80
Valor (hex) original:	45 53 54 20 4C 41 50 00 43 41 52 20 52 45 43 4F
Valor (hex) traducido:	52 41 50 49 44 41 20 00 4D 45 4A 4F 52 20 43 4F
	
Offset:	000E0C90
Valor (hex) original:	52 44 00 00 43 4F 55 52 53 45 20 52 45 43 4F 52
Valor (hex) traducido:	43 48 45 00 52 45 43 4F 52 44 20 50 49 53 54 41
	
Offset:	000E0CA0
Valor (hex) original:	44 00 00 00 41 52 45 41 20 54 49 4D 45 00 00 00
Valor (hex) traducido:	20 00 00 00 43 52 4F 4E 4F 53 20 20 20 00 00 00
	
Offset:	000E0CB0
Valor (hex) original:	52 41 4E 4B 49 4E 47 00 54 49 4D 45 20 44 49 46
Valor (hex) traducido:	52 41 4E 4B 49 4E 47 00 44 49 46 45 52 45 4E 43
	
Offset:	000E0CC0
Valor (hex) original:	46 00 00 00 25 64 20 25 64 20 25 64 20 25 64 20
Valor (hex) traducido:	49 41 00 00 25 64 20 25 64 20 25 64 20 25 64 20
	
Offset:	000E0CE0
Valor (hex) original:	53 43 4F 52 45 00 00 00 48 49 47 48 20 53 43 4F
Valor (hex) traducido:	50 55 4E 54 4F 53 00 00 52 45 43 4F 52 44 20 20
	
Offset:	000E0CF0
Valor (hex) original:	52 45 00 00 42 45 53 54 20 4C 41 50 00 00 00 00
Valor (hex) traducido:	20 20 00 00 4D 45 4A 4F 52 20 20 20 00 00 00 00
	
Offset:	000E0D00
Valor (hex) original:	54 49 4D 45 20 44 49 46 46 2E 00 00 4E 4F 00 00
Valor (hex) traducido:	44 49 46 45 52 45 4E 43 49 41 00 00 4E 4F 00 00
	
Offset:	000E0D10
Valor (hex) original:	59 45 53 00 52 45 50 4C 41 59 3F 00 31 50 00 00
Valor (hex) traducido:	53 49 20 00 56 45 52 3F 20 20 20 00 31 50 00 00
Esto es todo en cuanto a la traducción. A continuación comentaré brevemente el parche 16:9 y por qué no lo considero útil.


╔════════════════════════════╗
Cosas que dejo fuera: parche 16:9
╚════════════════════════════╝

Existe un parche para jugar a Sega Rally 2 en 16:9. Sin embargo, se trata de un parche "vert-" y no "hor+", es decir, se consigue a base de reducir el FOV vertical, o sea, de hacer un recorte 16:9 sobre la imagen original 4:3. Por lo tanto, no ganamos ningún tipo de información por los laterales, sino que la perdemos por arriba y abajo. Dicho recorte propicia, además, que el coche quede demasiado cercano a la cámara en la vista en tercera persona. Por estas razones me resisto a jugarlo con este parche. Si tienes curiosidad, aquí te dejo un vídeo donde el creador, AuToMaNiAk005, explica cómo modificar el exe para tal fin:


También dispones de información en este hilo. Personalmente no lo uso ni lo usaré: no me gusta recortar la imagen original y que falte información. Tener más información visual que el original, sí. Tener menos, jamás. Y si el creador no ha podido crear un widescreen fix hor+ a estas alturas, me temo que la cosa está complicada. Por eso hice el overlay para ReShade.


╔════════════════════════════╗
Trucos
╚════════════════════════════╝

La versión de PC tiene una serie de cheatcodes que se pueden utilizar para conseguir distintas cosas. Me los encontré por casualidad inspeccionando el archivo Title.dll con un editor hexadecimal:


Puedes escribirlos en la pantalla de título, antes del menú principal. Si los has introducido bien, escucharás un sonido de confirmación:
  • kerokerokerokerokero → desbloquea el coche bonus Kerolla WRC, exclusivo de la versión de PC. No es más que una rana con ruedas, una de las dos mascotas de Kowa Pharmaceuticals, Koro-chan y Kero-chan:
  • ilovesegarally2andsega → desbloquea todos los coches (excepto el Kerolla WRC), la pista Super S.S. y te da la victoria en cada uno de los 10 años de competición.
  • iwanttoplayallyears  → desbloquea el acceso a cada uno de los 10 años de competición.
  • iwanttodriveallcars  → desbloquea todos los coches (excepto el Kerolla WRC).
Aparte de esto, hay otro truco para acceder a versiones alternativas de algunos coches, con pintura y distintivos diferentes. También puede cambiar ligeramente el modelado del coche, pero el rendimiento es el mismo. Desde la pantalla de selección de coche, mantén pulsada la tecla Re.Pág / Pg.Up (Retroceder página) mientras confirmas la selección del vehículo. Usando nuestro mando con el perfil de Xidi creado, sería mantener pulsado el stick derecho hacia arriba + botón X/A (PlayStation/Xbox). Estos son los coches que presentan un aspecto alternativo:


Por último, hay otro truco que ya existía en la recreativa: la sección de tirar los conos en el circuito Riviera: en la última curva hay dos conos. Si los tiras (hacen un sonido especial) y retrocedes hasta la curva que acabas de pasar, verás que se ha abierto un pasadizo en la parte exterior de la misma, que te permitirá llegar hasta un patio con un montón de conos para tirar. Se te darán 30 segundos extra para tirar el mayor número de conos posible. Tras los 30 segundos, los conos desaparecerán y el contador principal volverá a contar. El truco sólo se puede activar una vez por carrera. Las puntuaciones más altas quedarán registradas.



╔════════════════════════════╗
Mensajes de error y su solución
╚════════════════════════════

Tengo controlados dos códigos específicos de mensaje de error que puede darnos el juego al ejecutarlo. En ese momento, aparecerá una pequeña ventana en medio de la pantalla con el texto "Failed to initialize", y uno de estos dos códigos de error:
  • Error code 80040154. Este error está relacionado con la tarjeta gráfica. Originalmente aparecía cuando la gráfica no cumplía con los requisitos mínimos del juego (4 mb de memoria), pero hoy en día puede surgir por uno de estos motivos:
    • Que hayamos escogido la gráfica incorrecta en los ajustes de la pestaña DirectX de dgVoodoo. Por ejemplo, que hayamos seleccionado una tarjeta SVGA en vez de una aceleradora, en cuyo caso nos saldrá primero una advertencia y luego el mensaje de error:


    • Que no tengamos registrados correctamente en el registro de Windows el archivo "MGameD3D.dll" que se encuentra en la subcarpeta "MUSASHI" dentro de la carpeta principal del juego. Debería encontrarse en HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ WOW6432Node \ CLSID, dentro de una carpeta con un código alfanumérico random que es distinto con cada instalación. La mejor manera de encontrarlo es buscar en el registro directamente el nombre del archivo implicado. La solución a esto, en definitiva, es reinstalar el juego y que éste vuelva a escribir las claves del registro como corresponde. Tengo este tema controlado porque me topé con él a la hora de hacer un repack / instalador (ver próxima entrada de este blog).
Este error ya lo registraba FX Interactive en la Incidencia 2 de la sección de ayuda en su web:


  • Error code 8007007E: este error no está relacionado con los gráficos (MGameD3D.dll) pero sí con alguno de los otros aspectos técnicos gestionados por los 10 archivos dll restantes de la carpeta "MUSASHI". Originalmente no sé a qué respondía, ya que no hay ninguna información al respecto en el manual, en la web de FX ni en todo internet, pero hoy en día responde, de nuevo, a tener mal registrado alguno de dichos archivos dll. Podríamos averiguar con qué estaba relacionado en su momento si eliminamos las entradas de cada archivo dll, uno por uno, hasta  que nos salga el error al ejecutar el juego. El archivo implicado nos dará una pista del aspecto técnico (sonido, controles, red, etc) asociado a dicho error. Haciendo esto es posible que, incluso, aparezcan otros códigos de error distintos a los dos mencionados. Puede que hasta uno por cada archivo dll... Quién sabe.



╔════════════════════════════╗
Resumen del software utilizado y conclusiones
╚════════════════════════════╝

A modo de resumen, éstas son las versiones de software que estamos usando:
  • Windows 11 Pro 23H2 OS Build 22631.3737
  • Drivers Nvidia 555.85
  • Dinputto8 v1.0.75.0 (dinput.dll)
  • Xidi v4.2.0 (\Win32\dinput8.dll)
  • dgVoodoo v2.82.5
  • _inmmdll v2.36 (no usar v2.37 ni v2.38)
  • DS4Windows - Ryochan7 v3.3.3
  • ReShade 6.1.1
  • Radmin VPN v1.4.4642.1
Este ha sido, con diferencia, el juego que más problemas me ha dado a la hora de hacer que todo funcione correctamente. Sólo han faltado, que recuerde, tres temas por solucionar, ninguno de ellos realmente importante:
  • El juego crashea al volver al menú principal tras guardar un replay. El replay se guarda pero los avances en el juego, no siempre.
  • El texto que escribimos en el modo online no se ve. Por suerte, esto no afecta al chat.
  • Cuando pasamos por un charco con la cámara en primera persona y salta el agua/barro al pasar por un charco a cierta velocidad (cosa que no siempre ocurre), es muy probable que ese efecto de agua marrón semitransparente haga invisibles ciertos elementos que quedan detrás del efecto de transparencia, como el coche que vaya delante de nosotros, etc. No depende para nada de la precisión del depth buffer escogida en dgVoodoo (de hecho, ocurre también si desactivamos dgVoodoo por completo, por lo que tengo la sensación de que es así como el juego se comporta realmente) ni de si estamos usando el ejecutable de Empire/Dinamic o el de FX. Lo curioso es que no siempre pasa. Parece un poco aleatorio. Sea como fuere, no se trata de algo que haga al juego injugable.
Son, realmente, tres fallos menores. El primero y el último (éste sobre todo) es posible que hayan estado ahí siempre, y el segundo no supone realmente una molestia, por lo que considero el rescate y puesta a punto de este juego un éxito casi total.

En el horizonte queda que ChatGPT me eche una mano a la hora de desenmarañar los archivos de texturas, para así poder intentar reemplazarlas por otras de mayor resolución. Si hay tiempo y ganas, quizás le eche un ojo, siquiera para mejorar un poco la bajísima resolución de los fondos. Por otro lado, habría estado genial que alguien hubiera encontrado la manera de aumentar la distancia de dibujado de los circuitos, al estilo del Star Wars: Racer.

En premio por llegar hasta aquí, te dejo el manual digital de Empire/Dinamic y la guía de FX, todo ello en perfecto castellano.

P.D.: En la próxima entrada explicaré cómo hacer un instalador/repack de este juego o de cualquier otro.



GAME OVER, YEAHHH!!!

Comentarios