Assassin's Creed
From XentaxWiki
Back to index | Edit this page
Contents |
FORGE
Format Type: Archive
Endianness: Little-endian
Date Posted: No date given
Format Specifications
Basic file layout:
- ForgeHeader
- IndexHeader
- IndexBlock1 * IndexHeader.Number of files
- IndexBlock2 * IndexHeader.Number of files
- FileData * IndexHeader.Number of files
// ForgeHeader (1046 bytes)
- char {8} - Identifier (scimitar)
- byte {1} - null Padding
- uint32 {4} - Version (25)
- uint32 {4} - IndexHeader Offset
- uint32 {4} - (0)
- uint32 {4} - (16)
- uint32 {4} - (1)
- byte (1017) - Padding}}
// IndexHeader (88 bytes)
- uint32 (4) - Number of files
- uint32 (4) - Unknown
- uint32 (4) - (0)
- uint32 (4) - (0)
- uint32 (4) - (0xffffffff)
- uint32 (4) - (0xffffffff)
- uint32 (4) - Number of files
- uint32 (4) - (2)?
- uint32 (4) - (0x43E)
- uint32 (4) - (0)?
- uint32 (4) - Number of files
- uint32 (4) - (1)?
- uint32 (4) - (0x46E)
- uint32 (4) - (0)?
- uint32 (4) - InfoBlock Offset
- uint32 (4) - (0)?
- uint32 (4) - (0)?
- uint32 (4) - Number of files -1
- uint32 (4) - IndexBlock2s Offset
- uint32 (4) - (0)?
- uint32 (4) - InfoBlock2 Offset
- uint32 (4) - (0)?
- byte (x) - IndexBlock1 * Number of files}}
// InfoBlock (48 bytes, no idea what this is for)
- uint32 (4) - (0)
- uint32 (4) - (0)
- uint32 (4) - Offset of the end of this block
- uint32 (4) - (0)
- uint32 (4) - (0xffffffff)
- uint32 (4) - (0xffffffff)
- uint32 (4) - Number of files
- uint32 (4) - Number of files*2 -1
- uint32 (4) - Offset to the middle of a block of zeroes?
- uint32 (4) - (0)
- uint32 (4) - Another offset to the middle of a block of zeroes, after the previous one?
- uint32 (4) - (0)}}
// IndexBlock1 (16 bytes)
- uint32 (4) - Filedata offset
- uint32 (4) - Unknown
- uint32 (4) - Avalue
- uint32 (4) - File size}}
// IndexBlock2 (188 bytes)
- uint32 (4) - File size
- uint32 (4) - Bvalue1
- uint32 (4) - Bvalue2
- uint32 (4) - (0)?
- uint32 (4) - (0)?
- uint32 (4) - (0)?
- uint32 (4) - (0)?
- uint32 (4) - Nextindex
- uint32 (4) - Previndex
- uint32 (4) - (0)?
- uint32 (4) - Datetimestamp
- char (128) - Filename \0
- uint32 (4) - (4)?
- uint32 (4) - (0)?
- uint32 (4) - (4)?
- uint32 (4) - (0)?}}
// Filedata
- char (8) - (FILEDATA)
- char (393) - Filename \0
- uint32 (4) - Index1.Avalue
- uint32 (4) - File size (Matches Index1.filesize)
- uint32 (4) - Index2.Bvalue1
- uint32 (4) - Index2.Bvalue2
- uint32 (4) - (0)
- uint32 (4) - (0)
- uint32 (4) - (0)
- uint32 (4) - (4)
- uint32 (4) - (4)
- uint32 (4) - (0)
- uint32 (4) - (0x47C9797D)?
- uint32 (4) - (0)
- uint64 (8) - Identifier (0x04FA9957FBAA3300) (For non-sound files. The rest of this description is for non-sound files only.)
- uint16 (2) - (0x0110)
- uint16 (2) - (0x0100)
- uint16 (2) - (0x8000)
- uint16 (2) - (0x8000)
- uint16 (2) - (1)?
- uint32 (4) - Cvalue1
- uint32 (4) - Cvalue2 (If Cvalue1 and Cvalue2 don't match, bruteforcing ahead to next Identifier)
- uint32 (4) - Unknown
- uint16 (2) - nFileSections (uncompressed)
- uint32 (4) - SectionID
- uint32 (4) - SectionSize
- uint64 (8) - Identifier (0x1004FA9957FBAA33)
- uint16 (2) - (0x0001)
- byte (1) - compressionType (1 - LZO1X_1, 2 - LZO1X_999, 3 - LZO2A...)
- uint16 (2) - (0x8000)
- uint16 (2) - (0x8000)
- uint16 (2) - Number of compressed blocks
- uint16 (2) uncompressed block size
- uint16 (2) compressed block size
- // for each block
- uint32 (4) - Unknown
- byte (x) - Compressed file data (Data not LZO compressed if uncompressed and compressed sizes are equal for this block)
Notes and Comments
None
MultiEx BMS Script
None written yet.
Supported by Programs
- Maki [1]
Links
- More complete specification of .forge files (based on Turfster's work) [2]
Games
- Assassin's Creed *.forge
- Prince of Persia (2008) *.forge

