Hace un par de semanas me llegó por fin mi nuevo mando para jugar a la Nintendo 64 con Mupen64Plus y tuve el problema de que cada vez que quería jugar tenía que configurar los controles. Mirando la página de Mupen64Plus encontré la forma de que el emulador me reconozca el joystick y lo configure automáticamente sin tener que hacerlo yo.

El programa tiene un archivo con configuraciones preestablecidas que consulta cada vez que arranca, si a ese archivo añadimos la configuración de nuestro mando asignará automáticamente los botones.

Probando el joystick

Primero tenemos que estar seguros de que nuestro mando es reconocido por el sistema y que funciona. Para comprobarlo escribimos en un terminal cat /dev/input/js0 y al tocar los botones del joystick veremos como aparecen caracteres raros. Eso significa que funciona. Si no te aparece js0 en /dev/input prueba con cat /dev/js0.

Otra opción es utilizar jstest del paquete joyutils o la interfaz gráfica jstest-gtk.

img-jstest-gtk

Si no te funciona quizás tengas que instalar o cargar algún módulo al kernel.

Configurando el mando en Mupen64Plus

Obtener el nombre del dispositivo

Ahora procedemos a averiguar el nombre con el que Mupen64Plus reconoce nuestro dispositivo, para hacerlo conectamos el mando y después ejecutamos el emulador desde el teminal.

[user@host ~]$ mupen64plus "Super Mario 64.v64"
__ __ __ _ _ ____ _
| \/ |_ _ _ __ ___ _ __ / /_ | || | | _ \| |_ _ ___
| |\/| | | | | '_ \ / _ \ '_ \| '_ \| || |_| |_) | | | | / __|
| | | | |_| | |_) | __/ | | | (_) |__ _| __/| | |_| \__ \
|_| |_|\__,_| .__/ \___|_| |_|\___/ |_| |_| |_|\__,_|___/
|_| http://code.google.com/p/mupen64plus/
Mupen64Plus Console User-Interface Version 2.0.0UI-Console: attached to core library 'Mupen64Plus Core' version 2.0.0
UI-Console: Includes support for Dynamic Recompiler.
Core: Goodname: Super Mario 64 (U) [!]
Core: Name: SUPER MARIO 64
Core: MD5: 20B854B239203BAF6C961B850A4A51A2
Core: CRC: 635a2bff 8b022326
Core: Imagetype: .v64 (byteswapped)
Core: Rom size: 8388608 bytes (or 8 Mb or 64 Megabits)
Core: Version: 1444
Core: Manufacturer: Nintendo
Core: Country: USA
UI-Console Status: Cheat codes disabled.
UI-Console: using Video plugin: 'Mupen64Plus OpenGL Video Plugin by Rice' v2.0.0
UI-Console: using Audio plugin: 'Mupen64Plus SDL Audio Plugin' v2.0.0
UI-Console: using Input plugin: 'Mupen64Plus SDL Input Plugin' v2.0.0
UI-Console: using RSP plugin: 'Hacktarux/Azimer High-Level Emulation RSP Plugin' v2.0.0
Input: 1 SDL joysticks were found.
Input Error: No auto-config found for joystick named 'Generic USB Joystick ' in InputAutoConfig.ini
Input: N64 Controller #1: Forcing default keyboard configuration
Input: 1 controller(s) found, 1 plugged in and usable in the emulator
Input: Mupen64Plus SDL Input Plugin version 2.0.0 initialized.
Video: SSE processing enabled.
Video: Found ROM 'SUPER MARIO 64', CRC ff2b5a632623028b-45
Video: Texture loading option is enabled. Finding all hires textures

Veremos diferentes mensajes de salida y el que nos interesa es el que he resaltado en rojo "Input Error: No auto-config found for joystick named 'Generic USB Joystick ' in InputAutoConfig.ini". De este mensaje obtenemos el nombre del dispositivo, el mio es Generic USB Joystick.

Editando el archivo de configuración

Ahora que ya sabemos el nombre de nuestro mando abrimos con permisos de root el archivo /usr/share/mupen64plus/InputAutoConfig.ini, nos vamos al final, agregamos nuestra configuración y guardamos. Ésta es la mía:

[Generic USB Joystick]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = axis(5+)
DPad L = axis(5-)
DPad D = axis(6+)
DPad U = axis(6-)
Start = button(9)
Z Trig = button(7)
B Button = button(8)
A Button = button(6)
C Button R = button(1)
C Button L = button(3)
C Button D = button(2)
C Button U = button(0)
R Trig = button(5)
L Trig = button(4)
Mempak switch =
Rumblepak switch =
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

En este enlace hay una descripción de que es cada opción, yo os dejo lo más básico para poder configurar el joystick.

  • [Generic USB Joystick] -> Es el nombre de mi joystick, tienes que poner entre los corchetes [] el nombre del tuyo.
  • plugged -> Indica que el mando esta conectado (déjalo en True).
  • button(n) -> Botón del mando donde n es el número de botón.
  • axis(n+) -> Eje del mando, n es el número del eje y + indica movimiento a la derecha si el eje es horizontal, abajo si el eje es vertical y - indica movimiento a la izquierda si el eje es horizontal y arriba si el eje es vertical.

Para saber el número de botón o del eje de nuestro mando yo utilizo jtest o jtest-gtk que me indica el número del botón que estoy pulsando o el eje que estoy moviendo.

Probando la configuración

Ahora volvemos al terminal y ejecutamos mupen64plus de nuevo.

[user@host ~]$ mupen64plus "Super Mario 64.v64"
__ __ __ _ _ ____ _
| \/ |_ _ _ __ ___ _ __ / /_ | || | | _ \| |_ _ ___
| |\/| | | | | '_ \ / _ \ '_ \| '_ \| || |_| |_) | | | | / __|
| | | | |_| | |_) | __/ | | | (_) |__ _| __/| | |_| \__ \
|_| |_|\__,_| .__/ \___|_| |_|\___/ |_| |_| |_|\__,_|___/
|_| http://code.google.com/p/mupen64plus/
Mupen64Plus Console User-Interface Version 2.0.0UI-Console: attached to core library 'Mupen64Plus Core' version 2.0.0
UI-Console: Includes support for Dynamic Recompiler.
Core: Goodname: Super Mario 64 (U) [!]
Core: Name: SUPER MARIO 64
Core: MD5: 20B854B239203BAF6C961B850A4A51A2
Core: CRC: 635a2bff 8b022326
Core: Imagetype: .v64 (byteswapped)
Core: Rom size: 8388608 bytes (or 8 Mb or 64 Megabits)
Core: Version: 1444
Core: Manufacturer: Nintendo
Core: Country: USA
UI-Console Status: Cheat codes disabled.
UI-Console: using Video plugin: 'Mupen64Plus OpenGL Video Plugin by Rice' v2.0.0
UI-Console: using Audio plugin: 'Mupen64Plus SDL Audio Plugin' v2.0.0
UI-Console: using Input plugin: 'Mupen64Plus SDL Input Plugin' v2.0.0
UI-Console: using RSP plugin: 'Hacktarux/Azimer High-Level Emulation RSP Plugin' v2.0.0
Input: 1 SDL joysticks were found.
Input: N64 Controller #1: Using auto-config with SDL joystick 0 ('Generic USB Joystick ')
Input: 1 controller(s) found, 1 plugged in and usable in the emulator
Input: Rumble activated on N64 joystick #1
Input: Mupen64Plus SDL Input Plugin version 2.0.0 initialized.
Video: SSE processing enabled.
Video: Found ROM 'SUPER MARIO 64', CRC ff2b5a632623028b-45
Video: Texture loading option is enabled. Finding all hires textures

Si todo esta correcto veremos un mensaje que nos indica que ha cargado la configuración automáticamente (linea resaltada en rojo). Ahora ya podemos disfrutar de los juegos de Nintendo 64 con nuestro joystick.