|
| 1 | +# Steep |
| 2 | +Research by theawesomecoder61. |
| 3 | + |
| 4 | +### How to interpret this documentation |
| 5 | +- If a struct has been spelt out, it will not be repeated. Use the links to jump to that struct. |
| 6 | + |
| 7 | +## Notes |
| 8 | +- In the raw data extracted from the forge, you should take each Data Chunk data, decompress it, and merge it with the other decompressed data. This is because the maximum decompressed data size for each Data Chunk is 262144 bytes (0x00 0x00 0x04 0x00). |
| 9 | +- **THIS DOCUMENTATION IS UNFINISHED.** |
| 10 | + |
| 11 | +## Compression |
| 12 | +Zstd |
| 13 | + |
| 14 | +## Header |
| 15 | +| Type | Name | Size | Notes | |
| 16 | +|--------|----------------|--------------|-------| |
| 17 | +| [Resource Type](#resource-type) | resourceType | 4 | | |
| 18 | +| int | fileSize | 4 | | |
| 19 | +| int | fileNameSize | 4 | | |
| 20 | +| char[] | fileName | fileNameSize | | |
| 21 | +| | <skip 2 bytes> | | | |
| 22 | +| int64 | fileID | 8 | fileID is the same from this file's entry in the .forge Index Table | |
| 23 | + |
| 24 | +--- |
| 25 | + |
| 26 | +## Resource Type |
| 27 | +This is always found at the first 4 bytes of decompressed data. Other Resource Types can appear in the same file, for example, in mesh files. Here is a selection of the most important Resource Types. |
| 28 | + |
| 29 | +| Value | Resource Type | |
| 30 | +|------------|---------------| |
| 31 | +| 0xFC9E1595 | Compiled Mesh | |
| 32 | +| 0x85C817C3 | Material | |
| 33 | +| 0x415D9568 | Mesh | |
| 34 | +| 0x1D4B87A3 | Mipmap | |
| 35 | +| 0xA2B7E917 | Texture Map | |
| 36 | +| 0xD70E6670 | Texture Set | |
| 37 | + |
| 38 | +--- |
| 39 | + |
| 40 | +## DXT |
| 41 | +Whatever you call it, DXT Type, DXT compression, fourCC, etc. |
| 42 | + |
| 43 | +| Value | DXT | |
| 44 | +|----------|------| |
| 45 | +| 0, 7 | DXT0 | |
| 46 | +| 1, 2, 3 | DXT1 | |
| 47 | +| 4 | DXT3 | |
| 48 | +| 5, 6, 12 | DXT5 | |
| 49 | +| 8, 9, 16 | DX10 | |
| 50 | + |
| 51 | +--- |
| 52 | + |
| 53 | +## Texture Map file |
| 54 | +### Structure |
| 55 | +- [Header](#header) |
| 56 | +- [Texture Map](#texture-map) |
| 57 | +- [Image Data](#image-data) |
| 58 | + |
| 59 | +### TopMip |
| 60 | +| Type | Name | Size (bytes) | |
| 61 | +|------|----------------|--------------| |
| 62 | +| int | width | 4 | |
| 63 | +| int | height | 4 | |
| 64 | +| | <skip 8 bytes> | | |
| 65 | +| [DXT](#dxt) | dxt | 4 | |
| 66 | +| | <skip 4 bytes> | | |
| 67 | +| int | mipmaps | 4 | |
| 68 | + |
| 69 | +### Texture Map |
| 70 | +| Type | Name | Size (bytes) | |
| 71 | +|--------|-----------------|--------------| |
| 72 | +| int | fileType | 4 | |
| 73 | +| [TopMip](#topmip) | topMip0 | 28 | |
| 74 | +| | <skip 57 bytes> | | |
| 75 | +| [TopMip](#topmip) | topMip1 | 28 | |
| 76 | +| | <skip 12 bytes> | | |
| 77 | + |
| 78 | +### Image Data |
| 79 | +| Type | Name | Size (bytes) | |
| 80 | +|--------|-----------------|---------------| |
| 81 | +| int | imageDataSize | 4 | |
| 82 | +| byte[] | imageData | imageDataSize | |
| 83 | + |
| 84 | +--- |
| 85 | + |
| 86 | +## TopMip file |
| 87 | +### Structure |
| 88 | +- [Header](#header) |
| 89 | +- [Image Data Alt](#image-data-alt) |
| 90 | + |
| 91 | +### Image Data Alt |
| 92 | +This is different than the Image Data block above. This one lacks an int before the imageData. |
| 93 | + |
| 94 | +| Type | Name | Size (bytes) | Notes | |
| 95 | +|--------|-----------------|--------------|-------| |
| 96 | +| byte[] | imageData | fileSize | fileSize from the Header | |
0 commit comments