PEW File Format: Difference between revisions
(→File Format: Xroads) |
|||
Line 57: | Line 57: | ||
POSEW60 | POSEW60 | ||
{ | { | ||
PoseHeader | PoseHeader Header; | ||
ulong | ulong nObjectTypes; | ||
ObjectType | ObjectType ObjectTypes[nObjectTypes]; | ||
RoadNets | RoadNets RoadNets[...]; | ||
Terrain Terrain[...]; | |||
ulong Unknown; | ulong Unknown; | ||
ulong NoOfObjects; | ulong NoOfObjects; | ||
Line 186: | Line 182: | ||
shortBool CanChangeBankAngle; // not present for Terminators or Curves | shortBool CanChangeBankAngle; // not present for Terminators or Curves | ||
} | } | ||
==== | ====XRoad==== | ||
XRoad | |||
{ | { | ||
String Name; //kr_asfaltka_asfaltka_t. | String Name; //kr_asfaltka_asfaltka_t. | ||
Line 198: | Line 194: | ||
String ChildName3; //cesta | String ChildName3; //cesta | ||
String ChildName4; //Type=1"" Type=3 "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 (POSE60 maybe) POSE59=plenty. | |||
// NoOfBlueFloats = (TerrainGrid_Y / 16) * TerrainGrid_X; | |||
} | } | ||
Revision as of 22:11, 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[...];
Terrain Terrain[...];
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" }
Terrain
Terrain { XYPair TerrainGridSize; // 256 x 256 eg float TerrainGridHeights[TerrainGridSize]; float BlueEdgeTerrainHeights[NoOfBlueFloats] ; //Always zero values (POSE60 maybe) POSE59=plenty. // NoOfBlueFloats = (TerrainGrid_Y / 16) * TerrainGrid_X; }
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
}