====== OFP Wrp File Format 1WVR ======
[[https://www.pmctactical.org/forum/viewforum.php?f=43|OFP Forum]], [[:ofp|OFP Home]], [[ofp:file_formats|OFP File Formats]], [[ofp:tools|OFP Tools]], [[ofp:missions|OFP Missions]], [[ofp:modeling|OFP 3D Modeling]], [[ofp:terrain|OFP Terrain]]
**Operation Flashpoint (OFP)** aka ArmA: Cold War Assault (CWA)
====== General ======
WVR type 1 was released as a OFP CWC demo island
For a general description WVR-WRP file construct, see [[ofp:file_formats:4wvr|WRP - 4WVR]].
====== Conventions ======
[[arma:file_formats:generic_data_types|File format generic data types]] (link to ArmA namespace)
====== Structure ======
WVR1
{
WVR1Header Header;
Texture Textures[...];
Model Models[...];
Net Nets[...];
}
**WVR1Header**
WVR1Header // same as WVR4 except for the signature of course
{
char Signature[4]; //"1WVR"
ulong Xsize; //(=128) cell dimension (wvr4 is 256)
ulong Ysize; //(=128) cell dimension
}
**Texture**
Texture
{
ushort Elevations [Ysize][Xsize]; // in centimetres. see 4WVR documentation
ushort TextureIndex[Ysize][Xsize]; //Each 'index' refers to a filename below. Range 0..255 4WVR is 1..511
Asciiz TextureFilenames[256][32]; //"LandText\\mo.pac\0LandText.pi.pac.........."
}
Unlike 4WVR the table is limited to 256 (not 512) entries. Unlike 4WVR the names can be
* replicated
* scattered anywhere
Unlike 4WVR there is no dummy, 0 index. the first entry is used. There are 'holes' in the table (eg no strings) where that paa file was removed
====== Elevations ======
Elevations are expressed as an integral of the gridsize.
Since the gridsize for ofp is a fixed 50 meters, to convert the value into meters:
RealHeight = Elevations[x][y] * 0.05;
====== TextureIndex ======
Each cell on the map references an texture file (pac/paa) and an elevation for that text at that cell position. Since there could be myriads of 'sea' texture (eg), rather than have each cell list it's texture, it references a texture list via an index. In this way, THE texture which is common to many cells (at sometimes differing elevations) is only stored once.
A max of 256 texture files can be listed. Each is held as an asciiz string inside a fixed 32 byte record. Eg max length of file name is 31 characters.
====== Model ======
Model// 64 byte structure
{
XYZTriplet XYZTriplet; // in gridsize scale. eg *50.0 meters
float heading; // in Cartesian degrees NOT polar radians
char P3dModelName[48]; // "Data3d\Smrk.p3d (WVR4 is 76)
}
* Unlike wvr4, wvr1 has no object id
* Unlike wvr4, only the xyz position, and an orientation is supplied. In wvr4, these were replaced by the standard Microsoft 12 float array
* The XYZ triplet is specified in gridsize. to get real meters, multiply by 50.
* The Y component (the height) is a relative measurement. eg an offset from the calculated position of the model on the land surface.
* in all other formats this value is absolute asl. not, relative.
* Cartesian rotation is clockwise. Polar rottion is counter clock. Therefore, Polar (wrp) degrees = -Cartesian degrees.
====== Net ======
Net//64 byte structure
{
NetHeader NetHeader;
Subnet SubNets[...];
}
====== NetHeader ======
NetHeader
{
Asciiz NetName[24]; //"LandText\Silnice.pac" null termed
ulong Always; //0x00cd9100 or 0x00d4c600
ulong Always; //0x00bfd400
ulong Always; //0x00000047
ulong Always; //0x00000000
ulong Always; //0x0069fbb0;
ulong Type; //0,1 or 2
XYZTriplet XYZTriplet; //[0.152,0.15,0.1] typical
float Scale; //3.5, 4.5 or 5.5
}
The last NetHeader (eg, last net) contains the NetName "EndOfNets". There are NO subnets.
Endof Nets also marks end of file.
====== Subnet ======
SubNet
{
float X,Y; //* gridsize of 50
if (X || Y)
{
XYZTriplet Triplet; //very similar content to header triplet
float Stepping;
ulong Always; //0x0046931A
ulong Always; //0x00980778 or 0x733760
}
}
A block of subnets continue for each Netheader until X==Y==0
Stepping appears to incrementally increase around 5.0 to each subsequent subnet
====== FilePaths ======
Despite the impression given (lack of a leading \) All file names (pac/paa and p3d files) are hard wired to the (virtual) pboRoot\ directory.
From the very beginning of OFP, this lack of relative addressing has persisted: Making the transfer of models into other addons a difficult.