[Kernel] Simple support for loading achievement data

This commit is contained in:
Gliniak
2022-12-25 13:16:30 +01:00
parent a25ea03a28
commit 9f0d3d4c5b
6 changed files with 171 additions and 82 deletions

View File

@@ -20,6 +20,8 @@
#include "xenia/kernel/xthread.h"
#include "xenia/xbox.h"
DECLARE_int32(user_language);
namespace xe {
namespace kernel {
namespace xam {
@@ -717,19 +719,26 @@ dword_result_t XamUserCreateAchievementEnumerator_entry(
return result;
}
uint32_t dummy_count = std::min(100u, uint32_t(count));
for (uint32_t i = 1; i <= dummy_count; ++i) {
auto item = XStaticAchievementEnumerator::AchievementDetails{
i, // dummy achievement id
fmt::format(u"Dummy {}", i),
u"Dummy description",
u"Dummy unachieved",
i, // dummy image id
0,
{0, 0},
8}; // flags=8 makes dummy achievements show up in 4D5307DC
// achievements list.
e->AppendItem(item);
const kernel::util::XdbfGameData db = kernel_state()->title_xdbf();
if (db.is_valid()) {
XLanguage language = db.GetExistingLanguage(static_cast<XLanguage>(cvars::user_language));
std::vector<kernel::util::XdbfAchievementTableEntry> achievement_list =
db.GetAchievements();
for (const auto& entry : achievement_list) {
auto item = XStaticAchievementEnumerator::AchievementDetails{
entry.id,
xe::to_utf16(db.GetStringTableEntry(language, entry.label_id)),
xe::to_utf16(db.GetStringTableEntry(language, entry.description_id)),
xe::to_utf16(db.GetStringTableEntry(language, entry.unachieved_id)),
entry.image_id,
entry.gamerscore,
{0, 0},
entry.flags};
e->AppendItem(item);
}
}
*handle_ptr = e->handle();