Difference between revisions of "Binary IPL"

From GTAMods Wiki
Jump to navigation Jump to search
m (File Format)
(INST Structure)
Line 1: Line 1:
'''Binary [[IPL|item placement]]''' files are only present in [[San Andreas]] and can be only opened or edited using a special editor. Binary item placement files are also present in [[GTA IV]], where they are called [[WPL]] files and have another format.
+
'''WPL''' is the format of the map-related files similar to [[IPL]]s from the previous games. It can be edited with [[WPL Manager]].
  
 
== File Format ==
 
== File Format ==
  
Each binary item placement file starts with a 4 byte identifier, followed by a short header which contains the number of instances in a block. All in all a binary ipl file has the same format as an uncompiled one, just with the difference that the information is stored binary instead as plain text.
+
Each world placement file starts with one single header followed by the object placement information. The structure for the header is very simple:
  
  4b - CHAR[4]   - always 'bnry'
+
  4b - UINT32   - Unknown
  4b - INT32    - number of item instances
+
  4b - UINT32  - Instances
4b  - INT32    - number of unknown 1
 
4b  - INT32    - number of unknown 2
 
4b  - INT32    - number of unknown 3
 
4b  - INT32    - number of parked cars
 
4b  - INT32    - number of unknown 4
 
4b  - INT32    - offset of item instances (should be 76)
 
4b  - INT32    - unused size (always 0)
 
4b  - INT32    - offset of unknown 1
 
4b  - INT32    - unused size (always 0)
 
4b  - INT32    - offset of unknown 2
 
4b  - INT32    - unused size (always 0)
 
4b  - INT32    - offset of unknown 3
 
4b  - INT32    - unused size (always 0)
 
4b  - INT32    - offset of parked cars
 
4b  - INT32    - unused size (always 0)
 
4b  - INT32    - offset of unknown 4
 
4b  - INT32    - unused size (always 0)
 
  
However there are only [[INST]] and [[CARS]] sections are used in binary IPL's, so the rest of the format is unknown.
+
The placement information corresponds to the previous [[Item_Placement#inst|instance]] section of the <code>.ipl</code> files. They have a binary structure like the [[Binary_IPL|binary ipl]] files introduced with [[San Andreas]]:
  
The header is followed by the arrays of the objects. INST arrays do have a size of '''40 bytes''' per structure, and cars got '''48 bytes'''.
+
''' Section 0 - INST'''  
  
===INST Structure===
+
4b - FLOAT  - Position X
 +
4b - FLOAT  - Position Y
 +
4b - FLOAT  - Position Z
 +
4b - FLOAT  - Rotation X
 +
4b - FLOAT  - Rotation Y
 +
4b - FLOAT  - Rotation Z
 +
4b - FLOAT  - Rotation W
 +
4b - UINT32  - Model name [[:Category:Static_Model_Hashes|hash]]
 +
4b - UINT32  - Unknown
 +
4b - UINT32  - [[LOD]] Index (Index of another model in the current file)
 +
4b - UINT32  - Unknown
 +
4b - UINT32  - Unknown
  
  4b  - FLOAT   - PosX
+
''Rotation information as [[Wikipedia:Quarternion|Quarternion]]''
  4b - FLOAT   - PosY
+
 
  4b - FLOAT   - PosZ
+
'''Section 3 - Parked Cars'''
  4b - FLOAT   - RotX
+
 
  4b - FLOAT   - RotY
+
  4b - FLOAT  - Position X
  4b  - FLOAT    - RotZ
+
  4b - FLOAT   - Position Y
  4b  - FLOAT    - RotW
+
  4b - FLOAT   - Position Z
  4b  - INT32   - Object ID
+
  4b - FLOAT   - Unknown
  4b  - UINT32   - [[IDE#Object_Flags|Flags]]
+
  4b - FLOAT   - Unknown
 +
  4b - FLOAT   - Unknown
 +
  4b - UINT32 - Model name [[:Category:Static_Model_Hashes|hash]]
 +
4b - INT32  - Unknown
 +
  4b - INT32  - Unknown
 +
  4b - INT32  - Unknown
 +
  4b - INT32  - Unknown
 +
  4b - INT32   - Unknown
 +
  4b - INT32  - Unknown
 +
  4b - INT32   - Unknown
 +
 
 +
'''Section 9 - LODcull'''
  
<!-- Are those flags realy IDE flags? This appears very strange, so you can assign different flags to one item, which goes against the internal core rule, that flags are controlled by the IDE pool and applied to the rendering engine using the object id... straaaange ^^ - Got to check this! -->
+
4b -  FLOAT  - Position X1
''Rotation information as [[Wikipedia:Quarternion|Quarternion]]''
+
4b -  FLOAT  - Position Y1
 +
4b -  FLOAT  - Position Z1
 +
4b -  FLOAT  - Position X2
 +
4b -  FLOAT  - Position Y2
 +
4b -  FLOAT  - Position Z2
 +
4b  - UINT32  - number of lod models in wdd file
 +
4b  - UINT32  - Hash 1  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 2  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 3  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 4  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 5  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 6  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 7  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 8  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 9  - [[:Category:Static_Model_Hashes|hash]]
 +
4b  - UINT32  - Hash 10 - [[:Category:Static_Model_Hashes|hash]]
 +
32b - String  - Model name 1
 +
32b - String  - Model name 2
 +
32b - String  - Model name 3
 +
32b - String  - Model name 4
 +
32b - String  - Model name 5
 +
32b - String  - Model name 6
 +
32b - String  - Model name 7
 +
32b - String  - Model name 8
 +
32b - String  - Model name 9
 +
32b - String  - Model name 10
 +
 
 +
'''''X1, Y1, Z1''' = lower left vertex position'' and
 +
'''''X2, Y2, Z2''' = upper right vertex position''
 +
 
 +
'''Section 10 - Unknown Zon or Cull'''
 +
 
 +
4b - FLOAT    - Position X1
 +
4b - FLOAT    - Position Y1
 +
4b - FLOAT    - Position Z1
 +
4b - FLOAT    - Position X2
 +
4b - FLOAT    - Position Y2
 +
4b - FLOAT    - Position Z2
 +
 
 +
'''''X1, Y1, Z1''' = lower left vertex position'' and
 +
'''''X2, Y2, Z2''' = upper right vertex position''
 +
 
 +
<!---
 +
;Header
 +
<source lang="cpp">
 +
struct Header_t
 +
{
 +
    BYTE byteUnknown01[4];
 +
    DWORD dwNbrOfBlockInst;
 +
};
 +
</source>
  
===CARS Structure===
+
;InstBlock (Start from 0x44)
 +
<source lang="cpp">
 +
struct Inst_t
 +
{
 +
    float  fPosition[3];
 +
    float  fRotation[4];
 +
    DWORD dwModelNameHash;
 +
    BYTE byteUnknown01[4];
 +
    DWORD dwAttachedLod;
 +
    BYTE byteUnknown02[8];
 +
};
 +
</source>
 +
-->
  
4b  - FLOAT    - PosX
+
== XPL ==
  4b  - FLOAT    - PosY
+
In the XBox 360's version of GTA 4 same files have the extension <code>.xpl</code>. The XPL and WPL formats are same, but due to the fact XPL files are used on the Xenon platform its data is stored in the [[Wikipedia:Endianness|big-endian order]].
4b  - FLOAT    - PosZ
+
<!--not sure where to put this: "They are used to map generic objects which are defined with another path in the [[Images.txt|image listing]] file."-->
4b  - FLOAT    - Angle (Around Z-Axis)
 
4b  - INT32    - Object ID
 
28b - INT32[7] - Unknown flags (See [[Item_Placement#CARS|IPL file specification]])
 
  
 
== Tools ==
 
== Tools ==
* [http://www.gta.ocram-net.de/index_all.php?downloadsa=11 Binary (De-)Compiler] - by {{U|ocram88}}
+
* [[WPL Manager]] &ndash; by {{U|UZI-I|Yoann (UZI-I)}}
 
 
== See also ==
 
* [[INST]]
 
* [[CARS (IPL Section)]]
 
  
== External Links ==
+
== External Link ==
* {{GTAF|202532|IPL documentation}} &ndash; by {{U|spaceeinstein}}
+
* {{GTAF|389423|WPL file format specification}}
* [http://people.freenet.de/steve-m/binipl.rar Binary IPL's decompiled] - by {{U|steve-m}}
 
  
{{file-stub}}
+
{{GTA4-navi}}
{{SA-navi}}
+
{{File-stub}}
[[Category:Map_Formats]]
+
[[Category:Map Formats]][[Category:GTA 4]]

Revision as of 17:25, 6 June 2009

WPL is the format of the map-related files similar to IPLs from the previous games. It can be edited with WPL Manager.

File Format

Each world placement file starts with one single header followed by the object placement information. The structure for the header is very simple:

4b - UINT32   - Unknown
4b - UINT32   - Instances

The placement information corresponds to the previous instance section of the .ipl files. They have a binary structure like the binary ipl files introduced with San Andreas:

Section 0 - INST

4b - FLOAT   - Position X
4b - FLOAT   - Position Y
4b - FLOAT   - Position Z
4b - FLOAT   - Rotation X
4b - FLOAT   - Rotation Y
4b - FLOAT   - Rotation Z
4b - FLOAT   - Rotation W
4b - UINT32  - Model name hash
4b - UINT32  - Unknown
4b - UINT32  - LOD Index (Index of another model in the current file)
4b - UINT32  - Unknown
4b - UINT32  - Unknown

Rotation information as Quarternion

Section 3 - Parked Cars

4b - FLOAT   - Position X
4b - FLOAT   - Position Y
4b - FLOAT   - Position Z
4b - FLOAT   - Unknown
4b - FLOAT   - Unknown
4b - FLOAT   - Unknown
4b - UINT32  - Model name hash
4b - INT32   - Unknown
4b - INT32   - Unknown
4b - INT32   - Unknown
4b - INT32   - Unknown
4b - INT32   - Unknown
4b - INT32   - Unknown
4b - INT32   - Unknown

Section 9 - LODcull

4b -  FLOAT   - Position X1
4b -  FLOAT   - Position Y1
4b -  FLOAT   - Position Z1
4b -  FLOAT   - Position X2
4b -  FLOAT   - Position Y2
4b -  FLOAT   - Position Z2
4b  - UINT32  - number of lod models in wdd file
4b  - UINT32  - Hash 1  - hash
4b  - UINT32  - Hash 2  - hash
4b  - UINT32  - Hash 3  - hash
4b  - UINT32  - Hash 4  - hash
4b  - UINT32  - Hash 5  - hash
4b  - UINT32  - Hash 6  - hash
4b  - UINT32  - Hash 7  - hash
4b  - UINT32  - Hash 8  - hash
4b  - UINT32  - Hash 9  - hash
4b  - UINT32  - Hash 10 - hash
32b - String  - Model name 1
32b - String  - Model name 2
32b - String  - Model name 3
32b - String  - Model name 4
32b - String  - Model name 5
32b - String  - Model name 6
32b - String  - Model name 7
32b - String  - Model name 8
32b - String  - Model name 9
32b - String  - Model name 10

X1, Y1, Z1 = lower left vertex position and X2, Y2, Z2 = upper right vertex position

Section 10 - Unknown Zon or Cull

4b - FLOAT     - Position X1
4b - FLOAT     - Position Y1
4b - FLOAT     - Position Z1
4b - FLOAT     - Position X2
4b - FLOAT     - Position Y2
4b - FLOAT     - Position Z2

X1, Y1, Z1 = lower left vertex position and X2, Y2, Z2 = upper right vertex position


XPL

In the XBox 360's version of GTA 4 same files have the extension .xpl. The XPL and WPL formats are same, but due to the fact XPL files are used on the Xenon platform its data is stored in the big-endian order.

Tools

External Link