Wrp File Format - OPRWv17 to 24
Current state of my researches on OPRW18 file format. Any additions, suggestions, etc. are appreciated.
char[4] sig //"OPWR"
ulong version //0x12
ulong [2] x,y //texture cell dimension.
ulong [2] x,y //elevations cell dimensions.
float gridSize //in meters
//still unknown stuff here
Peak List
{
ulong size //maybe + 1
float[size][3] XYZ //Position of the Peak(Y is heigth)
}
ushort[][] TextureIndices //need still some research here
ushort[gridX][gridY] unknown //packed
byte[gridX][gridY] envSounds? //packed
float[gridX][gridY] elevation //packed
Rvmat List
{
ulong number of rvmats + 1
ushort 0x0
Rvmat entry
{
asciiz rvmat name
byte 0x00
}
}
Model List (w/o class names)
{
ulong size //number of models
asciiz[size] model_path //e.g. ca\buildings\kostelik.p3d
}
Model List (w/ class names)
{
ulong size //number of models
Model
{
asciiz class_name //e.g. Land_Hangar
asciiz model_path
float[3] unknown
ulong unknown
}
}
//probably 2 blocks in between
//lot of road blocks, which are divided by blocks of 0x00
Roadblock
{
ulong size //number of roadparts
roadpart
{
ushort 0x02
float PosX_Start
float elev_Start
float PosZ_Start
float PosX_End
float elev_End
float PosZ_End
ulong || ushort[2] unknown //sorta index or ID?? or some flag thingy
asciiz model_path
float[12] matrix
}
}
//Block of 0x00
Object List
{
object entry
{
ulong ObjectID
ulong modelIndex
float[12] matrix
ulong 0x02 ??
}
}
//probably data about how objects are displayed in the editor(grey rectangles for buildings, circles for bushes and trees and so on)
unknown Block
{
block entry
{
ulong type
if(type in [0x18,0x1F,0x20]) type1
if(type in [0x03,0x04,0x14) type2
if(type in [0x19]) type3
if(type in [0x02, 0x0A, 0x0B, 0x16]) type4
//for 0x18, 0x1F, 0x20
type1
{
ulong ObjectID
float[4][2] rectangle //boundaries of object
}
//for 0x03, 0x04, 0x14
type2
{
ulong ObjectID
float[4][2] rectangle //boundaries of object
ulong color??
}
//for 0x19
type3
{
ulong 0xFFFFFFFF
ulong unknown
float[4] unknown
}
for 0x02, 0x0A, 0x0B, 0x16
type4
{
ulong ObjectID
float[2] pos
}
}