[Emulator] Install Content: Create header for installed packages

This fixes support for certain DLCs
This commit is contained in:
Gliniak
2022-08-20 20:41:08 +02:00
parent 469d062a50
commit 010b59e81c
7 changed files with 72 additions and 6 deletions

View File

@@ -856,5 +856,31 @@ bool StfsContainerDevice::ResolveFromFolder(const std::filesystem::path& path) {
return true;
}
kernel::xam::XCONTENT_AGGREGATE_DATA StfsContainerDevice::content_header() const {
kernel::xam::XCONTENT_AGGREGATE_DATA data;
std::memset(&data, 0, sizeof(kernel::xam::XCONTENT_AGGREGATE_DATA));
data.device_id = 1;
data.title_id = header_.metadata.execution_info.title_id;
data.content_type = header_.metadata.content_type;
auto name = header_.metadata.display_name(XLanguage::kEnglish);
if (name.empty()) {
// Find first filled language and use it. It might be incorrect, but meh
// until stfs support is done.
for (uint8_t i = 0; i < header_.metadata.kNumLanguagesV2; i++) {
name = header_.metadata.display_name((XLanguage)i);
if (!name.empty()) {
break;
}
}
}
data.set_display_name(name);
return data;
}
} // namespace vfs
} // namespace xe

View File

@@ -18,6 +18,7 @@
#include "xenia/base/math.h"
#include "xenia/base/string_util.h"
#include "xenia/kernel/util/xex2_info.h"
#include "xenia/kernel/xam/content_manager.h"
#include "xenia/vfs/device.h"
#include "xenia/vfs/devices/stfs_xbox.h"
@@ -86,6 +87,8 @@ class StfsContainerDevice : public Device {
uint32_t title_id() const { return header_.metadata.execution_info.title_id; }
XContentType content_type() const { return header_.metadata.content_type; }
kernel::xam::XCONTENT_AGGREGATE_DATA content_header() const;
private:
const uint32_t kBlocksPerHashLevel[3] = {170, 28900, 4913000};
const uint32_t kEndOfChain = 0xFFFFFF;