Darkplaces virtual file system

Darkplaces virtual file system is overlay file table that combines real file system and files stored in PK3 and PAK game archives.

The goals it provides:


 * transparent access to separate gamedir storing all writeable files (My Documents/My Games)
 * access files in archives just like they were stored on HDD
 * mod support (mods can override files, add new files)
 * safety (gamecode cannot damage game files)

How file table is maked

 * 1) First gamedir is processed
 * 2) Archives processed sequentally (by alphabetical order), files with same name gets overlapped
 * 3) Files with empty contents overlapping other files, makes them 'deleted' to the file system
 * 4) Real files stored in gamedir is processed and overlap files in archives
 * 5) Next gamedir is processed

Quirks
Since virtual file system is, effectively, an abstraction layer, it has its own quirks.

1. Homedir may be different than gamedir
This means config.cfg, screenshots etc. are stored in different directory, like in "My Documents/My Games/gamedir"

2. For written files, "data/" are automatically added
When QC writes any files, engine automatically adds 'data/' to the path, so gamecode cannot damage game files, maps etc. But file read is not the same. It could read files from base directory, open maps etc.

So if you write, for example, foo.txt (which will be written to data/foo.txt) and have foo.txt in gamedir, you should set path "data/foo.txt" when reading the file, and set path "foo.txt" when writing. If you dont, you will write to file under "data/", but read file that is in gamedir.

3. "./" and "../" is not allowed
To protect gamecode from damaging files, any use of "." and ".." path operators is forbidden.

4. Not fully integrated with map editor
Map editor do not support Virtual File System in model selection dialogue (entity inspector), it only can select real files. This is not a problem with developed version of Blood Omnicide (SVN working copy with test installation), but release verson SDK should make sure all game models is unpacked in order to make editor see them in model selection dialog box.