reckless: mh: thanks for the tips.
As for demos in compressed pk3: I doubt they're that different from compressed demos in .pak (using gzip (zlib)*, a feature QF has had since about March 2000 (minus a few months where knghtbrd got pissy)).
Initially, the compression was indeed a liability (demos slowed down exponentially(?) as they progressed), but the problem was not the incremental reads, but rather the reverse seeks used for keeping track of when the next packet should be read. I modified the demo reading code to cache the packet time value and
never seek: suddenly compressed demos were faster than uncompressed demos

[* this is why menu.dat is packaged as menu.dat.gz: QF automatically appends .gz when searching, and checks the file header for gzip-ness when opening: the rest of the system knows nothing]