Mafia: The City of Lost Heaven (2002) (GOG 16073)


╔═══════════════════╗
INTRODUCCIÓN
╚═══════════════════╝
 
Mafia: The City of Lost Heaven (2002) marcó un antes y un después tanto en el género de mundo abierto -sin ser un sandbox- como en el tratamiento argumental y el discurso narrativo cinematográfico trasladado a un videojuego, con una historia plagada de los tópicos del subgénero de la mafia, pero con un tono serio y maduro que lo hacía destacar sobre el resto de juegos de la época de corte similar, incluidos GTA III (2001) y Vice City (2002), cuyo tratamiento argumental y jugable era mucho más distendido y desenfadado. En cuanto a la jugabilidad, comparada con la de los juegos mencionados puede resultar un pelín tosca, pero no hay que olvidar que se trata de un juego de PC concebido y pensado para ser jugado con teclado y ratón, aunque un par de años más tarde fuera trasladado a las consolas PS2 y XBOX. No obstante, el manejo se vuelve bastante gratificante en cuanto le coges el tranquillo, especialmente el manejo de vehículos, cuyas físicas responden con un realismo inédito en su momento. Eso sí, no hay coberturas ni botiquines y, en general, el juego no perdona una y requiere algo que hoy en día cuesta encontrar: habilidad.

Pese a existir una solución directa, sencilla y rápida para poder ejecutar este juego en Windows 10 con un funcionamiento correcto, con mejoras gráficas y en panorámico real, y pese a la existencia de un mod integral como el Commuinity Modpack, la persistencia de determinados problemas que luego destacaré y mi búsqueda de la versión más pulida pero, a su vez, más fiel posible a la experiencia original, ha hecho que Mafia: The City of Lost Heaven haya demandado bastante más esfuerzo y dedicación que el resto de juegos que, hasta el momento, se encuentran en el blog: más tiempo dedicado a todo tipo de pruebas, muchas veces por ensayo y error, combinaciones de configuraciones y archivos, lectura de hilos de foros en ruso, checo y polaco, muchos de ellos desaparecidos, que he tenido que consultar a través de archive.org, y otros quebradreros de cabeza y problemas colaterales cuando ya parecía que todo funcionaba como debía... Y es que, lo que iba a ser algo rápido y sencillo, se ha ido complicando y enrevesando hasta límites insospechados. Tal es así que llevo con esto desde mediados de enero. ¿Habrá merecido la pena?

Como dije en la presentación del blog, no tengo conocimientos de informática a nivel de programación como para adaptar un juego antiguo a los sistemas modernos por mí mismo, pero me gusta investigar sobre lo que otros han hecho e intentar ir un paso más allá, tratando de cubrir otros aspectos y detalles no tratados en ningún foro, y recopilando y ordenando toda la información en un mismo sitio, pues ese conocimiento se encuentra casi siempre fragmentado y diseminado por todo Internet que, para más inri, es el ente más volátil y etéreo que pueda existir, donde la información que encuentras hoy, mañana se ha esfumado. Por lo tanto, y si decides ir más allá del tutorial básico de instalación, la información aquí contenida es, seguramente, la más completa y exhaustiva que vas a poder encontrar en ningún sitio sobre este tema en particular... lo cual no es nada difícil.

Mafioso random en una portada tan genérica como icónica

Bien, lo primero que hay que decir es que este tutorial es válido para todas las ediciones de PC existentes, ya sean digitales o retail -aunque me centraré en la versión de GOG-, siempre y cuando tengamos instalado el último parche que salió: el 1.2, también conocido como 1.3 en ciertas webs. Empezamos bien, ¿eh?

Por cuestiones de licencias, Mafia estuvo un tiempo retirado de las tiendas digitales, hasta que hace unos años -2017, creo- volvió a Steam y apareció por primera vez en GOG. Estas versiones digitales tienen una particularidad bastante chunga, pero no adelantemos acontecimientos. Además, la vamos a solucionar fácilmente.

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

En primer lugar, vamos a instalar la versión de GOG. En el momento de escribir esta guía, el último instalador disponible para su descarga desde la web de GOG es el "mafia_spanish_1.3_(16073)". El precio actual es de 12,12$. Aunque dispongo de la edición física original en 3 CDs, me he hecho con la versión de GOG por la ausencia de DRM. A la hora de la descarga, tenemos que escoger de antemano en qué idioma queremos descargar el juego, pues no hay un único instalador que aglutine todos los idiomas, sino un instalador por idioma:


Cuando hayamos escogido el idioma, descargaremos las dos partes del instalador (GOG Galaxy está bien pero no me termina de convencer: prefiero algo 100% offline). Una vez descargado el instalador, lo ejecutamos y seguimos las instrucciones, que están en varios idiomas, entre los que no se encuentra el español, pese a haber descargado el juego en español:

Qué bien, ¿eh?

Marcamos las opciones oportunas y comenzará la instalación:


Se instalará por completo del tirón; más cómodo que usar los 3 CDs, sin duda:

The Witness: juegazo.

Antes de finalizar, parece que el instalador de GOG ha tomado control de la consola de comandos y que algún polaco nos está juanqueando el ordenador, pero no hay nada que temer: simplemente está habilitando DirectPlay en los componentes heredados de Windows que, por lo visto, este juego necesita para funcionar:

 
Cuando termine, haremos clic en "Exit":

Por cierto: ¿quién es este tío? ¿Sale en el juego?

╔═══════════════════╗
INSTALACIÓN DE 
PARCHES, WRAPPERS...
CONFIGURACIÓN
╚═══════════════════╝

El siguiente paso es descargar el parche para ver el juego en panorámico real -entre otras cosas-, también conocido como WidescreenFix de ThirteenAG/behar. Si no estoy equivocado, el creador original es un tal behar, mientas que ThiteenAG lo ha mejorado/ampliado. Como vemos en el siguiente GIF, el modo nativo 16:9 del juego deja bastante que desear, pues, aparte de estirar el HUD, realiza un recorte del marco 4:3 en vez de ampliarlo por los laterales, lo cual reduce bastante el FOV. Por suerte, el fix soluciona ambos problemas:
 

La última versión disponible se puede descargar directamente de este enlace. Una vez descargado el zip, copiaremos todo su contenido al directorio principal del juego. El archivo "d3d8.dll" que viene con el WidescreenFix de ThirteenAG es un archivo exclusivo del mismo autor que contiene tanto un wrapper D3D8 a D3D9 como un cargador de parches en formato .asi (los parches .asi van en la carpeta "scripts"). Si entramos en ella, veremos que el WidescreenFix trae ya un par de archivos .asi con sus respectivos archivos .ini para modificar los parámetros. Abriremos el archivo "Mafia.WidescreenFix.ini" y dejaremos los valores tal que así:
[WideScreen]
# Option will fix Field of View.
FOV Hor+ = 1
# Option will fix HUD scaling, 1 - 4/3 centered hud, 2 - widescreen hud.
Fix HUD = 2
# Option will fix black borders scaling during cutscenes. 0 - Vanilla behavior, 1 - Fixed scaling (borders are properly scaled)
Fix Borders = 1
# Option will fix map scaling. 1 - 4/3 centered, 2 - wide.
Fix Map = 2
# Option will fix text scaling.
Fix Text = 1
# Option will fix menu scaling.
Fix Menu = 0
# Option will fix video scaling. 1 - fill to screen, 2 - zoom to fullscreen.
Fix Movie = 2

[Draw Distance]
Change Distance = 1
New Distance = 1500.0
Skip Min Distance = 20.0
Skip Max Distance = 1000.0

[Other]
Write Log = 0
FPS Limit = 0
Ru Credits Fix = 0
Estas son las opciones que hemos modificado respecto a los valores por defecto:
  • Esta opción nos restaura los bordes negros de las secuencias cinemáticas in-engine que las hacen más cinematográficas:
# Option will fix black borders scaling during cutscenes. 0 - Vanilla behavior, 1 - Fixed scaling (borders are properly scaled)
Fix Borders = 1
  • Esta segunda opción la pondremos a cero si decidimos utilizar el mod de las pantallas de carga, cosa recomendable y que viene ya en el pack, pues están preparadas para visualizarse en 16:9 sin deformarse, y no necesitamos que las ponga en 4:3. De hecho, si usamos esas nuevas pantallas de carga con Fix Menu = 1, se van a ver comprimidas:
# Option will fix menu scaling.
Fix Menu = 0
  • Al parecer hay algunas misiones que incluyen en sus archivos un valor de distancia de dibujado diferente al que el motor del juego utiliza por defecto. En tal caso, si dicho valor queda fuera del rango establecido por los parámetros "Skip Min Distance" y "Skip Max Distance" del parche, éste no aplicará en ningún momento el valor que le hemos definido en el parámetro "New Distance". O, dicho de otro modo, el parche aplicará el valor que le especifiquemos en el parámetro "New Distance" a todos los mapas que no tengan un valor establecido de distancia de dibujado o cuyo valor caiga dentro del rango que hayamos definido con los parámetros "Skip Min Distance" y "Skip Max Distance":
[Draw Distance]
Change Distance = 1
New Distance = 1300.0
Skip Min Distance = 20.0
Skip Max Distance = 1000.0
 En todo caso, al aumentar la distancia de dibujado salvajemente se pierde esa especie de neblina de fondo que le da cierta atmósfera a la lejanía. Escoger un valor u otro dependerá del gusto de cada uno. Lo mejor es ir haciendo pruebas, comenzando con el valor que viene por defecto y cambiándolo para ver los resultados. También hay que tener en cuenta que una distancia de dibujado muy grande, especialmente cuando tenemos mods instalados, reduce sensiblemente el rendimiento del juego en ciertas zonas. El valor "1500.0" está muy bien porque la distancia de visión es enorme, pero es bastante alto y puede dar problemas si no tienes un procesador con mucha velocidad por núcleo: lamento informarte de que la plataforma Ryzen, al menos en su primera generación, no es la mejor elección para obtener una experiencia totalmente fluida en este juego de casi 20 años...👎 En mi Ryzen 5 1600 a 3,4GHz, con el parámetro "New Distance" a 1500.0, contando con todos los demás mods que tengo instalados (que no son muchos o que añadan muchos polígonos a la ecuación, salvo el de la distancia del tráfico, que con los parámetros por defecto no es demasiado demandante), situando al personaje justo antes del puente peatonal que hay en la pequeña isla junto al puente Terranova (al norte del mapa), y encarándolo hacia Central Island (es decir,hacia el sur), obtengo unos 45 fps, sin importar si activo o desactivo anti-aliasing, filtro anisotrópico, etc:
 
 
Da igual cuántos núcleos tenga nuestro procesador: el juego utilizará solamente uno. Por lo tanto, el procesador es el factor limitante aquí: la gráfica tiene una carga de apenas un 48%, mientras que el núcleo que está usando el juego -en este caso el número 5- está totalmente saturado en ese punto del mapa. En consecuencia, la tasa de frames se desploma. No he conseguido ningún tipo de mejora cambiando/limitando la afinidad del proceso del juego a cierto núcleo del procesador mediante la aplicación Process Lasso siguiendo tutoriales como éste y éste (con esto). Sin embargo, basta reducir el parámetro de 1500.0 a 1000.0 para ver cómo en ese mismo punto de referencia los fps pasan de 45 a 58. Por lo tanto, si tienes un procesador parecido al mío, mi recomendación es que lo dejes en 1000.0 a menos que tengas la potencia suficiente o sepas lo que haces a la hora de overclockear tu procesador. Haciendo pruebas con la aplicación AMD Ryzen Master he conseguido subir la frecuencia de los núcleos de 3,4 GHz a 4,0 GHz y el voltaje de 1,2375V a 1,4V, aún muy por debajo del "límite seguro" de los 1,45V que mencionan en webs como ésta. Además, iba controlando las temperaturas con la misma aplicación. Cambiando ambas opciones y haciendo clic en "Apply", estos ajustes se mantienen hasta que los revirtamos desde la propia aplicación o reiniciemos el PC:


Estos ajustes, que son válidos para mí, seguramente no lo sean para ti, por lo que te sugiero que te olvides del tema a menos que sepas lo que haces, ya que podrías cargarte tu PC. El que avisa no es traidor.

Con este chute al procesador he podido subir la distancia de dibujado a 1300.0 (más los ajustes del Patcher.asi que luego explico) y que vaya casi en todo momento a 60fps salvo en la mencionada isla, donde oscilaba entre 50 y 60, y en algún sitio concreto como la primera curva a la derecha nada más llegar a la cumbre de Oak Hill subiendo desde Hoboken, en la que se ve toda la ciudad (o todo lo que me permite el parámetro de 1300.0), donde el frame-rate baja a los 40-50. Curiosamente, más adelante hay una vista mejor y más despejada, y allí supera los 50-55 fps. Salvo esos casos puntuales y quizá alguno más, el resto del tiempo me va totalmente fluido.

Antes de proceder al siguiente punto es muy importante ejecutar el Setup.exe y configurarlo, pues nos evitará problemas a la hora de hacer funcionar el juego a pantalla completa cuando sustituyamos luego el dll del wrapper. Debemos asegurarnos de que tenemos los valores como se muestran en la imagen (especial importancia a marcar el modo a pantalla completa), salvo la resolución, que escogeremos la nativa de nuestro monitor. En cuanto a la sincronización vertical, como la activaremos más adelante con dgVoodoo, la dejaremos desactivada aquí. Si no funcionara una vez llegado al final de la configuración e instalado y configurado dgVoodoo, entonces la activaremos en esta ventana. Pero lo dudo. Igualmente, no es necesario activar el "Triple Buffering", que se utiliza para reducir la latencia cuando tenemos activada la sincronización vertical, pues sólo tiene efecto en aplicaciones que corren en OpenGL. No obstante, he probado el juego con y sin Triple Buffering y no aprecio ninguna diferencia de respuesta, ni de input lag, ni nada. En resumen: puedes tener cualquiera de las dos opciones activada o desactivada, indistintamente.
 

Haremos clic en "Guardar y salir" y ejecutaremos el juego una vez (doble clic en "Game.exe"). Lo primero que haremos será ir a los ajustes gráficos y ponerlo todo al máximo:


A continuación, entraremos en el modo "Viaje Gratis" y nos aseguraremos de que el WidescreenFix está funcionando: el HUD no estará estar estirado y deberíamos poder ver el parachoques trasero de nuestro taxi en la vista por defecto. Además, la distancia de dibujado habrá aumentado considerablemente, pudiendo ver, si avanzamos unos metros hasta salir a la carretera y giramos a la izquierda para enfilarnos con la calle principal, los edificios situados al otro lado del río West. Comprobado esto, saldremos del juego.

Podríamos dejarlo ya así pero, después de semanas probando distintas configuraciones, he notado que el wrapper del WidescreenFix tiene varios problemas: rendimiento algo pobre, stuttering/framepacing a pesar de tener activada la sincronización vertical (muy notable en los giros al conducir o simplemente observando el movimiento del tráfico de un lado a otro de la pantalla al comienzo del modo Viaje Gratis), Z-fighting (parpadeos en sombras de vehículos y en zonas de unión de dos superficies como, por ejemplo, entre pequeños montículos de arena y el pavimento de la acera que hay en algunas zonas en obras) y ausencia de anti-aliasing por mucho que lo activemos desde el Setup del juego, lo forcemos desde el panel de control de la tarjeta gráfica o mediante Nvidia Inspector. He probado varios wrappers más, como el de Crosire (creador de ReShade) y, aunque mejora algunos aspectos, no termina de solucionar todos los problemas mencionados y su rendimiento no es mejor que el de dgVoodoo, que ha sido el único wrapper de todos los probados que se ha mostrado realmente competente.

Pues nada, procedemos entonces a la descarga de dgVoodoo, ya sea desde su web oficial o desde su repositorio en GitHub. He realizado todas las pruebas con la versión 2.72, pero observo que ha salido hace unos días la versión 2.73. Ignoro si mejorará algo, lo empeorará o lo dejará igual. No importa cuándo leas esto: es mejor descargar siempre la última versión disponible y, si da algún problema, probar con alguna de las anteriores. La 2.72 a mí me ha funcionado a la perfección. Los posibles problemas de rendimiento (no hablo de los específicos antes mencionados) en algunas zonas de la ciudad no son culpa del wrapper, pues también ocurren con los otros wrappers, sino por el uso intensivo de mods, unido a la escasa potencia bruta por núcleo en la plataforma Ryzen. Sí que me encontré un problema puntual de mal rendimiento continuo, pero fue consecuencia de lo siguiente: decidí desinstalar por completo la tarjeta gráfica (GTX 1060) y todos los drivers mediante la aplicación "Display Driver Uninstaller". Posteriormente, descargué los últimos drivers de Nvidia disponibles en su web y decidí hacer una instalación mínima, sólo los drivers y nada de Geforce Experience. Una vez hecho, arranqué el juego y, cuál fue mi sorpresa, el rendimiento había empeorado un montón con esta maniobra. Probé rápidamente los otros wrappers y se podía apreciar que algo mejor iban. Sin saber muy bien qué hacer, volví al wrapper dgVoodoo, reinicié el ordenador y, de nuevo, el rendimiento dejaba mucho que desear. Por último, decidí reinstalar los drivers, esta vez incluyendo Geforce Experience y realizando una instalación limpia. Cuando volví a probar el juego, ya funcionaba correctamente de nuevo y, de hecho, no he vuelto a tener este problema, por lo que creo que no es achacable, en realidad, a dgVoodoo.

Dicho esto, y una vez descargado el archivo zip con la última versión de dgVoodoo, copiaremos a la carpeta principal del juego los siguientes archivos:
  • dgVoodooCpl.exe → el ejecutable con interfaz gráfica para configurar los ajustes
  • dgVoodoo.conf → el archivo de configuración donde se guardarán todos los ajustes que hagamos con el archivo anterior. Si al lanzar el ejecutable la próxima vez no se hubieran guardado los cambios, prueba a hacerlo de nuevo ejecutándolo como administrador.
  • D3D8.dll → el que se encuentra en la carpeta "MS\x86". Este dll traduce las instrucciones DirectX8 a DirectX 10, 11 o 12 según lo que le indiquemos en los ajustes.
Una vez copiados, ejecutamos el archivo "dgVoodooCpl.exe". Si tienes un PC medianamente potente, recomiendo dejar las opciones como se muestran a continuación (la pestaña "Glide" es para la API homónima, propia de las tarjetas 3dfx y, a efectos de este juego, no nos interesa):


Varias cosas que decir de esta pestaña DirectX:
  • Uno de los muchos tutoriales que he ojeado en las últimas semanas recomienda poner en la casilla "VRAM" el valor "1024 MB". La verdad es que con cualquiera de los dos valores, no noto ninguna diferencia apreciable de rendimiento. Puede que con más VRAM "emulada" se eviten ciertos crasheos esporádicos, pero lo dudo. Además, el juego ya es muy estable, en general.
  • La opción "dgVoodoo Watermark" no es indispensable. La tengo activada para "asegurarme" de que dgVoodoo está funcionando cuando ejecuto el juego... Manias personales.
  • El filtrado anisotrópico a 16x, fundamental. Mira qué diferencia:
  • El anti-aliasing MSAA, a 8x. Sólo he conseguido activar el anti-aliasing desde esa opción. Forzarlo desde el panel de control de la gráfica y desde Nvidia Inspector no me ha funcionado. Lo que sí me ha funcionado, sin embargo, es el forzado del anti-aliasing de transparencia desde el panel de control de Nvidia. Y menos mal que se puede forzar, porque si no el anti-aliasing se nos queda cojo, ya que el MSAA filtra los contornos y siluetas de polígonos y texturas pero no se acerca ni con un palo a las texturas con transparencia o, mejor dicho, no filtra las partes "interiores" de las texturas con transparencia:
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 eso tenemos que activar el Anti-aliasing de transparencia desde el panel de control de la gráfica:

Y así nos quedará el anti-aliasing aplicado, por fin,  a las zonas con transparencia:

El resto de opciones las tengo así:

Un par de detalles adicionales:
  • Con esta combinación exacta de archivos dll parece que la sincronización vertical del juego funciona por fin, pues instalando los elementos en otro orden, o incluso instalando únicamente el WidescreenFix y dgVoodoo desde el instalador del Remastered Mod, y a pesar de haber marcado la opción de sincronización vertical dentro de los ajustes del Setup.exe del juego y dentro del propio dgVoodoo, el juego seguía yendo a tirones al no mostrar 60fps exactos, sino 61-63.
  • Al usar el archivo "d3d8.dll" que viene con dgVoodoo y sustituir el que ya trae el WidescreenFix de ThirteenAG, nos habremos cargado de un plumazo, sin querer, tanto el WidescreenFix como el cargador de parches que venía incluido en el dll, pero podemos restablecer ámbos simplemente colocando en el directorio principal un archivo "dinput8.dll" que descargaremos de la web del propio ThirteenAG, y que es el cargador de parches suelto: se trata del "Ultimate ASI Loader". Actualmente la última versión disponible es la 4.59. Hasta hace poco estaba disponible para su descarga la versión 4.57 pero, por alguna razón, el autor la ha eliminado. Por lo tanto, la última versión anterior a la 4.59 que está disponible es la 3.4, y es la que usaremos, pues el parche "libMafiaCountrysideMap2.0.asi" no funciona en la 4.59 ni en la 4.57 por algún extraño motivo, no mostrándose el mapa sobreimpreso cuando estamos en el campo. Una vez descargado el archivo "Ultimate-ASI-Loader.zip" correspondiente a la versión 3.4 de su web oficial, copiaremos el archivo "dinput8.dll" al directorio principal del juego. Con esto ya funcionará el WidescreenFix con sus parches, y cualquier otro parche que coloquemos en la carpeta "scripts", como es el famoso "Patcher.asi", del que ahora hablaremos.
Si después de todo esto, e independientemente de tener activada la casilla "Fullscreen" en los ajustes de dgVoodoo, el juego se nos ejecuta en una pequeña ventana sin bordes enmarcada en el centro de la pantalla, es que algo hemos hecho mal, por lo que recomiendo volver a repasar estos puntos:
  1. Eliminar el archivo "settings.bin" de la carpeta "savegame".
  2. Pegar el archivo D3D8.dll del WidescreenFix en el directorio principal del juego.
  3. Si tenemos el archivo "Patcher.asi" en "Mafia\scripts", lo renombraremos o moveremos temporalmente a otro lugar porque, de lo contrario, no se ejecutará el "Setup.exe" del siguiente paso.
  4. Ejecutar el "Setup.exe". Allí, elegir nuestra resolución nativa y marcar la casilla de "Pantalla completa" (y el resto de ajustes como hemos dicho antes).
  5. Ejecutar el juego una vez. Veremos cómo se está ejecutando a pantalla completa y a la resolución que le hayamos indicado.
  6. Salir de luego.
  7. Volver a sustituir el archivo D3D8.dll por el que trae dgVoodoo, y volver a dejar el archivo "Patcher.asi" en su carpeta.
  8. Podemos volver a abrir el archivo Setup.exe y comprobar que, por defecto, ha puesto de resolución algo como 1024x768, pero no la vamos a tocar, aunque daría igual, porque el juego usará la que le hemos indicado anteriormente.
  9. Entrar a los ajustes de dgVoodoo pero, esta vez, ejecutando el archivo "dgVoodooCpl.exe" como administrador. Dejaremos los ajustes como hemos indicado antes.
El juego guarda los ajustes de resolución en el archivo "settings.bin" dentro de la carpeta "savegame" por lo que, si nos descargamos un savegame de internet (que puede incluir la carpeta savegame completa, incluido dicho archivo de configuración) y sustituimos todo el contenido de la carpeta "savegame" que ya teníamos, seguramente nos encontremos con dicho problema: que el juego se ejecute en una ventana pequeña por estar configurado a una resolución diferente a la nuestra. Para evitarlo, usaremos un archivo "settings.bin" que hayamos guardado previamente. Si no lo hemos hecho, habrá que borrar el que haya y generar uno nuevo repitiendo los 8 pasos anteriores. Y de paso, al final de todo el proceso comprobaremos que, tanto en el Setup.exe como dentro de los ajustes gráficos del propio juego, tenemos todos los gráficos al máximo.

╔═══════════════════╗
OTROS PARCHES 
IMPORTANTES
╚═══════════════════╝
 
En la carpeta "scripts" incluyo un archivo de parches que forma parte del Remastered Mod/Community Modpack (del que luego hablaré). Aquí lo llaman "Car traffic distance, objects draw fix, etc." en alusión a los parámetros del juego a los que afecta, pero su creador lo llama simplemente "Mafia Patcher", cuya última versión disponible parece ser la 1.2.0. Permite ajustar varios de los aspectos internos del motor del juego. El archivo se llama "Patcher.asi", y viene con su correspondiente archivo de configuración editable en el bloc de notas. En principio dejo todo como viene por defecto, salvo esto:
TrafficSpawnDistance = -250.0 (Su función es cambiar la distancia a la que los vehículos del tráfico aparecen y desaparecen. Por defecto, el valor que marca el parche es "-450". Poner otro valor menor como "-250" (el caracter "-" aquí no representa un valor negativo) ayuda a mejorar el rendimiento, tal como afirman aquí y aquí. Este parámetro, por el hecho de estar activado, provoca una reducción de tráfico cuando estamos parados o nos movemos a pie. Sin embargo, si nos movemos en coche observamos cómo, a medida que circulamos, la densidad del tráfico aumenta).
TrafficDensity = -100 (viene con este valor pero, si el rendimiento se resiente, podemos probar con -80, -70... o directamente anular el parámetro poniendo "#" al comienzo de la línea. Lo malo de anularlo y mantener activado, a su vez, el parámetro "TrafficSpawnDistance" es que vamos a tener poco tráfico, dependiendo de la zona).
# PatchTrafficLimit = 1 (por si queremos, en un momento dado, subir de 100 el valor de la densidad del tráfico, este parámetro hace que el juego lo acepte sin dar errores. Si nunca vamos a subir de 100, podemos anularlo colocando "#" al comienzo de la línea, como he hecho yo, o poniendo como valor "0").
Anteriormente he mencionado el rendimiento que obtengo en determinadas zonas, con el micro overclockeado a 4 GHz, etc. Obtengo dicho rendimiento con estos parámetros:
  • En el archivo "Mafia.WidescreenFix.ini":
New Distance = 1300.0
Skip Min Distance = 20.0
Skip Max Distance = 1000.0
  • En el archivo "Patcher.cfg":
TrafficSpawnDistance = -250.0
TrafficDensity = -100 (parámetro anulado)
# PatchTrafficLimit = 1 (parámetro anulado)

╔═══════════════════╗
PARCHEO DE 
"RW_DATA.DLL"
Y "GAME.EXE"
╚═══════════════════╝

Como último paso antes de descargar mi cóctel de mods, es necesario parchear tanto el archivo "rw_data.dll" y el propio ejecutable del juego, "Game.exe". Por razones obvias, no puedo incluir esos archivos en mi enlace de descarga. Si tienes la versión de GOG o Steam, el archivo "rw_data.dll" ya viene parcheado, por lo que puedes pasar directamente al punto 2:
  1. Por defecto, el juego extrae todos los assets de unos archivos contenedores con extensión .dta. El parcheo del archivo "rw_data.dll" permite forzarlo a que busque dichos archivos en carpetas con nombres específicos que podemos crear dentro del directorio principal. Dichas carpetas no necesitan contener todos los assets, pues el juego seguirá buscando dentro de los contenedores mencionados los archivos que no encuentre en ellas. Esto les ha sido muy útil a GOG y Steam para poder relanzar el juego sin la música no licenciada: simplemente han parcheado el archivo "rw_data.dll" y colocado en una carpeta "sounds" archivos dummy con el mismo nombre de aquellos que en la versión retail contenían la música que no se ha podido licenciar para estas versiones digitales. El juego, entonces, leerá esos archivos que sólo contienen silencio, y se terminó el problema de licencias. Y tú te quedas sin la música tan famosa del juego. Dicho esto, si la versión que tienes es la retail/física,  necesitas parchear el dll por tu cuenta. Para eso, descargaremos la utilidad Mafia Data Xtractor v1.1. Copiaremos el archivo "MafiaDataXTractor.exe" al directorio principal del juego y lo ejecutaremos. Nos saldrá este mensaje advirtiéndonos de que va a crear una copia del archivo dll antes de modificarlo. Haremos clic en "OK" y en la siguiente ventana simplemente pincharemos en "Quit", obviando lo demás, pues no vamos a extraer nada. Ya lo tendremos parcheado:
     
     

     
  2. Por último, necesitamos parchear el ejecutable del juego, no para eliminar la protección anticopia, que en el caso de GOG no la tiene, sino para permitir que dicho ejecutable de 32-bit pase de poder utilizar 2GB de memoria virtual a 4GB en sistemas de 64-bit como los que tenemos la mayoría actualmente. Para ello, vamos a utilizar una herramienta llamada, precisamente, "4GB Patch", en su última versión, la 1.0.0.1. Esta utilidad nos servirá, además, para otros juegos y programas x86. La descargaremos desde este enlace. Una vez descargado el zip, extraeremos el ejecutable en cualquier sitio, lo abriremos, buscaremos el ejecutable del juego (en la versión de GOG se encuentra por defecto en "C:\Archivos de Programa (x86)\GOG Games\Mafia\Game.exe"), seleccionamos, aceptamos, y listo. Con esto habremos conseguido que el juego no explote por los aires cuando lo ejecutemos con todos los mods que le vamos a meter en un momento. La carpeta con los archivos del juego y todos los mods ocupa más de 4GB, pero seguramente el juego no utilice más de 4 a la vez durante el juego. No obstante, dudo que aguante si le metemos muchas más cosas.


╔═══════════════════╗
DESCARGA E INSTALACIÓN
DE MI PACK DE MODS
╚═══════════════════╝

Se trata de un archivo de 2,34GB que contiene los mods y mejoras gráficas que he seleccionado para la ocasión -de los cuales hay una relación pormenorizada al final de este post-, así como las músicas recuperadas de la versión retail. Copiaremos todo el contenido del archivo descargado a la carpeta principal del juego, sustituyendo los archivos repetidos por los recién descargados. Pero, antes de eso, te recomiendo eliminar de tu directorio de instalación los siguientes elementos, que no tienen ninguna utilidad más allá de ocupar espacio en disco:
 
Carpetas (con todo lo que contienen):
mafiaIItrailer
sounds
 
Archivos:
intro.avi
logo1.avi
logo2.avi
_____________



)-------------------------------------------------(
El tutorial básico llega hasta aquí.
Lo que sigue es completamente opcional
y está dirigido a quienes quieran
disfrutar de la experiencia definitiva.
)-------------------------------------------------(

 

_____________
 
La siesta a la hora del Tour es sagrada...
 
╔═══════════════════╗
RESHADE: INSTALACIÓN 
Y CONFIGURACIÓN
╚═══════════════════╝
 
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. Aunque Mafia es un juego DirectX 8, nuestro wrapper dgVoodoo lo está traduciendo al vuelo a DirectX 10-11-12, por lo que funcionará correctamente.

Primero, descargaremos ReShade desde su web oficial. En el momento de escribir esto, la última versión disponible es la 4.9.1. Al ejecutar el archivo nos aparece esta ventana, de la que escogeremos la primera opción:


En la siguiente ventana buscaremos y elegiremos el ejecutable de nuestro juego ("Game.exe", por defecto en C:\Archivos de Programa (x86)\GOG Games\Mafia). Nos saldrá, entonces, una nueva ventana, en la que haremos clic en "Direct3D 10/11/12":


Acto seguido, nos saldrá la siguiente ventana:


Podemos dejar los packs de shaders que vienen marcados por defecto, o podemos elegir/añadir los que queramos. Una vez escogidos, pinchamos en "OK" y empezará a descargar los packs, uno por uno. Cuando termine, podemos cerrar la ventana o pinchar, si queremos, en "Edit ReShade settings":



Todas las opciones disponibles son fáciles de entender salvo, quizá, el modo performance, que sólo carga los shaders que tengamos activados en el perfil que hayamos creado. Viene bien para acelerar la carga de los mismos una vez no los queramos modificar más. Es un proceso totalmente reversible.

Y cerramos esa ventana. Si hemos seguido los pasos correctamente, la próxima vez que ejecutemos el juego nos aparecerá un mensaje del propio ReShade en la parte superior izquierda de la pantalla diciéndote la versión instalada, si hay actualizaciones disponibles, y el botón para mostrar u ocultar la ventana de configuración. Por defecto se asigna la tecla "Inicio" / "Home" del teclado. Para activar o desactivar los efectos, yo suelo recurrir a la tecla "Ñ", ya que rara vez tiene uso en ninguna aplicación o juego, y para hacer capturas de pantalla, la tecla "Impr Pant", aunque podemos asignar cualquier tecla o botón de nuestro mando. El preset que hayamos creado se guarda en un archivo .ini en la carpeta principal del juego.

Si con esto te quedan dudas, aquí hay un tutorial bastante decente:


El preset que he creado para el juego, y que estoy utilizando actualmente, aumenta un pelín la iluminación y saturación, y hace los tonos un poco más cálidos. Sin extravagancias, sin efectos exagerados. En este vídeo te puedes hacer una idea de cómo queda en movimiento, si consigues ver algo con la compresión atroz que aplica YouTube:


Y aquí el preset (Mafia.ini). Puedes copiar y pegarlo a un txt, cambiarle la extensión a .ini, ponerlo en la carpeta principal del juego y cargarlo en ReShade:
PreprocessorDefinitions=
Techniques=FlexibleCA@FlexibleCA.fx,prod80_04_Saturation_Limiter@PD80_04_Saturation_Limit.fx,pd80_02_Bonus_LUT_pack@PD80_02_Bonus_LUT_pack.fx,prod80_04_SelectiveColor_v2@PD80_04_Selective_Color_v2.fx,Levels@Levels.fx,prod80_03_Shadows_Midtones_Highlights@PD80_03_Shadows_Midtones_Highlights.fx,DELC_Sharpen@qUINT_sharp.fx,prod80_04_ColorGradient@PD80_04_Color_Gradients.fx,Vibrance@Vibrance.fx,Vignette@Vignette.fx,LumaSharpen@LumaSharpen.fx,prod80_02_Bloom@PD80_02_Bloom.fx,PandaFX@PandaFX.fx,DPX@DPX.fx,Clarity@Clarity.fx
TechniqueSorting=FlexibleCA@FlexibleCA.fx,prod80_04_Saturation_Limiter@PD80_04_Saturation_Limit.fx,pd80_02_Bonus_LUT_pack@PD80_02_Bonus_LUT_pack.fx,prod80_04_SelectiveColor_v2@PD80_04_Selective_Color_v2.fx,Levels@Levels.fx,prod80_03_Shadows_Midtones_Highlights@PD80_03_Shadows_Midtones_Highlights.fx,DELC_Sharpen@qUINT_sharp.fx,prod80_04_ColorGradient@PD80_04_Color_Gradients.fx,Vibrance@Vibrance.fx,Vignette@Vignette.fx,LumaSharpen@LumaSharpen.fx,prod80_02_Bloom@PD80_02_Bloom.fx,PandaFX@PandaFX.fx,DPX@DPX.fx,Clarity@Clarity.fx,AdaptiveFog@AdaptiveFog.fx,AdaptiveTonemapper@AdaptiveTonemapper.fx,ADOF@qUINT_dof.fx,AdvancedCRT@CRT.fx,After@Splitscreen.fx,After@BeforeAfter.fx,AfterCanvasMask@CanvasMask.fx,AfterColorMask@ColorMask.fx,ContrastAdaptiveSharpen@CAS.fx,ApplyLUT@LUTTools.fx,ArcaneBloom@ArcaneBloom.fx,ArtisticVignette@ArtisticVignette.fx,ASCII@ASCII.fx,AspectRatioPS@AspectRatio.fx,AspectRatioComposition@AspectRatioComposition.fx,AspectRatioSuite@AspectRatioSuite.fx,Before@Splitscreen.fx,Before@BeforeAfter.fx,BeforeCanvasMask@CanvasMask.fx,BeforeColorMask@ColorMask.fx,BilateralComic@BilateralComic.fx,Bloom@qUINT_bloom.fx,Blooming_HDR@BloomingHDR.fx,Border@Border.fx,BulgePinch@BulgePinch.fx,CA@ChromaticAberration.fx,CanvasFog@CanvasFog.fx,Cartoon@Cartoon.fx,Checkerboard@Checkerboard.fx,Chromakey@Chromakey.fx,ChromaticAberration@Prism.fx,CinematicDOF@CinematicDOF.fx,ColorfulPoster@ColorfulPoster.fx,ColorIsolation@ColorIsolation.fx,ColorLab@ColorLab.fx,ColorMatrix@ColorMatrix.fx,Comic@Comic.fx,ContrastStretch@ContrastStretch.fx,CRT_Lottes@CRT_Lottes.fx,CRT_Yee64@CRT_Yee64.fx,CRT_Yeetron@CRT_Yeetron.fx,Cursor@Cursor.fx,Cursor@Cursor.fx,Curves@Curves.fx,Daltonize@Daltonize.fx,Deband@Deband.fx,Debanding@qUINT_deband.fx,DeHaze@Dehaze.fx,DepthAlpha@DepthAlpha.fx,DepthHaze@DepthHaze.fx,DirectionalDepthBlur@DirectionalDepthBlur.fx,Directionally_Localized_Anti_Aliasing_Plus@DLAA_Plus.fx,DisplayLUT@LUTTools.fx,DisplayDepth@DisplayDepth.fx,Dither@Dither.fx,eMotionBlur@eMotionBlur.fx,Emphasize@Emphasize.fx,EyeAdaption@EyeAdaption.fx,FilmGrain@FilmGrain.fx,FilmicAnamorphSharpen@FilmicAnamorphSharpen.fx,FilmicSharpen@FilmicSharpen.fx,Flair@Flair.fx,Flashlight@Flashlight.fx,Flip@Flip.fx,Flipbook@Flipbook.fx,FocalDOF@FocalDOF.fx,FramerateLimiter@FramerateLimiter.fx,FreezeShot@FreezeShot.fx,FXAA@FXAA.fx,GaussianBlurCS@GaussianBlurCS.fx,GrainSpread@GrainSpread.fx,HDR@FakeHDR.fx,HexLensFlare@HexLensFlare.fx,HotsamplingHelper@HotsamplingHelper.fx,Interlaced@Interlaced.fx,Layer@Layer.fx,Letterbox@Letterbox.fx,LiftGammaGain@LiftGammaGain.fx,Lightroom@qUINT_lightroom.fx,LiquidLens@LiquidLens.fx,LocalContrastCS@LocalContrastCS.fx,LUT@LUT.fx,MagicBorder@MagicBorder.fx,MagicHDR@MagicHDR.fx,MBMB@MBMB.fx,MeshEdges@MeshEdges.fx,MinimalColorGrading@MinimalColorGrading.fx,Monochrome@Monochrome.fx,Monocular_Cues@Depth_Cues.fx,MultiFX@MultiFX.fx,MultiLUT@MultiLUT.fx,MultiTonePoster@MultiTonePoster.fx,MXAO@qUINT_mxao.fx,NeoBloom@NeoBloom.fx,NormalMap@NormalMap.fx,Normal_Filter_Anti_Aliasing@NFAA.fx,Nostalgia@Nostalgia.fx,Oilify@Oilify.fx,Overlay@Overlay.fx,PCGI_One@RadiantGI.fx,PCGI_Two@RadiantGI.fx,PerfectPerspective@PerfectPerspective.fx,PiecewiseFilmicTonemap@PiecewiseFilmicTonemap.fx,PiecewiseFilmicTonemap_Debug@PiecewiseFilmicTonemap.fx,Pong@Pong.fx,prod80_01A_RT_Correct_Contrast@PD80_01A_RT_Correct_Contrast.fx,prod80_01B_RT_Correct_Color@PD80_01B_RT_Correct_Color.fx,prod80_01_Color_Gamut@PD80_01_Color_Gamut.fx,prod80_02_Cinetools_LUT@PD80_02_Cinetools_LUT.fx,prod80_02_LUT_Creator@PD80_02_LUT_Creator.fx,prod80_03_Color_Space_Curves@PD80_03_Color_Space_Curves.fx,prod80_03_CurvedLevels@PD80_03_Curved_Levels.fx,prod80_03_FilmicTonemap@PD80_03_Filmic_Adaptation.fx,prod80_03_Levels@PD80_03_Levels.fx,prod80_04_Black_and_White@PD80_04_BlacknWhite.fx,prod80_04_ColorBalance@PD80_04_Color_Balance.fx,prod80_04_ColorIsolation@PD80_04_Color_Isolation.fx,prod80_04_ColorTemperature@PD80_04_Color_Temperature.fx,prod80_04_ContrastBrightnessSaturation@PD80_04_Contrast_Brightness_Saturation.fx,prod80_04_Magical_Rectangle@PD80_04_Magical_Rectangle.fx,prod80_04_SelectiveColor@PD80_04_Selective_Color.fx,prod80_04_Technicolor@PD80_04_Technicolor.fx,prod80_05_LumaSharpen@PD80_05_Sharpening.fx,prod80_06_ChromaticAberration@PD80_06_Chromatic_Aberration.fx,prod80_06_Depth_Slicer@PD80_06_Depth_Slicer.fx,prod80_06_FilmGrain@PD80_06_Film_Grain.fx,prod80_06_LumaFade_End@PD80_06_Luma_Fade.fx,prod80_06_LumaFade_Start@PD80_06_Luma_Fade.fx,prod80_06_Posterize_Pixelate@PD80_06_Posterize_Pixelate.fx,RemoveTint@RemoveTint.fx,RetroFog@RetroFog.fx,RetroTint@RetroTint.fx,ReVeil_Bottom@ReVeil.fx,ReVeil_Top@ReVeil.fx,SCurve@SCurve.fx,SimpleGrain@SimpleGrain.fx,Sketch@Sketch.fx,SMAA@SMAA.fx,Smart_Sharp@Smart_Sharp.fx,SSR@qUINT_ssr.fx,StageDepthPlus@StageDepthPlus.fx,SunsetFilter@SunsetFilter.fx,SuperDepth3D@SuperDepth3D.fx,SuperDepth3D_VR@SuperDepth3D_VR+.fx,Swirl@Swirl.fx,TAA@Temporal_AA.fx,Technicolor@Technicolor.fx,Technicolor2@Technicolor2.fx,ImageTest@Image.fx,TiltShift@TiltShift.fx,Tint@Sepia.fx,TinyPlanet@TinyPlanet.fx,Tonemap@Tonemap.fx,TrackingRays@TrackingRays.fx,Trails@Trails.fx,UIDetect@UIDetect.fx,UIDetect_After@UIDetect.fx,UIDetect_Before@UIDetect.fx,UIDetect_ShowPixel@UIDetect.fx,UIMaskCreator@UIMaskCreator.fx,UIMask_Bottom@UIMask.fx,UIMask_Top@UIMask.fx,UnrealLens@UnrealLens.fx,Unsharp@Unsharp.fx,VariableRateShading@VRS_Map.fx,VirtualResolution@VirtualResolution.fx,Wave@Wave.fx,WhitepointerFixer@WhitepointFixer.fx,ZigZag@ZigZag.fx

[AdaptiveFog.fx]
BloomPower=10.000000
BloomThreshold=10.250000
BloomWidth=0.200000
FogColor=0.900000,0.900000,0.900000
FogCurve=1.500000
FogStart=0.050000
MaxFogFactor=0.800000

[AdaptiveTonemapper.fx]
AdaptFocalPoint=0.500000,0.500000
AdaptPrecision=0
AdaptRange=0.000000,1.000000
AdaptSensitivity=1.000000
AdaptTime=1.000000
Amount=1.000000
Exposure=0.000000
FixWhitePoint=1
TonemapOperator=2

[ArcaneBloom.fx]
uAdapt_DoLimits=1
uAdapt_Intensity=1.000000
uAdapt_Limits=0.000000,1.000000
uAdapt_Precision=0
uAdapt_Sensitivity=1.000000
uAdapt_Time=1.000000
uBloomIntensity=1.000000
uExposure=1.000000
uMaxBrightness=100.000000

[ArtisticVignette.fx]
BlendMode=0
VignetteColor=0.000000,0.000000,0.000000,1.000000
VignetteRatio=0.000000
VignetteShape=1
VignetteStartEnd=0.000000,1.000000
_Help=0

[ASCII.fx]
Ascii_background_color=0.000000,0.000000,0.000000
Ascii_dithering=1
Ascii_dithering_debug_gradient=0
Ascii_dithering_intensity=2.000000
Ascii_font=1
Ascii_font_color=1.000000,1.000000,1.000000
Ascii_font_color_mode=1
Ascii_invert_brightness=0
Ascii_spacing=1
Ascii_swap_colors=0

[AspectRatio.fx]
A=0.000000
Color=0.027000,0.027000,0.027000,0.170000
FitScreen=1
UseBackground=1
Zoom=1.000000

[AspectRatioComposition.fx]
iUIAspectRatio=16,9
iUIGridFractions=3
iUIGridType=0
UIGridColor=0.000000,0.000000,0.000000,1.000000

[AspectRatioSuite.fx]
AspectRatio=4.000000,3.000000
BackgroundColor=0.000000,0.000000,0.000000,0.000000
LetterBoxColor=0.000000,0.000000,0.000000,1.000000
Mode=0
TestBoxColor=1.000000,0.000000,1.000000,1.000000
TestBoxSize=1.000000

[BeforeAfter.fx]
Blur=0.000000
Color=0.337000,0.000000,0.118000
Line=1
Offset=0.500000

[BilateralComic.fx]
Anisotropy=2
EdgeStrength=1.400000
EdgeThreshold=0.300000
IgnoreSky=1
LevelCount=48
QuantizeLuma=1
Sigma0=2.000000
Sigma1=10.000000

[BloomingHDR.fx]
Adapt_Adjust=0.500000
Adapt_Seek=0.500000
Auto_Bloom=0
Auto_Exposure=1
BloomCurve=2.000000
BloomSensitivity=1.000000
Bloom_BA_iToneMapper=0
Bloom_Intensity=0.100000,0.500000,0.500000
Bloom_Spread=1.000000
CBT_Adjust=0.500000
Contrast=1.000000
Debug_View=0
Depth_Map=0
Depth_Map_Adjust=7.500000
Depth_Map_Flip=0
Dither_Bloom=0.250000
Exp=0.000000
Gamma=2.200000
GreyValue=0.180000
HDR_BP=0.500000
Inv_Tonemappers=2
NFCD=1.000000
Offset=0.000000
Saturate=1.000000
Saturation=0.250000,0.250000
Tonemappers=0
WP=1.000000

[Border.fx]
border_color=0.000000,0.000000,0.000000
border_ratio=2.350000
border_width=0.000000,0.000000

[BulgePinch.fx]
additiveRender=0
animate=0
center_x=0.500000
center_y=0.500000
magnitude=-0.500000
radius=0.500000
tension=1.000000

[CanvasFog.fx]
Angulod=0.000000
AnguloR=0.000000
AnguloS=0.000000
Axis=0.000000
BlendColor=0.000000,0.000000,0.000000
BlendFactor=0.000000
BlendM=0
BloomPower=0.000000
BloomThreshold=10.250000
BloomWidth=0.200000
ColorA=1.000000,0.000000,0.000000,1.000000
ColorB=0.000000,0.000000,1.000000,0.000000
ColorpA=0
ColorpB=0
EffectFactor=0.900000
Flip=0
FlipFog=0
FocusDepth=0.026000
FocusEdgeDepth=0.050000
FocusRangeDepth=0.001000
FogCurve=170.000000
FogCurveE=0.000000
FogRotationAngle=0.000000,0.000000
FogRotationCenter=0.500000,0.500000
FogStart=0.200000
FogType=0
GradientType=0
MaxFogFactor=1.000000
Modifierc=1.000000,1.000000
Modifierd=1.000000,1.000000
Offset=0.000000
Originc=0.500000,0.500000
Origind=0.500000,0.500000
PositionS=0.500000,0.500000
Scale=1.000000
Size=0.000000
Sized=0.000000
SizeS=0.000000
Sphere_FieldOfView=75
Sphere_FocusHorizontal=0.500000
Sphere_FocusVertical=0.500000
Spherical=0
Texture=0

[CanvasMask.fx]
AlphaA=1.000000
AlphaB=0.000000
Angulod=0.000000
AnguloR=0.000000
AnguloS=0.000000
Axis=0.000000
BlendColor=0.000000,0.000000,0.000000
BlendFactor=0.000000
EffectFactor=0.900000
FlipFog=0
FocusDepth=0.180000
FocusEdgeDepth=0.070000
FocusRangeDepth=0.010000
FogCurve=70.000000
FogCurveE=0.000000
FogRotationAngle=0.000000,0.000000
FogRotationCenter=0.500000,0.500000
FogStart=0.180000
FogType=0
GradientType=0
MaxFogFactor=1.000000
Modifierc=1.000000,1.000000
Modifierd=1.000000,1.000000
Offset=0.000000
Originc=0.500000,0.500000
Origind=0.500000,0.500000
PositionS=0.500000,0.500000
Scale=1.000000
ShowDebug=0
Size=0.000000
Sized=0.000000
SizeS=0.000000
Sphere_FieldOfView=75
Sphere_FocusHorizontal=0.500000
Sphere_FocusVertical=0.500000
Spherical=0

[Cartoon.fx]
EdgeSlope=1.500000
Power=1.500000

[CAS.fx]
Contrast=0.000000
Sharpening=1.000000

[Checkerboard.fx]
TileColorA=0.350000,0.350000,0.350000,1.000000
TileColorB=0.650000,0.650000,0.650000,1.000000
TileSize=20.000000
_Help=0

[Chromakey.fx]
AntiAliased=0
Color=1
CustomColor=1.000000,0.000000,0.000000
Floor=0
FloorAngle=1.000000
FOV=90
Pass=0
Precision=4
RadialX=0
RadialY=0
Threshold=0.500000

[ChromaticAberration.fx]
Shift=2.500000,-0.500000
Strength=0.500000

[CinematicDOF.fx]
AutoFocusPoint=0.500000,0.500000
AutoFocusTransitionSpeed=0.200000
BlurQuality=5.000000
BokehBusyFactor=0.500000
FarPlaneMaxBlur=1.000000
FNumber=2.800000
FocalLength=100.000000
FocusCrosshairColor=1.000000,0.000000,1.000000,1.000000
FocusPlaneColor=0.000000,0.000000,1.000000
HighlightAnamorphicAlignmentFactor=0.000000
HighlightAnamorphicFactor=1.000000
HighlightAnamorphicSpreadFactor=0.000000
HighlightGainFarPlane=0.500000
HighlightGainNearPlane=0.000000
HighlightThresholdFarPlane=0.000000
HighlightThresholdNearPlane=0.000000
ManualFocusPlane=10.000000
NearPlaneMaxBlur=1.000000
OutOfFocusPlaneColor=0.800000,0.800000,0.800000
OutOfFocusPlaneColorTransparency=0.700000
PostBlurSmoothing=0.000000
ShowCoCValues=0
ShowOutOfFocusPlaneOnMouseDown=1
UseAutoFocus=1
UseMouseDrivenAutoFocus=1

[Clarity.fx]
ClarityBlendIfDark=50
ClarityBlendIfLight=205
ClarityBlendMode=2
ClarityDarkIntensity=0.400000
ClarityLightIntensity=0.000000
ClarityOffset=2.000000
ClarityRadius=3
ClarityStrength=0.183000
ClarityViewBlendIfMask=0
ClarityViewMask=0

[ColorfulPoster.fx]
fUISlope=13.000000
fUIStepContinuity=1.000000
fUIStrength=1.000000
fUITint=1.000000
iUIDebugOverlayPosterizeLevels=0
iUILumaLevels=16
iUIStepType=2

[ColorIsolation.fx]
bUIShowDebugOverlay=0
bUIShowDiff=0
cUIWindowFunction=0
fUIOverlap=0.300000
fUIOverlayOpacity=1.000000
fUIOverlayPos=0.000000,0.000000
fUITargetHue=0.000000
fUIWindowHeight=1.000000
iUIOverlaySize=600,100
iUIType=0

[ColorLab.fx]
Multiplier=1.000000,1.000000,1.000000

[ColorMask.fx]
axisColorSelectAxis=0.500000,0.500000
axisColorSelectON=0
bUIShowDebugOverlayTwo=0
bUIShowDiffTwo=0
cUIWindowFunctionTwo=0
drawColorSelectON=0
fUIOverlapTwo=1.700000
fUIOverlayOpacityTwo=1.000000
fUIOverlayPosTwo=0.000000,0.000000
fUITargetHueTwo=0.000000
fUIWindowHeightTwo=1.000000
fuzzines=0.000000
iUIOverlaySizeTwo=600,100
iUITypeTwo=0
MaskAfterEffects=0
maskStrength=1.000000

[ColorMatrix.fx]
ColorMatrix_Blue=0.000000,0.125000,0.875000
ColorMatrix_Green=0.333000,0.667000,0.000000
ColorMatrix_Red=0.817000,0.183000,0.000000
Strength=1.000000

[Comic.fx]
bUIChromaEdgesDebugLayer=1
bUIColorEdgesDebugLayer=1
bUIEnableDebugLayer=0
bUIMeshEdgesDebugLayer=1
bUIOutlinesDebugLayer=1
fUIChromaEdgesDetails=0.000000
fUIChromaEdgesDistanceFading=0.000000,0.500000,0.800000
fUIChromaEdgesStrength=1.000000,0.500000
fUIColor=0.000000,0.000000,0.000000
fUIColorEdgesDetails=1.000000
fUIColorEdgesDistanceFading=0.000000,1.000000,0.800000
fUIColorEdgesStrength=1.000000,1.000000
fUIEdgesLumaWeight=0.000000,1.000000,0.800000
fUIEdgesSaturationWeight=0.000000,1.000000,0.800000
fUIMeshEdgesDistanceFading=-1.000000,0.100000,0.800000
fUIMeshEdgesStrength=3.000000,3.000000
fUIOutlinesDistanceFading=0.000000,1.000000,0.800000
fUIOutlinesStrength=1.000000,1.000000
fUIOutlinesThreshold=1.000000
fUIOverlayColor=1.000000,0.000000,0.000000
fUIStrength=1.000000
iUIChromaEdgesType=3
iUIColorEdgesType=1
iUIMeshEdgesEnable=1
iUIMeshEdgesIterations=1
iUIOutlinesEnable=1
iUIShowFadingOverlay=0

[ContrastStretch.fx]
DarkMax=0.450000
DarkPeak=0.500000
DarkThreshold=0.333000
Debug=0
LightMax=0.300000
LightPeak=0.450000
LightThreshold=0.667000
Maximum=1.000000
MaxVariance=1.000000
MidMax=0.450000
MidPeak=0.550000
Minimum=0.000000

[CRT.fx]
Amount=1.000000
Angle=0.000000,0.000000
Brightness=0.900000
CornerSize=0.010000
Curvature=0
CurvatureRadius=1.500000
Gamma=2.400000
MonitorGamma=2.200000
Oversample=1
Overscan=1.010000
Resolution=1.150000
ScanlineGaussian=1
ScanlineIntensity=2
ViewerDistance=2.000000

[CRT_Lottes.fx]
f2Warp=48.000000,24.000000
fBlur=2.500000
fDownscale=2.000000
fMask=0.500000
fThin=0.700000

[CRT_Yee64.fx]
fDownScale=1.200000
iHeight=1080
iWidth=1920

[CRT_Yeetron.fx]
fDownScale=1.200000
iHeight=1080
iWidth=1920

[Curves.fx]
Contrast=0.650000
Formula=4
Mode=0

[Daltonize.fx]
Type=0

[Deband.fx]
banding_depth=1.000000
debug_output=0
enable_depthbuffer=0
enable_sdeviation=1
enable_weber=1
iterations=1
range=24.000000
t1=0.007000
t2=0.040000

[Dehaze.fx]
Alpha=0.500000
Debug=0
DepthMultiplier=0.175000
IgnoreSky=0
TransmissionMultiplier=-0.500000

[DepthAlpha.fx]
ClearPreviousAlpha=1
ColorizeTransparency=0
DepthMultiplier=1.000000,0.500000,0.000000
DepthRange=0.000000,1.000000
DepthSmoothness=1.000000
TestColor=0.000000,0.000000,0.000000,1.000000
_Help=0

[DepthHaze.fx]
EffectStrength=0.900000
FogColor=0.800000,0.800000,0.800000
FogFactor=0.200000
FogStart=0.200000

[Depth_Cues.fx]
Blur_Cues=0.500000
Debug_View=0
DEPTH_DEBUG=0
Depth_Map=0
Depth_Map_Adjust=250.000000
Depth_Map_Flip=0
No_Depth_Map=1
Shade_Power=0.500000
Spread=10.000000

[DirectionalDepthBlur.fx]
BlurAngle=1.000000
BlurLength=0.100000
BlurQuality=0.500000
BlurType=0
FocusPlane=0.010000
FocusPlaneMaxRange=150.000000
FocusPoint=0.500000,0.500000
FocusPointBlendColor=0.000000,0.000000,0.000000
FocusPointBlendFactor=1.000000
FocusRange=0.001000
HighlightGain=0.500000
ScaleFactor=1.000000

[DisplayDepth.fx]
Advanced_help=0
bUIShowOffset=0
bUIUseLivePreview=1
Depth_help=0
fUIDepthMultiplier=1.000000
fUIFarPlane=1000.000000
fUIScale=1.000000,1.000000
iUIOffset=0,0
iUIPresentType=2

[Dither.fx]
fDithering=0.500000
fQuantization=0.000000
iDitherMode=0

[DLAA_Plus.fx]
De_Artifact=0.500000
Long_Edge_Mask_H=0.000000
Long_Edge_Mask_V=0.000000
Short_Edge_Mask=0.250000
Text_Preservation=0.500000
View_Mode=0

[DPX.fx]
Colorfulness=2.500000
Contrast=0.100000
RGB_C=0.360000,0.360000,0.340000
RGB_Curve=8.000000,8.000000,8.000000
Saturation=3.000000
Strength=0.082000

[eMotionBlur.fx]
Blur_Amount=16
Debug=0
Depth_Map=0
Depth_Map_Adjust=7.500000
Depth_Map_Flip=0
Depth_Scaling=1
Horizontal_and_Vertical=1.000000,1.000000
Image_Position_Adjust=0,0
mblurstrength=0.500000
Offset=0.000000
WeaponHandAdjust=0.000000,0.000000,0.000000

[Emphasize.fx]
BlendColor=0.000000,0.000000,0.000000
BlendFactor=0.000000
EffectFactor=0.900000
FocusDepth=0.026000
FocusEdgeDepth=0.050000
FocusRangeDepth=0.001000
Sphere_FieldOfView=75
Sphere_FocusHorizontal=0.500000
Sphere_FocusVertical=0.500000
Spherical=0

[EyeAdaption.fx]
fAdp_BrightenHighlights=0.100000
fAdp_BrightenMidtones=0.200000
fAdp_BrightenShadows=0.100000
fAdp_DarkenHighlights=0.100000
fAdp_DarkenMidtones=0.200000
fAdp_DarkenShadows=0.100000
fAdp_Delay=1.600000
fAdp_Equilibrium=0.500000
fAdp_Strength=1.000000
fAdp_TriggerRadius=6.000000
fAdp_YAxisFocalPoint=0.500000

[FakeHDR.fx]
HDRPower=1.300000
radius1=0.793000
radius2=0.870000

[FilmGrain.fx]
Intensity=0.500000
Mean=0.500000
SignalToNoiseRatio=6
Variance=0.400000

[FilmicAnamorphSharpen.fx]
Clamp=0.650000
Coefficient=0
DepthMask=0
DepthMaskContrast=128
Offset=0.100000
Preview=0
Strength=60.000000
UseMask=0

[FilmicSharpen.fx]
Clamp=0.650000
Coefficient=0
Offset=0.100000
Preview=0
Strength=60.000000
UseMask=0

[Flair.fx]
Auto_Flare_Intensity=0
CA_Type=1
Depth_Map=0
Depth_Map_Adjust=1.500000
Depth_Map_Flip=0
Flair_Falloff=0
Flare_Clamp_A=1.000000
Flare_Clamp_B=1.000000
Flare_Color_Map=4
Flare_Localization=0.000000
Flare_PBD=1.000000,0.500000,0.000000
Flare_Power=1.000000
Flare_Saturation=5.000000
Flare_Spread=0.500000
Flare_Type=0
Mask_Sky=0
User_Flare_Color=1.000000,1.000000,1.000000

[Flashlight.fx]
uBrightness=10.000000
uColor=1.000000,0.901961,0.784314
uDistance=0.100000
uSize=420.000000

[FlexibleCA.fx]
Mode=1
Multiplier=1.000000
Ratio=-0.976000,0.024000,1.000000

[Flip.fx]
FlipH=0
FlipV=0

[Flipbook.fx]
Position=1.000000,0.000000,1.000000
Size=10,9,30

[FocalDOF.fx]
DofScale=3.000000
FocusPoint=0.500000,0.500000
FocusTime=350.000000

[FramerateLimiter.fx]
Framerate=30.000000

[FreezeShot.fx]
Axis=0.000000
BlackBackground=0
BlendM=0
FlipH=0
FlipV=0
Freeze=0
Layer_Pos=0.000000,0.000000
Layer_Scale=1.500000,1.500000
Shot_depth_close=1.000000
Shot_depth_far=0.000000
Stage_depth=0.970000
Stage_Opacity=1.000000

[FXAA.fx]
EdgeThreshold=0.125000
EdgeThresholdMin=0.000000
Subpix=0.250000

[GaussianBlurCS.fx]
Strength=1.000000

[GrainSpread.fx]
BlendMode=0
GlobalGrain=0.500000
Opacity=0.500000
Speed=1.000000
Spread=1.000000

[HexLensFlare.fx]
uColor0=0.576471,1.000000,0.000000
uColor1=0.258824,0.592157,1.000000
uColor2=1.000000,0.576471,0.000000
uColor3=0.392157,0.925490,1.000000
uIntensity=1.000000
uScale=1.000000
uThreshold=0.950000

[HotsamplingHelper.fx]
bUIMaskBackground=1
fUIOverlayPos=0.500000,0.500000
fUIOverlayScale=0.200000

[Image.fx]
AspectCorrect=1

[Layer.fx]
Layer_Blend=1.000000
Layer_Pos=0.500000,0.500000
Layer_Scale=1.000000

[Letterbox.fx]
Color=0.027000,0.027000,0.027000,1.000000
DesiredAspect=2.400000
Dimensions=0,0

[Levels.fx]
BlackPoint=10
HighlightClipping=0
WhitePoint=255

[LiftGammaGain.fx]
RGB_Gain=1.000000,1.000000,1.000000
RGB_Gamma=1.000000,1.000000,1.000000
RGB_Lift=1.000000,1.000000,1.000000

[LiquidLens.fx]
BlurSigma=0.500000
BlurSize=1.000000
Brightness=0.100000
FisheyeAmount=-0.100000
FisheyeScaleType=0
FisheyeZoom=1.000000
Saturation=0.700000
Scale1=0.010000
Scale2=0.020000
Scale3=0.030000
Scale4=0.040000
Scale5=0.050000
Scale6=0.060000
Scale7=0.070000
ShowLens=0
Threshold=0.950000
Tint1=1.000000,0.000000,0.000000,1.000000
Tint2=1.000000,0.500000,0.000000,1.000000
Tint3=1.000000,1.000000,0.000000,1.000000
Tint4=0.000000,1.000000,0.000000,1.000000
Tint5=0.000000,1.000000,1.000000,1.000000
Tint6=0.000000,0.000000,1.000000,1.000000
Tint7=1.000000,0.000000,1.000000,1.000000
TintAmount=1.000000
Tonemapper=2
_WipWarn=0

[LocalContrastCS.fx]
DarkMax=0.150000
DarkPeak=0.075000
DarkThreshold=0.333000
GlobalStrength=0.750000
LightMax=0.300000
LightPeak=0.700000
LightThreshold=0.667000
Maximum=1.000000
MidMax=0.400000
MidPeak=0.500000
Minimum=0.000000

[LumaSharpen.fx]
offset_bias=1.000000
pattern=1
sharp_clamp=0.035000
sharp_strength=0.402000
show_sharpen=0

[LUT.fx]
fLUT_AmountChroma=1.000000
fLUT_AmountLuma=1.000000

[LUTTools.fx]
LutChromaLuma=1.000000,1.000000
LutRes=32
VerticalOrietation=0

[MagicBorder.fx]
BorderColor=1.000000,1.000000,1.000000,1.000000
LeftBottomCornerDepth=1.000000
LeftTopCornerDepth=1.000000
PictureFrameColor=0.700000,0.700000,0.700000,1.000000
PictureFrameLeftBottom=0.100000,0.900000
PictureFrameLeftTop=0.100000,0.100000
PictureFrameRightBottom=0.900000,0.900000
PictureFrameRightTop=0.900000,0.100000
RightBottomCornerDepth=1.000000
RightTopCornerDepth=1.000000
ShowDepths=0

[MagicHDR.fx]
BlendingAmount=0.500000
BlendingBase=0.800000
BloomAmount=0.300000
BloomBrightness=3.000000
BloomSaturation=1.000000
BlurSize=0.500000
Exposure=0.000000
InputExposure=0.000000
InvTonemap=0
ShowBloom=0
Tonemap=5
_Credits=0
_Help=0
_WipWarn=0

[MBMB.fx]
f2MinMaxSpeed=0.100000,10.000000
fBlur_Sigma=4.000000
fDistortion=1.000000
fSensitivity=0.100000

[MeshEdges.fx]
fUIColorBackground=1.000000,1.000000,1.000000
fUIColorLines=0.000000,0.000000,0.000000
fUIStrength=1.000000
iUIBackground=1

[MinimalColorGrading.fx]
ColorFilter=1.000000,1.000000,1.000000
Contrast=1.000000
Exposure=0.000000
Saturation=1.000000
SaturationMode=2

[Monochrome.fx]
Monochrome_color_saturation=0.000000
Monochrome_conversion_values=0.210000,0.720000,0.070000
Monochrome_preset=0

[MultiFX.fx]
f2Vignette_StartEnd=0.000000,1.000000
f3CA_Intensity=0.000000,0.000000,0.000000
fFilmGrain_Intensity=0.000000
fFilmGrain_Mean=0.000000
fFilmGrain_Speed=1.000000
fFilmGrain_Variance=0.500000
fSCurve_Intensity=0.000000
fVignette_Intensity=0.000000

[MultiLUT.fx]
fLUT_AmountChroma=1.000000
fLUT_AmountLuma=1.000000
fLUT_LutSelector=0

[MultiTonePoster.fx]
Color1=0.000000,0.050000,0.170000,1.000000
Color2=0.200000,0.160000,0.250000,1.000000
Color3=1.000000,0.160000,0.100000,1.000000
Color4=1.000000,1.000000,1.000000,1.000000
fUIStrength=1.000000
Pattern12=3
Pattern23=3
Pattern34=2
Width12=1
Width23=1
Width34=1

[NeoBloom.fx]
BloomBlendMode=1
ColorFilter=1.000000,1.000000,1.000000
Intensity=1.000000
MagicMode=0
MaxBrightness=100.000000
Mean=0.000000
NormalizeBrightness=1
Padding=0.100000
Saturation=1.000000
Sigma=4.000000
Variance=5.000000
_Help=0

[NFAA.fx]
AA_Adjust=16
HFR_AA=0
HFR_Adjust=0.500000
Mask_Adjust=1.000000
View_Mode=0

[NormalMap.fx]
AddressMode=0
DistortionAmount=1.000000
Rotation=0.000000
TextureScale=6.000000
Translation=0.000000,0.000000
ZScale=1.000000
_WipWarn=0

[Nostalgia.fx]
Nostalgia_color_0=0.000000,0.000000,0.000000
Nostalgia_color_1=1.000000,1.000000,1.000000
Nostalgia_color_10=1.000000,0.466667,0.466667
Nostalgia_color_11=0.200000,0.200000,0.200000
Nostalgia_color_12=0.466667,0.466667,0.466667
Nostalgia_color_13=0.666667,1.000000,0.400000
Nostalgia_color_14=0.000000,0.533333,1.000000
Nostalgia_color_15=0.733333,0.733333,0.733333
Nostalgia_color_2=0.533333,0.000000,0.000000
Nostalgia_color_3=0.666667,1.000000,0.933333
Nostalgia_color_4=0.800000,0.266667,0.800000
Nostalgia_color_5=0.000000,0.800000,0.333333
Nostalgia_color_6=0.000000,0.000000,0.666667
Nostalgia_color_7=0.933333,0.933333,0.466667
Nostalgia_color_8=0.866667,0.533333,0.333333
Nostalgia_color_9=0.400000,0.266667,0.000000
Nostalgia_color_reduction=1
Nostalgia_dither=0
Nostalgia_palette=0
Nostalgia_scanlines=1

[Oilify.fx]
Scale=1.000000
Sharpness=1.000000
Tuning=2.000000

[Overlay.fx]
bFollowMouse=0
bKeepAspectRatio=0
f2Center=0.500000,0.500000
fOpacity=1.000000
fStretch=1.000000

[PandaFX.fx]
Bleach_Bypass_Amount=0.500000
Blend_Amount=0.100000
Contrast_B=0.800000
Contrast_G=0.800000
Contrast_R=0.900000
Diffusion_1_Amount=0.300000
Diffusion_1_Gamma=0.700000
Diffusion_1_Quality=2.000000
Diffusion_1_Radius=8.000000
Diffusion_2_Amount=0.200000
Diffusion_2_Gamma=0.500000
Diffusion_2_Quality=16.000000
Diffusion_2_Radius=5.000000
Diffusion_3_Amount=1.000000
Diffusion_3_Gamma=5.000000
Diffusion_3_Quality=3.000000
Diffusion_3_Radius=7.400000
Enable_Bleach_Bypass=1
Enable_Diffusion=1
Enable_Dither=0
Enable_Static_Dither=1
Gamma_B=0.990000
Gamma_G=1.000000
Gamma_R=1.000000

[PD80_01A_RT_Correct_Contrast.fx]
enable_fade=1
freeze=0
rt_bp_str=1.000000
rt_enable_blackpoint_correction=1
rt_enable_whitepoint_correction=0
rt_wp_str=1.000000
transition_speed=0.500000

[PD80_01B_RT_Correct_Color.fx]
debug_mode=0
dither_strength=1.000000
enable_dither=1
enable_fade=1
freeze=0
midCC_scale=0.500000
mid_use_alt_method=1
rt_blackpoint_method=1
rt_blackpoint_respect_luma=0
rt_bp_rl_str=1.000000
rt_bp_str=1.000000
rt_enable_blackpoint_correction=1
rt_enable_midpoint_correction=1
rt_enable_whitepoint_correction=1
rt_midpoint_respect_luma=1
rt_whitepoint_method=0
rt_whitepoint_respect_luma=1
rt_wp_rl_str=1.000000
rt_wp_str=1.000000
transition_speed=0.500000

[PD80_01_Color_Gamut.fx]
colorgamut=0

[PD80_02_Bloom.fx]
bExposure=0.000000
BKelvin=6500
BloomLimit=0.333000
BloomMix=0.250000
BloomSaturation=0.000000
BlurSigma=30.000000
debugBloom=0
dither_strength=2.000000
enableBKelvin=0
GreyValue=0.333000

[PD80_02_Bonus_LUT_pack.fx]
dither_strength=1.000000
enable_dither=1
ib=0.000000,0.000000,0.000000
ig=1.000000
iw=1.000000,1.000000,1.000000
ob=0.000000,0.000000,0.000000
ow=1.000000,1.000000,1.000000
PD80_Intensity=0.327000
PD80_LutSelector=0
PD80_MixChroma=1.000000
PD80_MixLuma=1.000000

[PD80_02_Cinetools_LUT.fx]
dither_strength=1.000000
enable_dither=1
ib=0.000000,0.000000,0.000000
ig=1.000000
iw=1.000000,1.000000,1.000000
ob=0.000000,0.000000,0.000000
ow=1.000000,1.000000,1.000000
PD80_Intensity=1.000000
PD80_LutSelector=0
PD80_MixChroma=1.000000
PD80_MixLuma=1.000000

[PD80_03_Color_Space_Curves.fx]
colorsat=0.000000
color_space=1
dither_strength=1.000000
enable_dither=1
pos0_shoulder_grey=0.800000
pos0_toe_grey=0.200000
pos1_shoulder_grey=0.800000
pos1_toe_grey=0.200000

[PD80_03_Curved_Levels.fx]
black_in_grey=0.000000
black_out_grey=0.000000
dither_strength=1.000000
enable_dither=1
pos0_shoulder_grey=0.750000
pos0_toe_grey=0.250000
pos1_shoulder_grey=0.750000
pos1_toe_grey=0.250000
white_in_grey=255.000000
white_out_grey=255.000000

[PD80_03_Filmic_Adaptation.fx]
adj_linear=1.000000
adj_shoulder=1.000000
adj_toe=1.000000

[PD80_03_Levels.fx]
dither_strength=1.000000
enable_dither=1
ib=0.000000,0.000000,0.000000
ig=1.000000
iw=1.000000,1.000000,1.000000
ob=0.000000,0.000000,0.000000
ow=1.000000,1.000000,1.000000

[PD80_03_Shadows_Midtones_Highlights.fx]
blendcolor_h=1.000000,1.000000,1.000000
blendcolor_m=0.980000,0.588000,0.000000
blendcolor_s=0.000000,0.365000,1.000000
blendmode_h=0
blendmode_m=0
blendmode_s=0
brightness_h=0.000000
brightness_m=0.000000
brightness_s=0.000000
contrast_h=0.000000
contrast_m=0.000000
contrast_s=0.000000
dither_strength=2.000000
enable_dither=1
exposure_h=0.000000
exposure_m=0.000000
exposure_s=0.450002
luma_mode=2
opacity_h=0.000000
opacity_m=0.000000
opacity_s=0.000000
saturation_h=0.000000
saturation_m=0.000000
saturation_s=0.000000
separation_mode=0
tint_h=0.000000
tint_m=0.000000
tint_s=0.000000
vibrance_h=0.000000
vibrance_m=0.000000
vibrance_s=0.000000

[PD80_04_BlacknWhite.fx]
bluechannel=-0.600000
bw_mode=13
curve_str=1.500000
cyanchannel=0.000000
dither_strength=1.000000
enable_dither=1
greenchannel=0.600000
magentachannel=-0.200000
redchannel=0.200000
show_clip=0
tinthue=0.083000
tintsat=0.120000
use_tint=0
yellowchannel=0.400000

[PD80_04_Color_Balance.fx]
h_BlueShift=0.000000
h_GreenShift=0.000000
h_RedShift=0.000000
m_BlueShift=0.000000
m_GreenShift=0.000000
m_RedShift=0.000000
preserve_luma=1
separation_mode=0
s_BlueShift=0.000000
s_GreenShift=0.000000
s_RedShift=0.000000

[PD80_04_Color_Gradients.fx]
blendcolor_ds_m=0.000000,0.365000,1.000000
blendcolor_ds_s=0.000000,0.039000,0.588000
blendcolor_ls_m=0.980000,0.588000,0.000000
blendcolor_ls_s=0.000000,0.365000,1.000000
blendmode_ds_m=10
blendmode_ds_s=10
blendmode_ls_m=10
blendmode_ls_s=5
CGdesat=0.000000
dither_strength=1.000000
enable_dither=1
enable_ds=1
finalmix=0.054000
luma_mode=0
maxlevel=0.300000
minlevel=0.125000
opacity_ds_m=1.000000
opacity_ds_s=1.000000
opacity_ls_m=0.300000
opacity_ls_s=0.300000
separation_mode=0

[PD80_04_Color_Isolation.fx]
fxcolorMix=1.000000
hueMid=0.000000
hueRange=0.167000
satLimit=1.000000

[PD80_04_Color_Temperature.fx]
Kelvin=6500
kMix=1.000000
LumPreservation=1.000000

[PD80_04_Contrast_Brightness_Saturation.fx]
brightness=0.000000
brightnessD=0.000000
contrast=0.000000
contrastD=0.000000
depthCurve=1.000000
depthEnd=0.100000
depthStart=0.000000
display_depth=0
dither_strength=1.000000
enable_depth=0
enable_dither=1
exposureD=0.000000
exposureN=0.000000
huemid=0.000000
huerange=0.167000
saturation=0.000000
saturationD=0.000000
sat_a=0.000000
sat_b=0.000000
sat_custom=0.000000
sat_g=0.000000
sat_m=0.000000
sat_p=0.000000
sat_r=0.000000
sat_y=0.000000
tint=0.000000
vibrance=0.000000
vibranceD=0.000000

[PD80_04_Magical_Rectangle.fx]
blendmode_1=0
center=0.500000,0.500000
depthpos=0.000000
depth_smoothing=0.002000
dither_strength=0.000000
enable_gradient=0
gradient_curve=0.250000
gradient_type=0
intensity_boost=1.000000
invert_shape=0
mr_brightness=0.000000
mr_contrast=0.000000
mr_exposure=0.000000
mr_hue=0.000000
mr_saturation=0.000000
mr_vibrance=0.000000
opacity=1.000000
reccolor=0.500000,0.500000,0.500000
ret_size_x=0.125000
ret_size_y=0.125000
rotation=45
shape=0
smoothing=0.010000

[PD80_04_Saturation_Limit.fx]
saturation_limit=0.865000

[PD80_04_Selective_Color.fx]
bk_adj_bla=0.000000
bk_adj_cya=0.000000
bk_adj_mag=0.000000
bk_adj_sat=0.000000
bk_adj_vib=0.000000
bk_adj_yel=0.000000
b_adj_bla=0.000000
b_adj_cya=0.000000
b_adj_mag=0.000000
b_adj_sat=0.000000
b_adj_vib=0.000000
b_adj_yel=0.000000
corr_method=1
corr_method2=1
c_adj_bla=0.000000
c_adj_cya=0.000000
c_adj_mag=0.000000
c_adj_sat=0.000000
c_adj_vib=0.000000
c_adj_yel=0.000000
g_adj_bla=0.000000
g_adj_cya=0.000000
g_adj_mag=0.000000
g_adj_sat=0.000000
g_adj_vib=0.000000
g_adj_yel=0.000000
m_adj_bla=0.000000
m_adj_cya=0.000000
m_adj_mag=0.000000
m_adj_sat=0.000000
m_adj_vib=0.000000
m_adj_yel=0.000000
n_adj_bla=0.000000
n_adj_cya=0.000000
n_adj_mag=0.000000
n_adj_sat=0.000000
n_adj_vib=0.000000
n_adj_yel=0.000000
r_adj_bla=0.000000
r_adj_cya=0.000000
r_adj_mag=0.000000
r_adj_sat=0.000000
r_adj_vib=0.000000
r_adj_yel=0.000000
w_adj_bla=0.000000
w_adj_cya=0.000000
w_adj_mag=0.000000
w_adj_sat=0.000000
w_adj_vib=0.000000
w_adj_yel=0.000000
y_adj_bla=0.000000
y_adj_cya=0.000000
y_adj_mag=0.000000
y_adj_sat=0.000000
y_adj_vib=0.000000
y_adj_yel=0.000000

[PD80_04_Selective_Color_v2.fx]
bk_adj_bla=0.000000
bk_adj_cya=0.000000
bk_adj_mag=0.000000
bk_adj_sat=0.000000
bk_adj_yel=0.000000
bm_adj_bla=0.000000
bm_adj_cya=0.000000
bm_adj_lig=0.000000
bm_adj_lig_curve=0.000000
bm_adj_mag=0.000000
bm_adj_sat=0.000000
bm_adj_yel=0.000000
b_adj_bla=0.000000
b_adj_cya=0.000000
b_adj_lig=0.000000
b_adj_lig_curve=0.000000
b_adj_mag=0.000000
b_adj_sat=0.000000
b_adj_yel=0.000000
cb_adj_bla=0.000000
cb_adj_cya=0.000000
cb_adj_lig=0.000000
cb_adj_lig_curve=0.000000
cb_adj_mag=0.000000
cb_adj_sat=0.000000
cb_adj_yel=0.000000
corr_method=1
c_adj_bla=0.000000
c_adj_cya=0.000000
c_adj_lig=0.000000
c_adj_lig_curve=0.000000
c_adj_mag=0.000000
c_adj_sat=0.000000
c_adj_yel=0.000000
gc_adj_bla=0.000000
gc_adj_cya=0.000000
gc_adj_lig=0.000000
gc_adj_lig_curve=0.000000
gc_adj_mag=0.000000
gc_adj_sat=0.000000
gc_adj_yel=0.000000
g_adj_bla=0.000000
g_adj_cya=0.000000
g_adj_lig=0.000000
g_adj_lig_curve=0.000000
g_adj_mag=0.000000
g_adj_sat=0.000000
g_adj_yel=0.000000
mr_adj_bla=0.000000
mr_adj_cya=0.000000
mr_adj_lig=0.000000
mr_adj_lig_curve=0.000000
mr_adj_mag=0.000000
mr_adj_sat=0.000000
mr_adj_yel=0.000000
m_adj_bla=0.000000
m_adj_cya=0.000000
m_adj_lig=0.000000
m_adj_lig_curve=0.000000
m_adj_mag=0.000000
m_adj_sat=0.000000
m_adj_yel=0.000000
n_adj_bla=0.000000
n_adj_cya=0.000000
n_adj_mag=0.000000
n_adj_sat=0.000000
n_adj_yel=0.000000
o_adj_bla=0.000000
o_adj_cya=0.000000
o_adj_lig=0.000000
o_adj_lig_curve=0.000000
o_adj_mag=0.000000
o_adj_sat=-0.000000
o_adj_yel=0.000000
r_adj_bla=0.000000
r_adj_cya=0.000000
r_adj_lig=0.000000
r_adj_lig_curve=0.000000
r_adj_mag=0.000000
r_adj_sat=-0.087000
r_adj_yel=0.000000
w_adj_bla=0.000000
w_adj_cya=0.000000
w_adj_mag=0.000000
w_adj_sat=0.000000
w_adj_yel=0.000000
yg_adj_bla=0.000000
yg_adj_cya=0.000000
yg_adj_lig=0.000000
yg_adj_lig_curve=0.000000
yg_adj_mag=0.000000
yg_adj_sat=0.000000
yg_adj_yel=0.000000
y_adj_bla=0.000000
y_adj_cya=0.000000
y_adj_lig=0.000000
y_adj_lig_curve=0.000000
y_adj_mag=0.000000
y_adj_sat=0.000000
y_adj_yel=0.000000

[PD80_04_Technicolor.fx]
Brightness=1.000000
colorKey=1.000000,1.000000,1.000000
ColorStrength=0.200000,0.200000,0.200000
Cyan2strip=0.000000,0.988000,1.000000
enable3strip=0
Red2strip=1.000000,0.098000,0.000000
Saturation=1.000000
Saturation2=1.500000
Strength=1.000000

[PD80_05_Sharpening.fx]
BlurSigma=0.450000
depthCurve=1.000000
depthEnd=0.100000
depthStart=0.000000
display_depth=0
enableShowEdges=0
enable_depth=0
enable_reverse=0
limiter=0.030000
Sharpening=1.700000
Threshold=0.000000

[PD80_06_Chromatic_Aberration.fx]
CA=-12.000000
CA_curve=1.000000
CA_shapeX=1.000000
CA_shapeY=1.000000
CA_strength=1.000000
CA_type=0
CA_width=1.000000
degrees=135
depthCurve=1.000000
depthEnd=0.100000
depthStart=0.000000
display_depth=0
enable_depth_int=0
enable_depth_width=0
oX=0.000000
oY=0.000000
sampleSTEPS=24
show_CA=0
vignetteColor=0.000000,0.000000,0.000000

[PD80_06_Depth_Slicer.fx]
blendmode_1=0
depthpos=0.015000
depth_far=0.000000
depth_near=0.000000
depth_smoothing=0.005000
hue=0.083000
intensity=0.000000
opacity=1.000000
saturation=0.000000

[PD80_06_Film_Grain.fx]
depthCurve=1.000000
depthEnd=0.100000
depthStart=0.000000
display_depth=0
enable_depth=0
enable_test=0
grainAdjust=1.000000
grainAmount=0.333000
grainColor=1.000000
grainDensity=10.000000
grainIntensity=0.650000
grainIntHigh=1.000000
grainIntLow=1.000000
grainMotion=1
grainOrigColor=1
grainSize=1
use_negnoise=0

[PD80_06_Luma_Fade.fx]
maxlevel=0.300000
minlevel=0.125000
transition_speed=0.500000

[PD80_06_Posterize_Pixelate.fx]
border_str=0.000000
dither_motion=1
dither_strength=1.000000
effect_strength=1.000000
enable_dither=0
number_of_levels=255
pixel_size=1

[PerfectPerspective.fx]
BorderColor=0.027000,0.027000,0.027000,0.784000
BorderCorner=0.062000
BorderVignette=0
DebugPreview=0
FOV=90
K=1.000000
MirrorBorder=1
Offset=0.000000,0.000000
Projection=0
ResScaleScreen=1920
ResScaleVirtual=1920
Type=0
Vertical=1.000000
VerticalScale=0.980000
Vignette=1
Zooming=1.000000

[PiecewiseFilmicTonemap.fx]
FixWhitepoint=1
Gamma=1.000000
ShoulderAngle=0.000000
ShoulderLength=0.500000
ShoulderStrength=0.000000
ToeLength=0.500000
ToeStrength=0.000000

[Pong.fx]
BackgroundColor=0.000000,0.000000,0.000000,1.000000
BallColor=1.000000,0.000000,0.000000,1.000000
LaunchDelay=1.000000
MaxBallSpeed=3000.000000
Opacity=1.000000
PaddleColor=0.000000,0.000000,1.000000,1.000000
ScoreColor=0.000000,1.000000,0.000000,1.000000

[Prism.fx]
Aberration=6
Automatic=1
Curve=1.000000
SampleCount=8

[qUINT_bloom.fx]
BLOOM_ADAPT_EXPOSURE=0.000000
BLOOM_ADAPT_SPEED=2.000000
BLOOM_ADAPT_STRENGTH=0.500000
BLOOM_CURVE=1.500000
BLOOM_INTENSITY=1.200000
BLOOM_LAYER_MULT_1=0.050000
BLOOM_LAYER_MULT_2=0.050000
BLOOM_LAYER_MULT_3=0.050000
BLOOM_LAYER_MULT_4=0.100000
BLOOM_LAYER_MULT_5=0.500000
BLOOM_LAYER_MULT_6=0.010000
BLOOM_LAYER_MULT_7=0.010000
BLOOM_SAT=2.000000
BLOOM_TONEMAP_COMPRESSION=4.000000

[qUINT_deband.fx]
AUTOMATE_BIT_DEPTH=1
BIT_DEPTH=8
DEBAND_MODE=2
SEARCH_RADIUS=0.500000
SKY_ONLY=0

[qUINT_dof.fx]
bADOF_AutofocusEnable=1
fADOF_AutofocusCenter=0.500000,0.500000
fADOF_AutofocusRadius=0.600000
fADOF_AutofocusSpeed=0.100000
fADOF_BokehIntensity=0.300000
fADOF_FarBlurCurve=1.500000
fADOF_HyperFocus=0.100000
fADOF_ManualfocusDepth=0.001000
fADOF_NearBlurCurve=6.000000
fADOF_RenderResolutionMult=0.500000
fADOF_ShapeAnamorphRatio=1.000000
fADOF_ShapeChromaAmount=-0.100000
fADOF_ShapeCurvatureAmount=1.000000
fADOF_ShapeRadius=20.500000
fADOF_ShapeRotation=0.000000
fADOF_SmootheningAmount=4.000000
iADOF_BokehMode=2
iADOF_ShapeChromaMode=2
iADOF_ShapeQuality=5
iADOF_ShapeVertices=6

[qUINT_lightroom.fx]
LIGHTROOM_AQUA_EXPOSURE=0.000000
LIGHTROOM_AQUA_HUESHIFT=0.000000
LIGHTROOM_AQUA_SATURATION=0.000000
LIGHTROOM_BLUE_EXPOSURE=0.000000
LIGHTROOM_BLUE_HUESHIFT=0.000000
LIGHTROOM_BLUE_SATURATION=0.000000
LIGHTROOM_ENABLE_CLIPPING_DISPLAY=0
LIGHTROOM_ENABLE_CURVE_DISPLAY=0
LIGHTROOM_ENABLE_LUT=0
LIGHTROOM_ENABLE_VIGNETTE=0
LIGHTROOM_GLOBAL_BLACKS_CURVE=0.000000
LIGHTROOM_GLOBAL_BLACK_LEVEL=0.000000
LIGHTROOM_GLOBAL_CONTRAST=0.000000
LIGHTROOM_GLOBAL_EXPOSURE=0.000000
LIGHTROOM_GLOBAL_GAMMA=0.000000
LIGHTROOM_GLOBAL_HIGHLIGHTS_CURVE=0.000000
LIGHTROOM_GLOBAL_MIDTONES_CURVE=0.000000
LIGHTROOM_GLOBAL_SATURATION=0.000000
LIGHTROOM_GLOBAL_SHADOWS_CURVE=0.000000
LIGHTROOM_GLOBAL_TEMPERATURE=0.000000
LIGHTROOM_GLOBAL_TINT=0.000000
LIGHTROOM_GLOBAL_VIBRANCE=0.000000
LIGHTROOM_GLOBAL_WHITES_CURVE=0.000000
LIGHTROOM_GLOBAL_WHITE_LEVEL=255.000000
LIGHTROOM_GREEN_EXPOSURE=0.000000
LIGHTROOM_GREEN_HUESHIFT=0.000000
LIGHTROOM_GREEN_SATURATION=0.000000
LIGHTROOM_LUT_SCROLL=0
LIGHTROOM_LUT_TILE_COUNT=16
LIGHTROOM_LUT_TILE_SIZE=16
LIGHTROOM_MAGENTA_EXPOSURE=0.000000
LIGHTROOM_MAGENTA_HUESHIFT=0.000000
LIGHTROOM_MAGENTA_SATURATION=0.000000
LIGHTROOM_ORANGE_EXPOSURE=0.000000
LIGHTROOM_ORANGE_HUESHIFT=0.000000
LIGHTROOM_ORANGE_SATURATION=0.000000
LIGHTROOM_RED_EXPOSURE=0.000000
LIGHTROOM_RED_HUESHIFT=0.000000
LIGHTROOM_RED_SATURATION=0.000000
LIGHTROOM_VIGNETTE_AMOUNT=1.000000
LIGHTROOM_VIGNETTE_BLEND_MODE=1
LIGHTROOM_VIGNETTE_CURVE=1.000000
LIGHTROOM_VIGNETTE_HEIGHT=0.000000
LIGHTROOM_VIGNETTE_RADIUS_INNER=0.000000
LIGHTROOM_VIGNETTE_RADIUS_OUTER=1.000000
LIGHTROOM_VIGNETTE_SHOW_RADII=0
LIGHTROOM_VIGNETTE_WIDTH=0.000000
LIGHTROOM_YELLOW_EXPOSURE=0.000000
LIGHTROOM_YELLOW_HUESHIFT=0.000000
LIGHTROOM_YELLOW_SATURATION=0.000000

[qUINT_mxao.fx]
MXAO_BLEND_TYPE=0
MXAO_DEBUG_VIEW_ENABLE=0
MXAO_FADE_DEPTH_END=0.400000
MXAO_FADE_DEPTH_START=0.050000
MXAO_GLOBAL_RENDER_SCALE=1.000000
MXAO_GLOBAL_SAMPLE_QUALITY_PRESET=2
MXAO_SAMPLE_NORMAL_BIAS=0.200000
MXAO_SAMPLE_RADIUS=2.500000
MXAO_SSAO_AMOUNT=1.000000

[qUINT_sharp.fx]
DEPTH_MASK_ENABLE=1
RMS_MASK_ENABLE=1
SHARPEN_MODE=1
SHARP_STRENGTH=0.169000

[qUINT_ssr.fx]
SSR_ACCEPT_RANGE=2.500000
SSR_FADE_DIST=0.800000
SSR_FIELD_OF_VIEW=50.000000
SSR_FILTER_SIZE=0.500000
SSR_FRESNEL_EXP=5.000000
SSR_JITTER_AMOUNT=0.250000
SSR_RAY_INC=1.600000
SSR_REFLECTION_INTENSITY=1.000000
SSR_RELIEF_AMOUNT=0.050000
SSR_RELIEF_SCALE=0.350000

[RadiantGI.fx]
BM=0
Clamp_Out=0
Debug=0
Deep_Scattering=0.100000
Depth_Map=0
Depth_Map_Adjust=7.500000
Depth_Map_Flip=0
Diffusion_Power=0.500000
GI_Fade=0.000000
GI_LumaPower=0.500000
GI_Power=1.000000
GI_Ray_Length=75.000000
GI_Res=0.700000
HDR_BP=0.500000
Internals=0.250000,0.000000,0.000000,0.500000
NCD=0.125000,0.000000
Offset=0.000000
RadiantGI=0
Reflectivness=1.000000
samples=6.000000
SamplesXY=8
Saturation=1.000000
Scattering=0
SSS_Seek=0.250000
Target_Lighting=0.050000
UseReVeil=0
User_SSS_Luma=0.500000
Wrap=0.500000

[RemoveTint.fx]
bUIUseExcludeColor=0
cUIDebug=0
fUIExcludeColor=1.000000,1.000000,1.000000
fUIExcludeColorStrength=3.000000
fUISpeed=0.100000
fUIStrength=1.000000

[RetroFog.fx]
bAutoColor=0
bCurved=1
bDithering=1
f2Curve=0.000000,1.000000
f3Color=0.000000,0.000000,0.000000
fOpacity=1.000000
fQuantize=255.000000
fStart=0.000000

[RetroTint.fx]
fUIColor=0.100000,0.000000,0.300000
fUIStrength=1.000000

[ReVeil.fx]
Debug=0
DepthMultiplier=-0.075000
TransmissionMultiplier=-0.125000
UseVRS=0
VarianceCutoff=0.150000

[SCurve.fx]
f4Offsets=0.000000,0.000000,0.000000,0.000000
fCurve=1.000000

[Sepia.fx]
Strength=0.580000
Tint=0.550000,0.430000,0.420000

[SimpleGrain.fx]
Coefficient=0
Framerate=12
Intensity=0.400000

[Sketch.fx]
OutlineThreshold=0.010000
PatternColor=1.000000,1.000000,1.000000,0.062745
PatternRange=0.000000,0.500000
Posterization=5.000000
SmoothingScale=1.000000

[SMAA.fx]
CornerRounding=25
DebugOutput=0
DepthEdgeDetectionThreshold=0.010000
EdgeDetectionThreshold=0.100000
EdgeDetectionType=1
MaxSearchSteps=32
MaxSearchStepsDiagonal=16
PredicationEnabled=0
PredicationScale=2.000000
PredicationStrength=0.400000
PredicationThreshold=0.010000

[Smart_Sharp.fx]
B_Grounding=0.000000
CAM_IOB=1
CA_Mask_Boost=0
CA_Removal=0
ClampSharp=0
Debug_View=0
Depth_Map=0
Depth_Map_Adjust=250.000000
Depth_Map_Flip=0
No_Depth_Map=0
Output_Selection=0
Sharpness=0.625000

[Splitscreen.fx]
splitscreen_mode=0

[StageDepthPlus.fx]
Axis=0.000000
BlendM=0
DepthMapY=0
FlipH=0
FlipV=0
Layer_Pos=0.000000,0.000000
Layer_Scale=1.001000,1.001000
Stage_depth=0.970000
Stage_Opacity=1.000000
UseMask=0

[SunsetFilter.fx]
Axis=-7
ColorA=1.000000,0.000000,0.000000
ColorB=0.000000,0.000000,0.000000
Flip=0
Offset=0.000000
Scale=1.000000

[SuperDepth3D.fx]
Auto_Balance_Ex=0
Auto_Depth_Adjust=0.100000
Cursor_Lock=0
Cursor_SC=1,0
Cursor_Type=0
Custom_Sidebars=1
Depth_Detection=0
Depth_Edge_Mask=0.000000
Depth_Map=0
Depth_Map_Adjust=7.500000
Depth_Map_Flip=0
Depth_Map_View=0
Divergence=25.000000
Eye_Fade_Reduction_n_Power=0,0,0
Eye_Swap=0
FPSDFIO=0
Interlace_Anaglyph_Calibrate=0.500000,1.000000,0.500000
Offset=0.000000
Performance_Mode=0
Perspective=0
Scaling_Support=0
Stereoscopic_Mode=0
View_Mode=0
Weapon_Adjust=0.000000,0.000000,0.000000
Weapon_ZPD_Boundary=0.000000
WP=0
WZPD_and_WND=0.030000,0.000000,0.000000
ZPD_Boundary=0
ZPD_Boundary_n_Fade=0.500000,0.250000
ZPD_Separation=0.025000,0.000000

[SuperDepth3D_VR+.fx]
Adjust_Vignette=0.000000
Auto_Balance_Ex=0
Auto_Depth_Adjust=0.100000
Barrel_Distortion=0
Blinders=0.000000
Cursor_Lock=0
Cursor_SC=1,0
Cursor_Type=0
Depth_Detection=0
Depth_Edge_Mask=0.000000
Depth_Map=0
Depth_Map_Adjust=7.500000
Depth_Map_Flip=0
Depth_Map_View=0
Divergence=25.000000
Eye_Fade_Reduction_n_Power=0,0,0
FoV=0.000000
FPSDFIO=0
IPD=0
Offset=0.000000
Performance_Mode=0
Polynomial_Colors_K1=0.220000,0.220000,0.220000
Polynomial_Colors_K2=0.240000,0.240000,0.240000
Saturation=0.000000
Sharpen_Power=0.000000
Theater_Mode=0
View_Mode=0
Weapon_Adjust=0.000000,0.000000,0.000000
Weapon_ZPD_Boundary=0.000000
WP=0
WZPD_and_WND=0.030000,0.000000,0.000000
ZPD_Boundary=0
ZPD_Boundary_n_Fade=0.500000,0.250000
ZPD_Separation=0.025000,0.000000

[Swirl.fx]
additiveRender=0
angle=180.000000
animate=0
center_x=0.500000
center_y=0.250000
inverse=0
radius=0.500000
tension=1.000000

[Technicolor.fx]
Power=4.000000
RGBNegativeAmount=0.880000,0.880000,0.880000
Strength=0.400000

[Technicolor2.fx]
Brightness=1.000000
ColorStrength=0.200000,0.200000,0.200000
Saturation=1.000000
Strength=1.000000

[Temporal_AA.fx]
Clamping_Adjust=0.000000
Debug=0
Delta=0
Delta_Power=0.250000
Depth_CutOff=0.000000
Depth_Map=0
Depth_Map_Adjust=250.000000
Depth_Map_Flip=0
Persistence=0.125000
Similarity=0.250000

[TiltShift.fx]
Axis=0
BlurCurve=1.000000
BlurMultiplier=6.000000
BlurSamples=11
Line=0
Offset=0.050000

[TinyPlanet.fx]
center_x=0.500000
center_y=0.250000
offset_x=0.500000
offset_y=0.250000
scale=0.500000
z_rotation=0.500000

[Tonemap.fx]
Bleach=0.000000
Defog=0.000000
Exposure=0.000000
FogColor=0.000000,0.000000,1.000000
Gamma=1.000000
Saturation=0.000000

[TrackingRays.fx]
Curve=3.000000
Delay=1.000000
Intensity=1.000000
MergeTolerance=0.100000
Scale=10.000000
_WipWarn=0

[Trails.fx]
Persistence=0.250000
PS2=0
TQ=0.000000

[UIDetect.fx]
fPixelPosX=100.000000
fPixelPosY=100.000000

[UIMask.fx]
bDisplayMask=0
fMask_Intensity=1.000000
_Help=0

[UIMaskCreator.fx]
Radius=16
ReadyForScreenshot=0
SquareCursor=0

[UnrealLens.fx]
BokehAngle=0.250000
BokehDefinition=0.200000
BokehSize=1.000000
Brightness=0.100000
EdgesMasking=0.300000
Saturation=0.700000
Scale1=0.600000
Scale2=0.200000
Scale3=0.100000
Scale4=0.050000
Scale5=-1.000000
Scale6=-1.000000
Scale7=-1.000000
ShowLens=0
Threshold=0.700000
Tint1=1.000000,1.000000,1.000000,1.000000
Tint2=1.000000,1.000000,1.000000,1.000000
Tint3=1.000000,1.000000,1.000000,1.000000
Tint4=1.000000,1.000000,1.000000,1.000000
Tint5=1.000000,1.000000,1.000000,1.000000
Tint6=1.000000,1.000000,1.000000,0.000000
Tint7=1.000000,1.000000,1.000000,0.000000
Tonemapper=2
_WipWarn=0

[Unsharp.fx]
Amount=1.000000
BlurScale=1.000000

[Vibrance.fx]
Vibrance=0.100000
VibranceRGBBalance=1.000000,1.000000,1.000000

[Vignette.fx]
Amount=-0.555000
Center=0.500000,0.500000
Radius=2.000000
Ratio=1.000000
Slope=2
Type=0

[VirtualResolution.fx]
fResolutionX=1920.000000
fResolutionY=1080.000000
iScaleMode=0

[VRS_Map.fx]
g_VarianceCutoff=0.050000
ShowOverlay=1

[Wave.fx]
additiveRender=0
amplitude=0.000000
angle=180.000000
animate=0
period=0.500000
phase=0.000000
wave_type=1

[WhitepointFixer.fx]
Whitepoint=1.000000
_Help=0

[ZigZag.fx]
additiveRender=0
amplitude=0.000000
angle=180.000000
animate=0
center_x=0.500000
center_y=0.500000
period=0.500000
phase=0.000000
radius=0.000000
tension=1.000000
Con los packs de shaders que ReShade instala por defecto es suficiente para hacer funcionar mi preset.
 
Si no te gusta mi preset, siempre puedes probar el del proyecto "HDR ReShade".

╔═══════════════════╗
CONFIGURACIÓN DE MANDOS
╚═══════════════════╝

Al igual que en la entrada sobre Ico, me voy a centrar en la configuración del mando de PS4 conectado por bluetooth, pero ten encuenta que conectar cualquier otro mando va a ser más sencillo. Dependiendo del tipo de gamepad que tengamos, el esquema es el siguiente:
  • Mando de Xbox 360/One/cualquier otro compatible con XInput: Windows, desde Vista hasta Windows 10, reconocerá perfectamente el mando nada más conectarlo, pero si queremos que la vibración/force feedback funcione en estos juegos antiguos basados en el estándar DirectInput, necesitaremos un pequeño complemento: Force Feedback Driver for XInput by Masahiko Morii (más adelante lo explicaré en detalle). En teoría, XInput Plus también nos serviría para este fin, pero tengo que decir que no lo he probado, así que ni confirmo ni desmiento. Si te animas a probarlo, lo mejor es seguir este tutorial. También nos pueden resultar útiles aplicaciones como Joy2Key para mapear al mando ciertos controles del teclado que, en principio, el juego no deja asignar directamente al mando. Sirve para  hacer creer al juego que el mando es un teclado. (Pro tip: ejecutar cualquier aplicación de mapeo y wrapping de mandos SIEMPRE como administrador)
  • Mando antiguo DirectInput: cualquier mando anterior a la era Xbox 360 seguramente utilice este protocolo. Windows también reconoce sin problemas este tipo de mandos, y lo más seguro es que Mafia lo detecte también sin ningún problema y la vibración funcione perfectamente sin hacer nada extra, pero no lo he podido comprobar ya que, por la situación actual, no puedo acceder a mi colección de mandos, teniendo únicamente ahora mismo conmigo el DualShock 4, un mando original de PSX digital de segunda hornada (el SCPH-1080) con adaptador a USB, y otro mando chinorri digital USB imitación del de SNES, bastante apañado, por cierto.
  • DualShock 4: conectado mediante cable USB o por bluetooth, Windows lo reconoce como mando pero, por algún motivo, el juego no lo detecta. Seguramente sea cosa del soporte nativo de Windows hacia el mando o, mejor dicho, de la ausencia de éste. Pero para eso tenemos aplicaciones como DS4Windows, que nos permite utilizar el mando con todas sus funciones en Windows, ya sea en modo DirectInput o en modo XInput, mapear los botones y muchas cosas más (antiguamente utilizaba InputMapper, pero me parece ortopédico, enrevesado, feo y funciona con un sistema de licencias). Además, para tener vibración en los juegos DirectInput necesitaremos, al igual que para los mandos XInput, Force Feedback Driver for XInput by Masahiko Morii (luego me detendré en esto).
De estas tres opciones, como ya he dicho, me voy a detener en la que concierne al DualShock 4. Lo primero será instalar DS4Windows y su driver. Estos son los pasos a seguir:
  • Originalmente creado por Jays2Kings, el desarrollo quedó abandonado en 2016 con la versión 1.4.52. Por suerte existe un fork activo a día de hoy creado y mantenido por Ryochan7. En su web oficial, si hacemos clic en "Download Now", nos llevará directamente a su repositorio de Github, donde podremos descargar la última versión que, a día de hoy, es la 2.2.15 (por lo visto las últimas versiones piden .NET 5.0 Runtime para asegurar la compatibilidad con "futuras versiones de la aplicación", pero por el momento funcionan bien sin instalarlo). Descargaremos la versión que se ajuste a nuestro sistema operativo (32bit = x86 || 64bit = x64), ya sea en formato 7zip o zip (el que más rabia nos dé, ya que el contenido una vez descomprimido el paquete es idéntico).
  • Una vez descargado, lo descomprimiremos. Se trata de una aplicación portable. A continuación, ejecutaremos el archivo "DS4Windows.exe". Nos dará a elegir dónde queremos guardar los perfiles de configuración que creemos En mi caso, para mantenerlo lo más portable posible, elijo siempre que lo guarde en la propia carpeta del programa:


  • Una vez hecho, nos aparecerá la ventana de instalación del driver, en la que simplemente tenemos que seguir las instrucciones en el orden que nos indica:


Instalado el driver, podemos conectar ya el mando por cable USB o mediante Bluetooth. En ese mismo pantallazo nos da las instrucciones para conectarlo por bluetooth, pero aquí te lo detallo un poco más:
  • Primero, nos aseguraremos de que nuestro equipo dispone de conexión Bluetooth. Si no la tiene, siempre podemos comprar un dongle USB como éste, que es el que yo tengo y funciona perfecto y sin lag:
  • Una vez que lo tengamos conectado y el Bluetooth del sistema encendido, procederemos a emparejar el mando. Para ello, abriremos el panel de control de Windows 10 con el atajo de teclado WIN+I y nos iremos a los ajustes de bluetooth y dispositivos:


  • Una vez allí, pincharemos en "añadir Bluetooth u otros dispositivos", o algo muy parecido a eso, ya que mi sistema operativo está en inglés por razones que no vienen al caso, y no puedo ver cómo lo pone exactamente en español. Nos saldrá esta ventana
  • Antes de intentar añadir nada, vamos a poner el DualShock 4 en modo búsqueda (y, de paso, se desvincula de nuestra consola. Revincularlo es tan sencillo como conectarlo a la PS4 una vez por cable USB, encender la consola desde su propio botón y, cuando esté totalmente cargado el sistema, pulsar el botón "PS" del mando). Para ponerlo en modo búsqueda mantendremos presionados unos segundos los botones "SHARE" y "PS", hasta que la luz LED del mando empiece a parpadear en ráfagas muy rápidas:
  • Es entonces cuando volveremos a la ventana de agregar dispositivos y pincharemos en la primera opción, "Bluetooth", habiéndonos asegurado previamente de que el LED del mando sigue aún soltando ráfagas:
  • Si es el caso, tras unos segundos de búsqueda, aparecerá lo siguiente:
  • Pincharemos en el mando wireless encontrado y automáticamente se instalará, concluyendo con el siguiente mensaje:
  • Ya estaría instalado. Puede ser que en algunas versiones de Windows nos haya pedido una contraseña de emparejamiento Bluetooth. Por defecto, es "0000" sin comillas. A partir de ahora, cada vez que queramos usar el mando por Bluetooth sólo tendremos que pulsar el botón HOME. Entonces, el LED comenzará a parpadear unos segundos y, cuando deje de hacerlo, el mando estará conectado al PC. Hay que tener en cuenta que, por defecto, el mando se desconecta del PC tras unos minutos de inactividad. Si eso ocurre, pulsamos de nuevo el botón PS y listo.
  • Ahora que ya lo tenemos emparejado y conectado a nuestro PC, ejecutaremos DS4Windows como administrador. Tras unos instantes, nos debería reconocer el mando y mostrarnos datos como el modelo concreto de mando que tenemos o el nivel de carga de la batería.
  • Si, una vez DS4Windows nos reconozca el mando, vemos que el juego no lo reconoce -cosa que no debería ocurrir si estamos ejecutando DS4Windows como administrador-, iremos al panel de control - Dispositivos e impresoras. Si no sabemos cómo llegar, pulsamos la tecla Windows + R, escribimos "control printers" sin las comillas y pulsamos Intro. Una vez en el sitio, veremos que aparecen dos mandos: uno el que reconoce Windows por defecto, y otro el mando virtual de 360/One que DS4Windows ha creado. Clic con el botón derecho del ratón sobre cada uno de los iconos, elegimos la primera opción de arriba y lo dejamos configurado según estas capturas:

  • Volviendo a DS4Windows, crearemos un perfil nuevo al que llamaremos, por ejemplo, "Mafia", lo seleccionaremos y pincharemos en "Edit". Una vez en la sección de edición del programa, lo que haremos será dejar todo como viene por defecto, salvo las opciones que voy a decir a continuación: en la pestaña "Axis Config" modifico los apartados "LS" (stick izquierdo) y "RS" (stick derecho) de esta manera:


Es decir, dejo la zona muerta a 0.15 y reduzco la "Anti-dead zone" a cero en ambos sticks para que la respuesta una vez salimos de la zona muerta fijada comience desde cero y no desde donde lo haría si no existiera zona muerta. Esto se aprecia, por ejemplo, montándonos en un vehículo, poniendo la vista de rueda y girando lentamente el stick izquierdo: mientras estemos dentro de la zona muerta del stick, la rueda no girará, estará perfectamente alineada. En cuanto salgamos de la zona muerta, si la "anti-dead zone" es mayor que cero, notaremos cómo la rueda pasa instantáneamente de 0º de giro a un ángulo concreto, sin haber pasado por todos los grados de giro intermedios -aunque de ahí en adelante ya sí se moverá de forma progresiva-. Si la "anti-dead zone" tiene el mismo valor que la "dead zone", el ángulo en el que se colocará la rueda de forma instantánea una vez salgamos de la zona muerta del stick equivaldrá al que obtendríamos con ese mismo grado de giro del stick si la zona muerta fuera 0. Por ello, al reducir la "anti-dead zone" a 0, todo el grado de giro de la rueda se distribuye entre el grado efectivo de nuestro stick que queda una vez descontada la zona muerta; así no tenemos ese salto en el control pero, al mismo tiempo, éste se puede volver demasiado sensible, pues un toque mínimo del stick provocará una respuesta mayor a la esperada. Para compensar esto, modifico la curva de respuesta del stick derecho para que no sea lineal, sino que sea baja en los primeros grados de giro del stick -la cámara/mirilla se mueva muy despacio- de manera que tengamos movimientos cortos y muy precisos en un ángulo generoso alrededor del punto central. Pasado ese ángulo, la respuesta aumenta para que podamos hacer giros rápidos de cámara de manera que no nos pille desprevenidos ningún enemigo. El gráfico sería algo así:


Si te parece un poco exagerado, siempre puedes mover el punto inferior hacia la izquierda para aumentar la respuesta en ángulos de giro del stick cortos, y el punto superior hacia arriba para que la respuesta aumente de forma un poco más lineal hasta dejarlo a tu gusto, pero ten en cuenta que este juego está 100% pensado para apuntar con ratón, y es complicado trasladar la precisión y velocidad del ratón a un stick. Normalmente, cuando tienes una cosa, no tienes la otra. Limitar la respuesta en ángulos de giro del stick bajos-medios garantiza esa precisión a la hora de apuntar en el centro de la pantalla, mientras que aumentarla exponencialmente para ángulos superiores nos asegura una rapidez de movimientos suficiente para hacer frente a todos los retos del juego.

Una última cosa sobre la zona muerta de los sticks: el WidescreenFix incluye, dentro del archivo "Mafia.GenericFix.ini" que se encuentra en Mafia\scripts, un ajuste para cambiar la zona muerta de un controlador analógico. Por defecto, el valor para ambos sticks se sitúa en 10.0 de un mínimo de 0.0 y un máximo de 100.0. Como ya estamos controlando esto desde DS4Windows, dejaremos ambos valores a cero, tal que así:

 
Y todo esto se complementa con un ajuste de la sensibilidad dentro del juego que debería parecerse a éste:

 
No sé si está bugueado o es algún tipo de incompatibilidad, pero cada incremento en las dos primeras barras, por mínimo que sea, tiene un efecto muy evidente. Encuentro en ese control el equilibrio más o menos perfecto entre velocidad y control. Un pixel menos, y el giro de cámara es demasiado lento. Un pixel más, y es demasiado rápido. Varios pixels por encima de ese ajuste, y la cámara se vuelve loca, girando sin control. Cuidado con eso.

╔═══════════════════╗
ESQUEMA DE CONTROL
╚═══════════════════╝

Si optamos por el teclado, el esquema por defecto es bastante adecuado, salvo por algún detalle como el botón de recarga del arma, que bien podemos asignar a la tecla R, y asignar los movimientos a las teclas WASD en vez de a los cursores, quedando todo tal que así:


Si observas la primera captura verás que falta asignar una tecla al modo francotirador. No es que se me haya olvidado. Por defecto es la "S" de "sniper" pero, por un bug introducido en la versión 1.2 del juego -según he leído-, el control que asignemos a esa acción no quedará guardado y tendremos que volver a asignarlo manualmente cada vez que ejecutemos el juego. Por suerte, hace aproximadamente un año y medio, dos tipos -un tal KRBDZSKL y un tal LASTOFASS-, encontraron la solución a este problema: crearon una pequeña utilidad llamada "Mafia Sniper Mode Key Fix.exe" que, colocada en el directorio de instalación y ejecutada (preferiblemente como Administrador), permite parchear el ejecutable del juego para terminar con el mencionado bug:



El archivo viene incluido en la carpeta "Utilidades" (también se puede descargar de aquí). Advertencia: mi antivirus me dio falso positivo y se la cepilló sin avisar, obligándome a descargarla de nuevo. Por eso, le he puesto contraseña al archivo .rar. Si bien parece ser que el mapeo queda guardado una vez salimos del juego, he visto que no es el caso si asignamos el control al botón izquierdo o al derecho del ratón, cambiando a una tecla del teclado de manera aleatoria al salir del juego y volver a entrar. Por lo tanto, he optado por dejar la "S" y asignarla al botón izquierdo del táctil del Dual Shock 4 en la aplicación DS4Windows.
 
La mayoría de las configuraciones de control que he visto de este juego a lo largo de la historia en las que se incluye gamepad, el uso de éste queda limitado a la conducción de vehículos. En mi caso, creo haber conseguido trasladar todos los controles y movimientos al DualShock 4 de una forma bastante intituitiva y satisfactoria. Me he basado un poco en lo que recuerdo del esquema de control de GTA V cuando lo jugué hace años en PS4, y sobre él he ido añadiendo el resto de controles del juego sirviéndome de las capacidades de mapeo del DS4Windows para aquellos controles que, por defecto, no se pueden asignar al mando desde el menú de configuración de control del juego (navegar por los menús) y para un par de acciones especiales (combinación de botones). Estos son los controles tal y como los he configurado (pinchar para ampliar):


Y así quedarían dentro del juego (más información sobre el porqué de poner el control analógico dentro del juego como control "Secundario" y no "Primario", luego):


He dejado fuera del control con mando el uso del embrague, cambio de marchas o reemplazar coche, pero se podrían haber empleado nuevas combinaciones de botones. Lo malo de éstas es que no responden como lo harían si hubieran sido creadas específicamente para el juego, en el sentido de que, al realizar la combinación de botones, no sólo se dispara la acción de la tecla a la que hayamos asignado dicha combinación, sino que también lo hace la acción de cada botón individual, por lo que tenemos que ser muy cuidadosos con los botones que escogemos para una combinación. Imaginemos, por ejemplo, que se nos ocurriera asignar la combinación de botones L2 + PS a la tecla "Z" del teclado (por defecto, bajar marcha). Al ejecutarla nos encontraríamos con que no sólo estaríamos bajando de marcha, sino que además nuestro coche frenaría, pues el freno es la acción que ya teníamos asignada al botón L2. Ignoro si en los ajustes de DS4Windows existe solución a este problema.

Todas estas acciones especiales de las que estamos hablando se encuentran en este apartado de la aplicación:



Otro problema a considerar con el DualShock 4 es el uso del botón PS: una pulsación prolongada (los manuales dicen 10 segundos pero me ha pasado con 5 segundos y menos) del mismo apaga el mando, por lo que hay que tener cuidado con cómo y cuándo se usa.

En cuanto a la acción de mostrar el mapa semitransparente sobreimpreso en pantalla, el comportamiento por defecto del juego es que el mapa sólo se muestre mientras tengamos pulsada la tecla o botón asignado a tal fin. Podría haber asignado esa acción al botón SHARE del mando directamente desde los ajustes de control del propio juego, pero no lo hice así porque, gracias a la versatilidad de DS4Windows, podemos cambiar ese comportamiento y hacer que el botón actúe como una suerte de interruptor, es decir que con una pulsación del botón SHARE el mapa aparece sobreimpresionado en pantalla y no desaparece hasta que vuelvo a pulsar, algo mucho más cómodo y práctico desde mi punto de vista. Esto lo conseguimos activando la casilla "Toggle" en la sección del mapeador de DS4Windows:


Por supuesto, para que nos funcione una vez estemos jugando, la tecla TAB tiene que estar asignada dentro de los ajustes de control del juego a la acción de mostrar mapa.

Por cierto: todos los botones que hayamos mapeado a teclas del teclado con una aplicación externa como DS4Windows, InputMapper, Joy2key, x360ce, etc. son, a todos los efectos para el sistema y para el juego, dichas teclas del teclado: si intentamos asignar uno de esos botones a una acción dentro del menú de ajustes de control del juego, veremos cómo el juego reconoce la tecla, y no el botón. Si lo hemos asignado según el esquema propuesto anteriormente, nos encontraremos con esto: el botón SHARE, aparecerá como TAB, la cruceta aparecerá como los cursores, el botón OPTIONS como ENTER, etc. Creo que se entiende la idea.

Más consideraciones: para evitar que, mientras conducimos, la cruceta actúe también, sin quererlo, como acelerador, freno y giro, deberemos "desmapear" los cursores de sus acciones respectivas desde el menú de ajustes de control del juego. Para eliminar un mapeo o asignación, simplemente colocaremos el puntero del ratón sobre el mapeo que queramos eliminar hasta que veamos cómo éste se subraya en color rojo. Entonces, pulsaremos la tecla Retroceso/Backspace de nuestro teclado, y la casilla quedará en blanco.

En cuanto a los controles para navegar por los menús, recurriremos, de nuevo, a DS4Windows o equivalente para asignar cursores, Intro y Escape a nuestra cruceta, botón X y botón OPTIONS respectivamente. Lo tenemos que hacer de manera externa porque el juego no nos permite mapear nada de eso. Ni siquiera se consideran controles del juego.

Otro detalle a tener en cuenta es que, para que nos funcionen ambos ejes de la cámara, tenemos que mapear el eje X como control principal de la cámara, y el eje Y como secundario (he borrado el resto de controles para que se vea con claridad):


Por último, hay que mencionar varias cosillas más sobre el control:
  • El movimiento del propio personaje a pie es digital, es decir, que no reconoce los distintos grados de input del stick analógico. Sin duda está pensado con el control digital del teclado en mente. Tampoco supone mayor problema, pero hay que tener en cuenta un detalle: a la hora de mapear dichos movimientos al stick izquierdo del mando, aunque da exactamente igual que los mapeemos en la columna "Primario" o "Secundario" a efectos de movimiento y control del personaje, la vibración sólo va a funcionar si mapeamos dichos movimientos (Avanzar, Retroceder, Izquierda, Derecha) en la columna "Secundario". Esto es así porque el juego entiende que sólo los mapeos de dicha columna pertenecen a un controlador distinto al teclado, y probablemente con capacidad de vibración.
  • Sobre el control del vehículo: el control analógico de acelerador y freno puede estar mapeado en la columna "Primario" o "Secundario" indistintamente, pero el control de giro de volante a izquierda y derecha sólo puede estar mapeado en la columna "Secundario" si queremos, de nuevo, tener vibración en el mando, igual que sucedía en el punto anterior. Pero aquí se da otro fenómeno adicional: si el mapeo del giro está en la columna "Primario", además de no haber vribración, el giro completo de la dirección de un extremo al otro es más lento. Sigue siendo analógico, pero no responde a los movimientos extremos del stick rápidamente o de forma casi instantánea como sí lo hace si mapeamos dicho control en la columna "Secundario". Por tanto, en la columna "Primario" el control se comporta como si estuviéramos usando el teclado, pero con recorrido analógico. Es un control distinto, menos nervioso e, incluso, más realista, pero sin vibración queda descartado de entrada. Para comprobar lo que digo, puedes poner la vista de rueda y probar a mapear la dirección del vehículo en una u otra columna, y mover el stick para comprobar cómo responde de manera distinta.
  • Ya que hablamos de vibración, hay que dejar aquí constancia de la incompleta retrocompatibilidad del "nuevo" estándar XInput: si bien es compatible con todos los juegos DirectInput (como el caso de este juego) en cuanto a uso y manejo del control analógico y no tendremos problemas para que éstos reconozcan nuestro mando XInput y podamos usarlo de forma satisfactoria, hay un gran problema que, a día de hoy, sigue sin resolverse: la vibración. Usar un mando XInput en un juego DirectInput es garantía de que la vibración/rumble/force feedback no va a funcionar. De hecho, en juegos como Need for Speed III: Hot Pursuit (1998), las opciones relacionadas con la vibración aparecen directamente oscurecidas en el menú y no se pueden modificar. Esto sucede porque todo juego diseñado para controladores DirectInput reconoce a los mandos XInput como dispositivos analógicos sin capacidad de vibración. Por eso decía que es un estándar con una retrocompatibilidad parcial o incompleta. Si este asunto no levanta ninguna polvareda en redes es porque, por desgracia, a un alto porcentaje de los jugadores, incluso de juegos antiguos de PC, esto les resbala completamente, y es una auténtica lástima. Bueno, a un alto porcentaje, sí, pero no a todos: por suerte existe un tipo japonés, un tal Masahiko Morii, que hace años ideó una solución para habilitar la vibración en el caso que nos ocupa: uso de un controlador XInput en un juego DirectInput. Desde esta web japonesa descargaremos el archivo correspondiente a nuestro sistema operativo. Si tenemos Windows 7 o posterior, descargaremos la versión correspondiente a Windows 7 32 o 64 bits, según nuestro sistema operativo. Yo, por ejemplo, tengo Windows 10 64-bit, por lo que descargaré la versión "xi.win7.x64.en.zip". Una vez descargado el zip, lo descomprimiremos y ejecutaremos el archivo "xi.win7.x64.en.msi". Lo único que hace este ejecutable es crear la carpeta "Force Feedback Driver for XInput" en C:\Archivos de Programa, conteniendo dos carpetas, según el tipo de aplicación que ejecutemos, de 32 o 64 bits, con un archivo "xiffd.dll" en cada una. Y ya estaría. No hay que hacer nada más. Cuando usemos nuestro mando XInput en cualquier juego DirectInput, tendremos la vibración plenamente operativa. Debe de existir una alternativa llamada XInput Plus que no he tenido el placer de probar, pero parece ser que también restablece la vibración. Si la anterior solución no te ha servido, puede que ésta lo haga. Hay un tutorial de configuración de la aplicación aquí.
  • Como último apunte, DS4Windows tiene una opción llamada "Use DInput only" por lo que, a priori, podría poner el mando en ese modo y prescindir del driver japonés, pues la vibración funcionaría por defecto, pero con es opción marcada no he conseguido que el juego reconozca siquiera el mando, a pesar de haber tenido cuidado a la hora de elegirlo en la lista desplegable de los ajustes avanzados del mando en "Dispositivos e impresoras" de Windows, no vaya a ser que fuera el mismo problema que me encontré con el Tomb Raider 2, pero no. Será cosa de DS4Windows. Puede que sólo funcione con el mando conectado por cable, o vaya usted a saber.
Además de taxista, Tommy es imitador y ventrílocuo. Aquí 
podemos verle haciendo su famoso número de Quentin Tarantino.

╔═══════════════════╗
PROCEDIMIENTO PARA LA
RECUPERACIÓN DE LOS
TEMAS MUSICALES DE LA
VERSIÓN RETAIL
╚═══════════════════╝

La edición de GOG/Steam desató la polémica por no incluir en su banda sonora la música licenciada tan característica del juego -no me refiero al score instrumental de Vladimir Šimůnek sino a las canciones de Duke Ellington, Django Reinhardt, etc.-, que en su versión original retail venía encapsulada en dos archivos: "a0.dta" y "ab.dta". Ante la imposibilidad, seguramente, de haber manipulado esos archivos contenedores para eliminar las pistas que corresponden a dicha música sin provocar inestabilidad o errores inesperados en el juego, optaron por extraer, mediante la aplicación "Mafia Data XTractor", todo el contenido de los mismos a dos carpetas: “sounds” y “sounds\MUSIC”. Gracias a que el archivo "rw_data.dll" del directorio principal de instalación ha sido parcheado por GOG/Steam mediante la misma herramienta "Mafia Data XTractor", el juego buscará los archivos que necesita para funcionar dentro de carpetas con nombres específicos, dándoles prioridad antes que a los archivos contenedores originales con extensión .dta. En este caso concreto, el juego buscará los 9.428 archivos de sonidos, diálogos y los 11 archivos musicales contenidos originalmente en "a0.dta", en la carpeta "sounds" mencionada, y los otros 37 archivos musicales contenidos originalmente en "ab.dta", en la carpeta "sounds/MUSIC", por lo que "a0.dta" y "ab.dta" no vienen incluidos, por no ser necesarios:
  • El contenedor "a0.dta", que contiene 9.615 archivos en formato wav de diálogos y efectos de sonido, más otros 11 archivos wav con parte de esos temas musicales de los que no han podido/querido obtener la licencia, ha sido extraído en su totalidad a la carpeta "sounds" y después eliminado, lo que hace un total de 9.626 archivos wav.
  • El contenedor "ab.dta", que contiene 37 archivos musicales en formato ogg de los cuales 17 contienen el resto de la música de la que no han podido/querido obtener la licencia,  ha sido volcado a la carpeta "sounds\MUSIC" y posteriormente eliminado.
Los 28 archivos con la música problemática han sido alterados para dejarlos en total silencio. Éste es el listado de los 28, copiado de este enlace de pastebin (https://pastebin.com/cm489NEb):
  • 11 archivos en la carpeta "sounds":
03_music.wav 
10_music.wav 
10_musicin.wav 
12_radio.wav 
13b_music.wav 
14_Coucou.wav 
18_radio.wav 
s_music1.wav 
s_music2.wav 
s_music3.wav 
s_music5.wav
  • 17 archivos con extensión .ogg en la carpeta "sounds/music" (las míticas canciones que ambientan los distintos barrios de Lost Heaven), del total de 37 que contiene dicha carpeta:
12_scene music.ogg 
city_music_01.ogg 
city_music_02.ogg 
city_music_03.ogg 
city_music_04.ogg 
city_music_05.ogg 
city_music_06.ogg 
city_music_07.ogg 
city_music_08.ogg 
city_music_09.ogg 
city_music_10.ogg 
city_music_11.ogg 
city_music_12.ogg 
city_music_13.ogg 
city_music_15.ogg 
Lake of Fire.ogg 
mise02-ulicka.ogg
Para recuperarlos, tenemos dos opciones:
  1. Opción 1 (recomendada): copiar al directorio principal del juego los siguientes 2 archivos de la versión retail:
    • El archivo "a0.dta" correspondiente al idioma en que queramos oír las voces.
    • El archivo "ab.dta", que es común para todos los idiomas, al contener sólo música.
    • Una vez hecho, eliminamos por completo o renombramos la carpeta "sounds" que allí se encuentra, para forzar al juego a que utilice los archivos que acabamos de copiar y no los archivos wav y ogg de dicha carpeta.
  2. Opción 2 (que no tiene sentido pero la dejo a modo de curiosidad): seguir utilizando los archivos de las carpetas “sounds” y “sounds\MUSIC”, pero sustituyendo los archivos .wav y .ogg silenciados por las versiones con sonido. Para esto, deberemos desempaquetar los archivos "ab.dta" y a0.dta" de la versión retail con la aplicación "Mafia Data Xtractor". Para que el extractor funcione deberemos tener, colocados en la misma carpeta que el archivo "MafiaDataXTractor.exe", tanto los archivos .dta cuyo contenido nos interese extraer, como el archivo "rw_data.dll", el cual podemos tomar prestado el directorio de instalación del juego. Al ejecutar la aplicación, nos advertirá de que el archivo "rw_data.dll" no está parcheado y procederá a parchearlo. Esto lo hace siempre, esté o no parcheado el archivo. Prueba de ello es que, si eliminamos el archivo "rw_data.bak" que crear como respaldo, al volver a ejecutar la aplicación nos aparecerá el mismo mensaje. Bueno, pues una vez seleccionado nuestro archivo "a0.dta" y extraido su contenido, nos encontraremos con una carpeta "sounds" que contiene 9.615 (9.428 en la versión en inglés) + 11 archivos. Tendremos que buscar en ella los 11 archivos relacionados un par de párrafos más atrás (si los reproduces verás que estos sí que contienen música), y llevárnoslos a la carpeta "sounds" del directorio de instalación, sustituyendo los 11 archivos con el mismo nombre por éstos.
 Un último apunte a propósito del Mafia Data Xtractor: si queremos extraer alguno de estos archivos: "a1.dta", "a2.dta" o "aa.dta" con la utilidad Mafia Data Xtractor, el programa nos sugerirá extraer a la vez el archivo "a8.dta", pues contiene parte de los archivos "a1.dta", "a2.dta" y "aa.dta" corregidos y/o actualizados a la versión 1.1. En mi experiencia, haciendo lo que el programa nos sugiere, el proceso se queda congelado una vez ha extraído los archivos originales y está en proceso de extracción del archivo "a8.dat", concretamente cuando va por el archivo "SamOK.bmp". Para evitar esto, extraeremos todos los archivos que queramos salvo "a8.dat", posteriormente extraeremos dicho archivo en otro lugar diferente (llevándonos el ejecutable del extractor, el archivo "rw_data.dll" y el propio archivo "a8.dat" a otra carpeta) y copiaremos las carpetas resultantes de vuelta a nuestra carpeta de instalación, sustituyendo cuando nos lo pida. Este problema me lo he encontrado en Windows 10, sin importar la extensión de la ruta donde está la carpeta de trabajo, ni la extensión del propio nombre de la carpeta o si contiene caracteres especiales, e incluso ejecutando el archivo "MafiaDataXTractor.exe" en modo compatibilidad con Windows XP SP2.

╔═══════════════════╗
CAMBIO DE IDIOMA
DE INGLÉS A ESPAÑOL
O VICEVERSA
╚═══════════════════╝

Es posible que nuestro juego, ya sea en su edición retail o digital, esté en español y lo queramos en inglés, o al revés. Para ello, simplemente copiaremos estos cuatro archivos .dta de la versión escogida (Español o inglés) a la carpeta de instalación del juego, sobrescribiendo los que allí se encuentren. Esto es lo que contienen:
  • Archivo "a0.dta": locuciones y diálogos en el idioma escogido, además de todos los efectos de sonido del juego (y las músicas antes mencionadas). Tanto este archivo como “ab.dta” no vienen en las versiones digitales.
  • Archivo "a6.dta": archivo de texturas para que los textos (subtítulos, nombres de las misiones en las pantallas de carga, etc.) se muestren correctamente, y otras texturas con rótulos y carteles traducidos al idioma escogido. Estos son los archivos que vienen originalmente traducidos al idioma en el que hayamos instalado el juego:
0textura.tga
1int.tga
1stars2.tga
font0_lat.tga
font1_lat.tga
font2_lat.tga
font3_lat.tga
I Prologue.tga
2ltoil.bmp
8exped.bmp
8exped+.bmp
racewrong.bmp
shot584.bmp
shot585.bmp
shot590.bmp
THE END.bmp
        Y si queremos cambiar dichos textos/rótulos y carteles dentro del juego (que no son todos los que         hay, pues hay muchos otros que están sólo en inglés independientemente del idioma escogido en la         instalación) por versiones HD, éstas irán en la carpeta “maps”.
  • Archivo "a8.dta": contiene elementos actualizados a la versión 1.1 que ya estaban presentes en los otros archivos .dta, por lo que hay un archivo "a8.dta" para cada idioma. En este caso, dicho archivo tiene que ser coherente en idioma con los otros tres (a0.dta, a6.dta y aa.dta). Si no lo es, al ejecutar el juego obtendremos un error.  
  • Archivo "aa.dta": menús, subtítulos y textos en el idioma escogido.
Como he dicho hace un momento, el archivo "a0.dta" no viene en la versión de GOG/Steam, pues, aparte de los diálogos y efectos de sonido contenidos en 9.615 archivos .wav (9.428 en la versión en inglés), contiene también otros 11 archivos .wav con música licenciada que ha sido eliminada de dicha versión.

╔═══════════════════╗
LA ODISEA DE LOS MODS
Y LOS FOROS 
CHECORRUSOPOLACOS
╚═══════════════════╝

Existe un elemento que, a priori, debería solventar todos los problemas de un plumazo: un mod definitivo, un mod de mods, un metamod que debería dejar Mafia en un estado totalmente restaurado aunque prístino e inalterado, manteniéndose totalmente fiel al juego que conocimos y jugamos en aquel lejano 2002. Una selección donde sólo los mejores y más fieles tienen cabida. Un mod para atraerlos a todos y atarlos en las tierras imperecederas de ModDB. Bueno, imperecedero si lo comparamos, al menos, con lo inestables y caducos que son los hilos y foros rusos y polacos de donde, supuestamente, han salido todos y cada uno de los mods que lo componen: hoy en día sólo se puede leer el hilo oficial del proyecto desde la copia parcial de archive.org Un mod llamado originalmente "Mafia Remastered", después rebautizado a ""Mafia Community Modpack", cuya última versión conocida es la v2.1. Un pack de más de 3 GB que incluye un práctico instalador en el que podremos elegir lo que instalamos y lo que no, incluyendo wrappers como dgVoodoo y Croshire -el wrapper de ReShade, que también viene incluido con unos cuantos presets a gusto del consumidor-. Todo ello con el dramático tema principal de la banda sonora, conocido por todos, sonando de fondo mientras seleccionamos los mods y se van instalando. Algo que sólo se le ocurriría a un completo genio o a un auténtico chiflado. Y lo bien que luce en estos vídeos:





En resumen: el sueño de todo amante del juego...  ¿o tal vez no? Lo sería si la elección de instalar o no un mod concreto fuera aplicable a todo el contenido del pack, y no lo es por la sencilla razón de que dentro del pack no sólo hay mods individuales, sino también otros packs de mods que, o se instalan completos o no se instalan, pues el instalador no los desglosa en sus respectivos mods individuales.

Así, tenemos, por ejemplo, el caso del pack "High Quality Textures with MipMaps" que contiene, entre otros, el addon "Night neon signs", creado por el usuario SilverFletcher y que añade, como su nombre indica, rótulos nocturnos de neon animados. Este mod no se puede instalar de forma aislada e independiente. ¿Qué pasa, entonces, si quiero dejar el juego totalmente vanilla salvo por el  WidescreenFix y los rótulos con luces de neón? Pues que no puedes. No con este "Mafia Remastered". Y si buscas el mod "Night neon signs" en internet, te encontrarás con un reguero de cadáveres en forma de enlaces rotos, webs caídas, foros rusos y polacos que no cargan... Todo un rosario de infortunios que hacen que descargar dicho mod individualmente sea, a día de hoy, totalmente imposible, a menos que lo hubieras descargado en su momento.

Cualquier mindundi hubiera desistido y hubiera aceptado ese "todo o nada". Y yo, probablemente, también debería haberlo hecho y no haberme complicado la vida, pero necesitaba saber si podía encontrar la manera de obtener ese mod de forma aislada. Y conseguí hacerlo de la siguiente manera:

  •  En primer lugar, una vez descargado el Community ModPack haremos doble clic en el ejecutable, le indicaremos una carpeta cualquiera -el instalador protestará porque no encuentra el juego instalado, pero aun así nos dejará continuar con la instalación- desmarcaremos absolutamente todo salvo el pack "High Quality Textures with MipMaps" y pincharemos en 'Next'. Una vez concluido el proceso, cerramos el instalador y nos vamos a la carpeta en cuestión. Veremos que nos ha generado las carpetas "maps", "missions" y "models".
  • Si echamos un vistazo en la carpeta "maps" filtrando para ver sólo los archivos .bmp y poniendo el modo de vista en miniaturas para que sea más fácil localizarlos, observaremos que hay unas cuantas imágenes de carteles de bares y negocios. Nos fijaremos primero en aquellos archivos que tienen un nombre común seguido de "_XX", donde "XX" son números de una secuencia ordenada de fotogramas. Por ejemplo, tenemos siete archivos que van del "1rek0n_00.bmp" hasta el "1rek0n_06.bmp". Por lo tanto, sabemos que van a ser parte de una animación. Todos esos archivos bmp nos los guardaremos. Ahora, nos fijaremos en cualquier otro cartel con pinta de estar "encendido". Si tenemos dudas de si un cartel de esos forma parte del mod "Night neon signs" o no, bastará con ver si existe un archivo con el mismo nombre en la versión vanilla del juego (habiendo descomprimido previamente el archivo "a6,dta" con la utilidad "MafiaDataXTractor", la cual nos generará una carpeta "maps" con todos los bitmaps del juego. Es ahí donde tenemos que buscar): Mafia no tiene texturas "nocturnas" para los carteles, sino que usa las mismas sea de día o de noche, por lo que, si hay un archivo con el mismo nombre tanto en la carpeta "maps" del mod "High Quality Textures with MipMaps" como en la carpeta "maps" del juego base, significa que es una versión en alta resolución perteneciente al mod general de texturas pero no pertenece específicamente al mod "Night neon signs", pues entiendo que todos los bitmaps de este mod tienen un nombre único diferente a los del juego base, por lo que acabo de explicar. No obstante, los carteles "encendidos" son sólo diseños de luces en alta resolución que se superponen a la textura original, por lo que nos interesa que la textura original sea también de alta resolución. Por eso, nos guardaremos también los carteles "apagados" o diurnos. En total, tendremos esto:
0pomce.bmp
0rek01.bmp
0rek02.bmp
0rek03.bmp
0rek05.bmp
0rek06.bmp
0rek09.bmp
0rek0b.bmp
0rek10.bmp
0rek11.bmp
0rek12.bmp
1BLACK.bmp
1pomce.bmp
1rek01.bmp
1rek02_00.bmp
1rek02_01.bmp
1rek02_02.bmp
1rek02_03.bmp
1rek02_04.bmp
1rek02_05.bmp
1rek03_00.bmp
1rek03_01.bmp
1rek03_02.bmp
1rek05.bmp
1rek06.bmp
1rek09_00.bmp
1rek09_01.bmp
1rek0b.bmp
1rek0n_00.bmp
1rek0n_01.bmp
1rek0n_02.bmp
1rek0n_03.bmp
1rek0n_04.bmp
1rek0n_05.bmp
1rek0n_06.bmp
1rek10_00.bmp
1rek10_01.bmp
1rek10_02.bmp
1rek10_03.bmp
1rek10_04.bmp
1rek10_05.bmp
1rek11.bmp
1rek12_00.bmp
1rek12_01.bmp
1rek12_02.bmp
1rek12_03.bmp
1rek12_04.bmp
1rek12_05.bmp
1rek12_06.bmp
1RIVIERA1.bmp
1RIVIERA2.bmp
2BLACK.bmp
2rek00.bmp
2rek01.bmp
3rek03.bmp
3rek_00.bmp
3rek_01.bmp
3rek_02.bmp
  • Meteremos esos archivos en la carpeta "maps" en el directorio principal del juego (la crearemos si no la teníamos ya). Con esto solo no es suficiente: necesitamos también los archivos que se encargan de coger las imágenes que no vienen por defecto en el juego, superponerlas y alternarlas con una velocidad y orden determinados, sea una imagen o varias. Esta información está en ciertos archivos de la carpeta "models" de nuestro pack "High Quality Textures with MipMaps". Pero, ¿en cuáles exactamente? Porque hay 850... Por suerte, hay una correspondencia entre los nombres de nuestros archivos bmp y los archivos 4DS que tenemos que guardar. En mi caso, lo que hice fue empezar guardando un puñado de ellos: los más obvios como, por ejemplo, "1rek01.4DS" a "1rek12.4DS" (9 archivos). Los colocaremos en la carpeta "models" en el directorio principal del juego  (si no existe, la creamos). Faltan unos cuantos archivos, pero no importa, por lo que voy a comentar en el siguiente punto.
  • Seguimos sin tener todo lo necesario, pues nos falta aún la tercera pata del banco: los archivos de misiones. De nada sirve tener las texturas y la forma y el orden en el que van a aparecer si no le especificamos al juego en qué misiones queremos que los muestre. Y, precisamente, queremos que lo haga en las misiones nocturnas que tengan, al menos, una parte de su desarrollo en las calles de la ciudad. Como no podemos saber eso de antemano, nos vamos a servir de un fiel compañero de viaje: los savegames de otro. En efecto: utilizaremos una partida completada al 100% con un punto de guardado en cada misión, de manera que podamos acceder a todas para así comprobar, una por una, si se desarrolla de noche en la ciudad en algún momento, y una vez tengamos el archivo de misión necesario, si realmente funcionan las luces de neón. Pues bien: descargaremos la partida completa desde aquí. Extraeremos la carpeta "savegame" del archivo "pc-mafia-the-city-of-lost-heaven-savegame.7z" con 7zip o WinRAR y la colocaremos en el directorio principal del juego. Si ya hubiera una, la sobreescribiremos junto con todo lo que contiene, a no ser que se trate de una partida importante para nosotros, en cuyo caso nos haremos copia de la carpeta en algún sitio.
  • Ahora simplemente se trata de ser metódico y armarse de paciencia: iremos cargando una por una todas las misiones, intermedios incluidos y anotaremos cuáles de ellas se desarrollan de noche o al atardecer/anochecer. Una vez tengamos ese dato, iremos a la carpeta que nos falta por mirar de nuestro pack "High Quality Textures with MipMaps", esto es, la carpeta "missions", y copiaremos, por ejemplo, la carpeta correspondiente a la primera misión, "MISE01", en la carpeta "missions" del directorio del juego que, de nuevo, la crearemos si no existiera. Acto seguido, entraremos en el juego y cargaremos la primera misión. Aquí llega el punto crítico: ¿recuerdas cuando he dicho hace un par de puntos que necesitaríamos más archivos 4DS? La buena noticia es que, una vez se está cargando la misión que requiere de ciertos archivos 4DS, el juego nos dará un mensaje de error cuando no encuentre alguno de ellos. Lo malo es que no nos dice de una sola vez todos los archivos que le faltan, sino que, cada vez que le proporcionemos uno que no tenga, nos saldrá un nuevo mensaje de error al cargar la misión, especificando un nuevo nombre de archivo. Deberemos ir suministrándole uno por uno todos los archivos que nos vaya pidiendo hasta que, en un momento dado, ya no dé más mensajes de error. Mensajes que, por cierto, tienen esta pinta:
  • Aunque la extensión del archivo que nos solicita no coincide con las que tenemos, no importa: funcionará igualmente. En este caso concreto, cuando copiemos el archivo "1riviera0.4DS" de la carpeta "missions" del mod a la carpeta "missions" de nuestro juego, al volver al juego y cargar la misma misión, nos dará un nuevo mensaje de error especificandos otro archivo diferente. Ya sabes lo que tienes que hacer. Por cierto: si simplemente aceptas el error y dejas que el nivel termine de cargarse, te puedes encontrar con cosas como ésta:
  • Gracias a que los edificios no se han cargado, podemos descubrir alguno de los trucos de los desarrolladores, como es el hecho de que el modelo de Sam esté detrás de la esquina desde el principio de la secuencia, esperando su turno para salir:
  • Cuando dejen de salir mensajes de error, comprobaremos que,efectivamente, las luces de neón funcionan. Un buen sitio para verlo es en la avenida principal de Central Island, ésa que tiene varios tranvías en la zona central. Si ha funcionado, iremos a por la siguiente misión nocturna que tengamos anotada.
  • Así como la primera misión es bastante breve y sólo se desarrolla de noche, otras misiones están divididas en varias secciones, alguna de las cuales puede tener lugar al atardecer/anochecer/noche por lo que esas misiones tienen varias carpetas asociadas dentro de "missions". Se tratará de copiar una cualquiera de ellas, cargar la parte de la misión que se desarrola de noche y ver qué pasa: si nos da error al cargar y nos pide un archivo, es señal de que hemos copiado la carpeta correcta de la misión. Una vez copiados todos los archivos que nos pida nos aseguraremos, al igual que en la misión 1, de que los neones de la ciudad estén encendidos y animados. Si no funcionan y tampoco nos ha salido ningún error previamente, es señal de que hemos copiado la carpeta equivocada, por lo que la borraremos, copiaremos otra  con el mismo número de misión y volveremos a cargar la partida. Así hasta que veamos cómo las luces funciona. Y así con todas las misiones, y con otros modos como el Viaje Gratis.
  • Al final de todo el proceso, y si lo hemos hecho bien y yo no me he dejado nada, que espero que no, tendremos estos contenidos en las carpetas "missions" y "models" respectivamente:
FREERIDENOC
MISE01
MISE05-MESTO
MISE07B-CHULIGANI
MISE09-KRAJINA
MISE09-MESTO
MISE11-MESTO
MISE14-MESTO
MISE16-MESTO
MISE18-MESTO
1black.4DS
1dixie.4DS
1npompeii.4DS
1rek01.4DS
1rek02.4DS
1rek03.4DS
1rek05.4DS
1rek06.4DS
1rek09.4DS
1rek10.4DS
1rek11.4DS
1rek12.4DS
1riviera0.4DS
china_pran01.4DS
china_pran02.4DS
china_pran03.4DS
china_prop01.4ds
  • Así fue como conseguí identificar todos -creo- los archivos que componen el mod "Night neon signs" de SilverFletcher. Digo "creo" porque hay archivos 4DS con el mismo nombre que algunos de los carteles pertenecientes al mod, supuestamente, pero no los he copiado porque el juego no ha dado ningún tipo de error y, aparentemente, funcionan todos...
 
Tu cara al saber que este juego cumple 20 años el año que viene...
 
╔═══════════════════╗
LISTADO COMPLETO DE
MODS QUE HE UTILIZADO
╚═══════════════════╝

 Básicamente, he utilizado los siguientes elementos:

  • De mi versión retail en 3 CDs: los dos archivos "a0.dt"a y "ab.dta" necesarios para las músicas.
  • El ya archiconocido WidescreenFix de behar con las mejoras de ThirteenAG.
  • Del Mafia Community Modpack v2.1 (remastered mod):
    • Fuentes HD, algunas creadas por mí desde cero y otras que he modificado para la versión en español a partir de la versión en inglés que, a su vez, ha sido modificada por B4rt0 a partir de la versión original "Interface Renovation v1.1" by Maf. En muchos gameplays en español que usan el Community Modpack con fuentes en HD se ve cómo faltan los símbolos de apertura "¿" y "¡", entre otros, la alineación y el espaciado no son totalmente correctos, etc. No me he tropezado con nadie que haya adaptado el juego de caracteres de la versión española a HD, por lo que creo que este blog es el único -o el primer- sitio donde lo encontrarás. Ídem con el elemento que viene a continuación.
    • Interfaz HD modificada por mí (varios archivos .tga) a partir del mod de HUD HD hecho por Tosyk).
    • Menús tamaño adaptado a mayor resolución.
    • Pantallas de carga en HD reescaladas usando IA por TommyBoss (4:3 y 16:9). Este pack incluye, además, los archivos "Papir3.tga" y "Papir5a.tga", que hacen las veces de textura de papel arrugado sobre el que se dibujan los menús del juego. Estos archivos tga tienen, en este pack, una profundidad de color de 32-bit. Curiosamente, una vez en el juego, dicha textura se ve con una paleta bastante limitada, como si la imagen estuviera posterizada. La forma de corregir esto es abrir dichos archivos en el programa de edición de imagen y, simplemente, volver a guardarlos como archivos tga, pero con una profundidad de color de 24-bit en vez de 32. Aparte de esto, también he corregido y refinado los contornos de dichas texturas para que encajen mejor entre sí.
    • Fall pack (árboles otoñales a más resolución).
    • High Quality NPCs: El juego utiliza dos tipos de modelos: detallados para las escenas cinemáticas, y normal para el gameplay. Este modo hace que el juego utilice los modelos detallados todo el tiempo.
    • Patches (car traffic distance, objects draw fix, etc). También se puede descargar aislada la versión 1.2.0 de este Mafia Patcher desde su hilo oficial.
    • Mafia Actually Really Remastered (HQ objects  and textures): he usado el pack oficinal contenido en el Community Modpack y algunas texturas de un pack mayor sin refinar, que se encuentra en el hilo oficial del mod.
    • High Quality Textures with MipMaps (por SilverFletcher y otros): de aquí he seleccionado bastantes texturas, aunque no todas. He intentado no coger ninguna que mostrara marcas ni logotipos reales, pero creo que alguna sin importancia se ha debido de colar.
    • Hi-poly Weapons models: armas recreadas con muy alto nivel de detalle. Lo único que no me gusta de este mod es que, cuando ponemos al personaje a la pared y la cámara se pone en un modo pseudo-primera persona, en el que a veces llegamos a ver las manos y el arma del mismo, con este mod el arma desaparece y parece que estemos disparando con un arma invisible. Es la única pega.
    • Mafia Cars texture pack: texturas en alta resolución para los vehículos. Aquí he hecho una serie de modificaciones: la textura de nuestro taxi (archivo "maps\2bht.bmp"), que resultaba demasiado naranja, la he sustituido por la presente en el mod "High Quality Textures with MipMaps". Las texturas de las llantas y de los mismos coches se pueden usar en los modelados estándar, sin necesidad de copiar el contenido de la carpeta "models" que trae este mod. Solamente por las llantas ya ganan mucho los coches. Y es que las texturas originales de ruedas y llantas son muy, muy ponzoñosas. El mod de ruedas y llantas se llama "Enhanced wheels retexture for Mafia: The City of Lost Heaven", creado por Abradox. Se puede conseguir de manera independiente al Community Modpack desde aquí. Otro problema ha sido que algunas texturas de vehículos, presentes tanto en este mod como en otros como el "High Quality Textures with MipMaps" y el "Mafia Actually Really Remastered", pese a ser idénticas en profundidad de color (24bit), peso y diseño, presentan, precisamente en el mod "Mafia Cars texture pack", un ruido y banding que no se encuentra en los otros packs, como si algunos archivos hubieran sido convertidos a 24bit a partir de un archivo con profundidad de color de 8bit.  He usado la mejor versión del archivo en cada caso, pero en el caso de "2truck.bmp", los problemas de banding mezclado con dithering de Aliexpress eran tan evidentes y la textura se veía tan fea y lo-fi una vez en el juego, que he tenido que eliminar el banding y el ruido con Photoshop. Aparte de lo ya mencionado, los colores del vehículo Thor 810 en sus tres variantes, Cabriolet, Phaeton y Sedane, no se corresponden con la leyenda que figura en la "Enciclopedia de coches". No es que los nombres de los archivos correspondientes estuvieran bailados, sino que han usado colores diferentes y no han modificado luego los textos. Ignoro por qué sucede esto, pues creo haber instalado el mod correctamente. Por ello, y para ser más fiel al juego original, he modificado los colores en los siguientes archivos para hacerlos recuperar los valores originales:
      • Thor 810 Cabriolet: 2Crr.bmp (rojo a naranja) y 2Corw.bmp (verde crema a negro). Estos archivos no existen originalmente en el juego. Son utilizados por los nuevos modelos poligonales de la carpeta "models".
      • Thor 810 Phaeton: 2Coy.bmp (amarillo a naranja). Al igual que los anteriores, este archivo existe porque lo demanda algún archivo de la carpeta "models". Si eliminamos estos bmp sin eliminar los archivos correspondientes de la carpeta "models", el juego no aplicará las texturas originales y tendremos una carrocería totalmente blanca, sin texturas.
      • Thor 810 Sedane: 2Cora.bmp (azul marino a negro).
    • Cutscenes fix: creo que este mod coloca el sombrero a los personajes en las secuencias cinemáticas.
    • Racing mod: recupera un modo de carreras de coches que iba a estar originalmente en el juego pero que, finalmente, se deshabilitó/descartó, aunque sí apareció en las versiones para consolas. Da la sensación de inacabado -la IA de los contrincantes es un poco lamentable y responde a veces de manera errática cuando le hacemos conducir un coche potente y/o de difícil manejo, etc.-, pero tiene su interés y resulta divertido. El mod restaura el acceso a este modo "Carreras" en el menú principal, además de incluir otros archivos necesarios para su funcionamiento. El problema de este modo inacabado es que no es totalmente estable y puede hacer que el juego se cuelgue en los siguientes supuestos (en mi experiencia personal):
      • Tengamos instalado el mod de barriles explosivos y un contrincante que no seamos nosotros reviente uno de ellos. En muchos circuitos esto no pasará, seguramente, pero en otros como el de Little Italy ocurrirá con total seguridad si los coches que llevemos delante llegan antes al primer callejón, donde hay dos barriles explosivos en medio del trazado, que no se molestarán en esquivar.
      • Que el barril lo explotemos nosotros y no tengamos el archivo "barelncol.4DS" en la carpeta "models".
      • Que reventemos una gasolinera, en cuyo caso el juego se congela y se cierra siempre, tengamos o no instalado el mod de barriles explosivos. 
      • Para lo de la gasolinera no he encontrado solución pero, para lo de los barriles, basta con desinstalar el mod de barriles explosivos. Para ello, incluyo tres archivos en una carpeta "Utilidades\Barriles NO explosivos (para modo carreras)\models"que copiaremos a la carpeta "models" del juego: "xbarel 2.4ds", "xbarel 2_c1.4ds" y "xbarel 2_c2.4ds". Veremos que ha funcionado porque ya los barriles no son rojos/oxidados sino amarillos, y esos ya no explotan. No obstante, si seguimos teniendo problemas, borraremos también el archivo "barelncol.4DS" de la carpeta "models" del juego, si es que estuviera dentro.
    • Mafia Countryside Map: nos muestra el mapa con nuestra ubicación cuando estamos en el campo. Ha sido creado expresamente por la comunidad, ya que nunca ha estado disponible en el propio juego. Requiere usar el "Ultimate ASI Loader" 3.4. No funciona con ninguna versión posterior, al menos a día de hoy.
    • Mapa de la ciudad en HD: versión en alta resolución del mapa de toda la vida (archivo "0mapar.bmp" dentro de la carpeta "maps" del directorio principal del juego). Aviso: no funcionará mientras tengamos instalado el Mafia Countryside Map o, lo que es lo mismo, mientras el archivo "libMafiaCountrysideMap2.0.asi" se encuentre en la carpeta "scripts" del directorio principal del juego. Entiendo que es culpa del "Ultimate ASI Loader". Aun así, el mapa por defecto tiene una resolución más que suficiente y se ve bastante bien, por lo que no tener una versión de más calidad me parece un precio más que razonable por poder disponer, a cambio, de acceso al mapa completo del campo cuando estemos fuera de la ciudad.
    • Exploding barrels: en el juego hay 4 tipos de "barriles" (1 Cubos de basura, 2 Barriles con etiqueta de "inflamable", 3 Barriles genéricos de color azulado/grisáceo, 4 Barriles con hoguera dentro). Este mod altera los barriles del tipo 2 que hay repartidos por los escenarios en ciertos lugares como las gasolineras, haciendo que exploten cuando les disparemos o los golpeemos con el coche, causando daños importantes a todo lo que haya alrededor. Sencillo a la par que espectacular, aunque hará que el juego se cuelgue irremediablemente en el modo "Carreras" si un contrincante hace explotar uno solo de ellos.
                    No he incluido otros mods contenidos en el Community Modpack, tales como:
    • Real Car Facing MOD v.1.6.1: equivalentes reales a los coches presentes en el juego, y con un nivel de detalle mucho mayor. El rendimiento puede resentirse cosa mala. Puedes ver de qué va en este hilo. Aquí un vídeo de muestra. Deja muy bonitos los coches, sí, pero puede que no compense. Si quieres, prúebalo.
    • Real car brand name: no me gusta la idea de sustituir las marcas de coches inventadas en el juego por las marcas reales en las que se inspiran.
    • Water Shader mod: añade relieve y reflejos al agua. Lo problé y lo descarté porque el agua, lejos de verse en un tono similar al original o, aunque fuera, azul/verde muy oscuro, propio de un río muy profundo, resulta que se ve totalmente negra. Aunque se ve espectacular con los reflejos -sobre todo de noche-, cambia demasiado la estética original del juego, para mi gusto. Para restablecer el agua "normal" del juego, haremos lo siguiente:
      • Borraremos de la carpeta "maps" todos los archivos que empiezan por "water" -son 400 archivos-, aunque con esto no habremos recuperado todavía el color original del agua en la ciudad ni en el campo, viéndose en ambos casos gris-blanquecina, al faltarle las textura que acabamos de borrar.
      • Borraremos de la carpeta "models" estos dos archivos: "watercity.4ds" y "watercity_r.4ds". Con esto recuperaremos el aspecto normal del agua en la ciudad, pero no en el campo. No hay ningún archivo que podamos borrar de la carpeta "models" que solucione esto. La única solución es borrar todas las carpetas de "missions" correspondientes a misiones donde aparezca el campo con sus ríos y presa como, por ejemplo, las del viaje gratis en el campo ("FREEKRAJINA" y "FREEKRAJINANOC").
  • Mafia Restoration Mod by MadMaxGamer: el que ha hecho este mod sabe lo que hace, pues ha programado una serie de scripts que hacen cosas como buscar automáticamente actualizaciones del WidescreenFix al arrancar el juego. La mayoría de las texturas las ha reescalado con Topaz Gigapixel. También aumenta la densidad de tráfico y peatones, aunque no sé cómo lo hace exactamente, pues no veo ningún archivo dedicado a ello en la carpeta "scripts", y sí archivos en la carpeta principal que no había visto antes. Vamos, que el tal MadMaxGamer se ha montado su propio "remastered mod" custom, con casinos y furcias. Como este mod redunda sobre otros que ya tengo instalados, he aprovechado únicamente unas cuantas texturas reescaladas.
  • Archivo de textos y subtítulos "textdb_sp.def" revisado y corregido por mí.

Aparte de todo esto, hay un montón de texturas, algunas complicadas, otras no tanto, que he reescalado usando Topaz Gigapixel y luego retocado en Photoshop y Paint.net. Algunas de ellas, por cierto, no las he visto reescaladas en ningún mod, como por ejemplo, los abrigos colgados en percheros. Otras han sido directamente reemplazadas por texturas en HD que no tienen nada que que ver con la original, cambiando materiales, colores, etc., como por ejemplo las cajas de cartón, por lo que he preferido utilizar las texturas originales, reescaladas y retocaDas. También, todas las secuencias de vídeo están reescaladas usando la versión para vídeo del Topaz Gigapixel, y luego convertidas al formato Bink Video con Rad Video Tools.

En definitiva, los mods que he seleccionado -aparte del WidescreenFix y el "parche (car traffic distance, objects draw fix, etc)"- afectan poco al rendimiento, en general. Una instalación limpia del juego poniendo únicamente los parches básicos, sin modelos poligonales mejorados, ni texturas, etc., presenta los mismos problemas de rendimiento en los mismos sitios, y con unos fps muy, muy parecidos.

Respecto a los subtítulos en castellano: aunque el doblaje de este juego es bueno, contando como voz principal con Richard Del Olmo, la traducción es nefasta y está plagada de errores muy elementales. Pero la peor parte se la llevan los subtítulos: traducciones más literales y mecánicas que las líneas locutadas, número sonrojante de errores ortográficos, sintácticos, erratas, espacios colocados de manera aleatoria al final de muchas frases, que hacen que no se alineen bien en pantalla y menús, etc. Por eso, me he dedicado a revisar y corregir una por una las más de cinco mil líneas de texto, y a ajustar los subtítulos escrupulosamente al doblaje. Un doblaje que, insisto, sigue teniendo bastantes errores imposibles de subsanar, por razones obvias.
 
Los subtítulos y todos los textos que aparecen en pantalla, incluidos los menús, se encuentran un el archivo "textdb_sp.def", dentro del contenedor "aa.dta", que extraeremos usando la herramienta antes mencionada, MafiaDataXtractor: una vez descargado, y para mayor comodidad, colocar, en una carpeta aparte, el ejecutable del extractor, el archivo "rw_data.dll" y los archivos "aa.dta" y "a8.dta". Al ejecutar el extractor, esté o no ya parcheado el archivo "rw_data.dll", nos pedirá hacerlo, al no encontrar la copia de seguridad que crea cuando lo parchea, "rw_data.bak". Acecptaremos el parcheo y seleccionaremos únicamente el archivo "aa.dta" para extraer, a pesar de que nos indique el archivo "a8.dta" contiene versiones actualizadas de los archivos contenidos en "aa.dta". Esto es para evitar el cuelgue de la aplicación. Una vez descomprimido, nos llevaremos a una nueva carpeta el ejecutable del extractor, el archivo "a8.dta", "rw_data.dll" y "rw_data.bak". Entonces, extraeremos el contenido de "a8.dta" y lo copiaremos tal cual a la anterior carpeta, sustituyendo los archivos que nos indique Windows. 
 
Entre estos archivos se encuentra el que nos interesa: "textdb_sp.def". Si editamos el archivo desde el bloc de notas, nos cargaremos la integridad del mismo y no servirá. Para poder editarlo, necesitamos una nueva utilidad llamada "Mafia .def Editor". Una vez descargado, ejecutamos "MafiaEditor.exe" y abrimos el archivo desde ahí. Una vez modificado a nuestro gusto y guardado, crearemos una carpeta llamada "tables" (que ya existe si has usado mi pack) en el directorio principal del juego, en la cual pegaremos el archivo.



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

Si has llegado hasta aquí, ya se puede decir que tienes moral. Aunque este juego lo merece. Yo, sin más, me despido hasta la próxima ocasión. Espero que el próximo juego me lo ponga un poquito más fácil que éste. ¡Hasta otra!



Comentarios