Juegos java desde Retropie, La abadía del crimen Extensum

Soporte General para RetroPie
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Bueenooooooooooooooooooo, parece que me acerco,

Finalmente me olvide de AntiMicro y AntiMicroX y volvi al origen de todo, joy2key.

A raíz de un compi que participo en este hilo fui por el camino de que el runcommand.sh llamaba al joy2key.py y empece a tirar a partir de ahí, el caso es que por esa vía no he conseguido sacar nada, porque no se tocar Python, no se tocar ese script ni que debo hacer en él, como no sabía por donde tirar me enfoque por otros caminos.

El caso es que simplemente he visto que por defecto Retropie no tiene instalado joy2key, si, tiene el script joy2key.py, pero yo entiendo que no tiene la aplicación como tal, por ello, me he puesto a ver si podía instalarla y tirar por ahí.

Instalar es sencillo:
apt-get install joy2key

La cosa es que esta aplicación no trae ninguna ventana gráfica para ayudarte a remapear tu gamepad, va todo por comandos y con ficheros de configuración, de ahí que yo creo que es un poco dificil.

Creo que tengo el fichero de configuración correspondiente al mapeo de mi mando, este fichero he visto que se suele llamar "joy2keyrc" (así tal cual, sin extensión), y el contenido al que he llegado para mi caso (si lo hago funcionar ya explicaré como he llegado a esto) es el siguiente:

Código: Seleccionar todo

COMMON
-thresh -32767 32767 -32767 32767

START java
-X
-dev /dev/input/js0
-buttons a Escape Return y l r s t
-axis Left Right Up Down
Ahora lo que hay que hacer es lanzar este fichero de configuración antes de ejecutar el juego, se hace con la siguiente línea:

Código: Seleccionar todo

joy2key -rcfile /opt/retropie/configs/java/joy2keyrc -config java
(la ruta pues donde decidas poner el fichero comentado, yo lo he puesto ahí, y la palabra final "java" corresponde a como identifiques esta configuración en el fichero, que es lo que se pone detras de START).

Y con esto en teoría tendría que funcionar, ahora no soy capaz de probarlo porque no se como hacer para lanzarlo antes de lanzar java, desde el emulators.cfg solo puedo lanzar un comando, he probado a ponerlos seguidos separados de ; pero no funciona, entiendo que porque el primero lanza algo gráfico que todavía no he llegado a ver y espera algún tipo de acción del usuario antes de seguir con el siguiente comando, así que necesito alguna forma de lanzar un "pre script" antes de que se lance el emulador, en ese punto me he quedado hoy.

Seguimos en ello...
Estos usuarios agradecieron al autor ofl666 por el mensaje:
maiquelnais
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Bueno,

Ya he visto algo para lanzar el "pre-script", https://retropie.org.uk/docs/Runcommand/, "runcommand-onstart and runcommand-onend scripts", pero ya para mañana...
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Uf... vaya parto, creo que me voy rendir.

Avance con el tema de los scripts onstart y onend del runcommand, sencillos de crear y de manejar, con un par de líneas pude hacer un if que pregunta si el sistema lanzado es java, si lo es lanza el joy2key, y, en el de finalizar, hace un kill del joy2key, esto funciona bien y como digo ha sido bastante sencillo.

Del joy2key por fin he sabido que el script de python (joy2key.py) se puede invocar desde línea de comandos y pasarle parámetros, vamos que creo que es lo mismo que haberlo instalado como aplicación, de momento hago pruebas con ambos casos pues el formato de los parámetros de entrada es mas fácil de especificar con la aplicación, básicamente en el caso de la aplicación las teclas a mapear las escribes en texto (Escape, Intro...) pero al script le tienes que pasar el código ASCII en Hexadecimal, que no es que sea muy complejo sacarlo pero ya es un extra.

Mi caso actual es que no funciona, pero no se porque no funciona, supongo que por la configuración que le paso, pero al no haber un log pues es complicado saber que pasa, los parámetros en el caso de la aplicación se que están bien porque si pones alguna tecla que no reconoce te da error (lo ejecuto por línea de comandos al margen de Retropie hasta que compruebo que no da errores).

El caso es que es dificil de mapear, se comienza haciendo un:
jstest /dev/input/js0

Eso te permite saber cuales son los axis de tu gamepad, cuantos botones tienes a mapear... pero la salida es muy extraña, mi joystick tiene 5 axis de los cuales 2 no reaccionan a ninguna tecla, y botones al menos hay 6 que igual, lo que si se al hacer esto es que axis corresponden a mi cruceta (que si me la detecta) y que posición ocupan los botones que si detecta (realmente detectar me detecta todos los del mando, la cosa es que el test detecta mas botones de los que físicamente hay), pero pasar esta información a los parámetros del joy2key... no esta muy claro como hacerlo, he hecho ensayo error con 40 formas diferentes y no me funciona ninguna.

El jstest me arroja esto:
# Joystick (YSTEK MICREAL USB Gamepad) has 5 axes (X, Y, Z, Rx, Ry)
# and 14 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, ?, ?).

Y, probando a ir pulsando, he sacado esta información:
Axis0 -> -32767 (aquí da este valor fijo, sin pulsar nada)
Axis1 -> NULL (donde pongo NULL es que no hay botón físico para este control)
Axis2 -> NULL
Axis3 -> Left(-32767) y Right (32767): Cursor izquierdo: 29 (0x1D), Cursor derecho: 28 (0x1C)
Axis4 -> Up(-32767) y Down (32767): Cursor arriba: 30 (0x1E), Cursor abajo: 31 (0x1F)

Button0 -> a:
Button1 -> b
Button2 -> y
Button3 -> x
Button4 -> left shoulder
Button5 -> right shoulder
Button6 -> NULL
Button7 -> NULL
Button8 -> Select
Button9 -> Start
Button10 -> NULL
Button11 -> NULL
Button12 -> NULL
Button13 -> NULL

Yo lo que quiero es mapear la cruceta a los cursores, y luego los siguientes botones:
a ->Espacio: 32 (0x20)
Select -> Escape: 27 (0x1B)
Start: Enter: 13 (0x0D)

La parametrización mas lógica que he sacado despues de mucho leer sería esta:
/opt/retropie/supplementary/runcommand/joy2key.py /dev/input/js0 0x00 0x00 0x00 0x00 0x00 0x00 kcub1 kcuf1 kcuu1 kcud1 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1B 0x0D 0x00 0x00 0x00 0x00 &

Donde hay 0x00 (0 en Hexadecimal) son todas esas posiciones donde no hay teclad física equivalente mas aquellos botones físicos que no necesito que estén mapeados a nada, luego los "kcub1 kcuf1 kcuu1 kcud1" son los cursores, esto no tengo ni puta idea de porque, pero parece que tooooodos los post sobre el tema los cursores se representan con esas extrañas letras, y luego, están los 3 códigos hexadecimales de las 3 teclas que quiero.

¿Alguien que tenga alguna idea de como va esto?

Un saludo
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Bueno, pues he vuelto a avanzar,

Ya tengo funcionando joy2key!!!! :) , pero... no me funciona en la Abadia :?

Encontre un post donde alguien hacia funcionar Midnight Commander con el Gamepad, vi que la parte de uso de joy2key era como yo la tenía, así que probe a lanzar Midnight Commander en vez de la Abadia despues de mi script de configuración de joy2key ¡¡y funciono!!, pero... en la Abadia no funciona.

He observado que cuando salgo de la Abadia mientras he estado pulsando botones del Gamepad salen en la línea de comandos diferentes códigos, son los correspondientes a las pulsaciones del Gamepad, es decir, se que el joy2key si que esta funcionando, pero no envía las pulsaciones al terminal de salida adecuado, de alguna forma creo que esta enviando las pulsaciones al terminal no gráfico.

Copio por aquí una parte de la documentación oficial de la aplicación joy2key (de la aplicación, no del script de python, pero parto de que funcionan igual) que creo es la clave para este último paso que me falta:
joy2key monitors the joystick (normally /dev/input/js0) and sends keyboard events to an X
window, terminal, or raw console. In the case of X, xwininfo(1) is used to retrive the
window ID, which should not be a problem as this is a standard utility in most X11
distributions. To find the symbolic name of a particular key, see
include/X11/keysymdef.h. In terminal mode, joy2key sends the ascii character given on the
command line (that is, "joy2key -buttons a" means send lowercase 'a' when the first
joystick button is pushed). In raw console mode, please consult the document
"rawscancodes" included in this distribution for the proper scancodes.

USING JOY2KEY IN RAW CONSOLE MODE
------------------------------
Only for the brave! Lets you interface with SVGALIB applications like
Doom and Quake.

In this case, use -rawconsole.
La Abadia necesita terminal gráfico para ejecutarse, por eso el proceso java la lanzo con xinit, yo entiendo por tanto que el terminal de salida de la Abadia es lo que en la documentación de joy2key aparece como "X Window", y yo entendía que la salida por defecto de joy2key es precisamente a X, pero esto no lo tengo claro.
Luego al final de esa documentación que he copiado habla de que por ejemplo para Doom y Quake habría que aplicar -rawconsole, porque el interfaz gráfico de esas aplicaciones es SVGALIB (no tengo claro que es esto, ni porque en este caso aplicaría -rawconsole).

¿Alguien entiende mas o menos esto que estoy explicando y me puede ayudar? se que estoy ya en el paso final y que los tiros van por aquí, pero no consigo rematarlo.

Saludos
Estos usuarios agradecieron al autor ofl666 por el mensaje:
maiquelnais
maiquelnais
Pi Newbie
Pi Newbie
Mensajes: 2
Registrado: 20 Ene 2021, 16:48
Agradecido: 3 veces
Agradecimiento recibido: 0

Me pillas en "lo gordo" de los exámenes, ayer y hoy. Y ya, avanzando en modo pánico hasta el del día 9 que tengo "MOAE, a partir de entonces, puedo echar una mano, hacer pruebas etc.
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Buenas,

Genial maiquelnais, a ver si a ti se te da mejor que a mi.

Definitivamente, con el Joy2key no funciona Java, tengo montado un script para lanzarlo con python y otro script para lanzarlo con la aplicación, y ambos funcionan, con ambos lanzo despues el Midnight Commander y puedo manejarlo con el Gamepad con las teclas que he configurado, me funciona la cruceta, el escape, el space... funciona todo, pero luego lanzo el java y en ese contexto no funciona.

Con la aplicación he lanzado la salida de teclado al terminal, a la "rawconsole", y también funciona, pero en ese modo no puedes lanzar el contexto gráfico, el modo de funcionamiento es como lanzar un hilo infinito para capturar las entradas y enviarlas al terminal, luego no valen, por eso entiendo que en el Python esto no esta emulado.

Por si era tema del orden de lanzamiento (porque el runcommand lanza también el Joy2key) consegui lanzar esto sin tener que usar el onstart y el onend, consegui lanzarlo desde el propio "emulador", ejecutando 2 comandos en secuencial, primero el script y luego el java, de forma que tengo totalmente claro que mi lanzamiento del Joy2key es justo justo antes que el java, y, por si acaso, lo primero que hace es matar posibles procesos Joy2key anteriores, vamos que... tengo muy claro que esta todo ok y que simplemente la salida no funciona para la máquina virtual de java

Llegados a este punto, creo que por este camino no se puede hacer mas, así que de nuevo buscar alternativas, tipo el AntimicroX (esta ya la descarte).

Seguimos en la lucha!!!!
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Bueno, pues despues de un descansito del tema que me tenía ya loco... vuelvo a la carga!!!!

Despues de mucho mirar y remirar, esta vez lo voy a intentar con XBindKeys: http://www.nongnu.org/xbindkeys/

En cuanto lo pruebe comento.
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Pues nada, descartado rápidamente.

Lo primero parece que no es propiamente para lo que quiero, lo que permite es lanzar comandos shell con combinaciones de teclas o ratón, aún asi lo quería intentar haciendo que esos comandos fuesen las teclas que quiero lanzar y mapearlas a mi gamepad, pero para mapear esto tiene sus propios códigos de teclas y para sacarlas tienes que usar "xev", he intentado lanzarlo saliendo de EmuleStation a la línea de comandos y me dice que no encuentra display para mostrar, al ejecutarlo por SSH me saca una serie de salidas pero al pulsar teclas en el Gamepad no hace nada.
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

No se ya que mas probar.

He dejado una pregunta en retropie.org.uk a ver si hay mas suerte que por aquí:
https://retropie.org.uk/forum/topic/297 ... th-joy2key
Avatar de Usuario
Spks
Pi Omega
Pi Omega
Mensajes: 41
Registrado: 11 Dic 2020, 15:19
Agradecido: 36 veces
Agradecimiento recibido: 6 veces

ofl666 escribió: 20 Feb 2021, 19:44 No se ya que mas probar.

He dejado una pregunta en retropie.org.uk a ver si hay mas suerte que por aquí:
https://retropie.org.uk/forum/topic/297 ... th-joy2key
Ojalá tengas suerte y consigas tu propósito.
De todos modos con el teclado está versión se juega muy bien, yo la he disfrutado muchísimo.
ofl666
Pi Beta
Pi Beta
Mensajes: 120
Registrado: 20 Feb 2018, 19:30
Agradecido: 0
Agradecimiento recibido: 12 veces

Gracias Spks!!!!!!!!

Hoy lo he intentado con rejoystick (http://rejoystick.sourceforge.net/index.php?p=docs) pero al intentar hacer el make da un montón de errores de librerías que no encuentra y similares.
Avatar de Usuario
cpcbegin
Pi Master
Pi Master
Mensajes: 249
Registrado: 02 Jul 2017, 11:41
Agradecido: 34 veces
Agradecimiento recibido: 24 veces

AntimicroX no lo pudistes instalar porque no era un paquete para tu arquitectura, AMD64 es para micros intel de 64 bits y raspberry usa ARM.
Prueba a instalarlo con este script:
https://gitlab.com/cpcbegin/retromultiinstaller
Responder