Advertisement
Soneek

G1lExtract

Oct 3rd, 2017
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.60 KB | None | 0 0
  1. import sys
  2. import os
  3. import struct
  4.  
  5. def readu32(file, le=True):
  6.     if le:
  7.         return struct.unpack("<i", file.read(4))[0]
  8.     else:
  9.         return struct.unpack(">i", file.read(4))[0]
  10.        
  11.  
  12.  
  13. g1l = open(sys.argv[1], 'rb')
  14. fourcc = g1l.read(4)
  15. if fourcc == "_L1G":
  16.     le = True
  17. else:
  18.     le = False
  19. g1l.seek(8)
  20. ext = ".g1l"
  21. fullSize = readu32(g1l, le)
  22. headerSize = readu32(g1l, le)
  23. codec = readu32(g1l, le)
  24. fileCount = readu32(g1l, le)
  25. for i in range(fileCount):
  26.     g1l.seek(0x18+i*4)
  27.     print(hex(g1l.tell()))
  28.     fileOffset = readu32(g1l, le)
  29.     g1l.seek(fileOffset)
  30.     header = g1l.read(4)
  31.     if header == "RIFF":
  32.         fileSize = readu32(g1l) + 8
  33.         ext = ".at3"
  34.     elif header == "WiiB":
  35.         g1l.seek(0x18,1)
  36.         channelSize = readu32(g1l, False)
  37.         channelCount = readu32(g1l, False)
  38.         ext = ".wiibgm"
  39.         fileSize = channelCount * channelSize + 0x800
  40.     elif header == "WiiV":
  41.         g1l.seek(0xc,1)
  42.         fileSize = readu32(g1l, False)
  43.         print("WiiVoice - size %s" % hex(fileSize))
  44.         ext = ".wiivoice"
  45.     else:
  46.         print ("Unknown file type %s" % (header))
  47.         continue
  48.     g1l.seek(fileOffset)
  49.     fileName = os.path.splitext(sys.argv[1])[0] + "_%04d%s" % (i, ext)
  50.     outFile = open(fileName, 'wb')
  51.     if ext == ".g1l":
  52.         outFile.write("G1L_0000" + struct.pack(">I", 0x1c + fileSize) + struct.pack(">I", 0x1c) + struct.pack(">I", codec) + struct.pack(">I", 1) + struct.pack(">I", 0x1c))    
  53.     outFile.write(g1l.read(fileSize))
  54.     outFile.close()
  55.    #print("Wrote %s" % (fileName))
  56. g1l.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement