|
@@ -12,7 +12,7 @@ inline constexpr std::array<char, 8> kMagic{'S', 'R', 'S', 'D', 'K', 'P', '0', '
|
|
|
/** Runtime-pack schema version accepted by this reader. */
|
|
/** Runtime-pack schema version accepted by this reader. */
|
|
|
inline constexpr std::uint32_t kVersion = 41;
|
|
inline constexpr std::uint32_t kVersion = 41;
|
|
|
/** The ABI contains only activity identity, topology, placement, and panel metadata. */
|
|
/** The ABI contains only activity identity, topology, placement, and panel metadata. */
|
|
|
-inline constexpr std::uint32_t kSectionCount = 50;
|
|
|
|
|
|
|
+inline constexpr std::uint32_t kSectionCount = 51;
|
|
|
#if defined(SUNRISE_ACTIVITY_SDK_TESTING)
|
|
#if defined(SUNRISE_ACTIVITY_SDK_TESTING)
|
|
|
/** The runtime accepts only the checked generated SDK build. Each pin is a SHA-256 digest. */
|
|
/** The runtime accepts only the checked generated SDK build. Each pin is a SHA-256 digest. */
|
|
|
inline constexpr std::array<std::byte, 32> kExpectedSdkBuildDigest{
|
|
inline constexpr std::array<std::byte, 32> kExpectedSdkBuildDigest{
|
|
@@ -273,6 +273,25 @@ inline constexpr std::uint32_t kAuthoredSceneSenseSchema = 0x8080626AU;
|
|
|
inline constexpr std::uint32_t kAuthoredSceneAuthSchema = 0x8080626BU;
|
|
inline constexpr std::uint32_t kAuthoredSceneAuthSchema = 0x8080626BU;
|
|
|
inline constexpr std::uint32_t kAuthoredSceneResourceRelativeOffset = 0x60U;
|
|
inline constexpr std::uint32_t kAuthoredSceneResourceRelativeOffset = 0x60U;
|
|
|
inline constexpr std::uint32_t kAuthoredSceneResourceClass = 0x80809C0FU;
|
|
inline constexpr std::uint32_t kAuthoredSceneResourceClass = 0x80809C0FU;
|
|
|
|
|
+/**
|
|
|
|
|
+ * A scene resource references its event graph at a fixed field. In the graph, the gates form
|
|
|
|
|
+ * one typed package array: a marker, a 64-bit count, the element class, then the elements. A
|
|
|
|
|
+ * gate element opens with the graph's own tag and its class, and carries the event key the
|
|
|
|
|
+ * server publishes and the gate's ordinal in the scene's progression (-1 for the opening gate
|
|
|
|
|
+ * every scene shares).
|
|
|
|
|
+ */
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGraphRelativeOffset = 0xC0U;
|
|
|
|
|
+inline constexpr std::uint32_t kPackageArrayMarker = 0x80809FBDU;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGateArrayClass = 0x8080638AU;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGateClass = 0x8080637DU;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGateSize = 0x60U;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGateClassOffset = 0x4U;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGateKeyOffset = 0x10U;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGateOrdinalOffset = 0x58U;
|
|
|
|
|
+/** More gates than any installed scene declares; a larger count is a misread graph. */
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneGateCapacity = 64U;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneEventKeyExact = 0x1U;
|
|
|
|
|
+inline constexpr std::uint32_t kAuthoredSceneEventKeyFlagMask = kAuthoredSceneEventKeyExact;
|
|
|
/** Scene-to-squad rows retain one exact same-object package reference. */
|
|
/** Scene-to-squad rows retain one exact same-object package reference. */
|
|
|
inline constexpr std::uint32_t kAuthoredSceneSquadSameObjectExact = 0x1U;
|
|
inline constexpr std::uint32_t kAuthoredSceneSquadSameObjectExact = 0x1U;
|
|
|
/** A type-42 performance sensor names the same-object squad it drives at descriptor +0x58. */
|
|
/** A type-42 performance sensor names the same-object squad it drives at descriptor +0x58. */
|
|
@@ -387,7 +406,7 @@ inline constexpr std::int64_t kAbsentSignedValue = (-0x7FFFFFFFFFFFFFFFLL - 1);
|
|
|
|
|
|
|
|
/** Fixed packed byte sizes make producer and consumer ABI drift fail at compile time. */
|
|
/** Fixed packed byte sizes make producer and consumer ABI drift fail at compile time. */
|
|
|
inline constexpr std::size_t kSectionSize = 16;
|
|
inline constexpr std::size_t kSectionSize = 16;
|
|
|
-inline constexpr std::size_t kHeaderSize = 960;
|
|
|
|
|
|
|
+inline constexpr std::size_t kHeaderSize = 976;
|
|
|
inline constexpr std::size_t kStringRefSize = 8;
|
|
inline constexpr std::size_t kStringRefSize = 8;
|
|
|
inline constexpr std::size_t kRangeSize = 8;
|
|
inline constexpr std::size_t kRangeSize = 8;
|
|
|
inline constexpr std::size_t kActivitySize = 124;
|
|
inline constexpr std::size_t kActivitySize = 124;
|
|
@@ -411,6 +430,7 @@ inline constexpr std::size_t kSquadSize = 52;
|
|
|
inline constexpr std::size_t kSquadMemberSize = 44;
|
|
inline constexpr std::size_t kSquadMemberSize = 44;
|
|
|
inline constexpr std::size_t kSquadAnchorSize = 48;
|
|
inline constexpr std::size_t kSquadAnchorSize = 48;
|
|
|
inline constexpr std::size_t kAuthoredSceneResourceSize = 40;
|
|
inline constexpr std::size_t kAuthoredSceneResourceSize = 40;
|
|
|
|
|
+inline constexpr std::size_t kAuthoredSceneEventKeySize = 40;
|
|
|
inline constexpr std::size_t kAuthoredSceneSquadEdgeSize = 40;
|
|
inline constexpr std::size_t kAuthoredSceneSquadEdgeSize = 40;
|
|
|
inline constexpr std::size_t kTaskTargetSize = 44;
|
|
inline constexpr std::size_t kTaskTargetSize = 44;
|
|
|
inline constexpr std::size_t kDialogueCueTextSize = 36;
|
|
inline constexpr std::size_t kDialogueCueTextSize = 36;
|
|
@@ -727,9 +747,11 @@ enum class SectionIndex : std::uint32_t {
|
|
|
combatObjectiveGroups,
|
|
combatObjectiveGroups,
|
|
|
actorAbilities,
|
|
actorAbilities,
|
|
|
actorAbilityTargets,
|
|
actorAbilityTargets,
|
|
|
|
|
+ authoredSceneEventKeys,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-static_assert(static_cast<std::uint32_t>(SectionIndex::actorAbilityTargets) + 1 == kSectionCount);
|
|
|
|
|
|
|
+static_assert(static_cast<std::uint32_t>(SectionIndex::authoredSceneEventKeys) + 1
|
|
|
|
|
+ == kSectionCount);
|
|
|
|
|
|
|
|
/** Exact activity-name/root join result retained for every activity row. */
|
|
/** Exact activity-name/root join result retained for every activity row. */
|
|
|
enum class ActivityJoinStatus : std::uint32_t {
|
|
enum class ActivityJoinStatus : std::uint32_t {
|
|
@@ -1146,6 +1168,20 @@ struct AuthoredSceneResource final {
|
|
|
std::uint32_t reserved{};
|
|
std::uint32_t reserved{};
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+/** One event gate of a type-43 scene's graph, in the scene's gate order. */
|
|
|
|
|
+struct AuthoredSceneEventKey final {
|
|
|
|
|
+ StringRef id{};
|
|
|
|
|
+ std::uint32_t sceneSlotIndex{};
|
|
|
|
|
+ std::uint32_t resourceTag{};
|
|
|
|
|
+ std::uint32_t graphTag{};
|
|
|
|
|
+ /** Offset of the gate element inside the graph, the row's provenance. */
|
|
|
|
|
+ std::uint32_t gateOffset{};
|
|
|
|
|
+ std::int32_t ordinal{};
|
|
|
|
|
+ std::uint32_t key{};
|
|
|
|
|
+ std::uint32_t flags{};
|
|
|
|
|
+ std::uint32_t reserved{};
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
/** One type-43 slot retains an exact same-object reference to one type-1 squad slot. */
|
|
/** One type-43 slot retains an exact same-object reference to one type-1 squad slot. */
|
|
|
struct AuthoredSceneSquadEdge final {
|
|
struct AuthoredSceneSquadEdge final {
|
|
|
StringRef id{};
|
|
StringRef id{};
|
|
@@ -1528,6 +1564,7 @@ static_assert(sizeof(Squad) == kSquadSize);
|
|
|
static_assert(sizeof(SquadMember) == kSquadMemberSize);
|
|
static_assert(sizeof(SquadMember) == kSquadMemberSize);
|
|
|
static_assert(sizeof(SquadAnchor) == kSquadAnchorSize);
|
|
static_assert(sizeof(SquadAnchor) == kSquadAnchorSize);
|
|
|
static_assert(sizeof(AuthoredSceneResource) == kAuthoredSceneResourceSize);
|
|
static_assert(sizeof(AuthoredSceneResource) == kAuthoredSceneResourceSize);
|
|
|
|
|
+static_assert(sizeof(AuthoredSceneEventKey) == kAuthoredSceneEventKeySize);
|
|
|
static_assert(sizeof(AuthoredSceneSquadEdge) == kAuthoredSceneSquadEdgeSize);
|
|
static_assert(sizeof(AuthoredSceneSquadEdge) == kAuthoredSceneSquadEdgeSize);
|
|
|
static_assert(sizeof(TaskTarget) == kTaskTargetSize);
|
|
static_assert(sizeof(TaskTarget) == kTaskTargetSize);
|
|
|
static_assert(sizeof(DialogueCueText) == kDialogueCueTextSize);
|
|
static_assert(sizeof(DialogueCueText) == kDialogueCueTextSize);
|