X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fplugin_lib.c;h=8546c92f43d77d6584347e369cb3a11cf7033b41;hp=d306cc4ffeffad229e3418047013bfb826c81b36;hb=cc8ae53ee4b7c36540b616e5b9bd16a10efd168a;hpb=2c5d0a55b2b48b33f6d15b59d6f04a06c90b2ab5 diff --git a/frontend/plugin_lib.c b/frontend/plugin_lib.c index d306cc4f..8546c92f 100644 --- a/frontend/plugin_lib.c +++ b/frontend/plugin_lib.c @@ -435,12 +435,25 @@ void pl_switch_dispmode(void) * more square-like analogs in PSX */ static void update_analog_nub_adjust(int *x_, int *y_) { - static const int scale[] = { 0, 0, 0, 12, 30, 60, 75, 60, 60 }; - int x = *x_; - int y = *y_; - - x += x * scale[abs(y) / 16] >> 8; - y += y * scale[abs(x) / 16] >> 8; + const int d = 16; + static const int scale[] = + { 0 - d*2, 0 - d*2, 0 - d*2, 12 - d*2, + 30 - d*2, 60 - d*2, 75 - d*2, 60 - d*2, 60 - d*2 }; + int x = abs(*x_); + int y = abs(*y_); + int scale_x = scale[y / 16]; + int scale_y = scale[x / 16]; + + if (x) { + x += d + (x * scale_x >> 8); + if (*x_ < 0) + x = -x; + } + if (y) { + y += d + (y * scale_y >> 8); + if (*y_ < 0) + y = -y; + } *x_ = x; *y_ = y;