Páginas

martes, 15 de agosto de 2017

EMULACIÓN ARCADE EN WII: RETROARCH PARTE 2

RETROARCH PARTE 2

Menú de configuración de vídeo. La resolución de pantalla puede dejarse en
"Default" pero entonces todos los juegos serán reescalados
Consideraciones sobre la resolución de los juegos

Dentro de la Configuración---Video y "resolución de pantalla" está la gran ventaja pero a su vez principal problema de Retroarch con los arcades. Vamos por partes.

Retroarch tiene una opción de seleccionar la resolución de salida de pantalla entre 40 resoluciones diferentes, lo que permite elegir la resolución exacta del juego en cuestión que queremos ejecutar. Esto permite proporcionar salida 15 khz a la resolución real del juego sin reescalados a través de la conexión RGB y conseguir que visualmente sean iguales a cómo se verían en una recreativa.


El problema es que no todos los juegos clásicos tienen la misma resolución. Unos 320x224, como por ejemplo los de Neo Geo, otros 380x224 como los de CPS1, 576x224 en placas de Konami.... y así un larga lista de pequeñas variaciones dentro de las posibilidades de la señal de 15 khz.

La cuestión aquí es que si no elegimos la resolución exacta del juego el resultado no va a ser bueno del todo.

Si no te quieres complicar en exceso, en la opción de resolución de pantalla veremos que es posible dejar el valor "DEFAULT" pero si lo dejamos así para todos los juegos vamos a obtener exactamente el mismo resultado visual que en MAMEWII. Esto es debido a que "Default" en definitiva no es más que la resolución 640x480. Puede mejorarse el resultado desactivando el filtro bilineal, basta con poner en OFF la opción "Filtro bilienal por hardware" que se encuentra en el final del menú de configuración de vídeo. Desactivar este filtro elimina gran parte de la borrosidad, pero la falta de fidelidad respecto a lo que se intenta conseguir sigue siendo evidente. Aun así, el resultado ya es bueno, pero lógicamente muy mejorable.
[Si usáis televisor LCD lo mejor es dejar la opción DEFAULT que viene por defecto, ya que pelearos con la resolución de los juegos no va a suponer ninguna mejora en este tipo de televisores modernos].

En el televisor la fidelidad si se elige la resolución adecuada es perfecta
Pero si queremos seleccionar la resolución exacta para obtener fidelidad total en un televisor de tubo o recreativa (algo que se nota muchísimo respecto a dejar la opción "default"), debemos conocer a qué resolución funciona ese juego.

Para conocer la resolución de un juego, si tenemos MAME en PC podemos consultarla. Se clicka el botón derecho sobre el juego en la lista y se vuelve a clickar en  "information".

La otra alternativa es entrar en internet y consultarlo en una de las tantas páginas webs dedicadas a los juegos arcade.

Una vez lo sabemos, basta con seleccionarla en Retroarch. El resultado visual obtenido en el televisor será idéntico a la placa original, a excepción de los casos donde puedan haber errores gráficos por limitaciones de emulación, como es lógico.

Listado de resoluciones disponibles y su uso más habitual
en arcades
Sin embargo, es necesario aplicar un pequeño truco. Muchos juegos tienen resoluciones horizontales que no aparecen en la lista. No existe, por ejemplo, la resolución 320x240 y por tanto no puedes proporcionar una salida de 320x240 porque esta resolución no está disponible. Así de entrada resulta chocante pero es así. Si pruebas una resolución lo más cercana posible, digamos 340x232 el resultado no es malo, pero algo extraño se observa en los scrolls y en la imagen en general. ¿Cómo se soluciona esto?

El truco es sencillo. Hay que duplicar la resolución horizontal. Para los juegos de 320x240 hay que seleccionar la resolución de 640x240. Esto no tiene impacto en la imagen y se ve exactamente igual, principalmente porque lo importante es la resolución vertical de 240 líneas, que se sigue respetando y por tanto las scanlines originales.
Esto se puede repetir en otros casos y hay que hacer lo mismo (ver imagen adjunta).

Aun así podríais encontraros con algún juego donde la resolución es imposible de aplicar. Por ejemplo el juego Ikari Warriors funciona a 288x216. La resolución vertical de 216 es inaplicable. En estos casos habrá que elegir la resolución más cercana posible, en este caso 288x224, que equivale a  576x224 en Retroarch.

Rotación vertical

La rotación no aparece inicialmente en el menú de vídeo del núcleo MAME2000, pese a que es una opción importante.
Para que aparezca primero hay que ir a "Ajustes"--"interfaz de usuario" y poner en ON la opción "Mostrar ajustes avanzados".

Me volví loco al principio porque no podía entender por qué no aparecía esta opción por defecto dada su importancia para los juegos verticales.
La imagen se puede rotar tanto en modo horario como antihorario tanto 90,180 como 270 grados.

Es importante matizar que si lo que queremos es ver el juego verticalmente pero con el televisor en horizontal (bandas negras laterales) hay que configurar también la opción "Índice de proporción de aspecto" y cambiarlo a 3:4.

Más adelante veremos que seleccionar la rotación en el menú es en realidad irrelevante cuando creemos los llamados archivos override.

Guardado de configuraciones y archivos override

Retroarch guarda automáticamente al salir los cambios  que hayamos realizado en el emulador en un archivo llamado "retroarch.cfg" dentro de la carpeta "retroarch" de la tarjeta SD o memoria USB. También se puede guardar manualmente entrando desde el menú principal en "configuration" y pulsando sobre la opción "guardar configuración actual". Si consideramos que hemos metido la pata basta con borrar este archivo con un PC y Retroarch volverá a los valores iniciales.

El problema es que sólo puede guardar una configuración. Si cargamos un juego diferente cuya resolución no coincida con la guardada en esa configuración, habrá que cambiar manualmente la resolución del juego y/o la rotación cada vez. Esto no es nada cómodo.

Al final, retroarch.cfg sólo sirve para guardar las opciones comunes para todos los juegos. No sirve para guardar parámetros de imagen (resolución, rotación etc) excepto cuando TODOS los juegos que se ejecuten sean iguales en este sentido. Pero en MAME 2000 cada juego puede ser diferente.

Opciones Overrides para crear achivos CFG
Para solucionar esto están los archivos "Override". Son archivos CFG que guardan configuraciones personalizadas del núcleo o de cada juego. Cuando ejecutamos un juego y entramos al "menú rápido" con el botón home, aparecen las opciones "Save core overrides" y "Save game overrides".

"Save core overrides" guarda una configuración para el núcleo. Se configura la resolución de salida y otros parámetros, se ejecuta un juego y se pulsa esta opción para crear el override del núcleo. A partir de ese momento todos los juegos que funcionen bajo ese núcleo se ejecutarán igual.

El archivo overrride del núcleo se crea dentro de una carpeta generada por retroarch con el nombre de ese mismo núcleo. En el caso de MAME 2000 sería:

Retroarch/MAME 2000/MAME 2000.cfg

Creación y edición de archivos override para cada juego en MAME2000

Aunque he explicado cómo crear un archivo CFG de núcleo, para MAME2000 no interesa crearlo porque se provoca el mismo problema que con retroarch.cfg, todos los juegos deberían ser iguales para que algo así tenga utilidad. Si los juegos son diferentes entre sí en resoluciones o rotación esto sigue sin servir de nada.

En el caso de MAME 2000 lo que interesa es crear un archivo override CFG para cada juego donde se le diga al emulador la resolución y rotación que debe lanzar para ese juego concreto y dejar el resto de opciones guardadas en la configuración general del emulador (retroarch.cfg).

Los archivos CFG para cada juego es lo primero que va a leer Retroarch al ejecutar la rom y lo que tiene preferencia absoluta por encima de los override de núcleo o de retroarch.cfg.

Si tras cargar un juego, pulsar el botón home, posteriormente pulsamos en "Save game override" se crea un archivo CFG con el nombre de la rom en la carpeta del núcleo. Ese archivo se supone que guarda la configuración específica para ese juego. Si por ejemplo lo hacemos con Final Fight se creará:

Retroarch/MAME 2000/ffight.cfg

Estaría bien si Retroarch creara bien estos archivos, pero no lo hace correctamente. Si reinicias el emulador, ejecutas Final Fight, verás que quizás no lo hace con la resolución que habías seleccionado.
Aunque te esfuerces en poner la resolución correcta, rotes la pantalla si es un juego vertical y le das a la opción de guardar el archivo "save game overrides",  verás que si conectamos la tarjeta SD en un PC y editamos el archivo .cfg con el bloc de notas, éste está vacío o contiene información insuficiente. En ocasiones no son muy útiles. Pero ES IMPORTANTE que creemos alguno la primera vez para que se genere la carpeta y el primer archivo con el que empezar a trabajar.

Hay que editar estos archivos con el bloc de notas en un PC y añadir la información que falta para que al ejecutar la rom el juego se lance con la resolución y orientación correctas. Parece complicado, pero como veremos, al final todo se reduce a crear archivos sencillos con como mucho tres líneas.

He visto archivos CFG de juegos por ahí con texto dentro donde pueden sobrar bastantes cosas e innecesariamente complejos. Vamos a explicar algunas de las órdenes que se pueden incorporar al archivo override pero muchas de ellas se pueden eliminar hasta dejar los archivos en su mínima expresión, pero suficiente para su objetivo.

Por ejemplo en la imagen adjunta podréis ver una posible estructura de archivo CFG para Final Fight (ffight.cfg). El archivo fue creado por el emulador con algunas de las líneas pero ha sido editado añadiendo más información.

Estructura de archivo CFG de un juego concreto
Se puede simplificar bastante la estructura. "custom viewport" es una relación de aspecto personalizada, NO una resolución personalizada. No es lo
mismo. Retroarch añade estas lineas a veces como para especificar la resolución del juego que debe aplicar y no tiene el resultado que se espera. Son lineas útiles para asegurar un encuadre de la imagen pero no para la resolución de salida.

La linea que realmente dice a retroarch la resolución a usar es la última "current_resolution" el número 4 corresponde a 384x224. Tenéis en la lista de resoluciones anterior a qué numero corresponde cada resolución.
Así por ejemplo, si se quiere lanzar el juego a 640x240, esta resolución corresponde al numero 20, por lo que habría que cambiar la linea por:

current_resolution_id = "20"

Por lo tanto la segunda y tercera linea se pueden eliminar con tranquilidad. Nos quedamos supuestamente con esto:

video_refresh_rate = "59.826099"
custom_viewport_x = "7"
custom_viewport_y = "-1"
aspect_ratio_index = "22"
video_smooth = "false"
input_overlay_enable = "false"
current_resolution_id = "4"

"Custom_viewport x" e "y" así como las "width" y "weight" que eliminamos antes, sirven para encuadrar la imagen por si tenemos un descuadre, pero en mi caso en un televisor trinitron y cable RGB, si usaba la resolución exacta del juego la imagen no salía nunca descentrada, pero sí podría ocurriros en vuestro caso.

Si los juegos no os salen bien centrados en la pantalla pero el descuadre es el mismo siempre en todos los juegos nos podemos ahorrar añadirlo a todos los .cfg si lo configuramos en retroarch para que se quede guardado en la configuración general de "retroarch.cfg". Esas órdenes de encuadre equivalen a las opciones "custom aspect ratio X position" y "custom aspect ratio Y position" del menú de vídeo.

En caso de que se tenga que hacer un encuadre específico para determinados juegos entonces sí que es necesario añadir las lineas. En el caso del ejemplo, se desplaza la imagen 7 puntos horizontales hacia la derecha y 1 hacia arriba. Si quisiéramos mover por ejemplo la imagen 7 puntos a la izquierda en vez de a la derecha el valor sería -7 siempre teniendo en cuenta que 0 es el centro. Si quisiéramos bajar la imagen 5 puntos en vez de subirla 1 punto como en el ejemplo, el valor sería 5. En definitiva, esas dos líneas quedarían así:

custom_viewport_x = "-7"
custom_viewport_y = "5"

Si la imagen sale bien centrada siempre y esas dos líneas las pudiéramos eliminar nos quedaríamos con esto:

video_refresh_rate = "59.826099"
aspect_ratio_index = "22"
video_smooth = "false"
input_overlay_enable = "false"
current_resolution_id = "4"

También se podría eliminar el resto de lineas y quedarnos con "current resolution" solamente. La razón es que el resto de parámetros se pueden guardar en retroarch.cfg porque son comunes para todos los juegos y no hace falta especificarlo de nuevo en cada archivo a menos que necesitéis hacerlo por alguna razón.

- Refresh rate no se debe cambiar, el valor es el mismo siempre que viene por defecto por lo que no tiene por qué especificarse en un archivo CFG. Todos los juegos deben correr a 60 hz (59,826 hz reales aprox).

- Aspect ratio index "22" se refiere a una relación de aspecto 4:3 que es la de todos los juegos arcade clásicos, excepto para rotación con bandas laterales (ver seccíón "rotación").

- video_smoth = "false"  se refiere a la desactivación del filtro bilinear. Si estáis usando televisor de tubo debería estar siempre desactivado, y por tanto dejarlo grabado en la configuración general en retroarch.cfg. Tampoco es necesario especificarlo en el .cfg de cada rom. Aun así, para evitar que el filtro se active de nuevo si se ha reinstalado el emulador, dejar esta linea en todos los CFG puede ser interesante para asegurar que nunca se activa.

- Input overlay_enable = "false" se refiere a la desactivación de imágenes superpuestas para su uso con ratones y otros periféricos y para conseguir ciertos efectos,  pero no lo vamos a tratar en este artículo ni tiene utilidad en este caso. Los overlays vienen desactivados por defecto por lo que esta línea es innecesaria.

Consideraciones de imagen en televisores LCD

Como dijimos antes lo mejor en un televisor LCD es dejar la resolución en modo DEFAULT con el filtro bilineal activo o no según nuestra preferencia. Dado que esto es aplicable a todos los juegos no tiene sentido crear archivos override. La razón de dejar el modo en DEFAULT es la de lanzar la resolución lo más alta posible dado que estas pantallas tienen resoluciones elevadas y cuanto más baja sea peor se verá, no tiene sentido lanzar los juegos a las resoluciones originales porque se muestran exageradamente pixelados. A 640x80 sigue pixelando bastante tanto en televisores 1080p como 4K, por lo que disimular la pixelación con el filtro bilineal mejora algo el aspecto general.


En un televisor como este, 4K, se puede jugar de forma
más que aceptable con las limitaciones lógicas de imagen
También sería posible poner los juegos a 16:9 en vez de 4:3 si queremos aprovechar todo el tamaño del televisor panorámico, pero si elegimos esta relación de aspecto los juegos serán estirados y todo se verá más achatado. Mi televisor estiraba la imagen a 16:9 aunque estuviera la consola configurada en 4:3 y también en el propio Retroarch, por lo que para mostrar el modo 4:3 con bandas negras laterales (lo más recomendable) a veces hay que elegir la opción correcta en el propio televisor.

En un televisor LCD puede ser interesante el uso de "filtros de imagen" que se basan en aplicar efectos artificiales de scanlines para simular televisores de tubo y otros tipos de efectos muy variados. Se basan en el uso de Shaders y no vamos a entrar en detalles con ellos. Basta con descargarlos a parte por ejemplo AQUÍ e ir experimentando. Para activarlos se entra en "Ajustes"--"Video"---"Filtro de video", tras lo cual hay que seleccionar el archivo del shader en cuestión.

Rotación

En caso de querer rotar la imagen del juego en sentido horario o antihorario para usarlo en un televisor o recreativa rotado verticalmente, ideal para shumps de esta orientación, hay que añadir al archivo .cfg del juego la linea:

video_rotation = "-1"

el valor es de 1 o -1 en función de si se desea rotación en sentido horario o antihorario. Indispensable de añadir en juegos verticales ya que de lo contrario se usará la opción que haya en retroarch.cfg que puede no corresponder si mezclamos juegos horizontales y verticales y acabar ejecutando por error juegos verticales en modo horizontal o viceversa.

En el caso de que queramos un juego vertical con bandas negras laterales sin rotar el televisor hay que añadir la linea:

aspect_ratio_index = "7"

Que equivale a la relación de aspecto 3:4. En este caso también es necesario cambiar "video_rotation" a un valor de 2 o el juego nos saldrá del revés

Resultado final editando el archivo cfg cuando ejecutamos el juego, en este caso
dodonpachi vertical con bandas negras laterales en televisor horizontal

Consideraciones finales sobre los archivos .cfg (override)

Los archivos creados en un PC NO se deben guardar como texto y debe
realizarse escribiendo el nombre de la rom junto con la extensión CFG.
Los archivos override se pueden crear, por tanto, manualmente en un PC. No es ni siquiera necesario generarlos todos pulsado la opción "save game override" en retroarch. Basta con abrir el bloc de notas, añadir las líneas y guardar el fichero con el nombre de la rom junto con la extensión .cfg. Esto es importante, NO se debe guardar en modo texto, es necesario grabar el archivo escribiendo el nombre y la extensión.
Resumiendo, basta con crear archivos cfg de como mucho 3 o 4 líneas especificando la resolución y la rotación si corresponde para cada rom y opcionalmente añadir una linea para asegurar la desactivación del filtro bilineal. El resto se queda en la configuración general.

Puede ser realmente muy aburrido crear estos archivos para cada juego, por lo que puede resultar un trabajo titánico hacerlo con un romset entero, mi consejo es que lo hagas solo con los juegos que te gusten más en primera instancia e ir creándolos más tarde poco a poco para aquellos que realmente vas a jugar, de lo contrario vas a tener que crear una basta cantidad de archivos de este tipo.

Comentar también que los override de núcleo tampoco se generan de forma correcta en muchos casos, por lo que todo lo comentado con los override para juegos se puede aplicar a un override de núcleo si queremos que todos los juegos bajo dicho núcleo se ejecuten igual. Lógicamente hay que editar el CFG del núcleo una vez creado, por ejemplo "FB Alpha 2012 CPS-2.cfg" en el caso de Final Burn CPS-2 e introducir las lineas que interesan. En estos casos ya no es necesario crear overrides para cada juego.

El núcleo MAME 2003 (MAME078)

Este núcleo no viene por defecto en Retroarch, pero se puede descargar en ESTE ENLACE. Sólo debe usarse para unos pocos juegos en concreto ya que empeora gravemente la compatibilidad para el resto. Este núcleo se basa en el romset 0.78 de MAME pero si os bajáis un romset completo perderéis el tiempo ya que muchísimos juegos no funcionan.

Este núcleo permite hacer funcionar:

- Bucky O'hare
- Wild West cowboys of moo mesa
- Mortal Kombat 1,2 y 3 (los dos primeros sin problemas, el 3 con limitaciones de framerate)
- Cosmo Police Galivan

De los cuales deberéis conseguir las roms de la versión 0.78.

Probablemente funcione algún título más, pero estos son los más relevantes.

LAS LIMITACIONES DE MAME 2000/2003

La emulación como tal nunca es perfecta, en algunos juegos se puede considerar una emulación completa y prácticamente perfecta pero como todo habrá juegos que tendrán errores de todo tipo o ni siquiera funcionarán. En general se podría decir que nos encontraremos las mismas limitaciones que la versión 0.37b5 de PC tuvo en su momento, ya que el núcleo MAME2000 se basa en ella, pero podrían aparecer otras limitaciones propias de la versión de Wii por las discrepancias en el hardware. Definitivamente, con Wii funcionarán menos juegos y más tendencia a que tengan errores.

Algunos juegos relevantes tienen alteraciones en los textos, marcadores, fondos.... este tipo de errores se pueden observar en juegos como Los Simpsons (aunque no afecta al juego en sí), Altered Beast o Starforce por mencionar algunos. ¿Que hacer en estos casos? Esos mismo juegos funcionan correctamente en MAMEWii por eso comentábamos en la primera parte que este emulador, pese a las limitaciones en la salida de imagen, permite ejecutar juegos que nos pueden fallar en Retroarch.
La otra alternativa en buscar esos juegos en versiones para Final Burn (del que hablaremos más tarde).

3 comentarios:

Unknown dijo...

Hola no encuentro manera de correr con la Wii el moonwalker arcade ni con mame ni con retroarch..salvo un rom que andaba mal la imagen...que puede ser? Desde ya muchas gracias.

Unknown dijo...

Al iniciar mame 2000 me corre las room sin problemas, pero en la pantalla en la parte inferior izquierda aparece el cuadto de "frames" con sus numeros y no se como borrar eso de la pantalla, por si alguien sabe

Anónimo dijo...

Gracias por la idea, en 2024 ya funciona la baja resolución el override