コード例 #1
0
ファイル: GARC.py プロジェクト: kyapp69/3DSkit
 def readheader(self, data):
     self.byteorder = ENDIANS[rawutil.unpack_from('>H', data, 8)[0]]
     hdata, ptr = self.unpack_from(GARC_HEADER_STRUCT, data, 0, getptr=True)
     if hdata[0] != b'CRAG':
         error.InvalidMagicError('Invalid magic %s, expected CRAG' %
                                 byterepr(hdata[0]))
     #headerlen = hdata[1]
     #bom = hdata[2]
     self.version = hdata[3]
     self.chunkcount = hdata[4]
     self.dataoffset = hdata[5]
     #filelen = hdata[6]
     padinfo, ptr = self.unpack_from(GARC_HEADER_END[self.version],
                                     data,
                                     ptr,
                                     getptr=True)
     if self.version == 0x0400:
         print('Version: 4')
         self.larger_unpadded = padinfo[0]
         self.pad_to_nearest = 4
     elif self.version == 0x0600:
         print('Version: 6')
         self.larger_padded = padinfo[0]
         self.larger_unpadded = padinfo[1]
         self.pad_to_nearest = padinfo[2]
     else:
         error.UnsupportedVersionError('Unsupported version 0x%04x' %
                                       self.version)
     return ptr
コード例 #2
0
ファイル: NARC.py プロジェクト: kyapp69/3DSkit
 def readheader(self):
     self.byteorder = ENDIANS[rawutil.unpack_from('<H', self.file, 4)[0]]
     header = self.unpack_from(NARC_HEADER_STRUCT, self.file, 0,
                               NARC_HEADER_NAMES)
     if header.magic != b'NARC':
         error.InvalidMagicError('Invalid NARC magic: %s' %
                                 byterepr(header.magic))
コード例 #3
0
ファイル: BFLIM.py プロジェクト: ObscenityIB/3DSkit
 def readFLIMheader(self, hdr):
     self.byteorder = ENDIANS[rawutil.unpack_from('>H', hdr, 4)[0]]
     hdata = self.unpack(BFLIM_FLIM_HDR_STRUCT, hdr)
     if hdata[0] != b'FLIM':
         error('Invalid magic %s, expected FLIM' % byterepr(hdata[0]), 301)
     #bom = hdata[1]
     #headerlen = hdata[2]
     self.version = hdata[3]
コード例 #4
0
 def read_header(self, data):
     magic = data.read(8)
     if magic != b'MsgStdBn':
         error.InvalidMagicError('Invalid magic %s, expected MsgStdBn' %
                                 byterepr(magic))
     self.byteorder = ENDIANS[rawutil.unpack_from('>H', data)[0]]
     magic, bom, unk1, self.encoding, unk2, self.sectionnum, unk3, self.filesize, unk4 = self.unpack_from(
         '8s2H2B2HI10s', data, 0)
コード例 #5
0
ファイル: BCSTM.py プロジェクト: kyapp69/3DSkit
	def read_header(self, data):
		self.byteorder = ENDIANS[rawutil.unpack_from(">H", data, 4)[0]]
		header = self.unpack_from("4s2H 2I2H SSS", data, 0, "magic, bom, headerlen, version, filesize, seccount, reserved, inforef, seekref, dataref")
		if header.magic != b"CSTM":
			error.InvalidMagicError("Invalid magic %s, expected CSTM" % byterepr(header.magic))
		self.filesize = header.filesize
		self.inforef = SizedRef(header.inforef)
		self.seekref = SizedRef(header.seekref)
		self.dataref = SizedRef(header.dataref)
コード例 #6
0
ファイル: PkmSMTexture.py プロジェクト: Tyulis/3DSkit
 def readDataHeader(self, data):
     data.seek(DATA_HEADER_OFFSET)
     self.dataheader = rawutil.unpack_from(DATA_HEADER_STRUCT,
                                           data,
                                           names=DATA_HEADER_NAMES)
     if self.dataheader.format not in DATA_FORMATS:
         error.UnknownDataFormatError(
             "Unknown texture data format identifier 0x%04X" %
             self.dataheader.format)
     print("Color format : %s" % DATA_FORMATS[self.dataheader.format])
     print("Texture swizzling : %d" % self.dataheader.swizzle)
コード例 #7
0
 def read_header(self, data):
     self.byteorder = ENDIANS[rawutil.unpack_from('>H', data, 4)[0]]
     header = self.unpack_from(
         '4s2H 2I2H SS', data, 0,
         'magic, bom, headerlen, version, filesize, seccount, reserved, inforef, dataref'
     )
     if header.magic != b'CWAV':
         error.InvalidMagicError('Invalid magic %s, expected CWAV' %
                                 byterepr(header.magic))
     self.filesize = header.filesize
     self.inforef = SizedRef(header.inforef)
     self.dataref = SizedRef(header.dataref)
コード例 #8
0
 def readFLIMheader(self, data):
     data.seek(-0x24, 2)
     self.byteorder = ENDIANS[rawutil.unpack_from('>H', data)[0]]
     data.seek(-0x28, 2)
     hdata = self.unpack_from(BFLIM_FLIM_HDR_STRUCT, data)
     if hdata[0] != b'FLIM':
         error.InvalidMagicError('Invalid magic %s, expected FLIM' %
                                 byterepr(hdata[0]))
     #bom = hdata[1]
     #headerlen = hdata[2]
     self.version = hdata[3]
     if self.verbose:
         print('Version: %08x' % self.version)
コード例 #9
0
ファイル: SARC.py プロジェクト: ObscenityIB/3DSkit
 def readheader(self, data):
     magic, hdrlen, bom = rawutil.unpack_from('>4s2H', data, 0)
     if magic != b'SARC':
         error('Invalid magic %s, expected SARC' % byterepr(magic), 301)
     self.byteorder = ENDIANS[bom]
     hdr, ptr = self.unpack_from(SARC_HEADER_STRUCT, data, 0, getptr=True)
     #magic = hdr[0]
     #headerlen = hdr[1]
     #bom = hdr[2]
     #filelen = hdr[3]
     self.dataoffset = hdr[4]
     #unknown = hdr[5]
     return ptr
コード例 #10
0
 def readheader(self):
     self.byteorder = ENDIANS[rawutil.unpack_from('>H', self.file, 4)[0]]
     header = self.unpack_from(FLAN_HEADER, self.file, 0)
     if header[0] != b'FLAN':
         error.InvalidMagicError('Invalid magic %s, expected FLAN' %
                                 byterepr(header[0]))
     #bom = header[1]
     headerlen = header[2]
     self.version = header[3]
     #unknown = header[4]
     self.filelen = header[5]
     self.seccount = header[6]
     #padding = header[7]
     return headerlen
コード例 #11
0
ファイル: PkmSMTexture.py プロジェクト: Tyulis/3DSkit
 def readHeader(self, data):
     self.fileheader = rawutil.unpack_from(FILE_HEADER_STRUCT,
                                           data,
                                           names=FILE_HEADER_NAMES)
     if self.fileheader.magic_texture != b"texture\x00":
         error.InvalidMagicError("Invalid magic %s, expected texture\x00" %
                                 byterepr(self.fileheader.magic_texture))
     self.outname = os.path.join(
         os.path.dirname(self.filename),
         self.fileheader.filename.decode("utf-8").rpartition(".")[0] +
         ".png")
     if self.verbose:
         print("Version : %08X" % self.fileheader.version)
     print("Origin file name : %s" %
           self.fileheader.filename.decode("utf-8"))
コード例 #12
0
	def read_header(self, data):
		magic, bom = rawutil.unpack_from('>4sH', data, 0)
		self.byteorder = ENDIANS[bom]
		if magic != b'CGRP':
			error.InvalidMagicError('Invalid magic %s, expected CGRP' % byterepr(magic))
		magic, bom, headerlen, self.version, filesize, self.seccount = self.unpack_from('4s2H3I', data, 0)
		self.secinfo = {}
		for i in range(self.seccount):
			id, pad, offset, size = self.unpack_from('2H2I', data)
			if id == 0x7800:
				self.secinfo['INFO'] = (offset, size)
			elif id == 0x7801:
				self.secinfo['FILE'] = (offset, size)
			elif id == 0x7802:
				self.secinfo['INFX'] = (offset, size)
コード例 #13
0
 def readhdr(self, data):
     magic, endian = rawutil.unpack_from('>4sH', data, 0)
     if magic != b'darc':
         error('Invalid magic %s, expected darc' % byterepr(magic), 301)
     self.byteorder = ENDIANS[endian]
     hdr, ptr = self.unpack_from(DARC_HEADER_STRUCT, data, 0, getptr=True)
     #magic=hdr[0]
     #bom=hdr[1]
     #headerlen=hdr[2]
     #unknown = hdr[3]
     self.version = hdr[4]
     #filelen=hdr[5]
     self.tableoffset = hdr[6]
     self.tablelen = hdr[7]
     self.dataoffset = hdr[8]
     return ptr
コード例 #14
0
 def read_header(self, data):
     bom = rawutil.unpack_from('>H', data, 4)[0]
     self.byteorder = '<' if bom == 0xfffe else '>'
     hdata = self.unpack_from(BCSTM_HEADER_STRUCT, data)
     magic = hdata[0]
     if magic != b'CSTM':
         error('Invalid magic %s, expected CSTM' % byterepr(magic))
     bom = hdata[1]
     headerlen = hdata[2]
     self.version = hdata[3]
     filesize = hdata[4]
     blockcount = hdata[5]  #Should be 3
     padding = hdata[6]
     inforef = SizedRef(hdata[7])
     seekref = SizedRef(hdata[8])
     dataref = SizedRef(hdata[9])
     self.info = inforef.getdata(data)
     self.seek = seekref.getdata(data)
     self.data = dataref.getdata(data)
コード例 #15
0
 def read_header(self, data):
     magic, bom = rawutil.unpack_from('>4sH', data, 0)
     if magic != b'FFNT':
         error.InvalidMagicError('Invalid magic %s, expected %s' %
                                 (byterepr(magic), 'FFNT'))
     self.byteorder = ENDIANS[bom]
     headerlen, version, filesize, blockcount = self.unpack_from(
         'H3I', data)
     if version not in (0x04010000, 0x04000000, 0x03000000):
         error.UnsupportedVersionError(
             'Only versions 4.0.0, 4.1.0 and 3.0.0 are supported, found %d.%d.%d'
             % (version >> 24, (version >> 16) & 0xFF, version & 0xFFFF))
     if self.version is None:
         self.version = VERSIONS[version]
     self.vernum = version
     if self.verbose:
         print('Version %d.%d.%d (%s)' %
               (version >> 24,
                (version >> 16) & 0xFF, version & 0xFFFF, self.version))
コード例 #16
0
ファイル: LZ10.py プロジェクト: ObscenityIB/3DSkit
 def decompress(self):
     ptr = 0
     final = []
     while len(final) < self.decsize:
         flags = self.tobits(self.data[ptr])
         ptr += 1
         for flag in flags:
             if flag == 0:
                 byte, ptr = self.uint8(self.data, ptr)
                 final.append(byte)
             else:
                 infobs = rawutil.unpack_from('>H', self.data, ptr)[0]
                 ptr += 2
                 count = (infobs >> 12) + 3
                 disp = (infobs & 0xfff) + 1
                 for i in range(0, count):
                     final.append(final[-disp])
             if len(final) >= self.decsize:
                 break
     ret = bytes(final)
     return ret
コード例 #17
0
ファイル: BNTX.py プロジェクト: Tyulis/3DSkit
	def read_header(self, data):
		startpos = data.tell()
		node = {}
		magic, bom = rawutil.unpack_from('>8s4xH', data)
		self.byteorder = ENDIANS[bom]
		data.seek(startpos)
		magic, self.version, bom, alignment_exponent, target_adress_size = self.unpack_from('8sIH2B', data)
		filename_offset, reloc_flag, self.firstsection_offset, self.reloc_offset, filesize = self.unpack_from('I2H2I', data)
		endpos = data.tell()
		if magic != b'BNTX\x00\x00\x00\x00':
			error.InvalidMagicError('Invalid BNTX magic, found %s' % byterepr(magic))
		self.alignment = 1 << alignment_exponent
		node['version'] = self.version
		node['alignment_exponent'] = alignment_exponent
		node['target_adress_size'] = target_adress_size
		node['relocation_flag'] = reloc_flag
		filename = self.unpack_from('n', data, filename_offset)[0].decode('utf-8')
		node['filename'] = filename
		self.meta['BNTX'] = node
		data.seek(endpos)
		if self.verbose:
			print('File version : %s.%s.%s.%s' % (self.version >> 24, (self.version >> 16) & 0xFF, (self.version >> 8) & 0xFF, (self.version & 0xFF)))
コード例 #18
0
	def __init__(self, filename, data, opts={}):
		self.make_outdirs(filename)
		self.byteorder = ENDIANS[rawutil.unpack_from('>H', data, 4)[0]]
		self.readheader(data)
		self.readSTRG()
		self.readINFO()