|
|
Line 1: |
Line 1: |
| {{unsupported-doc}}
| | This page has been removed to hinder the thieves, lowlife, and parasites reverse engineering p3ds to the detriment of the community. |
| | |
| | |
| =General=
| |
| ==Legend==
| |
| see [[Generic FileFormat Data Types]]
| |
| ==CompressedStructures==
| |
| | |
| (potentially) compressed arrays are endemic to most blocks contained in a p3d.
| |
| | |
| CompressedStruct
| |
| {
| |
| ulong Count;
| |
| <type> Array[Count];
| |
| };
| |
| | |
| | |
| if Count * sizeof(<type>) exceeds 1023 bytes the array is compressed. The '''resulting''' array will be expanded using lzh compression exactly as found in pbo's (for instance)
| |
| | |
| After de-compression, the Count remains the same because it is a count of the arraytype.
| |
| | |
| For uncompressed arrays (byte count < 1024) the Count and data are treated 'as is'.
| |
| | |
| | |
| Thus for various Array <types>
| |
| *ulong Array: > 255 // 1024 / sizeof(ulong)
| |
| *float thing[2]: > 127 // 1024 / 2*sizeof(float)
| |
| *SomeStructure: > // count * sizeof (SomeStructure) > 1023
| |
| | |
| | |
| Note that potentially compressed arrays in these structures only have an known output length. the decompressor therefore must work on infinite input length.
| |
| | |
| | |
| =Odol7Stuct=
| |
| ODOLV7
| |
| {
| |
| StandardP3DHeader Header;
| |
| LodStruct Lods[Header.LodCount];
| |
| [[P3D Model Info|ModelInfo]] ModelInfo;
| |
| };
| |
| | |
| ==StandardP3DHeader==
| |
| StandardP3DHeader
| |
| {
| |
| char Signature[4]; ''//"ODOL" (vs MLOD eg)''
| |
| ulong Version; ''// 7''
| |
| ulong LodCount; ''// at least one''
| |
| }
| |
| | |
| ==LodStruct==
| |
| LodStruct
| |
| {
| |
| [[#VertexTable|VertexTable]] VertexTable;
| |
| float UnknownFloat1;
| |
| float UnknownFloat2;
| |
| XYZTriplet MinPos;
| |
| XYZTriplet MaxPos;
| |
| XYZTriplet AutoCenterPos;
| |
| float UnknownFloat3;
| |
| [[#Textures|Textures]] Textures;
| |
| [[P3D Lod Edges|LodEdges]] LodEdges;
| |
| ulong NoOfFaces;
| |
| ulong OffsetToLodSections;
| |
| [[P3D Lod Faces|LodFace]] LodFaces[NoOfFaces]; // ie polygons
| |
| ulong nSections;
| |
| [[P3D Lod Sections|LODSection]] LODSections[nSections];
| |
| ulong nNamedSelections;
| |
| [[P3D Named Selections|NamedSelection]] NamedSelections[nNamedSelections];
| |
| ulong nTokens;
| |
| [[#NamedProperty|NamedProperty]] NamedProperties[nTokens];
| |
| ulong nFrames;
| |
| [[P3D Lod Frames|Frame]] Frames[nFrames];
| |
| ulong IconColor;
| |
| ulong SelectedColor;
| |
| ulong Unknown;
| |
| ulong nProxies;
| |
| [[P3D Lod Proxies|LodProxy]] LodProxies[nProxies];
| |
| };
| |
| | |
| ===VertexTable===
| |
| struct
| |
| {
| |
| ulong Count;
| |
| ulong PointFlags[Count]; // compressed. see [[P3D Point and Face Flags]]
| |
| ulong Count;
| |
| UVPair UV1[Count]; // compressed
| |
| ulong Count;
| |
| XYZTriplet Points[Count]; // UNcompressed
| |
| ulong Count;
| |
| XYZTriplet Normals[Count]; // UNcompressed
| |
| }
| |
| | |
| *Count is the same value for all four tables.
| |
| | |
| ===Textures===
| |
| struct
| |
| {
| |
| '''ulong''' Count;
| |
| '''asciiz''' Textures[...]; ''// "data/1.paa\0data/2.paa\0"...
| |
| }
| |
| | |
| Count corresponds to the number of concatenated strings. It is required, since, architecturally at least, one of more of the asciiz strings could be null.
| |
| | |
| | |
| ===NamedProperty===
| |
| struct
| |
| {
| |
| Asciiz Property;// "noshadow" = "1" eg
| |
| Asciiz Value;
| |
| }
| |
| | |
| | |
| =Related Page(s)=
| |
| ==LZ in ODOL==
| |
| see [[Compressed LZSS File Format]]
| |
| | |
| [[BIS_File_Formats#3D_Model_File_Formats|Model File Formats]]
| |
| [[Category:BIS_File_Formats]]
| |