Jump to content

RetroArch, BlissBox 4-Play, and N64 Control Mapping


MisterB

Recommended Posts

Posted

I am working to simplify my setup by standardizing on a handful of emulators and a minimal set of input configurations.  But I want to use original controllers wherever possible.  To that end, I have been spending a lot of time setting up RetroArch and the BlissBox 4-Play to play nicely together.  Ultimately I found that nearly everything works well out of the box!  If you run the retroarch-joyconfig program with a PS2 controller attached, then the default 4-play controller mapping combined with RA's default Retropad/core input mapping removed a lot of complexity.  You can swap controllers on the fly to match whatever system you are playing...and it just works.

 

But...

 

The biggest challenge that I have faced is getting this setup to play work cleanly with Nintendo 64 system.  By default, the Mupen64Plus core in RetroArch assumes that you are using an XBOX or DualShock-style controller, and goes through some strange hoops to support the N64's C-buttons.  So when you try to use a real N64 controller, it's almost unusable.

 

The below RA configuration settings allow you to cleanly use a real N64 controller connected to a BlissBox 4-Play in RetroArch/Mupen64Plus.  All of the details of what the config settings so and how to apply them are in the file.  So I won't describe them any further here :)

 

I hope this helps save other people some time and frustration.  Please try it out and if you find any issues with it, let me know, and I will update this post accordingly!

###############################################################################
# RetroArch input mapping file for using real N64 controllers in
# Mupen64Plus with a BlissBox 4-Play adapter.
# 
# The default input mapping for the Mupen64 core assumes the player is using 
# an XBOX or PS Dualshock-style controller.  Because these controllers do not 
# have enough face buttons to emulate the N64 C-buttons in addition to A & B, 
# the core provides 2 ways to send C-button input:
# 1) Retropad right analog stick
# 2) Retropad Y => C-Left, X => C-Up
#    Holding R2 overrides Retropad A & B to map B => C-Down and A => C-Right
#
# When attempting to use a real N64 controller, the R2 button override
# functionality isn't needed.  In fact, it greatly confuses the configuration.
# There are also a few additional tweaks required to improve usability.
# So this input file overrides the 'default' 4-Play input assignments 
# settings to support a real N64 controller layout without any additional
# remapping at the RA core level.
#
# Consider 'default' 4-Play input settings to be those set by 
# retroarch-joyconfig when using a BlissBox 4-Play with a PS2-DualShock 
# controller.  The following changes were applied to that config to make 
# everything play nicely together:
#
# 1) Limited C-Button input to only the right analog stick by disabling the
#    the Retropad buttons that are normally mapped to C-button functions:
#        - Retropad inputs X, Y, and R2 mapped to "nul"
# 2) Assign Retropad's right-analog inputs to the 4-Play's N64 
#    C-button assignments:
#        - Remove the default Retropad right analog inputs by 
#		   mapping to "nul"
#        - Assign Retropad right analog inputs to the real N64
#          C-button inputs
# 3) Swap the position of the A & B buttons to match the real N64 layout
# 4) Z-Trigger assignment changed from 4-Play's SELECT to L2
# 5) Disable remaining buttons that don't exist on a real N64 controller:
#        - Retropad inputs SELECT, L3, R3 mapped to "nul"
#
# In order to effectively use this configuration, you should NOT have any
# core input remapping files enabled.  Check the following settings:
#     auto_remaps_enable = "false"
#     input_remap_binds_enable = "false"
#     input_remapping_path = ""
#
# These settings can be applied by merging them into your retroarch.cfg
# file, or the per-core config if applicable.  If you do this, you need to
# disable the joypad autoconfig functionality, since the autoconfig settings
# are higher priority and will override settings included in the master
# .cfg file.  You can disable the autoconfig by changing the following
# setting:
#     input_autodetect_enable = "false"
#
# This config can also be applied through the core-specific configs.  Simply
# add these settings to "<RA_Config_Dir>\Mupen64Plus\Mupen64Plus.cfg".  RA
# will automatically look for this file and override the main .cfg settings
# with anything in there.  If you use this method, you still need to disable
# the joypad autoconfig settings as mentioned above.
#
# The final method for applying these settings is to use the append config 
# functionality from the command line: "--appendconfig file1.cfg,file2.cfg"
# Just pass the file containing these settings to that option.  If you use 
# this approach, you DO NOT need to disable the joypad autoconfig.  The
# appendconfig setting has the highest precendece, and will override all 
# other configuration settings used by RetroArch. 
###############################################################################
input_player1_b_btn = "0"
input_player1_y_btn = "nul"
input_player1_select_btn = "nul"
input_player1_start_btn = "5"
input_player1_up_btn = "10"
input_player1_down_btn = "11"
input_player1_left_btn = "12"
input_player1_right_btn = "13"
input_player1_a_btn = "1"
input_player1_x_btn = "nul"
input_player1_l_btn = "6"
input_player1_r_btn = "7"
input_player1_l2_btn = "4"
input_player1_r2_btn = "nul"
input_player1_l3_btn = "nul"
input_player1_r3_btn = "nul"
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_btn = "9"
input_player1_r_x_minus_btn = "2"
input_player1_r_y_plus_btn = "8"
input_player1_r_y_minus_btn = "3"
input_player1_r_x_plus_axis = "nul"
input_player1_r_x_minus_axis = "nul"
input_player1_r_y_plus_axis = "nul"
input_player1_r_y_minus_axis = "nul"
input_player2_b_btn = "0"
input_player2_y_btn = "nul"
input_player2_select_btn = "nul"
input_player2_start_btn = "5"
input_player2_up_btn = "10"
input_player2_down_btn = "11"
input_player2_left_btn = "12"
input_player2_right_btn = "13"
input_player2_a_btn = "1"
input_player2_x_btn = "nul"
input_player2_l_btn = "6"
input_player2_r_btn = "7"
input_player2_l2_btn = "4"
input_player2_r2_btn = "nul"
input_player2_l3_btn = "nul"
input_player2_r3_btn = "nul"
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_btn = "9"
input_player2_r_x_minus_btn = "2"
input_player2_r_y_plus_btn = "8"
input_player2_r_y_minus_btn = "3"
input_player2_r_x_plus_axis = "nul"
input_player2_r_x_minus_axis = "nul"
input_player2_r_y_plus_axis = "nul"
input_player2_r_y_minus_axis = "nul"
input_player3_b_btn = "0"
input_player3_y_btn = "nul"
input_player3_select_btn = "nul"
input_player3_start_btn = "5"
input_player3_up_btn = "10"
input_player3_down_btn = "11"
input_player3_left_btn = "12"
input_player3_right_btn = "13"
input_player3_a_btn = "1"
input_player3_x_btn = "nul"
input_player3_l_btn = "6"
input_player3_r_btn = "7"
input_player3_l2_btn = "4"
input_player3_r2_btn = "nul"
input_player3_l3_btn = "nul"
input_player3_r3_btn = "nul"
input_player3_l_x_plus_axis = "+0"
input_player3_l_x_minus_axis = "-0"
input_player3_l_y_plus_axis = "+1"
input_player3_l_y_minus_axis = "-1"
input_player3_r_x_plus_btn = "9"
input_player3_r_x_minus_btn = "2"
input_player3_r_y_plus_btn = "8"
input_player3_r_y_minus_btn = "3"
input_player3_r_x_plus_axis = "nul"
input_player3_r_x_minus_axis = "nul"
input_player3_r_y_plus_axis = "nul"
input_player3_r_y_minus_axis = "nul"
input_player4_b_btn = "0"
input_player4_y_btn = "nul"
input_player4_select_btn = "nul"
input_player4_start_btn = "5"
input_player4_up_btn = "10"
input_player4_down_btn = "11"
input_player4_left_btn = "12"
input_player4_right_btn = "13"
input_player4_a_btn = "1"
input_player4_x_btn = "nul"
input_player4_l_btn = "6"
input_player4_r_btn = "7"
input_player4_l2_btn = "4"
input_player4_r2_btn = "nul"
input_player4_l3_btn = "nul"
input_player4_r3_btn = "nul"
input_player4_l_x_plus_axis = "+0"
input_player4_l_x_minus_axis = "-0"
input_player4_l_y_plus_axis = "+1"
input_player4_l_y_minus_axis = "-1"
input_player4_r_x_plus_btn = "9"
input_player4_r_x_minus_btn = "2"
input_player4_r_y_plus_btn = "8"
input_player4_r_y_minus_btn = "3"
input_player4_r_x_plus_axis = "nul"
input_player4_r_x_minus_axis = "nul"
input_player4_r_y_plus_axis = "nul"
input_player4_r_y_minus_axis = "nul"
  • 2 weeks later...
Posted
By default, the Mupen64Plus core in RetroArch assumes that you are using an XBOX or DualShock-style controller, and goes through some strange hoops to support the N64's C-buttons.  

 

Is it that maybe they are using xinput instead of DX? Not sure it would help but x360ce could possibly translate DX to xinput in that one case. 

 

 

fsancu bb.png

  • 1 month later...
Posted

Noi, it doesn't have to do with the input software layer, but the physical layout of those gamepads (only 4 face buttons - X,Y,A,B) versus a real N64 (6 face buttons - A,B, 4xC)

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...