3D model format: Difference between revisions
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 35are 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 |