Important Announcement
Forum has been made read-only. Please click here for more information or here to return to The Spriters Resource.

Eccy's 3D Model Galleria -- Stargate Resistance | Power Rangers: Dash!!!
#98
(01-28-2016, 02:48 PM)sutinoer Wrote: You know how to riping from Resident Evil 6?

MATE, if it's Resi Evil, I know... OH I KNOW. Sorry, I love my Resi Evil. Would love an Orgi with Ada Wong, Claire Redfield, Jill Valentine and Rebecca Chambers a lot more, but aye.

First thing, you want to extract the .arc files. Locate the .mod model file and change the extension from .mod to .re6pc. Copy the attached plugin into the Noesis plugin folder. Open up Noesis and navigate to the model double click... VOILA. PS: You're gonna need arctool for the textures, as Noesis doesn't work with the textures.

[spoiler]
#*************************************
#Author : Chrrox, Co-Author : Codeman02
#*************************************

#Noesis Python model import+export test module, imports/exports some data from/to a made-up format

from inc_noesis import *

import noesis

#rapi methods should only be used during handler callbacks
import rapi

#registerNoesisTypes is called by Noesis to allow the script to register formats.
#Do not implement this function in script files unless you want them to be dedicated format modules!
def registerNoesisTypes():
    handle = noesis.register("Resident Evil 6", ".re6pc")
    noesis.setHandlerTypeCheck(handle, re6CheckType)
    noesis.setHandlerLoadModel(handle, re6LoadModel) #see also noepyLoadModelRPG
    #noesis.setHandlerWriteModel(handle, noepyWriteModel)
    #noesis.setHandlerWriteAnim(handle, noepyWriteAnim)
    noesis.logPopup()
    return 1

#check if it's this type based on the data

def re6CheckType(data):
    bs = NoeBitStream(data)
    idMagic = bs.readInt()
    if idMagic != 0x00444F4Very Sad
        return 0
    return 1       

#load the model
def re6LoadModel(data, mdlList):
    ctx = rapi.rpgCreateContext()
    #rapi.rpgSetOption(noesis.RPGOPT_BIGENDIAN, 1)
    bs = NoeBitStream(data)
    #bs.setEndian(NOE_BIGENDIAN)

    idMagic = bs.readInt()
    
    header_version = bs.readUShort()            #    mod file version
    header_bonecount  = bs.readUShort()          #     word Bones[1 to bonecount]
    header_grpcount = bs.readUShort()            #     word Groups[1 to grpcount]
    header_Matcount = bs.readUShort()            #     word Materials[1 to Matcount]
    
    
    
    header_vertexcount = bs.readInt()         #    total vertex in vertex buffer
    header_TriangleCount = bs.readInt()      #    total face count
    header_VertexIds = bs.readInt()          #    Integer Triangle[1 to TriangleCount]
    header_vertexbuffersize = bs.readInt()     #    vertex buffer data size in bytes to alloc on the fly when reading
        
    header_padding = bs.readInt()             #    always &H00000000 ???? no, sometime have a value :0/
    header_bonegroupsA = bs.readInt()          #    bone groups sections used for skeleton
    header_groupidtrc = bs.readInt()         #    ????
    header_ptrBoneOffset = bs.readInt()       #     zero if only one bone
    header_groupidtrOf = bs.readInt()          #     unused

    header_ptr_group = bs.readInt()          #      groups array info Offset
    header_ptr_vertex = bs.readInt()          #      vertex buffer pos in file
    header_ptr_triangle = bs.readInt()      #      triangle buffer pos in file(index buffer)
    modHeader2 = bs.readInt()                 #    end of file - 4 ????

    
    bs.seek(header_ptr_group, NOESEEK_ABS)#modHeader2[9]#== seekset
    
    
    
    
    meshInfo = []
    for i in range(0, header_grpcount):
        unk00 = bs.readUShort()
        vertCount = bs.readUShort()
        unk01 = bs.readUByte()
        unk02 = bs.readUByte()
        groupid = bs.readUByte() # groupid
        lodLevel = bs.readUByte()
        
        unk04 = bs.readUByte()
        vertFlag = bs.readUByte()
        vertStride = bs.readUByte()
        unk05 = bs.readUByte()
        
        vertStart = bs.readUInt()
        vertBase = bs.readUInt()
        fvfInfo = bs.readUInt()
        faceStart = bs.readUInt()
        faceCount = bs.readUInt()
        faceBase = bs.readUInt()#?
        unk07 = bs.readUShort()
        unk08 = bs.readUShort()
        vertStart2 = bs.readUShort()
        vertCount2 = bs.readUShort()
        unk09 = bs.readInt()#?
        #                    0            1            2        3        4            5        6        7         8            9
        meshInfo.append([vertCount,vertStride,vertStart,vertBase,faceStart,faceCount,faceBase,lodLevel,fvfInfo,groupid])
        #print(meshInfo[i])
    
    for i in range(0, header_grpcount):
        
        bs.seek(header_ptr_vertex + meshInfo[i][3], NOESEEK_ABS)#vert
        bs.seek(meshInfo[i][1] * meshInfo[i][2], NOESEEK_REL)#vert
        print(meshInfo[i][7])
        if  (meshInfo[i][1] >= 0x14) and ((meshInfo[i][7] == 0x1) or (meshInfo[i][7] == 0xFF)or (meshInfo[i][7] == 0x3))  :    
            bfound=1
            rapi.rpgSetName("LOD_" + str(hex(meshInfo[i][7])) + "_" + str(i) + "_" + str(meshInfo[i][1])+ "_" + str(hex(meshInfo[i][8])) + "_" + str(bs.tell())) #+ "_" + str((bs.tell()))
            vertBuff = bs.readBytes(meshInfo[i][0] * meshInfo[i][1])
            
            if meshInfo[i][8] == 0xB0983013:#12 == morph target objects: vertexpos + normal
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)        

            elif meshInfo[i][8] == 0xDB7DA014:#16
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 12)

            elif meshInfo[i][8] == 0xB6681034:#16
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)

                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)
            
            elif meshInfo[i][8] == 0x0CB68015:#20
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)                    

            elif meshInfo[i][8] == 0xA8FAB018:#20
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xA7D7D036:#20
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)            

            elif meshInfo[i][8] == 0xC31F201C:#24
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xCBF6C01A:#24
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x207D6037:#24
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xD1A47038:#24
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xD8297028:#24
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x2BE814D4:#28
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x7CD414D4:#28
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x14D40020:#28
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)    
                rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 20)

            elif meshInfo[i][8] == 0xA320C016:#28
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)                
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x49B4F029:#28
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x5E7F202C:#28
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xD877801B:#32
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)                
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xB86DE02A:#32
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x926FD02E:#32
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xA14E003C:#32
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xB392101F:#36
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0xBB424024:#36
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                #rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)                
                rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 24)

            elif meshInfo[i][8] == 0x63B6C02F:#36
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)

            elif meshInfo[i][8] == 0x64593023:#40
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1],20)  #or 32 for uv2

            elif meshInfo[i][8] == 0x2F55C03Very Sad#64
                rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, meshInfo[i][1], 16)
            else:
                bfound=0
                print("unkown FVF "+ str(hex(meshInfo[i][8])))
                rapi.rpgBindUV1Buffer(None, noesis.RPGEODATA_FLOAT, 0)
                #rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_SHORT, meshInfo[i][1], 0)
                
            if bfound == 1:
                print("face base : " + str(hex(meshInfo[i][6])))
                bs.seek(header_ptr_triangle + (2 * meshInfo[i][4])+(2 * meshInfo[i][6]), NOESEEK_ABS)#faceoff

                faceData = []
                for a in range(0, meshInfo[i][5]):
                    face = bs.readUShort() - meshInfo[i][2]
                    faceData.append(face)
                    
                faceBuff = struct.pack("<" + 'H'*len(faceData), *faceData)
                rapi.rpgCommitTriangles(faceBuff, noesis.RPGEODATA_USHORT, meshInfo[i][5], noesis.RPGEO_TRIANGLE, 1)
                
            
    mdl = rapi.rpgConstructModelSlim()
    mdlList.append(mdl)
    
    rapi.rpgClearBufferBinds()    
    return 1

[/spoiler]

Python Script:
.zip   fmt_residentevil6.zip (Size: 2.29 KB / Downloads: 389)

FORGOT TO MENTION: In the level that you play as Sherry Birkin and she's been captured with Weskers son, she's butt-ass nekkid under the robe... Good hunting Wink
Reply


Messages In This Thread
RE: Submission Thread - by Ecelon - 01-27-2015, 08:00 PM
RE: Submission Thread - by sutinoer - 01-28-2015, 03:39 AM
RE: Submission Thread - by Ecelon - 02-04-2015, 10:12 PM
UPDATE!!! - by Ecelon - 09-22-2015, 09:55 PM
RE: Eccy's 3D Model Galleria -- Now Includes Firefly Online &amp; Battlestar Galactica... - by Ecelon - 01-28-2016, 09:00 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)