https://bugs.winehq.org/show_bug.cgi?id=38997
Bug ID: 38997 Summary: Non-deterministic device id assignment when using more than one joystick/gamepad (multiplayer). Unable to deactivate joystick through registry or wine control applet Product: Wine Version: 1.7.48 Hardware: x86 OS: Mac OS X Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-dinput Assignee: wine-bugs@winehq.org Reporter: spellbound42@gmx.de
Using OSX Yosemite with 2-3 gamepads (a Thrustmaster, a Saiek, and a virtual one from ControllerMate). Each of them (isolated) working well with wine.
Problem: Non-deterministic assignment of device ids when more than one of them is connected.
For example in one wine session the Thrustmaster is referred as 'Joystick 0' (-> wine control applet) in the next session its the Saitek that is getting id 0 - without changing anything between the sessions. That makes it impossible to have a stable multiplayer joystick configuration for games that rely on a stable order for the devices. It makes it impossible too to use a virtual joystick with MAME, because sometimes its JOY1 and sometimes its JOY2. Furthermore it is not possible to deactivate a joystick device through the registry or wine control respectively. That would be a workaround for using the virtual controller with MAME - i.e. hide the physical controller that drives the virtual one. Looking at the source code the latter issue seems quite clear, because in dinput/joystick_osx.c::find_osx_devices() there is missing a code snippet like it is implemented in the corresponding function in joystick_linux.c: if (device_disabled_registry(..)) { close(...); continue; } ... ok, deactivation would be useless, if its non-deterministic, which one is deactivated ... I think the id assignment bug/problem could at least be improved by sorting the device list by product names before assigning the ids. But hopefully there exists a more clever fix/solution that is closer to the root cause.