diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java index 76925a1429..1194e1f56a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java @@ -43,6 +43,8 @@ public enum BooleanSetting implements AbstractBooleanSetting MAIN_ACCURATE_CPU_CACHE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AccurateCPUCache", false), MAIN_SYNC_GPU(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SyncGPU", false), + MAIN_FAST_DISC_SPEED(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "FastDiscSpeed", + false), MAIN_OVERCLOCK_ENABLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "OverclockEnable", false), MAIN_RAM_OVERRIDE_ENABLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "RAMOverrideEnable", false), diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java index ada1e0e000..3604d53087 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java @@ -765,6 +765,11 @@ public final class SettingsFragmentPresenter R.string.custom_rtc_enable, R.string.custom_rtc_description)); sl.add(new DateTimeChoiceSetting(mContext, StringSetting.MAIN_CUSTOM_RTC_VALUE, R.string.set_custom_rtc, 0)); + + sl.add(new HeaderSetting(mContext, R.string.misc_settings, 0)); + sl.add(new InvertedSwitchSetting(mContext, BooleanSetting.MAIN_FAST_DISC_SPEED, + R.string.emulate_disc_speed, + R.string.emulate_disc_speed_description)); } private void addSerialPortSubSettings(ArrayList sl, int serialPort1Type) diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index dafc82e4ed..7fc3483efc 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -416,6 +416,9 @@ Set Custom RTC Select RTC Date Select RTC Time + Misc Settings + Emulate Disc Speed + Enable emulated disc speed. Disabling this can cause crashes and other problems in some games. Log diff --git a/Source/Core/DolphinQt/Config/GameConfigEdit.cpp b/Source/Core/DolphinQt/Config/GameConfigEdit.cpp index d66c8db95e..2d03d396f6 100644 --- a/Source/Core/DolphinQt/Config/GameConfigEdit.cpp +++ b/Source/Core/DolphinQt/Config/GameConfigEdit.cpp @@ -38,8 +38,8 @@ GameConfigEdit::GameConfigEdit(QWidget* parent, QString path, bool read_only) "cause issues. Defaults to True")); AddDescription(QStringLiteral("FastDiscSpeed"), - tr("Shortens loading times but may break some games. Can have negative effects on " - "performance. Defaults to False")); + tr("Emulate the disc speed of real hardware. Disabling can cause instability. " + "Defaults to True")); AddDescription(QStringLiteral("MMU"), tr("Controls whether or not the Memory Management Unit " "should be emulated fully. Few games require it.")); diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp index 02f460507b..8fe2355143 100644 --- a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp +++ b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp @@ -88,7 +88,7 @@ void GameConfigWidget::CreateWidgets() m_enable_mmu = new QCheckBox(tr("Enable MMU")); m_enable_fprf = new QCheckBox(tr("Enable FPRF")); m_sync_gpu = new QCheckBox(tr("Synchronize GPU thread")); - m_enable_fast_disc = new QCheckBox(tr("Speed up Disc Transfer Rate")); + m_enable_fast_disc = new QCheckBox(tr("Emulate Disc Speed")); m_use_dsp_hle = new QCheckBox(tr("DSP HLE (fast)")); m_deterministic_dual_core = new QComboBox; @@ -102,8 +102,9 @@ void GameConfigWidget::CreateWidgets() "games. (ON = Compatible, OFF = Fast)")); m_sync_gpu->setToolTip(tr("Synchronizes the GPU and CPU threads to help prevent random freezes " "in Dual core mode. (ON = Compatible, OFF = Fast)")); - m_enable_fast_disc->setToolTip(tr("Enable fast disc access. This can cause crashes and other " - "problems in some games. (ON = Fast, OFF = Compatible)")); + m_enable_fast_disc->setToolTip(tr("Enable emulated disc speed. Disabling this can cause crashes " + "and other problems in some games. " + "(ON = Compatible, OFF = Unlocked)")); core_layout->addWidget(m_enable_dual_core, 0, 0); core_layout->addWidget(m_enable_mmu, 1, 0); @@ -221,13 +222,22 @@ void GameConfigWidget::LoadCheckBox(QCheckBox* checkbox, const std::string& sect const std::string& key) { bool checked; + if (key == "FastDiscSpeed") + { + if (m_gameini_local.GetOrCreateSection(section)->Get("FastDiscSpeed", &checked)) + return checkbox->setCheckState(!checked ? Qt::Checked : Qt::Unchecked); - if (m_gameini_local.GetOrCreateSection(section)->Get(key, &checked)) - return checkbox->setCheckState(checked ? Qt::Checked : Qt::Unchecked); - - if (m_gameini_default.GetOrCreateSection(section)->Get(key, &checked)) - return checkbox->setCheckState(checked ? Qt::Checked : Qt::Unchecked); + if (m_gameini_default.GetOrCreateSection(section)->Get("FastDiscSpeed", &checked)) + return checkbox->setCheckState(!checked ? Qt::Checked : Qt::Unchecked); + } + else + { + if (m_gameini_local.GetOrCreateSection(section)->Get(key, &checked)) + return checkbox->setCheckState(checked ? Qt::Checked : Qt::Unchecked); + if (m_gameini_default.GetOrCreateSection(section)->Get(key, &checked)) + return checkbox->setCheckState(checked ? Qt::Checked : Qt::Unchecked); + } checkbox->setCheckState(Qt::PartiallyChecked); } @@ -248,6 +258,12 @@ void GameConfigWidget::SaveCheckBox(QCheckBox* checkbox, const std::string& sect bool checked = checkbox->checkState() == Qt::Checked; + if (key == "FastDiscSpeed") + { + m_gameini_local.GetOrCreateSection(section)->Set(key, !checked); + return; + } + if (m_gameini_default.Exists(section, key)) { bool default_value;