From 6d4d02a404f3d711eb7134d0f557273e0590a6f8 Mon Sep 17 00:00:00 2001 From: sickc Date: Fri, 14 Sep 2018 14:40:02 +0800 Subject: [PATCH] taken2009's FMV-hack --- src/citra_qt/configuration/config.cpp | 4 ++++ .../configuration/configure_graphics.cpp | 6 +++++ .../configuration/configure_graphics.ui | 24 +++++++++++++++++++ src/core/arm/dynarmic/arm_dynarmic.cpp | 7 +++++- src/core/settings.h | 2 ++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index ac2cb99be8a2..be79034a4895 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -111,6 +111,8 @@ void Config::ReadValues() { Settings::values.frame_limit = ReadSetting("frame_limit", 100).toInt(); Settings::values.use_format_reinterpret_hack = ReadSetting("use_format_reinterpret_hack", true).toBool(); + Settings::values.FMV_hack = qt_config->value("FMV_hack", false).toBool(); + Settings::values.AddTicks = qt_config->value("AddTicks", 16000).toInt(); Settings::values.bg_red = ReadSetting("bg_red", 0.0).toFloat(); Settings::values.bg_green = ReadSetting("bg_green", 0.0).toFloat(); @@ -383,6 +385,8 @@ void Config::SaveValues() { WriteSetting("use_frame_limit", Settings::values.use_frame_limit, true); WriteSetting("frame_limit", Settings::values.frame_limit, 100); WriteSetting("use_format_reinterpret_hack", Settings::values.use_format_reinterpret_hack, true); + WriteSetting("FMV_hack", Settings::values.FMV_hack, false); + WriteSetting("AddTicks", Settings::values.AddTicks, 16000); // Cast to double because Qt's written float values are not human-readable WriteSetting("bg_red", (double)Settings::values.bg_red, 0.0); diff --git a/src/citra_qt/configuration/configure_graphics.cpp b/src/citra_qt/configuration/configure_graphics.cpp index 1d4ac2887c7a..77e4c1ac9086 100644 --- a/src/citra_qt/configuration/configure_graphics.cpp +++ b/src/citra_qt/configuration/configure_graphics.cpp @@ -22,6 +22,8 @@ ConfigureGraphics::ConfigureGraphics(QWidget* parent) ui->frame_limit->setEnabled(Settings::values.use_frame_limit); connect(ui->toggle_frame_limit, &QCheckBox::stateChanged, ui->frame_limit, &QSpinBox::setEnabled); + ui->AddTicks->setEnabled(Settings::values.FMV_hack); + connect(ui->FMV_hack, &QCheckBox::stateChanged, ui->AddTicks, &QSpinBox::setEnabled); ui->layoutBox->setEnabled(!Settings::values.custom_layout); @@ -74,6 +76,8 @@ void ConfigureGraphics::setConfiguration() { Settings::values.bg_blue); ui->bg_button->setStyleSheet( QString("QPushButton { background-color: %1 }").arg(bg_color.name())); + ui->FMV_hack->setChecked(Settings::values.FMV_hack); + ui->AddTicks->setValue(Settings::values.AddTicks); } void ConfigureGraphics::applyConfiguration() { @@ -96,6 +100,8 @@ void ConfigureGraphics::applyConfiguration() { Settings::values.bg_red = static_cast(bg_color.redF()); Settings::values.bg_green = static_cast(bg_color.greenF()); Settings::values.bg_blue = static_cast(bg_color.blueF()); + Settings::values.FMV_hack = ui->FMV_hack->isChecked(); + Settings::values.AddTicks = ui->AddTicks->value(); } void ConfigureGraphics::retranslateUi() { diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui index 5e997643819c..b172264a62a4 100644 --- a/src/citra_qt/configuration/configure_graphics.ui +++ b/src/citra_qt/configuration/configure_graphics.ui @@ -34,6 +34,30 @@ + + + + + + FMV Hack (CoreTiming AddTicks) + + + + + + + 1 + + + 999999 + + + 16000 + + + + + diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 4220ebd3c150..903a424fffdc 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -14,6 +14,7 @@ #include "core/core_timing.h" #include "core/hle/kernel/svc.h" #include "core/memory.h" +#include "core/settings.h" class DynarmicThreadContext final : public ARM_Interface::ThreadContext { public: @@ -130,7 +131,11 @@ class DynarmicUserCallbacks final : public Dynarmic::A32::UserCallbacks { } void AddTicks(std::uint64_t ticks) override { - CoreTiming::AddTicks(ticks); + if (Settings::values.FMV_hack) { + CoreTiming::AddTicks(Settings::values.AddTicks); + } else { + CoreTiming::AddTicks(ticks); + } } std::uint64_t GetTicksRemaining() override { s64 ticks = CoreTiming::GetDowncount(); diff --git a/src/core/settings.h b/src/core/settings.h index a9533da212fb..29e8c06d41f4 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -129,6 +129,8 @@ struct Values { bool use_format_reinterpret_hack; bool use_frame_limit; u16 frame_limit; + bool FMV_hack; + u16 AddTicks; LayoutOption layout_option; bool swap_screen;