RG350 FBA mod

Versión de FBA mejorada
La modificación realizada en FBA que se describe en este artículo ya no merece la pena desde que apareció la versión que puede encontrarse aquí y del que se habla en este foro. El artículo se mantiene ya que ilustra el proceso de modificación de un OPK por medio de un script wrapper que puede resolver muchas necesidades.
Descripción del problema¶
FBA permite rotar la pantalla para poder jugar más cómodamente los juegos verticales (modo TATE). De hecho detecta automáticamente este tipo de juegos y los muestra rotados por defecto. El problema es que lo hace hacia la parte izquierda de la consola y al menos en la RG350/M resultaría más cómodo que lo hiciera hacia la derecha donde están los botones en lugar de la cruceta.
Por ejemplo al arrancar 1941 aparece así:

En la versión r19 de FBA están duplicados todos los settings para poder ajustar los juegos verticales de forma independiente:

En concreto en Default Vertical Run Game settings podemos encontrar el parámetro para rotar la pantalla. Allí nos interesa poner el valor -180 en el parámetro Rotate vertical game:

Tras hacerlo, si lanzamos el juego desde el interfaz propio de FBA conseguimos la orientación deseada:

Hasta aquí bien. El problema viene cuando integramos FBA en frontends como SimpleMenu o PyMenu. En esos casos el emulador se lanzará por linea de comando pasando como argumento la ruta de la ROM. Cuando se lanzan así los juegos, FBA no aplica los ajustes que hemos podido hacer en su interfaz propio. Así siempre se van a ver girados hacia la izquierda.
Como en otros artículos, a partir de aquí voy a mostrar detalles técnicos del problema que hay debajo de lo anterior y cómo se ha hecho la modificación del emulador. Si no te interesan y sólo quieres aprovechar la modificación del emulador puedes saltar hasta el apartado Utilización del mod de FBA.
Descripción técnica del problema¶
En el Readme que hay dentro del OPK puede leerse lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
Así pues como vemos, el ejecutable que hay dentro del OPK (fbasdl.dge) está preparado para aceptar parámetros. Aquí podemos detectar dos problemas:
- El emulador sólo tiene un lanzador (fichero
.desktopen el interior del OPK) que es el que sirve para abrir el interfaz propio de FBA. Necesitaríamos el típico lanzador que tienen la mayoría de los emuladores que muestra un explorador de ficheros para seleccionar la ROM que luego se pasa como argumento al ejecutable. - Entre las opciones que vemos en el Readme no parece estar contemplada la que sirve para rotar la pantalla.
Vamos a ocuparnos de estos problemas uno a uno.
1. Nuevo lanzador con explorer¶
Lo primero que hacemos es bajar el OPK. Vamos a partir de éste.
A continuación lo desenlatamos para ver su interior. En Windows creo que se puede utilizar WinRAR o 7Zip (no lo tengo claro). En Linux lo haremos por linea de comando:
1 2 3 4 5 6 7 8 9 10 11 | |
Si miramos lo que hay en el interior del OPK vemos que efectivamente sólo contiene un lanzador:
1 2 3 4 5 6 7 | |
Visualizando el fichero default.gcw0.desktop (es un fichero de texto) el lanzador lo único que hace es ejecutar FBA sin argumentos, es decir el binario fbasdl.dge:
1 2 3 4 5 6 7 8 9 10 | |
Lo primero que haremos es renombrar el fichero para reservar el nombre default.gcw0.desktop para el lanzador que crearemos a continuación. También cambiaremos el parámetro Name por FBA UX para indicar que este lanzador es el que lanza el interfaz (UX = User eXperience) propio de FBA. Así pues terminaremos con un fichero de nombre fba_ux.gcw0.desktop y el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 | |
Ahora creamos un segundo .desktop para ejecutar FBA como un emulador más convencional con selección previa de ROM. Crearemos un fichero de nombre default.gcw0.desktop y el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 | |
En él vemos que el comando a ejecutar tiene previsto el argumento %f donde se insertará el fichero de la ROM seleccionada con el explorador de ficheros.
Una vez hechos estos cambios volvemos a enlatar el OPK. En Linux lo haremos con el siguiente comando:
1 | |
Si sustituimos el OPK original instalado en la consola por el que acabamos de re-ensamblar con el comando anterior, veremos que ahora nos aparecen dos lanzadores en GMenu2X:

El que tiene la etiqueta FBA UX se comportará como el original y el nuevo FBA Explorer mostrará un explorador de ficheros como la mayoría de los emuladores:

Con esto tendríamos resuelto el primer problema dado que ahora launchers como SimpleMenu, PyMenu o EmulationStation podrán integrar este OPK modificado de FBA para ejecutar los juegos.
2. Localizar opción para rotar pantalla¶
El segundo problema podía no haber tenido solución pero hubo suerte. Como veíamos, según el Readme no parecía haber un parámetro que permitiera controlar la rotación de la pantalla por linea de comando. A pesar de ello echando un vistazo al código fuente de FBA encontramos la siguiente estructura en el fichero src/sdl-dingux/main.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Esto parece indicar que hay más opciones sin documentar en el Readme. Así pues sin revisar más a fondo el código, haciendo una prueba incorporando la opción rotate al .desktop de tipo Explorer se comprueba que es efectiva. Concretamente lo que hay que añadir al comando de ejecución es:
1 | |
El valor 2 se obtiene de observar el valor que toma el parámetro FBA_ROTATE en los ficheros que aparecen en /media/data/local/home/.fba/configs y que son los que aplican cuando ejecutamos los juegos desde el interfaz propio de FBA (FBA UX).
Ya sabemos cómo podemos indicar por linea de comando cómo rotar la pantalla. Ahora tenemos un último problema y es que este parámetro sólo nos interesa para los juegos en vertical. Si ponemos este argumento en los juegos horizontales, veremos la pantalla de esta forma:

Una opción sería crear un tercer .desktop con la opción (dejando el que hemos creado antes sin la opción) y utilizar ese lanzador para los juegos verticales pero esto nos obligaría a separar en secciones distintas los juegos verticales de los horizontales en los frontends como SimpleMenu. La solución por la que se ha optado aquí es intercalar un pequeño script que analice si el juego es vertical o no y en función de eso aplique la opción --rotate=2 o no. La forma de averiguar si el juego es vertical será declarándolo en un pequeño fichero de texto en el directorio de las ROMs.
Lo primero que haremos será modificar el default.gcw0.desktop para que en lugar de ejecutar el binario del emulador directamente se ejecute un pequeño script:
1 2 3 4 5 6 7 8 9 10 | |
Finalmente incorporaremos dentro del OPK el script que discrimina los juegos verticales como hemos comentado. Su nombre será v_detector.sh y su contenido el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
No hay que olvidarse de dar permiso de ejecución (+x) al script anterior.
1 | |
Con todos estos cambios, volvemos a empaquetar el OPK como hemos visto antes:
1 | |
Lo instalamos en la consola y a partir de ahora sólo tendremos que incluir el nombre del fichero de la ROM (extensión .zip incluida) en un fichero de nombre vertical_games.txt en el mismo directorio donde se encuentren las ROMs. Por ejemplo algunos de los juegos candidatos a encontrarse en este listado son:
1 2 3 4 5 | |
Utilización del mod de FBA¶
Vamos a dar instrucciones para utilizar el emulador FBA modificado a lo largo de este artículo.
Una versión empaquetada con todas las modificaciones ya hechas puede descargarse de aquí.
Una vez instalado en la consola, veremos que ahora aparecen dos lanzadores (al menos en GMenu2X):

El lanzador FBA UX se comporta como el habitual, es decir muestra el interfaz propio de FBA donde podemos hacer el ajuste de la rotación de la pantalla (y muchos otros) antes de lanzar los juegos. El nuevo FBA Explorer será el que nos permitirá seleccionar la ROM por medio del explorador de archivos de GMenu2X, de la misma forma que hacen la mayoría de los emuladores:

Si queremos que el juego rote la pantalla -180º para que se puedan utilizar los controles de la parte derecha de la pantalla, sólo tendremos que crear un fichero de texto de nombre vertical_games.txt en el mismo directorio donde se encuentren las ROMs, e incorporar a él los nombres de las ROMs que queramos girar, uno por línea y con la extensión .zip incluida. Por ejemplo:
Si todo va bien, al ejecutar uno de estos juegos desde FBA Explorer o desde SimpleMenu veremos lo siguiente y podremos utilizar los controles de la parte derecha de la consola: