diff --git a/main.c b/main.c index 2752242..b6050a0 100644 --- a/main.c +++ b/main.c @@ -520,8 +520,10 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk "vsync=false\n" "; scaling filter, nearest = sharp, linear = smooth\n" "filter=nearest\n" - "; mouse sensitivity scaling\n" + "; automatic mouse sensitivity scaling\n" "adjmouse=false\n" + "; manual sensitivity scaling, 0 = disabled, 0.5 = half, 1.0 = normal\n" + "sensitivity=0.0\n" "; enable C&C/RA mouse hack\n" "mhack=true\n" , fh); @@ -607,6 +609,9 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk This->vsync = FALSE; } + GetPrivateProfileStringA("ddraw", "sensitivity", "0", tmp, sizeof(tmp), ini_path); + This->sensitivity = strtof(tmp, NULL); + This->Ref = 0; ddraw_AddRef(This); diff --git a/main.h b/main.h index 59d7348..39f86dd 100644 --- a/main.h +++ b/main.h @@ -74,6 +74,7 @@ typedef struct IDirectDrawImpl BOOL mhack; BOOL devmode; BOOL vsync; + float sensitivity; } IDirectDrawImpl; diff --git a/mouse.c b/mouse.c index f482d43..5daf9f5 100644 --- a/mouse.c +++ b/mouse.c @@ -40,7 +40,12 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) { GetCursorPos(&pt); - if(ddraw->adjmouse) + if(ddraw->sensitivity > 0 && ddraw->sensitivity < 10) + { + ddraw->cursor.x += (pt.x - ddraw->center.x) * ddraw->sensitivity; + ddraw->cursor.y += (pt.y - ddraw->center.y) * ddraw->sensitivity; + } + else if(ddraw->adjmouse) { ddraw->cursor.x += (pt.x - ddraw->center.x) * ((float)ddraw->width / ddraw->render.width); ddraw->cursor.y += (pt.y - ddraw->center.y) * ((float)ddraw->height / ddraw->render.height);