[XAM] Added is_system_property util to UserData

This commit is contained in:
Adrian
2025-11-19 13:43:39 +00:00
committed by Radosław Gliński
parent 1bf98e9354
commit eb6221d631
3 changed files with 13 additions and 4 deletions

View File

@@ -9,6 +9,7 @@
#include "xenia/kernel/util/game_info_database.h" #include "xenia/kernel/util/game_info_database.h"
#include "xenia/base/logging.h" #include "xenia/base/logging.h"
#include "xenia/kernel/xam/user_data.h"
namespace xe { namespace xe {
namespace kernel { namespace kernel {
@@ -86,7 +87,7 @@ std::string GameInfoDatabase::GetLocalizedString(const uint32_t id,
GameInfoDatabase::Context GameInfoDatabase::GetContext( GameInfoDatabase::Context GameInfoDatabase::GetContext(
const uint32_t id) const { const uint32_t id) const {
Context context = {}; Context context = {.id = xam::kInvalidContextId};
if (!is_valid_) { if (!is_valid_) {
return context; return context;
@@ -100,13 +101,14 @@ GameInfoDatabase::Context GameInfoDatabase::GetContext(
context.id = xdbf_context->id; context.id = xdbf_context->id;
context.default_value = xdbf_context->default_value; context.default_value = xdbf_context->default_value;
context.max_value = xdbf_context->max_value; context.max_value = xdbf_context->max_value;
context.is_system = xam::UserData::is_system_property(xdbf_context->id);
context.description = GetLocalizedString(xdbf_context->string_id); context.description = GetLocalizedString(xdbf_context->string_id);
return context; return context;
} }
GameInfoDatabase::Property GameInfoDatabase::GetProperty( GameInfoDatabase::Property GameInfoDatabase::GetProperty(
const uint32_t id) const { const uint32_t id) const {
Property property = {}; Property property = {.id = xam::kInvalidPropertyId};
if (!is_valid_) { if (!is_valid_) {
return property; return property;
@@ -119,6 +121,7 @@ GameInfoDatabase::Property GameInfoDatabase::GetProperty(
property.id = xdbf_property->id; property.id = xdbf_property->id;
property.data_size = xdbf_property->data_size; property.data_size = xdbf_property->data_size;
property.is_system = xam::UserData::is_system_property(xdbf_property->id);
property.description = GetLocalizedString(xdbf_property->string_id); property.description = GetLocalizedString(xdbf_property->string_id);
return property; return property;
} }

View File

@@ -32,12 +32,14 @@ class GameInfoDatabase {
uint32_t id; uint32_t id;
uint32_t max_value; uint32_t max_value;
uint32_t default_value; uint32_t default_value;
bool is_system;
std::string description; std::string description;
}; };
struct Property { struct Property {
uint32_t id; uint32_t id;
uint32_t data_size; uint32_t data_size;
bool is_system;
std::string description; std::string description;
}; };

View File

@@ -24,8 +24,7 @@ namespace xam {
union AttributeKey { union AttributeKey {
uint32_t value; uint32_t value;
struct { struct {
uint32_t id : 14; uint32_t id : 16;
uint32_t unk : 2;
uint32_t size : 12; uint32_t size : 12;
uint32_t type : 4; uint32_t type : 4;
}; };
@@ -134,6 +133,11 @@ class UserData {
static X_USER_DATA_TYPE get_type(uint32_t id) { static X_USER_DATA_TYPE get_type(uint32_t id) {
return static_cast<X_USER_DATA_TYPE>(id >> 28); return static_cast<X_USER_DATA_TYPE>(id >> 28);
} }
static bool is_system_property(uint32_t id) {
return (id & kPropertyScopeMask);
}
static uint16_t get_max_size(uint32_t id) { static uint16_t get_max_size(uint32_t id) {
return static_cast<uint16_t>(id >> 16) & kMaxUserDataSize; return static_cast<uint16_t>(id >> 16) & kMaxUserDataSize;
} }