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 May 29 Author Posted May 29 Can anybody help or knows something? 😅😓 Perhaps the ps3 version ripping know how? without having to use emulators 🤔 Bump
Engineers Solution h3x3r Posted May 29 Engineers Solution Posted May 29 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 May 30 Author Posted May 30 Oh gosh, this worked and I got the missing textures finally 😮 Thank you so much 🥺 Spoiler
Engineers h3x3r Posted May 30 Engineers Posted May 30 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 May 31 Author Posted May 31 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 May 31 Posted May 31 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.
MightyMable Posted June 1 Author Posted June 1 Yeah, I put it in the python directory inside the plugins folder. I replaced the original Noesis script that h3x3r created with the new one he posted. I'm really not sure what I did wrong but here's the file with the updated script:Tekken6.py also attached here the folder and files location Please let me know which part I messed up and sorry for the late reply on my end 😅
Engineers h3x3r Posted June 1 Engineers Posted June 1 (edited) Did you decompress BIN file first? I test it out and it works.... So steps are > decompress BIN file > unpack/dump decompressed BIN with bms > preview in Noesis Edited June 1 by h3x3r
MightyMable Posted June 1 Author Posted June 1 Yes, this is how I decompressed the BIN file (up to step 3 only) After that I'll launch Quickbms, select the modified bms you posted then select the Bin and picked the folder for the ntx And then yeah the Noesis part where it doesn't preview the files happens Perhaps it's because I used notepad to edit the .py script? 🤨 I oughta used an IDE instead
Engineers h3x3r Posted June 1 Engineers Posted June 1 (edited) Send some unpacked *.ntx files. Also does Noesis says something in log? Edited June 1 by h3x3r
MightyMable Posted June 2 Author Posted June 2 Here you go. I found no log within the Noesis folder tho.
Engineers h3x3r Posted June 2 Engineers Posted June 2 I mean GUI log. I have enabled logpopup function in all my scripts.
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