Raspberry Pi, cómo configurar dos mandos en RetroPie

como_configurar_dos_mandos_en_retropie

En la entrada Raspberry Pi, una consola de juegos con RetroPie vimos cómo configurar nuestra Raspberry para convertirla en una videoconsola retro y de este modo volver a disfrutar con aquellos juegos memorables de los 90. Con el tiempo, este artículo se ha posicionado como el más visitado del blog y el video más visto en el canal de YouTube, hasta la fecha, siendo además el que más comentarios ha recibido. Una de las dudas más recurrentes era cómo configurar dos mandos en RetroPie y esto es lo que vamos a ver.

RetroPie_Juegos_SNES
Dos jugadores en RetroPie (Emulador de Super Nintendo)

Estos comandos los he realizado sobre una Raspberry Pi 2 modelo B, utilizando la distribución RetroPie 3.0 BETA 4, para configurar dos mandos de Sony PlayStation 3 conectados a través de cable USB, pero deberían funcionar sin problemas en los demás modelos de Raspberry y usando otros modelos de mandos. También debería funcionar con otras distribuciones anteriores de RetroPie – quizás cambie la ruta de algunos ficheros, pero te explico cómo buscarlos – , aunque si puedes, recomiendo que actualices siempre a la última versión, que además de incluir mejoras de funcionalidad, también resuelve errores y seguramente ganarás en estabilidad.

Pasos para configurar dos mandos en RetroPie

Supongo que si estás leyendo estos pasos es porque ya tienes una Raspberry Pi configurada con RetroPie. Si no la tienes configurada o si no sabes cómo conectarte a tu Raspberry para ejecutar comandos, pásate por la entrada que comentaba al principio de este tutorial: Raspberry Pi, una consola de juegos con RetroPie, que allí te explico cómo hacerlo. Si ya lo has hecho, sigue leyendo…

Busca la herramienta retroarch-joyconfig y anota la ruta donde se encuentra ubicada:

sudo find / -name retroarch-joyconfig 

En RetroPie 3.0 BETA 4, el ejecutable se encuentra en dos rutas diferentes. Puedes usar el que quieras:

/opt/retropie/emulators/retroarch/bin/retroarch-joyconfig
/opt/retropie/emulators/retroarch/retroarch-joyconfig

Busca el archivo de configuración general para todos los emuladores:

sudo find / -name retroarch.cfg

Dependiendo de los emuladores que tengas instalados, verás una salida similar a esta:

/opt/retropie/configs/gb/retroarch.cfg
/opt/retropie/configs/sg-1000/retroarch.cfg
/opt/retropie/configs/gbc/retroarch.cfg
/opt/retropie/configs/atarilynx/retroarch.cfg
/opt/retropie/configs/atari7800/retroarch.cfg
/opt/retropie/configs/n64/retroarch.cfg
/opt/retropie/configs/doom/retroarch.cfg
/opt/retropie/configs/fba/retroarch.cfg
/opt/retropie/configs/all/retroarch.cfg
/opt/retropie/configs/videopac/retroarch.cfg
/opt/retropie/configs/atari2600/retroarch.cfg
/opt/retropie/configs/megadrive/retroarch.cfg
/opt/retropie/configs/psx/retroarch.cfg
/opt/retropie/configs/fds/retroarch.cfg
/opt/retropie/configs/vectrex/retroarch.cfg
/opt/retropie/configs/segacd/retroarch.cfg
/opt/retropie/configs/gba/retroarch.cfg
/opt/retropie/configs/pcengine/retroarch.cfg
/opt/retropie/configs/sega32x/retroarch.cfg
/opt/retropie/configs/mastersystem/retroarch.cfg
/opt/retropie/configs/quake/retroarch.cfg
/opt/retropie/configs/cavestory/retroarch.cfg
/opt/retropie/configs/msx/retroarch.cfg
/opt/retropie/configs/gamegear/retroarch.cfg
/opt/retropie/configs/mame-mame4all/retroarch.cfg
/opt/retropie/configs/snes/retroarch.cfg
/opt/retropie/configs/nes/retroarch.cfg
/opt/retropie/emulators/retroarch/retroarch.cfg

Sitúate en el directorio donde se encuentra este archivo:

cd /opt/retropie/configs/all/

Ejecuta este comando para configurar el mando para el jugador 1:

/opt/retropie/emulators/retroarch/retroarch-joyconfig -o jugador1.cfg -p 1 -j 0

En el comando anterior, el parámetro -p viene seguido por un 1, que indica el número de jugador (player 1 = p1) y el parámetro -j viene seguido del puerto utilizado (port #0 para el jugador 1).

A continuación, si tienes conectados los dos mandos, los verás en las siguientes líneas identificados con su nombre y puerto:

RetroArch: udev_add_pad: [udev]: Plugged pad: Sony PLAYSTATION(R)3 Controller (054c:0268) on port #0.
RetroArch: udev_add_pad: [udev]: Pad #0 (/dev/input/event1) supports 0 force feedback effects.
RetroArch: udev_add_pad: [udev]: Plugged pad: Sony PLAYSTATION(R)3 Controller (054c:0268) on port #1.
RetroArch: udev_add_pad: [udev]: Pad #1 (/dev/input/event2) supports 0 force feedback effects.
RetroArch: input_joypad_init_first: Found joypad driver: "udev".
Found joypad driver: udev
Using joypad: Sony PLAYSTATION(R)3 Controller

Debemos pulsar algunos botones del mando y los joysticks, para asegurarnos que el mando elegido aún no ha sido configurado y a continuación pulsar la tecla Enter:

Joypads tend to have stale state after opened.
Press some buttons and move some axes around to make sure joypad state is completely neutral before proceeding.
When done, press Enter ... 

En este punto, toma el mando para el jugador 1 y asocia los botones a tu gusto:

Configuring binds for player #1 on joypad #0.

B button (down)
    Joybutton pressed: 14
Y button (left)
    Joybutton pressed: 13
Select button
    Joybutton pressed: 0
Start button
    Joybutton pressed: 3
Up D-pad
    Joybutton pressed: 4
Down D-pad
    Joybutton pressed: 6
Left D-pad
    Joybutton pressed: 7
Right D-pad
    Joybutton pressed: 5
A button (right)
    Joybutton pressed: 13
X button (top)
    Joybutton pressed: 12
L button (shoulder)
    Joybutton pressed: 10
R button (shoulder)
    Joybutton pressed: 11
L2 button (trigger)
    Joybutton pressed: 8
R2 button (trigger)
    Joybutton pressed: 9
L3 button (thumb)
    Joybutton pressed: 1
R3 button (thumb)
    Joybutton pressed: 2
Left analog X+ (right)
    Joyaxis moved: Axis 0, Value 20175
Left analog X- (left)
    Joyaxis moved: Axis 0, Value -25828
Left analog Y+ (down)
    Joyaxis moved: Axis 1, Value 30712
Left analog Y- (up)
    Joyaxis moved: Axis 1, Value -21459
Right analog X+ (right)
    Joyaxis moved: Axis 2, Value 27371
Right analog X- (left)
    Joyaxis moved: Axis 2, Value -21716
Right analog Y+ (down)
    Joyaxis moved: Axis 3, Value 20689
Right analog Y- (up)
    Joyaxis moved: Axis 3, Value -27627

Una vez configurado el primer mando, ejecuta el mismo comando, cambiando los parámetros, para configurar el mando para el jugador 2:

/opt/retropie/emulators/retroarch/retroarch-joyconfig -o jugador2.cfg -p 2 -j 1

Verás ambos mandos, pero la configuración se realizara sobre el segundo:

RetroArch: udev_add_pad: [udev]: Plugged pad: Sony PLAYSTATION(R)3 Controller (054c:0268) on port #0.
RetroArch: udev_add_pad: [udev]: Pad #0 (/dev/input/event1) supports 0 force feedback effects.
RetroArch: udev_add_pad: [udev]: Plugged pad: Sony PLAYSTATION(R)3 Controller (054c:0268) on port #1.
RetroArch: udev_add_pad: [udev]: Pad #1 (/dev/input/event2) supports 0 force feedback effects.
RetroArch: input_joypad_init_first: Found joypad driver: "udev".
Found joypad driver: udev
Using joypad: Sony PLAYSTATION(R)3 Controller

Joypads tend to have stale state after opened.
Press some buttons and move some axes around to make sure joypad state is completely neutral before proceeding.
When done, press Enter ... 
Configuring binds for player #2 on joypad #1.

[...]

Para finalizar, copia ambas configuraciones en el archivo de configuración general y reinicia la RPi para aplicar los cambios:

cat jugador*.cfg >> /opt/retropie/configs/all/retroarch.cfg
sudo reboot

Si visualizas el fichero anterior, verás que se ha copiado la configuración para ambos mandos al final del mismo. En mi caso, he configurado ambos mandos de la misma forma. Si tienes dos mandos de PS3, puedes incluso copiar éstas líneas al final de tu fichero retroarch.cfg y ahorrarte los pasos anteriores:

input_player1_joypad_index = "0"
input_player1_b_btn = "14"
input_player1_y_btn = "13"
input_player1_select_btn = "0"
input_player1_start_btn = "3"
input_player1_up_btn = "4"
input_player1_down_btn = "6"
input_player1_left_btn = "7"
input_player1_right_btn = "5"
input_player1_a_btn = "13"
input_player1_x_btn = "12"
input_player1_l_btn = "10"
input_player1_r_btn = "11"
input_player1_l2_btn = "8"
input_player1_r2_btn = "9"
input_player1_l3_btn = "1"
input_player1_r3_btn = "2"
input_player1_l_x_plus_axis = "+0"
input_player1_l_x_minus_axis = "-0"
input_player1_l_y_plus_axis = "+1"
input_player1_l_y_minus_axis = "-1"
input_player1_r_x_plus_axis = "+2"
input_player1_r_x_minus_axis = "-2"
input_player1_r_y_plus_axis = "+3"
input_player1_r_y_minus_axis = "-3"
input_player2_joypad_index = "1"
input_player2_b_btn = "14"
input_player2_y_btn = "13"
input_player2_select_btn = "0"
input_player2_start_btn = "3"
input_player2_up_btn = "4"
input_player2_down_btn = "6"
input_player2_left_btn = "7"
input_player2_right_btn = "5"
input_player2_a_btn = "13"
input_player2_x_btn = "12"
input_player2_l_btn = "10"
input_player2_r_btn = "11"
input_player2_l2_btn = "8"
input_player2_r2_btn = "9"
input_player2_l3_btn = "1"
input_player2_r3_btn = "2"
input_player2_l_x_plus_axis = "+0"
input_player2_l_x_minus_axis = "-0"
input_player2_l_y_plus_axis = "+1"
input_player2_l_y_minus_axis = "-1"
input_player2_r_x_plus_axis = "+2"
input_player2_r_x_minus_axis = "-2"
input_player2_r_y_plus_axis = "+3"
input_player2_r_y_minus_axis = "-3"
PS3_RetroPie_Configuration
Correspondencia botones PS3 en RetroPie

Has realizado una configurado de tus mandos que será común para todos los emuladores, pero sin quieres personalizar la configuración para un emulador en concreto, simplemente debes repetir los mismos pasos modificando el fichero sobre el que se copia la configuración final. Es decir, si quieres que esta configuración sólo tenga efecto en el emulador de Super Nintendo, deberías realizar todos los pasos y finalmente hacer:

cat jugador*.cfg >> /opt/retropie/configs/snes/retroarch.cfg
sudo reboot

Espero que te haya resultado útil este pequeño tutorial. Si tienes cualquier duda o problema durante el proceso, ¡deja tu comentario!

¡Nos leemos en Twitter! 😉