_dump_DIRAMPFORCE(eff->lpvTypeSpecificParams);
}
} else if (type == DIEFT_CONDITION) {
- if (eff->cbTypeSpecificParams != sizeof(DICONDITION)) {
- WARN("Effect claims to be a condition but the type-specific params are the wrong size!\n");
- } else {
+ if (eff->cbTypeSpecificParams == sizeof(DICONDITION)) {
_dump_DICONDITION(eff->lpvTypeSpecificParams);
+ } else if (eff->cbTypeSpecificParams == 2 * sizeof(DICONDITION)) {
+ DICONDITION *condition = eff->lpvTypeSpecificParams;
+ _dump_DICONDITION(&condition[0]);
+ _dump_DICONDITION(&condition[1]);
+ } else {
+ WARN("Effect claims to be a condition but the type-specific params are the wrong size!\n");
}
} else if (type == DIEFT_CUSTOMFORCE) {
if (eff->cbTypeSpecificParams != sizeof(DICUSTOMFORCE)) {
case (DWORD_PTR)DIPROP_RANGE: {
LPCDIPROPRANGE pr = (LPCDIPROPRANGE)ph;
if (ph->dwHow == DIPH_DEVICE) {
+
+ /* Many games poll the joystick immediately after setting the range
+ * for calibration purposes, so the old values need to be remapped
+ * to the new range before it does so */
+
TRACE("proprange(%d,%d) all\n", pr->lMin, pr->lMax);
for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++) {
TRACE("proprange(%d,%d) obj=%d\n", pr->lMin, pr->lMax, obj);
if (obj >= 0) {
- /*ePSXe polls the joystick immediately after setting the range for calibration purposes, so the old values need to be remapped to the new range before it does so*/
-
remap_props.lDevMin = This->props[obj].lMin;
remap_props.lDevMax = This->props[obj].lMax;
remap_props.lMin = pr->lMin;
remap_props.lMax = pr->lMax;
- switch (ph->dwObj) {
+ switch (This->base.data_format.wine_df->rgodf[obj].dwOfs) {
case DIJOFS_X : This->js.lX = joystick_map_axis(&remap_props, This->js.lX); break;
case DIJOFS_Y : This->js.lY = joystick_map_axis(&remap_props, This->js.lY); break;
case DIJOFS_Z : This->js.lZ = joystick_map_axis(&remap_props, This->js.lZ); break;
void _dump_DIDEVCAPS(const DIDEVCAPS *lpDIDevCaps)
{
int type = GET_DIDEVICE_TYPE(lpDIDevCaps->dwDevType);
- const char *str;
+ const char *str, *hid = "";
TRACE("dwSize: %d\n", lpDIDevCaps->dwSize);
TRACE("dwFlags: %08x\n", lpDIDevCaps->dwFlags);
switch(type)
DEBUG_TYPE(DIDEVTYPE_MOUSE);
DEBUG_TYPE(DIDEVTYPE_KEYBOARD);
DEBUG_TYPE(DIDEVTYPE_JOYSTICK);
- DEBUG_TYPE(DIDEVTYPE_HID);
/* Direct X >= 8 definitions */
DEBUG_TYPE(DI8DEVTYPE_DEVICE);
DEBUG_TYPE(DI8DEVTYPE_MOUSE);
default: str = "UNKNOWN";
}
- TRACE("dwDevType: %08x %s\n", lpDIDevCaps->dwDevType, str);
+ if (lpDIDevCaps->dwDevType & DIDEVTYPE_HID)
+ hid = " (HID)";
+
+ TRACE("dwDevType: %08x %s%s\n", lpDIDevCaps->dwDevType, str, hid);
TRACE("dwAxes: %d\n", lpDIDevCaps->dwAxes);
TRACE("dwButtons: %d\n", lpDIDevCaps->dwButtons);
TRACE("dwPOVs: %d\n", lpDIDevCaps->dwPOVs);
res = IDirectInputDevice2WImpl_GetObjectInfo(iface, pdidoi, dwObj, dwHow);
if (res != DI_OK) return res;
- if (pdidoi->dwType & DIDFT_AXIS)
+ if (pdidoi->dwType & DIDFT_AXIS) {
sprintfW(pdidoi->tszName, axisW, DIDFT_GETINSTANCE(pdidoi->dwType));
- else if (pdidoi->dwType & DIDFT_POV)
+ pdidoi->dwFlags |= DIDOI_ASPECTPOSITION;
+ } else if (pdidoi->dwType & DIDFT_POV)
sprintfW(pdidoi->tszName, povW, DIDFT_GETINSTANCE(pdidoi->dwType));
else if (pdidoi->dwType & DIDFT_BUTTON)
sprintfW(pdidoi->tszName, buttonW, DIDFT_GETINSTANCE(pdidoi->dwType));
}
break;
}
+ case (DWORD_PTR) DIPROP_PRODUCTNAME:
case (DWORD_PTR) DIPROP_INSTANCENAME: {
DIPROPSTRING *ps = (DIPROPSTRING*) pdiph;
DIDEVICEINSTANCEW didev;
didev.dwSize = sizeof(didev);
IDirectInputDevice_GetDeviceInfo(iface, &didev);
- lstrcpynW(ps->wsz, didev.tszInstanceName, MAX_PATH);
+ if (LOWORD(rguid) == (DWORD_PTR) DIPROP_PRODUCTNAME)
+ lstrcpynW(ps->wsz, didev.tszProductName, MAX_PATH);
+ else
+ lstrcpynW(ps->wsz, didev.tszInstanceName, MAX_PATH);
return DI_OK;
}