Mupen64plus problems with two wireless gamepads and one receiver
-
i purchased two 2.4GHz controllers that use a single dongle. it seems to work with most emulators, except N64. i've edited the mupen64plus config that the emulator will show i have two controllers,but no buttons work... oddly, the left thumbstick on both controllers will move player 1.
Edit: after reading,i think it's due to the fact that the raspi sees this as one controller(8 axis, 24 buttons). I also notice the axis for both controllers are the same I assume causing the issue, but when I push the mode button on the controller, my Dpad changes from hat values to axis... Maybe I can work around with that?
I use the RPi3 with RetroPie 4.0.2. Below are config files...
mupen64plus.cfg and InputAutoConfig.ini
i've tried the different modes for controllers in mupen64plus.cfg. if you need any other info, feel free to ask. i apologize if my post is sloppy, it's my first one! wasn't sure if code block was appropriate so i put that below as well....
Thanks in advance people!# Mupen64Plus Configuration File # This file is automatically read and written by the Mupen64Plus Core library [Audio-OMX] Version = 1 OUTPUT_PORT = "1" # Frequency which is used if rom doesn't want to change it DEFAULT_FREQUENCY = 33600 # Swaps left and right channels SWAP_CHANNELS = False # Audio Output Frequncy mode (when NATIVE_MODE=false): 0 = Rom Frequency, 1 ROM Frequency if supported (HDMI only), 2 = Standard frequency < Rom Frequency, 3 = Standard frequency > Rom Frequency, [N] Force output frequency DEFAULT_MODE = 0 [Core] # Mupen64Plus Core config parameter set version number. Please don't change this version number. Version = 1.010000 # Draw on-screen display if True, otherwise don't draw OSD OnScreenDisplay = False # Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more R4300Emulator = 2 # Disable compiled jump commands in dynamic recompiler (should be set to False) NoCompiledJump = False # Disable 4MB expansion RAM pack. May be necessary for some games DisableExtraMem = False # Increment the save state slot after each save operation AutoStateSlotIncrement = False # Activate the R4300 debugger when ROM execution begins, if core was built with Debugger support EnableDebugger = False # Save state slot (0-9) to use when saving/loading the emulator state CurrentStateSlot = 0 # Path to directory where screenshots are saved. If this is blank, the default value of ${UserConfigPath}/screenshot will be used ScreenshotPath = "/home/pi/RetroPie/roms/n64" # Path to directory where emulator save states (snapshots) are saved. If this is blank, the default value of ${UserConfigPath}/save will be used SaveStatePath = "/home/pi/RetroPie/roms/n64" # Path to directory where SRAM/EEPROM data (in-game saves) are stored. If this is blank, the default value of ${UserConfigPath}/save will be used SaveSRAMPath = "/home/pi/RetroPie/roms/n64" # Path to a directory to search when looking for shared data files SharedDataPath = "/opt/retropie/configs/n64" # Delay interrupt after DMA SI read/write DelaySI = True # Force number of cycles per emulated instruction CountPerOp = 0 [CoreEvents] # Mupen64Plus CoreEvents config parameter set version number. Please don't change this version number. Version = 1 # SDL keysym for stopping the emulator Kbd Mapping Stop = 27 # SDL keysym for switching between fullscreen/windowed modes Kbd Mapping Fullscreen = 0 # SDL keysym for saving the emulator state Kbd Mapping Save State = 286 # SDL keysym for loading the emulator state Kbd Mapping Load State = 288 # SDL keysym for advancing the save state slot Kbd Mapping Increment Slot = 0 # SDL keysym for resetting the emulator Kbd Mapping Reset = 290 # SDL keysym for slowing down the emulator Kbd Mapping Speed Down = 291 # SDL keysym for speeding up the emulator Kbd Mapping Speed Up = 292 # SDL keysym for taking a screenshot Kbd Mapping Screenshot = 293 # SDL keysym for pausing the emulator Kbd Mapping Pause = 112 # SDL keysym for muting/unmuting the sound Kbd Mapping Mute = 109 # SDL keysym for increasing the volume Kbd Mapping Increase Volume = 93 # SDL keysym for decreasing the volume Kbd Mapping Decrease Volume = 91 # SDL keysym for temporarily going really fast Kbd Mapping Fast Forward = 102 # SDL keysym for advancing by one frame when paused Kbd Mapping Frame Advance = 47 # SDL keysym for pressing the game shark button Kbd Mapping Gameshark = 103 # Joystick event string for stopping the emulator Joy Mapping Stop = "J0B8/B9" # Joystick event string for switching between fullscreen/windowed modes Joy Mapping Fullscreen = "" # Joystick event string for saving the emulator state Joy Mapping Save State = "J0B8/B6" # Joystick event string for loading the emulator state Joy Mapping Load State = "J0B8/B7" # Joystick event string for advancing the save state slot Joy Mapping Increment Slot = "" # Joystick event string for taking a screenshot Joy Mapping Screenshot = "" # Joystick event string for pausing the emulator Joy Mapping Pause = "" # Joystick event string for muting/unmuting the sound Joy Mapping Mute = "" # Joystick event string for increasing the volume Joy Mapping Increase Volume = "" # Joystick event string for decreasing the volume Joy Mapping Decrease Volume = "" # Joystick event string for fast-forward Joy Mapping Fast Forward = "" # Joystick event string for pressing the game shark button Joy Mapping Gameshark = "" [Input-SDL-Control1] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 0 # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = 0 # SDL joystick name (or Keyboard) name = "ShanWan Twin USB Joystick" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = True # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 5=Rumble pak plugin = 2 # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "hat(0 Right)" DPad L = "hat(0 Left)" DPad D = "hat(0 Down)" DPad U = "hat(0 Up)" Start = "button(9)" Z Trig = "button(4)" B Button = "button(0)" A Button = "button(2)" C Button R = "axis(2+)" C Button L = "axis(2-)" C Button D = "button(1) axis(3+)" C Button U = "button(3) axis(3-)" R Trig = "button(5)" L Trig = "button(6)" Mempak switch = "button(10)" Rumblepak switch = "button(11)" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)" Select = "button(8)" [Input-SDL-Control2] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 0 # Specifies which1 joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = 1 # SDL joystick name (or Keyboard) name = "ShanWan Twin USB Joystick" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = True # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 5=Rumble pak plugin = 2 # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "hat(1 Right)" DPad L = "hat(1 Left)" DPad D = "hat(1 Down)" DPad U = "hat(1 Up)" Start = "button(21)" Z Trig = "button(16)" B Button = "button(12)" A Button = "button(14)" C Button R = "axis(2+)" C Button L = "axis(2-)" C Button D = "axis(3+)" C Button U = "axis(3-)" R Trig = "button(17)" L Trig = "button(18)" Mempak switch = "button(22)" Rumblepak switch = "button(23)" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)" [Input-SDL-Control3] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 2 # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = -1 # SDL joystick name (or Keyboard) name = "" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = False # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 5=Rumble pak plugin = 1 # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "" DPad L = "" DPad D = "" DPad U = "" Start = "" Z Trig = "" B Button = "" A Button = "" C Button R = "" C Button L = "" C Button D = "" C Button U = "" R Trig = "" L Trig = "" Mempak switch = "" Rumblepak switch = "" # Analog axis configuration mappings X Axis = "" Y Axis = "" [Input-SDL-Control4] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 2 # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = -1 # SDL joystick name (or Keyboard) name = "" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = False # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 5=Rumble pak plugin = 1 # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "" DPad L = "" DPad D = "" DPad U = "" Start = "" Z Trig = "" B Button = "" A Button = "" C Button R = "" C Button L = "" C Button D = "" C Button U = "" R Trig = "" L Trig = "" Mempak switch = "" Rumblepak switch = "" # Analog axis configuration mappings X Axis = "" Y Axis = "" [UI-Console] # Mupen64Plus UI-Console config parameter set version number. Please don't change this version number. Version = 1 # Directory in which to search for plugins PluginDir = "./" # Filename of video plugin VideoPlugin = "mupen64plus-video-GLideN64.so" # Filename of audio plugin AudioPlugin = "mupen64plus-audio-omx.so" # Filename of input plugin InputPlugin = "mupen64plus-input-sdl.so" # Filename of RSP plugin RspPlugin = "mupen64plus-rsp-hle.so" [Video-General] Fullscreen = False ScreenWidth = 320 ScreenHeight = 240 # If true, activate the SDL_GL_SWAP_CONTROL attribute VerticalSync = False [Video-GLideN64] # Settings version. Don't touch it. configVersion = 13 # Enable/Disable MultiSampling (0=off, 2,4,8,16=quality) MultiSampling = 0 # Screen aspect ratio (0=stretch, 1=force 4:3, 2=force 16:9, 3=adjust) AspectRatio = 1 # Swap frame buffers (0=On VI update call, 1=On VI origin change, 2=On buffer update) BufferSwapMode = 0 # Frame buffer size is the factor of N64 native resolution. UseNativeResolutionFactor = 0 # Bilinear filtering mode (0=N64 3point, 1=standard) bilinearMode = True # Max level of Anisotropic Filtering, 0 for off MaxAnisotropy = False # Size of texture cache in megabytes. Good value is VRAM*3/4 CacheSize = 500 # Enable color noise emulation. EnableNoise = True # Enable LOD emulation. EnableLOD = True # Enable hardware per-pixel lighting. EnableHWLighting = False # Use persistent storage for compiled shaders. EnableShadersStorage = True # Make texrect coordinates continuous to avoid black lines between them. (0=Off, 1=Auto, 2=Force) CorrectTexrectCoords = 0 # Render 2D texrects in native resolution to fix misalignment between parts of 2D image. EnableNativeResTexrects = False # Do not use shaders to emulate N64 blending modes. Works faster on slow GPU. Can cause glitches. EnableLegacyBlending = False # Enable writing of fragment depth. Some mobile GPUs do not support it, thus it made optional. Leave enabled. EnableFragmentDepthWrite = True # Enable frame and|or depth buffer emulation. EnableFBEmulation = True # Copy auxiliary buffers to RDRAM EnableCopyAuxiliaryToRDRAM = False # Enable N64 depth compare instead of OpenGL standard one. Experimental. EnableN64DepthCompare = False # Disable buffers read/write with FBInfo. Use for games, which do not work with FBInfo. DisableFBInfo = True # Read color buffer by 4kb chunks (strict follow to FBRead specification) FBInfoReadColorChunk = False # Read depth buffer by 4kb chunks (strict follow to FBRead specification) FBInfoReadDepthChunk = True # Enable color buffer copy to RDRAM (0=do not copy, 1=copy in sync mode, 2=copy in async mode) EnableCopyColorToRDRAM = 2 # Enable depth buffer copy to RDRAM (0=do not copy, 1=copy from video memory, 2=use software render) EnableCopyDepthToRDRAM = 0 # Enable color buffer copy from RDRAM. EnableCopyColorFromRDRAM = False # Texture filter (0=none, 1=Smooth filtering 1, 2=Smooth filtering 2, 3=Smooth filtering 3, 4=Smooth filtering 4, 5=Sharp filtering 1, 6=Sharp filtering 2) txFilterMode = 0 # Texture Enhancement (0=none, 1=store as is, 2=X2, 3=X2SAI, 4=HQ2X, 5=HQ2XS, 6=LQ2X, 7=LQ2XS, 8=HQ4X, 9=2xBRZ, 10=3xBRZ, 11=4xBRZ, 12=5xBRZ), 13=6xBRZ txEnhancementMode = 0 # Deposterize texture before enhancement. txDeposterize = False # Don't filter background textures. txFilterIgnoreBG = False # Size of filtered textures cache in megabytes. txCacheSize = 100 # Use high-resolution texture packs if available. txHiresEnable = False # Allow to use alpha channel of high-res texture fully. txHiresFullAlphaChannel = False # Use alternative method of paletted textures CRC calculation. txHresAltCRC = False # Enable dump of loaded N64 textures. txDump = False # Zip textures cache. txCacheCompression = True # Force use 16bit texture formats for HD textures. txForce16bpp = False # Save texture cache to hard disk. txSaveCache = True # Path to folder with hi-res texture packs. txPath = "/home/pi/.local/share/mupen64plus/hires_texture" # File name of True Type Font for text messages. fontName = "FreeSans.ttf" # Font size. fontSize = 18 # Font color in RGB format. fontColor = "B5E61D" # Enable bloom filter EnableBloom = False # Brightness threshold level for bloom. Values [2, 6] bloomThresholdLevel = 4 # Bloom blend mode (0=Strong, 1=Mild, 2=Light) bloomBlendMode = 0 # Blur radius. Values [2, 10] blurAmount = 10 # Blur strength. Values [10, 100] blurStrength = 20 # Force gamma correction. ForceGammaCorrection = False # Gamma correction level. GammaCorrectionLevel = 2.000000
; InputAutoCfg.ini for Mupen64Plus SDL Input plugin ; Keyboard_START [Keyboard] plugged = True plugin = 2 mouse = False DPad R = key(100) DPad L = key(97) DPad D = key(115) DPad U = key(119) Start = key(13) Z Trig = key(122) B Button = key(306) A Button = key(304) C Button R = key(108) C Button L = key(106) C Button D = key(107) C Button U = key(105) R Trig = key(99) L Trig = key(120) Mempak switch = key(44) Rumblepak switch = key(46) X Axis = key(276,275) Y Axis = key(273,274) ; Keyboard_END ; ShanWan Twin USB Joystick_START [ShanWan Twin USB Joystick] plugged = True plugin = 2 mouse = False AnalogDeadzone = 4096,4096 AnalogPeak = 32768,32768 Mempak switch = button(10) Rumblepak switch = button(11) C Button D = button(1) axis(3+) C Button L = axis(2-) Z Trig = button(4) Start = button(9) Y Axis = axis(1-,1+) DPad U = hat(0 Up) C Button U = button(3) axis(3-) A Button = button(2) DPad D = hat(0 Down) X Axis = axis(0-,0+) R Trig = button(5) DPad R = hat(0 Right) B Button = button(0) DPad L = hat(0 Left) C Button R = axis(2+) L Trig = button(6) ; ShanWan Twin USB Joystick_END ; ShanWan Twin USB Joystick 2_START [ShanWan Twin USB Joystick 2] plugged = True plugin = 2 mouse = False AnalogDeadzone = 4096,4096 AnalogPeak = 32768,32768 Mempak switch = button(22) Rumblepak switch = button(23) C Button D = button(13) axis(3+) C Button L = axis(2-) Z Trig = button(16) Start = button(21) Y Axis = axis(1-,1+) DPad U = hat(1 Up) C Button U = button(15) axis(3-) A Button = button(14) DPad D = hat(1 Down) X Axis = axis(0-,0+) R Trig = button(17) DPad R = hat(1 Right) B Button = button(12) DPad L = hat(1 Left) C Button R = axis(2+) L Trig = button(18) ; ShanWan Twin USB Joystick 2_END
-
I'm using the mupen64plus-GLideN64 emulator with an Xbox 360 controller.
I did a search and I don't have a file namedInputAutoConfig.ini
but I do have/opt/retropie/configs/n64/mupen64plus.cfg
Under my Input SDL Control 1 section of mupen64plus.cfg I have:
[Input-SDL-Control1] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2.000000 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 2 # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = 0 # SDL joystick name (or Keyboard) name = "Xbox 360 Wireless Receiver (XBOX)" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = True # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 5=Rumble pak plugin = 2 # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "button(14)" DPad L = "button(13)" DPad D = "button(16)" DPad U = "button(15)" Start = "button(9)" Z Trig = "button(4)" B Button = "button(3)" A Button = "button(1)" C Button R = "axis(2+)" C Button L = "axis(2-)" C Button D = "button(0) axis(3+)" C Button U = "button(2) axis(3-)" R Trig = "button(5)" L Trig = "button(6)" Mempak switch = "button(11)" Rumblepak switch = "button(12)" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)"
Under the Input SDL Control 2 through 4 sections you just copy the same bindings.
I'm thinking the mapping/bindings you are using might not be the correct ones for you gamepads.
Try running
jstest /dev/input/js0
to find out what your button numbers are and when you've found all your numbers, press Ctrl+C to quit the joystick test.So for example when I run the jstest and then press Right on my dpad, it says "On" for number 14. In my mupen64plus.cfg file I have
DPad R = "button(14)"
When I press the Start button I get "On" for number 9 so i haveStart = "button(9)"
-
@backstander I appreciate the reply! I guess it hadn't occurred to me that it would be the receiver that is registered, not the controllers. I had gotten my button values from manually entering input bindings through RetroArch.I'll give that a go and see what I turn out. I'm slightly confused how one set of button bindings work for multiple controllers. Is there any chance that can be explained?
So,i did jstest and everything matches what I had entered already... It sees my two controllers as one, 23 button, controller(I think) i wonder if the hid USB quirk would help....the One interesting note though, the controllers have a 'mode' button on them and when it was on, changed the Dpad inputs (H0right to axis 4+, for example) not sure if that has any play in it either. -
@fawked
I'll have to look at mymupen64plus.cfg
file again when I got home. I think you tell it which controller you're using with thedevice =
with 0 being the first device connected to the Pi and 1 being the second device and -1 is turning it off like for player 3 and 4 if you don't what those players.the One interesting note though, the controllers have a 'mode' button on them and when it was on, changed the Dpad inputs (H0right to axis 4+, for example) not sure if that has any play in it either.
Yeah that could change the button bindings for some of the buttons when toggled.
-
I'm slightly confused how one set of button bindings work for multiple controllers. Is there any chance that can be explained?
I double checked my
mupen64plus.cfg
and under the SDL Control 2 through 4 sections they all havedevice = -1
and don't have any button bindings but I tested with Mario Kart and Mortal Kombat 4 and with 2 Xbox 360 controllers I could use both at the same time so I'm not sure how it's working. Then I loaded up F-Zero X and it worked with all 3 of my wireless Xbox 360 controllers.I'm just guessing here but maybe because all 3 controllers are the same kind it can re-use the first section but maybe if you used different controllers types you could use the other 3 sections.
Not sure if that's any help to you.
-
@backstander just to make sure we're not having miscommunication, you're using multiple controllers at once? The hid quirk seemed to have no affect....
Thanks again for the replies!
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.