From 8e5ebb882ee836433f26ea840ea8e92d4add3bcb Mon Sep 17 00:00:00 2001 From: techmuse <44119098+techmuse8@users.noreply.github.com> Date: Sun, 7 Jun 2026 16:13:25 -0400 Subject: [PATCH] CafeSystem: OR all of the base and overridden permission bits --- src/Cafe/CafeSystem.cpp | 22 ++++++++-------------- src/Cafe/TitleList/TitleInfo.h | 12 ++++++++++++ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Cafe/CafeSystem.cpp b/src/Cafe/CafeSystem.cpp index af1a54bd..fba9134f 100644 --- a/src/Cafe/CafeSystem.cpp +++ b/src/Cafe/CafeSystem.cpp @@ -951,35 +951,29 @@ namespace CafeSystem if (sLaunchModeIsStandalone) return CosCapabilityBits::All; - uint64 resultMask = 0; - for (const auto& pack : GraphicPack2::GetGraphicPacks()) + CosCapabilityBits resultMask = static_cast(0); + for (const auto& pack : GraphicPack2::GetActiveGraphicPacks()) { - if (pack->IsEnabled()) - { - for (const auto& permissionOverrides : pack->GetPermissionOverrides()) - { - if (permissionOverrides.first == group) - resultMask |= permissionOverrides.second; - } + for (const auto& permissionOverrides : pack->GetPermissionOverrides()) + { + if (permissionOverrides.first == group) + resultMask |= static_cast(permissionOverrides.second); } } - if (resultMask != 0) - return static_cast(resultMask); - auto& update = sGameInfo_ForegroundTitle.GetUpdate(); if (update.IsValid()) { ParsedCosXml* cosXml = update.GetCosInfo(); if (cosXml) - return cosXml->GetCapabilityBits(group); + return cosXml->GetCapabilityBits(group) | resultMask; } auto& base = sGameInfo_ForegroundTitle.GetBase(); if(base.IsValid()) { ParsedCosXml* cosXml = base.GetCosInfo(); if (cosXml) - return cosXml->GetCapabilityBits(group); + return cosXml->GetCapabilityBits(group) | resultMask; } return CosCapabilityBits::All; } diff --git a/src/Cafe/TitleList/TitleInfo.h b/src/Cafe/TitleList/TitleInfo.h index fa5b9c89..79379472 100644 --- a/src/Cafe/TitleList/TitleInfo.h +++ b/src/Cafe/TitleList/TitleInfo.h @@ -51,6 +51,18 @@ enum class CosCapabilityBits : uint64 All = 0xFFFFFFFFFFFFFFFFull }; +inline CosCapabilityBits operator|(CosCapabilityBits a, CosCapabilityBits b) +{ + return static_cast( + static_cast(a) | static_cast(b)); +} + +inline CosCapabilityBits& operator|=(CosCapabilityBits& a, CosCapabilityBits b) +{ + a = a | b; + return a; +} + enum class CosCapabilityBitsFS : uint64 { ODD_READ = (1llu << 0),