From 263e91b014ed3dc4e75b4f1fe23bd0388f23fea2 Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Tue, 20 Jan 2026 01:30:41 +0000 Subject: [PATCH 1/2] [XAM] Fixed XamUserCreateAchievementEnumerator starting index usage Fixed Vancouver 2010 spamming XamUserCreateAchievementEnumerator --- src/xenia/kernel/xam/xam_user.cc | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/xenia/kernel/xam/xam_user.cc b/src/xenia/kernel/xam/xam_user.cc index 84a51b9b6..1ecfe7771 100644 --- a/src/xenia/kernel/xam/xam_user.cc +++ b/src/xenia/kernel/xam/xam_user.cc @@ -7,6 +7,8 @@ ****************************************************************************** */ +#include + #include "xenia/base/logging.h" #include "xenia/kernel/kernel_state.h" #include "xenia/kernel/util/shim_utils.h" @@ -593,20 +595,26 @@ dword_result_t XamUserCreateAchievementEnumerator_entry( kernel_state()->achievement_manager()->GetTitleAchievements( requester_xuid, title_id_); - if (!user_title_achievements.empty()) { - for (const auto& entry : user_title_achievements) { - auto unlock_time = X_FILETIME(); - if (entry.IsUnlocked() && entry.unlock_time.is_valid()) { - unlock_time = entry.unlock_time; - } + const auto requested_achievements = user_title_achievements | + std::views::drop(offset) | + std::views::take(count); - auto item = AchievementDetails( - entry.achievement_id, entry.achievement_name.c_str(), - entry.unlocked_description.c_str(), entry.locked_description.c_str(), - entry.image_id, entry.gamerscore, unlock_time, entry.flags); + if (requested_achievements.empty()) { + return X_ERROR_INVALID_PARAMETER; + } - e->AppendItem(item); + for (const auto& entry : requested_achievements) { + auto unlock_time = X_FILETIME(); + if (entry.IsUnlocked() && entry.unlock_time.is_valid()) { + unlock_time = entry.unlock_time; } + + auto item = AchievementDetails( + entry.achievement_id, entry.achievement_name.c_str(), + entry.unlocked_description.c_str(), entry.locked_description.c_str(), + entry.image_id, entry.gamerscore, unlock_time, entry.flags); + + e->AppendItem(item); } *handle_ptr = e->handle(); From 67d80958c9d1ff926b9098be7f830c1937921d9a Mon Sep 17 00:00:00 2001 From: Gliniak Date: Sun, 25 Jan 2026 17:41:35 +0100 Subject: [PATCH 2/2] [XThread] Remove 10ms delay in thread start --- src/xenia/kernel/xthread.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/xenia/kernel/xthread.cc b/src/xenia/kernel/xthread.cc index eee8e9987..06e1db001 100644 --- a/src/xenia/kernel/xthread.cc +++ b/src/xenia/kernel/xthread.cc @@ -527,11 +527,6 @@ void XThread::Execute() { // Let the kernel know we are starting. kernel_state()->OnThreadExecute(this); - // All threads get a mandatory sleep. This is to deal with some buggy - // games that are assuming the 360 is so slow to create threads that they - // have time to initialize shared structures AFTER CreateThread (RR). - xe::threading::Sleep(std::chrono::milliseconds(10)); - // Dispatch any APCs that were queued before the thread was created first. DeliverAPCs();