WOTB dvp type file specification.
- DVPL file tool by Maddoxkkm
DVPM files are split into 3 sections: meta, file table and footer.
This section is at the very start of the file and has a magic string of "met3".
structDVPMMeta
{
charmagic[4]; // "met3"uint32_tfileCount;
uint32_tunknownArray[fileCount];
uint32_tdvpdCount;
struct {
uint32_tdvpdUnknown1;
uint32_tdvpdUnknown2;
uint32_tdvpdUnknown3;
uint32_tdvpdUnknown4;
} dvpdInfo[dvpdCount]; // For every dvpd there are 16 bytes of unknown datauint32_tfilePathStringLength;
charfilePathString[]; // Null seperated filepath stringsuint32_tpackStringsRawSize;
uint32_tpackStringCompressedSize;
bytepackStrings[]; // lz4 encoded "pack" strings
}structDVPMFileTable
{
struct {
uint64_tfileOffset; // Offset to the file inside the dvpd data blockuint32_tcompressedSize;
uint32_tuncompressedSize;
uint32_tcompressedCRC32;
uint32_tcompressionType;
uint32_tuncompressedCRC32;
uint32_tmetaSectionReference;
} FileEntries[];
bytefilePaths[]; // lz4 encoded file paths string (separated by null bytes), see footer "fileTableFilepaths"
}0 none
1 LZ4
2 LZ4_HC
3 RFC1951
The footer is 44 bytes large and the last 4 bytes are a magic string that reads "DVPM".
structDVPMFooter
{
byteunknown1[8];
uint32_tmetaSectionCRC32;
uint32_tmetaSectionSize;
byteunknown2[4];
uint32_tfileCount;
uint32_tfileTableFilepathsCompressedSize;
uint32_tfileTableFilepathsRawSize;
uint32_tfileTableSize;
uint32_tfileTableCRC32;
charmagic[4]; // "DVPM"
}TODO
The footer is 32 bytes large and the last four bytes are a magic string that read "DVPD".
structDVPDFooter
{
struct {
uint32_tdvpdUnknown1;
uint32_tdvpdUnknown2;
uint32_tdvpdUnknown3;
uint32_tdvpdUnknown4;
} dvpdInfo; // Matches with dvpdInfo in DVPM meta sectionuint64_tdataSize; // File size - header size (file size - 32)uint32_tdataCRC32;
charmagic[4]; // "DVPD"
}