mupen64plus / mupen64plus-user-issues

Issue reports from users go here
http://www.mupen64plus.org/
17 stars 3 forks source link

Auto configuration input for Xbox 360 wireless controller is messed #575

Open richard42 opened 9 years ago

richard42 commented 9 years ago

Originally reported on Google Code with ID 576

Describe your system:
 - Operating System (be specific): Debian GNU/Linux Jessie/Sid
 - Machine type (32-bit or 64-bit): 64-bit
 - Mupen64Plus version: 2.0.0
 - Plugins used: Mupen64Plus SDL Input Plugin

Describe the problem:

First of all, I have SDL 1.2 and SDL 2.0, both installed, and I use xpad.
I tried some games with the Xbox 360 wireless controller, but I noticed control isn't
working very well, so I investigated and found the culprit: the InputAutoCfg.ini. Especially
this section.

***Faulty section***

[Microsoft X-Box 360 pad]
[Win32: Controller (XBOX 360 For Windows)]
[Win32: XBOX 360 For Windows (Controller)]
[Win32: XBOX 360 For Windows]
[Xbox 360 Wireless Receiver]
[OSX: Wireless 360 Controller]
[OSX: Controller]
[Linux: Xbox Gamepad (userspace driver)]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = hat(0 Right)
DPad L = hat(0 Left)
DPad D = hat(0 Down)
DPad U = hat(0 Up)
Start = button(7)
Z Trig = axis(2+)
B Button = button(2)
A Button = button(0)
C Button R = axis(4+)
C Button L = axis(4-) button(3)
C Button D = axis(3+) button(1)
C Button U = axis(3-)
R Trig = button(5) axis(2-)
L Trig = button(4)
Mempak switch = 
Rumblepak switch = 
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

***End section***

Issues:
-As you see, both R and Z trigger share the same axis (2, which corresponds to Xbox
360's left trigger), which isn't a smart move, because it messes with gameplay and
renders a lot of games unplayable. 
-The C buttons have the axes that are inverted (vertical instead of horizontal and
vice versa).
-Switch binding for Mempak and Rumblepak are missing.
-D-pad doesn't work.

So I fixed this thing and now control works very well. See below:

***Section fixed***

[Microsoft X-Box 360 pad]
[Win32: Controller (XBOX 360 For Windows)]
[Win32: XBOX 360 For Windows (Controller)]
[Win32: XBOX 360 For Windows]
[Xbox 360 Wireless Receiver]
[OSX: Wireless 360 Controller]
[OSX: Controller]
[Linux: Xbox Gamepad (userspace driver)]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = hat(0 Right) button(12)
DPad L = hat(0 Left) button(11)
DPad D = hat(0 Down) button(14)
DPad U = hat(0 Up) button(13)
Start = button(8)
Z Trig = button(4)
B Button = button(2)
A Button = button(0)
C Button R = axis(3+)
C Button L = axis(3-) button(3)
C Button D = axis(4+) button(1)
C Button U = axis(4-)
R Trig = button(5)
L Trig = axis(2+)
Mempak switch = button(6)
Rumblepak switch = button(7)
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

***End section***

What have I done:
- Z trigger now binds to X360's L button, and R trigger to X360's R button; as those
two are the most used, and I found X360's L/R buttons more comfortable than triggers
to this purpose. Consequence is that L trigger now binds to X360's trigger (only when
is pressed). Thoughts?
- C buttons now have the correct axes.
- I put Mempak switch as Back (or Select) button, and Rumblepak switch as X360's Start
button. Consequence is that N64's Start button is now binded to X360's guide button.
Reason I did this is because some games supports both, and I wouldn't bother with stick
buttons as they may be accidentally clicked, so I found Back/Start buttons more suitable
to this purpose.
- I added the button variables along with hat to the D-pad, so it works again.

Reported by mastergatto on 2013-09-05 21:59:03

richard42 commented 9 years ago
Did you also test it with the kernel driver instead of xpad? Are you using the builds
from the website or the Debian package?

I will have a look at it later and decide whether it is added to the Debian package

Reported by sven@narfation.org on 2013-09-06 13:36:44

richard42 commented 9 years ago
Patch: http://anonscm.debian.org/gitweb/?p=collab-maint/mupen64plus-input-sdl.git;a=commit;h=fb278870cc930c408563ff00893ec4f268534e61

Reported by sven@narfation.org on 2013-09-06 13:42:54

richard42 commented 9 years ago
Hmm...no, I haven't tested. I thought xpad was the kernel driver...? Anyways, can you
tell me how to test it with the kernel driver? Seems I can't find anything.

I was using the build from this website for testing purposes, but it looks like the
debian package suffers from this too.

This patch is really a good news to me, I hope it being merged upstream soon.

Reported by mastergatto on 2013-09-06 14:20:02

richard42 commented 9 years ago
Yes, I've mixed up the names. xpad was the kernel driver and the userspace driver was
xboxdrv. Can you please test it with xboxdrv

Reported by sven@narfation.org on 2013-09-06 18:12:56

richard42 commented 9 years ago
I have just tested with xboxdrv.

With xboxdrv, neither the old or the fixed autoconfig work very well. That's odd, so
I investigated with jstest with both xpad and xboxdrv, and these are what I found and
compared them:
(T= trigger, B = button, S = stick)

X360    xboxdrv     xpad

LT  axis 5      axis 2
RT  axis 4      axis 5
LS  axis 0(X),1(Y)  axis 0(X),1(Y)
RS  axis 2(X),3(Y)  axis 3(X),4(Y)
D-Pad   axis 6(X),7(Y)  Up=B13,Down=B14,Left=B11,Right=B12
LB  B4      B4
RB  B5      B5
BackB   B6      B6
GuideB  B8      B8
StartB  B7      B7
AB  B0      B0
XB  B2      B2
BB  B1      B1
YB  B3      B3  
LSB B9      B9
RSB B10     B10

1) Seems that both drivers use different axes for triggers and right stick. Only left
stick has same axes for both drivers.
2) For D-Pad, xboxdrv recognizes it with axes 6 and 7, while xpad uses buttons 11,12,13,14
instead. Maybe is this the reason why hat doesn't work with xpad, I dunno.
3) And for the rest, they use same names.

So for what concerns with the fixed autoconfig, one may want just to readjust the axes
to xboxdrv's name scheme, but...I would suggest to stick with fixed autoconfig as it
is now, because xpad is the standard de facto that (I think?) everyone uses, and whose
using xboxdrv may add the option --mimic-xpad-wireless to make xboxdrv act identical
to xpad.

Right now, the controller is working fine with both xpad and xboxdrv with --mimic-xpad-wireless.
And I'm happy with this.

Reported by mastergatto on 2013-09-06 21:03:17

richard42 commented 9 years ago
Or even better, we could split up xpad and xboxdrv configuration.

***Section***

[Microsoft X-Box 360 pad]
[Win32: Controller (XBOX 360 For Windows)]
[Win32: XBOX 360 For Windows (Controller)]
[Win32: XBOX 360 For Windows]
[Xbox 360 Wireless Receiver]
[OSX: Wireless 360 Controller]
[OSX: Controller]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = hat(0 Right) button(12)
DPad L = hat(0 Left) button(11)
DPad D = hat(0 Down) button(14)
DPad U = hat(0 Up) button(13)
Start = button(8)
Z Trig = button(4)
B Button = button(2)
A Button = button(0)
C Button R = axis(3+)
C Button L = axis(3-) button(3)
C Button D = axis(4+) button(1)
C Button U = axis(4-)
R Trig = button(5)
L Trig = axis(2+)
Mempak switch = button(6)
Rumblepak switch = button(7)
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

[Linux: Xbox Gamepad (userspace driver)]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = hat(0 Right)
DPad L = hat(0 Left)
DPad D = hat(0 Down)
DPad U = hat(0 Up)
Start = button(8)
Z Trig = button(4)
B Button = button(2)
A Button = button(0)
C Button R = axis(2+)
C Button L = axis(2-) button(3)
C Button D = axis(3+) button(1)
C Button U = axis(3-)
R Trig = button(5)
L Trig = axis(5+)
Mempak switch = button(6)
Rumblepak switch = button(7)
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

***End section***

In this way, one could play smoothly any games, no matter what driver he uses.
However, I can't guarantee that xpad configuration could work fine under Windows or
Mac OS X.

Reported by mastergatto on 2013-09-07 14:26:07

richard42 commented 9 years ago
Maybe it is better to keep your change in a separate section and not the "Linux: Xbox
Gamepad (userspace driver)"? I don't have such a device and therefore cannot check
it

Reported by sven@narfation.org on 2013-12-13 16:20:26

richard42 commented 9 years ago
will this work with xubuntu 

Reported by Baddonkey75 on 2014-08-20 05:36:46

richard42 commented 9 years ago
Greetings.  Seeking help - no buttons on my controller seems to work.  I've tried 4
of them and tried every combination in this ticket.  Is there a way to get mupen64plus
to output "Input: Controller 1: pressed button(3)"?  -verbose don't do this.

Describe your system:
 - Operating System (be specific): XBMCbuntu 13.1 Gotham (Ubuntu 14.04.1 LTS GNU/Linux
3.13.0-35-generic x86_64)
 - Machine type (32-bit or 64-bit): 64-bit
 - Mupen64Plus version: 2.0.0
 - Plugins used:
  + 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

Describe the problem:

No controller inputs working when a XBOX 360 controller clone is used

stdout shows:
Input: 1 SDL joysticks were found.
Input: N64 Controller #1: Using auto-config with SDL joystick 0 ('Afterglow Gamepad
for Xbox 360')
Input: 1 controller(s) found, 1 plugged in and usable in the emulator
Input: Rumble activated on N64 joystick #1
Input Warning: Couldn't open rumble support for joystick #2
Input Warning: Couldn't open rumble support for joystick #3
Input Warning: Couldn't open rumble support for joystick #4
Input: Mupen64Plus SDL Input Plugin version 2.0.0 initialized.

Changes made:
Added "[Afterglow Gamepad for Xbox 360]" to this block in /usr/share/games/mupen64plus/InputAutoCfg.ini

[Microsoft X-Box 360 pad]
[Win32: Controller (XBOX 360 For Windows)]
[Win32: XBOX 360 For Windows (Controller)]
[Win32: XBOX 360 For Windows]
[Xbox 360 Wireless Receiver]
[OSX: Wireless 360 Controller]
[OSX: Controller]
[Linux: Xbox Gamepad (userspace driver)]
[Afterglow Gamepad for Xbox 360]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = hat(0 Right) button(12)
DPad L = hat(0 Left) button(11)
DPad D = hat(0 Down) button(14)
DPad U = hat(0 Up) button(13)
Start = button(8)
Z Trig = button(4)
B Button = button(2)
A Button = button(0)
C Button R = axis(3+)
C Button L = axis(3-) button(3)
C Button D = axis(4+) button(1)
C Button U = axis(4-)
R Trig = button(5)
L Trig = axis(2+)
Mempak switch = button(6)
Rumblepak switch = button(7)
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

Reported by jlcooke on 2014-09-16 15:24:02

richard42 commented 9 years ago
Bullcrap like this is why getting rid of the gui was a bad idea, now mupen sucks.
Want a good n64 emulator use project64 in wine

Reported by Dancingmadrb3 on 2014-09-25 01:46:06

richard42 commented 9 years ago
@Dancingm...@gmail.com: If you want a gui then use a gui. Ever tried m64py?

Reported by conchur@web.de on 2014-09-25 06:38:55

richard42 commented 9 years ago
@masterga   thx alot dude! worked for me! 

Reported by brfabiian on 2015-02-04 20:17:23