home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 12022 / fmt_Technomancer_TEX.7z / fmt_Technomancer_TEX.py
Encoding:
Python Source  |  2016-07-29  |  3.6 KB  |  126 lines

  1. ∩╗┐#Technomancer .* [PC] - ".pgz" Loader
  2. #v1.0
  3. #plugin by zaramot
  4.  
  5. from inc_noesis import *
  6. import subprocess
  7. import os
  8. import glob
  9.  
  10. def registerNoesisTypes():
  11.     handle = noesis.register("Technomancer [PC]", ".pgz")
  12.     noesis.setHandlerTypeCheck(handle, texCheckType)
  13.     noesis.setHandlerLoadRGBA(handle, texLoadDDS)
  14.     noesis.logPopup()
  15.     return 1
  16.         
  17. def texCheckType(data):
  18.     bs = NoeBitStream(data)
  19.     fileMagic = bs.readUInt()
  20.     if fileMagic == 0x47535350:
  21.         return 1
  22.     else: 
  23.         print("Fatal Error: Unknown file magic: " + str(hex(fileMagic) + " expected 0x47535350!"))
  24.         return 0
  25.  
  26. def texLoadDDS(data, texList):
  27.     bs = NoeBitStream(data, NOE_BIGENDIAN)
  28.     
  29.     fileMagic = bs.readUInt()
  30.     bs.seek(0x8, NOESEEK_ABS) 
  31.     SecCount = bs.readUInt()
  32.     print (SecCount)
  33.     #
  34.     if SecCount == 26:
  35.         bs.seek(0x35F, NOESEEK_ABS)
  36.         TWidth = bs.readUInt()
  37.         Unk1 = bs.readUInt()
  38.         Unk2 = bs.readUInt()
  39.         Height = bs.readUInt()
  40.         Unk1 = bs.readUInt()
  41.         Unk2 = bs.readUInt()
  42.         Unk3 = bs.readUInt()
  43.         ddsType = bs.readString()
  44.         #
  45.         if ddsType == "dxt1":
  46.             bs.seek(0x407, NOESEEK_ABS)
  47.         #
  48.         elif ddsType == "dxt5":
  49.             bs.seek(0x407, NOESEEK_ABS)
  50.         #
  51.         elif ddsType == "bc1":
  52.             bs.seek(0x406, NOESEEK_ABS)
  53.         #
  54.         elif ddsType == "bc3":
  55.             bs.seek(0x406, NOESEEK_ABS)
  56.         #
  57.         elif ddsType == "bc4":
  58.             bs.seek(0x406, NOESEEK_ABS)
  59.         #
  60.         elif ddsType == "bc5":
  61.             bs.seek(0x406, NOESEEK_ABS)
  62.         ddsNameSize = bs.readUInt()
  63.         bs.seek((ddsNameSize+0x2B), NOESEEK_REL) 
  64.         ddsSize = bs.readUInt()
  65.         null = bs.readUInt() 
  66.         ddsData = bs.readBytes(ddsSize-4)
  67.     #
  68.     elif SecCount == 31:
  69.         bs.seek(0x3A8, NOESEEK_ABS)
  70.         TWidth = bs.readUInt()
  71.         Unk1 = bs.readUInt()
  72.         Unk2 = bs.readUInt()
  73.         Height = bs.readUInt()
  74.         Unk1 = bs.readUInt()
  75.         Unk2 = bs.readUInt()
  76.         Unk3 = bs.readUInt()
  77.         ddsType = bs.readString()
  78.         #
  79.         if ddsType == "dxt1":
  80.             bs.seek(0x48C, NOESEEK_ABS)
  81.         #
  82.         elif ddsType == "dxt5":
  83.             bs.seek(0x48C, NOESEEK_ABS)
  84.         #
  85.         elif ddsType == "bc1":
  86.             bs.seek(0x48B, NOESEEK_ABS)
  87.         #
  88.         elif ddsType == "bc3":
  89.             bs.seek(0x48B, NOESEEK_ABS)
  90.         #
  91.         elif ddsType == "bc4":
  92.             bs.seek(0x48B, NOESEEK_ABS)
  93.         #
  94.         elif ddsType == "bc5":
  95.             bs.seek(0x48B, NOESEEK_ABS)
  96.         ddsNameSize = bs.readUInt()
  97.         bs.seek((ddsNameSize+0x2B), NOESEEK_REL) 
  98.         ddsSize = bs.readUInt()
  99.         null = bs.readUInt() 
  100.         ddsData = bs.readBytes(ddsSize-4)
  101.     ddsName = rapi.getLocalFileName(rapi.getInputName())
  102.     #DXT1
  103.     if ddsType == "dxt1":
  104.         texFmt = noesis.NOESISTEX_DXT1
  105.     #DXT5
  106.     elif ddsType == "dxt5":
  107.         texFmt = noesis.NOESISTEX_DXT5
  108.     #DXT1
  109.     elif ddsType == "bc1":
  110.         texFmt = noesis.NOESISTEX_DXT1
  111.     #DXT5
  112.     elif ddsType == "bc3":
  113.         texFmt = noesis.NOESISTEX_DXT5
  114.     #ATI1
  115.     elif ddsType == "bc4":
  116.         ddsData = rapi.imageDecodeDXT(ddsData, TWidth, Height, noesis.FOURCC_ATI1)
  117.         texFmt = noesis.NOESISTEX_RGBA32
  118.     #ATI2
  119.     elif ddsType == "bc5":
  120.         ddsData = rapi.imageDecodeDXT(ddsData, TWidth, Height, noesis.FOURCC_ATI2)
  121.         texFmt = noesis.NOESISTEX_RGBA32
  122.     tex1 = (NoeTexture(ddsName, TWidth, Height, ddsData, texFmt))
  123.     texList.append(tex1)
  124.  
  125.     return 1
  126.