SPA: Difference between revisions

From Xenon Wiki
Jump to navigation Jump to search
imported>Stoker25
mNo edit summary
imported>Godzcheater
(Ill finish metadata and string table tomorrow.)
Line 1: Line 1:
'''SPA''' files are contained inside [[XEX]] files. Based on the [[XDBF]] format, they are used by the dashboard for [[GPD]] creation and [[Xbox LIVE]] information.
'''SPA''' files are contained inside [[XEX]] files or within Updates or DLC. They are just a [[XDBF]] file, they are used by the dashboard for [[GPD]] creation and [[Xbox LIVE]] information.


= Entry Table =
= Record Table =
== Entry Namespaces ==
== Record Namespaces ==
{| border=1
{| border=1
|-
|-
Line 18: Line 18:
|}
|}


= Entry Structures =
= Record Structures =
== File Header ==
== Metadata ==
=== Data ===
Each record here is set out differently depending on there magic.
=== XACH ===
This is just a table of Achievements.
{| border=1
{| border=1
|-
|-
Line 28: Line 30:
! Information
! Information
|-
|-
| 0x0
| 0
| 0x4
| 4
| unsigned int
| string
| Magic (0x58544844)
| Magic (XACH)
|-
|-
| 0x4
| 0x4
Line 41: Line 43:
| 0x4
| 0x4
| unsigned int
| unsigned int
| Structure Size
| Structure Size (- Magic)
|-
|-
| 0xC
| 0xC
| 0x4
| 0x2
| unsigned int
| unsigned short
| Title ID
| Achievement Count
|-
| 0xE
| '''Achievement Count''' * 36 (0x24)
| achievement structure (see below)
| Achievements
|}
==== Achievement Structure ====
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
| 0x0
| 0x2
| unsigned short
| Achievement ID
|-
| 0x2
| 0x2
| unsigned short
| Title String ID
|-
|-
| 0x10
| 0x4
| 0x4
| unsigned int
| Title Type (0 = system, 1 = full, 2 = demo, 3 = download)
|-
| 0x14
| 0x2
| 0x2
| unsigned short
| unsigned short
| Project Version Major
| Unlocked Description ID
|-
|-
| 0x16
| 0x6
| 0x2
| 0x2
| unsigned short
| unsigned short
| Project Version Minor
| Locked Description ID
|-
| 0x8
| 0x4
| unsigned int
| Image ID
|-
|-
| 0x18
| 0xC
| 0x2
| 0x2
| unsigned short
| unsigned short
| Project Version Build
| Gamerscore
|-
|-
| 0x1A
| 0xE
| 0x2
| 0x2
| unsigned short
| unsigned short
| Project Version Revision
| Unused
|-
| 0x10
| 0x4
| unsigned int
| Flags
|-
|-
| 0x1C
| 0x14
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|-
|-
| 0x20
| 0x18
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|-
|-
| 0x24
| 0x1C
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|-
|-
| 0x28
| 0x20
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|}
|}
== Achievement Collection ==
=== XCXT ===
=== Data ===
TODO: what this stores
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
| 0
| 4
| string
| Magic (XCXT)
|-
| 4
| 4
| UInt32
| Version
|-
| 8
| 4
| UInt32
| Structure Size (- Magic)
|-
| 12
| 4
| UInt32
| Record Count
|-
| 16
| '''Record Count''' * 16
| Record structure (see below)
| Records
|}
==== Record Structure ====
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
| 0
| 4
| UInt32
| Unknown
|-
| 4
| 4
| UInt32
| Unknown
|-
| 8
| 4
| UInt32
| Unknown
|-
| 12
| 4
| UInt32
| Unknown
|}
TODO: Unknown
=== XITB ===
This record just stores the ImagePath + ID's.
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
| 0
| 4
| string
| Magic (XITB)
|-
| 4
| 4
| UInt32
| Version
|-
| 8
| 4
| UInt32
| Structure Size (- Magic)
|-
| 12
| 4
| UInt32
| Image Count
|-
| 16
| '''Image Count''' * 16
| Image structure (see below)
| Images
|}
==== Image Structure ====
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
| 0
| 4
| UInt32
| ImageID
|-
| 4
| 4
| UInt32
| Name Length
|-
| 8
| Name Length
| String
| Image Path
|}
=== XMAT ===
TODO: What this stores
{| border=1
{| border=1
|-
|-
Line 102: Line 252:
! Information
! Information
|-
|-
| 0x0
| 0
| 0x4
| 4
| unsigned int
| string
| Magic (0x58414348)
| Magic (XMAT)
|-
| 4
| 4
| UInt32
| Version
|-
| 8
| 4
| UInt32
| Structure Size (- Magic)
|-
| 12
| 20
| Byte[]
| Unknown
|}
TODO: Unknown
=== XPBM ===
TODO: What this stores
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
| 0
| 4
| string
| Magic (XPBM)
|-
| 4
| 4
| UInt32
| Version
|-
| 8
| 4
| UInt32
| Structure Size (- Magic)
|-
| 12
| 32
| Byte[]
| Unknown
|}
TODO: Unknown
=== XPRP ===
TODO: what this stores
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
| 0
| 4
| string
| Magic (XPRP)
|-
|-
| 0x4
| 4
| 0x4
| 4
| unsigned int
| UInt32
| Structure Version
| Version
|-
|-
| 0x8
| 8
| 0x4
| 4
| unsigned int
| UInt32
| Structure Size
| Structure Size (- Magic)
|-
|-
| 0xC
| 12
| 0x2
| 4
| unsigned short
| UInt32
| Achievement Count
| Record Count
|-
|-
| 0xE
| 16
| '''Achievement Count''' * 36 (0x24)
| '''Record Count''' * 8
| achievement structure (see below)
| Record structure (see below)
| Achievements
| Records
|}
|}
 
==== Record Structure ====
=== Achievement Structure ===
 
{| border=1
{| border=1
|-
|-
Line 137: Line 345:
! Information
! Information
|-
|-
| 0x0
| 0
| 0x2
| 4
| unsigned short
| UInt32
| Achievement ID
| Unknown
|-
| 4
| 4
| UInt32
| Unknown
|}
TODO: Unknown
<br><br><br>
TODO: Missing a few records
=== XTHD ===
{| border=1
|-
! Offset
! Length
! Type
! Information
|-
|-
| 0x2
| 0
| 0x2
| 4
| unsigned short
| unsigned int
| Title String ID
| Magic (XTHD)
|-
|-
| 0x4
| 0x4
| 0x2
| 0x4
| unsigned short
| unsigned int
| Unlocked Description ID
| Structure Version
|-
| 0x6
| 0x2
| unsigned short
| Locked Description ID
|-
|-
| 0x8
| 0x8
| 0x4
| 0x4
| unsigned int
| unsigned int
| Image ID
| Structure Size
|-
|-
| 0xC
| 0xC
| 0x4
| unsigned int
| Title ID
|-
| 0x10
| 0x4
| unsigned int
| Title Type (0 = system, 1 = full, 2 = demo, 3 = download)
|-
| 0x14
| 0x2
| 0x2
| unsigned short
| unsigned short
| Gamerscore
| Project Version Major
|-
| 0x16
| 0x2
| unsigned short
| Project Version Minor
|-
|-
| 0xE
| 0x18
| 0x2
| 0x2
| unsigned short
| unsigned short
| Unused
| Project Version Build
|-
|-
| 0x10
| 0x1A
| 0x4
| 0x2
| unsigned int
| unsigned short
| Flags
| Project Version Revision
|-
|-
| 0x14
| 0x1C
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|-
|-
| 0x18
| 0x20
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|-
|-
| 0x1C
| 0x24
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|-
|-
| 0x20
| 0x28
| 0x4
| 0x4
| unsigned int
| unsigned int
| Unused
| Unused
|}
|}
 
is StructureSize null for anyone else? only in this record.
== Images ==
Image entries are composed of a PNG image.
== String Tables ==
TODO: This
[[Category:File formats]]
[[Category:File formats]]

Revision as of 19:33, 4 December 2011

SPA files are contained inside XEX files or within Updates or DLC. They are just a XDBF file, they are used by the dashboard for GPD creation and Xbox LIVE information.

Record Table

Record Namespaces

Value Description
1 Metadata
2 Images
3 String Tables

Record Structures

Metadata

Each record here is set out differently depending on there magic.

XACH

This is just a table of Achievements.

Offset Length Type Information
0 4 string Magic (XACH)
0x4 0x4 unsigned int Structure Version
0x8 0x4 unsigned int Structure Size (- Magic)
0xC 0x2 unsigned short Achievement Count
0xE Achievement Count * 36 (0x24) achievement structure (see below) Achievements

Achievement Structure

Offset Length Type Information
0x0 0x2 unsigned short Achievement ID
0x2 0x2 unsigned short Title String ID
0x4 0x2 unsigned short Unlocked Description ID
0x6 0x2 unsigned short Locked Description ID
0x8 0x4 unsigned int Image ID
0xC 0x2 unsigned short Gamerscore
0xE 0x2 unsigned short Unused
0x10 0x4 unsigned int Flags
0x14 0x4 unsigned int Unused
0x18 0x4 unsigned int Unused
0x1C 0x4 unsigned int Unused
0x20 0x4 unsigned int Unused

XCXT

TODO: what this stores

Offset Length Type Information
0 4 string Magic (XCXT)
4 4 UInt32 Version
8 4 UInt32 Structure Size (- Magic)
12 4 UInt32 Record Count
16 Record Count * 16 Record structure (see below) Records

Record Structure

Offset Length Type Information
0 4 UInt32 Unknown
4 4 UInt32 Unknown
8 4 UInt32 Unknown
12 4 UInt32 Unknown

TODO: Unknown

XITB

This record just stores the ImagePath + ID's.

Offset Length Type Information
0 4 string Magic (XITB)
4 4 UInt32 Version
8 4 UInt32 Structure Size (- Magic)
12 4 UInt32 Image Count
16 Image Count * 16 Image structure (see below) Images

Image Structure

Offset Length Type Information
0 4 UInt32 ImageID
4 4 UInt32 Name Length
8 Name Length String Image Path

XMAT

TODO: What this stores

Offset Length Type Information
0 4 string Magic (XMAT)
4 4 UInt32 Version
8 4 UInt32 Structure Size (- Magic)
12 20 Byte[] Unknown

TODO: Unknown

XPBM

TODO: What this stores

Offset Length Type Information
0 4 string Magic (XPBM)
4 4 UInt32 Version
8 4 UInt32 Structure Size (- Magic)
12 32 Byte[] Unknown

TODO: Unknown

XPRP

TODO: what this stores

Offset Length Type Information
0 4 string Magic (XPRP)
4 4 UInt32 Version
8 4 UInt32 Structure Size (- Magic)
12 4 UInt32 Record Count
16 Record Count * 8 Record structure (see below) Records

Record Structure

Offset Length Type Information
0 4 UInt32 Unknown
4 4 UInt32 Unknown

TODO: Unknown


TODO: Missing a few records

XTHD

Offset Length Type Information
0 4 unsigned int Magic (XTHD)
0x4 0x4 unsigned int Structure Version
0x8 0x4 unsigned int Structure Size
0xC 0x4 unsigned int Title ID
0x10 0x4 unsigned int Title Type (0 = system, 1 = full, 2 = demo, 3 = download)
0x14 0x2 unsigned short Project Version Major
0x16 0x2 unsigned short Project Version Minor
0x18 0x2 unsigned short Project Version Build
0x1A 0x2 unsigned short Project Version Revision
0x1C 0x4 unsigned int Unused
0x20 0x4 unsigned int Unused
0x24 0x4 unsigned int Unused
0x28 0x4 unsigned int Unused

is StructureSize null for anyone else? only in this record.

Images

Image entries are composed of a PNG image.

String Tables

TODO: This