PEW File Format: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Endblocks)
Line 262: Line 262:
   }
   }
</nowiki></code>
</nowiki></code>
===EndBlock===
EndBlock
{
  shortBool Always1;
  shortbool Always1;
  ulong    Unknown[12];
            /* typical data
            **00 00 00 00 00 00 00 F0 2C 46 00 98 23 46 C6 6F
            **C6 42 0E 01 00 00 01 00 00 F0 2C 46 00 98 23 46
            **C6 6F C6 42 0E 01 00 00 4B 00 00 00 00 00 00 00
            */
  ushort    StageID;  // 1,2,3,4
  String    Name1;    //"hlavni silnice\0"
  String    Name2;    //"kr_silnice_cesta_t\0"
  RGBA      color;    //0xFFFFFFFF
  shortBool Always1;
  ulong    Count;    // 2,3
  EndBlock1 EndBlock1[Count];
  ulong    Unknown[27];
            /* typical data
            **FA D4 30 BF 94 58 08 3D 00 00 C8 C0 00 00 60 C0
            **00 00 00 00 00 00 48 C1 00 00 60 40 00 00 00 00
            **00 00 48 C1 00 00 60 C0 00 00 00 00 00 00 00 00
            **00 00 60 40 00 00 00 00 00 00 00 00 00 00 C8 C0
            **00 00 00 00 00 00 30 C0 00 00 C8 C0 00 00 00 00
            **00 00 1C C1 04 01 00 00 00 00 00 00 00 00 00 00
            **09 00 00 00 0B 80 00 00 04 00 00 00
            */
  ulong    Count;    // 2,3
  EndBlock2 EndBlock2[Count];
}
====EndBlock1====
EndBlock1
{
  ulong Unknown[4];// Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00
  String Name;    // "silnice hlavni silnic\0"
}
====EndBlock2====
EndBlock2
{
  ulong    Count;          //15 eg
  EndBlock3 EndBlock3[Count];
  String    Name;            //"silnice hlavni silnic\0"
  ulong    Unknown[4];      //Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00
  RGBA      color;          //FFFFFFFF
  RGBA      color2;          //FFFFFFFF
  ushort    ind;            //01
  ulong    buf2[4];        // Typically 00 00 00 00 00 00 39 40 00 00 00 00 00 00 24 40
}
=====EndBlock3=====
EndBlock3
{
  ulong    unknown[6];
          /* typical data
          **01 00 01 00 00 86 2D 46
          **00 98 23 46 65 6C C5 42
          **0E 01 00 00 4D 00 00 00
          */
  ushort  Type;              //03
  String  Name;              //"silnice10 100\0"
  ulong    unknown[25];
          /*typical data
          **00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
          **C4 76 C2 3F 0E EB 8A C1 00 00 00 00 BE 00 00 00
          **CC ED 26 BE CA 0F 12 40 56 30 28 3F 00 00 00 00
          **18 CA 04 C1 48 8B 3D C0 00 00 00 00 2D 3D 91 C1
          **06 01 C0 40 00 00 00 00 EE 98 84 C1 99 99 91 C0
          **00 00 00 00 64 4A 5F 35 99 99 91 40 00 00 00 00
          **64 4A 5F B5 01 00
          */
  shortBool ok; //1
}


== Enums ==
== Enums ==

Revision as of 11:42, 10 February 2009

Template:unsupported-doc

Introduction

To do...

Legend

Type Description
byte 8 bit (1 byte)
short 16 bit signed short (2 bytes)
int 32 bit signed integer (4 bytes)
float 32 bit signed single precision floating point value (4 bytes)
double 64 bit signed single precision floating point value (8 bytes)
asciiz Null terminated (0x00) variable length ascii string
ascii fixed length ascii string(UTF-8)

XYPair

XYPair
{
 ulong x,y;
}

RGBAColor

RGBAColor
{
 byte r,g,b,a;
}

String

String
{
 ulong  Length;
 Asciiz Characters;// null terminated regardless. Actual len = len+1;

File Format

The following is a mix of pseudo-code and structure references that could be used to describe the file format of POSEW60.pew project design file.
Any naming definitions or naming conventions used may or may not be accurate.
  • This file format is principally used with Armed Assault v1.09 and later plus the ArmA Tools Suite Final release (v1.14).

POSEW60 { PoseHeader Header; ulong nObjectTypes; ObjectType ObjectTypes[nObjectTypes]; RoadNets RoadNets[...]; Terrain Terrain[...]; ulong Unknown; ulong NoOfObjects; Object Objects[NoOfObjects]; ulong NoOfLayers; Layer Layers[[NoOfLayers] ; ulong RoadNetIndices[TerrainGridSizeXY]; ulong NoOfBackgrounds; Background Backgrounds[NoOfBackgrounds] ; EndBlocks; // Sort of defined, needs more work... }

PoseHeader

Header
{
 char   Signature[7]; "POSEW59" or "POSEW60" note not null terminated

 ulong    UnknownLong0;
 ulong    UnknownLong1;  // typically 0
 String   UnknownString1;//"cwr\cwr_islands\cwr_cain\data\0"
 String   UnknownString2;//""
 float	   GridSize;      //50.0
 float	   UnknownFloat3; //400.0
 String   UnknownString3;//""
 ulong	   UnknownLong2;  // typically 0
};

ObjectType

ObjectType { String ModelFilename; //"SomePrefixRoot\data\SomeFile.p3d\0" String ObjectTypeName;//"SomePrefixRoot\data\SomeFile\0" ulong ObjectClassId; RGBAColor OutlineColour; // 0xFF:FF:FF:FF means 'default' RGBAColor ObjectColour; // ditto switch (ObjectClassId) { case ObjectClassEnum.Natural // 1 case ObjectClassEnum.Artificial // 2 case ObjectClassEnum.ArtificialAndDefinedInRoad // 5 { byte[118] VariousInfo; // 114 for POSEW59 } case ObjectClassEnum.Road // 3 { byte[214] VariousInfo; // 210 for POSEW59 } } ulong nOfArtificialSubObjects; ArtificialSubObject ArtificialSubObjects[nOfArtificialSubObjects]; // not present for POSEW59 ulong MarkerType; //See MarkerTypeEnum ulong ObjectTypeId // ObjectTypeID is also present at offset 16 in the VariousInfo's }

NB: While the 'VariousInfo' byte array is decernable at this time it essentially defines various floats, integers, transforms etc. that denote the 'default' and/or 'seed' values for a given ObjectType.

ArtificialSubObject

ArtificialSubObject { String ArtificialSubObjectName; ulong Something1; ulong Something2; XYZTriplet StartEndPos[2]; }

RoadNets

RoadNets
{
   shortBool RoadInd;
   if(RoadInd)
   {
      ulong nNets
      {
      ulong nRoads;
      Road  RoadTypes[nRoads];
      ulong nXRoads;
      XRoad XRoads[nXRoads];
     }[nNets];
   }
}

Road

Road { String NetworkTypeName; // "cesta\0" RGBA KeyPartsColour; // 0xFF:FF:FF:FF means 'default' RGBA NormalPartsColour; // ditto shortBool FilledLine; // 0 or 1 double MaxAngle; // 25.0 degrees double MaxBankAngle; // 5.0 degrees ulong nStraights; RoadPart Straights[nStraights] ; ulong nCurves; RoadPart Curves[nCurves]; ulong nSpecials; RoadPart Specials[nSpecials]; ulong nTerminators; RoadPart Terminators[nTerminators]; } }

RoadPart
 RoadPart     
 {
      String      Name;               // "cesta25" generallly "" on 1st entry
      ulong       ObjectId;
      ushort      Type;               // not present for Terminators
      shortBool   CanChangeBankAngle; // not present for Terminators or Curves
 }

XRoad

XRoad
{
 String    Name;	      //kr_asfaltka_asfaltka_t.
 ushort    Type              //1 or 3
 RGBA      color;	      //FF FF FF FF 
 shortBool CanChangeBankAngle; //0 or 1
 ulong     ObjectID;
 String    ChildName1;	     //asfaltka
 String    ChildName2;	     //hlavni silnice
 String    ChildName3;	     //cesta
 String    ChildName4;	     //Type=1"" Type=3 "cesta"
}

Terrain

Terrain
{
   XYPair   TerrainGridSize; // 256 x 256 eg
   float    TerrainGridHeights[TerrainGridSize];
   float    BlueEdgeTerrainHeights[NoOfBlueFloats]  ; //Always zero values // NoOfBlueFloats = (TerrainGrid_Y * TerrainGrid_X)/16;
}

Object

Object { ushort IsPresent; if (IsPresent) { ushort Unknown; ulong InstanceId; float TransformColumn[3][4]; // described here to solidly illustrate to reader // this is a standard DirectX Transform matrix // but in COLUMN format; double ObjectRelativeSize; // decimal percentage String InstanceName; float RelativeSurfaceElevation; RGBA OutlineColour; RGBA ObjectColour; ulong ObjectTypeId; }; };

Layer

 Layer
 {
   String LayerName1;
   ulong  LayerSizeType;
   String LayerName2;
   ushort DefaultIndicator;
   ulong  NoOfTerrainMaterials;
   TerrainMaterial TerrainMaterials[NoOfTerrainMaterials];
   }
 }

TerrainMaterial

TerrainMaterial { ulong Unknown; String MaterialName; ulong Unknown; }

Background

Background { String BackgroundFilename; String BackgroundName; float OffsetX; float OffsetY; float SizeX; float SizeY; ulong Transparency; ulong Visible; }

EndBlock

EndBlock
{
 shortBool Always1; 
 shortbool Always1; 
 ulong     Unknown[12]; 
           /* typical data
           **00 00 00 00 00 00 00 F0 2C 46 00 98 23 46 C6 6F 
           **C6 42 0E 01 00 00 01 00 00 F0 2C 46 00 98 23 46 
           **C6 6F C6 42 0E 01 00 00 4B 00 00 00 00 00 00 00 
           */
 ushort    StageID;  // 1,2,3,4
 String    Name1;    //"hlavni silnice\0"
 String    Name2;    //"kr_silnice_cesta_t\0"
 RGBA      color;    //0xFFFFFFFF
 shortBool Always1; 
 ulong     Count;    // 2,3
 EndBlock1 EndBlock1[Count];
 ulong     Unknown[27];
           /* typical data
           **FA D4 30 BF 94 58 08 3D 00 00 C8 C0 00 00 60 C0 
           **00 00 00 00 00 00 48 C1 00 00 60 40 00 00 00 00 
           **00 00 48 C1 00 00 60 C0 00 00 00 00 00 00 00 00 
           **00 00 60 40 00 00 00 00 00 00 00 00 00 00 C8 C0 
           **00 00 00 00 00 00 30 C0 00 00 C8 C0 00 00 00 00 
           **00 00 1C C1 04 01 00 00 00 00 00 00 00 00 00 00 
           **09 00 00 00 0B 80 00 00 04 00 00 00 
           */
 ulong     Count;    // 2,3
 EndBlock2 EndBlock2[Count];
}

EndBlock1

EndBlock1
{
  ulong Unknown[4];// Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00
  String Name;     // "silnice hlavni silnic\0"
}

EndBlock2

EndBlock2
{
 ulong     Count;           //15 eg
 EndBlock3 EndBlock3[Count];
 String    Name;            //"silnice hlavni silnic\0"
 ulong     Unknown[4];      //Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00
 RGBA      color;           //FFFFFFFF
 RGBA      color2;          //FFFFFFFF
 ushort    ind;             //01
 ulong     buf2[4];         // Typically 00 00 00 00 00 00 39 40 00 00 00 00 00 00 24 40
}
EndBlock3
EndBlock3
{
 ulong    unknown[6];
          /* typical data
          **01 00 01 00 00 86 2D 46 
          **00 98 23 46 65 6C C5 42 
          **0E 01 00 00 4D 00 00 00 
          */
 ushort   Type;               //03
 String   Name;               //"silnice10 100\0"
 ulong    unknown[25];
          /*typical data
          **00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
          **C4 76 C2 3F 0E EB 8A C1 00 00 00 00 BE 00 00 00 
          **CC ED 26 BE CA 0F 12 40 56 30 28 3F 00 00 00 00 
          **18 CA 04 C1 48 8B 3D C0 00 00 00 00 2D 3D 91 C1 
          **06 01 C0 40 00 00 00 00 EE 98 84 C1 99 99 91 C0 
          **00 00 00 00 64 4A 5F 35 99 99 91 40 00 00 00 00 
          **64 4A 5F B5 01 00 
          */
 shortBool ok; //1
}

Enums

ObjectClassEnum

enum ObjectClassEnum { Natural = 1, Artificial = 2, ArtificialAndDefinedInRoad = 5, Road = 3 }

MarkerTypeEnum

enum MarkerTypeEnum { Rectangular = 0, Elliptical = 1 }