Bueno, ahí va un mini-tuto 'simple' de cómo modificar un MODULE de RocketLauncher para que haga un poco lo que queramos.
Intención: Automatizar la carga del keymaper VirtualController a través del module en cualquier sistema del RocketLauncher, ya que no tiene soporte para él. Quiero un perfil general para el sistema y perfil único por ROM seleccionables.
Pegas: Este 'puñetero' Keyamaper, que por cierto considero de lo mejor que hay y no sé si discontinuado, está un poco limitado para trastear con él, no permite carga de perfiles cuando está ya cargado, ejecutándose, por lo que hay que cerrarlo a lo bruto, para lo que usaremos el NirCMD. También tiene otra pega, que es que no permite espacios en el nombre del perfil cuando lo lanzamos desde un comando (no sé si esto es un bug)
Lo primero, gracias como siempre a
Pegafun por sus tutos, este el que nos toca repasar:
https://arcadeforever.forumfree.it/?t=75938831Primero, hay que definir dos variables una para cargar perfil del sistema (o no) y otra para el de ROM, también añadimos otra con el camino al VirtualControlle.exe que nos facilitará las cosas para lanzarlo. Modifico el module del sistema Sony Playstation 2 en el que uso el module PSX2 (MVersion := "2.2.1", MCRC := "1E4F5067"). Comenzamos con el archivo PCSX2.ISD, tras ver sus tripas y lo que ocurre en RocketLauncher al configurarlo, añado tras la selección 'AspectRatio' en global del sistema, la variable para carga del perfil de sistema y el camino al VirtualController.exe:
CODE
<KEY name="VirtualControllerSYS" required="false" nullable="true">
<KEYTYPE>Boolean</KEYTYPE>
<DESCRIPTION>Carga Virtual Controller con perfil Sistema, todos los juegos. Requiere NirCMD.</DESCRIPTION>
</KEY>
<KEY name="VirtualPath" required="false" nullable="true">
<KEYTYPE>FolderPath</KEYTYPE>
<FULLROW>true</FULLROW>
<DESCRIPTION>Carpeta del Virtual Controller. Dentro debe estar la carpeta 'Binds' con los perfiles que cargaremos. Ojo!! perfiles con mismo nombre del sistema o ROM, con los espacios sustituidos por '_', para perfil general del sistema completo o perfil para una ROM. El perfil ROM prevalece sobre el de sistema.</DESCRIPTION>
</KEY>
Esto nos aparece luego así al configurar el module:
Así de simple hemos añadido la variable 'VirtualControllerSYS' y 'VirtualPath' que podremos modificar en la configuración del módulo.
Añado segunda modificación en el archivo ISD del perfil, en la sección ROM, la variable para carga del perfil ROM ('VirtualControllerROM'):
CODE
<KEY name="VirtualControllerROM" required="false" nullable="true">
<KEYTYPE>Boolean</KEYTYPE>
<DESCRIPTION>Carga Virtual Controller con perfil ROM. Prevalece sobre el de sistema</DESCRIPTION>
</KEY>
Quedando al configurarlo en la ROM:
Ya tenemos las variables hechas, pasamos a modificar el AHK, de nuevo con un poco de ingenieria inversa, vemos que las variables que hemos creado hay que leerlas al principio del AHK, de un archivo INI, para lo que añado finalmente tras varios intentos:
CODE
;--------------------------------------------------------MOD1----------------------------------------------------------------------------
;Variables de las selecciones nuevas añadidas en el ISD que se leen del PCSX2.INI
VirtualControllerSYS := moduleIni.Read("Settings", "VirtualControllerSYS","false",,1) ;Variable perfil SISTEMA, por defecto false.
VirtualControllerROM := moduleIni.Read(romName . "|Settings", "VirtualControllerROM","false",,1) ;Variable perfil ROM, por defecto false.
VirtualPath := moduleIni.Read("Settings", "VirtualPath",,,1) ; Variable con carpeta del VirtualController.exe.
;----------------------------------------------------------------------------------------------------------------------------------------
Ahora viene el meollo de la cuestión, cómo hacer que el módulo haga lo que queremos con todo esto, segunda modificación en el AHK también al principio, antes de que se cargue el emulador, evidentemente:
CODE
; ---------------------------------------------------------MOD2---------------------------------------------------------------------
; Si activamos la opción VirtualControllerSYS desde el RocketLauncer, cargamos el Virtual Controller con el perfil para el sistema,
; así podemos configurarlo para todos los juegos con un único perfil. Si activamos en la ROM peril ROM, cargamos exclusivo para ROM.
; OJO, VIRTUAL CONTROLLER NO ADMITE ESPACIOS EN LOS NOMBRES DE PERFILES AL LANZARLO. SE SUSTITUYEN LOS ESPACIOS POR EL CARACTER '_'
; TANTO EN ROMS COMO EN SISTEMA, TENERLO EN CUENTA AL CREAR LOS PERFILES EN LA CARPETA 'Binds' DENTRO DEL VIRTUAL CONTROLLER.
; Cerramos tambien primero Virtual Controller por si está lanzado, ya que no admite cambios de perfil estando ejecutado,
; hay que cerrarlo y volver a abrirlo para ello.
; ----------------------------------------------------------------------------------------------------------------------------------
NircmdExe := "Nircmd.exe"
If (VirtualControllerSYS = "true") {
StringReplace, NewBindName, systemName, %A_Space%, _, All ;Sustituye espacios de la variable por '_'
RLLog.Info("Virtual Controller, Nombre Perfil Sistema = " . NewBindName) ;Log para ver el nombre generado
}
;Si activados ambos perfiles, al estar el tratamiento de la ROM detrás, prevalece este sobre el de sistema ya que lo sobreescribe.
If (VirtualControllerROM = "true") {
StringReplace, NewBindName, romName, %A_Space%, _, All ;Sustituye espacios de la variable por '_'
RLLog.Info("Virtual Controller, Nombre Perfil ROM = " . NewBindName) ;Log para ver el nombre generado
}
If (VirtualControllerSYS = "true") or (VirtualControllerROM = "true") {
VirtualExe := "VirtualController.exe"
Run(NircmdExe . " killprocess " . """" . VirtualExe . """")
; Sleep, 200 ; 200ms de pausa, aumentar si aparecen pegas cerrar/abrir el virtual.
Run(VirtualExe . " /loadcontrols " . NewBindName . ".bnd" . " /capture /minimized", VirtualPath,, VirtualPID)
}
Más o menos está ya comentado en el código, lo de los espacios en blanco, ha sido mirar en la ayuda del AutoHotKey y no he tardado ni 5 minutos, hay dos versiones, la 2.0 no funciona, pues la 'vieja' sí lo hace (log para ver lo que nos genera). El 'Sleep', retardo, lo metí por si acaso no se puede cerrar y abrir seguido el Virtual Controller, no he tenido ninguna pega, por eso el punto y coma delante que lo anula.
Finalmente tras el cierre del emulador hay que cerrar también el Virtual Controller, tercera modificación en el AHK:
CODE
; --------------------------------------------MOD3---------------------------------------------------
; Tras cerrar emulador, matamos el proceso del Virtual Controller con el Nricmd, comando enviado:
; Nircmd.exe killprocess "VirtualController.exe" (de ahí tanta comilla, 4 definen 1)
; ---------------------------------------------------------------------------------------------------
Run(NircmdExe . " killprocess " . """" . VirtualExe . """")
Y listo, a mi me funciona perfectamente, pudiendo crear perfil para el sistema o ROM concreta. Lo que me ha parecido más complicado ha sido evitar los espacios en blanco, por ello he dejado los perfiles dentro de la carpeta 'Binds' del virtual Controller, ya que si usamos un camino que tenga espacios en blanco, me da que la cagaremos.
Tampoco he subido los archivos ya hechos, para que si os interesa, lo hagáis y veáis que no es para tanto, sólo tenéis que copiar el código a añadir de aquí y/o modificarlo según vuestras necesidades.
Por cierto, mucho Log para hacer estas cosas, ya que se va un poco a ciegas, activarlo en el global-general settings del RL, y no olvidéis quitarlo luego ya que ralentiza bastante la carga. Adjunto también un par de capturas de logs cargando con perfil de sistema sólo activado, y perfil sistema y ROM, en el que prevalece este último, esos son los nombres sin espacios que se generan y que deben tener los perfiles dentro de la carpeta ´Binds' del Virtual Controller para que funcione su carga.
Edited by Morera - 26/8/2023, 12:35