https://github.com/pyogenics/wotbdvpformat
WOTB dvpm/dvpd file format.
https://github.com/pyogenics/wotbdvpformat
reverse-engineering smartdlc world-of-tanks-blitz wot-blitz wotb wotblitz
Last synced: 5 months ago
JSON representation
WOTB dvpm/dvpd file format.
- Host: GitHub
- URL: https://github.com/pyogenics/wotbdvpformat
- Owner: Pyogenics
- License: mit
- Created: 2023-09-04T11:08:51.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-09-18T18:21:07.000Z (over 2 years ago)
- Last Synced: 2024-12-24T18:25:11.229Z (over 1 year ago)
- Topics: reverse-engineering, smartdlc, world-of-tanks-blitz, wot-blitz, wotb, wotblitz
- Language: Python
- Homepage:
- Size: 18.6 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# wotb-dvp
WOTB dvp type file specification.
## Research materials
- [DVPL file tool](https://github.com/Maddoxkkm/dvpl_converter) by Maddoxkkm
## .dvpm
DVPM files are split into 3 sections: meta, file table and footer.
### meta
This section is at the very start of the file and has a magic string of "met3".
```c
struct DVPMMeta
{
char magic[4]; // "met3"
uint32_t fileCount;
uint32_t unknownArray[fileCount];
uint32_t dvpdCount;
struct {
uint32_t dvpdUnknown1;
uint32_t dvpdUnknown2;
uint32_t dvpdUnknown3;
uint32_t dvpdUnknown4;
} dvpdInfo[dvpdCount]; // For every dvpd there are 16 bytes of unknown data
uint32_t filePathStringLength;
char filePathString[]; // Null seperated filepath strings
uint32_t packStringsRawSize;
uint32_t packStringCompressedSize;
byte packStrings[]; // lz4 encoded "pack" strings
}
```
### file table
```c
struct DVPMFileTable
{
struct {
uint64_t fileOffset; // Offset to the file inside the dvpd data block
uint32_t compressedSize;
uint32_t uncompressedSize;
uint32_t compressedCRC32;
uint32_t compressionType;
uint32_t uncompressedCRC32;
uint32_t metaSectionReference;
} FileEntries[];
byte filePaths[]; // lz4 encoded file paths string (separated by null bytes), see footer "fileTableFilepaths"
}
```
#### Compression types
```
0 none
1 LZ4
2 LZ4_HC
3 RFC1951
```
### footer
The footer is 44 bytes large and the last 4 bytes are a magic string that reads "DVPM".
```c
struct DVPMFooter
{
byte unknown1[8];
uint32_t metaSectionCRC32;
uint32_t metaSectionSize;
byte unknown2[4];
uint32_t fileCount;
uint32_t fileTableFilepathsCompressedSize;
uint32_t fileTableFilepathsRawSize;
uint32_t fileTableSize;
uint32_t fileTableCRC32;
char magic[4]; // "DVPM"
}
```
## .dvpd
TODO
### footer
The footer is 32 bytes large and the last four bytes are a magic string that read "DVPD".
```c
struct DVPDFooter
{
struct {
uint32_t dvpdUnknown1;
uint32_t dvpdUnknown2;
uint32_t dvpdUnknown3;
uint32_t dvpdUnknown4;
} dvpdInfo; // Matches with dvpdInfo in DVPM meta section
uint64_t dataSize; // File size - header size (file size - 32)
uint32_t dataCRC32;
char magic[4]; // "DVPD"
}
```