MightyMable Posted May 15 Posted May 15 (edited) So I did everything as told here but some alt color textures are missing(this applies to all characters as well and lots of other outfits) after extraction. These are the textures I ripped, showing the denim skirt for example: And the missing ones are inside the rectangle(yellow, blue, light blue and orange): It's the same thing with other characters wherein the colors that aren't included are on the 1st and last rows of the cusomization screen If anybody knows how to extract all textures out mygosh you're a hero 🙏🫡 I'm also looking into getting the texts and button input icons out Edited May 16 by MightyMable removed the spoilers for easier viewing
MightyMable Posted Thursday at 01:38 PM Author Posted Thursday at 01:38 PM Can anybody help or knows something? 😅😓 Perhaps the ps3 version ripping know how? without having to use emulators 🤔 Bump
Engineers Solution h3x3r Posted Thursday at 06:38 PM Engineers Solution Posted Thursday at 06:38 PM So after i decompressed BIN i used this bms from luigi to unpack it but without file names. Spoiler # Tekken 6 (script 0.2.3) # script for QuickBMS http://quickbms.aluigi.org endian big open FDDE "idx" open FDDE "bin" 1 EXISTS if EXISTS == 0 get TMP basename string TMP + "_.bin" open FDSE TMP 1 endif math ALIGN = 0x8000 math DO_CHUNKS = 1 get FILES asize math FILES / 8 goto -8 get OFFSET long get BIN_SIZE asize 1 math OFFSET * ALIGN if OFFSET u> BIN_SIZE math ALIGN = 0x80 math DO_CHUNKS = 0 endif goto 0 for i = 0 < FILES get OFFSET long get SIZE long if SIZE != 0xffffffff if SIZE != 0 math OFFSET * ALIGN callfunction DUMP 1 endif endif next i startfunction DUMP if DO_CHUNKS == 0 log "" OFFSET SIZE 1 else goto OFFSET 1 get CHUNKS long 1 if CHUNKS u< 0x200 # some files are chunked and others aren't... no way to know it! for x = 0 < CHUNKS get CHUNK_OFF long 1 get CHUNK_SIZE long 1 math CHUNK_OFF + OFFSET if CHUNK_SIZE != 0 savepos TMP_OFF 1 goto CHUNK_OFF 1 get TMP long 1 goto TMP_OFF 1 math TMP * 8 math TMP + 4 math TMP x 0x10 if TMP == CHUNK_SIZE # just an empty index, skip it else log "" CHUNK_OFF CHUNK_SIZE 1 endif endif next x else log "" OFFSET SIZE 1 endif endif endfunction You'll get *.NTX files. These are textures. I wrote Noesis script for them. from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Tekken 6 - Xbox 360 Texture", ".ntx") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadRGBA(handle, noepyLoadRGBA) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data,NOE_BIGENDIAN) if len(data) < 20: return 0 return 1 def noepyLoadRGBA(data, texList): bs = NoeBitStream(data,NOE_BIGENDIAN) BaseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) bs.read(7) TextureCount = bs.readUByte() bs.read(8) for i in range(TextureCount): TextureNum = "_{:04d}".format(i) cPos = bs.tell() bs.read(8) RawDataSize = bs.readUInt() RawDataOffset = bs.readUShort() Var3 = bs.readUShort() MipMaps = bs.readUShort() PixelFormat = bs.readUShort() TextureWidth = bs.readUShort() TextureHeight = bs.readUShort() bs.seek(cPos, NOESEEK_ABS) bs.read(RawDataOffset) data = bs.readBytes(RawDataSize) if PixelFormat == 0: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT1 elif PixelFormat == 1: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT3 elif PixelFormat == 2: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT5 texList.append(NoeTexture(BaseName + TextureNum, TextureWidth, TextureHeight, data, texFmt)) return 1 1
MightyMable Posted yesterday at 02:23 AM Author Posted yesterday at 02:23 AM Oh gosh, this worked and I got the missing textures finally 😮 Thank you so much 🥺 Spoiler
Engineers h3x3r Posted yesterday at 01:20 PM Engineers Posted yesterday at 01:20 PM Here's bms to dump texture only if you care... get BaseFileName basename endian big for findloc NTXOffset binary "\x4E\x54\x58\x52" goto NTXOffset getdstring Dummy 0x07 get TextureCount ubyte getdstring Dummy 0x08 for i = 0 < TextureCount savepos Offset get FileSize uint32 goto Offset getdstring Data FileSize string FileName p= "%s/0x%04x.ntx" BaseFileName Offset log FileName Offset FileSize next i next And I must also update Noesis script to work with them. Spoiler from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Tekken 6 - Xbox 360 Texture", ".ntx") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadRGBA(handle, noepyLoadRGBA) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data,NOE_BIGENDIAN) if len(data) < 20: return 0 return 1 def noepyLoadRGBA(data, texList): bs = NoeBitStream(data,NOE_BIGENDIAN) BaseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) cPos = bs.tell() bs.read(8) RawDataSize = bs.readUInt() RawDataOffset = bs.readUShort() Var3 = bs.readUShort() MipMaps = bs.readUShort() PixelFormat = bs.readUShort() TextureWidth = bs.readUShort() TextureHeight = bs.readUShort() bs.seek(RawDataOffset, NOESEEK_ABS) data = bs.readBytes(RawDataSize) if PixelFormat == 0: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT1 print("Pixel Format > DXT1 ",PixelFormat) elif PixelFormat == 1: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT3 print("Pixel Format > DXT3 ",PixelFormat) elif PixelFormat == 2: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT5 print("Pixel Format > DXT5 ",PixelFormat) elif PixelFormat == 19: data = rapi.swapEndianArray(data, 2) data = rapi.imageDecodeRaw(data, TextureWidth, TextureHeight, "r8g8b8a8") texFmt = noesis.NOESISTEX_RGBA32 print("Pixel Format > RGBA ",PixelFormat) elif PixelFormat == 20: data = rapi.swapEndianArray(data, 2) data = rapi.imageDecodeRaw(data, TextureWidth, TextureHeight, "r8g8b8a8") texFmt = noesis.NOESISTEX_RGBA32 print("Pixel Format > RGBA ",PixelFormat) texList.append(NoeTexture(BaseName, TextureWidth, TextureHeight, data, texFmt)) return 1 1
MightyMable Posted 8 hours ago Author Posted 8 hours ago 20 hours ago, h3x3r said: Here's bms to dump texture only if you care... get BaseFileName basename endian big for findloc NTXOffset binary "\x4E\x54\x58\x52" goto NTXOffset getdstring Dummy 0x07 get TextureCount ubyte getdstring Dummy 0x08 for i = 0 < TextureCount savepos Offset get FileSize uint32 goto Offset getdstring Data FileSize string FileName p= "%s/0x%04x.ntx" BaseFileName Offset log FileName Offset FileSize next i next And I must also update Noesis script to work with them. Reveal hidden contents from inc_noesis import * import noesis import rapi import os def registerNoesisTypes(): handle = noesis.register("Tekken 6 - Xbox 360 Texture", ".ntx") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadRGBA(handle, noepyLoadRGBA) noesis.logPopup() return 1 def noepyCheckType(data): bs = NoeBitStream(data,NOE_BIGENDIAN) if len(data) < 20: return 0 return 1 def noepyLoadRGBA(data, texList): bs = NoeBitStream(data,NOE_BIGENDIAN) BaseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName())) cPos = bs.tell() bs.read(8) RawDataSize = bs.readUInt() RawDataOffset = bs.readUShort() Var3 = bs.readUShort() MipMaps = bs.readUShort() PixelFormat = bs.readUShort() TextureWidth = bs.readUShort() TextureHeight = bs.readUShort() bs.seek(RawDataOffset, NOESEEK_ABS) data = bs.readBytes(RawDataSize) if PixelFormat == 0: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT1 print("Pixel Format > DXT1 ",PixelFormat) elif PixelFormat == 1: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT3 print("Pixel Format > DXT3 ",PixelFormat) elif PixelFormat == 2: data = rapi.swapEndianArray(data, 2) texFmt = noesis.NOESISTEX_DXT5 print("Pixel Format > DXT5 ",PixelFormat) elif PixelFormat == 19: data = rapi.swapEndianArray(data, 2) data = rapi.imageDecodeRaw(data, TextureWidth, TextureHeight, "r8g8b8a8") texFmt = noesis.NOESISTEX_RGBA32 print("Pixel Format > RGBA ",PixelFormat) elif PixelFormat == 20: data = rapi.swapEndianArray(data, 2) data = rapi.imageDecodeRaw(data, TextureWidth, TextureHeight, "r8g8b8a8") texFmt = noesis.NOESISTEX_RGBA32 print("Pixel Format > RGBA ",PixelFormat) texList.append(NoeTexture(BaseName, TextureWidth, TextureHeight, data, texFmt)) return 1 Tried this out, It seems I can't preview the .ntx files from Noesis and it asks me to export right away. I must've made a misstep in the middle of the process 😕
DKDave Posted 5 hours ago Posted 5 hours ago 2 hours ago, MightyMable said: Tried this out, It seems I can't preview the .ntx files from Noesis and it asks me to export right away. I must've made a misstep in the middle of the process 😕 Have you put the Noesis script in the Noesis plugins/python folder? It won't work otherwise.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now