diff -u /tmp/wine-0.9.45/dlls/dinput/joystick_linux.c ./joystick_linux.c --- /tmp/wine-0.9.45/dlls/dinput/joystick_linux.c 2007-09-14 19:30:55.000000000 +0200 +++ ./joystick_linux.c 2007-09-20 17:02:15.000000000 +0200 @@ -503,6 +503,7 @@ for (i = 0; i < newDevice->buttons; i++) { memcpy(&df->rgodf[idx], &c_dfDIJoystick2.rgodf[i + 12], df->dwObjSize); + df->rgodf[idx].pguid = &GUID_Button; // some games require the GUID to be GUID_Button df->rgodf[idx++].dwType = DIDFT_MAKEINSTANCE(i) | DIDFT_PSHBUTTON; } newDevice->base.data_format.wine_df = df; diff -u /tmp/wine-0.9.45/dlls/dinput/joystick_linuxinput.c ./joystick_linuxinput.c --- /tmp/wine-0.9.45/dlls/dinput/joystick_linuxinput.c 2007-09-14 19:30:55.000000000 +0200 +++ ./joystick_linuxinput.c 2007-09-20 17:02:15.000000000 +0200 @@ -453,6 +453,7 @@ memcpy(&df->rgodf[idx], &c_dfDIJoystick2.rgodf[newDevice->numButtons + WINE_JOYSTICK_MAX_AXES + WINE_JOYSTICK_MAX_POVS], df->dwObjSize); newDevice->buttons[i] = 0x80 | newDevice->numButtons; + df->rgodf[idx].pguid = &GUID_Button; // some games require the GUID to be GUID_Button df->rgodf[idx++].dwType = DIDFT_MAKEINSTANCE(newDevice->numButtons++) | DIDFT_PSHBUTTON; } df->dwNumObjs = idx;