3D model format: Difference between revisions

From Trickstart wiki
No edit summary
No edit summary
Line 46: Line 46:
!ID
!ID
!offset
!offset
!size offset
!Description
!Description
|-
|-
|0
|0
|0x20
|0x20
|
|0xb4
|track stuff???
|-
|-
|1
|1
|0x24
|0x24
|0xb8
|polygons data?
|polygons data?
|-
|-
|2
|2
|0x28
|0x28
|0xbc
|UV texture data?
|UV texture data?
|-
|-
|3
|3
|0x2c
|0x2c
|0xc0
|vertex data?
|vertex data?
|-
|-
|4
|4
|0x30
|0x30
|0xc4
|faces data?
|faces data?
|-
|-
|5
|5
|0x34
|0x34
|0xc8
|Textures names
|Textures names
|-
|-
|6
|6
|0x38
|0x38
|0xcc
|Offsets to texture names, absolute addresses in file
|Offsets to texture names, absolute addresses in file
|-
|-
|7
|7
|0x3c
|0x3c
|0xd0
|Each element is 16B long, ?, ?, float, float
|Each element is 16B long, ?, ?, float, float
|-
|-
|8
|8
|0x40
|0x40
|0xd4
|Holds IDs of elements in 7
|Holds IDs of elements in 7
|-
|-
|9
|9
|0x44
|0x44
|0xd8
|surface transforms data?
|surface transforms data?
|-
|-
|10
|10
|0x48
|0x48
|0xdc
|surfaces data?
|surfaces data?
|-
|-
|11
|11
|0x4c
|0x4c
|0xe0
|
|
|-
|-
|12
|12
|0x50
|0x50
|Offset is 0x0; the size is non-zero, for shadow it's 1, with one <code>00</code> byte
|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
|-
|-
|13
|13
|0x54
|0x54
|0xe8
|
|
|-
|-
|14
|14
|0x58
|0x58
|
|0xec
|track stuff
|-
|-
|15
|15
|0x5c
|0x5c
|
|0xf0
|track stuff
|-
|-
|16
|16
|0x60
|0x60
|
|0xf4
|track stuff
|-
|-
|17
|17
|0x64
|0x64
|0xf8
|
|
|-
|-
|18
|18
|0x68
|0x68
|0xfc
|
|
|-
|-
|19
|19
|0x6c
|0x6c
|0x100
|
|
|-
|-
|20
|20
|0x70
|0x70
|0x104
|
|
|-
|-
|21
|21
|0x74
|0x74
|
|0x108
|track stuff
|-
|-
|22
|22
|0x78
|0x78
|
|0x10c
|track stuff
|-
|-
|23
|23
|0x7c
|0x7c
|
|0x110
|track stuff
|-
|-
|24
|24
|0x80
|0x80
|
|0x114
|track stuff
|-
|-
|25
|25
|0x84
|0x84
|
|0x118
|track stuff
|-
|-
|26
|26
|0x88
|0x88
|
|0x11c
|track stuff
|-
|-
|27
|27
|0x8c
|0x8c
|
|0x120
|track stuff
|-
|-
|28
|28
|0x90
|0x90
|
|0x124
|track stuff
|-
|-
|29
|29
|0x94
|0x94
|
|0x128
|track stuff
|-
|-
|30
|30
|0x98
|0x98
|
|0x12c
|track stuff
|-
|-
|31
|31
|0x9c
|0x9c
|
|0x130
|track stuff
|-
|-
|32
|32
|0xa0
|0xa0
|
|0x134
|track stuff
|-
|-
|33
|33
|0xa4
|0xa4
|0x138
|
|
|-
|-
|34
|34
|0xa8
|0xa8
|0x13c
|
|
|-
|-
|35
|35
|0xac
|0xac
|0x140
|
|
|-
|-
|36
|36
|0xb0
|0xb0
|0x144
|
|
|}
|}

Revision as of 19:25, 31 December 2020

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? array of 37 ints, might need to add constant 0x148 for elements 0-12
0xB4 0x94? Sizes of data chunks ,array of 37 ints

offsets1Table

  • Looks like indexes 12, 13, 19, 34, and 35 are always set to 0 in all known models
  • 14-33 (minus 19 of course) is only set if the type is set to track (1)
  • I was off by 3 bytes, need to redo that part

You have to add 0x148 to each value to get proper pointers (works with elements 0-12, later ones will probably need different bias)

All blocks (or at least 0-11) are 32-bytes aligned, 12 is aligned so that the next block is 32-bit aligned

ID offset size offset Description
0 0x20 0xb4 track stuff???
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 0x50 0xe4 Offset is 0x0; the size is non-zero, for shadow it's 1, with one 00 byte, size is checked for tracks
13 0x54 0xe8
14 0x58 0xec track stuff
15 0x5c 0xf0 track stuff
16 0x60 0xf4 track stuff
17 0x64 0xf8
18 0x68 0xfc
19 0x6c 0x100
20 0x70 0x104
21 0x74 0x108 track stuff
22 0x78 0x10c track stuff
23 0x7c 0x110 track stuff
24 0x80 0x114 track stuff
25 0x84 0x118 track stuff
26 0x88 0x11c track stuff
27 0x8c 0x120 track stuff
28 0x90 0x124 track stuff
29 0x94 0x128 track stuff
30 0x98 0x12c track stuff
31 0x9c 0x130 track stuff
32 0xa0 0x134 track stuff
33 0xa4 0x138
34 0xa8 0x13c
35 0xac 0x140
36 0xb0 0x144