NSO load NPDM and retrofit to use -ulaunch

This commit is contained in:
lizzie
2026-05-20 02:10:43 +00:00
parent 32d425e196
commit 353cb1aab5
4 changed files with 71 additions and 20 deletions
+26
View File
@@ -520,6 +520,7 @@ MainWindow::MainWindow(bool has_broken_vulkan)
QString game_path;
bool should_launch_qlaunch = false;
bool should_launch_hlaunch = false;
bool should_launch_ulaunch = false;
bool should_launch_setup = false;
bool has_gamepath = false;
bool is_fullscreen = false;
@@ -563,6 +564,8 @@ MainWindow::MainWindow(bool has_broken_vulkan)
should_launch_qlaunch = true;
} else if (args[i] == QStringLiteral("-hlaunch")) {
should_launch_hlaunch = true;
} else if (args[i] == QStringLiteral("-ulaunch")) {
should_launch_ulaunch = true;
} else if (args[i] == QStringLiteral("-setup")) {
should_launch_setup = true;
} else {
@@ -590,6 +593,29 @@ MainWindow::MainWindow(bool has_broken_vulkan)
BootGame(
QString::fromStdString(hbl_path),
LibraryAppletParameters(0x010000000000100Dull, Service::AM::AppletId::QLaunch));
} else if (should_launch_ulaunch) {
constexpr size_t NroPathSize = 512;
constexpr size_t NroArgvSize = 2048;
constexpr size_t MenuCaptionSize = 1024;
struct UlauncherTargetInput {
u32 magic;
bool target_once;
bool is_auto_game_recording;
std::array<u8, 2> unused;
std::array<char, NroPathSize> nro_path;
std::array<char, NroArgvSize> nro_argv;
std::array<char, MenuCaptionSize> menu_caption;
} target_ipt = {};
target_ipt.magic = 0x49444C55; // "ULDI"
QtCommon::system->GetUserChannel().resize(sizeof(target_ipt));
std::memcpy(QtCommon::system->GetUserChannel().data(), &target_ipt, sizeof(target_ipt));
std::filesystem::path const sd_dir = Common::FS::GetEdenPathString(Common::FS::EdenPath::SDMCDir);
auto const path = (sd_dir / "ulaunch" / "bin" / "uLoader" / "application" / "main").string();
auto params = ApplicationAppletParameters();
params.launch_type = Service::AM::LaunchType::ApplicationInitiated;
BootGame(QString::fromStdString(path), params);
}
}
}