@@ -722,6 +722,16 @@ static void check_variables(CoreParameter &coreParam)
722
722
g_Config.iButtonPreference = PSP_SYSTEMPARAM_BUTTON_CIRCLE;
723
723
}
724
724
725
+ var.key = " ppsspp_analog_is_circular" ;
726
+ if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value )
727
+ {
728
+ if (!strcmp (var.value , " disabled" ))
729
+ g_Config.bAnalogIsCircular = false ;
730
+ else
731
+ g_Config.bAnalogIsCircular = true ;
732
+ }
733
+
734
+
725
735
var.key = " ppsspp_internal_resolution" ;
726
736
if (environ_cb (RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value )
727
737
{
@@ -1534,6 +1544,31 @@ static void retro_input(void)
1534
1544
float y_left = input_state_cb (0 , RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y) / -32767 .0f ;
1535
1545
float x_right = input_state_cb (0 , RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 32767 .0f ;
1536
1546
float y_right = input_state_cb (0 , RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / -32767 .0f ;
1547
+
1548
+ __CtrlSetAnalogXY (CTRL_STICK_LEFT, x_left, y_left);
1549
+ __CtrlSetAnalogXY (CTRL_STICK_RIGHT, x_right, y_right);
1550
+
1551
+ // Analog circle vs square gate compensation
1552
+ // copied from ControlMapper.cpp's ConvertAnalogStick function
1553
+ const bool isCircular = g_Config.bAnalogIsCircular ;
1554
+
1555
+ float norm = std::max (fabsf (x_left), fabsf (y_left));
1556
+
1557
+ if (norm == 0 .0f )
1558
+ return ;
1559
+
1560
+ if (isCircular) {
1561
+ float newNorm = sqrtf (x_left * x_left + y_left * y_left);
1562
+ float factor = newNorm / norm;
1563
+ x_left *= factor;
1564
+ y_left *= factor;
1565
+ norm = newNorm;
1566
+ }
1567
+
1568
+ float mappedNorm = norm;
1569
+ x_left = std::clamp (x_left / norm * mappedNorm, -1 .0f , 1 .0f );
1570
+ y_left = std::clamp (y_left / norm * mappedNorm, -1 .0f , 1 .0f );
1571
+
1537
1572
__CtrlSetAnalogXY (CTRL_STICK_LEFT, x_left, y_left);
1538
1573
__CtrlSetAnalogXY (CTRL_STICK_RIGHT, x_right, y_right);
1539
1574
}
0 commit comments