Merge branch 'game-warnings'
Closes #55 Signed-off-by: swurl <swurl@swurl.xyz>
This commit is contained in:
commit
a8f105d4ff
2 changed files with 62 additions and 2 deletions
|
@ -88,6 +88,7 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual
|
||||||
#include <QtConcurrent/QtConcurrent>
|
#include <QtConcurrent/QtConcurrent>
|
||||||
|
|
||||||
#ifdef HAVE_SDL2
|
#ifdef HAVE_SDL2
|
||||||
|
#include <QCheckBox>
|
||||||
#include <SDL.h> // For SDL ScreenSaver functions
|
#include <SDL.h> // For SDL ScreenSaver functions
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -199,6 +200,14 @@ enum class CalloutFlag : uint32_t {
|
||||||
DRDDeprecation = 0x2,
|
DRDDeprecation = 0x2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some games perform worse or straight-up don't work with updates,
|
||||||
|
* so this tracks which games are bad in this regard.
|
||||||
|
*/
|
||||||
|
static const QList<u64> bad_update_games{
|
||||||
|
0x0100F2C0115B6000 // Tears of the Kingdom
|
||||||
|
};
|
||||||
|
|
||||||
const int GMainWindow::max_recent_files_item;
|
const int GMainWindow::max_recent_files_item;
|
||||||
|
|
||||||
static void RemoveCachedContents() {
|
static void RemoveCachedContents() {
|
||||||
|
@ -1778,6 +1787,56 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa
|
||||||
std::make_unique<QtWebBrowser>(*this), // Web Browser
|
std::make_unique<QtWebBrowser>(*this), // Web Browser
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/** Game Updates check */
|
||||||
|
|
||||||
|
// yuzu's configuration doesn't actually support lists so this is a bit hacky
|
||||||
|
QSettings settings;
|
||||||
|
QStringList currentIgnored = settings.value("ignoredBadUpdates", {}).toStringList();
|
||||||
|
|
||||||
|
for (const u64 id : bad_update_games) {
|
||||||
|
const bool ignored = currentIgnored.contains(QString::number(id));
|
||||||
|
|
||||||
|
if (params.program_id == id && !ignored) {
|
||||||
|
QMessageBox *msg = new QMessageBox(this);
|
||||||
|
msg->setWindowTitle(tr("Game Updates Warning"));
|
||||||
|
msg->setIcon(QMessageBox::Warning);
|
||||||
|
msg->setText(tr("The game you are trying to launch is known to have performance or booting "
|
||||||
|
"issues when updates are applied. It's recommended to disable any updates "
|
||||||
|
"to this game before attempting to launch, or switch to an earlier update. "
|
||||||
|
"If you don't have any updates installed or enabled, you can safely ignore "
|
||||||
|
"this message.<br><br>Press \"OK\" to continue launching, or \"Cancel\" to "
|
||||||
|
"cancel the launch."));
|
||||||
|
|
||||||
|
msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
|
||||||
|
|
||||||
|
QCheckBox *dontShowAgain = new QCheckBox(msg);
|
||||||
|
dontShowAgain->setText(tr("Don't show again for this game"));
|
||||||
|
msg->setCheckBox(dontShowAgain);
|
||||||
|
|
||||||
|
int result = msg->exec();
|
||||||
|
|
||||||
|
// wtf
|
||||||
|
QMessageBox::ButtonRole role = msg->buttonRole(msg->button((QMessageBox::StandardButton) result));
|
||||||
|
|
||||||
|
switch (role) {
|
||||||
|
|
||||||
|
case QMessageBox::RejectRole:
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case QMessageBox::AcceptRole:
|
||||||
|
default:
|
||||||
|
if (dontShowAgain->isChecked()) {
|
||||||
|
currentIgnored << QString::number(params.program_id);
|
||||||
|
|
||||||
|
settings.setValue("ignoredBadUpdates", currentIgnored);
|
||||||
|
settings.sync();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Exec */
|
||||||
const Core::SystemResultStatus result{
|
const Core::SystemResultStatus result{
|
||||||
system->Load(*render_window, filename.toStdString(), params)};
|
system->Load(*render_window, filename.toStdString(), params)};
|
||||||
|
|
||||||
|
@ -4649,6 +4708,7 @@ void GMainWindow::UpdateStatusBar() {
|
||||||
} else {
|
} else {
|
||||||
emu_speed_label->setText(tr("Speed: %1%").arg(results.emulation_speed * 100.0, 0, 'f', 0));
|
emu_speed_label->setText(tr("Speed: %1%").arg(results.emulation_speed * 100.0, 0, 'f', 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
game_fps_label->setText(
|
game_fps_label->setText(
|
||||||
tr("Game: %1 FPS").arg(std::round(results.average_game_fps), 0, 'f', 0) + tr(Settings::values.use_speed_limit ? " (Unlocked)" : ""));
|
tr("Game: %1 FPS").arg(std::round(results.average_game_fps), 0, 'f', 0) + tr(Settings::values.use_speed_limit ? " (Unlocked)" : ""));
|
||||||
|
|
||||||
|
@ -5255,7 +5315,7 @@ int main(int argc, char* argv[]) {
|
||||||
Common::ConfigureNvidiaEnvironmentFlags();
|
Common::ConfigureNvidiaEnvironmentFlags();
|
||||||
|
|
||||||
// Init settings params
|
// Init settings params
|
||||||
QCoreApplication::setOrganizationName(QStringLiteral("yuzu team"));
|
QCoreApplication::setOrganizationName(QStringLiteral("yuzu"));
|
||||||
QCoreApplication::setApplicationName(QStringLiteral("eden"));
|
QCoreApplication::setApplicationName(QStringLiteral("eden"));
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue