*** EXPLANATION *** BMA is merely a container. It is very expandable, though the file table could definately use a facelift. Have fun. Anything not specified in the file is considered null, and can be used for any purpose (considering those area are not read, so custom tags could be added after the main header but before the file table.) *** SOURCE HEADERS AND DEFINITIONS *** Make sure you use these typedefs: TypeDef Unsigned Char Int8; TypeDef Signed Short Int16; TypeDef Signed Int Int32; And constants: Const BlockSize = 4096; And these libraries: ZLib *** HEADER *** (hex) Location Type Desc --------------------------------------------------------------- 00 String(6) "BAMarc" 06 Int16 0xFFFF, identifier 08 Int16 Version #, always 1 for now 0A Int16 Entry count 0C Int8 Entry Table Block 0D Int8 First File Block 0E Int16 Reserved 10 Int8 Creator's name length 11 String(31) Creator's name 30 Int8 Description length 31 String(63) Description *** FILE TABLE *** (at file offset: EntryTableBlock*BlockSize) (hex) Location Type Desc --------------------------------------------------------------- 00 Int32 File length, in bytes 04 Int16 File offset, in blocks 06 Int8 Filename length 07 Int8 File flags: & 0x01 = unused & 0x02 = unused & 0x04 = unused & 0x08 = unused & 0x10 = unused & 0x20 = ZLib compressed & 0x40 = unused & 0x80 = unused 08 String(24) Filename *** FILE *** The file's true offset is at (FileOffsetBlock*BlockSize) in the file. If a file is ZLIB compressed, there will be an extra string at the end of the chunk, in ASCII, that contains the uncompressed file size in bytes. OGG audio is not compressed in these files because they can be loaded directly into memory and played by a sound library. -=- Created by SaxxonPike, 2004-2005 -=-