User Tools

Site Tools


arma:file_formats:pew

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
arma:file_formats:pew [2009/07/07 23:08] – added new info. snakemanarma:file_formats:pew [2024/08/01 08:06] (current) – links added. snakeman
Line 1: Line 1:
-Introduction+====== ArmA 1 PEW File Format ======
  
-Pew are Visitor's project filesVisitor is BI's tool for creating Islands.+[[https://www.pmctactical.org/forum/viewforum.php?f=42|ArmA 1 Forum]], [[:arma|ArmA 1 Home]], [[arma:config|ArmA 1 Config]], [[arma:tools|ArmA 1 Tools]], [[arma:file_formats|ArmA 1 File Formats]], [[arma:missions|ArmA 1 Missions]], [[arma:modeling|ArmA 1 3D Modeling]], [[arma:terrain|ArmA 1 Terrain]], [[arma:texturing|ArmA 1 Texturing]], [[arma:scripting|ArmA 1 Scripting]]
  
-Visitor is a Gui tool interface that interacts with Bulldozer, an inbuilt 'world' viewer inside any Armed Assault engine.+**ArmA 1** aka Armed Assault (ArmA) 
 + 
 + 
 +====== Introduction ====== 
 + 
 +PEW are Visitor's project files. Visitor is bis tool for creating terrains. 
 + 
 +Visitor is a GUI tool that interacts with Bulldozer, an inbuilt 'world' viewer inside any Armed Assault engine.
  
 The contents of the project file, pew, are not directly related to the ultimate output, a wrp file. However, that data, of course, contains all similar elements, such as road networks, elevations, cell matrices, models and textures. The contents of the project file, pew, are not directly related to the ultimate output, a wrp file. However, that data, of course, contains all similar elements, such as road networks, elevations, cell matrices, models and textures.
Line 10: Line 17:
  
 While there have been several pew versions, the one's listed here are While there have been several pew versions, the one's listed here are
- +<code> 
-    * POSEW59 and +*POSEW59 and 
-    * POSEW60 +*POSEW60 
 +</code>
  
 there are only a few subtle differences to their makeup. there are only a few subtle differences to their makeup.
  
  
 +====== Legend ======
  
-Legend+see Generic FileFormat Data Types
  
-Little endian byte order, lsb first for numeric values, text is stored in Big endian byte order. 
-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+====== File Format ======
  
 +This file format is principally used with Armed Assault v1.09 and later plus the ArmA Tools Suite Final release (v1.14).
 <code cpp> <code cpp>
-XYPair +  POSEW59 
-+  POSEW60 
- ulong x,y; // normally associated with cell sizes +  
-+    PoseHeader               Header; 
-</code>+    ulong                    nOFPTextures           // none in Arma; 
 +    OFPTexture               OFPTextures[[nOFPTextures]]; 
 +    ulong                    nObjectTemplates; 
 +    ObjectTemplate           ObjectTemplates[[nObjectTemplates]]; 
 +    shortBool                NoOfpTerrains; 
 +    if  (!NoOfpTerrains) 
 +    { 
 +    ulong                    nOFPTerrains;         //  none in Arma; 
 +    OFPTerrain               OFPTerrains[[nOFPTerrains]]; 
 +    
 +    shortBool                NoOFPForests;         //  none in Arma; 
 +    if  (!NoOFPForests) 
 +    { 
 +    ulong                    nOFPForests; 
 +    OFPForest                OFPForests[[nOFPForests]]; 
 +    } 
 +    RoadNets                 RoadNets[[...]]; 
 +    Elevation                Elevation[[...]]; 
 +    ulong                    NoOfObjects; 
 +    Object                   Objects[[NoOfObjects]];
  
 +    ulong                    NoOfLayers;
 +    String                   LayerName;           //&quot;Base&quot;
 +    Layer                    Layers[[NoOfLayers]] ;
  
-RGBAColor+    if (POSEW60) 
 +    { 
 +     ulong                   Unknown; 
 +    } 
 +    else // pose59 
 +    { 
 +      ulong                  nNamedZones; 
 +      NamedZone              NamedZones[[nNamedZones]]; 
 +    }
  
-<code cpp> +    ulong                    nRoadBlocks; 
-RGBAColor +    RoadBlock                RoadBlocks[[nRoadBlocks]]; 
-+ 
- byte r,g,b,a; // // 0xFF:FF:FF:FF means 'default' +    if (POSEW60) 
-}+    
 +      ulong                  nNamedZones; 
 +      NamedZone              NamedZones[[nNamedZones]]; 
 +    } 
 +    else // pose59 
 +    { 
 +     ulong                   Unknown; 
 +    } 
 +    ulong                    nKeyPoints; 
 +    KeyPoint                 KeyPoints[[nKeyPoints]]; 
 +    ulong                    NoOfBackgrounds; 
 +    Background               Backgrounds[[NoOfBackgrounds]] ;// not checked for 59 
 +    ulong                    TotalSizeOfSelections; // from here, to end of file 
 +    ulong                    nSelections; 
 +    Selection                Selections[[nSelections]]; 
 +  }
 </code> </code>
  
-    * RGBA colors correspond to Microsoft's D3DCOLORVALUE 
-    * They normally come in pairs innside the pew structures  
  
- +====== PoseHeader ======
-String+
  
 <code cpp> <code cpp>
-String + Header 
-+ { 
- ulong  Length; +  char     Signature[[7]];        // &quot;POSEW59&quot; or &quot;POSEW60&quot; note: NOT null terminated 
- Asciiz Characters;// null terminated regardless+ 
 +  ulong    Length;              // of PEW file
 +  ulong    UnknownLong        // typically 0 
 +  String   IslandDataPath;      //&quot;SomePboPrefix\SomeIsland\data\0&quot; 
 +                                // Folderlocation of the rvmat material list 
 +  String   IslandObjectPath;    //&quot;&quot; 
 +  float    GridSize;            //50.
 +  float    SegmentSize;         //400.0 (==SegmentSize - SegmentOverlap) 
 +  String   IslandClassname;     //&quot;&quot; 
 + };
 </code> </code>
  
-Length always =strlen(Characters)+1; 
  
-This is a pre-calculated convenience to reduce load times (and skip over the variable length block). +====== OFPTexture ======
- +
-File Format +
- +
-            * This file format is principally used with Armed Assault v1.09 and later plus the ArmA Tools Suite Final release (v1.14). +
  
 <code cpp> <code cpp>
- POSEW59 + OFPTexture
- POSEW60+
  {  {
-   PoseHeader               Header; +  ulong     TextureID
-   ulong                    nTextures           //typically 0+  String    TextureFileName; // &quot;snih3.paa&quot
-   Texture                  Textures[nTextures]; +  String    TextureName; // &quot;snih3&quot
-   ulong                    nObjectTypes; +  String    RvmatName; // &quot;snih3.rvmat&quot
-   ObjectType               ObjectTypes[nObjectTypes]; +  byte      UnknownBytes[[14]]; // (typically 0
-   ulong                    nTerrains           //typically 0; +  RGBAColor Colour;
-   shortBool                NoTerrains+
-   if  (!NoTerrains) +
-   { +
-   ulong                    nTerrainTypes; +
-   TerrainType              TerrainTypes[nTerrainsTypes]; +
-   } +
-   shortBool                NoForests+
-   if  (!NoForests) +
-   { +
-   ulong                    nForests          +
-   Forest                   Forests[nForests]; +
-   } +
-   RoadNets                 RoadNets[...]+
-   Terrain                  Terrain[...]; +
-   ulong                    NoOfObjects; +
-   Object                   Objects[NoOfObjects]+
-   ulong                    NoOfLayers; +
-   Layer                    Layers[[NoOfLayers] ; +
-   ulong                    RoadNetIndices[TerrainGridSizeXY]; +
-   if (POSEW60) +
-   { +
-    ulong                   NoOfBackgrounds; +
-    Background              Backgrounds[NoOfBackgrounds] ;// probably +
-   } +
-   else // pose59 +
-   { +
-     ulong                  Count; +
-     UnknownStruct2         UnknownStructs[Count]; +
-   } +
- +
-   ulong                    nBlocks; +
-   RoadBlock                RoadBlocks[nBlocks]; +
- +
-   if (POSEW60+
-   { +
-     ulong                  Count; +
-     UnknownStruct2         UnknownStructs[Count]; +
-   } +
-   else // pose59 +
-   { +
-    ulong                   NoOfBackgrounds; +
-    Background              Backgrounds[NoOfBackgrounds] ;// probably +
-   } +
-   ulong                    Count; +
-   Locale                   Locales[Count];          +
-   ulong                    nIcons; +
-   Icon                     Icons[nIcons]; +
-   ulong                    Always4; +
-   ulong                    Always0;+
  }  }
 </code> </code>
  
  
-PoseHeader+====== ObjectTemplate ======
  
 <code cpp> <code cpp>
-Header +  ObjectTemplate 
-+  
- char     Signature[7]       // "POSEW59" or "POSEW60" note: NOT null terminated +      String       ModelFilename; //&quot;SomePrefixRoot\data\jablon.p3d\0&quot; 
- +      String       ModelName;     //&quot;jablon&quot; 
- ulong    Length             // of PEW file+      ulong        ObjectType   // 0..5 
- ulong    UnknownLong;         // typically +                                  // 0 Undefined - This type should never be encountered. 
- String   IslandDataPath;      //"SomePboPrefix\SomeIsland\data\0" +                                  // 1 Natural 
- String   IslandObjectPath;    //"" +                                  // 2 Artificial 
- float    GridSize           //50.0 +                                  // 3 Road (RoadFlag will be true) 
- float    SellSize           //400.0 (SegmentSize - SegmentOverlap+                                  // 4 Forest 
- String   IslandClassname    //"" +                                  // 5 Road2 (RoadFlag will be false) 
-};+      RGBAColor    OutlineColour
 +      RGBAColor    ObjectColour; 
 +      double    GeometryBounds[[2]];         // 50.
 +      ulong    ModelID; 
 +      XYZTriplet   GeometryAutocenterPos; 
 +      double    ResolutionBounds[[2]];         // 50.
 +      XYZTriplet   ResolutionAutoCenterPos; 
 +      shortBool    Generally0x01; 
 +      shortBool    RandomScaleFlag; 
 +      double    RandomScaleMinMax[[2]];        // 50.0 
 +      shortBool    RandomRotateFlag; 
 +      double    RandomRotateMinMax[[2]];       // 20.0 
 +      shortBool    RandomOrientationFlag; 
 +      double    RanmdomOrientationMinMax[[2]]; // 180.0 
 +      shortBool    RoadFlag; 
 +      if (RoadFlag
 +      { 
 +            TransformMatrix RoadNamedSelections; // (LB, PB, LE, PE) 
 +            TransformMatrix XRoadNamedSelections; // (LD, LH, PD, PH) 
 +      }; 
 +      ulong            nNamedVectors;               // Usually 0 (zero) 
 +      NamedVector  NamedVectors[nNamedVectors]; 
 +      ulong        MarkerType;                 // Rectangular = 0, Elliptical = 1 
 +  }
 </code> </code>
  
  
-Texture+====== NamedVector ======
  
 <code cpp> <code cpp>
-Texture +  NamedVector 
-+  
- ulong     TextureID; +     String     Name      //&quot;pohrada&quot; 
- String    TextureFileName; // "snih3.paa" +     LongBool   Unknown
- String    TextureName; // "snih3" +     ulong      nTriplets; // always 2 
- String    RvmatName; // "snih3.rvmat" +     XYZTriplet StartEndPos[[nTriplets]]; 
- byte      UnknownBytes[14]; // (typically 0) +  }
- RGBAColor Colour+
-}+
 </code> </code>
  
-ObjectType+ 
 +====== OFPTerrain ======
  
 <code cpp> <code cpp>
- ObjectType + OFPTerrain
  {  {
-     String       ModelFilename//"SomePrefixRoot\data\jablon.p3d\0" +  String  TerrainName
-     String       ModelName;     //"jablon" +  byte    UnknownBytes[[11]]
-     ulong        ObjectType;    // 0..5 +  ulong   nSurfaces
-     RGBAColor    OutlineColour;  +  OFPSurface OFPSurfaces[[nSurfaces]];
-     RGBAColor    ObjectColour;   +
-     VariousInfo: +
-     double GeometryLODBox_X; // 50.0 +
-     double GeometryLODBox_Y; // 50.0 +
-     ulong ModelID; +
-     XYZTriplet GeometryLODAutoCenterPos; +
-     double ResolutionLODBox_X; // 50.0 +
-     double ResolutionLODBox_Y; // 50.0 +
-     XYZTriplet ResolutionLODAutoCenterPos; +
-     shortBool Generally0x01;    +
-     short ScaleFlag; // Random Scale Flag +
-     double Scale0; // 50.0 +
-     double Scale1; // 50.0 +
-     short RotateFlag; // Random Rotate Flag +
-     double Rotate0; // 20.0 +
-     double Rotate1; // 20.0 +
-     short OrientationFlag;// Random Orientation Flag +
-     double Orientation0; // 180.0 +
-     double Orientation1; // 180.0 +
-     shortBool RoadFlag; +
-     if (RoadFlag)  +
-     { +
-           float RoadNamedSelections[12]; // (LB, PB, PB, PE) +
-           float XRoadNamedSelections[12]; // (LD, LH, PD, PH) +
-     }; +
-//      ulong MarkerType; // See MarkerTypeEnum  +
-     ulong     nArtificialObjects; +
-     ArtificialObject ArtificialObjects[nArtificialObjects]; +
-     LongBool LongBool; // 0 or 1 +
  }  }
 </code> </code>
  
  
-ArtificialObject+====== OFPSurface ======
  
 <code cpp> <code cpp>
- ArtificialObject+ OFPSurface
  {  {
-    String     Name      //"pohrada" +  String SurfaceName
-    LongBool   LongBool+  float Surfacefloat[[4]]
-    ulong      nTriplets; // always 2 +  byte   UnknownBytes[[16]];
-    XYZTriplet StartEndPos[nTriplets];+
  }  }
 </code> </code>
  
-TerrainType 
  
-<code cpp> +====== OFPForest ======
-TerrainType +
-+
- String  TerrainName; +
- byte    UnknownBytes[11]; +
- ulong   nSurfaces; +
- Surface Surfaces[nSurfaces]; +
-+
-</code> +
- +
-Surface+
  
 <code cpp> <code cpp>
-Surface + OFPForest 
-+ { 
- String SurfaceName+  String    ForestName
- float  Surfacefloat[4]+  RGBAColor OutlineColour
- byte   UnknownBytes[16]+  RGBAColor ObjectColour; 
-}+  ulong     SquareFillModelID; 
 +  ulong     SquareModelID; 
 +  ulong     TriangleModelID; 
 +  ulong     Unknown1; // (typically 0) 
 +  ulong     Unknown2; // (typically 0) 
 + }
 </code> </code>
  
-Forest 
- 
-<code cpp> 
-Forest 
-{ 
- String    ForestName; 
- RGBAColor OutlineColour; 
- RGBAColor ObjectColour; 
- ulong     SquareFillModelID; 
- ulong     SquareModelID; 
- ulong     TriangleModelID; 
- ulong     Unknown1; // (typically 0) 
- ulong     Unknown2; // (typically 0) 
-} 
-</code> 
  
 +====== RoadNet ======
  
 <code cpp> <code cpp>
-RoadNet +    shortBool NoRoads; 
- +    if  (!NoRoads) 
-   shortBool NoRoads; +    
-   if  (!NoRoads) +      ulong    nTypes; 
-   +      RoadType RoadTypes[[nTypes]]; 
-     ulong    nTypes; +      ulong    nXRoads; 
-     RoadType RoadTypes[nTypes]; +      XRoad    XRoads[[nXRoads]]; 
-     ulong    nXRoads; +    }
-     XRoad    XRoads[nXRoads]; +
-   }+
 </code> </code>
  
  
-RoadType+====== RoadType ======
  
 <code cpp> <code cpp>
- RoadType +  RoadType 
- { +  
-   String       FamilyName;        // "cesta","silnice",etc +    String       FamilyName;        // &quot;cesta&quot;,&quot;silnice&quot;,etc 
-   RGBA         KeyPartsColour;     +    RGBA         KeyPartsColour; 
-   RGBA         NormalPartsColour;  +    RGBA         NormalPartsColour; 
-   shortBool    FilledLine;        // 0 or 1 +    shortBool    FilledLine;        // 0 or 1 
-   double       MaxAngle;          // 25.0 degrees  +    double       MaxAngle;          // 25.0 degrees 
-   double       MaxBankAngle;      // 5.0 degrees +    double       MaxBankAngle;      // 5.0 degrees 
-   ulong        nStraights; +    ulong        nStraights; 
-   RoadList     Straights[nStraights]; +    RoadList     Straights[[nStraights]]; 
-   ulong        nCurves; +    ulong        nCurves; 
-   RoadList     Curves[nCurves]; +    RoadList     Curves[[nCurves]]; 
-   ulong        nSpecials; +    ulong        nSpecials; 
-   RoadList     Specials[nSpecials]; +    RoadList     Specials[[nSpecials]]; 
-   ulong        nTerminators; +    ulong        nTerminators; 
-   RoadList     Terminators[nTerminators]; +    RoadList     Terminators[[nTerminators]]; 
-   +    
- }+  }
 </code> </code>
  
  
-RoadList+====== RoadList ======
  
 <code cpp> <code cpp>
- RoadList      +  RoadList 
- { +  
-      String      ModelName;      // "cesta25" +       String      ModelName;      // &quot;cesta25&quot; 
-      ulong       ObjectID;       // in the model list +       ulong       ObjectID;       // in the model list 
-      ushort      MeterType;      // 0,1,2,3 not present for Terminators +       ushort      MeterType;      // 0,1,2,3 not present for Terminators 
-      shortBool   CanChangeAngle; // not present for Terminators or Curves +       shortBool   CanChangeAngle; // not present for Terminators or Curves 
- } +  }
-</code>+
  
 MeterType MeterType
- +:Type Straights Curves 
-    Type Straights Curves  +:             25   meters 
-    0 6 25 meters  +:    12         50 
-    1 12 50  +:    25         75 
-    2 25 75  +:              100 
-    3 100 +</code>
  
 Broadly speaking, there are a few basic road types Broadly speaking, there are a few basic road types
  
-    * asfalt bitumen. +<code> 
-    * silnice Paved +*asfalt   bitumen. 
-    * cesta dirt +*silnice  Paved 
 +*cesta    dirt 
 +</code>
  
 Each RoadType describes the general characteristics of a Dirt Road as opposed to (say) an Asphalt one. Each RoadType describes the general characteristics of a Dirt Road as opposed to (say) an Asphalt one.
  
-Each of these RoadTypes (such as asphalt) can have multiple curved, straight, special, and termination p3d models associated with them.+Each of these RoadTypes  (such as asphalt) can have multiple curved, straight, special, and termination p3d models associated with them.
  
 Generally speaking, there are Generally speaking, there are
- +<code> 
-    * 3 'straight' models, approximately 6,12, and 25 meters long respectively. +*3 'straight' models, approximately 6,12, and 25 meters long respectively. 
-    * 4 'curved' models, 25,50,75 and 100 meters long. +*4 'curved' models, 25,50,75 and 100 meters long. 
-    * 1 'terminaton type.  +*1 'terminaton type. 
 +</code>
 The termination type is a road like any other but tends to be a fixed 6 meter fade out of the general road texture. The termination type is a road like any other but tends to be a fixed 6 meter fade out of the general road texture.
  
-XRoad+ 
 +====== XRoad ======
  
 <code cpp> <code cpp>
-XRoad + XRoad 
-+ { 
- String    Name;       //kr_asfaltka_asfaltka_t. +  String    Name;       //kr_asfaltka_asfaltka_t. 
- ushort    Type              //1 or 3 +  ushort    Shape;            //1 or 3 
- RGBA      color;       //FF FF FF FF  +  RGBA      color;       //FF FF FF FF 
- shortBool CanChangeBankAngle; +  shortBool CanChangeBankAngle; 
- ulong     ObjectID; +  ulong     ObjectID; 
- String    Intersections[4]; //"asfaltka","silnice","cesta",Type=3 "silniceelse "" +  String    Intersections[[4]]; //&quot;asfaltka&quot;,&quot;silnice&quot;,&quot;cesta&quot;,Type=3 &quot;silnice&quot; else &quot;&quot; 
-}+ }
 </code> </code>
  
 Although CrossRoads could, conceivably, have any number of intersections, only two types are handled. Although CrossRoads could, conceivably, have any number of intersections, only two types are handled.
  
-    * Type 1: A T_Junction (3 intersections) +<code> 
-    * Type 3: A Genuine crossroad (4 way intersection) +*Type 1: A T_Junction (3 intersections) 
 +*Type 3: A Genuine crossroad (4 way intersection) 
 +</code>
  
 For T_Junctions, there is, obviously, no 4th intersection and this is null filled. For T_Junctions, there is, obviously, no 4th intersection and this is null filled.
Line 358: Line 329:
 Without taking too literal an interpretation, there are some major types of road. Without taking too literal an interpretation, there are some major types of road.
  
-    * asfaltka:bitumen (sealed) +<code> 
-    * silnice: Paved +*asfaltka:bitumen (sealed) 
-    * cesta: Dirt +*silnice: Paved 
 +*cesta:   Dirt 
 +</code>
  
 Thus the names of each intersection reflect the road type of that intersection, sometimes resulting in (up to) four identical names. Thus the names of each intersection reflect the road type of that intersection, sometimes resulting in (up to) four identical names.
  
-The overall name of the crossroad itself, tries to reflect the nature of it's makeup thus kr_asfaltka_asfaltka_t: an bitumen T_Junction kr_silince_x_cesta: a crossroad of paved and dirt roads.+The overall name of the crossroad itself, tries to reflect the nature of it's makeup thus
  
-Terrain+kr_asfaltka_asfaltka_t: an bitumen T_Junction 
 + 
 +kr_silince_x_cesta: a crossroad of paved and dirt roads. 
 + 
 + 
 +====== Elevation ======
  
 <code cpp> <code cpp>
-Terrain + Elevation 
-+ { 
-   XYPair   TerrainGridSize; // 256 x 256 eg +    XYPair   GridSize; // 256 x 256 eg 
-   float    TerrainGridHeights[TerrainGridSize]; +    float    Heights[[GridSize]]; 
-   float    BlueEdgeTerrainHeights[NoOfBlueFloats]  ; //Always zero values  +    float    BlueEdgeTerrainHeights[[NoOfBlueFloats]]  ; //Always zero values 
-   // NoOfBlueFloats = (TerrainGrid_Y TerrainGrid_X)/16; +    // NoOfBlueFloats = (GridSize_Y GridSize_X)/16; 
-   ulong    Always0; +    ulong    Always0; 
-}+ }
 </code> </code>
  
-Object+ 
 +====== Object ======
  
 <code cpp> <code cpp>
-Object +  Object 
-+  
-ShortBool IsPresent; +      ShortBool IsPresent; 
-if (IsPresent) +      if (IsPresent) 
-{ ShortBool Always0+      { 
-ulong InstanceId; +        ShortBool Moveable             // always 0 
-float TransformColumn[3][4]; // described here to solidly illustrate to reader +        ulong     InstanceId; 
-// this is a standard DirectX Transform matrix +        float     TransformColumn[[3]][[4]]; // described here to solidly illustrate to reader 
-// but in COLUMN format; +                                         // this is a standard DirectX Transform matrix 
-double ObjectRelativeSize; // decimal percentage +                                         // but in COLUMN format; 
-String InstanceName; // "minimalStrelPos" +        double    ObjectRelativeSize;    // decimal percentage 
-float RelativeSurfaceElevation; +        String    InstanceName;          // &quot;minimalStrelPos&quot; 
-RGBA OutlineColour; +        float     RelativeSurfaceElevation; 
-RGBA ObjectColour; +        RGBA      OutlineColour; 
-ulong ObjectID+        RGBA      ObjectColour; 
-}; +        ulong     ObjectTemplateID
-};+      }; 
 +  };
 </code> </code>
  
-Layer+ 
 +====== Layer ======
  
 <code cpp> <code cpp>
-   Layer +    Layer 
-   +    
-       String          Name1;            //"Base" +        ulong           SizeType;         //0..2 //see below 
-       ulong           SizeType;         //0 +        String          Name            //&quot;Base&quot; 
-   // TextureXSize = TerrainXSize >> SizeType; +        shortBool       DefaultIndicator; // 0 ... 1 
-   // TextureYSize = TerrainYSize >> SizeType; +        if (DefaultIndicator == 0) 
-   // TexTableSize = TextureXSize * TextureYSize; +        
-       String          Name2           //"Base" +            ulong  SurfaceTable[[TableSize.x*y]]; 
-       ushort          DefaultIndicator; // 0 ... 1 +            ulong  TextureTable[[TableSize.x*y]]; 
-       if (DefaultIndicator == 0) +            byte   UnknownTable[[(TableSize.x*y/4)]]; 
-       +            ushort UnknownShort
-           ulong SurfaceTable[TexTableSize]; +        }; 
-           ulong TextureTable[TexTableSize]; +        if (DefaultIndicator == 1) 
-           char uchar[16384]; +        
-           char uchar[2]+            ulong           NoOfTerrainMaterials; 
-       }; +            TerrainMaterial[[NoOfTerrainMaterials]
-       if (DefaultIndicator == 1) +            
-       +                ulong  BitFlags;     // 1 = label, 0x40 = rvmatfile,,,, 
-           ulong           NoOfTerrainMaterials; +                String MaterialName; // &quot;---sea---&quot;,&quot;Layers\P_000-000_L00.rvmat&quot; 
-           TerrainMaterial[NoOfTerrainMaterials] +                ulong  TypeID;       // 0..3 
-           +            }; 
-               ulong  BitFlags;         // 1 = label, 0x40 = rvmatfile,,,, +            ulong RvmatTable[[TableSize.x*y]]; 
-               String MaterialName; // "---sea---","Layers\P_000-000_L00.rvmat" +        }; 
-               ulong  TypeID;       // 0,1,2 +    }
-           }; + 
-           ulong RvmatTable[TexTableSize]; +TableSize = Terrain.GridSize>> SizeType;
-       }; +
-   };+
 </code> </code>
  
-Background+ 
 +====== RoadBlock ======
  
 <code cpp> <code cpp>
- Background // this structure has not been seen+ RoadBlock
  {  {
-      String BackgroundFilename+  ShortBool IsPresent
-      String BackgroundName+  if IsPresent 
-      float  OffsetX+  { 
-      float  OffsetY+  ShortBool Always1
-      float  SizeX+  ulong     Unknown[[12]]
-      float  SizeY+            /* typical data 
-      ulong  Transparency+            **00 00 00 00 00 
-      ulong  Visible;+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    Type            // 0,1,2,3 
 +  String    RoadFamilyName;   //&quot;hlavni silnice&quot
 +  String    RoadModelName;    //&quot;kr_silnice_cesta_t&quot
 +  RGBA      color; 
 +  ShortBool Always1; 
 +  ulong     Count; 
 +  FamilyList FamilyLists[[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; 
 +  ModelList ModelLists[[Count]]; 
 +  }
  }  }
 +Type
 +*0 Road Ending with FamilyName and it's ModelName_konec
 +*1 TJunction ModelName Only
 +*2 Road similar to type 0
 +*3 Xroad with ModelName Only
 </code> </code>
  
-RoadBlock+ 
 +====== FamilyList ======
  
 <code cpp> <code cpp>
-RoadBlock + FamilyList
-+
- ShortBool IsPresent;  +
- if IsPresent+
  {  {
- ShortBool Always1;  +   ulong  Unknown[[4]];// Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00 
- ulong     Unknown[12];  +   String Name;     /&quot;silnice hlavni silnic\0&quot;
-           /* 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    Type;             // 0,1,2,3 +
- String    RoadFamilyName;   //"hlavni silnice" +
- String    RoadModelName;    //"kr_silnice_cesta_t" +
- RGBA      color;             +
- ShortBool Always1;  +
- ulong     Count;  +
- FamilyList FamilyLists[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    +
- ModelList ModelLists[Count];+
  }  }
-} 
 </code> </code>
  
-Type+This struct is principally used for Xroads and Tjunctions. It typically lists the order of all RoadFamilyName's required
  
-    * 0 Road Ending with FamilyName and it's ModelName_konec 
-    * 1 TJunction ModelName Only 
-    * 2 Road similar to type 0 
-    * 3 Xroad with ModelName Only  
  
- +====== ModelList ======
-FamilyList+
  
 <code cpp> <code cpp>
-FamilyList + ModelList 
-+ { 
-  ulong  Unknown[4];// Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00 +  ulong      Count;           //15 eg 
-  String Name    // "silnice hlavni silnic\0" +  BlockModel BlockModel[[Count]]; 
-}+  String     FamilyName;      //&quot;silnice hlavni silnic\0&quot; 
 +  ulong      Unknown[[4]];      //Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00 
 +  RGBA       color[[2]]; 
 +  ShortBool  Always01;        //01 
 +  ulong      buf2[[4]];         // Typically 00 00 00 00 00 00 39 40 00 00 00 00 00 00 24 40 
 + }
 </code> </code>
  
-This struct is principally used for Xroads and Tjunctions. It typically lists the order of all RoadFamilyName's required 
  
-ModelList+====== BlockModel ======
  
 <code cpp> <code cpp>
-ModelList +    BlockModel 
-+    
- ulong      Count          //15 eg +        ulong    ModelFlag  // 0x000001 ... 0x00010001 
- BlockModel BlockModel[Count]+        XYZTriplet Position     // Model coordinates 
- String     FamilyName     //"silnice hlavni silnic\0" +        float    ModelDirection; 
- ulong      Unknown[4];      //Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00 +        ulong    ObjectID; 
- RGBA       color[2];          +        ushort     Type;               //0,1,2,
- ShortBool  Always01;        //01 +        String     ModelName         //&quot;silnice10 100\0&quot; 
- ulong      buf2[4];         // Typically 00 00 00 00 00 00 39 40 00 00 00 00 00 00 24 40 +        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; // 0 or 1 
 + }
 </code> </code>
  
-BlockModel 
  
-<code cpp> +====== NamedZone ======
-   BlockModel  +
-   { +
-       ulong ModelFlag;   // 0x000001 ... 0x00010001 +
-       float XYZ[3];      // Model coordinates +
-       float ModelDirection; +
-       ulong ObjectID; +
-       ushort   Type;               //0,1,2,+
-       String   ModelName;          //"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; // 0 or 1 +
-+
-</code> +
- +
-Forest Block+
  
 <code cpp> <code cpp>
-UnknownStruct2 + NamedZone
-+
- ShortBool IsPresent; +
- if IsPresent+
  {  {
-  ShortBool Always0; +  ShortBool IsPresent
-  BisString Name1;          //"Les_new" +  if IsPresent
-  ulong     Colour[3]; +
-  ulong     nFloats; +
-  float     Floats[nFloats]; +
-            /* Typical Data +
-            **00 00 61 45 00 78 1B 46 00 20 64 45 00 20 19 46  +
-            **00 20 64 45 00 78 1B 46 00 40 67 45 00 58 18 46  +
-            **00 40 67 45 00 78 1B 46 00 60 6A 45 00 58 18 46  +
-            **00 60 6A 45 00 78 1B 46 00 80 6D 45 00 90 17 46  +
-            **00 80 6D 45 00 B0 1A 46 00 A0 70 45 00 C8 16 46  +
-            **00 A0 70 45 00 E8 19 46 00 C0 73 45 00 00 16 46  +
-            */ +
-  ulong     ID;             // 0,1,2,3,4.... +
-  if POSEW60+
   {   {
-   LongBool  Always1;+   ShortBool Movable;        // Always0; 
 +   BisString Name1;          //&quot;Les_new&quot; 
 +   ulong     AreaColor,OutlineColor; 
 +   ulong     DisplayStyle; 
 +   ulong     nPoints; 
 +   PointsRectangle 
 +   { 
 +       float TopLeft.xy; 
 +       float BottomRight.xy; 
 +   }[[nPoints/4]]; 
 +             /* Typical Data 
 +             **00 00 61 45 00 78 1B 46 00 20 64 45 00 20 19 46 
 +             **00 20 64 45 00 78 1B 46 00 40 67 45 00 58 18 46 
 +             **00 40 67 45 00 78 1B 46 00 60 6A 45 00 58 18 46 
 +             **00 60 6A 45 00 78 1B 46 00 80 6D 45 00 90 17 46 
 +             **00 80 6D 45 00 B0 1A 46 00 A0 70 45 00 C8 16 46 
 +             **00 A0 70 45 00 E8 19 46 00 C0 73 45 00 00 16 46 
 +             */ 
 +   ulong     ID;             // 0,1,2,3,4.... 
 +   if POSEW60 
 +   { 
 +    LongBool  Visible; // always 
 +   } 
 +   else 
 +   { 
 +    BisString Name2         //Les_new Name2==Name1 
 +   }
   }   }
-  else + };
-  +
-   BisString Name2;          //Les_new Name2==Name1 +
-  } +
- } +
-};+
 </code> </code>
  
-Locale+ 
 +====== KeyPoint ======
  
 <code cpp> <code cpp>
-Locale + KeyPoint 
-+ { 
- LongBool  Always1;  +  LongBool  Always1; 
- String    ClassName;  //"Noe_Lany" +  String    ClassName;  //&quot;Noe_Lany&quot; 
- RGBA      Colour[3]+  RGBA      AreaColor,OutlineColor
- ShortBool ShortInd;  +  ulong     DisplayStyle; 
- float     Offset[2];  // map relative +  ShortBool Visible
- float     Size[2];    // 250 x 250.0 eg +  float     Offset[[2]];  // map relative 
- ulong     ID;         // 0,1,2,3,4,5,6.... +  float     Size[[2]];    // 250 x 250.0 eg (widht and height) 
- BisString TownName;   //"Lipany""Hill" +  ulong     ID;         // 0,1,2,3,4,5,6.... 
- BisString LocaleType; //"NameCityNameCityCapital, NameVillage, NameLocal, VegetationBroadLeaf,Hill,Marine,ViewPoint +  BisString TownName;   //&quot;Lipany&quot;&quot;Hill&quot; 
- BisString NoName    // always null +  BisString LocaleType; //&quot;NameCity&quot; NameCityCapital, NameVillage, NameLocal, VegetationBroadLeaf,Hill,Marine,ViewPoint 
-}+  BisString ClassText // &quot;canOcclude=1; BumbleButt='FlowControl2&quot;; ++=)#4555Semi&quot; 
 + }
 </code> </code>
  
 Each of these locales have a LocaleType. Some of which are: Each of these locales have a LocaleType. Some of which are:
  
-    * NameCity +*NameCity
-    * NameCityCapital +
-    * NameVillage +
-    * VegetationBroadLeaf (Forest) +
  
 +*NameCityCapital
 +
 +*NameVillage
 +
 +*VegetationBroadLeaf (Forest)
  
 There is always a classname associated with this locale, There is always a classname associated with this locale,
  
-    * Forest_Owls +*Forest_Owls 
-    * Abel_LaTrinite + 
 +*Abel_LaTrinite
  
 and in most cases a text name and in most cases a text name
Line 617: Line 602:
 "La Refuge Des Chassuers" "La Refuge Des Chassuers"
  
-(Type Viewpoints and Marine eg) do not have names associated with them. There is no "placein the sea.+(Type Viewpoints and Marine eg) do not have names associated with them. There is no &quot;place&quot; in the sea.
  
-Icon+ 
 +====== Background ======
  
 <code cpp> <code cpp>
-Icon +  Background // this structure has not been seen 
-+  
- BisString IconName //"sat_lco.bmp" +       String BackgroundFilename;//&quot;sat_lco.bmp&quot; 
- BisString Name     //"overlay1" +       String BackgroundName; //&quot;overlay1&quot; 
- byte      unknown[22];+       float  OffsetXY[[2]]; 
 +       float  SizeXY[[2]]; 
 +       ulong  Transparency; 
 +       shortBool Visible; // or ulong? 
 +  } 
 +</code> 
 + 
 + 
 +====== Selection ====== 
 + 
 +<code cpp> 
 + Selection 
 + { 
 +  ushort       strlen; 
 +  char[[]]       SelectionName[[strlen]];  // NOT null terminated 
 +  ulong        nSubSelections; 
 +  SubSelection SubSelections[[nSubSelections]] 
 + } 
 +</code> 
 + 
 +====== SubSelection ====== 
 + 
 +<code cpp> 
 + SubSelection 
 + { 
 +  ulong ObjectId; 
 +  byte  Type; 
 +  byte  Unknown[[7]];
 } }
 </code> </code>
  
-Enums 
  
-ObjectClassEnum+====== Enums ====== 
 + 
 +====== ObjectClassEnum ======
  
 <code cpp> <code cpp>
-enum ObjectClassEnum { Natural = 1, Artificial = 2, Road = 3, Forest = 4, ArtificialAndDefinedInRoad = 5 }+  enum ObjectClassEnum 
 +  { 
 +     Natural = 1, 
 +     Artificial = 2, 
 +     Road = 3, 
 +     Forest = 4, 
 +     ArtificialAndDefinedInRoad = 5 
 +  }
 </code> </code>
  
-MarkerTypeEnum+ 
 +====== MarkerTypeEnum ======
  
 <code cpp> <code cpp>
-enum MarkerTypeEnum { Rectangular = 0, Elliptical = 1 } +  enum MarkerTypeEnum 
 +  { 
 +     Rectangular = 0, 
 +     Elliptical = 1 
 +  }
 </code> </code>
 +
 +As of v60 a rarely used sub structure with ObjTemplates.
  
arma/file_formats/pew.1247008127.txt.gz · Last modified: 2009/07/07 23:08 (external edit)

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

All PMC web site download services are temporarily suspended until web site yearly fees have been recovered, want to download addons/mods? Then Support PMC.

If you are grateful for all the work PMC has done in the past 25 years, use Support PMC page.