Jump to content

Tekken 6 xbox360 customization textures missing


Go to solution Solved by h3x3r,

Recommended Posts

Posted (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:

skirtssamplecolors.thumb.png.63e36d86f492032519e35739c0c8f9c4.png

And the missing ones are inside the rectangle(yellow, blue, light blue and orange):

TEKKEN6clr.thumb.png.dc99bae81a02bb9a7450cd2bf91d61d3.png

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

TEKKEN.thumb.png.59ca444518f55a53e9376e819901a061.png

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 by MightyMable
removed the spoilers for easier viewing
  • 2 weeks later...
  • Engineers
  • Solution
Posted

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

 

  • Like 1

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...