mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-27 08:05:41 +00:00
AnalogController: Use range for large motor, add bias
Seems the bias is needed for FF8.
This commit is contained in:
parent
67d0bbedb1
commit
debfd53618
|
@ -138,7 +138,12 @@ u32 AnalogController::GetVibrationMotorCount() const
|
|||
float AnalogController::GetVibrationMotorStrength(u32 motor)
|
||||
{
|
||||
DebugAssert(motor < NUM_MOTORS);
|
||||
return static_cast<float>(m_motor_state[motor]) * (1.0f / 255.0f);
|
||||
if (m_motor_state[motor] == 0)
|
||||
return 0.0f;
|
||||
|
||||
return static_cast<float>(
|
||||
std::min<u32>(static_cast<u32>(m_motor_state[motor]) + static_cast<u32>(m_rumble_bias), 255)) /
|
||||
255.0f;
|
||||
}
|
||||
|
||||
void AnalogController::ResetTransferState()
|
||||
|
@ -282,7 +287,7 @@ bool AnalogController::Transfer(const u8 data_in, u8* data_out)
|
|||
case State::GetStateButtonsMSB:
|
||||
{
|
||||
if (m_rumble_unlocked)
|
||||
SetMotorState(0, (data_in != 0) ? 255 : 0);
|
||||
SetMotorState(0, data_in);
|
||||
|
||||
*data_out = Truncate8(m_button_state >> 8);
|
||||
m_state = m_analog_mode ? State::GetStateRightAxisX : State::Idle;
|
||||
|
@ -500,7 +505,7 @@ u32 AnalogController::StaticGetVibrationMotorCount()
|
|||
|
||||
Controller::SettingList AnalogController::StaticGetSettings()
|
||||
{
|
||||
static constexpr std::array<SettingInfo, 2> settings = {
|
||||
static constexpr std::array<SettingInfo, 3> settings = {
|
||||
{{SettingInfo::Type::Boolean, "AutoEnableAnalog", TRANSLATABLE("AnalogController", "Enable Analog Mode on Reset"),
|
||||
TRANSLATABLE("AnalogController", "Automatically enables analog mode when the console is reset/powered on."),
|
||||
"false"},
|
||||
|
@ -509,7 +514,11 @@ Controller::SettingList AnalogController::StaticGetSettings()
|
|||
"AnalogController",
|
||||
"Sets the analog stick axis scaling factor. A value between 1.30 and 1.40 is recommended when using recent "
|
||||
"controllers, e.g. DualShock 4, Xbox One Controller."),
|
||||
"1.00f", "0.01f", "1.50f", "0.01f"}}};
|
||||
"1.00f", "0.01f", "1.50f", "0.01f"},
|
||||
{SettingInfo::Type::Integer, "VibrationBias", TRANSLATABLE("AnalogController", "Vibration Bias"),
|
||||
TRANSLATABLE("AnalogController", "Sets the rumble bias value. If rumble in some games is too weak or not "
|
||||
"functioning, try increasing this value."),
|
||||
"8", "0", "255", "1"}}};
|
||||
|
||||
return SettingList(settings.begin(), settings.end());
|
||||
}
|
||||
|
@ -518,4 +527,6 @@ void AnalogController::LoadSettings(const char* section)
|
|||
{
|
||||
Controller::LoadSettings(section);
|
||||
m_auto_enable_analog = g_host_interface->GetBoolSettingValue(section, "AutoEnableAnalog", false);
|
||||
m_rumble_bias =
|
||||
static_cast<u8>(std::min<u32>(g_host_interface->GetIntSettingValue(section, "VibrationBias", false), 255));
|
||||
}
|
||||
|
|
|
@ -135,6 +135,7 @@ private:
|
|||
u32 m_index;
|
||||
|
||||
bool m_auto_enable_analog = false;
|
||||
u8 m_rumble_bias = 8;
|
||||
|
||||
bool m_analog_mode = false;
|
||||
bool m_analog_locked = false;
|
||||
|
|
Loading…
Reference in a new issue