50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
On disk format of directory (xxx_dir.vpk. data is in xxx_000.vpk, xxx_001.vpk, ...)
|
|
|
|
|
|
id
|
|
records
|
|
"extension\0" (0 = no more extensions)
|
|
"dir\0" (0 = no more dirs)
|
|
"basefilename\0" (0 = no more files of this extension in this dir)
|
|
orig data file crc
|
|
int16 metadata size
|
|
location in data files for level 0 data (word filenum, ulong offset, ulong fsize)
|
|
location in data files for level 1 data (word filenum, ulong offset, ulong fsize) ..
|
|
-1.
|
|
uint8 metadata[]
|
|
|
|
|
|
..
|
|
..
|
|
..
|
|
|
|
data files
|
|
|
|
|
|
|
|
[x]step0 - class def, format def
|
|
[x]step1 - generator
|
|
[x]step2 - loader
|
|
[ ]step3 - surrounding file monitor tools + ui
|
|
|
|
|
|
|
|
A client of the archive who can't handle their persistent meta data going away (as during
|
|
a reload) can say so, which will cuase their metadata to be copied away at next reload. otherwise,
|
|
a reload will change the address of the meta data and maybe its size/content.
|
|
|
|
|
|
|
|
insert
|
|
|
|
case file found:
|
|
find all files in the same data chunk
|
|
load data chunk.
|
|
replace old chunk of data, changing offsets in parts of files that were there.
|
|
replace offset and crc in old dir record
|
|
case file not found
|
|
might need to add new extension
|
|
might need to add new directory
|
|
insert new file entry
|
|
add new data to last chunk
|