예제 #1
0
def load_single_model(data, mdlList):
    '''Loads a single model. For testing purposes'''

    if rapi.checkFileExt(rapi.getInputName(), ".mbn"):
        bs = NoeBitStream(data)
        idstring = bs.readUInt()
        numFiles = bs.readUInt()
        bs.read('2L')
        filesizes = []
        for i in range(numFiles):
            unk, size, crc, null = bs.read('4L')
            filesizes.append(size)

        for i in range(numFiles):
            size = filesizes[i]
            mdl = bs.readBytes(size)
            parser = mdl_parser(mdl)
            parser.parse_file()
            mdl = rapi.rpgConstructModel()
            mdl.setModelMaterials(
                NoeModelMaterials(parser.texList, parser.matList))
            mdlList.append(mdl)

    elif rapi.checkFileExt(rapi.getInputName(), ".mdl"):
        parser = mdl_parser(data)
        parser.parse_file()
        mdl = rapi.rpgConstructModel()
        mdl.setModelMaterials(NoeModelMaterials(parser.texList,
                                                parser.matList))
        mdlList.append(mdl)
def load_single_model(data, mdlList):
    '''Loads a single model. For testing purposes'''
    
    if rapi.checkFileExt(rapi.getInputName(), ".mbn"):
        bs = NoeBitStream(data)
        idstring = bs.readUInt()
        numFiles = bs.readUInt()
        bs.read('2L')
        filesizes = []
        for i in range(numFiles):
            unk, size, crc, null = bs.read('4L')
            filesizes.append(size)
            
        for i in range(numFiles):
            size = filesizes[i]
            mdl = bs.readBytes(size)
            parser = mdl_parser(mdl)
            parser.parse_file()
            mdl = rapi.rpgConstructModel()
            mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
            mdlList.append(mdl)            
        
    elif rapi.checkFileExt(rapi.getInputName(), ".mdl"):
        parser = mdl_parser(data)
        parser.parse_file()
        mdl = rapi.rpgConstructModel()
        mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
        mdlList.append(mdl)
예제 #3
0
def get_directory_path():

    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    if not dirPath:
        dirPath = os.path.dirname(os.path.abspath(
            rapi.getInputName())) + os.sep
    return dirPath
예제 #4
0
    def parse_textures(self):

        basename = rapi.getExtensionlessName(self.filename)
        basepath = rapi.getDirForFilePath(rapi.getInputName())

        Tex_Basename = basename.replace('Mesh', 'Tex')

        diffTex = basepath + Tex_Basename + "_diff.dds"
        normTex = basepath + Tex_Basename + "_norm.dds"
        specTex = basepath + Tex_Basename + "_spec.dds"

        if rapi.checkFileExists(diffTex):
            material = NoeMaterial(basename + "_diffuse", diffTex)
            material.setFlags(noesis.NMATFLAG_TWOSIDED)
            self.TextureFiles.append('Diffuse: ' + diffTex)
            if (rapi.checkFileExists(normTex)):
                material.setNormalTexture(normTex)
                self.TextureFiles.append('Normal: ' + normTex)
            if (rapi.checkFileExists(specTex)):
                material.setSpecularTexture(specTex)
                self.TextureFiles.append('Specular: ' + specTex)
            self.matList.append(material)

        # Read Textures Block
        if self.TextureFilesCnt > 0:
            for i in range(self.TextureFilesCnt):
                TexFile = self.inFile.readString()
                TexFilePath = rapi.getDirForFilePath(
                    rapi.getInputName()) + "/" + TexFile
                if (rapi.checkFileExists(TexFilePath)):
                    self.TextureFiles.append(TexFile)
                    material = NoeMaterial('mat' + str(i), str(TexFile))
                    material.setFlags(noesis.NMATFLAG_TWOSIDED)
                    self.matList.append(material)
예제 #5
0
 def findMODL(self):
     fName = rapi.getInputName().split('\\')[-1]
     dirPath = rapi.getDirForFilePath(rapi.getInputName())
     f = open(dirPath + "/" + fName, 'rb')
     file = f.read()
     f.close()
     offset = file.find(b"MODL")
     self.data.seek(offset)
 def findMODL(self):
     fName=rapi.getInputName().split('\\')[-1]
     dirPath = rapi.getDirForFilePath(rapi.getInputName())
     f = open(dirPath + "/" + fName,'rb')
     file = f.read()
     f.close()
     offset = file.find(b"MODL")
     self.data.seek(offset)
def noepyCheckType(data):
    fName=rapi.getInputName().split('\\')[-1]
    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    bs = open(dirPath + "/" + fName)
    idstring = line = bs.readline()
    idstring =''.join(idstring.split('\x00'))
    bs.close()
    if not "version" in idstring.lower() : return 0
    return 1
    def __init__(self, data):

        self.inFile = NoeBitStream(data)
        self.animList = []
        self.texList = []
        self.matList = []
        self.boneList = []
        self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
        self.basename = rapi.getExtensionlessName(rapi.getInputName())
    def __init__(self, data):

        self.inFile = NoeBitStream(data)
        self.animList = []
        self.texList = []
        self.matList = []
        self.boneList = []
        self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
        self.basename = rapi.getExtensionlessName(rapi.getInputName())
def noepyLoadModel(data, mdlList):
    
    ctx = rapi.rpgCreateContext()
    global dirPath
    global fileName
    dirPath     = rapi.getDirForFilePath(rapi.getInputName())
    fileName    = rapi.getLocalFileName(rapi.getInputName()) 
    file = GOBJ(data)
    mdlList.append(file.mdl)
    rapi.rpgClearBufferBinds()
    return 1
예제 #11
0
def noepyLoadModel(data, mdlList):

    ctx = rapi.rpgCreateContext()
    global dirPath
    global fileName
    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    fileName = rapi.getLocalFileName(rapi.getInputName())
    file = GOBJ(data)
    mdlList.append(file.mdl)
    rapi.rpgClearBufferBinds()
    return 1
 def __init__(self):
     self.filename       = rapi.getInputName().split('\\')[-1]
     self.dirPath        = rapi.getDirForFilePath(rapi.getInputName())
     self.matList        = []
     self.texList        = []
     self.bones          = []
     self.anims          = []
     self.GetMaterials()
     self.LoadModel()
     try:self.LoadArmature()
     except:print('Armature failed to init');pass
 def __init__(self, data):    
     '''Initialize some data. Refer to Sanae.py to see what is already
     initialized'''
     
     self.inFile = NoeBitStream(data)
     self.meshes = []
     self.boneID = 0
     self.animList = []
     self.texList = []
     self.matList = []
     self.boneList = []
     self.abspath = rapi.getInputName()
     self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
예제 #14
0
 def GetMaterial(self):
     fName=rapi.getInputName().split('\\')[-1][:-5]
     self.name = fName
     dirPath = rapi.getDirForFilePath(rapi.getInputName())
     self.path = dirPath
     try:
         matFile = open(dirPath+"/"+fName+".material","r")
         while True:
             line = matFile.readline()
             #print(line)
             if "texture " in line: line=line.split(' ')[-1][:-5];print(line);return line
     except:print("[*] Material not found.", );return 0
     print(fName)
예제 #15
0
    def __init__(self, data):
        '''Initialize some data. Refer to Sanae.py to see what is already
        initialized'''

        self.inFile = NoeBitStream(data)
        self.meshes = []
        self.boneID = 0
        self.animList = []
        self.texList = []
        self.matList = []
        self.boneList = []
        self.abspath = rapi.getInputName()
        self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
 def parse_textures(self, filename):
     
     try:
         dirpath = rapi.getDirForFilePath(rapi.getInputName())
         f = open(dirpath + filename + ".tex", 'rb')
         data = f.read()
         bs = NoeBitStream(data)
         
         header = bs.readBytes(4)
         size, numTex, null = bs.read('3L')
         for i in range(numTex):
             texSize = bs.readUInt()
             texFmt = noeStrFromBytes(bs.readBytes(4))
             if texFmt == "tex":
                 texFmt = "dds"
             bs.read('2L')
             texName = noeStrFromBytes(bs.readBytes(32))
             texData = bs.readBytes(texSize)
             
             tex = rapi.loadTexByHandler(texData, "." + texFmt)
             if tex is not None:
                 tex.name = texName
                 self.texList.append(tex)
     except:
         pass
예제 #17
0
    def parse_textures(self, filename):

        try:
            dirpath = rapi.getDirForFilePath(rapi.getInputName())
            f = open(dirpath + filename + ".tex", 'rb')
            data = f.read()
            bs = NoeBitStream(data)

            header = bs.readBytes(4)
            size, numTex, null = bs.read('3L')
            for i in range(numTex):
                texSize = bs.readUInt()
                texFmt = noeStrFromBytes(bs.readBytes(4))
                if texFmt == "tex":
                    texFmt = "dds"
                bs.read('2L')
                texName = noeStrFromBytes(bs.readBytes(32))
                texData = bs.readBytes(texSize)

                tex = rapi.loadTexByHandler(texData, "." + texFmt)
                if tex is not None:
                    tex.name = texName
                    self.texList.append(tex)
        except:
            pass
def noepyLoadModel(data, mdlList):
    '''Build the model, set materials, bones, and animations. You do not
    need all of them as long as they are empty lists (they are by default)'''
    
    ctx = rapi.rpgCreateContext()
    filename = rapi.getLocalFileName(rapi.getInputName())
    fileID = ''.join(c for c in filename if c.isdigit())    
    bs = NoeBitStream(data)
    idstring = bs.readUInt()
    idstring2 = bs.readUInt()
    
    if idstring == 1213416781: #MESH
        if idstring2 == 1:
            parser = StaticParser1(data)
        elif idstring2 == 2:
            parser = StaticParser2(data)
    else:
        parser = SanaeParser(data)
    print(idstring)
    parser.parse_file()
    mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
    mdl.setBones(parser.boneList)
    mdl.setAnims(parser.animList)
    mdlList.append(mdl)
    return 1
def load_all_models(mdlList):
    '''Load all models'''

    #carry over from previous models
    matList = []
    texList = []
    
    ##load face
    #facePath = "E:\\My Documents\\Workspace\\sample\\Age of Wushu\\g_face.xmod"
    #f = open(facePath, 'rb')
    #data2 = f.read()
    #parser = AgeOfWushu_XMOD(data2)
    #parser.parse_file()
    #material = NoeMaterial("g_face", "E:\\My Documents\\Workspace\\sample\\Age of Wushu\\g_face_1.dds")
    #matList.append(material)
    
    #load the outfit
    
    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    fileList = [file for file in os.listdir(dirPath) if file.lower().endswith(".xmod")]    
    for file in fileList:
        f = open(dirPath + file, 'rb')
        data2 = f.read()
        parser = AgeOfWushu_XMOD(data2)
        parser.parse_file()
        matList.extend(parser.matList)
        texList.extend(parser.texList)
        mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(texList, matList))
    mdlList.append(mdl)    
예제 #20
0
 def parse_materials(self, filename):
     
     dirpath = rapi.getDirForFilePath(rapi.getInputName())
     for i in range(self.numMat):
         name = self.read_name(128)
         matName = self.read_name(128)
         if not matName:
             matName = "material[%d]" %i
         self.inFile.seek(44, 1)
         numTex = self.inFile.readUInt()
         for i in range(numTex):
             if i == 1:
                 self.inFile.read('2L')
                 texName = self.read_name(256)
                 texName = os.path.basename(texName)
             elif i == 2:
                 self.inFile.read('2L')
                 self.read_name(256)
                 os.path.basename(texName)
             else:
                 self.inFile.read('2L')
                 self.read_name(256)
             
         self.matNames.append(matName)
         self.texNames.append(dirpath + "tex\\" + texName)
    def parse_material(self):
        
        dirpath = rapi.getDirForFilePath(rapi.getInputName())
        
        matName = self.read_name()
        self.inFile.readByte() #?
        self.inFile.read('17f')
                
        hasDiff = self.inFile.readUInt()
        if hasDiff:
            texPath = self.read_name()

        hasSpec = self.inFile.readUInt()
        if hasSpec:
            specPath = self.read_name()
        
        hasNorm = self.inFile.readUInt()
        if hasNorm:
            normPath = self.read_name()
        self.inFile.seek(7, 1)
        blend = self.read_name()
        
        texName = os.path.basename(texPath)
        tempPath = dirpath + "texture\\" + texName 
        material = NoeMaterial(matName, tempPath)
        material.setDefaultBlend(0)
        self.matList.append(material)
        return matName
예제 #22
0
def load_all_models(mdlList):
    '''Load all models'''

    #carry over from previous models
    matList = []
    texList = []

    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    fileList = [
        file for file in os.listdir(dirPath) if file.lower().endswith(".msh")
    ]
    for file in fileList:
        f = open(dirPath + file, 'rb')
        data2 = f.read()
        modelType = get_type(data2)
        if modelType == 0:
            parser = SanaeParser(data2)
        else:
            parser = RFParser(data2)
        parser.parse_file()
        matList.extend(parser.matList)
        texList.extend(parser.texList)
        mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(texList, matList))
    mdlList.append(mdl)
def load_all_models(mdlList):
    '''Load all models'''

    #carry over from previous models
    matList = []
    texList = []
    
    ##load face
    #facePath = "E:\\My Documents\\Workspace\\sample\\Age of Wushu\\g_face.xmod"
    #f = open(facePath, 'rb')
    #data2 = f.read()
    #parser = AgeOfWushu_XMOD(data2)
    #parser.parse_file()
    #material = NoeMaterial("g_face", "E:\\My Documents\\Workspace\\sample\\Age of Wushu\\g_face_1.dds")
    #matList.append(material)
    
    #load the outfit
    
    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    fileList = [file for file in os.listdir(dirPath) if file.lower().endswith(".xmod")]    
    for file in fileList:
        f = open(dirPath + file, 'rb')
        data2 = f.read()
        parser = AgeOfWushu_XMOD(data2)
        parser.parse_file()
        matList.extend(parser.matList)
        texList.extend(parser.texList)
        mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(texList, matList))
    mdlList.append(mdl)    
예제 #24
0
def load_all_models(mdlList):
    '''Load all models in the selected model's directory'''

    #carry over from previous models
    matList = []
    texList = []
    boneList = []

    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    fileList = [
        file for file in os.listdir(dirPath) if file.lower().endswith(".xac")
    ]
    for filename in fileList:
        f = open(dirPath + filename, 'rb')
        data2 = f.read()
        parser = SanaeParser(data2)
        parser.parse_file(filename)
        matList.extend(parser.matList)
        texList.extend(parser.texList)
        boneList.extend(parser.boneList)
        mdl = rapi.rpgConstructModel()

    mdl.setModelMaterials(NoeModelMaterials(texList, matList))
    mdl.setBones(boneList)
    mdlList.append(mdl)
예제 #25
0
    def parse_material(self):

        dirpath = rapi.getDirForFilePath(rapi.getInputName())

        matName = self.read_name()
        self.inFile.readByte()  #?
        self.inFile.read('17f')

        hasDiff = self.inFile.readUInt()
        if hasDiff:
            texPath = self.read_name()

        hasSpec = self.inFile.readUInt()
        if hasSpec:
            specPath = self.read_name()

        hasNorm = self.inFile.readUInt()
        if hasNorm:
            normPath = self.read_name()
        self.inFile.seek(7, 1)
        blend = self.read_name()

        texName = os.path.basename(texPath)
        tempPath = dirpath + "texture\\" + texName
        material = NoeMaterial(matName, tempPath)
        material.setDefaultBlend(0)
        self.matList.append(material)
        return matName
    def parse_file(self):

        idstring = self.inFile.read('5s')
        headerSize = self.inFile.readUInt()
        flags = self.inFile.read('4B')
        height, width, pitch, depth, mips = self.inFile.read('5L')

        #lazy
        self.inFile.seek(85)
        fmt = noeStrFromBytes(self.inFile.readBytes(4))
        if fmt == "2z73":
            texFmt = noesis.NOESISTEX_DXT1
        elif fmt == "7x0s":
            texFmt = noesis.NOESISTEX_DXT3
        else:
            print("unknown pixel format")

        #lazy again
        self.inFile.seek(129)
        dataSize = self.inFile.dataSize - self.inFile.tell()
        pixelData = self.inFile.readBytes(dataSize)

        name = rapi.getLocalFileName(rapi.getInputName()).split('.')[0]
        tex = NoeTexture(name, width, height, pixelData, texFmt)
        self.texList.append(tex)
    def parse_materials(self, filename):

        dirpath = rapi.getDirForFilePath(rapi.getInputName())
        for i in range(self.numMat):
            name = self.read_name(128)
            matName = self.read_name(128)
            if not matName:
                matName = "material[%d]" % i
            self.inFile.seek(44, 1)
            numTex = self.inFile.readUInt()
            for i in range(numTex):
                if i == 1:
                    self.inFile.read("2L")
                    texName = self.read_name(256)
                    texName = os.path.basename(texName)
                elif i == 2:
                    self.inFile.read("2L")
                    self.read_name(256)
                    os.path.basename(texName)
                else:
                    self.inFile.read("2L")
                    self.read_name(256)

            self.matNames.append(matName)
            self.texNames.append(dirpath + "tex\\" + texName)
    def parse_material(self):
        '''Assume texName is the same as the input name'''

        matName = rapi.getLocalFileName(rapi.getInputName()).split('.')[0]
        texName = matName + ".wys"
        material = NoeMaterial(matName, texName)
        material.setDefaultBlend(0)
        self.matList.append(material)
예제 #29
0
def LoadTexture(texName, file):
    
    if MODPATH != None:
        name = MODPATH +'\\'+ texName
    else:
        name = rapi.getDirForFilePath(rapi.getInputName()) + texName.split('\\')[-1]
        print(rapi.getDirForFilePath(rapi.getInputName()))
    if not rapi.checkFileExists(name):
        print("Texture not found: %s" %name)
        
    else:
        
        tex = open(name,'rb').read()
        noepyLoadRGBA(tex,file.texList)
        file.texList[-1].name = name
        
        return file.texList[-1]
예제 #30
0
 def __init__(self, data):    
     self.inFile = NoeBitStream(data)
     self.animList = []
     self.texList = []
     self.matList = []
     self.boneList = []
     self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
     self.texpath = self.dirpath + "texture\\"
예제 #31
0
    def CreateGeo(self):
        print(len(self.idxs))
        x = 0
        y = len(self.geos)  #8
        n = []  #[5,6,7]
        GEO_C = 0
        self.matList = []
        self.texList = []
        dirPath = rapi.getDirForFilePath(rapi.getInputName())
        for mat in self.mats:
            self.matList.append(mat.material)
            mat = mat.material
            diffuse = mat.texName
            normal = mat.nrmTexName
            specular = mat.specTexName
            for t in [diffuse, normal, specular]:
                try:
                    tex = open(dirPath + '/' + t, 'rb').read()
                    tex = rapi.loadTexByHandler(tex, '.dds')
                    tex.name = t
                    self.texList.append(tex)
                except:
                    raise

        for i in range(x, x + y):
            #for i in range(len(self.idxs)):
            idx = self.idxs[i]
            geo = self.geos[i]
            prop = geo.props
            print("%d: " % i, idx.name, " | ", geo.name)
            print(idx.numTri, idx.numIdx, geo.numVert)
            if not i in n:

                #material = self.matList[MaterialLink[idx.name]]
                rapi.rpgSetMaterial(MaterialLink[idx.name])
                rapi.rpgBindPositionBufferOfs(geo.vertBuffer,
                                              noesis.RPGEODATA_FLOAT,
                                              geo.vertLength, prop['position'])
                rapi.rpgBindUV1BufferOfs(geo.uvBuffer, noesis.RPGEODATA_FLOAT,
                                         geo.uvLength, prop['tex0'])
                rapi.rpgBindNormalBufferOfs(geo.vertBuffer,
                                            noesis.RPGEODATA_FLOAT,
                                            geo.vertLength, prop['normal'])
                rapi.rpgBindTangentBufferOfs(geo.vertBuffer,
                                             noesis.RPGEODATA_FLOAT,
                                             geo.vertLength, prop['tangent'])
                rapi.rpgCommitTriangles(idx.idxBuffer, noesis.RPGEODATA_USHORT,
                                        idx.numIdx, noesis.RPGEO_TRIANGLE, 1)
                #rapi.rpgCommitTriangles         (idx.idxBuffer,    noesis.RPGEODATA_USHORT, idx.numTri,     noesis.RPGEO_TRIANGLE, 1)
            if GEO_C == 1:
                bs = NoeBitStream()
                fileG = open("geo-%d.p3ddump" % i, 'wb')
                bs.writeUInt(geo.numVert)
                bs.writeBytes(geo.vertBuffer)
                bs.writeUInt(idx.numTri)
                bs.writeBytes(idx.idxBuffer)
                fileG.write(bs.getBuffer())
                fileG.close()
def get_type(data):
    
    filename = rapi.getLocalFileName(rapi.getInputName())
    if rapi.checkFileExt(filename, '.3DO'):
        return Shaiya3DO(data)
    elif rapi.checkFileExt(filename, '.3DC'):
        return Shaiya3DC(data)
    elif rapi.checkFileExt(filename, '.SMOD'):
        return ShaiyaSMOD(data)
예제 #33
0
def LoadTexture(texName):
    if ARTPATH == None:
        name = rapi.getDirForFilePath(rapi.getInputName())+texName
    else:
        name = texName.split('\\')[-1]
    tex = open(name,'rb').read()
    tex = rapi.loadTexByHandler(tex,'.dds')
    tex.name = texName
    return tex
def load_single_model(data, mdlList):
    '''Loads a single model. For testing purposes'''
    
    filename, ext = os.path.splitext(rapi.getLocalFileName(rapi.getInputName()))
    parser = SanaeParser(data)
    parser.parse_file(filename)
    mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
    mdlList.append(mdl)       
예제 #35
0
def load_single_model(data, mdlList):
    '''Loads a single model. For testing purposes'''
    
    filename = rapi.getExtensionlessName(rapi.getInputName())
    parser = SanaeParser(data, filename)
    parser.parse_file()
    mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
    mdlList.append(mdl)       
예제 #36
0
 def __init__(self, data):    
     self.inFile = NoeBitStream(data)
     self.animList = []
     self.texList = []
     self.matList = []
     self.boneList = []
     self.meshes = []
     self.materials = []
     self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
def noepyCheckType(data):
    '''Verify that the format is supported by this plugin. Default yes'''
    
    filename = rapi.getLocalFileName(rapi.getInputName())
    if not ( rapi.checkFileExt(filename, '.3DO') or \
       rapi.checkFileExt(filename, '.3DC') or \
       rapi.checkFileExt(filename, '.SMOD')):
        return 0
    return 1
예제 #38
0
def load_single_model(data, mdlList):
    '''Loads a single model. For testing purposes'''
    
    filename, ext = os.path.splitext(rapi.getLocalFileName(rapi.getInputName()))
    parser = SanaeParser(data)
    parser.parse_file(filename)
    mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
    mdlList.append(mdl)       
예제 #39
0
def noepyLoadModel(data, mdlList):

    ctx = rapi.rpgCreateContext()
    filename = rapi.getLocalFileName(rapi.getInputName())
    parser = SanaeParser(data, filename)
    parser.parse_file()
    mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
    mdlList.append(mdl)
    return 1
 def __init__(self, data):    
     '''Initialize some data. Refer to Sanae.py to see what is already
     initialized'''
     
     self.inFile = NoeBitStream(data)
     self.animList = []
     self.texList = []
     self.matList = []
     self.boneList = []
     self.basename = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName()))
예제 #41
0
 def parse_xmtl(self):
 
     dirPath = rapi.getDirForFilePath(rapi.getInputName())
     xmatLib = self.filename + ".xmtl"
     f = open(dirPath + xmatLib, 'rb')
     parser = XmtlParser(f.read())
     parser.parse_file(self.filename)
     for i in range(parser.numMat):
         matName, texName = parser.matNames[i], parser.texNames[i]
         material = NoeMaterial(matName, texName)
         self.matList.append(material)            
def noepyCheckType(data):
    '''Verify that the format is supported by this plugin. Default yes'''
    
    # file ID is the numeric part of the filename
    filename = rapi.getLocalFileName(rapi.getInputName())
    fileID = ''.join(c for c in filename if c.isdigit())
    bs = NoeBitStream(data)
    idstring = bs.readUInt()
    if idstring == int(fileID) or idstring == 1213416781: #MESH
        return 1
    return 0
    def parse_xmtl(self):

        dirPath = rapi.getDirForFilePath(rapi.getInputName())
        xmatLib = self.filename + ".xmtl"
        f = open(dirPath + xmatLib, "rb")
        parser = XmtlParser(f.read())
        parser.parse_file(self.filename)
        for i in range(parser.numMat):
            matName, texName = parser.matNames[i], parser.texNames[i]
            material = NoeMaterial(matName, texName)
            self.matList.append(material)
예제 #44
0
    def parseMaterials(self):
        dirPath = rapi.getDirForFilePath(rapi.getInputName())
        self.data.seek(28)
        self.numMat = self.data.readUInt()
        matOffset = self.data.readUInt()
        self.data.seek(matOffset - 4, 1)
        materialArray = ANetModelMaterialArray(self.data)
        self.data.seek(materialArray.materialOffset - 4, 1)
        current = self.data.tell()
        offsetTable = self.data.read("%di" % materialArray.materialCount)
        diffuse = [0x67531924]
        normal = [2332802439, 2774157488]
        lightmap = [
            1745599879,
        ]
        for i in range(materialArray.materialCount):
            self.data.seek(current + offsetTable[i] + i * 4)
            matInfo = ANetModelMaterialInfo(self.data)
            self.data.seek(matInfo.texturepos + matInfo.textureOffset)
            material = NoeMaterial(str(i), '')
            #material.setBlendMode("GL_SRC_COLOR","GL_ONE")

            texInfos = []
            for t in range(matInfo.textureCount):
                texInfos.append(ANetModelTextureReference(self.data))

            for texInfo in texInfos:
                self.data.seek(texInfo.referencepos +
                               texInfo.offsetToFileReference)
                texInDAT = self.data.read('3H')
                if texInfo.hash in diffuse or texInfo.hash in normal or texInfo.hash in lightmap:
                    texture = 0xFF00 * (texInDAT[1] - 0x100) + (texInDAT[0] -
                                                                0x100) + 1
                    if texInfo.hash in diffuse:
                        material.setTexture(str(texture))
                    elif texInfo.hash in normal:
                        material.setNormalTexture(str(texture))
                    elif texInfo.hash in lightmap:
                        self.lightMapList[i] = NoeMaterial(str(i), "")
                        self.lightMapList[i].setTexture(str(texture))
                        self.lightMapList[i].setBlendMode("GL_ONE", "GL_ONE")
                    try:
                        path = glob.glob(dirPath + str(texture) + '*.atex')[0]
                        tex = open(path, 'rb').read()
                        tex = rapi.loadTexByHandler(tex, '.atex')
                        tex.name = str(texture) + '.atex'
                        self.texList.append(tex)
                    except:
                        print("Can't load", texture)
                else:
                    texture = 0xFF00 * (texInDAT[1] - 0x100) + (texInDAT[0] -
                                                                0x100) + 1
                    #print(texture, texInfo.hash)
            self.matList.append(material)
    def parse_materials(self):

        dirPath = rapi.getDirForFilePath(rapi.getInputName())
        matLib = self.filename + ".mtl"
        f = open(dirPath + matLib, "rb")
        mat = MaterialParser(f.read())
        mat.parse_file(self.filename)
        for i in range(mat.numMat):
            matName, texName = mat.matNames[i], mat.texNames[i]
            material = NoeMaterial(matName, texName)
            self.matList.append(material)
 def __init__(self, data):    
     '''Initialize some data. Refer to Sanae.py to see what is already
     initialized'''
     
     self.inFile = NoeBitStream(data, _ENDIAN)
     self.animList = []
     self.texList = []
     self.matList = []
     self.boneList = []
     self.meshList = []
     self.filename = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName()))
예제 #47
0
 def parse_materials(self):
     
     dirPath = rapi.getDirForFilePath(rapi.getInputName())
     matLib = self.filename + ".mtl"
     f = open(dirPath + matLib, 'rb')
     mat = MaterialParser(f.read())
     mat.parse_file(self.filename)
     for i in range(mat.numMat):
         matName, texName = mat.matNames[i], mat.texNames[i]
         material = NoeMaterial(matName, texName)
         self.matList.append(material)            
 def open_file(self, texName):
     
     dirpath = rapi.getDirForFilePath(rapi.getInputName())
     
     try:
         f = open(texName, 'rb')
         return f
     except:
         try:
             f = open(dirpath + "textures\\" + texName, 'rb')
             return f
         except:
             print("failed to open texture: %s" %texName)
def load_all_models(mdlList):
    '''Load all models'''

    #carry over from previous models
    matList = []
    texList = []
    
    filename = rapi.getLocalFileName(rapi.getInputName())
    baseName = filename[:8]
    dirPath = rapi.getDirForFilePath(rapi.getInputName())
    fileList = [file for file in os.listdir(dirPath) if file.lower().endswith(".mdl")
                and baseName in file]
    for file in fileList:
        f = open(dirPath + file, 'rb')
        data2 = f.read()
        parser = SanaeParser(data2)
        parser.parse_file()
        matList.extend(parser.matList)
        texList.extend(parser.texList)
        mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(texList, matList))
    mdlList.append(mdl)    
    def CreateGeo(self):
        print(len(self.idxs))
        x=0
        y=len(self.geos)#8
        n = []#[5,6,7]
        GEO_C = 0
        self.matList    = []
        self.texList    = []
        dirPath         = rapi.getDirForFilePath(rapi.getInputName())
        for mat in self.mats:
            self.matList.append(mat.material)
            mat         = mat.material
            diffuse     = mat.texName
            normal      = mat.nrmTexName
            specular    = mat.specTexName
            for t in [diffuse,normal,specular]:
                try:
                    tex         = open(dirPath + '/' +t,'rb').read()
                    tex         = rapi.loadTexByHandler(tex,'.dds')
                    tex.name    = t
                    self.texList.append(tex)
                except:
                    raise
        
        for i in range(x,x+y):
        #for i in range(len(self.idxs)):
            idx  = self.idxs[i]
            geo  = self.geos[i]
            prop = geo.props
            print("%d: "%i,idx.name," | ",geo.name)
            print(idx.numTri,idx.numIdx,geo.numVert)
            if not i in n:

                #material = self.matList[MaterialLink[idx.name]]
                rapi.rpgSetMaterial(MaterialLink[idx.name])
                rapi.rpgBindPositionBufferOfs   (geo.vertBuffer,   noesis.RPGEODATA_FLOAT,  geo.vertLength, prop['position'])
                rapi.rpgBindUV1BufferOfs        (geo.uvBuffer,     noesis.RPGEODATA_FLOAT,  geo.uvLength,   prop['tex0'])
                rapi.rpgBindNormalBufferOfs     (geo.vertBuffer,   noesis.RPGEODATA_FLOAT,  geo.vertLength, prop['normal'])
                rapi.rpgBindTangentBufferOfs    (geo.vertBuffer,   noesis.RPGEODATA_FLOAT,  geo.vertLength, prop['tangent'])
                rapi.rpgCommitTriangles         (idx.idxBuffer,    noesis.RPGEODATA_USHORT, idx.numIdx,     noesis.RPGEO_TRIANGLE, 1)
                #rapi.rpgCommitTriangles         (idx.idxBuffer,    noesis.RPGEODATA_USHORT, idx.numTri,     noesis.RPGEO_TRIANGLE, 1)
            if GEO_C == 1:
                bs = NoeBitStream()
                fileG = open("geo-%d.p3ddump"%i,'wb')
                bs.writeUInt(geo.numVert)
                bs.writeBytes(geo.vertBuffer)
                bs.writeUInt(idx.numTri)
                bs.writeBytes(idx.idxBuffer)
                fileG.write(bs.getBuffer())
                fileG.close()
def noepyLoadModel(data, mdlList):
    '''Build the model, set materials, bones, and animations. You do not
    need all of them as long as they are empty lists (they are by default)'''
    
    inputName = rapi.getLocalFileName(rapi.getInputName())
    filename, ext = os.path.splitext(inputName)    
    ctx = rapi.rpgCreateContext()
    parser = SanaeParser(data, filename)
    parser.parse_file()
    mdl = rapi.rpgConstructModel()
    mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList))
    mdl.setBones(parser.boneList)
    mdl.setAnims(parser.animList)
    mdlList.append(mdl)
    return 1
 def parse_material(self, matLib):
     
     dirpath = rapi.getDirForFilePath(rapi.getInputName())
     matLib = os.path.basename(matLib)
     matPath = dirpath + matLib
     
     try:
         f = open(matPath, 'rb')
         data = f.read()
         matLib = MatLibrary(data)
         material = matLib.parse_file()
         self.matList.append(material)
         return material.name
     except:
         print("Couldn't find file: ", matLib)
         return ""