Browse Source
Merge remote-tracking branch 'origin/master' into variable-page-size
remotes/1785372757367212240/tmp_refs/heads/variable-page-size
Merge remote-tracking branch 'origin/master' into variable-page-size
remotes/1785372757367212240/tmp_refs/heads/variable-page-size
No known key found for this signature in database
GPG Key ID: DAD399BCC5FB77E4
59 changed files with 15798 additions and 21234 deletions
-
5.reuse/dep5
-
19CMakeLists.txt
-
354dist/compatibility_list/compatibility_list.json
-
5dist/compatibility_list/compatibility_list.qrc
-
1358dist/languages/ar.ts
-
1341dist/languages/ca.ts
-
1313dist/languages/cs.ts
-
1313dist/languages/da.ts
-
1322dist/languages/de.ts
-
1313dist/languages/el.ts
-
1324dist/languages/es.ts
-
1313dist/languages/fi.ts
-
1315dist/languages/fr.ts
-
1313dist/languages/hu.ts
-
1313dist/languages/id.ts
-
1319dist/languages/it.ts
-
1313dist/languages/ja_JP.ts
-
1402dist/languages/ko_KR.ts
-
1313dist/languages/nb.ts
-
1313dist/languages/nl.ts
-
1319dist/languages/pl.ts
-
1320dist/languages/pt_BR.ts
-
1313dist/languages/pt_PT.ts
-
1320dist/languages/ru_RU.ts
-
1319dist/languages/sv.ts
-
1317dist/languages/tr_TR.ts
-
1320dist/languages/uk.ts
-
1313dist/languages/vi.ts
-
1313dist/languages/vi_VN.ts
-
1322dist/languages/zh_CN.ts
-
1313dist/languages/zh_TW.ts
-
17src/android/app/src/main/res/values-ar/strings.xml
-
8src/android/app/src/main/res/values-es/strings.xml
-
27src/android/app/src/main/res/values-zh-rCN/strings.xml
-
2src/core/file_sys/program_metadata.cpp
-
22src/hid_core/frontend/emulated_controller.cpp
-
6src/hid_core/resources/abstracted_pad/abstract_sixaxis_handler.cpp
-
38src/hid_core/resources/npad/npad_data.cpp
-
2src/hid_core/resources/touch_screen/touch_screen_resource.cpp
-
3src/qt_common/config/uisettings.h
-
51src/qt_common/game_list/model.cpp
-
7src/qt_common/game_list/model.h
-
15src/qt_common/game_list/worker.cpp
-
3src/qt_common/game_list/worker.h
-
4src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
-
13src/yuzu/CMakeLists.txt
-
206src/yuzu/compatdb.cpp
-
40src/yuzu/compatdb.h
-
398src/yuzu/compatdb.ui
-
17src/yuzu/compatibility_list.cpp
-
19src/yuzu/compatibility_list.h
-
3src/yuzu/configuration/configure_ui.cpp
-
7src/yuzu/configuration/configure_ui.ui
-
12src/yuzu/game/game_list.cpp
-
4src/yuzu/game/game_list.h
-
1src/yuzu/game/game_tree.cpp
-
11src/yuzu/main.ui
-
23src/yuzu/main_window.cpp
-
3src/yuzu/main_window.h
@ -1,354 +0,0 @@ |
|||
[ |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "the-legend-of-zelda-breath-of-the-wild", |
|||
"releases": [ |
|||
{"id": "01007EF00011E000"} |
|||
], |
|||
"title": "The Legend of Zelda: Breath of the Wild" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "super-mario-odyssey", |
|||
"releases": [ |
|||
{"id": "0100000000010000"} |
|||
], |
|||
"title": "Super Mario Odyssey" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "animal-crossing-new-horizons", |
|||
"releases": [ |
|||
{"id": "01006F8002326000"} |
|||
], |
|||
"title": "Animal Crossing: New Horizons" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-legends-z-a", |
|||
"releases": [ |
|||
{"id": "0100F43008C44000"} |
|||
], |
|||
"title": "Pokémon Legends: Z-A" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "the-legend-of-zelda-tears-of-the-kingdom", |
|||
"releases": [ |
|||
{"id": "0100F2C0115B6000"} |
|||
], |
|||
"title": "The Legend of Zelda: Tears of the Kingdom" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "super-mario-galaxy", |
|||
"releases": [ |
|||
{"id": "010099C022B96000"} |
|||
], |
|||
"title": "Super Mario Galaxy" |
|||
}, |
|||
{ |
|||
"compatibility": 3, |
|||
"directory": "star-wars-republic-commando", |
|||
"releases": [ |
|||
{"id": "0100FA10115F8000"} |
|||
], |
|||
"title": "Star Wars: Republic Commando" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "doki-doki-literature-club-plus", |
|||
"releases": [ |
|||
{"id": "010086901543E000"} |
|||
], |
|||
"title": "Doki Doki Literature Club Plus" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-scarlet", |
|||
"releases": [ |
|||
{"id": "0100A3D008C5C000"} |
|||
], |
|||
"title": "Pokémon Scarlet" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-violet", |
|||
"releases": [ |
|||
{"id": "01008F6008C5E000"} |
|||
], |
|||
"title": "Pokémon Violet" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-legends-arceus", |
|||
"releases": [ |
|||
{"id": "01001E300D162000"} |
|||
], |
|||
"title": "Pokémon Legends: Arceus" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "splatoon-2", |
|||
"releases": [ |
|||
{"id": "01003BC0000A0000"} |
|||
], |
|||
"title": "Splatoon 2" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "super-smash-bros-ultimate", |
|||
"releases": [ |
|||
{"id": "01006A800016E000"} |
|||
], |
|||
"title": "Super Smash Bros. Ultimate" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "mario-kart-8-deluxe", |
|||
"releases": [ |
|||
{"id": "0100152000022000"} |
|||
], |
|||
"title": "Mario Kart 8 Deluxe" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "splatoon-3", |
|||
"releases": [ |
|||
{"id": "0100C2500FC20000"} |
|||
], |
|||
"title": "Splatoon 3" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "new-super-mario-bros-u-deluxe", |
|||
"releases": [ |
|||
{"id": "0100EA80032EA000"} |
|||
], |
|||
"title": "New Super Mario Bros. U Deluxe" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "hyrule-warriors-age-of-calamity", |
|||
"releases": [ |
|||
{"id": "01002B00111A2000"} |
|||
], |
|||
"title": "Hyrule Warriors: Age of Calamity" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "luigis-mansion-3", |
|||
"releases": [ |
|||
{"id": "0100DCA0064A6000"} |
|||
], |
|||
"title": "Luigi's Mansion 3" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-brilliant-diamond", |
|||
"releases": [ |
|||
{"id": "0100000011D90000"} |
|||
], |
|||
"title": "Pokémon Brilliant Diamond" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-shining-pearl", |
|||
"releases": [ |
|||
{"id": "010018E011D92000"} |
|||
], |
|||
"title": "Pokémon Shining Pearl" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "super-mario-3d-world-bowsers-fury", |
|||
"releases": [ |
|||
{"id": "010028600EBDA000"} |
|||
], |
|||
"title": "Super Mario 3D World + Bowser's Fury" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "the-legend-of-zelda-links-awakening", |
|||
"releases": [ |
|||
{"id": "01006BB00C6F0000"} |
|||
], |
|||
"title": "The Legend of Zelda: Link's Awakening" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "fire-emblem-three-houses", |
|||
"releases": [ |
|||
{"id": "010055D009F78000"} |
|||
], |
|||
"title": "Fire Emblem: Three Houses" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "metroid-dread", |
|||
"releases": [ |
|||
{"id": "010093801237C000"} |
|||
], |
|||
"title": "Metroid Dread" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "paper-mario-the-origami-king", |
|||
"releases": [ |
|||
{"id": "0100A3900C3E2000"} |
|||
], |
|||
"title": "Paper Mario: The Origami King" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "xenoblade-chronicles-definitive-edition", |
|||
"releases": [ |
|||
{"id": "0100FF500E34A000"} |
|||
], |
|||
"title": "Xenoblade Chronicles: Definitive Edition" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "xenoblade-chronicles-3", |
|||
"releases": [ |
|||
{"id": "010074F013262000"} |
|||
], |
|||
"title": "Xenoblade Chronicles 3" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pikmin-3-deluxe", |
|||
"releases": [ |
|||
{"id": "0100F8600D4B0000"} |
|||
], |
|||
"title": "Pikmin 3 Deluxe" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "donkey-kong-country-tropical-freeze", |
|||
"releases": [ |
|||
{"id": "0100C1F0054B6000"} |
|||
], |
|||
"title": "Donkey Kong Country: Tropical Freeze" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "kirby-and-the-forgotten-land", |
|||
"releases": [ |
|||
{"id": "01004D300C5AE000"} |
|||
], |
|||
"title": "Kirby and the Forgotten Land" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "mario-party-superstars", |
|||
"releases": [ |
|||
{"id": "01006B400D8B2000"} |
|||
], |
|||
"title": "Mario Party Superstars" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "clubhouse-games-51-worldwide-classics", |
|||
"releases": [ |
|||
{"id": "0100F8600D4B0000"} |
|||
], |
|||
"title": "Clubhouse Games: 51 Worldwide Classics" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "ring-fit-adventure", |
|||
"releases": [ |
|||
{"id": "01006B300BAF8000"} |
|||
], |
|||
"title": "Ring Fit Adventure" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "arms", |
|||
"releases": [ |
|||
{"id": "01009B500007C000"} |
|||
], |
|||
"title": "ARMS" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "super-mario-maker-2", |
|||
"releases": [ |
|||
{"id": "01009B90006DC000"} |
|||
], |
|||
"title": "Super Mario Maker 2" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "pokemon-lets-go-pikachu", |
|||
"releases": [ |
|||
{"id": "010003F003A34000"} |
|||
], |
|||
"title": "Pokémon: Let's Go, Pikachu!" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "pokemon-lets-go-eevee", |
|||
"releases": [ |
|||
{"id": "0100187003A36000"} |
|||
], |
|||
"title": "Pokémon: Let's Go, Eevee!" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-sword", |
|||
"releases": [ |
|||
{"id": "0100ABF008968000"} |
|||
], |
|||
"title": "Pokémon Sword" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "pokemon-shield", |
|||
"releases": [ |
|||
{"id": "01008DB008C2C000"} |
|||
], |
|||
"title": "Pokémon Shield" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "new-pokemon-snap", |
|||
"releases": [ |
|||
{"id": "0100F4300C182000"} |
|||
], |
|||
"title": "New Pokémon Snap" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "mario-golf-super-rush", |
|||
"releases": [ |
|||
{"id": "0100C9C00E25C000"} |
|||
], |
|||
"title": "Mario Golf: Super Rush" |
|||
}, |
|||
{ |
|||
"compatibility": 1, |
|||
"directory": "mario-tennis-aces", |
|||
"releases": [ |
|||
{"id": "0100BDE00862A000"} |
|||
], |
|||
"title": "Mario Tennis Aces" |
|||
}, |
|||
{ |
|||
"compatibility": 2, |
|||
"directory": "wario-ware-get-it-together", |
|||
"releases": [ |
|||
{"id": "0100563010F22000"} |
|||
], |
|||
"title": "WarioWare: Get It Together!" |
|||
}, |
|||
{ |
|||
"compatibility": 0, |
|||
"directory": "big-brain-academy-brain-vs-brain", |
|||
"releases": [ |
|||
{"id": "0100190010F24000"} |
|||
], |
|||
"title": "Big Brain Academy: Brain vs. Brain" |
|||
} |
|||
] |
|||
@ -1,5 +0,0 @@ |
|||
<RCC> |
|||
<qresource prefix="compatibility_list"> |
|||
<file>compatibility_list.json</file> |
|||
</qresource> |
|||
</RCC> |
|||
1358
dist/languages/ar.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1341
dist/languages/ca.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/cs.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/da.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1322
dist/languages/de.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/el.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1324
dist/languages/es.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/fi.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1315
dist/languages/fr.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/hu.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/id.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1319
dist/languages/it.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/ja_JP.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1402
dist/languages/ko_KR.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/nb.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/nl.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1319
dist/languages/pl.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1320
dist/languages/pt_BR.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/pt_PT.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1320
dist/languages/ru_RU.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1319
dist/languages/sv.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1317
dist/languages/tr_TR.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1320
dist/languages/uk.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/vi.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/vi_VN.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1322
dist/languages/zh_CN.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1313
dist/languages/zh_TW.ts
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,206 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|||
|
|||
// SPDX-FileCopyrightText: 2017 Citra Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include <QButtonGroup>
|
|||
#include <QMessageBox>
|
|||
#include <QPushButton>
|
|||
#include <qtconcurrentrun.h>
|
|||
#include "common/logging.h"
|
|||
#include "ui_compatdb.h"
|
|||
#include "yuzu/compatdb.h"
|
|||
|
|||
CompatDB::CompatDB(QWidget* parent) |
|||
: QWizard(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint), |
|||
ui{std::make_unique<Ui::CompatDB>()} { |
|||
ui->setupUi(this); |
|||
|
|||
connect(ui->radioButton_GameBoot_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_GameBoot_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Gameplay_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Gameplay_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_NoFreeze_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_NoFreeze_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Complete_Yes, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Complete_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Graphical_Major, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Graphical_Minor, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Graphical_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Audio_Major, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Audio_Minor, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
connect(ui->radioButton_Audio_No, &QRadioButton::clicked, this, &CompatDB::EnableNext); |
|||
|
|||
connect(button(NextButton), &QPushButton::clicked, this, &CompatDB::Submit); |
|||
connect(&testcase_watcher, &QFutureWatcher<bool>::finished, this, |
|||
&CompatDB::OnTestcaseSubmitted); |
|||
} |
|||
|
|||
CompatDB::~CompatDB() = default; |
|||
|
|||
enum class CompatDBPage { |
|||
Intro = 0, |
|||
GameBoot = 1, |
|||
GamePlay = 2, |
|||
Freeze = 3, |
|||
Completion = 4, |
|||
Graphical = 5, |
|||
Audio = 6, |
|||
Final = 7, |
|||
}; |
|||
|
|||
void CompatDB::Submit() { |
|||
QButtonGroup* compatibility_GameBoot = new QButtonGroup(this); |
|||
compatibility_GameBoot->addButton(ui->radioButton_GameBoot_Yes, 0); |
|||
compatibility_GameBoot->addButton(ui->radioButton_GameBoot_No, 1); |
|||
|
|||
QButtonGroup* compatibility_Gameplay = new QButtonGroup(this); |
|||
compatibility_Gameplay->addButton(ui->radioButton_Gameplay_Yes, 0); |
|||
compatibility_Gameplay->addButton(ui->radioButton_Gameplay_No, 1); |
|||
|
|||
QButtonGroup* compatibility_NoFreeze = new QButtonGroup(this); |
|||
compatibility_NoFreeze->addButton(ui->radioButton_NoFreeze_Yes, 0); |
|||
compatibility_NoFreeze->addButton(ui->radioButton_NoFreeze_No, 1); |
|||
|
|||
QButtonGroup* compatibility_Complete = new QButtonGroup(this); |
|||
compatibility_Complete->addButton(ui->radioButton_Complete_Yes, 0); |
|||
compatibility_Complete->addButton(ui->radioButton_Complete_No, 1); |
|||
|
|||
QButtonGroup* compatibility_Graphical = new QButtonGroup(this); |
|||
compatibility_Graphical->addButton(ui->radioButton_Graphical_Major, 0); |
|||
compatibility_Graphical->addButton(ui->radioButton_Graphical_Minor, 1); |
|||
compatibility_Graphical->addButton(ui->radioButton_Graphical_No, 2); |
|||
|
|||
QButtonGroup* compatibility_Audio = new QButtonGroup(this); |
|||
compatibility_Audio->addButton(ui->radioButton_Audio_Major, 0); |
|||
compatibility_Graphical->addButton(ui->radioButton_Audio_Minor, 1); |
|||
compatibility_Audio->addButton(ui->radioButton_Audio_No, 2); |
|||
|
|||
const int compatibility = static_cast<int>(CalculateCompatibility()); |
|||
|
|||
switch ((static_cast<CompatDBPage>(currentId()))) { |
|||
case CompatDBPage::Intro: |
|||
break; |
|||
case CompatDBPage::GameBoot: |
|||
if (compatibility_GameBoot->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::GamePlay: |
|||
if (compatibility_Gameplay->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Freeze: |
|||
if (compatibility_NoFreeze->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Completion: |
|||
if (compatibility_Complete->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Graphical: |
|||
if (compatibility_Graphical->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Audio: |
|||
if (compatibility_Audio->checkedId() == -1) { |
|||
button(NextButton)->setEnabled(false); |
|||
} |
|||
break; |
|||
case CompatDBPage::Final: |
|||
back(); |
|||
LOG_INFO(Frontend, "Compatibility Rating: {}", compatibility); |
|||
|
|||
button(NextButton)->setEnabled(false); |
|||
button(NextButton)->setText(tr("Submitting")); |
|||
button(CancelButton)->setVisible(false); |
|||
break; |
|||
default: |
|||
LOG_ERROR(Frontend, "Unexpected page: {}", currentId()); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
int CompatDB::nextId() const { |
|||
switch ((static_cast<CompatDBPage>(currentId()))) { |
|||
case CompatDBPage::Intro: |
|||
return static_cast<int>(CompatDBPage::GameBoot); |
|||
case CompatDBPage::GameBoot: |
|||
if (ui->radioButton_GameBoot_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::GamePlay); |
|||
case CompatDBPage::GamePlay: |
|||
if (ui->radioButton_Gameplay_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::Freeze); |
|||
case CompatDBPage::Freeze: |
|||
if (ui->radioButton_NoFreeze_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::Completion); |
|||
case CompatDBPage::Completion: |
|||
if (ui->radioButton_Complete_No->isChecked()) { |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
} |
|||
return static_cast<int>(CompatDBPage::Graphical); |
|||
case CompatDBPage::Graphical: |
|||
return static_cast<int>(CompatDBPage::Audio); |
|||
case CompatDBPage::Audio: |
|||
return static_cast<int>(CompatDBPage::Final); |
|||
case CompatDBPage::Final: |
|||
return -1; |
|||
default: |
|||
LOG_ERROR(Frontend, "Unexpected page: {}", currentId()); |
|||
return static_cast<int>(CompatDBPage::Intro); |
|||
} |
|||
} |
|||
|
|||
CompatibilityStatus CompatDB::CalculateCompatibility() const { |
|||
if (ui->radioButton_GameBoot_No->isChecked()) { |
|||
return CompatibilityStatus::WontBoot; |
|||
} |
|||
|
|||
if (ui->radioButton_Gameplay_No->isChecked()) { |
|||
return CompatibilityStatus::IntroMenu; |
|||
} |
|||
|
|||
if (ui->radioButton_NoFreeze_No->isChecked() || ui->radioButton_Complete_No->isChecked()) { |
|||
return CompatibilityStatus::Ingame; |
|||
} |
|||
|
|||
if (ui->radioButton_Graphical_Major->isChecked() || ui->radioButton_Audio_Major->isChecked()) { |
|||
return CompatibilityStatus::Ingame; |
|||
} |
|||
|
|||
if (ui->radioButton_Graphical_Minor->isChecked() || ui->radioButton_Audio_Minor->isChecked()) { |
|||
return CompatibilityStatus::Playable; |
|||
} |
|||
|
|||
return CompatibilityStatus::Perfect; |
|||
} |
|||
|
|||
void CompatDB::OnTestcaseSubmitted() { |
|||
if (!testcase_watcher.result()) { |
|||
QMessageBox::critical(this, tr("Communication error"), |
|||
tr("An error occurred while sending the Testcase")); |
|||
button(NextButton)->setEnabled(true); |
|||
button(NextButton)->setText(tr("Next")); |
|||
button(CancelButton)->setVisible(true); |
|||
} else { |
|||
next(); |
|||
// older versions of QT don't support the "NoCancelButtonOnLastPage" option, this is a
|
|||
// workaround
|
|||
button(CancelButton)->setVisible(false); |
|||
} |
|||
} |
|||
|
|||
void CompatDB::EnableNext() { |
|||
button(NextButton)->setEnabled(true); |
|||
} |
|||
@ -1,40 +0,0 @@ |
|||
// SPDX-FileCopyrightText: 2017 Citra Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <memory> |
|||
#include <QFutureWatcher> |
|||
#include <QWizard> |
|||
|
|||
namespace Ui { |
|||
class CompatDB; |
|||
} |
|||
|
|||
enum class CompatibilityStatus { |
|||
Perfect = 0, |
|||
Playable = 1, |
|||
// Unused: Okay = 2, |
|||
Ingame = 3, |
|||
IntroMenu = 4, |
|||
WontBoot = 5, |
|||
}; |
|||
|
|||
class CompatDB : public QWizard { |
|||
Q_OBJECT |
|||
|
|||
public: |
|||
explicit CompatDB(QWidget* parent = nullptr); |
|||
~CompatDB(); |
|||
int nextId() const override; |
|||
|
|||
private: |
|||
QFutureWatcher<bool> testcase_watcher; |
|||
|
|||
std::unique_ptr<Ui::CompatDB> ui; |
|||
|
|||
void Submit(); |
|||
CompatibilityStatus CalculateCompatibility() const; |
|||
void OnTestcaseSubmitted(); |
|||
void EnableNext(); |
|||
}; |
|||
@ -1,398 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<ui version="4.0"> |
|||
<class>CompatDB</class> |
|||
<widget class="QWizard" name="CompatDB"> |
|||
<property name="geometry"> |
|||
<rect> |
|||
<x>0</x> |
|||
<y>0</y> |
|||
<width>600</width> |
|||
<height>482</height> |
|||
</rect> |
|||
</property> |
|||
<property name="minimumSize"> |
|||
<size> |
|||
<width>500</width> |
|||
<height>410</height> |
|||
</size> |
|||
</property> |
|||
<property name="windowTitle"> |
|||
<string>Report Compatibility</string> |
|||
</property> |
|||
<property name="options"> |
|||
<set>QWizard::WizardOption::DisabledBackButtonOnLastPage|QWizard::WizardOption::HelpButtonOnRight|QWizard::WizardOption::NoBackButtonOnStartPage</set> |
|||
</property> |
|||
<widget class="QWizardPage" name="wizard_Info"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">0</string> |
|||
</attribute> |
|||
<layout class="QVBoxLayout" name="verticalLayout"> |
|||
<item> |
|||
<widget class="QLabel" name="lbl_Spiel"> |
|||
<property name="text"> |
|||
<string><html><head/><body><p><span style=" font-size:10pt;">Should you choose to submit a test case to the </span><a href="https://eden-emulator.github.io/game/"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">eden Compatibility List</span></a><span style=" font-size:10pt;">, The following information will be collected and displayed on the site:</span></p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hardware Information (CPU / GPU / Operating System)</li><li style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Which version of eden you are running</li><li style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The connected eden account</li></ul></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
<property name="openExternalLinks"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<spacer name="verticalSpacer_2"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_GameBoot"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">1</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout1"> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent1"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game boot?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer1"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_GameBoot_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game starts to output video or audio</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_GameBoot_No"> |
|||
<property name="text"> |
|||
<string>No The game doesn't get past the "Launching..." screen</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_GamePlay"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">2</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout2"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Gameplay_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game gets past the intro/menu and into gameplay</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Gameplay_No"> |
|||
<property name="text"> |
|||
<string>No The game crashes or freezes while loading or using the menu</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent2"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game reach gameplay?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer2"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_NoFreeze"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">3</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout3"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_NoFreeze_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game works without crashes</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_NoFreeze_No"> |
|||
<property name="text"> |
|||
<string>No The game crashes or freezes during gameplay</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent3"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game work without crashing, freezing or locking up during gameplay?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer3"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_Complete"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">4</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout4"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Complete_Yes"> |
|||
<property name="text"> |
|||
<string>Yes The game can be finished without any workarounds</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Complete_No"> |
|||
<property name="text"> |
|||
<string>No The game can't progress past a certain area</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent4"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Is the game completely playable from start to finish?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer4"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_Graphical"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">5</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout5"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Graphical_Major"> |
|||
<property name="text"> |
|||
<string>Major The game has major graphical errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Graphical_Minor"> |
|||
<property name="text"> |
|||
<string>Minor The game has minor graphical errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="6" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Graphical_No"> |
|||
<property name="text"> |
|||
<string>None Everything is rendered as it looks on the Nintendo Switch</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent5"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game have any graphical glitches?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer5"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_Audio"> |
|||
<property name="title"> |
|||
<string>Report Game Compatibility</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">6</string> |
|||
</attribute> |
|||
<layout class="QFormLayout" name="formLayout6"> |
|||
<item row="2" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Audio_Major"> |
|||
<property name="text"> |
|||
<string>Major The game has major audio errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="4" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Audio_Minor"> |
|||
<property name="text"> |
|||
<string>Minor The game has minor audio errors</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="6" column="0"> |
|||
<widget class="QRadioButton" name="radioButton_Audio_No"> |
|||
<property name="text"> |
|||
<string>None Audio is played perfectly</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0" colspan="2"> |
|||
<widget class="QLabel" name="lbl_Independent6"> |
|||
<property name="font"> |
|||
<font> |
|||
<pointsize>10</pointsize> |
|||
</font> |
|||
</property> |
|||
<property name="text"> |
|||
<string><html><head/><body><p>Does the game have any audio glitches / missing effects?</p></body></html></string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="2"> |
|||
<spacer name="verticalSpacer6"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Orientation::Vertical</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>20</width> |
|||
<height>0</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<widget class="QWizardPage" name="wizard_ThankYou"> |
|||
<property name="title"> |
|||
<string>Thank you for your submission!</string> |
|||
</property> |
|||
<attribute name="pageId"> |
|||
<string notr="true">7</string> |
|||
</attribute> |
|||
</widget> |
|||
</widget> |
|||
<resources/> |
|||
<connections/> |
|||
</ui> |
|||
@ -1,17 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include <algorithm>
|
|||
|
|||
#include <fmt/ranges.h>
|
|||
|
|||
#include "yuzu/compatibility_list.h"
|
|||
|
|||
CompatibilityList::const_iterator FindMatchingCompatibilityEntry( |
|||
const CompatibilityList& compatibility_list, u64 program_id) { |
|||
return std::find_if(compatibility_list.begin(), compatibility_list.end(), |
|||
[program_id](const auto& element) { |
|||
std::string pid = fmt::format("{:016X}", program_id); |
|||
return element.first == pid; |
|||
}); |
|||
} |
|||
@ -1,19 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project |
|||
// SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include <string> |
|||
#include <ankerl/unordered_dense.h> |
|||
|
|||
#include <QString> |
|||
|
|||
#include "common/common_types.h" |
|||
|
|||
using CompatibilityList = ankerl::unordered_dense::map<std::string, std::pair<QString, QString>>; |
|||
|
|||
CompatibilityList::const_iterator FindMatchingCompatibilityEntry( |
|||
const CompatibilityList& compatibility_list, u64 program_id); |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue