yuzu: Add button to boot mii edit from firmware
This commit is contained in:
parent
2921a24268
commit
bb4ae5ee53
|
@ -1551,6 +1551,7 @@ void GMainWindow::ConnectMenuEvents() {
|
||||||
// Tools
|
// Tools
|
||||||
connect_menu(ui->action_Rederive, std::bind(&GMainWindow::OnReinitializeKeys, this,
|
connect_menu(ui->action_Rederive, std::bind(&GMainWindow::OnReinitializeKeys, this,
|
||||||
ReinitializeKeyBehavior::Warning));
|
ReinitializeKeyBehavior::Warning));
|
||||||
|
connect_menu(ui->action_Load_Mii_Edit, &GMainWindow::OnMiiEdit);
|
||||||
connect_menu(ui->action_Capture_Screenshot, &GMainWindow::OnCaptureScreenshot);
|
connect_menu(ui->action_Capture_Screenshot, &GMainWindow::OnCaptureScreenshot);
|
||||||
|
|
||||||
// TAS
|
// TAS
|
||||||
|
@ -1590,6 +1591,8 @@ void GMainWindow::UpdateMenuState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
multiplayer_state->UpdateNotificationStatus();
|
multiplayer_state->UpdateNotificationStatus();
|
||||||
|
|
||||||
|
ui->action_Load_Mii_Edit->setEnabled(CheckFirmwarePresence());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::OnDisplayTitleBars(bool show) {
|
void GMainWindow::OnDisplayTitleBars(bool show) {
|
||||||
|
@ -4134,6 +4137,27 @@ void GMainWindow::OnToggleStatusBar() {
|
||||||
statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked());
|
statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GMainWindow::OnMiiEdit() {
|
||||||
|
constexpr u64 MiiEditId = 0x0100000000001009ull;
|
||||||
|
auto bis_system = system->GetFileSystemController().GetSystemNANDContents();
|
||||||
|
if (!bis_system) {
|
||||||
|
QMessageBox::warning(this, tr("No firmware available"),
|
||||||
|
tr("Please install the firmware to use the Mii editor."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto mii_applet_nca = bis_system->GetEntry(MiiEditId, FileSys::ContentRecordType::Program);
|
||||||
|
if (!mii_applet_nca) {
|
||||||
|
QMessageBox::warning(this, tr("Mii Edit Applet"),
|
||||||
|
tr("Mii editor is not available. Please reinstall firmware."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto filename = QString::fromStdString((mii_applet_nca->GetFullPath()));
|
||||||
|
UISettings::values.roms_path = QFileInfo(filename).path();
|
||||||
|
BootGame(filename);
|
||||||
|
}
|
||||||
|
|
||||||
void GMainWindow::OnCaptureScreenshot() {
|
void GMainWindow::OnCaptureScreenshot() {
|
||||||
if (emu_thread == nullptr || !emu_thread->IsRunning()) {
|
if (emu_thread == nullptr || !emu_thread->IsRunning()) {
|
||||||
return;
|
return;
|
||||||
|
@ -4540,6 +4564,8 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {
|
||||||
if (behavior == ReinitializeKeyBehavior::Warning) {
|
if (behavior == ReinitializeKeyBehavior::Warning) {
|
||||||
game_list->PopulateAsync(UISettings::values.game_dirs);
|
game_list->PopulateAsync(UISettings::values.game_dirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateMenuState();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GMainWindow::CheckSystemArchiveDecryption() {
|
bool GMainWindow::CheckSystemArchiveDecryption() {
|
||||||
|
@ -4561,6 +4587,22 @@ bool GMainWindow::CheckSystemArchiveDecryption() {
|
||||||
return mii_nca->GetRomFS().get() != nullptr;
|
return mii_nca->GetRomFS().get() != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GMainWindow::CheckFirmwarePresence() {
|
||||||
|
constexpr u64 MiiEditId = 0x0100000000001009ull;
|
||||||
|
|
||||||
|
auto bis_system = system->GetFileSystemController().GetSystemNANDContents();
|
||||||
|
if (!bis_system) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto mii_applet_nca = bis_system->GetEntry(MiiEditId, FileSys::ContentRecordType::Program);
|
||||||
|
if (!mii_applet_nca) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installed, u64 program_id,
|
bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installed, u64 program_id,
|
||||||
u64* selected_title_id, u8* selected_content_record_type) {
|
u64* selected_title_id, u8* selected_content_record_type) {
|
||||||
using ContentInfo = std::pair<FileSys::TitleType, FileSys::ContentRecordType>;
|
using ContentInfo = std::pair<FileSys::TitleType, FileSys::ContentRecordType>;
|
||||||
|
|
|
@ -365,6 +365,7 @@ private slots:
|
||||||
void ResetWindowSize720();
|
void ResetWindowSize720();
|
||||||
void ResetWindowSize900();
|
void ResetWindowSize900();
|
||||||
void ResetWindowSize1080();
|
void ResetWindowSize1080();
|
||||||
|
void OnMiiEdit();
|
||||||
void OnCaptureScreenshot();
|
void OnCaptureScreenshot();
|
||||||
void OnReinitializeKeys(ReinitializeKeyBehavior behavior);
|
void OnReinitializeKeys(ReinitializeKeyBehavior behavior);
|
||||||
void OnLanguageChanged(const QString& locale);
|
void OnLanguageChanged(const QString& locale);
|
||||||
|
@ -409,6 +410,7 @@ private:
|
||||||
void OpenPerGameConfiguration(u64 title_id, const std::string& file_name);
|
void OpenPerGameConfiguration(u64 title_id, const std::string& file_name);
|
||||||
bool CheckDarkMode();
|
bool CheckDarkMode();
|
||||||
bool CheckSystemArchiveDecryption();
|
bool CheckSystemArchiveDecryption();
|
||||||
|
bool CheckFirmwarePresence();
|
||||||
void ConfigureFilesystemProvider(const std::string& filepath);
|
void ConfigureFilesystemProvider(const std::string& filepath);
|
||||||
|
|
||||||
QString GetTasStateDescription() const;
|
QString GetTasStateDescription() const;
|
||||||
|
|
|
@ -150,6 +150,8 @@
|
||||||
<addaction name="action_Rederive"/>
|
<addaction name="action_Rederive"/>
|
||||||
<addaction name="action_Verify_installed_contents"/>
|
<addaction name="action_Verify_installed_contents"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
|
<addaction name="action_Load_Mii_Edit"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
<addaction name="action_Capture_Screenshot"/>
|
<addaction name="action_Capture_Screenshot"/>
|
||||||
<addaction name="menuTAS"/>
|
<addaction name="menuTAS"/>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -217,7 +219,7 @@
|
||||||
</action>
|
</action>
|
||||||
<action name="action_Verify_installed_contents">
|
<action name="action_Verify_installed_contents">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Verify installed contents</string>
|
<string>&Verify Installed Contents</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="action_About">
|
<action name="action_About">
|
||||||
|
@ -368,6 +370,11 @@
|
||||||
<string>&Capture Screenshot</string>
|
<string>&Capture Screenshot</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="action_Load_Mii_Edit">
|
||||||
|
<property name="text">
|
||||||
|
<string>Open &Mii Editor</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
<action name="action_Configure_Tas">
|
<action name="action_Configure_Tas">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Configure TAS...</string>
|
<string>&Configure TAS...</string>
|
||||||
|
|
Reference in New Issue