Autor Tema: [TUTORIAL] Ordena y estabiliza las IDs de mandos en Windows (Tur-Game Controller  (Leído 1689 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Pegafun

  • VIP
  • *
  • Mensajes: 183
  • Gracias 17
  • Ciudad: Lorca
  • Pais: España
  • Iniciales nick: PGF
Advertisement
ÍNDICE
     1.- INTRODUCCIÓN
     2.- INSTALACIÓN DE TUR-GAME CONTROLLER ORDER
     3.- PROGRAMAR EL INICIO DEL PROGRAMA COMO UNA TAREA
     4.- SCRIPT PARA CARGAR DIFERENTES PERFILES .INI POR SISTEMA/JUEGO
         4.1- DAR PERMISOS DE ADMINISTRADOR A ROCKETLAUNCHER
         4.2- INSTALACIÓN DEL SCRIPT
         4.3- CONFIGURACIÓN DE LA HERRAMIENTA (EDICIÓN Y ESTRUCTURA DEL ARCHIVO .INI)

1.- INTRODUCCIÓN


El gran problema que presentan todas las versiones de Windows con los dispositivos de entrada es que estos se ordenan de una forma caprichosa y arbitraria. Esto se hace a través de unas IDs que asigna Windows, pero cuyo orden y asignación puede cambiar por muchos motivos:
- Que se conecte o desconecte un nuevo dispositivo de juego.
- Una actualización o instalación de nuevo software.
- Que se reinicie el equipo.
- Que haya luna llena... es decir, por cualquier otro motivo completamente arbitrario.

Esto es un gran fastidio, porque muchos programas, juegos y emuladores dependen de las IDs de Windows para ordenar y utilizar los dispositivos de juego.

Existen tres APIs con las que Windows gestiona los dispositivos de entrada:
- RawInput: utilizada por teclados, ratones y otros dispositivos de posicionamiento óptico (como pistolas, punteros, etc.)
- Dinput: es la API más antigua utilizada por dispositivos de juego (mandos, volantes, palancas, joysticks, etc.). Actualmente Microsoft sigue soportando su uso en todas las versiones de Windows, aunque su intención es fomentar el uso de dispositivos con la API Xinput.
- Xinput: es la API más moderna, creada por Microsoft para sus mandos Xbox 360. Aunque el que sea más moderna que Dinput no significa que sea mejor, cada una tiene sus pros y sus contras. Es utilizada por muchos mandos, volantes, palancas y joysticks de reciente fabricación, y hoy en día conviven en el mercado tanto dispositivos de juego Dinput como Xinput.

En el Administrador de Dispositivos de Juego de Windows sólo se muestran los dispositivos Dinput y Xinput, los cuales se ordenan conjuntamente, sin diferenciar si son de un tipo o de otro. Por contra los dispositivos RawInput llevan una ordenación (IDs) diferente, independiente, y no se muestran en el Administrador de Dispositivos de Juego de Windows.

Haciendo uso de la aplicación Tur-Game Controller Order podremos ordenar eficazmente los dispositivos de juego Dinput y Xinput (todos juntos). De esta forma los juegos, emuladores y aplicaciones que dependan de las IDs de Windows se estabilizarán automáticamente. En la práctica los programas y juegos que dependen de las IDs de Windows son todos, aunque tenemos una pequeña excepción con MAME. Tur-Game Controller Order existe desde 2018 para solucionar el problema del cambio arbitrario del orden de los mandos, pero los programadores de MAME, precisamente por ser conscientes de este problema con las IDs de Windows, hace unas 60 versiones (desde la 0.16X, no recuerdo exactamente cual) idearon una función interna (llamada MapDevice) para reordenar las IDs dentro del emulador. Esto significa que, por defecto, MAME utiliza las IDs de Windows, pero también podemos ordenar internamente para dicho emulador los dispositivos de juego, al margen de la ordenación que maneje Windows:


Y ahora es cuando os preguntaréis: si puedo ordenar mis dispositivos de juego con Tur-Game Controller Order para todos mis emuladores y juegos, ¿qué sentido tiene hacerlo también dentro de MAME? Pues que la ventaja de la función MapDevice en MAME es que esta puede ordenar, no sólo los dispositivos Xinput y Dinput, sino también los RawInput. Eso significa que podremos ordenar también nuestras pistolas, Wiimotes y ratones dentro de MAME. Evidentemente si no vamos a jugar con pistolas, Wiimotes y/o ratones nos será suficiente con utilizar Tur-Game Controller Order para todo.

Una vez dicho esto, comencemos con este tutorial.

2.- INSTALACIÓN DE TUR-GAME CONTROLLER ORDER

El primer paso consiste en CONECTAR TODOS LOS DISPOSITIVOS DE JUEGO que vayamos a utilizar en nuestro PC. Una vez realizado este paso podemos comprobar el orden que les ha asignado Windows. Ya os aviso que no tiene por qué coincidir con el orden en el que los hayamos enchufado al PC. Para ello, en el buscador de Windows, escribiremos Configurar dispositivos de juego USB y presionaremos la tecla "Enter". Se nos abrirá la siguiente ventana:


En ella se mostrarán todos los dispositivos de juego y su orden, incluidos los virtuales. Ya podremos cerrar esta ventana presionando "Aceptar".

Para cambiar este orden y administrarlo vamos a descargar el programa Tur-Game Controller Order desde el post de su desarrollador (el enlace al principio de este post) ó desde  el siguiente enlace directo:


Una vez finalizada la descarga descomprimiremos el contenido del archivo en el destino de nuestra elección, ya que no precisa instalación. Yo lo tengo dentro de:

C:\HyperSpin\Utilities\Tur-Game Controller Order 1.5

Nos quedará una carpeta tal y como esta:


Ahora deberemos darle al programa permisos de administrador. Para ello clickaremos con el botón derecho del ratón sobre el archivo Tur-Game_Controller_Order.exe y en el desplegable seleccionaremos "Propiedades":


Esto nos abrirá una nueva ventana llamada Propiedades: Tur-Game_Controller_Order.exe. En ella deberemos activar la casilla "Compatibilidad > Ejecutar este programa como administrador":


Listo. Tras cerrar esta ventana ahora ya sí que podremos ejecutar el programa Tur-Game_Controller_Order.exe. El hacer doble click sobre el ejecutable se nos abrirán dos ventanas, por un lado la ventana de Dispositivos de juego, mostrándonos todos los que tengamos conectados al PC, con su nombre y orden de ID.
La segunda ventana es un mensaje de aviso del propio puritana, avisándonos de que es la primera vez que se ejecuta y de lo que va a hacer:


Al clickar sobre el botón "Aceptar" del programa la ventana desaparecerá, siendo sustituida por una ventana titulada Ready!. En ella se nos mostrarán todos los dispositivos de juego USB detectados y disponibles por el programa, con sus HID:


Al presionar "Aceptar" esta ventana desaparecerá, dando paso a una nueva ventana donde asignar manualmente el valor (entero) en el que queramos que lo ordene Windows. Tan solo hemos de asignar el valor, repitiendo este proceso en las siguientes ventanas, hasta que hayamos asignado un valor entero a todos los dispositivos de juego:





Cuando terminemos, el programa nos mostrará una nueva ventana, con el resultado de nuestras asignaciones:


Tras cerrarla, si nos vamos a la carpeta del programa, veremos que se ha generado un nuevo archivo llamado Settings.ini:


En este archivo se mantiene la asignación que acabamos de realizar (enmarcadas en color verde en la imagen), junto con un par de opciones para el programa (enmarcadas en color rojo):


Para que el programa compruebe periódicamente si ha habido cambios en los dispositivos hay que activar el modo Daemon, cambiando el valor a “DaemonMode=TRUE”. Os aviso que yo he tenido problemas con el valor de “DaemonModeDelay=10”, ya que me ocasionaba a veces, al tener tantos dispositivos conectados, que me desapareciesen dispositivos y que no volvieran a mostrarse.
La solución ha sido subir el valor hasta “DaemonModeDelay=30”. Este valor le dice al programa que compruebe las IDs cada 30 segundos, en lugar de los 10 por defecto.

Código: [Seleccionar]
[Game Ports]
Port1=VID_D209&PID_0511&MI_00
Port2=VID_D209&PID_0512&MI_00
Port3=VID_D209&PID_1601&MI_01
Port4=VID_D209&PID_1602&MI_01

[Daemon Settings]
DaemonMode=TRUE
DaemonModeDelay=30


3.- PROGRAMAR EL INICIO DEL PROGRAMA COMO UNA TAREA

Para hacer que Tur-Game Controller Order se inicie automáticamente al arrancar Windows y quede residente vamos a usar el Programador de tareas de Windows. Para ello haz click con el ratón en el buscador de Windows, escribe "programar tareas" y presiona Enter.



Ahora haz click en Acción y luego en Crear tareas básica.


Ponle un nombre a la nueva tarea básica, por ejemplo "Tur-Game Controller Order", añadde una descripción si lo deseas y pulsa "Siguiente":


En el nuevo menú "Desencadenar" elige Al iniciar sesión para que ese sea el momento en el que se inicie la tarea. Haz click en "Siguiente":


En Acción elige Iniciar un programa y presiona Siguiente.


Ahora deberás especificar la ruta del archivo ejecutable del programa que quieres que inicie con Windows. Para ello debes saber donde se instaló la aplicación, la mayoría están en Archivos de programa, pero si ese no es el caso puedes averiguar la ruta haciendo click derecho sobre el acceso directo a la aplicación y luego en Propiedades. En el menú que aparece mira la ruta donde dice Destino y copia:


Luego solo es cuestión de presionar Siguiente y Finalizar para que tu tarea quede programada:


Nos queda un último paso, pero muy importante, sin el que la tarea puede que no se ejecute al inicio de forma correcta, y es decirle que cuando lo haga sea con los privilegios más altos. Para ello, una vez creada la tarea, la buscaremos en la "Biblioteca del Programador", estará al final del listado:


Haremos doble click con el botón izquierdo del ratón y se nos abrirá la ventana de propiedades de nuestra tarea programada. En ella deberemos asegurarnos que esté marcada la opción "Ejecutar tanto si el usuario inició sesión como si no" así como la pestaña "Ejecutar con los privilegios más altos". Además, en el desplegable de abajo a la derecha, le indicaremos al programador que configure Tur-Game Controller Order para el sistema operativo que tengamos instalado en nuestro ordenador, en mi caso Windows 10:


A partir de ahora, cada vez que reiniciemos el ordenador Tur-Game Controller Order se cargará en memoria y reordenará los dispositivos, escaneando periódicamente las IDs por si se ha producido alguna modificación en el equipo:


4.- SCRIPT PARA CARGAR DIFERENTES PERFILES .INI POR SISTEMA/JUEGO

Llegados a este punto tendremos el programa Tur-Game Controller Order residente en memoria y pendiente de mantener la ordenación de los dispositivos, siempre de acuerdo a lo que tengamos especificado en el archivo Settings.ini. Pero una de las virtudes que tiene este programa es que admite la carga por línea de comandos de diferentes archivos de configuración .INI, si es que necesitamos estar conectando/desconectando diferentes dispositivos de juego que vayamos a utilizar puntualmente y/o queremos cambiar y estabilizar la ordenación de los dispositivos temporales y fijos. Ejemplos serían un Flightstick o un volante que sólo conectemos cuando estemos jugando a juegos concretos, o que tengamos un par de mandos USB de Megadrive que únicamente conectemos cuando juguemos a los juegos de dicho sistema.

Por ello comparto con vosotros un script que automatiza el proceso de carga de diferentes perfiles para cada Sistema y/o juego con Tur-Game Controller Order haciendo uso de la herramienta User Functions de RocketLauncher. Si deseáis ampliar vuestro conocimiento sobre esta función y poder cargar vuestros propios códigos al lanzar/cerrar juegos/sistemas os dejo el enlace directo a su Wiki.

Para crear este script me he basado en el que creó hace unos años el usuario ReTango, originalmente alojado en el foro HyperSpin-Fe, para automatizar la carga de perfiles de configuración del programa UltraMap para el UltraStik 360. Si estáis iteresados en dicho script y/o en conocer cómo funciona un UltraStik 360 os dejo aquí el enlace al tutorial que le dediqué hace ya un tiempo en el foro amigo InsertMoreCoins:


Dicho todo esto paso a explicaros cómo funciona y cómo configurar la herramienta que aquí os presento.

4.1- DAR PERMISOS DE ADMINISTRADOR A ROCKETLAUNCHER

Si aún no lo habíais hecho ha llegado el momento de hacerlo: debéis darle permisos de Administrador al ejecutable RocketLauncher.exe (ojo, no me estoy refiriendo a RocketLauncherUI.exe). Esta herramienta SÓLO FUNCIONA si lo hemos hecho así. Por ello antes de proceder a su instalación y configuración deberemos asegurarnos de que RocketLauncher.exe pueda hacer y deshacer a su antojo.

Deberemos dirigirnos a la ubicación del ejecutable, en la carpeta raíz de RocketLauncher, que en mi caso es "C:\HyperSpin\RocketLauncher\". Pinchamos con el botón derecho sobre el ejecutable y seleccionamos "Propiedades":


Para darle derechos completos de Administrador al programa deberemos hacerlo en dos pestañas de la ventana que se nos abrirá. Lo primero es dirigirnos a la pestaña "Compatibilidad" y activar "Ejecutar este programa como Administrador":


Después nos dirigiremos a la pestaña "Seguridad" y en ella cambiaremos los permisos de todos los usuarios pinchando en el botón "Editar...":


Una vez aquí seleccionaremos, uno a uno, todos los usuarios que aparezcan listados en el recuadro, y activaremos todas las casillas de permisos disponibles:


Como ya he dicho, para TODOS los usuarios y TODAS las casillas activadas:


Cuando terminemos y aceptemos veremos que el programa tendrá control total:


4.2- INSTALACIÓN DEL SCRIPT

* Descárgate el archivo que contiene el script, llamado Tur-Game Controller Order Loader v2.0.zip, desde el siguiente enlace:

TUR-GAME CONTROLLER ORDER LOADER v2.0

Enlace de descarga en MEGA

y descomprime su contenido.

* Copia el archivo Global.ahk a la ubicación "Rocket Launcher\Lib\User Functions". Si no existiese dicha carpeta "User Functions" dentro de "RocketLauncher\Lib", créala.
ADVERTENCIA: Si tienes otras funciones de usuario ya programadas en tu archivo Global.ahk no lo sobrescribas. En ese caso concreto y para no perder tus funciones deberás editarlo y agregar el código provisto en el archivo Global.ahk que te habrás descargado.

* Copia también los archivos Tur-Game Loader.ini y RefreshToolbar.exe a la carpeta "Rocket Launcher\Lib\User Functions". El archivo Tur-Game Loader.ini es imprescindible para que la herramienta funcione, pero el ejecutable RefreshToolbar.exe es opcional y permite al script limpiar el area de notificación de la barra de herramientas de Windows de los iconos fantasmas que se van a generar cada vez que se cargue y cierre Tur-Game_Controller_Order.exe:


* Edita el archivo Tur-Game Loader.ini para activar la herramienta dando el valor "TurGame Active=true". Si asignásemos el valor "false" la herramienta obviaría el resto del contenido de Tur-Game Loader.ini y se inactivaría:


* También podemos especificar la ubicación del ejecutable Tur-Game_Controller_Order.exe en la línea "TurGameExe", si es que no lo hubiésemos colocado en la ubicación por defecto: "C:\HyperSpin\Utilities\Tur-Game Controller Order 1.5\". NOTA IMPORTANTE: No renombrar el ejecutable, ya que dejaría de funcionar el script:


* Crea los archivos de configuración .INI en la carpeta del programa Tur-Game_Controller_Order.exe para los diferentes perfiles de ordenación de tus dispositivos de juego. Esto lo puedes hacer tanto con el propio programa como manualmente. Recuerda que el archivo .INI por defecto para el programa siempre debe llamarse Settings.ini, ya que si éste no existe y ejecutamos Tur-Game_Controller_Order.exe el programa nos pedirá crearlo:


Eso es todo. Ahora ya puedes proceder a editar el archivo de configuración de la herramienta, Tur-Game Loader.ini, para cargar automáticamente los perfiles por juego/sistema:

4.3- CONFIGURACIÓN DE LA HERRAMIENTA (EDICIÓN Y ESTRUCTURA DEL ARCHIVO .INI)

En el archivo Tur-Game Loader.ini, ubicado en la carpeta "Rocket Launcher\Lib\User Functions", está definido un archivo .INI predeterminado global (generalmente el Setings.ini). Este .INI se carga cuando no hay otro archivo .INI especificado para el Sistema o la Rom que se va a lanzar:


En la sección [PerRomSystems] debes introducir Nombre del sistema=true para los sistemas en los que desees tener diferentes archivos .INI para cada ROM. (por ejemplo, MAME=true). Si un sistema está activado en [PerRomSystem], el script buscará el archivo .INI especificado para cada Rom. Si no lo encuentra, buscará el archivo .INI predeterminado del sistema en la sección [Systems]. Y si tampoco lo encuentra, cargará el archivo .INI predeterminado global:


Si por contra el sistema no ha sido activado en la sección [PerRomSystem] el script cargará el archivo.INI predeterminado global.

El sistema "FrontEnd" es el nombre del sistema asignado a la interfaz. Este archivo .INI se cargará cada vez que salgas de una rom:


El sistema "Pause" es el nombre del sistema asignado al menú "Pause" de RocketLauncher. Este archivo .INI se cargará cada vez que entres en el menú "Pause". Al salir de "Pause" el script volverá a cargar el archivo .INI que tenía la Rom:


En la sección [Roms] introduce el nombre del archivo .INI asignado a cada Rom, para todos los [PerRomSystems] (sin comillas y sin la extensión .INI. Por ejemplo invaders=Mandos_Xbox). Si no se especifica una Rom, la secuencia de comandos utilizará el archivo .INI que se proporciona en [Systems] o el valor predeterminado global.
NOTA MUY IMPORTANTE: Si en la sección [Roms] deseásemos crear subsecciones para ordenarlas por el sistema/emulador al que pertenecen tendríamos entonces que antemponer el carácter "#" al inicio de cada una de dichas líneas para que el script no las tenga en cuenta y las ignore, ya que en esta sección el script no está programado para realizar dichas distinciones y sería sólo para nuestro propio conocimiento.

« Última modificación: Diciembre 18, 2022, 11:26:15 am por Pegafun »



Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21739
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Genial compi! Gran tutorial!!!

Desconectado Pegafun

  • VIP
  • *
  • Mensajes: 183
  • Gracias 17
  • Ciudad: Lorca
  • Pais: España
  • Iniciales nick: PGF
Una de las virtudes que tiene el programa Tur-Game Controller Order es que admite la carga por línea de comandos de diferentes archivos de configuración .INI, si es que necesitamos estar conectando/desconectando diferentes dispositivos de juego que vayamos a utilizar puntualmente y/o queremos cambiar y estabilizar la ordenación de los dispositivos temporales y fijos. Ejemplos serían un Flightstick o un volante que sólo conectemos cuando estemos jugando a juegos concretos, o que tengamos un par de mandos USB de Megadrive que únicamente conectemos cuando juguemos a los juegos de dicho sistema.

Por ello he actualizado el tutorial con un nuevo apartado 4 donde comparto con vosotros un script que automatiza el proceso de carga de diferentes perfiles para cada Sistema y/o juego con Tur-Game Controller Order haciendo uso de la herramienta User Functions de RocketLauncher.

 


* Salón Recreativo #55 (27-04-2024 / 26-05-2024)  Autor: beaches Foro: Salón Recreativo FaseBonus 14/05/2024 (22:08)
* MPAGD (Multi Platform Arcade Game Designer)  Autor: Zael Foro: Creación de juegos 14/05/2024 (10:53)
* ¿A qué estáis jugando ahora mismo?  Autor: joselopez Foro: Offtopic 13/05/2024 (23:30)
* [N3DS] Red Viper - Emulando Virtual Boy como Dios manda  Autor: sirdrak Foro: Noticias de emuladores 13/05/2024 (00:53)
* El megapost del ZX Spectrum  Autor: Zael Foro: Offtopic 12/05/2024 (20:30)
* La inteligencia artificial ha llegado a la música  Autor: Zael Foro: Offtopic 12/05/2024 (20:24)
* Info sobre MARP  Autor: empardopo Foro: Records y wolfmame 12/05/2024 (20:09)
* Stop the express  Autor: empardopo Foro: ZX Spectrum 12/05/2024 (20:05)
* Retro 320 - Wizard of wor  Autor: empardopo Foro: Competiciones y concursos 12/05/2024 (20:03)
* Retro Portable Maker ArcadeSpain (RPMA)  Autor: empardopo Foro: Otros programas 12/05/2024 (17:37)
* Recopilatorio Retos: Desde el 1 hasta .....  Autor: montypepa Foro: Competiciones y concursos 05/05/2024 (21:30)
* iojukebox Theme, un JukeBox para Attract-Mode  Autor: gucaza Foro: Themes AM 04/05/2024 (02:47)
* Nuevo miniPc para mi vieja recre y juegos Windows compatibles formato 4:3  Autor: jmpuk Foro: Offtopic 02/05/2024 (23:31)
* Homenaje a Locomalito  Autor: beaches Foro: Otros programas 02/05/2024 (23:03)
* [Recomendación] Cine para los findes en casa (bueno, bonito y barato)  Autor: arquillos Foro: Offtopic 02/05/2024 (09:39)
* [Recomendacion] Series para ver  Autor: jmpuk Foro: Offtopic 01/05/2024 (21:54)
* Etpa8: El Reino Subterráneo  Autor: jmpuk Foro: ZX Spectrum 01/05/2024 (21:49)
* Amiga Games + 1.9.2  Autor: empardopo Foro: Emuladores 01/05/2024 (20:58)
* West Bank para ZX Spectrum  Autor: empardopo Foro: ZX Spectrum 01/05/2024 (20:07)
* Patrocinador para el foro ArcadeSpain  Autor: empardopo Foro: Noticias 29/04/2024 (19:37)
* Aprende a hacerte un PORTABLE de tu juego arcade favorito  Autor: empardopo Foro: Records y wolfmame 29/04/2024 (19:27)
* Screenshot de empardopo  Autor: empardopo Foro: Otros programas 24/04/2024 (19:42)
* Concurso Bytemaniacos 2025  Autor: empardopo Foro: Creación de juegos 23/04/2024 (21:46)
* Van dos y se cae el del medio - Hilo de cachondeo general  Autor: empardopo Foro: Offtopic 21/04/2024 (18:47)

Countdown
Buscaunchollo.click