3D model format: Difference between revisions

From Trickstart wiki
Line 37: Line 37:


You have to add '''0x148''' to each value to get proper pointers
You have to add '''0x148''' to each value to get proper pointers
'''Bold''' IDs are in all files, rest of them are specific for tracks


Some of these are either unused or possibly repurpesed
Some of these are either unused or possibly repurpesed


All blocks seem to be 32-bit aligned
All blocks seem to be 32-bit aligned
If the offset/size address is empty it's always set to zero
{| class="wikitable"
{| class="wikitable"
!ID
!ID
Line 107: Line 112:
|
|
|-
|-
|12
|'''12'''
|''0x50''
|
|0xe4
|'''0xe4'''
|Offset is 0x0; the size is non-zero, for shadow it's 1, with one <code>00</code> byte, size is checked for tracks
|for non-tracks it's size of 1 divided by 16, unknown for tracks
|-
|-
|''13''
|''13''
|''0x54''
|''0x54''
|''0xe8''
|''0xe8''
|''unused''
|
|-
|-
|''14''
|''14''
|''0x58''
|''0x58''
|''0xec''
|
|''unused, for tracks offset marks enf of file''
|''for tracks offset marks end of file''
|-
|-
|15
|15
|0x5c
|0x5c
|0xf0
|0xf0
|track stuff
|
|-
|-
|16
|16
|0x60
|0x60
|0xf4
|0xf4
|track stuff
|
|-
|-
|17
|17
Line 138: Line 143:
|-
|-
|18
|18
|''0x68''
|
|0xfc
|0xfc
|size if 18 stores size of 20 divided by 0x90
|stores size of 20 divided by 0x90
|-
|-
|19
|19
|''0x6c''
|
|0x100
|0x100
|
|
Line 155: Line 160:
|0x74
|0x74
|0x108
|0x108
|track stuff
|
|-
|-
|22
|22
|0x78
|0x78
|0x10c
|0x10c
|track stuff
|
|-
|-
|23
|23
|0x7c
|0x7c
|0x110
|0x110
|track stuff
|
|-
|-
|24
|24
|0x80
|0x80
|0x114
|0x114
|track stuff
|
|-
|-
|25
|25
|0x84
|0x84
|0x118
|0x118
|track stuff
|
|-
|-
|26
|26
|0x88
|0x88
|0x11c
|0x11c
|track stuff
|
|-
|-
|27
|27
|0x8c
|0x8c
|0x120
|0x120
|track stuff
|
|-
|-
|28
|28
|0x90
|0x90
|0x124
|0x124
|track stuff
|
|-
|-
|29
|29
|0x94
|0x94
|0x128
|0x128
|track stuff
|
|-
|-
|30
|30
|0x98
|0x98
|0x12c
|0x12c
|track stuff
|
|-
|-
|31
|31
|0x9c
|0x9c
|0x130
|0x130
|track stuff
|
|-
|-
|32
|32
|0xa0
|0xa0
|0x134
|0x134
|track stuff
|
|-
|-
|''33''
|''33''
|''0xa4''
|
|''0x138''
|
|''unused''
|
|-
|-
|''34''
|''34''
|''0xa8''
|
|''0x13c''
|
|''unused''
|
|-
|-
|''35''
|''35''
|''0xac''
|
|''0x140''
|
|''unused''
|
|-
|-
|''36''
|''36''
|''0xb0''
|
|''0x144''
|
|''unused''
|
|}
|}

Revision as of 21:03, 8 January 2021

Stores 3D models, more investigation needed.

Thanks to Martin for initial format reversing.

  • Magic - PMD V1.83
    • some files use version 1.82 instead, but they aren't used by the game, the engine in PC version won't recognise anything other than 1.83
    • There is one unused mention of PMD V1.71 in the game binary
Offset Size Description
0x0 0x18? Magic - PMD V1.83
0x18 0x4 Type - 0 = shadow & skybox; 1 = track; 2 = car
0x1C 0x4 Zeroes?
0x20 0x94? offsetsTable
0xB4 0x94? offsetsTable sizes

offsetsTable

You have to add 0x148 to each value to get proper pointers

Bold IDs are in all files, rest of them are specific for tracks

Some of these are either unused or possibly repurpesed

All blocks seem to be 32-bit aligned


If the offset/size address is empty it's always set to zero

ID offset size offset Description
0 0x20 0xb4 Martin think it might be some sort of colider
1 0x24 0xb8 polygons data?
2 0x28 0xbc UV texture data?
3 0x2c 0xc0 vertex data?
4 0x30 0xc4 faces data?
5 0x34 0xc8 Textures names
6 0x38 0xcc Offsets to texture names, absolute addresses in file
7 0x3c 0xd0 Each element is 16B long, ?, ?, float, float
8 0x40 0xd4 Holds IDs of elements in 7
9 0x44 0xd8 surface transforms data?
10 0x48 0xdc surfaces data?
11 0x4c 0xe0
12 0xe4 for non-tracks it's size of 1 divided by 16, unknown for tracks
13 0x54 0xe8
14 0x58 for tracks offset marks end of file
15 0x5c 0xf0
16 0x60 0xf4
17 0x64 0xf8
18 0xfc stores size of 20 divided by 0x90
19 0x100
20 0x70 0x104
21 0x74 0x108
22 0x78 0x10c
23 0x7c 0x110
24 0x80 0x114
25 0x84 0x118
26 0x88 0x11c
27 0x8c 0x120
28 0x90 0x124
29 0x94 0x128
30 0x98 0x12c
31 0x9c 0x130
32 0xa0 0x134
33
34
35
36