GlitcherOG (talk | contribs) m (Finished SSH Import) |
(cleanup) |
||
Line 55: | Line 55: | ||
=== Texture Entry === |
=== Texture Entry === |
||
==== Entry Texture Types ==== |
==== Entry Texture Types ==== |
||
All shape entries start with a header that looks like this: |
All shape entries start with a header that looks like this: |
||
<syntaxhighlight lang="c++" line="1"> |
|||
struct ShapeChunkHeader { |
struct ShapeChunkHeader { |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
|||
}; |
}; |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
{| class="wikitable" |
{| class="wikitable" |
||
|+ |
|+ |
||
Line 104: | Line 98: | ||
|8-bit Data, RefPack Compressed |
|8-bit Data, RefPack Compressed |
||
|} |
|} |
||
If `(type & 0x80) == 1` |
If `(type & 0x80) == 1` (seemingly only used for image data) the data is compressed with [[Formats/Common:Refpack|RefPack]]. |
||
=== Texture Header === |
=== Texture Header === |
||
{| class="wikitable" |
{| class="wikitable" |
||
Line 151: | Line 147: | ||
|} |
|} |
||
=== Colour |
=== Colour Palette Header === |
||
(this is the same as the image header, it's just [color count] x 1 sized) |
|||
{| class="wikitable" |
{| class="wikitable" |
||
|+ |
|+ |
||
Line 181: | Line 180: | ||
|Unknown |
|Unknown |
||
|} |
|} |
||
After the header is *Width* count BGRA8888 colors. |
After the header is *Width* count BGRA8888 colors used to make up the palette. |
||
=== Long Name Header === |
=== Long Name Header === |
||
{| class="wikitable" |
{| class="wikitable" |
||
|+ |
|+ |
Latest revision as of 23:52, 16 June 2023
Overview
EA's SSH Texture Files
Magic words
Hex | ASCII |
---|---|
???? | SHPS (SSX, SSX Tricky, SSX 3) |
???? | ShpS (SSX On Tour) |
SHPS
Header
Type | Description |
---|---|
UInt32 | SSH File Size |
UInt32 | Texture Count |
Char[4] | Gimex Version/Creator Code |
Texture Entries
Type | Description |
---|---|
Char[4] | Short Name |
UInt32 | Offset |
Header End
Type | Description |
---|---|
Char[4] | Group |
Char[4] | String? |
Texture Entry
Entry Texture Types
All shape entries start with a header that looks like this:
struct ShapeChunkHeader {
uint8_t chunkType;
uint24_t nextChunk;
// Note that the above isn't a standard type.
// You can probably represent it as a bitfield if you want.
// In layman's terms, if the next chunk offset is 0, then
// it's the end of this shape.
bool IsEndOfShape() {
return nextChunk == 0;
}
};
Chunk Type | Description |
---|---|
0x1 | 4-Bit (16 Colours) Data |
0x2 | 8-bit (256 Colours) Data |
0x5 | 32-bit True Color Image |
0x20 | Palette/CLUT |
105 | Metal Bin (Metal Alpha) |
0x70 | Long/Full Name |
0x85 (`0x5 OR 0x80`) | 8-bit Data, RefPack Compressed |
If `(type & 0x80) == 1` (seemingly only used for image data) the data is compressed with RefPack.
Texture Header
Type | Description |
---|---|
Byte | Entry Type |
UInt24 | Size |
UInt16 | Width |
UInt16 | Height |
UInt16 | XAxis |
UInt16 | YAxis |
UInt16 | Swizzled |
UInt16 | Unknown |
The data following this header can be:
Image Type | Data Type |
---|---|
4-bit | 4-bit indexes into Palette/CLUT |
8-bit | 8-bit indexes into Palette/CLUT |
32-bit | BGRA8888 Direct Colors |
Colour Palette Header
(this is the same as the image header, it's just [color count] x 1 sized)
Type | Description |
---|---|
Byte | Entry Type |
UInt24 | Size |
UInt16 | Width |
UInt16 | Height |
UInt16 | Total |
UInt16 | Unknown |
UInt16 | Swizzled |
UInt16 | Unknown |
After the header is *Width* count BGRA8888 colors used to make up the palette.
Long Name Header
Type | Description |
---|---|
Byte | Entry Type |
UInt24 | Size |
C String | Long Name |