IPAK Files: Difference between revisions

From COD Engine Research
Red-EyeX32 (talk | contribs)
Kokole (talk | contribs)
Line 10: Line 10:
  unsigned int version; //0x50000
  unsigned int version; //0x50000
  unsigned int fileSize;
  unsigned int fileSize;
  unsigned int sectionCount; //from what I've seen it's always 2 (1 = info 2 = data)
  unsigned int sectionCount;
  };
  };
   
   
Line 37: Line 37:
  struct entry_header_t
  struct entry_header_t
  {
  {
int blockCount; // actual blockcount = *(byte*)&blockCount[0];
int sizeOfPreviousBlocks : 24; // size of previously decompressed blocks, 0 if it's the first array of blocks for this file
int blockCount : 8;
  };
  };
   
   

Revision as of 23:31, 8 June 2014

IPAK's, implemented in Black Ops 2, are basically an archive of compressed image data.

Structure

Thanks to kokole for the structure.

struct ipak_header_t
{
	char identifier[4]; // "IPAK"
	unsigned int version; //0x50000
	unsigned int fileSize;
	unsigned int sectionCount;
};

struct section_t
{
	unsigned int sectionIndex; //enum 0x1 = info, 0x2 = data
	unsigned int sectionStart;
	unsigned int sectionLength;
	unsigned int numOfEntries; // each entry is a compressed iwi file in section 2 and entry info in section 1
};

struct entry_info_t
{
	u32 hash; // checksum, type?
	u32 id;
	u32 entryStart; // location of compressed iwi file
	u32 entryLength;
}; // 16 bytes

struct entry_t
{
	entry_header_t header;
	block_info_t blocks[31]; //they can be null, actual number of blocks is header->blockCount;
};

struct entry_header_t
{

int sizeOfPreviousBlocks : 24; // size of previously decompressed blocks, 0 if it's the first array of blocks for this file

	int blockCount : 8;
};

struct block_info_t
{			//enum 0x0 = plaintext, 0x1 = encrypted
	unsigned int info; //(depending on endian) blockSize = (info & 0xFFFF); , compressedFlag = info >> 24;
}; // 4 bytes

Decompression Methods

The compression method is just the basic LZO1X compression.

PC:

http://pastebin.com/vd9t2U2B

PS3:

1.00 t6mp_ps3f.self - 0x6AEA78

XBOX:

tu9 default_mp.xex - 0x828E5090
tu13 default_mp.xex - 0x828E6308