P3D File Format - ODOLV7: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
mNo edit summary
(removed from public view to hinder reverse engineering)
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]]

Revision as of 18:10, 22 June 2016

This page has been removed to hinder the thieves, lowlife, and parasites reverse engineering p3ds to the detriment of the community.