Call of Duty 4: FastFile Format
*** Article and investigation in early progress ***
Header
- Byte 0-3: decompressed fastfile size minus 44 (0x2C)
- Byte 4-7: about the total size of referenced data, e.g. the required memory for IWI textures if material files are in the ff
- Byte 8-11: unknown, might be a flag
- Byte 12-43: unknown
- Byte 44-47: equal to number of entries in "1st index" and amount of (model tag?) strings (times 4 for index length)
- Byte 48-51: separator? (FF FF FF FF)
- Byte 52-55: number of records* ("2nd index", times 8 for index length)
- Byte 56-63: separator? (FF FF FF FF FF FF FF FF)
- Byte 64-x: string list (xmodelsurfs?) --> not always, depends on the content (required offsets are in the FF header)
* under re-investigation
Example: mp_backlot_load.ff
Contains:
- 2x shaders
- 3x materials
- (1x fastfile name)
Materials:
- $victorybackdrop - mile_high_victory_screen.iwi (699,092 bytes)
- $defeatbackdrop - (none)
- $levelbriefing - loadscreen_mp_backlot.iwi (524,316 bytes)
----------- [start of header] 71 03 00 00 decompressed filesize - 44 (hex: 371 + 2C = 39D; dec: 881 + 44 = 925) B8 AA 12 00 size of both IWIs the materials in FF point to - 56 (2x28, 28 bytes = IWI header) 0x12AAB8 = 1,223,352 699,092 + 524,316 = 1,223,408 difference: 56 A4 00 00 00 might be a flag 00 00 00 00 ... empty? E5 00 00 00 unknown 00 00 00 00 ... empty? ----------- [end of header] (44 bytes), [start of index] 00 00 00 00 ... empty? 06 00 00 00 number of records in index (6) FF FF FF FF separator 05 00 00 00 FF FF FF FF 1st: shader 05 00 00 00 FF FF FF FF 2nd: shader 04 00 00 00 FF FF FF FF 3rd: material 04 00 00 00 FF FF FF FF 4th: material 04 00 00 00 FF FF FF FF 5th: material 1F 00 00 00 FF FF FF FF 6th: ff name FF FF FF FF 00 00 00 00 separator / termination ----------- [end of index]
Index
4 byte identifier (fastfile entry type), 4 byte offset (FF FF FF FF = -1, meaning right after the previous block?)
Separator (FF FF FF FF) after last 4-byte couple + 00 00 00 00 ?
Types
- 01 00 00 00 - physpreset
- 03 00 00 00 - xmodel
- 04 00 00 00 - material
- 05 00 00 00 - shader
- 06 00 00 00 - image?
- 14 00 00 00 - menu
- 19 00 00 00 - fx
- 20 00 00 00 - stringtable (comma separated list)
- 1F 00 00 00 - string / raw file / fastfile name
--CoDEmanX 17:27, 16 May 2009 (UTC)
--Daevius 23:59, 1 November 2009 (UTC)