It's pretty much done, there is only
Convert "button X" from old save game with new mapping which is not finished yet.
For now there are some issues :
Convert "button X" from old save game with new mapping I just discovered that in ROTH SE "
button" is hard coded in Lua and it's a problem when you bind a joypad button to a command (now button strings are checked):
[Solarus] [73860] Error: In on_joypad_button_pressed: scripts/menus/pause_commands.lua:65: bad argument #2 to set_command_joypad_binding (Invalid joypad string: 'button 6') I will see if I can do something about it, but I'm not sure if I can so it may be require to update ROTH SE with a new Lua function like "
string get_joypad_button_string(int button)".
Map both left joystick (axis) and dpad (hat) to directions. If you map the right joystick for directions, both joysticks + dpad will work for directions (as expected).
The problem is if your left joystick is quite sensible an event can be emitted while you are moving with the right one and the hero will stop.
I tried with my xbox one controller and it's really annoying. (with my 360 gamepad it's ok)
There is at least 3 solutions :
- We don't care, no one will do this and it's not a bug.
- I remove it
- Add something which only accept one joystick for directions (it's a pain in the ass but it should work)
Try to create a default (SDL) mapping if the controller is not supported It's maybe useless (I didn't tried to do it), for example my xbox one controller get this mapping (which is correct) :
00000000000000000000000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3It's weird because I don't use xinput (gamepads are disabled in xorg) and as expected xinput doesn't return it.
My gamepad uid is "
030000005e040000d102000002010000" (which is neither in SDL source nor in gamecontrollerdb) and the mapping returns "
00000000000000000000000000000000" which is why I guess (maybe I'm wrong) SDL already try to create a mapping.
So I will not add it.
I will try to finish it this week end.