OFP Forum, OFP Home, OFP File Formats, OFP Tools, OFP Missions, OFP 3D Modeling, OFP Terrain
Operation Flashpoint (OFP) aka ArmA: Cold War Assault (CWA)
WVR type 1 was released as a OFP CWC demo island
For a general description WVR-WRP file construct, see WRP - 4WVR.
File format generic data types (link to ArmA namespace)
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
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 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;
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// 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) }
Net//64 byte structure { NetHeader NetHeader; Subnet SubNets[...]; }
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 { 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
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.