AVF is a multimedia format used in the games like The Vampire Diaries (old 8-bit format) and Nancy Drew: Stay Tuned For Danger (new 15-bit format). It may be used in other games in the Nancy Drew series.
3 bytes - "ALG" 7 bytes - unknown 2 bytes - major version 2 bytes - minor version
15 bytes - "AVF WayneSikes" 2 bytes - major version 2 bytes - minor version 1 byte - unknown
Known versions are 1.0 and 2.0.
2 bytes - number of frames 2 bytes - width 2 bytes - height 1 byte - depth (8 for old format, 16 for new format) 4 bytes - frame time 1 byte - compression (should be 2; compression 0 is for unpacked data) 1 byte (version 1.0 only) - unknown
Old format uses 8-bit format with an external palette, new format uses RGB555 video. Additionally old format is stored bottom-up while new format is top to bottom.
Table of contents entries format
Table of contents entry for version 1.0:
9 bytes - name 4 bytes - index 4 bytes - unknown 4 bytes - offset 4 bytes - compressed size
Table of contents entry for version 2.0:
2 bytes - index 4 bytes - offset 4 bytes - compressed size 4 bytes - uncompressed size 1 byte - type 4 bytes - unknown
Compression type 2 means that frame data is first compressed with LZSS scheme that groups flags into bytes and has spaces as the window fill value. Also it uses rolling obfuscation scheme by subtracting byte index (truncated to low 8 bits of course) from its value.
Type 0 is raw data (old format frames are always raw data). Types 1 and 2 employ additional RLE-based compression (or can be empty frames).
The compression method works by issuing one-byte commands for skipping or writing 16-bit pixels:
- 0x20 - read 32-bit
skipvalue and 32-bit
skippixels and read
lengthnew 16-bit pixels
- 0x40 - read a pixel (2 bytes), 32-bit
skipvalue and 32-bit
skippixels and output new pixel
- 0x80 - read 8-bit
lengthvalue, read 32-bit number of skip+put operations, read
lengthnew pixels into buffer, and then for the number of skip+put operations read 32-bit
skippixels and output
lengthpixels from the buffer