Steam Controller

Steam Controller

mupen64plus guide/information
Hi!

So since I didn't feel that Project64 worked that good with the steam controller I started looking for another "better" emulator. So mupen64plus is an actively getting updated and in general ofers good compatibility/quality.

It was not easy but I managed to get it working. Download mupen64plus and place it your preferred place. First you might have to change the video plugin from rice (you need to edit mupen64plus.cfg which can be found in C:\Users\"your username"\AppData\Roaming\Mupen64Plus). I will not go into further detail, as you need to be comfortable editing ini files/finding how to do it to make it trough this guide.

So first open up InputAutoCfg.ini with wordpad or equivalent program. At the bottom add (and save)

[USB HID] 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(3) A Button = button(1) C Button R = axis(3+) C Button L = axis(3-) C Button D = axis(4+) C Button U = axis(4-) R Trig = button(5) L Trig = button(4) Mempak switch = Rumblepak switch = X Axis = axis(0-,0+) Y Axis = axis(1-,1+)

now open up mupen64plus.cfg and find the section [Input-SDL-Control1]. Make sure it look like this:

# 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 = "USB HID"

and a bit further down make sure it looks like this:

# 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(7)" Z Trig = ""axis(2+)" B Button = "button(3)" A Button = "button(1)" C Button R = "axis(3+)" C Button L = "axis(3-)" C Button D = "axis(4+)" C Button U = "axis(4-)" R Trig = "button(5)" L Trig = "button(4)" Mempak switch = "" Rumblepak switch = "" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)"

Save and close. Now add mupen64plus-ui-console.exe as a non steam game and set launch options to your game/rom full path. Start steam in BPM. Configure the controller to gamepad mode. Finally run mupen64. The steam overlay should work fine for you to tweak the SC settings to your liking.

Mupen64 can be found at http://www.mupen64plus.org/

I made a very experimental launcher for mupen64plus. I am no programmer so I can not guarantee that it works for you or that it won't make your computer burn up. It needs to be placed in the same folder as mupen64plus-ui-console.exe and it looks for games/roms in the parent folder named Roms (ex \Roms\mupen64plus-bundle-win32-2.5-new-dynarec\mupen64plus-ui-console.exe).

ESC = Quit
Enter,double click starts game (or selecting and clicking Run)

http://s18.postimg.org/uvow3u5mx/N64_Game_Launcher.png

N64GameLauncher V1.0
https://onedrive.live.com/redir?resid=2936133BCD7EFF3D!17235&authkey=!APrDKEs4FFlWBIc&ithint=file%2czip
Last edited by hulkenstrong; Feb 27, 2016 @ 5:27am
< >
Showing 1-15 of 26 comments
Jesse Dec 29, 2015 @ 10:33am 
I opened mupen64plus.cfg and didn't find any section labeled [Input-SDL-Control1]. And the last step that says "And a bit further down make sure it looks like this"? Couldn't find anything that looked like that either. If I'm supposed to just paste those values in, where do I paste them? Just under the [Input-SDL-Control1] section?
Last edited by Jesse; Dec 29, 2015 @ 10:35am
hulkenstrong Dec 30, 2015 @ 12:46am 
Originally posted by JeesyClaw:
I opened mupen64plus.cfg and didn't find any section labeled [Input-SDL-Control1]. And the last step that says "And a bit further down make sure it looks like this"? Couldn't find anything that looked like that either. If I'm supposed to just paste those values in, where do I paste them? Just under the [Input-SDL-Control1] section?

Well this is how my section looks like. Try replacing yours with mine and see if it works.
[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 = "USB HID" # 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(7)" Z Trig = ""axis(2+)" B Button = "button(3)" A Button = "button(1)" C Button R = "axis(3+)" C Button L = "axis(3-)" C Button D = "axis(4+)" C Button U = "axis(4-)" R Trig = "button(5)" L Trig = "button(4)" Mempak switch = "" Rumblepak switch = "" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)"

Also you might need to run the emulator once for the configs to be generated correctly and make sure to edit the right configs. mupen64plus.cfg lies in your users appdata folder and InputAutoCfg.ini is under the mupen64plus folder
Last edited by hulkenstrong; Dec 30, 2015 @ 1:12am
Sazo Apr 10, 2016 @ 7:49pm 
As of my posting with the latest Steam Controller update...

I gave this a try and it did not work at all for me...I should not say at all, only that the "botton(#)" mappings did not correspond to what Steam Controller was outputting to Mupen64Plus!

I spent a few hours, trial and error to find out what the buttons were that Steam is sending to Mupen64 and built a working config. I used the default Gamepad template and Mupen64 Start button as my control since I knew from any title menu what it should do. I came up with the following corresponding mappings:

button(0) = Dpad up
button(1) = Dpad down
button(2) = Dpad left
button(3) = Dpad right
button(4) = Start
button(5) = Select
button(6) = LJoy Button
button(7) = Right Pad Button
button(8) = Left Bumper
button(9) = right bumper
button(10) = A Button
button(11) = B Button
button(12) = X Button
button(13) = Y Button


"axis(2+)" = RJoy Right
"axis(2-)" = RJoy Left
"axis(3+)" = RJoy Down
"axis(3-)" = RJoy Up
"axis(4+)" = Left Trigger
"axis(5+)" = Right Trigger

After applying the above changes to the already mentioned configurations in this posting above I was able to map every Mupen64Plus button to my Steam Controller buttons! I am going to play a bit more, but here is what I have come up with:


Left Dpad = Same on N64
Left Analog Stick = Same on N64
Left/Right Bumpers = N64 L/R Triggers
Right Analog Stick = N64 C (U, D, L, R) (w/ Left Trigger Mode Shift to button style C)
Start = N64 Start
Y Button = N64 B Button
B Button = N64 A Button
Left Grip = Save to Current Slot (F5)
Right Grip = Fast Forward (F)
Select = Load Current Slot (F7)
Left Joy Button = N64 Z-Trigger

(R Trigger, RJoy Button, X & A unassigned for the moment)


To use the configuration that I have created you follow the above instruction, but with this data:



[STEAM CONTROLLER]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = button(3)
DPad L = button(2)
DPad D = button(1)
DPad U = button(0)
Start = button(4)
Z Trig = button(6)
B Button = button(13)
A Button = button(11)
C Button R = key(275) axis(2+)
C Button L = key(276) axis(2-)
C Button D = key(274) axis(3+)
C Button U = key(273) axis(3-)
R Trig = button(8)
L Trig = button(9)
Mempak switch =
Rumblepak switch =
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)



# SDL joystick name (or Keyboard)
name = "STEAM CONTROLLER"

# Digital button configuration mappings
DPad R = "button(3)"
DPad L = "button(2)"
DPad D = "button(1)"
DPad U = "button(0)"
Start = "button(4)"
Z Trig = "button(6)"
B Button = "button(13)"
A Button = "button(11)"
C Button R = "key(275) axis(2+)"
C Button L = "key(276) axis(2-)"
C Button D = "key(274) axis(3+)"
C Button U = "key(273) axis(3-)"
R Trig = "button(8)"
L Trig = "button(9)"
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = "axis(0-,0+)"
Y Axis = "axis(1-,1+)"


Then you take the following and paste into new file called "n64 gamepad (mupen64plus) (v1.1)_0.vdf" and save that file into your Steam Controller Template directory (Steam\controller_base\templates\):



"controller_mappings"
{
"version" "2"
"title" "N64 Gamepad (Mupen64Plus) (v1.1)"
"Description" "Your modified configuration for this game."
"creator" "76561197964345647"
"localization"
{
"english"
{
"title" "Gamepad"
"Description" "This template is for games that already have built-in gamepad support. Intended for dual stick games such as twin-stick shooters, side-scrollers, etc."
}
"czech"
{
"title" "Gamepad"
"Description" "Tato šablona je pro většinu her podporujících gamepad a byla navržena pro použití ve hrách využívajících dvě páčky, jakými jsou například plošinovky nebo automatové hry."
}
"danish"
{
"title" "Gamepad"
"Description" "Denne skabelon er til spil, der allerede har indbygget gamepad-understøttelse. Beregnet til spil med dobbelte styrepinde såsom twin-stick shooters, side-scrollers osv."
}
"dutch"
{
"title" "Gamepad"
"Description" "Deze template is voor spellen die al ingebouwde gamepadondersteuning hebben. Bedoeld voor dual-stick spellen zoals twin-stick-shooters, side-scrollers, etc."
}
"finnish"
{
"title" "Ohjain"
"Description" "Tämä malli on muita ohjaimia valmiiksi tukeville peleille. Se on tarkoitettu kahta sauvaa käyttäville peleille, kuten twin-stick shooterit, side-scrollerit, jne."
}
"french"
{
"title" "Manette"
"Description" "Ce modèle fonctionne pour les jeux conçus pour manettes à deux sticks tels que les jeux de type twin-stick shooter, à défilement horizontal (side-scrollers), etc."
}
"german"
{
"title" "Gamepad"
"Description" "Diese Vorlage ist für Spiele konzipiert, die bereits volle Unterstützung für Gamepads mit sich bringen. Gedacht für Zwei-Analogstick-Spiele wie Twin-Stick-Shooter, Side-Scrollers usw."
}
"hungarian"
{
"title" "Gamepad"
"Description" "Ez a sablon olyan játékokhoz való, melyek már rendelkeznek beépített gamepad-támogatással. Olyan két karos játékokhoz szánva, mint a kétkaros vagy oldalnézetes lövöldözős játékok stb."
}
"italian"
{
"title" "Controller"
"Description" "Questo modello funziona per la maggior parte dei giochi che supportano i controller in modalità nativa."
}
"japanese"
{
"title" "ゲームパッド"
}
"koreana"
{
"title" "게임패드"
"Description" "게임 패드를 지원하도록 설계된 게임들을 위한 설정입니다. 이중 스틱 슈팅 게임, 사이드 스크롤 게임 등 스틱을 두 개 쓰는 게임을 염두에 두고 만들어졌습니다."
}
"polish"
{
"title" "Kontroler"
"Description" "Ten szablon jest odpowiedni dla gier, które już mają wbudowane wsparcie dla kontrolerów. Przeznaczony dla gier obsługujących dwie gałki, m.in. twin-stick shootery, side-scrollery itp."
}
"portuguese"
{
"title" "Comando"
"Description" "Este modelo é indicado para jogos que já têm compatibilidade nativa com comando. Foi concebido para jogos de tiros que usam dois sticks, jogos de plataformas, de naves, etc."
}
"romanian"
{
"title" "Gamepad"
"Description" "Șablonul acesta este pentru jocurile care au deja suport pentru gamepad implementat. Destinat pentru jocuri dual stick, precum shooter-e twin-stick, side-scroller, etc."
}
"russian"
{
"title" "Геймпад"
"Description" "Этот шаблон подходит для большинства игр с поддержкой геймпада — например, для шутеров с видом сверху или сбоку."
}
"spanish"
{
"title" "Mando"
"Description" "Esta plantilla es para juegos que ya incluyen de serie compatibilidad con mando. Está destinada a juegos de doble stick como twin-stick shooters, side-scrollers, etc."
}
"swedish"
{
"title" "Gamepad"
"Description" "Denna mall är för spel som redan har inbyggt stöd för spelkontroller. Avsett för spel som använder två styrspakar, som twin-stick shooters och side-scrollers, etc."
}
"schinese"
{
"title" "手柄"
"Description" "该模板适用于已内置手柄支持的游戏。针对双摇杆游戏,如双摇杆射击游戏、横版过关游戏等设计。"
}
"thai"
{
"title" "เกมแพด"
}
"brazilian"
{
"title" "Controle padrão"
"Description" "Este modelo é para jogos já compatíveis com controle que usam ambas as alavancas, como jogos de nave, etc."
}
"bulgarian"
{
"title" "Геймпад"
"Description" "Този шаблон е за игри, които вече имат вградена поддръжка на геймпад. Предназначен e за игри ползващи двата стика. Като например, екшъни за два аналогови стика, странични скролери и т.н."
}
"greek"
{
"title" "Χειριστήριο"
"Description" "Αυτό το πρότυπο ορίζεται για παιχνίδια τα οποία έχουν ήδη υποστήριξη χειριστηρίου. Προορίζεται για παιχνίδια dual-stick όπως twin-stick shooters, side-scrollers, κλπ."
}
"turkish"
{
"title" "Oyun Kumandası"
"Description" "Bu şablon hali hazırda oyun içi oyun kumandası desteği ve birincil veya üçüncü kişi kontrollü kameraya sahip oyunlar içindir. Çift çubuk kullanılan oyunlar olan ikiz çubuk nişancılık, side-scroller oyunlar vb. içindir."
}
"ukrainian"
{
"title" "Ґеймпад"
"Description" "Цей шаблон для більшості ігор, в яких вже вбудовано підтримку ґеймпада. Призначено для ігор з керуванням двома стіками."
}
}
"group"
{
"id" "0"
"mode" "four_buttons"
"bindings"
{
"button_B" "xinput_button B, A Button"
"button_Y" "xinput_button Y, B Button"
}
}
"group"
{
"id" "1"
"mode" "dpad"
"bindings"
{
"dpad_north" "xinput_button dpad_up"
"dpad_south" "xinput_button dpad_down"
"dpad_east" "xinput_button dpad_right"
"dpad_west" "xinput_button dpad_left"
}
}
"group"
{
"id" "2"
"mode" "joystick_move"
"bindings"
{
"click" "xinput_button JOYSTICK_RIGHT"
}
}
"group"
{
"id" "3"
"mode" "joystick_move"
"bindings"
{
"click" "xinput_button JOYSTICK_LEFT"
}
}
"group"
{
"id" "4"
"mode" "trigger"
"bindings"
{
"click" "xinput_button TRIGGER_LEFT"
}
"settings"
{
"output_trigger" "1"
}
}
"group"
{
"id" "5"
"mode" "trigger"
"bindings"
{
"click" "xinput_button TRIGGER_RIGHT"
}
"settings"
{
"output_trigger" "2"
}
}
"group"
{
"id" "6"
"mode" "joystick_move"
"bindings"
{
"click" "xinput_button JOYSTICK_RIGHT"
}
"settings"
{
"output_joystick" "1"
}
}
"group"
{
"id" "7"
"mode" "four_buttons"
"bindings"
{
"button_A" "key_press DOWN_ARROW"
"button_B" "key_press RIGHT_ARROW"
"button_X" "key_press LEFT_ARROW"
"button_Y" "key_press UP_ARROW"
}
}
"preset"
{
"id" "0"
"name" "default"
"group_source_bindings"
{
"0" "button_diamond active"
"1" "left_trackpad active"
"2" "right_trackpad active"
"6" "right_trackpad inactive"
"7" "right_trackpad active modeshift"
"3" "joystick active"
"4" "left_trigger active"
"5" "right_trigger active"
}
"switch_bindings"
{
"bindings"
{
"button_escape" "xinput_button start"
"right_bumper" "xinput_button shoulder_right"
"left_bumper" "xinput_button shoulder_left"
"left_trigger_threshold" "mode_shift right_trackpad 7"
"button_menu" "key_press F5, Load Current Slot"
"button_back_left" "key_press F3, Save Current Slot"
"button_back_right" "key_press F, Fast Forward"
}
}
}
"settings"
{
"left_trackpad_mode" "0"
"right_trackpad_mode" "0"
}
}



I hope this is useful to those in the future trying to get the controlled and Mupen64Plus working together :)
Last edited by Sazo; Apr 11, 2016 @ 12:06am
Sazo Apr 11, 2016 @ 12:33am 
The keycode used are SDL which can be examined here:

http://web.mit.edu/6.828/include/SDL/SDL_keysym.h
Last edited by Sazo; Apr 11, 2016 @ 1:12am
morgoth322 Apr 11, 2016 @ 1:57am 
1 Set your steam controller as xbox 360 controller for mupen
2 Look for Shunyuan's DirectInput plugin v1.2
This plugin will recognize the steam controller as a 360 joystick!

Voila !
hulkenstrong Apr 11, 2016 @ 10:36am 
Great info from all! Nice to see some love for the great mupen64plus emulator.
cammelspit Apr 11, 2016 @ 11:05am 
Heh, I am likely gonna have to do this. I mean, Mupen is kind of a pain in the butt to get configured in the best of circumstances. Reminds me of some of the old school DOS NES emulators back when the whole emulation thing was unheard of. All very good info though!
Slade Dec 19, 2016 @ 11:11am 
The site where the SDL keycodes that Sazo mentioned is down. I'd like to be able to do this with a 2nd Steam Controller. Does anyone have the keycodes necessary to config a 2nd controller?
Slade Dec 19, 2016 @ 11:26am 
I found them here. http://www.mupen64plus.org/wiki/index.php?title=Mupen64Plus_Plugin_Parameters . Uses these keycodes to customize your inputs.
FUBAR Oct 26, 2017 @ 5:58pm 
Works great for controller 1. How do I set up a second controller?
Yapity Nov 3, 2017 @ 2:04pm 
I know this is pretty old, but has anyone made any more progress for this? I followed the directions in the original post and once I have it configured, I start it in big picture mode and it seems like it will work, but then my computer crashes.
cammelspit Nov 3, 2017 @ 3:57pm 
As much as I HATE to recommend it, RetroArch is probably the best way to use the SC with N64. Mupen is command line only and lacks a LOT of features you would want but probably the best N64 emulator overall, PJ64 is a right mess of a program everyone should avoid like the plague. So that Leaves RetroArch, it has a mupen core so you get its accuracy with many of the features you would be looking for in a modern emulator. I use Ra for literally SNES and N64 because the best emulator for both systems suffer from the same kind of issues. Otherwise, I say stay away from RA but in this case, it's worth using. Plus, it does work perfectly fine with the SC even under both Vulkan and OpenGL. That is just my two cents.
hulkenstrong Nov 3, 2017 @ 5:18pm 
Originally posted by Yapity:
I know this is pretty old, but has anyone made any more progress for this? I followed the directions in the original post and once I have it configured, I start it in big picture mode and it seems like it will work, but then my computer crashes.

Try first to just get mupen running. It default to keyboard then but at least you get to know if it's the emulator or the SC making your computer crash. did you change the plugin from rice? That can sometimes fix things.
Yapity Nov 4, 2017 @ 2:06pm 
Thanks so much for replying! Didn't think I'd get a response :P

Yeah running Mupen64 before I changed the config files works perfectly (except of course that the steam controls are all messed up). It only crashes after I have changed the config files. I have double triple checked that I changed them correctly and didn't erase anything by accident.



Originally posted by cammelspit:
As much as I HATE to recommend it, RetroArch is probably the best way to use the SC with N64. Mupen is command line only and lacks a LOT of features you would want but probably the best N64 emulator overall, PJ64 is a right mess of a program everyone should avoid like the plague. So that Leaves RetroArch, it has a mupen core so you get its accuracy with many of the features you would be looking for in a modern emulator. I use Ra for literally SNES and N64 because the best emulator for both systems suffer from the same kind of issues. Otherwise, I say stay away from RA but in this case, it's worth using. Plus, it does work perfectly fine with the SC even under both Vulkan and OpenGL. That is just my two cents.

I have RetroArch installed as well because I read somewhere else that it worked, but it has the same issue as when I run Mupen64 without the config changes. It essentially treats the SC as the keyboard. How do you get RetroArch to work with the SC?
cammelspit Nov 4, 2017 @ 4:47pm 
just use a gamepad template instead of a KB/M template. I would say both emulators, that is likely your problem. Is the overlay working properly?
< >
Showing 1-15 of 26 comments
Per page: 1530 50

Date Posted: Dec 8, 2015 @ 4:55am
Posts: 26