.rtt files store the image data for a single texture. The underlying pixel format is actually just a DDS but the headers are different.
The header is 0x80 bytes long but in almost all cases, the data resides in the first 0x10 bytes.
Offset | Length | Example | Name | Notes |
---|---|---|---|---|
0x00 | 0x01 | 0x80 | Magic Number | RTT's always start with 0x80 |
0x01 | 0x03 | 0x0055EC | Last DWORD | Is equal to file size minus 0x04 |
0x04 | 0x01 | 0x08 | Compression Method | 0x01, 0x05 - No compression? 0x06 - DXT1 0x07 - DXT3 0x08 - DXT5 |
0x05 | 0x01 | 0x00 | Data Location Flag | Always 0x00 in .rtt files When in an .rtt header in a .ngp file: - 0x00 - Data in .vram - 0x01 - Data in .ngp |
0x06 | 0x02 | 0xAAE4 | Image Format | 0xAAE4 - DXT1, DXT3, DXT5, ...? 0xA9FF - Boundary Mask (1 byte alphas) 0xAA1B - Unknown |
0x08 | 0x02 | 0x0400 | Width | Image pixel width |
0x0A | 0x02 | 0x0400 | Height | Image pixel height |
0x0C | 0x01 | 0x00 | Unknown | Always 0? |
0x0D | 0x01 | 0x01 | Unknown | |
0x0E | 0x01 | 0x01 | Number of mipmaps | A value of 0x01 means 1 layer (no mipmapping) |
0x0F | 0x01 | 0x02 | Unknown |
Syntax:
byte_name: byte_value(occurances)
MAGI: 0x80(441)
LEN0: 0x0(114) 0x1(122) 0x2(16) 0x4(89) 0x5(7) 0x7(2) 0x8(3) 0xa(7) 0x10(44) 0x15(1) 0x20(2) 0x2a(34)
LEN1: 0x0(243) 0x1(1) 0x2(7) 0x4(1) 0x5(34) 0x8(2) 0xf(1) 0x10(1) 0x15(3) 0x1d(3) 0x20(1) 0x2b(1) 0x40(11) 0x49(22) 0x55(66) 0x58(2) 0x6c(16) 0x80(13) 0xab(13)
LEN2: 0xc(1) 0x28(1) 0x34(11) 0x4c(2) 0x50(1) 0x7c(295) 0x9c(3) 0xa0(22) 0xd0(42) 0xe4(57) 0xec(6)
COMP: 0x1(31) 0x5(65) 0x6(238) 0x7(6) 0x8(101)
0x05: 0x0(441)
FMT0: 0xa9(31) 0xaa(410)
FMT1: 0x1b(65) 0xe4(345) 0xff(31)
WDT0: 0x0(99) 0x1(44) 0x2(202) 0x4(21) 0x5(2) 0x8(73)
WDT1: 0x0(336) 0x8(1) 0x10(57) 0x20(8) 0x40(4) 0x80(15) 0xbc(4) 0xd8(16)
HGT0: 0x0(85) 0x1(163) 0x2(104) 0x4(56) 0x8(33)
HGT1: 0x0(348) 0x8(1) 0x10(58) 0x20(8) 0x38(4) 0x40(6) 0x80(12) 0xd0(2) 0xe0(2)
0x0c: 0x0(441)
0x0d: 0x1(419) 0x10(22)
MIPS: 0x1(269) 0x3(31) 0x4(1) 0x5(57) 0x6(1) 0x7(3) 0x8(1) 0x9(7) 0xa(60) 0xb(9) 0xc(2)
0x0f: 0x2(419) 0x3(22)
0x10: 0x0(441)
0x11: 0x0(441)
0x12: 0x0(384) 0x1(16) 0x2(31) 0x3(1) 0x4(1) 0x5(2) 0x6(3) 0x8(1) 0xa(2)
0x13: 0x0(420) 0x40(1) 0x78(1) 0xb0(16) 0xf0(3)
0x14: 0x0(441)
0x15: 0x0(441)
0x16: 0x0(441)
0x17: 0x0(441)
0x18: 0x0(441)
0x19: 0x0(441)
0x1a: 0x0(441)
0x1b: 0x0(441)
0x1c: 0x0(441)
0x1d: 0x0(441)
0x1e: 0x0(441)
0x1f: 0x0(441)
0x20: 0x0(441)
0x21: 0x0(441)
0x22: 0x0(441)
0x23: 0x0(441)
0x24: 0x0(441)
0x25: 0x0(441)
0x26: 0x0(441)
0x27: 0x0(441)
0x28: 0x0(441)
0x29: 0x0(441)
0x2a: 0x0(441)
0x2b: 0x0(441)
0x2c: 0x0(441)
0x2d: 0x0(441)
0x2e: 0x0(441)
0x2f: 0x0(441)
0x30: 0x0(441)
0x31: 0x0(441)
0x32: 0x0(441)
0x33: 0x0(441)
0x34: 0x0(441)
0x35: 0x0(441)
0x36: 0x0(441)
0x37: 0x0(441)
0x38: 0x0(441)
0x39: 0x0(441)
0x3a: 0x0(441)
0x3b: 0x0(441)
0x3c: 0x0(441)
0x3d: 0x0(441)
0x3e: 0x0(441)
0x3f: 0x0(441)
0x40: 0x0(441)
0x41: 0x0(441)
0x42: 0x0(441)
0x43: 0x0(441)
0x44: 0x0(441)
0x45: 0x0(441)
0x46: 0x0(441)
0x47: 0x0(441)
0x48: 0x0(441)
0x49: 0x0(441)
0x4a: 0x0(441)
0x4b: 0x0(441)
0x4c: 0x0(441)
0x4d: 0x0(441)
0x4e: 0x0(441)
0x4f: 0x0(441)
0x50: 0x0(441)
0x51: 0x0(441)
0x52: 0x0(441)
0x53: 0x0(441)
0x54: 0x0(441)
0x55: 0x0(441)
0x56: 0x0(440) 0x1(1)
0x57: 0x0(441)
0x58: 0x0(441)
0x59: 0x0(441)
0x5a: 0x0(441)
0x5b: 0x0(441)
0x5c: 0x0(441)
0x5d: 0x0(441)
0x5e: 0x0(440) 0x1(1)
0x5f: 0x0(441)
0x60: 0x0(441)
0x61: 0x0(441)
0x62: 0x0(441)
0x63: 0x0(441)
0x64: 0x0(441)
0x65: 0x0(441)
0x66: 0x0(440) 0x1(1)
0x67: 0x0(441)
0x68: 0x0(441)
0x69: 0x0(441)
0x6a: 0x0(441)
0x6b: 0x0(441)
0x6c: 0x0(441)
0x6d: 0x0(441)
0x6e: 0x0(440) 0x1(1)
0x6f: 0x0(441)
0x70: 0x0(441)
0x71: 0x0(441)
0x72: 0x0(441)
0x73: 0x0(441)
0x74: 0x0(441)
0x75: 0x0(441)
0x76: 0x0(440) 0x1(1)
0x77: 0x0(441)
0x78: 0x0(441)
0x79: 0x0(441)
0x7a: 0x0(441)
0x7b: 0x0(441)
0x7c: 0x0(441)
0x7d: 0x0(441)
0x7e: 0x0(440) 0x1(1)
0x7f: 0x0(441)