diff --git a/src/xenia/kernel/kernel_state.cc b/src/xenia/kernel/kernel_state.cc index b5820ab2f..8f3b815c2 100644 --- a/src/xenia/kernel/kernel_state.cc +++ b/src/xenia/kernel/kernel_state.cc @@ -508,7 +508,19 @@ X_RESULT KernelState::ApplyTitleUpdate(const object_ref module) { content_manager()->OpenContent("UPDATE", title_update, disc_number); // Use the corresponding patch for the launch module - std::filesystem::path patch_xexp = fmt::format("{0}.xexp", module->name()); + std::filesystem::path patch_xexp; + + std::string mount_path = ""; + file_system()->FindSymbolicLink("game:", mount_path); + + auto is_relative = std::filesystem::relative(module->path(), mount_path); + + if (is_relative.empty()) { + return X_STATUS_UNSUCCESSFUL; + } + + patch_xexp = + is_relative.replace_extension(is_relative.extension().string() + "p"); std::string resolved_path = ""; file_system()->FindSymbolicLink("UPDATE:", resolved_path); diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_modules.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_modules.cc index 607d81c8e..392b27ec8 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_modules.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_modules.cc @@ -105,6 +105,7 @@ dword_result_t XexLoadImage_entry(lpstring_t module_name, dword_t module_flags, // Not found; attempt to load as a user module. auto user_module = kernel_state()->LoadUserModule(module_name.value()); if (user_module) { + kernel_state()->ApplyTitleUpdate(user_module); kernel_state()->FinishLoadingUserModule(user_module); // Give up object ownership, this reference will be released by the last // XexUnloadImage call