CafeSystem: OR all of the base and overridden permission bits

This commit is contained in:
techmuse 2026-06-07 16:13:25 -04:00
parent baf1cfa2dc
commit 8e5ebb882e
2 changed files with 20 additions and 14 deletions

View File

@ -951,35 +951,29 @@ namespace CafeSystem
if (sLaunchModeIsStandalone)
return CosCapabilityBits::All;
uint64 resultMask = 0;
for (const auto& pack : GraphicPack2::GetGraphicPacks())
CosCapabilityBits resultMask = static_cast<CosCapabilityBits>(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<CosCapabilityBits>(permissionOverrides.second);
}
}
if (resultMask != 0)
return static_cast<CosCapabilityBits>(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;
}

View File

@ -51,6 +51,18 @@ enum class CosCapabilityBits : uint64
All = 0xFFFFFFFFFFFFFFFFull
};
inline CosCapabilityBits operator|(CosCapabilityBits a, CosCapabilityBits b)
{
return static_cast<CosCapabilityBits>(
static_cast<uint64>(a) | static_cast<uint64>(b));
}
inline CosCapabilityBits& operator|=(CosCapabilityBits& a, CosCapabilityBits b)
{
a = a | b;
return a;
}
enum class CosCapabilityBitsFS : uint64
{
ODD_READ = (1llu << 0),