Hollywood Monsters (1997) PC


Clasicazo el que traigo hoy, del estudio español Péndulo. No será la mejor aventura gráfica de la historia, y algunos puzles son cabrones y absurdos como pocos, pero desprende aroma a clásico y a nostalgia por los cuatro costados. Fue editada originalmente por Dinamic Multimedia en 1997 a un precio de 2.995 pesetas, y reeditada años más tarde por su sucesora espiritual, FX Interactive, a 19,95 €. 

Según comenta el usuario cireja en este post de este hilo de Abandonsocios, originalmente el juego se ejecutaba en MS-DOS, pero salió un parche que lo hacía funcionar nativamente en Windows 95, al adaptar el ejecutable a DirectDraw / DirectX. El programa salió en España e Italia, pero parece ser que sólo en España cuenta con la canción "Enigmas" del grupo La Uniøn como parte de la banda sonora, y que puede escucharse en la secuencia introductoria del viaje en coche a la mansión de Otto Hannover y en los créditos finales. Por desgracia, la reedición de FX no pudo rescatar ese tema musical, supongo que por problemas de licencias, y cuenta, en su lugar, con la misma música genérica que pudieron disfrutar los italianos.

Hoy comentaremos aquí todas las versiones de este juego de que tengo constancia, diremos cuál es la mejor y le aplicaremos una serie de arreglillos para poder jugarla en sistemas modernos con la mayor calidad audiovisual posible.

Lo primero será instalar el juego. No voy a insistir esta vez en ello, porque es muy sencillo, pero ya te adelanto que aquí usaremos la versión de FX, ya sea la edición física original en CD, la reedición para la colección de videojuegos de El Mundo o, mejor aún, la edición digital de la difunta FX Store, que creo que es la misma que viene incluida con la edición física de Hollywood Monsters 2.

Sea cual sea la versión de FX que escojas, el launcher para su instalación funciona perfectamente en Windows 11, por lo que no tendrás ningún problema para completarla. Una vez hecho, ya podrías ejecutar el juego y olvidarte de todo, pues todo funcionará sin mayores complicaciones, pero... AQUÍ NO HACEMOS ESO.
 
Vamos con dgVoodoo.


╔════════════════════════════╗
dgVoodoo al rescate
╚════════════════════════════╝

Antes de nada hay que decir que puedes elegir no usar dgVoodoo, pero no hacerlo tiene varias desventajas:
  • Según tu equipo, puede que alguna vez te aparezca un error de DirectDraw que mencionaré en el apartado dedicado a las versiones del ejecutable del juego, aunque nada te librará de la ventana de error de DirectSound si tienes algún problema con la tarjeta de sonido, cosa poco probable.
  • No tienes posibilidad de desactivar el filtrado bilineal, al menos hasta donde yo sé. Esto implica que no vas a poder ver los pixels "limpios" del juego. Aunque este juego no es pixel-art como tal, algunos preferirán ver los pixels y el texto nítidos. En tal caso, necesitarás usar dgVoodoo para anular dicho filtrado.
  • Si, por el contrario, prefieres usar shaders, filtros CRT, bezels/overlays, etc., en juegos 2D, olvídate de poder hacerlo, pues ReShade no funcionará con un juego DirectDraw. Necesitarás dgVoodoo para traducir el juego a DirectX 11.
  • Para que el juego se vea en su proporción original 4:3 y no se estire para ocupar toda la pantalla, deberás realizar un ajuste en el panel de control de Nvidia: de los 3 apartados principales del mismo (Configuración 3D, Pantalla y Vídeo), iremos a "Pantalla - Ajustar el tamaño y la posición del escritorio" y nos aseguraremos de que, en el apartado Escalado, tengamos marcada la opción "Relación de aspecto",  "Realizar escalado en: GPU", y "Anular el modo de escalado establecido por juegos y programas", tal y como se muestra en la siguiente imagen (te recomiendo hacerlo aunque uses dgVoodoo, pues te servirá para otros juegos antiguos), pero ten en cuenta que, en algunas configuraciones de hardware, el juego se verá estirado pase lo que pase, a menos que uses dgVoodoo:
Con dgVoodoo correctamente configurado no necesitarás realizar esta operación, pero nunca está de más dejar así el ajuste de pantalla del panel de control de manera permanente para asegurarnos jugar siempre con el aspect ratio correcto, especialmente en estos juegos antiguos con pantallas estáticas en 2D, usemos o no dgVoodoo.

A la vista de estos inconvenientes, lo más razonable es, sin duda, usar dgVoodoo. Como he dicho, traducirá el antediluviano DirectDraw de este juego a un más actual DirectX 11, nos ayudará a corregir errores de DirectDraw que pueden aparecer en la versión retail de FX, y nos permitirá usar ReShade. No me termina de quedar claro bajo qué condiciones o en qué circunstancias nos dará error de DirectDraw este juego, más allá de lo que mencionaré en el apartado en el que abordo la modificación del archivo Monsters.exe. Lo que sí sé es que con dgVoodoo no aparecerá ese error.

Para empezar, descargaremos la última versión de dgVoodoo de su web oficial. La última versión disponible por ahora, y me temo que por una buena temporada, es la 2.81.3. En propias palabras de su creador, dege-diosg:
I don't have time for this project so I put it into archived state for a while. There is no point to have new issue entries waiting for answers in vain.

Por desgracia, el repositorio de dgVoodoo en GitHub ha quedado archivado en modo sólo lectura desde el 7 de septiembrede 2023 y hasta nuevo aviso. Espero que lo retome en el futuro... En fin.

Una vez descargado, extraeremos del zip los siguientes archivos a la carpeta del juego:

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

Una vez hecho, ejecutaremos dgVoodooCpl.exe como administrador. Con la interfaz de dgVoodoo ante nosotros, lo primero que haremos será asegurarnos de que el archivo de configuración (dgVoodoo.conf) sea creado en la misma carpeta del juego. Para ello, bastará con hacer clic en el icono ".\" que se encuentra en la parte superior para que rellene el campo con la ruta automáticamente. De no hacerlo, el archivo de configuración se guardará en C: \ Usuarios \ [Tu usuario] \ AppData \ Roaming \ dgVoodoo, y no queremos eso.

A continuación, 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". Eso permitirá que se muestren varias pestañas nuevas que estaban ocultas (mucha gente no se sabe esto). 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 (capturas basadas en la versión 2.81.2, salvo una):



Aquí tenemos la opción de desactivar el suavizado de pixels (filtrado bilineal) que comentaba antes, que se aplicará a toda la imagen. Es la opción "Bilinear DD/CPU operations". El perfil de ReShade que compartiré enseguida está pensado para jugar con esa opción activada. Si decides no activarla pero aun así quieres usar mi perfil de ReShade, deberás desactivar del mismo el "Adaptive sharpening", ya que lo he puesto precisamente para compensar la pérdida de nitidez al aplicar el filtrado bilineal en dgVoodoo.


Aquí tenemos un par de opciones interesantes que destacar:
  • Cursor scale factor: cambiar el valor a "3" reducirá el cursor del juego a un tamaño mucho más razonable, que hace que el juego se vea más "hi-res". Esto a 4K. Es posible que, si juegas a 1080p, necesites escoger otro valor, como "2".
  • System hooks: cursor. Nos permite cambiar la velocidad/sensibilidad del cursor. Más sobre esto en el apartado "Ajuste de sensibilidad del ratón".


Una vez esté todo, haremos clic en "Apply" y en "OK" para cerrar el configurador de dgVoodoo.


════════════════════════════╗
Ajustes de compatibilidad
╚════════════════════════════╝

Aunque tengamos dgVoodoo bien configurado, puede darse el caso (no debería, pero puede) de que la imagen no se vea al tamaño adecuado, mostrándose ampliada y recortada, lo cual se debe, seguramente, a un problema de escalado cuando tu resolución de sistema es alta o tienes un DPI alto (como un monitor 4K). Independientemente del ejecutable que usemos (más sobre esto, luego), es posible que tengamos que hacer un pequeño ajuste de compatibilidad para que la imagen se vea al tamaño correcto. Haremos clic derecho sobre el ejecutable del juego - Propiedades - Compatibilidad. Marcaremos la opción de "Ejecutar como Administrador" y cambiaremos los ajustes de DPI tal y como se muestra en la siguiente captura:


¿Por qué hacemos esto? Muy sencillo: a resoluciones de escritorio muy altas como, por ejemplo, 4K, es muy común aumentar la escala de la interfaz de Windows para que se vea a un tamaño legible. Por ejemplo, en mi caso Windows aplica un "zoom" a la interfaz y la muestra al 150% de su tamaño. De este modo se pueden leer bien los textos. De lo contrario, serían demasiado pequeños:


Pues bien, resulta que este ajuste puede afectar no sólo al explorador de Windows, a toda la interfaz y menús del sistema, sino, también, a muchas aplicaciones y juegos. Para que esto no ocurra, marcaremos la opción mencionada, y listo pero, insisto: este ajuste de compatibilidad puede no ser necesario en tu caso, incluso aunque tengas una resolución de escritorio con un alto DPI como 4K y la escala al 150%. No obstante, lo que es seguro es que activar este ajuste de compatibilidad no perjudicará al juego en ningún caso, que yo sepa.


════════════════════════════╗
Ajuste de sensibilidad del ratón
╚════════════════════════════╝

Este juego tiene un problema con la sensibilidad del ratón: por defecto, al menos con dgVoodoo instalado, es excesivamente alta, haciendo difícil, en ocasiones, encontrar el pixel exacto que nos permite seleccionar un objeto, por ejemplo. Entiendo que esto se produce como resultado del reescalado a altas resoluciones como 4K, como es mi caso.

Vamos a ver, a continuación, la forma de ajustar la sensibilidad de manera que el control en el juego sea mucho más sencillo y razonable.

Lo primero que a uno se le puede ocurrir para resolverlo es bajar la sensibilidad desde la ventana de ajustes del ratón, situada en el panel de control, de manera manual cada vez que queramos jugar, para luego volver a dejarla como estaba, también manualmente, una vez terminemos la partida:


Esta solución tan cutre me la planteé como último recurso, en caso de no conseguir hacerlo de una manera más sencilla para el usuario. Para colmo, me encontré con una desagradable sorpresa: tras bajar ese valor, el cambio funcionaba en Windows pero no en el juego. Es por eso por lo que hay que tener activada, como hemos visto en las capturas de dgVoodoo, la opción "System hooks - Cursor" en la pestaña "GeneralExt": así conseguiremos que el cursor del juego use los mismos ajustes que el cursor del sistema, es decir, estarán asociados.

Si nos fijamos en la barra de ajuste superior, el punto de ajuste de sensibilidad que he tomado como ejemplo está sobre la 6ª muesca. Es el que suelo usar normalmente, pero resulta excesivamente rápido y sensible para el juego que nos ocupa, pues el cursor recorrerá la pantalla prácticamente de un extremo a otro con un muy leve movimiento del ratón.

La configuración de sensibilidad más razonable que he encontrado es dejar el punto de ajuste sobre la segunda muesca de la barra (para Windows, valor "4"). Esto nos deja un ratón desesperantemente lento / poco sensible en Windows, pero ideal dentro del juego. Pero, claro: después de jugar hay que volver a los ajustes del ratón y cambiar de nuevo la sensibilidad... Y navegar por el sistema con esa bajísima sensibilidad en búsqueda de los ajustes del ratón para volver a dejarla como estaba es un engorro total. Un atraso.

Por cierto: al ajuste concreto de la imagen anterior, Windows le otorga el valor numérico "10". Sea cual sea el valor escogido, el sistema lo almacena en la siguiente dirección del registro:
HKEY_CURRENT_USER\Control Panel\Mouse\MouseSensitivity

Sabiendo esto, imaginé que sería tan sencillo como crear un archivo batch que introdujera en esa dirección del registro el valor que yo quisiera. El archivo batch tendría que contener una instrucción semejante a ésta:
reg add "HKCU\Control Panel\Mouse" /v MouseSensitivity /t REG_SZ /d "4" /f

Esa instrucción indica al sistema que debe cambiar el valor de la entrada MouseSensitivity a "4". Con eso tenía la base para crear un archivo batch que hiciera más cosas:
@echo off

:: Guarda el valor original de la sensibilidad
for /f "tokens=3" %%a in ('reg query "HKCU\Control Panel\Mouse" /v MouseSensitivity ^| find "REG_SZ"') do set OriginalSensitivity=%%a

:: Cambia la sensibilidad del ratón al valor deseado
reg add "HKCU\Control Panel\Mouse" /v MouseSensitivity /t REG_SZ /d "4" /f

:: Ejecuta el juego (usando ruta relativa)
start "" ".\Monsters.exe"

:: Espera a que el juego termine
echo Esperando a que el juego termine...
timeout /t 99999 >nul

:: Restaura el valor original de la sensibilidad
reg add "HKCU\Control Panel\Mouse" /v MouseSensitivity /t REG_SZ /d "%OriginalSensitivity%" /f

:: Notifica al usuario que se ha restaurado la sensibilidad
echo Sensibilidad del ratón restaurada a %OriginalSensitivity%.

:: Pausa para que el usuario pueda ver el mensaje antes de que se cierre la ventana del archivo por lotes
pause

Me las prometía muy felices y la cosa pintaba muy bien, hasta que lo puse a prueba y vi que no funcionaba: cambiaba los valores en el registro, sí, pero el ratón seguía con la misma sensibilidad. ¿Cómo era posible? Pues porque para que esos cambios se hagan efectivos (y se reflejen en la ventana de ajustes del ratón que he puesto antes) hay que reinciar el sistema. Mi gozo en un pozo.

Había que cambiar de estrategia. El archivo batch seguía siendo la solución, pero necesitaba algo más, así que me puse a googlear y di, en esta web, con un script de PowerShell que hacía justamente lo que quería: cambiar el valor de sensibilidad del ratón y hacerlo efectivo al instante, gracias a una función WinAPI contenida en el archivo user32.dll de Windows, que es la misma función de la que se sirve la ventana de interfaz de ajustes del ratón para aplicar los cambios al vuelo. Éste es el script tal cual se muestra en la web:
Function Set-MouseSpeed {
    [CmdletBinding()]
    param (
        [validateRange(1, 20)]
        [int] $Value
    )

    $winApi = add-type -name user32 -namespace tq84 -passThru -memberDefinition '
   [DllImport("user32.dll")]
    public static extern bool SystemParametersInfo(
       uint uiAction,
       uint uiParam ,
       uint pvParam ,
       uint fWinIni
    );
'

    $SPI_SETMOUSESPEED = 0x0071
    $MouseSpeedRegPath = 'hkcu:\Control Panel\Mouse'
    Write-Verbose "MouseSensitivity before WinAPI call:  $((get-itemProperty $MouseSpeedRegPath).MouseSensitivity)"

    $null = $winApi::SystemParametersInfo($SPI_SETMOUSESPEED, 0, $Value, 0)

    #
    #    Calling SystemParametersInfo() does not permanently store the modification
    #    of the mouse speed. It needs to be changed in the registry as well
    #

    set-itemProperty $MouseSpeedRegPath -name MouseSensitivity -value $Value

    Write-Verbose   "MouseSensitivity after WinAPI call:  $((get-itemProperty $MouseSpeedRegPath).MouseSensitivity)"
}

Set-MouseSpeed -Value 16 -Verbose

El cual parece una versión más refinada y ajustada a mis necesidades del script original que se muestra en esta otra web:
param (
  [validateRange(1,20)]
  [int] $newSpeed
)

set-strictMode -version latest

$winApi = add-type -name user32 -namespace tq84 -passThru -memberDefinition '
   [DllImport("user32.dll")]
    public static extern bool SystemParametersInfo(
       uint uiAction,
       uint uiParam ,
       uint pvParam ,
       uint fWinIni
    );
'

$SPI_SETMOUSESPEED = 0x0071

"MouseSensitivity before WinAPI call:  $((get-itemProperty 'hkcu:\Control Panel\Mouse').MouseSensitivity)"

$null = $winApi::SystemParametersInfo($SPI_SETMOUSESPEED, 0, $newSpeed, 0)

#
#    Calling SystemParametersInfo() does not permanently store the modification
#    of the mouse speed. It needs to be changed in the registry as well
#
"MouseSensitivity after WinAPI call:  $((get-itemProperty 'hkcu:\Control Panel\Mouse').MouseSensitivity)"

set-itemProperty 'hkcu:\Control Panel\Mouse' -name MouseSensitivity -value $newSpeed

Por lo tanto, mi archivo batch tiene que hacer uso de dos scripts: uno para cambiar el valor de sensibilidad a 4 y otro para restablecer el valor original. Pero, ¿cómo sabe el segundo script cuál era el valor original antes de cambiarlo? Muy sencillo: lo leerá de un archivo txt temporal que habrá creado el primer script, el cual leerá y guardará el valor original antes de modificarlo. A continuación pondré aquí el contenido de los dos scripts, a los que he llamado "ChangeMouseSensitivity.ps1" y "RestoreMouseSensitivity.ps1" respectivamente.

ChangeMouseSensitivity.ps1:
# Guardar el valor original de la sensibilidad del ratón en un archivo temporal
$originalSensitivity = (Get-ItemProperty 'HKCU:\Control Panel\Mouse').MouseSensitivity
$utf8NoBOM = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines("OriginalSensitivity.txt", $originalSensitivity, $utf8NoBOM)

Function Set-MouseSpeed {
    [CmdletBinding()]
    param (
        [validateRange(1, 20)]
        [int] $Value
    )

    $winApi = Add-Type -Name user32 -Namespace tq84 -PassThru -MemberDefinition '
        [DllImport("user32.dll")]
        public static extern bool SystemParametersInfo(
            uint uiAction,
            uint uiParam,
            uint pvParam,
            uint fWinIni
        );
    '

    $SPI_SETMOUSESPEED = 0x0071
    $MouseSpeedRegPath = 'HKCU:\Control Panel\Mouse'
    Write-Verbose "MouseSensitivity before WinAPI call: $((Get-ItemProperty $MouseSpeedRegPath).MouseSensitivity)"

    $null = $winApi::SystemParametersInfo($SPI_SETMOUSESPEED, 0, $Value, 0)

    #
    # Llamar a SystemParametersInfo() no almacena permanentemente la modificación
    # de la velocidad del ratón. Es necesario cambiarla en el registro también
    #

    Set-ItemProperty $MouseSpeedRegPath -Name MouseSensitivity -Value $Value

    Write-Verbose "MouseSensitivity after WinAPI call: $((Get-ItemProperty $MouseSpeedRegPath).MouseSensitivity)"
}

# Llamar a la función Set-MouseSpeed con un valor de 4 para cambiar la velocidad del puntero del ratón
Set-MouseSpeed -Value 4 -Verbose

Es en la última línea en la que escogemos el valor de sensibilidad del ratón. En este caso, como ya he dicho, "4". Además, al principio estamos forzando a que cree el archivo "OriginalSensitivity.txt" en formato UTF-8 sin BOM, para que el último mensaje que nos salga en la ventana de CMD cuando hayamos cerrado el juego no contenga erratas en palabras como "ratón" por culpa de la tilde.

RestoreMouseSensitivity.ps1:
# Obtener el valor original de la sensibilidad del ratón desde el archivo "OriginalSensitivity.txt"
$originalSensitivity = Get-Content -Path "OriginalSensitivity.txt"

Function Set-MouseSpeed {
    [CmdletBinding()]
    param (
        [validateRange(1, 20)]
        [int] $Value
    )

    $winApi = Add-Type -Name user32 -Namespace tq84 -PassThru -MemberDefinition '
        [DllImport("user32.dll")]
        public static extern bool SystemParametersInfo(
            uint uiAction,
            uint uiParam,
            uint pvParam,
            uint fWinIni
        );
    '

    $SPI_SETMOUSESPEED = 0x0071
    $MouseSpeedRegPath = 'HKCU:\Control Panel\Mouse'
    Write-Verbose "MouseSensitivity before WinAPI call: $((Get-ItemProperty $MouseSpeedRegPath).MouseSensitivity)"

    # Establecer la sensibilidad del ratón al valor original del archivo "OriginalSensitivity.txt"
    $null = $winApi::SystemParametersInfo($SPI_SETMOUSESPEED, 0, $originalSensitivity, 0)

    #
    # Llamar a SystemParametersInfo() no almacena permanentemente la modificación
    # de la velocidad del ratón. Es necesario cambiarla en el registro también
    #

    Set-ItemProperty $MouseSpeedRegPath -Name MouseSensitivity -Value $originalSensitivity

    Write-Verbose "MouseSensitivity after WinAPI call: $((Get-ItemProperty $MouseSpeedRegPath).MouseSensitivity)"
}

# Llamar a la función Set-MouseSpeed para establecer la sensibilidad del ratón al valor original
Set-MouseSpeed -Value $originalSensitivity -Verbose

Seguro que este segundo script se puede optimizar más, pero así me basta y me sobra. Ambos archivos .ps1 irán en la carpeta del juego, junto con el archivo batch, el cual quedará así:
@echo off

:: Rutas de los archivos PowerShell
set "ChangeMouseScript=ChangeMouseSensitivity.ps1"
set "RestoreMouseScript=RestoreMouseSensitivity.ps1"

:: Verificar si los archivos PowerShell existen
if not exist "%ChangeMouseScript%" (
    echo El archivo "%ChangeMouseScript%" no existe.
    exit /b 1
)

if not exist "%RestoreMouseScript%" (
    echo El archivo "%RestoreMouseScript%" no existe.
    exit /b 1
)

:: Cambia la página de códigos a UTF-8
chcp 65001 > nul

:: Mensaje cambio sensibilidad ratón
echo Cambiando sensibilidad del ratón...
echo.

:: Cambia la página de códigos a Windows-1252
chcp 1252 > nul

:: Cambia la sensibilidad del ratón al valor deseado
powershell.exe -ExecutionPolicy Bypass -File "%ChangeMouseScript%"

:: Ejecuta el juego (usando ruta relativa)
start "" ".\Monsters.exe"

:: Espera a que el juego termine
:loop
timeout /t 1 >nul
tasklist /fi "imagename eq Monsters.exe" | find /i "Monsters.exe" >nul
if errorlevel 1 (
    goto gameEnded
)
goto loop

:gameEnded
:: Mensaje de juego terminado
echo.
echo Juego terminado.
echo.

:: Restaura el valor original de la sensibilidad
powershell.exe -ExecutionPolicy Bypass -File "%RestoreMouseScript%"

:: Lee el valor original de la sensibilidad desde el archivo
set /p OriginalSensitivity=<OriginalSensitivity.txt

:: Cambia la página de códigos a UTF-8
chcp 65001 > nul

:: Muestra el mensaje
echo.
echo Sensibilidad del ratón restaurada a %OriginalSensitivity%.

:: Muestra el mensaje
echo.
echo Muchas gracias por jugar.
echo.
echo Archivo batch y scripts creados por:
echo ------------------------------------
echo.
echo Goblan (R. Foster en Abandonsocios)
echo.
echo =================================
echo YouTube: @OldNewPixel
echo Twitter: @Goblan_1
echo Website: oldnewpixel.blogspot.com
echo =================================

:: Retrasa 5 segundos la aparición del siguiente mensaje
ping -n 5 127.0.0.1 > nul

:: Muestra el mensaje
echo.
echo Esta ventana se cerrará en 3, 2, 1...

:: Borra el archivo OriginalSensitivity.txt
del OriginalSensitivity.txt

:: Retrasa el cierre de la ventana por 3 segundos para que se pueda leer el mensaje
ping -n 3 127.0.0.1 > nul

Tiene algunos añadidos de formato para, de nuevo, garantizar que no haya erratas en el texto de los mensajes mostrados en la ventana de comandos.

En resumen, lo que hace nuestro archivo batch con la ayuda de los dos archivos de script es:
  1. Tomar lectura del valor actual de sensibilidad del ratón y guardarlo en un archivo de texto temporal.
  2. Cambiar la sensibilidad del ratón a un valor establecido de antemano que es, bajo mi criterio, el mejor posible para este juego.
  3. Ejecutar el juego.
  4. Esperar a que el juego termine.
  5. Una vez detecte que el juego ya no está en ejecución, restaurar el valor original de sensibilidad del ratón.
  6. Eliminar el archivo de texto temporal y cerrar la ventana de comandos.
Sobra decir que, tanto los archivos de script como el archivo batch, son simplemente archivos txt creados con el bloc de notas, a los que les cambiamos la extensión a .ps1 (scripts) y .bat (batch). A partir de este momento, ejecutaremos siempre el juego desde el archivo .bat. Si el valor de sensibilidad "4" no se adapta a tus gustos, deberás editar el archivo "ChangeMouseSensitivity.ps1" y cambiar el valor de la última línea. Recuerda que debe ser un número entero comprendido entre 1 y 20.

Tienes el archivo batch y los archivos de script de PowerShell disponibles aquí, aquí y aquí. Colócalos en la carpeta del juego. Para hacer la experiencia más transparente, puedes crear un acceso directo en el escritorio al archivo batch e incrustarle este icono creado para la ocasión:


Si guardas el archivo .ico en la misma carpeta del juego, no habrá riesgo de que el acceso directo se quede sin icono.
 

════════════════════════════╗
Recuperar la canción "Enigmas" de La Uniøn
╚════════════════════════════╝

Si conoces el juego sabrás que, en su edición original publicada en España por Dinamic Multimedia en 1997, la música introductoria que acompañaba al viaje en coche de Sue Bergman hasta la mansión de Otto J. Hannover, así como la de los créditos finales, corrió a cargo del grupo español La Uniøn. La canción se llamó "Enigmas", fue compuesta expresamente para el juego y jamás ha sido editada en ningún álbum ni recopilatorio del grupo. La única edición que existe es una release promocional lanzada por la propia Dinamic, y que incluía una primera pista de datos con la demo del juego, y las versiones normal e instrumental de la canción en formato CDDA en las pistas 2 y 3 del CD, respectivamente.

Es importante recalcar que esta música está presente única y exclusivamente en la edición española original del juego lanzada por Dinamic. Ninguna otra edición, ni siquiera las posteriores ediciones españolas a cargo de FX Interactive, contiene esta canción. Todas cuentan, en su lugar, con una música genérica de relleno. Quiero entender que FX no consiguió o no consideró oportuno o rentable recuperar los derechos de uso de dicha canción. Y, siendo como es la edición de FX la mejor versión del juego disponible a día de hoy, es realmente una buena noticia el hecho de poder rescatar la música de La Uniøn de una manera sencilla. En un momento te lo explico en detalle, no sin antes apostillar que, salvo por los archivos relacionados con la música de La Uniøn, el resto de archivos de datos del juego son idénticos entre las versiones de Dinamic y de FX. No existen diferencias de calidad: ambas ediciones se ven y se escuchan exactamente igual. Digo esto porque, durate años, he pensado que la edición de FX tenía el sonido menos comprimido, con más calidad, al menos en lo que se refiere a los diálogos. Esta idea errónea vino motivada por haber jugado a la versión de Dinamic en un pc moderno usando un DOSBox mal (pre)configurado, donde los diálogos se reproducían a un samplerate muy bajo, sonando bastante enlatados. La realidad es que el sonido de la edición de Dinamic es bastante mejor que eso, estando a la par, o incluso por encima, de juegos coetáneos como Broken Sword II, y esa misma calidad es la que exhibe la edición de FX. Ni más, ni menos.

Pues nada, al lío: necesitaremos una instalación o un CD de la versión de Dinamic, del que copiaremos los siguientes archivos a la carpeta de instalación de FX:

  • RESOURCE.M09: contiene la canción "Enigmas" propiamente dicha. Con este archivo la canción sonará en la intro y en los créditos finales.
  • RESOURCE.I00: contiene el logo de la distribuidora. Si usamos el archivo original de Dinamic, se mostrará el logo de Dinamic Multimedia al comienzo del juego. Si no, el que aparecerá será el de FX Interactive. Totalmente opcional.
  • RESOURCE.I05: contiene el texto de la intro que hace referencia al grupo La Uniøn:


Si no copiamos ese archivo de la edición de Dinamic, tendremos esto en su lugar:

Con este detalle no habían contado en el hilo de Abandonsocios. 

Aquí te dejo los tres archivos, tanto de la edición Dinamic como de la edición FX, para que los combines como quieras.


╔════════════════════════════╗
Versiones del ejecutable 
Monsters.exe y su modificación
╚════════════════════════════╝

Existen, al menos, 4 versiones del ejecutable del juego, que yo tenga controladas. Probablemente haya alguna más, pero éstas son las que conozco:
  • Versión original de Dinamic Multimedia: corre en MS-DOS y, hasta donde sé, puede dar numerosos errores de audio y vídeo al ejecutarla en Windows modernos, incluyendo un error de DirectDraw que impide que el juego arranque. Esta información la he leído en foros; no la he podido comprobar de primera mano, pues no tiene ningún sentido jugar a esta versión hoy en día.
  • Versión parcheada de Dinamic para hacer el juego compatible con DirectX: como no la he probado no termina de quedarme claro, pero diría que esta versión ya corre nativamente en Windows. Que me corrija alguien si me equivoco. Aun así, sigue siendo una versión muy arcaica.
  • Versión retail de FX original y su reedición para la colección de videojuegos de El Mundo: el ejecutable pesa 1.167.360 bytes. EL exe de FX integra el parche DirectX de Dinamic, corrige bugs y hace que el juego sea compatible con Windows XP. De esta versión del ejecutable bajé, de este post de un hilo de Abandonsocios, una versión modificada para mostrar los subtítulos activados por defecto (además de estar parcheada para no requerir el CD del juego). Es curioso cómo, dependiendo del nombre que demos al ejecutable, nos aparecerá o no un error de DirectDraw al intentar ejecutar el juego. Por ejemplo: si dejamos el nombre del ejecutable que viene por defecto en el zip del post mencionado, "Monsters.SUBS.exe", el juego no arrancará, mostrando el siguiente error:

Basta con modificar un poco el nombre, como quitar una S y dejarlo como "Monsters.SUB.exe", para que el juego arranque y funcione sin problemas. Desconozco el motivo, pero también ocurre en el ejecutable más moderno si lo llamamos de la misma manera. Eso sí, con dgVoodoo no saldrá ningún mensaje de error de DirectDraw usemos la versión que usemos de FX y nombremos como nombremos al ejecutable.
  • Versión digital de FX Interactive: incluida en la versión retail de Hollywood Monsters 2 (a.k.a. The Next Big Thing fuera de nuestras fronteras) y en la difunta tienda digital de FX. Esta versón del ejecutable ocupa 2.015.232 bytes (1,92 MB), sustancialmente más que el original. Creo que es la versión más reciente del ejecutable, aunque desconozco qué mejoras o correcciones incluye. Un detalle importante es que no incluye ningún tipo de protección. De nuevo, en esta versión del ejecutable también ocurre el error de DirectDraw si el juego se llama "Monsters.SUB.exe", siempre que no tengamos dgVoodoo instalado en la carpeta del juego, claro.
A la vista de esto, me basaré en este ejecutable de 192 MB para conseguir que los subtítulos del juego aparezcan activados por defecto. La idea tiene sentido, pues el juego no guarda los ajustes en ningún sitio, ni siquiera en las partidas guardadas. Es decir: cada vez que arranquemos el juego, carguemos o no una partida guardada, los ajustes de audio, subtítulos, etc., habrán vuelto a sus valores predeterminados. Es más, los valores del audio van cambiando automáticamente según el momento del juego en el que nos encontremos. Por ejemplo: el nivel de la música al arrancar el juego se encuentra por debajo de la mitad. Sin embargo, durante la secuencia del viaje en coche de Sue a la mansión Hannover, la barra se situará por encima del 50% de forma automática. Entiendo que los creadores ajustaron los valores a lo largo del juego para obtener siempre la mejor experiencia sonora. Por lo tanto, creo que la configuración por defecto es la más adecuada para disfrutar del juego, salvo por los subtítulos desactivados. Y es lo que vamos a solucionar.

Necesitaremos CheatEngine para localizar la dirección de memoria que controla la activación y desactivación de los subtítulos, y un editor hexadecimal para cambiar ese valor de manera permanente en el ejecutable del juego, que es donde se almacena, en este caso.

En cuanto a CheatEngine, una advertencia: procura que no esté corriendo mientras ejecutas juegos online competitivos con algún tipo de sistema anti-cheat: te podría costar el baneo.

Dicho lo cual, descargaremos CheatEngine de su web oficial y lo instalaremos. En el momento de escribir este texto, la última versión disponible es la 7.5, de 14 de febrero 2023.

Una vez descargado e instalado, ejecutaremos el juego. Para facilitar el poder alternar entre la ventana del juego y la de CheatEngine de manera fluida, cosa que vamos a necesitar hacer, puede venirte bien cambiar temporalmente ciertos ajustes de dgVoodoo para que el juego se ejecute en modo ventana:
  • En la pestaña principal de ajustes de dgVoodoo marcaremos la opción "Windowed" en el apartado "Appearance", y  justo al lado, en "Scaling mode", escogeremos "Centered, keep aspect ratio".
  • Si vamos a la pestaña "DirectX", podremos cambiar la resolución a algo mas bajo como, por ejemplo, 1024x768. En la misma pestaña nos aseguraremos de tener desmarcadas las opciones de "Application controlled fullscreen/windowed state" y "Disable Alt-Enter to toggle screen state".
  • Ahora, si hacemos clic con el botón derecho en la interfaz de dgVoodoo y escogemos "Show all sections of the configuration", podremos acceder a pestañas de configuración avanzada. En la pestaña "GeneralExt" marcaremos la opción "Always on top" en el apartado "Windowed mode attributes".
Con estos ajustes podremos pasar de la ventana del juego a la de CheatEngine, y viceversa, con total fluidez (Alt+TAB y ALT+Enter también pueden sernos de utilidad). Ahora, abre el juego. Te recomiendo avanzar hasta el punto en el que tenemos ya el control de nuestro personaje y puedas acceder al menú de ajustes con la tecla Escape. Lo dejaremos así y abriremos CheatEngine. Nos encontraremos con algo como esto:


Haremos clic en el icono de una pantalla con una lupa en la parte superior izquierda de la ventana, seleccionaremos nuestro proceso (Monsters.exe) y aceptaremos:


Recuerda que tienes que tener el juego corriendo en segundo plano o no aparecerá el proceso correspondiente. Ahora, dejaremos todo como en la siguiente imagen y haremos clic en el botón "First Scan" de la parte superior derecha:


Con esto nos habrá encontrado todas las direcciones de memoria relacionadas con el proceso Monsters.exe que tengan un byte que valga 0. Seguramente haya encontrado varias decenas de miles, o incluso más. Ahora, volveremos al juego. En los ajustes, bajaremos hasta el apartado de los subtítulos y voces, y marcaremos la opción "Ambos":


De vuelta en CheatEngine, cambiaremos el tipo de escaneo a "Changed value" y haremos clic en "Next Scan":


Al hacerlo, con un poco de suerte, nos quedarán un puñadito de direcciones a la vista. Si hemos tenido mucha suerte, sólo nos habrá quedado una. Si no, se tratará de volver al juego, marcar la opción "Voz", volver a CheatEngine, pulsar de nuevo en "Next Scan", comprobar cuántos valores nos quedan, volver al juego, cambiar de nuevo a "Ambos", volver a CheatEngine... En fin, ya sabes. Si no conseguimos que nos quede una única dirección de memoria a la vista, nos fijaremos en el valor de la columna "Value". En teoría, con esa columna y con "Previous" deberíamos poder deducir fácilmente qué dirección valía 0 y ahora vale 1 cuando hemos activado los subtítulos en el juego, o viceversa. Digo en teoría, porque esto es lo que me sale a mí:


Ha salido a la primera. El primer valor era 0 y el actual es 1. Lo que no entiendo es por qué en "Previous" también pone "1" cuando debería ser un "0", claramente. Sea como fuere, ya tenemos localizada nuestra dirección de memoria. Lo que deberemos encontrar ahora será quién está escribiendo "0" o "1" en esa dirección de memoria cuando desactivamos o activamos los subtítulos. Para eso haremos clic con el botón derecho sobre el proceso y escogeremos la opción "Find out what writes to this address":


Aceptamos el mensaje de advertencia y nos saldrá una nueva ventana vacía. Volveremos al juego. Si tenemos marcada la opción "Ambos", marcaremos "Voz" y veremos, entonces, cómo en la ventana de CheatEngine ha aparecido nueva información. Todavía en el juego, cambiaremos de nuevo a "Ambos", observando cómo aparece una segunda línea con información en CheatEngine:


Es decir, que es la segunda línea la que nos interesa, pues ha aparecido al marcar "Ambos" en los ajustes del juego. Si nos fijamos en dicha línea, observamos que dice lo siguiente:
005248DF - C6 05 F5FE6800 01 - mov byte ptr [0068FEF5],01

No tengo ni idea de ensamblador o lo que quiera que sea eso, pero viene a decir que la dirección de memoria donde se almacena el estado de los subtítulos viene comandada por la dirección en color naranja, presente en el ejecutable del juego. Por lo tanto, bastará con abrir el ejecutable en un editor hexadecimal como HxD, buscar dicha dirección y cambiar el último byte por "01", tal como indica la instrucción. Para ello, cerramos el juego y CheatEngine, y abrimos el ejecutable en nuestro editor hexadecimal (te recomiendo que hagas copia del exe por si acaso, que nunca está de más). Utilizaremos el buscador para llegar hasta la dirección en cuestión:


Para que no quede ningún tipo de duda, he resaltado en amarillo la dirección del exe que controla los subtítulos. El último byte, marcado en azul, tiene por defecto el valor "00", es decir, subtítulos apagados. No tendremos más que cambiar ese byte a "01", guardar los cambios en el ejecutable y ya tendremos un exe modificado para que los subtítulos aparezcan siempre activados por defecto cuando abramos el juego.

No obstante, si no quieres pasar por toda esa odisea, te dejo el ejecutable ya parcheado aquí. Y, si no te fías y prefieres modificar tu propio ejecutable pero te da palo hacer todo lo anterior, te dejo aquí la dirección de memoria limpia de polvo y paja para que la busques en el editor hexadecimal:
C6 05 F5 FE 68 00 00

y cambies simplemente el último byte:
C6 05 F5 FE 68 00 01

Hablo siempre del ejecutable gordo, el de 1,92 MB. No confundir con el otro ejecutable de FX, el de las ediciones retail del juego, ya que ése pesa, como he mencionado anteriormente, 1.167.360 bytes (1,11 MB) y tiene el byte de la discordia en otra dirección de memoria diferente:
C6 05 F1 4D 5F 00 00

que habría que cambiar a:
C6 05 F1 4D 5F 00 01

Con esto concluimos esta sección
.


╔════════════════════════════╗
ReShade (opcional)
╚════════════════════════════╝

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.

Nota: las siguientes capturas relativas a la instalación y configuración de ReShade pertenecen al tutorial del Star Wars: Racer, por lo que las rutas de los ejecutables, etc., serán distintas.

Primero, descargaremos ReShade desde su web oficial. En el momento de escribir esto, la última versión disponible es la 5.9.2. Al ejecutar el archivo nos pedirá que localicemos el ejecutable del juego donde queremos inyectar ReShade (por defecto, la versión de FX Interactive lo coloca en C:\ Archivos de Programa (x86) \ Hollywood Monsters \ Monsters.exe):


A continuación, tenemos que decirle a ReShade qué API gráfica está usando nuestro juego. El juego corre bajo DirectDraw, pero ya sabemos que dgVoodoolo está convirtiendo a DirectX11 "al vuelo", por lo que marcaremos la segunda opción:


En el siguiente paso podremos importar un perfil de ReShade ya hecho, o bien no hacerlo de momento:


Antes de tomar una decisión y continuar con la instalación de ReShade, aquí te muestro mi perfil aplicado al juego (Captura 1: SIN ReShade. Captura 2: CON ReShade):


Te recomiendo que descargues el archivo png de esta última captura y la veas a un nivel de zoom del 100% con un visor independiente, no con el navegador. De lo contrario verás bandas o patrones en los scanlines que no deberían estar ahí. Si te convence mi perfil de ReShade, que usa el shader CRT-Royale, puedes descargarlo para resolución 4K (descarga) y 1080p (descarga). Ten en cuenta que, para que funcione y se te vea como a mí, vas a necesitar unas cosillas adicionales que enseguida te contaré. Si usas una resolución alternativa, como 1440p, es posible que tengas que ajustar el tamaño del scanline, editando el parámetro "Max triad width" en los ajustes de CRT-Royale.

Una vez descargado mi perfil, coloca el archivo en la carpeta principal del juego. Entonces, desde la ventana de instalación de ReShade que aún tienes abierta, busca el archivo y selecciónalo. Si lo has hecho así, en el siguiente paso habrá ya unos cuantos packs de shaders seleccionados:


En teoría, dejándolos tal cual vienen debería funcionar mi preset sin ningún problema, pero muchas veces no se instalan todos los que deberían. Por ello, te recomiendo que marques todos (haciendo clic en "Unckeck all" y luego en "Check all") e instales todo.

Una vez hecho, empezará a descargar los shaders de algún lugar de internet (de uno o varios repositorios de GitHub, imagino). Cuando haya terminado, si todo ha ido bien, saldrá esta ventana:


Haremos clic en Finish y ya estaría. Antes de ejecutar el juego necesitarás, como decía, 3 elementos adicionales para que el perfil de ReShade se te vea como a mí:
  1. Shader 4xBRz: en este post de este hilo del foro de ReShade, un tipo ha porteado el shader 4xBRz de libretro (Retroarch) a ReShade. Lo ha subido aquí. Colócalo en la recién creada "\ reshade-shaders \ Shaders" dentro de la carpeta del juego.
  2. Shader CRT-Royale: otro tipo ha porteado el shader CRT-Royale de libretro a ReShade. Lo ha subido a GitHub, pero viene ya incluido en uno de los packs de shaders que seguro se te han descargado hace un momento. Si lo menciono es porque no uso las últimas versiones, que ya integran el patrón del shader en el propio archivo .fx, sino que utilizo la primera de todas, que incluía los patrones en imágenes png. Y si me interesa esto es porque he observado que este shader en ReShade muestra los scanlines en vertical en vez de horizontal, incluso en las últimas versiones. No sé si es un bug o una feature, pero no me convence para nada. Así que opté por rotar los pngs 90 grados y problema resuelto. Resumiendo: eliminaremos de la carpeta "reshade-shaders" todo lo que tenga que ver con "CRT-Royale". Luego, descargaremos la versión 0.9.0 de aquí. Una vez descargado, arrastraremos la carpeta "reshade-shaders" del zip al directorio de nuestro juego. Una vez en el mismo, iremos a "reshade-shaders \ Textures \ crt-royale" y rotaremos 90 grados a la derecha los siguientes archivos usando el menú contextual de Windows:
    • TileableLinearApertureGrille15Wide8And5d5Spacing.png
    • TileableLinearApertureGrille15Wide8And5d5SpacingResizeTo64.png
    • TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacing.png
    • TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacingResizeTo64.png
  3. El bezel / overlay / marco de Hollywood Monsters que has podido ver en la captura comparativa de antes. Primero, busqué la versión de la portada con mayor resolución que pude encontrar. Luego, la reescalé con Topaz Photo AI. Para rellenar la parte del logo de FX utilicé la herramienta gratuita online de inpaint de Adobe. Y, por último, el señor enkonsierto aplicó sus conocimientos photoshoperos y su buen gusto compositivo para crear el bezel definitivo, al cual le cambié un poco la posición de la mano de Frankenstein y le añadí, finalmente, el marco de la TV, el efecto de textura y sombreado de los altavoces, etc. Desde aquí mi agradecimiento a él (quien, por cierto, también me ayudó a modificar el .exe para activar los subtítulos). El overlay irá en la carpeta del juego \ reshade-shaders \ Textures, sustituyendo al archivo dummy con el mismo nombre que ya se encuentra dentro. Haremos esto después de instalar ReShade, antes de volver a ejecutar el juego. Si lo ejecutamos antes de copiar el archivo, ReShade cargará como overlay el archivo dummy, algo que no nos interesa.
Te dejo mirror de los shader 4xBRZ y CRT-Royale, así como el overlay en formato png en este enlace. En los párrafos anteriores te explico qué hacer con ellos.

Ahora, cada vez que iniciemos el juego, nos saldrá un pequeño banner semitransparente en la parte superior de la pantalla indicando que ReShade está cargando los shaders de nuestro preset.

En cuanto a cómo se usa ReShade, cómo modificar el preset o crear uno nuevo, cómo alterar individualmente los parámetros de cada shader, hacer capturas de pantalla con el antes y el después, activar o desactivar efectos individualmente o en conjunto, medir el impacto en milisegundos de cada shader en el pipeline global, y un largo etcétera, hay muchos tutoriales y vídeos a lo largo y ancho de la red, pero aquí tienes el tip más básico con el que empezar a toquetear: con la tecla "Inicio" o "Home" del teclado nos aparecerá, en una ventana flotante encima del propio juego, la interfaz gráfica de ReShade.

Éste sería el aspecto de la pantalla principal de ReShade. En ella podemos observar nuestro preset cargado, con los efectos en orden (cada efecto sólo se aplica a los que tiene por encima en el listado. El overlay está el último, afectando a todos los demás, al tiempo que ningún efecto se le aplica a él). Esta captura sirve, igualmente, como backup "gráfico" de nuestro preset, pues se pueden ver desglosados los ajustes individuales de cada parámetro de cada efecto/shader:



Te recomiendo desactivar el botón de la parte superior que dice "Auto Save on", para así poder guardar sólo de manera manual los cambios que hagas en el preset cuando estés satisfecho con los mismos, utilizando el icono del diskette justo al lado. De lo contrario, cualquier cambio que hagas quedará guardado automáticamente, lo cual me parece absurdo.

En cuanto al shader 4xBRz, puede que tengas que hacer un pequeño ajuste en función de la resolución nativa de tu monitor. En el hilo del foro de ReShade antes mencionado, el creador facilita en un post una fórmula para calcular el nivel de intensidad al que hay que ajustar el shader:
Try this formula:

STRENGTH = HEIGHT / ORIGINAL HEIGHT.

Example, in MAME emulator, some games have 384x224 resolution and MAME upscale this games to 1920x1080.

STRENGTH = 1080 / 224 = 4.8214

For 320x240 games (original resolution):

STRENGTH = 1080 / 240 = 4.5

For 320x240 games to upscaled 1280x1024 resolution:

STRENGTH = 1024 / 240 = 4.2666

Es decir: el parámetro Strenght del shader 4xBRz dentro de ReShade debería ser el cociente entre la resolución vertical de tu monitor y la resolución vertical nativa del juego. Para saber a qué resolución está el juego, basta con abrir los ajustes de dgVoodoo, ir a la pestaña "DirectX", al apartado "Resolution", cambiar el valor de "Max" a "Unforced", guardar, cargar el juego (aparecerá en pequeño en medio de la pantalla), asegurarnos de desactivar ReShade temporalmente y hacer captura de pantalla en un momento en el que podamos ver con claridad los límites de la imagen (por ejemplo, en el menú de pausa del juego):



A continuación nos llevaremos la imagen a un editor como Photoshop y, simplemente, mediremos la resolución vertical de lo que es el recorte con la imagen del juego. En este caso, el juego se ejecuta a 640x480. Mi monitor tiene una resolución de 2160p. Entonces, según la fórmula, el valor de ajuste del shader 4xBRz será 2160 entre 480, es decir, 4,5. Sin embargo ese valor es, al menos en mi apreciación, meramente orientativo. De hecho, creo que se ve mejor con el valor por defecto, 4.0. Y a 1080p creo que el valor má adecuado es 2.0. Lo mejor es que hagas pruebas por tu cuenta y decidas. Por cierto: si has hecho la captura por tu cuenta para averiguar la resolución del juego, no olvides cambiar el valor "Unforced" de vuelta a "Max" en los ajustes de resolución de dgVoodoo.

Una vez que tengas todo en ReShade ajustado a tu gusto, te recomiendo guardar los ajustes y marcar la casilla de abajo del todo, llamada "Performance Mode". Esto hará que, cuando arranques el juego, sólo se carguen los shaders del preset, y no todos los que hemos descargado durante la instalación de ReShade, acelerando mucho el proceso.

Otro pequeño consejo es que, si quieres utilizar shaders que necesitan acceder al buffer de profundidad (depth buffer, pero en el caso de este juego no lo vas a necesitar), como, por ejemplo, los que alteran la profundidad de campo, etc., deberás tener desactivado el MSAA desde los ajustes de dgVoodoo, en este caso, o desde los ajustes del propio juego o del panel de control de la gráfica, en general. En el caso de mi preset, ninguno de los shaders utilizados necesita acceder a dicho buffer, por tratarse de un juego clásico en 2D.

Por cierto: el único archivo dll que introduce ReShade en la carpeta de instalación del juego es "dxgi.dll". Si queremos que esta utilidad deje temporalmente de cargarse al comienzo del juego, bastará con renombrar o mover dicho archivo, acordándonos siempre de restablecerlo una vez queramos hacerlo funcionar de nuevo. Y, en cuanto a problemas o fallos, la instalación de ReShade en este juego no repercute negativamente en el mismo ni hace que se cuelgue al salir.

Actualización: mientras elaboraba esta guía he seguido ajustando y probando distintos efectos de CRT / scanlines, sobre todo de cara a grabar un vídeo para mi canal de YouTube. He encontrado un efecto que minimiza mucho la aparición de patrones feotes a la hora de trasladarlo a vídeo. Se basa en el shader "CRT-Aperture", y viene ya ajustado a 480x360. Los demás ajustes se mantienen similares, con pequeñas variaciones. Te lo dejo para descargar en su versión 4K aquí, y en su versión 1080p aquí. Debajo puedes ver un ejemplo de cómo se ve:


A menos que lo veas al 100% de su tamaño, aparecerán unos patrones en los scanlines bastante poco estéticos. Si descargas el archivo png y lo visualizas a pantalla completa ajustado al tamaño de tu pantalla no aparecerá ningún patrón en los scanlines, siempre y cuando lo estés viendo en un monitor 1080p o 4K, ya que el shader está pensado para verse bien a dichas resoluciones, pues el n.º de scanlines o de líneas está ajustado a 360 (Screen Width: 480, Screen Height: 360), que es divisor de 1080 y de 2160. También hice otra versión con 540 líneas (720 y 540 en los campos "Screen Width" y "Screen Height" en los ajustes del shader CRTAperture), que en resolución 4K se ve estupendamente, como un monitor CRT de alta resolución de la época, pero que a 1080p deja las scanlines demasiado pequeñas, casi invisibles. Además, el mencionado vídeo de YouTube lo he grabado a 4K con ese perfil y se ve estupendo a esa resolución. Sin embargo, al reducir la calidad del vídeo a 1080p los scanlines sencillamente desaparecen, dejando una especie de residuo en los contornos de los objetos y personajes. Pero para jugar, está bien. Te lo dejo por aquí (sólo para resoluciones 4K. A 1080p no tiene sentido porque las scanlines se ven demasiado pequeñas). Por eso, para grabar para YouTube, ya sea a 4K o a 1080p, son mucho más recomendables las versiones del preset a 480x360 líneas.

Y aquí una captura a modo de backup "gráfico" del preset (480x360 para res. 4K):



╔═══════════════════╗
NOTAS FINALES
╚═══════════════════╝

Este juego siempre me llamó la atención. Sin ser la quintaesencia de la aventura gráfica, es un juego bastante digno. No llega a la altura de los pesos pesados del género, pero no es mal juego para nada. Quizás los puzles podrían haber sido un poco más lógicos y razonables, eso sí. Es lo que yo llamo la "tara Péndulo", un problema que arrastrabn la mayoría de sus aventuras gráficas, desde los 90 hasta bien entrada la década posterior.

En fin, juego traído al presente con todas sus cualidades intactas. Y, de nuevo, más cosas aprendidas en el proceso, así que, objetivo doblemente cumplido. Y, de paso, lo dejo todo plasmado por aquí de la manera más pormenorizada posible. Si a alguien le ahorro todo el proceso de investigación que sigo con estos juegos, habrá merecido la pena. Y si no, también; el trabajo estaba hecho igualmente.


"El conocimiento que no se comparte carece de todo valor"


Hasta el próximo juego ;-)



Comentarios