protonscr

Issue with Zuiki Mascon Switch Controller - Proton interprets the absence of a right stick as meaning the right stick is pointing continually to the left

protonopen
ValveSoftware/Proton#8362 · opened 2024-12-31 by eldomtom2 · updated 2026-07-25 · 8 comments · github
Eeldomtom2 2024-12-31 github

I am having an issue using the Zuiki Mascon Switch Controller with the game Train Crew (steam id 1618290). The Zuiki Mascon is a specialised controller designed to imitate the controls of a train. It lacks a right stick. Train Crew is programmed to support this controller natively without the use of Steam Input. The controller is recognised by Steam and the game, and in most regards works fine. However, Proton seemingly interprets the absent right stick as continually pointing fully to the left.
I can fix this problem by editing the prefix registry and creating a DWORD named "Map Controllers" in HKLM\System\CurrentControlSet\Services\winebus and setting it to 0, but this creates a new problem. It now interprets the centre of the left stick as being fully up. Moving the left stick down is interpreted as moving the stick through the full range of movement (i.e. slightly down is interpreted as slightly up and fully down is interpreted as fully down). Moving the left stick upwards leads to it being interpreted as pointing fully down regardless of position until it is moved back to the centre - it seems like the controller being moved "above fully up" causes it to loop around and become fully down.
I am using Proton Experimental.

Jjaoxford 2026-04-27 github

Still not working as of April 2026.

I tested yesterday without any workarounds. Not sure which version of Proton I used. Whichever would've been installed automatically, anyway. Same issue is that the camera spins.

I am not sure why Proton would ever need to map a 2nd stick for the Zuiki in the first place?

GGTH78NL 2026-06-06 github

Now the game Running Train is out more and more people are experiencing this problem. Please please please fix this.

Mmark-dj-eng 2026-06-08 github

Will also add that it's not been working since Train Crew (I actually setup a Windows 10 drive for my Steam Deck just to be able to use the Zuiki mascon for that and Jr East Sim, Densha De Go Final) and now that we have another train sim that it should be working with, Running Train, hopefully we can get a update!

UUrgentemente 2026-07-15 github

I found/worked out with ChatGPT a fix/workaround for this earlier this evening, as I just got my ZUIKI Mascon RED yesterday..

You'll need to adjust the parameters to match whichever particular Mascon you have , but it should only be a case of the full descriptive name, and the long 'GUID' identifier ..

So after 15-20 minutes of troubleshooting and testing the various joystick/game input layers (I'm running CachyOS ..)

ChatGPT eventually came up with.. (with a bit of help from my own IT brain and a bit of "let me just check .." questioning..)

SDL_GAMECONTROLLERCONFIG='03009a3edd3300000300000011010000,ZUIKI MasCon for Nintendo Switch RED,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,lefttrigger:a2,righttrigger:a3,platform:Linux' %command%

added it to the launch options for Train Crew, voila, no more constant left-panning camera !!

the long GUID type string ((starts 03009a3 for mine.. and descriptive name (same as I see in Steam Controller section) I got using "sdl2-jstest --list"

❯ sdl2-jstest --list
Found 1 joystick(s)

Joystick Name: 'ZUIKI MasCon for Nintendo Switch RED'
Joystick GUID: 03009a3edd3300000300000011010000
Joystick Number: 0
Number of Axes: 4
Number of Buttons: 14
Number of Hats: 1
Number of Balls: 0
GameControllerConfig:
Name: 'ZUIKI MasCon for Nintendo Switch RED'
Mapping: '03009a3edd3300000300000011010000,ZUIKI MasCon for Nintendo Switch RED,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a2,righttrigger:a3,platform:Linux,' 

It tells SDl to ignore the fake/ghost right stick which was being seen as duplicates of couple of the real inputs ,
the throttle/brake lever starts at 0 , but when you move it up/down then back to Neutral, the value is a constant 128, so SDL /other layer were masking it to 0 on first start.
I've just played a few runs on Train Crew and Running Train, with no constant camera panning :-)
(still got a couple of button mapping issues for Running Train, but nothing game breaking)

Jjoestringer 2026-07-18 github

Thanks for sharing @Urgentemente !

I have the earlier ZUIKI model with the 電車でGO! branding. I had to install sdl-jstest from AUR, and I see the following results:

❯ sdl2-jstest --list
Found 1 joystick(s)

Joystick Name:     'One Handle MasCon for Nintendo Switch'
Joystick GUID:     03001019dd3300000100000011010000
Joystick Number:    0
Number of Axes:     4
Number of Buttons: 14
Number of Hats:     1
Number of Balls:    0
GameControllerConfig:
  Name:    'One Handle MasCon for Nintendo Switch'
  Mapping: '03001019dd3300000100000011010000,One Handle MasCon for Nintendo Switch,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a2,righttrigger:a3,platform:Linux,'

The Name and GUID differ, but if I take the Mapping section, and remove the rightx:a2,righty:a3, part from the configuration, and use the resulting value for SDL_GAMECONTROLLERCONFIG, I confirm this also fixes the camera panning / axis drift issue for me on Running Train. 🎉

My final "Launch Options" under the properties for the game are:

SDL_GAMECONTROLLERCONFIG='03001019dd3300000100000011010000,One Handle MasCon for Nintendo Switch,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,lefttrigger:a2,righttrigger:a3,platform:Linux' %command%

Note that for Running Train, there are still two remaining unrelated issues:

  1. Accelerator does not properly detect the notch. Moving from 0 up through to 5 on the power axis pushes the in-game power setting immediately to 5, then back down to a lower value, then gradually back up to five as I cycle through the notches. Fortunately, the brake axis does not have the same issue.
  2. The A/B/X/Y buttons seem to toggle multiple inputs at once. The impression I get is that there is a single byte for input values for all of these buttons, with each button using a specific bit raised to determine that the button is set. However rather than the game handling each bit individually and mapping that to a control, the game checks for values exceeding some value, meaning that if you press a button that has the 0x4 value, it will also trigger the input for the control associated with the 0x2 or 0x1 value. I don't have the exact raw values in front of me, but one could probably use udev-hid-bpf to monitor and observe the values. Perhaps SDL has its own debugging facility for understanding this better.

If you have multiple controllers, make sure to disconnect the other controllers to prevent the game from getting confused about which controller to use.

UUrgentemente 2026-07-19 github

Great to hear you've got it working for your controller version as well!

Yeh, I still have the buttons making mulitiple inputs, but it's only happening under Proton (my main PC is dualboot tho I barely ever need to boot into Windows these days..),

I tried Running Train on Windows Steam and the buttons only do the expected single actions. haven't had a chance to work on that yet.
Same with the initial throttle jumping to full power, then back to whatever notch it's on once you move it again, hopefully get some time this week to debug the values etc.

UUrgentemente 2026-07-23 github

Sadly I haven't figured out the multiple-button issue yet, just tried for about 20 minutes of various tests but haven't managed to find a fix yet.
buttons under jstest2 ,evtest test etc all show single press, so it seems to be further down the 'chain' then that, difficult to debgu when there isn't a controller mapping screen in the game , even if it does detect the Mascon.

Wwatermelody2 2026-07-25 github

@joestringer At least for me, I can workaround the acceleration bug by first going full emergency break setting on the start of a new map. After that, I can smoothly accelerate notch by notch. If I don't do that, I have the exact same issue as you're describing for Running Train.

Also thanks @Urgentemente
With your help I got the camera turn bug away. Same multi-button issue, though.