PEW File Format: Difference between revisions
Line 144: | Line 144: | ||
RoadNets | RoadNets | ||
{ | { | ||
shortBool RoadInd; | |||
if( | if(RoadInd) | ||
{ | { | ||
ulong nNets | ulong nNets | ||
Line 160: | Line 160: | ||
Road | Road | ||
{ | { | ||
String NetworkTypeName; | String NetworkTypeName; // "cesta\0" | ||
RGBA KeyPartsColour; // 0xFF:FF:FF:FF means 'default' | RGBA KeyPartsColour; // 0xFF:FF:FF:FF means 'default' | ||
RGBA NormalPartsColour; // ditto | RGBA NormalPartsColour; // ditto | ||
shortBool FilledLine; // 0 or 1 | |||
double MaxAngle; // degrees | double MaxAngle; // 25.0 degrees | ||
double MaxBankAngle; // degrees | double MaxBankAngle; // 5.0 degrees | ||
ulong nStraights; | ulong nStraights; | ||
RoadPart Straights[nStraights] ; | RoadPart Straights[nStraights] ; | ||
Line 181: | Line 181: | ||
RoadPart | RoadPart | ||
{ | { | ||
String | String Name; // "cesta25" generallly "" on 1st entry | ||
ulong | ulong ObjectId; | ||
ushort | 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" | |||
} | |||
===Object=== | ===Object=== |
Revision as of 21:59, 9 February 2009
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[...];
XYPair TerrainGridSize;
float TerrainGridHeights[TerrainGridSize];
float BlueEdgeTerrainHeights[NoOfBlueFloats] ; //Always zero values.
// NoOfBlueFloats = (TerrainGrid_X / 16) * TerrainGrid_X;
ulong Unknown;
ulong NoOfObjects;
Object Objects[NoOfObjects];
ulong NoOfLayers;
Layer Layers[[NoOfLayers] ;
RoadNetworks; // Sort of defined, needs more work...
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" }
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;
}
Enums
ObjectClassEnum
enum ObjectClassEnum
{
Natural = 1,
Artificial = 2,
ArtificialAndDefinedInRoad = 5,
Road = 3
}
MarkerTypeEnum
enum MarkerTypeEnum
{
Rectangular = 0,
Elliptical = 1
}