DEAD OR ALIVE 2 Modding tutorials and discussion

Matt Ponton

Founder
Staff member
Administrator
Standard Donor
Yeah, the only way in retro DOA2 to get true random stage select is to return to character select and select random.
 

grap3fruitman

Well-Known Member
Standard Donor
It's really interesting to see the DOA1-2 connection. Saturn ACTCODE values still relevant in 2 DC/PS2. (Why wouldn't they be? Still a neat find.)

Here we see Hayabusa doing 0x0005 which is listed as CMD_RUN in the Saturn sourcecode snippet.

GPSbpyi.png
 

BankaiPrimera

New Member
  1. Example:I want to remove this part of ein's jacket View attachment 31465
  2. Open XPR Texturer an open the xpr of that model you want to remove the texture
  3. After you opened it there's this list of OBJs, you can see the 3d model of that OBJ thanks to Greed XplorerView attachment 31466View attachment 31467
  4. Select the "MAT:XX Texture X:XX" section of that texture and then click "Remove material(Lumen)" to remove that texture et Voilà!View attachment 31468
  5. Back up the original XPR first if the texture removed wasn't the one that you wanted to remove
The rar File also Includes xprexpbuild and catexpbuild.

Thanks so much for all your work and the information!

Im trying to remove or replace a texture/model, on a specific skin. For example, I don't like the way the shoes look on Kasumi 79 costume (from the dataDVD.afs). After removing the specific textures, wouldn't it better to replace the model (of the feet) all together? How would I do that?
 

grap3fruitman

Well-Known Member
Standard Donor
Search for
Code:
02 1E E3 2C 62 33 32 00
and replace with
Code:
02 63 E3 2C 62 33 32 00
to increase the combo limit from 30 to 99.


I0KjDaF.gif
 

Gultigargar

Well-Known Member
The thing about adding characters is that a lot of things related to them are hardcoded into the default.xbe. So to be able to add new characters, we'd need to be able to add new sections to the .xbe without breaking anything else.

If that's what you've done in the video above, then it's definitely a lot closer to being possible. The way I currently work, I am only able to overwrite existing data, meaning that I could at best overwrite one character with another.
 

c0de0015

New Member
Need some help about removing some parts with XPR texture. After removing it is there any other steps I need to do? Cause after I tried removing it and renaming it when I import it to the game my character became invisible
 

CoYoTe

Active Member
Thanks so much for all your work and the information!

Im trying to remove or replace a texture/model, on a specific skin. For example, I don't like the way the shoes look on Kasumi 79 costume (from the dataDVD.afs). After removing the specific textures, wouldn't it better to replace the model (of the feet) all together? How would I do that?
Post in thread 'DEAD OR ALIVE 2 Modding tutorials and discussion' https://www.freestepdodge.com/threa...ing-tutorials-and-discussion.7039/post-419133 here's how to replace the items of the costume,it's a bit difficult but you can do it.
 
A release of DOA OL, shipped with debug symbols for the server of the previous release, server.pdb
You can get the most detailed dump, using cvdump.
I attached a dump made by pdbripper. It's a text file, with doao data, mostly network related, but also you can dig gems like this one:
SERIAL_KELLY=0,
SERIAL_TINA=1,
SERIAL_LOO=2,
SERIAL_KARATE=3,
SERIAL_KAMUI=4,
SERIAL_KASUMI=5,
SERIAL_FANFU=6,
SERIAL_HIKA=7,
SERIAL_GATSBY=8,
SERIAL_BARTH=9,
SERIAL_LEI=10,
SERIAL_AYANE=11,
SERIAL_TENGU=12,
SERIAL_SAMBO=13,
SERIAL_KORYU=14,
SERIAL_MAX=15,
SERIAL_ZACK=0,
SERIAL_JANN_LEE=2,
SERIAL_RYU_HAYABUSA=4,
SERIAL_BASS=9,
SERIAL_LEIFANG=10,
SERIAL_BAYMAN=13,
SERIAL_GENFU=6,
SERIAL_EIN=3,
SERIAL_HITOMI=14,
SERIAL_HELENA=7,
SERIAL_LEON=8

It's a 7zip renamed to zip.
 

Attachments

  • server.zip
    1.3 MB · Views: 28
Hey all.

Below is a work in progress spaghetti godot importer for kas00.emp and kas00.cat from doao. You need godot 4.5, they fixed the dds import from buffer in it. Add a MeshInstance3D node, and attach the script below to it, then run the scene. The screenshots are from the godot editor 4.5 for meta quest 3.

Also in this script I dumped all the skeletons from the files, and found out that the raidou skeleton in doa3 has some broken values in two nodes, in rest it was the same as the raidou skeleton in doa2u, so i just fixed these values with the right ones.


Code:
extends MeshInstance3D

func _process(delta: float) -> void:
    rotate_y(0.1*delta)

func _ready() -> void:
    var file = FileAccess.open("res://kas00.emp", FileAccess.READ)
    if file == null:
        push_error("Failed to open the xpr file!")
        return
        
    # Read the entire file into a PackedByteArray
    var data = file.get_buffer(file.get_length())
    file.close()
    var bf = StreamPeerBuffer.new()
    bf.data_array = data
    bf.seek(0)
    
    var dwChunkId = bf.get_32()
    var dwMDLSize = bf.get_32()
    var dwMDLMagic = bf.get_string(4)
    var dwNumObj = bf.get_32()
    var dwNumTxt = bf.get_32()
    var _dwUnk0 = bf.get_32()
    var dwNumIVBuf = bf.get_32()
        
    print("dwChunkId: %d, dwMDLSize: %x,   Obj: %d, Txt: %d, IVBuf: %d, Magic: %s"%[dwChunkId, dwMDLSize, dwNumObj, dwNumTxt, dwNumIVBuf, dwMDLMagic])
    if dwMDLMagic != 'MDL' or dwChunkId != 1:
        print("is not emp")
        return

    
        
    var ObjOffsets = []
    for i in range(dwNumObj):
        ObjOffsets.append(bf.get_32())
        
    #Get file structure block offsets
    var offverts = []
    var offimgs = []
    var chunkbase = dwMDLSize + 0x10
    while true:
        bf.seek(chunkbase - 8)
        var chunkid = bf.get_32()
        var chunksize = bf.get_32()
        if chunkid == 2:
            offverts.append(chunkbase + 0xc)
        elif chunkid == 3:
            var _mipmaps = bf.get_32()
            var txMagic = bf.get_32()
            bf.seek(chunkbase+0x14+8)
            var sizeX = bf.get_32()
            var sizeY = bf.get_32()
            var doafmt = {0x31545844:0xC, 0x34545844:0xF, 0x15:6, 0x3C:0x28}[txMagic]
            #print([mipmaps,doafmt, sizeX, sizeY])
            offimgs.append([44+chunkbase, sizeX, sizeY, doafmt])
        elif chunkid == 4:
            break
        chunkbase += chunksize+8
        
    var gtextures = []
    gtextures.resize(dwNumTxt)
    gtextures.fill(0)
    var imgCount = -1
    for offimg in offimgs:
        imgCount += 1
        var texoffset = offimg[0]
        var sizeX = offimg[1]
        var sizeY = offimg[2]
        var doafmt = offimg[3]
        var transparency = false
        if doafmt == 6 or doafmt == 0xF:
            transparency = true
        var bpp = {6:4, 0x28:2, 0x19:1,  0xC:0.5, 0xF:1}[doafmt] #
        var noMipSize = int(sizeX*sizeY*bpp)

        #make dds caption
        var ddsCap = []# + [0]*(32-6)
        ddsCap.resize(32-6)
        ddsCap.fill(0)
        ddsCap = [0x20534444, 0x7C, 0x81007, sizeY, sizeX, noMipSize] + ddsCap
        ddsCap[19] = 0x20
        ddsCap[20] = {6:0x41, 0x19:2, 0x28:0x20001}.get(doafmt,4)
        ddsCap[21] = {0xc:0x31545844, 0xf:0x35545844}.get(doafmt,0)#fourcc
        ddsCap[27] = 0x1000
        if doafmt == 6:
            ddsCap[22] = 0x20
            ddsCap[23] = 0xFF0000
            ddsCap[24] = 0xFF00
            ddsCap[25] = 0xFF
            ddsCap[26] = 0xFF000000
        elif doafmt == 0x28:
            ddsCap[22] = 0x10
            ddsCap[23] = 0xFF
            ddsCap[26] = 0xFF00
        elif doafmt == 0x19:
            ddsCap[22] = 8
            ddsCap[26] = 0xFF
        
        var ddsCapBuffer = StreamPeerBuffer.new()
        for ddsnum in ddsCap:
            ddsCapBuffer.put_32(ddsnum)
        ddsCapBuffer.seek(0)
        
        #  supported d3d types: 6-ARGB32  28-GB16  19-A8  C-DXT1  F-DXT5
        var ddsData: PackedByteArray = ddsCapBuffer.get_data(ddsCapBuffer.get_available_bytes())[1] + data.slice(texoffset, texoffset + noMipSize)
        
        var image = Image.new()
        var err = image.load_dds_from_buffer(ddsData)
        if err != OK:
            push_error("DDS loading failed")
        else:
            var texture: Texture2D = ImageTexture.create_from_image(image)
            gtextures[imgCount] = [transparency, texture]
            

    var gobjects = []
    var vertscounter = 0

    for  objidx in range(dwNumObj):
        var objhastransparency = false
        
        var objbase = ObjOffsets[objidx] - 0xc
        bf.seek(objbase)
        var _dwOBJMagic = bf.get_string(4)
        var dwWeight = bf.get_32()
        #print(dwOBJMagic)
        var buffslots = [[], [], [], []]
        for bufslotidx in range(4):
            bf.seek(objbase+0x20 + bufslotidx*0x10)
            var dwNumVertices = bf.get_32()
            var dwVBufOffset = bf.get_32()
            var dwNumIndices = bf.get_32()
            var dwIBufOffset = bf.get_32()
            if dwNumVertices == 0:
                continue
            #print([dwNumVertices, dwVBufOffset, dwNumIndices, dwIBufOffset])
            dwVBufOffset = offverts[vertscounter]
            vertscounter += 1
            dwIBufOffset -= 0xc
            bf.seek(dwIBufOffset-4)
            
            var verts = []
            var normals = []
            var indices = []
            var uvs = []
            var diffuses = []
            var weights = []
            var uvs0 = []
            
            
            bf.seek(dwIBufOffset)
            for i in range(dwNumIndices):
                indices.append(bf.get_16())
                
            #read all 4 vertex buffers before proceeding to materials
            bf.seek(dwVBufOffset)
            for vtx in range(dwNumVertices):
                verts.append(Vector3(bf.get_float(), bf.get_float(), bf.get_float()))
                if dwWeight:
                    var weightlayers = []
                    for i in range(dwWeight):
                        weightlayers.append(bf.get_float())
                    weights.append(weightlayers)
                if bufslotidx == 0:#x20
                    normals.append(Vector3(bf.get_float(), bf.get_float(), bf.get_float()))           
                    uvs.append(Vector2(bf.get_float(), bf.get_float()))
                elif bufslotidx == 1:#x18                 
                    diffuses.append(bf.get_float())   
                    uvs.append(Vector2(bf.get_float(), bf.get_float()))
                elif bufslotidx == 2:#x28     
                    normals.append(Vector3(bf.get_float(), bf.get_float(), bf.get_float()))
                    uvs.append(Vector2(bf.get_float(), bf.get_float()))           
                    uvs0.append(Vector2(bf.get_float(), bf.get_float()))
                elif bufslotidx == 3:#x20                 
                    diffuses.append(bf.get_float())         
                    uvs.append(Vector2(bf.get_float(), bf.get_float()))           
                    uvs0.append(Vector2(bf.get_float(), bf.get_float()))
            
            if bufslotidx == 0:
                buffslots[0] = {'indices':indices, 'verts':verts, 'normals':normals, 'uvs':uvs}
            elif bufslotidx == 1:
                buffslots[1] = {'indices':indices, 'verts':verts, 'diffuses':diffuses, 'uvs':uvs}
            elif bufslotidx == 2:
                buffslots[2] = {'indices':indices, 'verts':verts, 'normals':normals, 'uvs':uvs, 'uvs2':uvs0}
            elif bufslotidx == 3:
                buffslots[3] = {'indices':indices, 'verts':verts, 'diffuses':diffuses, 'uvs':uvs, 'uvs2':uvs0}
            if dwWeight:
                buffslots[bufslotidx]['weights'] = weights
            
        #print(objidx)
        var matbase = objbase +0xa0
        var mesh_data = ArrayMesh.new() #godot mesh
        var matindex = -1
        while true:
            matindex += 1
            bf.seek(matbase)
            var matid = bf.get_32()
            if  matid == 0:
                break
            var matsize = bf.get_32()
            var _unkmat = bf.get_32()
            var cullingflags = bf.get_32()
            var bounding_sphere = [bf.get_float(), bf.get_float(), bf.get_float(), bf.get_float()]
            var diffuse = Color(bf.get_float(), bf.get_float(), bf.get_float(), bf.get_float())
            var ambient = Color(bf.get_float(), bf.get_float(), bf.get_float(), bf.get_float())
            var specular = Color(bf.get_float(), bf.get_float(), bf.get_float(), bf.get_float())
            var emisive = Color(bf.get_float(), bf.get_float(), bf.get_float(), bf.get_float())
            var glow = bf.get_float()
            var texturesnum = bf.get_32()
            #print([matid, _unkmat, cullingflags])
                
                
            bf.seek(matbase + matsize - 0x10)
            var vsize = bf.get_16()
            var usedvbufslot = bf.get_16()
            var facestart = bf.get_32()
            var facecount = bf.get_32()
            var indexsize = bf.get_32()
            var matindices = buffslots[usedvbufslot]['indices'].slice(facestart, facestart+facecount+2)
            ## reduce all the lists only to vertices represented in the indices
            var index_map = {}
            var xindices = PackedInt32Array()
            var xverts = PackedVector3Array()
            var xnormals = PackedVector3Array()
            var xuvs = PackedVector2Array()
            #trim arrays to material indices only
            for old_index in matindices:
                if not index_map.has(old_index):
                    index_map[old_index] = xverts.size()
                    xverts.append(buffslots[usedvbufslot]['verts'][old_index])
                    xnormals.append(buffslots[usedvbufslot]['normals'][old_index])
                    xuvs.append(buffslots[usedvbufslot]['uvs'][old_index])
            for old_index in matindices:
                xindices.append(index_map[old_index])
            #xindices = PackedInt32Array([xindices[0]]) + xindices #dublicate first index in tristrip, to fix the ccw winding
            
            #the blend shapes require triangles, so the cw winding can be switched in there
            var xfaces = PackedInt32Array()
            for idx in range(xindices.size()-2):
                var a; var b; var c
                if idx % 2:
                    a = xindices[idx]
                    b = xindices[idx + 1]
                    c = xindices[idx + 2]
                else:
                    b = xindices[idx]
                    a = xindices[idx + 1]
                    c = xindices[idx + 2]
                if a==b or b==c or c==a:
                    continue
                xfaces.append_array([a,b,c])
                
            var material = StandardMaterial3D.new()
            material.albedo_color = diffuse
            material.roughness = clamp(1.0 - (glow/100), 0.0, 1.0)
            #material.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
            #material.cull_mode = BaseMaterial3D.CULL_FRONT
            #if cullingflags > 1:
                #material.cull_mode = BaseMaterial3D.CULL_DISABLED
            
            for tx in range(texturesnum):
                bf.seek(matbase + 0x70 + tx*0x10)
                var txid = bf.get_32()
                var unk0 = bf.get_32()
                var unk1 = bf.get_32()
                var txflags = bf.get_32()

                if (txid != 0x888):# and gtextures[txid] != 0: # (and txid < len(textures)
                    
                    material.albedo_texture = gtextures[txid][1]
                    if matid & 1 and gtextures[txid][0] == true:
                        objhastransparency = true
                        material.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
                        #material.blend_mode = BaseMaterial3D.BLEND_MODE_MIX
                        material.render_priority = matindex
                        #material.depth_draw_mode = BaseMaterial3D.DEPTH_DRAW_ALWAYS
                        #material.alpha_scissor_threshold = .5
                #else:
                    #pass
                    #material.albedo_color = specular
                        
            matbase += matsize
                
            var surface_array = []
            surface_array.resize(Mesh.ARRAY_MAX)
            
            surface_array[Mesh.ARRAY_VERTEX] = xverts
            surface_array[Mesh.ARRAY_NORMAL] = xnormals
            surface_array[Mesh.ARRAY_TEX_UV] = xuvs
            #surface_array[Mesh.ARRAY_INDEX] = xindices
            surface_array[Mesh.ARRAY_INDEX] = xfaces
            
            #mesh_data.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLE_STRIP, surface_array)
            mesh_data.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)
            mesh_data.surface_set_material(mesh_data.get_surface_count()-1, material)

        var mesh_instance = MeshInstance3D.new()
        mesh_instance.mesh = mesh_data
        if objhastransparency:
            mesh_instance.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
        add_child(mesh_instance)
        gobjects.append(mesh_instance)
        #try to reposition test
    #for ii in  gobjects.size():
        #gobjects[ii].global_transform.origin = Vector3(float(ii/11.2), 0, 0)
        
    var bonesNames = ["Chest", "Head", "Hips", "LeftFoot", "LeftForeArm", "LeftHand", "LeftUpLeg", "LeftLeg",
     "LeftArm", "RightFoot", "RightForeArm", "RightHand", "RightUpLeg", "RightLeg", "RightArm", "Unknown0",
      "LeftArm", "LeftEyeBall", "LeftFoot", "Head", "RightArm", "RightEyeBall", "RightFoot", "Chest",
       "LeftWingBase", "LeftWingMid", "LeftWingTip", "RightWingBase", "RightWingMid", "RightWingTip"]#messed up for doax rig
    var bonesHierarchy = [0x17, 0x13, -1, 7, 8, 4, 2, 6, 0x10, 0xd, 0xe, 0xa, 2, 0xc, 0x14, -1, 0, 1, 3, 0, 0, 1, 9, 2, 0, 0x18, 0x19, 0, 0x1b, 0x1c]

    var bonesDoa3Parents = [2, 0, -1, 7, 8, 4, 2, 6, 0, 0xd, 0xe, 0xa, 2, 0xc, 0, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1]
    var bonesById = [2, 6,7,3, 0xc,0xd,9, 0, 1,0x11,0x15, 8,4,5, 0xe,0xa,0xb]
    var boneTails = [0, 7,3,-1, 0xd,9,-1, 1, -1,-1,-1,   4,5,-1, 0xa,0xb,-1]
    #find in cat body parts, go through hierarchy, and multiply the skeleton positions
    var cfile = FileAccess.open("res://kas00.cat", FileAccess.READ)
    if cfile == null:
        push_error("Failed to open the cat file!")
        return
        
    # Read the entire file into a PackedByteArray
    var cdata = cfile.get_buffer(cfile.get_length())
    cfile.close()
    var cbf = StreamPeerBuffer.new()
    cbf.data_array = cdata
    cbf.seek(0)
    
    var bones2OBJs = []
    var hasLowPoly = false
    
    var catheader = cbf.get_32()
    if catheader != 0x20:
        print('wrong cat header')
    else:
        var savedOffset = 0x14
        var version = 1
        while true:
            cbf.seek(savedOffset)
            var pair1 = cbf.get_32()
            var pair2 = cbf.get_32()
            savedOffset = cbf.get_position()
            if pair1 == 0: break
            elif pair2 == -1:
                if pair1 != 2: version = 3
                else: version = 2
            elif (version != 1 and (pair2 == 1 or pair2 == 9)) or (version == 1 and pair1 == 4): #doau low'n'high poly + doax low'n'high poly
                cbf.seek(pair1 + 0x14)
                if version == 1:
                    cbf.seek(pair2 + 0x14)
                    while true:
                        if cbf.get_u8() == 0xfe: break
                    var bobj = cbf.get_u8()
                    var c = 0
                    while bobj != 0xfe:
                        if bobj != 0xff:
                            bones2OBJs.append([5, c, bobj])
                        c += 1
                        bobj = cbf.get_u8()
                    bobj = cbf.get_u8()
                    while bobj != 0xfe: bobj = cbf.get_u8()
                while true:
                    var hasSpecialBone = false
                    var specialBone
                    var bid = cbf.get_u8()
                    var bbone = cbf.get_u8()
                    var bobj = cbf.get_u8()
                    if bid == 0: break
                    elif bid == 1:
                        hasSpecialBone = true
                        specialBone = bbone
                        bbone = {0x80:4, 0x81:0xa, 0x86:8, 0x87:0xe, 0x8b:0x19, 0x8c:0x1a, 0x8e:0x1c, 0x8f:0x1d}.get(bbone, bbone)#"special bones?"
                    elif bid == 2:
                        hasSpecialBone = true
                        specialBone = bbone
                        bbone = {0:0x17, 2:0x10, 3:0x14, 7:0xc, 8:7, 9:0xd, 0xa:0, 0xb:2, 0xc:0, 0xd:0, 0xe:2, 0xf:0x13}.get(bbone, bbone) #6 is 6 #doax bones
                    elif bid == 0xa:
                        cbf.seek(cbf.get_position() - 1)
                        continue
                    elif bid == 0xb:
                        cbf.seek(cbf.get_position() - 2)
                        continue
                    else: continue
                    if pair2 == 9:
                        bid = 4
                        hasLowPoly = true
                    if hasSpecialBone: bones2OBJs.append([bid, bbone, bobj, specialBone])
                    else: bones2OBJs.append([bid, bbone, bobj])
            elif version != 1 and pair2 == 5: #doau shadow shapes
                cbf.seek(pair1 + 0x14)
                if cbf.get_u8() == 0xF0:
                    for i in range(0xf):
                        bones2OBJs.append([5, i, cbf.get_u8()])
                print(bones2OBJs)
                        
        #go for the joints
        cbf.seek(16) #go to joints offset
        var joints_offset = cbf.get_u32()
        if joints_offset != 0:
            cbf.seek(joints_offset) #go to joints offset
            var joints = []
            var joint = cbf.get_u32()
            while joint != 0:
                joints.append(joint)
                joint = cbf.get_u32()
            for i in range(len(joints)):
                if joints[i] < 4: continue
                cbf.seek(joints[i] + joints_offset + 8)
                var jointObj = cbf.get_u8()
                var jointBone = cbf.get_u8()
                var jointBone2 = cbf.get_u8()
                if jointBone > 0x17: continue
                #print("OBJ_%x B1_%x B2%x"% (jointObj, jointBone, jointBone2))
                bones2OBJs.append([3, jointBone, jointObj])
                        
                        
    #put lod at -1, and shadow at +1
                        
    var mskeleton = get_skeleton('kas.doau')
    
    for bb in bones2OBJs:
        var body = bb[0]
        var limb = bb[1]
        var bobj = bb[2]
        var bxyz = Vector3(0,0,0)
        if body == 4:
            bxyz[0] = -1.3
        elif body == 5:
            bxyz[0] = 1.3
        else:
            bxyz[2] = -.5
        while limb != -1:
            #print(mskeleton[limb])
            bxyz += Vector3(mskeleton[limb][0], mskeleton[limb][1], mskeleton[limb][2])
            limb = bonesHierarchy[limb]
        gobjects[bobj].global_transform.origin = bxyz
        
            
                        
                        
                        
            #elif version != 1 and pair2 == 8: #built in skeleton
                #print("found skeleton in cat")
                #hasEmbededSkeleton = True
                #f.seek(pair1 + 0x14)
                #for i in range(0x18):
                    #bonesXYZ.append(struct.unpack("<3f", f.read(12)))
                    #tempb = f.read(4)
            #elif version != 1 and pair2 == 6: #apa module
                #infosbase = 0x14
                #apamagic, apacount, handsoffset, eyesoffset, mouthoffset = fread(infosbase + pair1, "4s4L")#apacount is always 3
                #for enum, apaoffset in enumerate([handsoffset, eyesoffset, mouthoffset]):
                    #if apaoffset != 0:
                        #mcount, moffset, acount, aoffset, targets = fread(infosbase + apaoffset, "5L")
                        #mlist = freadfixed(infosbase + moffset, "BB", mcount)
                        #if acount == 0: handsanim = []
                        #else: #complex animations composed from 2 or 3 morph targets
                            #alist = freadfixed(infosbase + aoffset, "LL", acount)#alist[someid, offset]
                            #handsanim = freadterminated(alist[-1][1] + infosbase, "BBBB", (0xFF,0,0,0))
                            #handsanim = [ [ha[i+2]for i in range(ha[1])]+[ha[0]] for ha in handsanim]#convert from format [t1,count,t2,t3] to [t2,t3,t1]
###                                for mid, mtarget in mlist:
###                                    pass
                            ##to do collect from handsanim and mlist to one list
#
                        #apadata.append((mlist, handsanim))
                    #else:
                        #apadata.append(())#add empty to preserve the order

func get_skeleton(cname:String):
    var skeletons = {"aya.doa3":[[0,0.18,0.0049], [0,0.2875,-0.03], [0,0,0], [0,-0.4199,0], [0.2397,0,0], [0.2397,0,0], [0.0761,-0.0205,-0.0257], [0,-0.4033,0], [0.1206,0.221,-0.0235], [0,-0.4199,0], [-0.2397,0,0], [-0.2397,0,0], [-0.0761,-0.0205,-0.0257], [0,-0.4033,0], [-0.1206,0.221,-0.0235], [0,0,0], [0,0,0], [0.0295,0.1102,0.0759], [0,0,0], [0,0,0], [0,0,0], [-0.0295,0.1102,0.0759], [0,0,0], [0,0,0]],
"aya.doau":[[0,0.18,0.0049], [0,0.2875,-0.03], [0,0,0], [0,-0.4199,0], [0.2397,0,0], [0.2397,0,0], [0.0761,-0.0205,-0.0257], [0,-0.4033,0], [0.1206,0.221,-0.0235], [0,-0.4199,0], [-0.2397,0,0], [-0.2397,0,0], [-0.0761,-0.0205,-0.0257], [0,-0.4033,0], [-0.1206,0.221,-0.0235], [0,0,0], [0,0,0], [0.0295,0.1102,0.0759], [0,0,0], [0,0,0], [0,0,0], [-0.0295,0.1102,0.0759], [0,0,0], [0,0,0]],
"bas.doa3":[[0,0.2338,-0.006], [0,0.269,-0.0339], [0,0,0], [0,-0.455,0], [0.2743,0,0], [0.2743,0,0], [0.0802,-0.0173,-0.0271], [0,-0.455,0], [0.2132,0.25,-0.0185], [0,-0.455,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0802,-0.0173,-0.0271], [0,-0.455,0], [-0.2132,0.25,-0.0185], [0,0,0], [0,0,0], [0.032,0.2197,0.1168], [0,0,0], [0,0,0], [0,0,0], [-0.032,0.2197,0.1168], [0,0,0], [0,0,0]],
"bas.doau":[[0,0.2338,-0.006], [0,0.269,-0.0339], [0,0,0], [0,-0.455,0], [0.2743,0,0], [0.2743,0,0], [0.0802,-0.0173,-0.0271], [0,-0.455,0], [0.2132,0.25,-0.0185], [0,-0.455,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0802,-0.0173,-0.0271], [0,-0.455,0], [-0.2132,0.25,-0.0185], [0,0,0], [0,0,0], [0.032,0.2197,0.1168], [0,0,0], [0,0,0], [0,0,0], [-0.032,0.2197,0.1168], [0,0,0], [0,0,0]],
"bay.doa3":[[0,0.2338,-0.006], [0,0.36,0], [0,0,0], [0,-0.455,0], [0.2743,0,0], [0.2743,0,0], [0.0802,-0.0173,-0.0271], [0,-0.455,0], [0.2132,0.25,-0.0185], [0,-0.455,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0802,-0.0173,-0.0271], [0,-0.455,0], [-0.2132,0.25,-0.0185], [0,0,0], [0,0,0], [0.0333,0.1128,0.0805], [0,0,0], [0,0,0], [0,0,0], [-0.0333,0.1128,0.0805], [0,0,0], [0,0,0]],
"bay.doau":[[0,0.2338,-0.006], [0,0.3129,-0.0172], [0,0,0], [0,-0.455,0], [0.2743,0,0], [0.2743,0,0], [0.0802,-0.0173,-0.0271], [0,-0.455,0], [0.2132,0.25,-0.0185], [0,-0.455,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0802,-0.0173,-0.0271], [0,-0.455,0], [-0.2132,0.25,-0.0185], [0,0,0], [0,0,0], [0.0314,0.1349,0.0812], [0,0,0], [0,0,0], [0,0,0], [-0.0314,0.1349,0.0812], [0,0,0], [0,0,0]],
"bni.doa3":[[0,0.2577,-0.0253], [0,0.4092,-0.0225], [0,0,0], [0,-0.5635,0], [0.2946,0,0], [0.2946,0,0], [0.1196,-0.0273,-0.0144], [0,-0.5044,0], [0.2717,0.3346,-0.0191], [0,-0.5635,0], [-0.2946,0,0], [-0.2946,0,0], [-0.1196,-0.0273,-0.0144], [0,-0.5044,0], [-0.2717,0.3346,-0.0191], [0,0,0], [0,0,0], [0.0422,0.1461,0.1038], [0,0,0], [0,0,0], [0,0,0], [-0.0422,0.1461,0.1038], [0,0,0], [0,0,0]],
"chi.doa3":[[0,0.1918,-0.01], [0,0.2692,-0.0255], [0,0,0], [0,-0.415,0], [0.2156,0,0], [0.2156,0,0], [0.0712,-0.0098,-0.024], [0,-0.415,0], [0.175,0.2084,-0.01], [0,-0.415,0], [-0.2156,0,0], [-0.2156,0,0], [-0.0712,-0.0098,-0.024], [0,-0.415,0], [-0.175,0.2084,-0.01], [0,0,0], [0,0,0], [0.0302,0.1465,0.089], [0,0,0], [0,0,0], [0,0,0], [-0.0302,0.1465,0.089], [0,0,0], [0,0,0]],
"ein.doau":[[0,0.25,0], [0,0.3,-0.024], [0,0,0], [0,-0.447,0], [0.315,0,0], [0.2745,0,0], [0.0768,-0.0168,-0.0257], [0,-0.427,0], [0.154,0.2331,-0.0217], [0,-0.447,0], [-0.315,0,0], [-0.2745,0,0], [-0.0768,-0.0168,-0.0257], [0,-0.427,0], [-0.154,0.2331,-0.0217], [0,0,0], [0,0,0], [0.0323,0.1138,0.0669], [0,0,0], [0,0,0], [0,0,0], [-0.0323,0.1138,0.0669], [0,0,0], [0,0,0]],
"gen.doa3":[[0,0.1918,-0.01], [0,0.2692,-0.0255], [0,0,0], [0,-0.415,0], [0.2156,0,0], [0.2156,0,0], [0.0712,-0.0098,-0.024], [0,-0.415,0], [0.175,0.2084,-0.01], [0,-0.415,0], [-0.2156,0,0], [-0.2156,0,0], [-0.0712,-0.0098,-0.024], [0,-0.415,0], [-0.175,0.2084,-0.01], [0,0,0], [0,0,0], [0.0302,0.1515,0.089], [0,0,0], [0,0,0], [0,0,0], [-0.0302,0.1515,0.089], [0,0,0], [0,0,0]],
"gen.doau":[[0,0.1918,-0.01], [0,0.2692,-0.0255], [0,0,0], [0,-0.415,0], [0.2156,0,0], [0.2156,0,0], [0.0712,-0.0098,-0.024], [0,-0.415,0], [0.175,0.2084,-0.01], [0,-0.415,0], [-0.2156,0,0], [-0.2156,0,0], [-0.0712,-0.0098,-0.024], [0,-0.415,0], [-0.175,0.2084,-0.01], [0,0,0], [0,0,0], [0.0302,0.1515,0.089], [0,0,0], [0,0,0], [0,0,0], [-0.0302,0.1515,0.089], [0,0,0], [0,0,0]],
"gok.doa3":[[0,0.22,0], [0,0.31,-0.0415], [0,0,0], [0,-0.4358,0], [0.2625,0,0], [0.2625,0,0], [0.0769,-0.0095,-0.0259], [0,-0.43,0], [0.145,0.2367,-0.0413], [0,-0.4358,0], [-0.2625,0,0], [-0.2625,0,0], [-0.0769,-0.0095,-0.0259], [0,-0.43,0], [-0.145,0.2367,-0.0413], [0,0,0], [0,0,0], [0.0288,0.0992,0.0743], [0,0,0], [0,0,0], [0,0,0], [-0.0288,0.0992,0.0743], [0,0,0], [0,0,0]],
"hel.doau":[[0,0.2,-0.0105], [0,0.2769,-0.0305], [0,0,0], [0,-0.443,0], [0.2484,0,0], [0.2484,0,0], [0.0732,-0.0155,-0.0247], [0,-0.386,0], [0.13,0.2254,-0.0288], [0,-0.443,0], [-0.2484,0,0], [-0.2484,0,0], [-0.0732,-0.0155,-0.0247], [0,-0.386,0], [-0.13,0.2254,-0.0288], [0,0,0], [0,0,0], [0.0287,0.1188,0.0767], [0,0,0], [0,0,0], [0,0,0], [-0.0287,0.1188,0.0767], [0,0,0], [0,0,0]],
"hik.doa3":[[0,0.2,-0.0105], [0,0.2769,-0.0305], [0,0,0], [0,-0.443,0], [0.2707,0,0], [0.2261,0,0], [0.0732,-0.0155,-0.0247], [0,-0.386,0], [0.13,0.2254,-0.0288], [0,-0.443,0], [-0.2707,0,0], [-0.2261,0,0], [-0.0732,-0.0155,-0.0247], [0,-0.386,0], [-0.13,0.2254,-0.0288], [0,0,0], [0,0,0], [0.0287,0.1188,0.0767], [0,0,0], [0,0,0], [0,0,0], [-0.0287,0.1188,0.0767], [0,0,0], [0,0,0]],
"jan.doa3":[[0,0.1808,-0.0211], [0,0.3384,-0.0139], [0,0,0], [0,-0.4463,0], [0.2621,0,0], [0.2668,0,0], [0.0797,-0.0213,-0.012], [0,-0.4251,0], [0.185,0.2781,-0.0159], [0,-0.4463,0], [-0.2621,0,0], [-0.2668,0,0], [-0.0797,-0.0213,-0.012], [0,-0.4251,0], [-0.185,0.2781,-0.0159], [0,0,0], [0,0,0], [0.03,0.1207,0.091], [0,0,0], [0,0,0], [0,0,0], [-0.03,0.1207,0.091], [0,0,0], [0,0,0]],
"jan.doau":[[0,0.1808,-0.0211], [0,0.3384,-0.0139], [0,0,0], [0,-0.4463,0], [0.2621,0,0], [0.2668,0,0], [0.0797,-0.0213,-0.012], [0,-0.4251,0], [0.185,0.2781,-0.0159], [0,-0.4463,0], [-0.2621,0,0], [-0.2668,0,0], [-0.0797,-0.0213,-0.012], [0,-0.4251,0], [-0.185,0.2781,-0.0159], [0,0,0], [0,0,0], [0.03,0.1207,0.091], [0,0,0], [0,0,0], [0,0,0], [-0.03,0.1207,0.091], [0,0,0], [0,0,0]],
"kas.doa3":[[0,0.18,0.0049], [0,0.2875,-0.03], [0,0,0], [0,-0.4199,0], [0.2397,0,0], [0.2397,0,0], [0.0761,-0.0205,-0.0257], [0,-0.4033,0], [0.1206,0.221,-0.0235], [0,-0.4199,0], [-0.2397,0,0], [-0.2397,0,0], [-0.0761,-0.0205,-0.0257], [0,-0.4033,0], [-0.1206,0.221,-0.0235], [0,0,0], [0,0,0], [0.031,0.1114,0.0756], [0,0,0], [0,0,0], [0,0,0], [-0.031,0.1114,0.0756], [0,0,0], [0,0,0]],
"kas.doau":[[0,0.18,0.0049], [0,0.2875,-0.03], [0,0,0], [0,-0.4199,0], [0.2397,0,0], [0.2397,0,0], [0.0761,-0.0205,-0.0257], [0,-0.4033,0], [0.1206,0.221,-0.0235], [0,-0.4199,0], [-0.2397,0,0], [-0.2397,0,0], [-0.0761,-0.0205,-0.0257], [0,-0.4033,0], [-0.1206,0.221,-0.0235], [0,0,0], [0,0,0], [0.0302,0.1113,0.0775], [0,0,0], [0,0,0], [0,0,0], [-0.0302,0.1113,0.0775], [0,0,0], [0,0,0]],
"kor.doa3":[[0,0.185,0.0052], [0,0.3015,-0.0262], [0,0,0], [0,-0.4164,0], [0.247,0,0], [0.247,0,0], [0.0784,-0.0283,-0.0264], [0,-0.4,0], [0.1242,0.2209,-0.0244], [0,-0.4164,0], [-0.247,0,0], [-0.247,0,0], [-0.0784,-0.0283,-0.0264], [0,-0.4,0], [-0.1242,0.2209,-0.0244], [0,0,0], [0,0,0], [0.029,0.103,0.0803], [0,0,0], [0,0,0], [0,0,0], [-0.029,0.103,0.0803], [0,0,0], [0,0,0]],
"kor.doau":[[0,0.185,0.0052], [0,0.3015,-0.0262], [0,0,0], [0,-0.4164,0], [0.247,0,0], [0.247,0,0], [0.0784,-0.0283,-0.0264], [0,-0.4,0], [0.1242,0.2209,-0.0244], [0,-0.4164,0], [-0.247,0,0], [-0.247,0,0], [-0.0784,-0.0283,-0.0264], [0,-0.4,0], [-0.1242,0.2209,-0.0244], [0,0,0], [0,0,0], [0.029,0.103,0.0803], [0,0,0], [0,0,0], [0,0,0], [-0.029,0.103,0.0803], [0,0,0], [0,0,0]],
"kte.doa3":[[0,0.25,0], [0,0.3,-0.024], [0,0,0], [0,-0.447,0], [0.315,0,0], [0.2745,0,0], [0.0768,-0.0168,-0.0257], [0,-0.427,0], [0.154,0.2331,-0.0217], [0,-0.447,0], [-0.315,0,0], [-0.2745,0,0], [-0.0768,-0.0168,-0.0257], [0,-0.427,0], [-0.154,0.2331,-0.0217], [0,0,0], [0,0,0], [0.0323,0.1138,0.0669], [0,0,0], [0,0,0], [0,0,0], [-0.0323,0.1138,0.0669], [0,0,0], [0,0,0]],
"lei.doa3":[[0,0.1959,-0.01], [0,0.2825,-0.01], [0,0,0], [0,-0.415,0], [0.2156,0,0], [0.2156,0,0], [0.0712,-0.0098,-0.024], [0,-0.415,0], [0.1172,0.225,-0.0249], [0,-0.415,0], [-0.2156,0,0], [-0.2156,0,0], [-0.0712,-0.0098,-0.024], [0,-0.415,0], [-0.1172,0.225,-0.0249], [0,0,0], [0,0,0], [0.0312,0.1194,0.0563], [0,0,0], [0,0,0], [0,0,0], [-0.0312,0.1194,0.0563], [0,0,0], [0,0,0]],
"lei.doau":[[0,0.1959,-0.01], [0,0.2825,-0.01], [0,0,0], [0,-0.415,0], [0.2156,0,0], [0.2156,0,0], [0.0712,-0.0098,-0.024], [0,-0.415,0], [0.1172,0.225,-0.0249], [0,-0.415,0], [-0.2156,0,0], [-0.2156,0,0], [-0.0712,-0.0098,-0.024], [0,-0.415,0], [-0.1172,0.225,-0.0249], [0,0,0], [0,0,0], [0.0308,0.1178,0.0619], [0,0,0], [0,0,0], [0,0,0], [-0.0308,0.1178,0.0619], [0,0,0], [0,0,0]],
"leo.doau":[[0,0.2338,-0.006], [0,0.36,0], [0,0,0], [0,-0.455,0], [0.2743,0,0], [0.2743,0,0], [0.0802,-0.0173,-0.0271], [0,-0.455,0], [0.2132,0.25,-0.0185], [0,-0.455,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0802,-0.0173,-0.0271], [0,-0.455,0], [-0.2132,0.25,-0.0185], [0,0,0], [0,0,0], [0.0333,0.1128,0.0805], [0,0,0], [0,0,0], [0,0,0], [-0.0333,0.1128,0.0805], [0,0,0], [0,0,0]],
"nin.doa3":[[0,0.2255,0], [0,0.326,-0.024], [0,0,0], [0,-0.437,0], [0.2743,0,0], [0.2743,0,0], [0.0761,-0.0168,-0.0257], [0,-0.437,0], [0.183,0.24,-0.0217], [0,-0.437,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0761,-0.0168,-0.0257], [0,-0.437,0], [-0.183,0.24,-0.0217], [0,0,0], [0,0,0], [0.0329,0.1138,0.0653], [0,0,0], [0,0,0], [0,0,0], [-0.0329,0.1138,0.0653], [0,0,0], [0,0,0]],
"pdg.doau":[[0,0.0525,0.0035], [0,0.1225,0.0112], [0,0,0], [0,-0.0315,0], [0.0279,0,-0.0013], [0.0455,0,0.0013], [0.0315,0,0.0084], [0,-0.035,0], [0.0266,0.0665,0.0035], [0,-0.0315,0], [-0.0279,0,-0.0013], [-0.0455,0,0.0013], [-0.0315,0,0.0084], [0,-0.035,0], [-0.0266,0.0665,0.0035], [0,0,0], [0,0,0], [0.0251,0.112,0.0476], [0,0,0], [0,0,0], [0,0,0], [-0.0251,0.112,0.0476], [0,0,0], [0,0,0]],
"rai.doa3":[[0,0.2058,0], [0,0.2921,-0.024], [0,0,0], [0,-0.437,0], [0.2743,0,0], [0.2743,0,0], [0.0761,-0.0168,-0.0257], [0,-0.437,0], [0.154,0.265,0], [0,-0.437,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0761,-0.0168,-0.0257], [0,-0.437,0], [-0.154,0.265,0], [0,0,0], [0,0,0],  [0.029,0.1124,0.0684], [0,0,0], [0,0,0], [0,0,0], [-0.029,0.1124,0.0684], [0,0,0], [0,0,0]],
"rai.doau":[[0,0.2058,0], [0,0.2921,-0.024], [0,0,0], [0,-0.437,0], [0.2743,0,0], [0.2743,0,0], [0.0761,-0.0168,-0.0257], [0,-0.437,0], [0.154,0.265,0], [0,-0.437,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0761,-0.0168,-0.0257], [0,-0.437,0], [-0.154,0.265,0], [0,0,0], [0,0,0], [0.029,0.1124,0.0684], [0,0,0], [0,0,0], [0,0,0], [-0.029,0.1124,0.0684], [0,0,0], [0,0,0]],
"ryu.doa3":[[0,0.2074,0.02], [0,0.34,-0.03], [0,0,0], [0,-0.437,0], [0.3,0,0], [0.2486,0,0], [0.0761,-0.0168,-0.0257], [0,-0.437,0], [0.18,0.26,0], [0,-0.437,0], [-0.3,0,0], [-0.2486,0,0], [-0.0761,-0.0168,-0.0257], [0,-0.437,0], [-0.18,0.26,0], [0,0,0], [0,0,0], [0.0305,0.117,0.096], [0,0,0], [0,0,0], [0,0,0], [-0.0305,0.117,0.096], [0,0,0], [0,0,0]],
"ryu.doau":[[0,0.2074,0.02], [0,0.34,-0.03], [0,0,0], [0,-0.437,0], [0.2743,0,0], [0.2743,0,0], [0.0761,-0.0168,-0.0257], [0,-0.437,0], [0.18,0.26,0], [0,-0.437,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0761,-0.0168,-0.0257], [0,-0.437,0], [-0.18,0.26,0], [0,0,0], [0,0,0], [0.0305,0.117,0.096], [0,0,0], [0,0,0], [0,0,0], [-0.0305,0.117,0.096], [0,0,0], [0,0,0]],
"sam.doa3":[[0,0.2338,-0.006], [0,0.3129,-0.0172], [0,0,0], [0,-0.455,0], [0.2743,0,0], [0.2743,0,0], [0.0802,-0.0173,-0.0271], [0,-0.455,0], [0.2132,0.25,-0.0185], [0,-0.455,0], [-0.2743,0,0], [-0.2743,0,0], [-0.0802,-0.0173,-0.0271], [0,-0.455,0], [-0.2132,0.25,-0.0185], [0,0,0], [0,0,0], [0.0314,0.1349,0.0812], [0,0,0], [0,0,0], [0,0,0], [-0.0314,0.1349,0.0812], [0,0,0], [0,0,0]],
"sui.doa3":[[0,0.1808,-0.0211], [0,0.3158,-0.0139], [0,0,0], [0,-0.4463,0], [0.2621,0,0], [0.2668,0,0], [0.0797,-0.0213,-0.012], [0,-0.4251,0], [0.1966,0.2781,-0.0159], [0,-0.4463,0], [-0.2621,0,0], [-0.2668,0,0], [-0.0797,-0.0213,-0.012], [0,-0.4251,0], [-0.1966,0.2781,-0.0159], [0,0,0], [0,0,0], [0.0299,0.1535,0.0872], [0,0,0], [0,0,0], [0,0,0], [-0.0299,0.1535,0.0872], [0,0,0], [0,0,0]],
"tin.doa3":[[0,0.2,-0.0105], [0,0.2769,-0.0305], [0,0,0], [0,-0.443,0], [0.254,0,0], [0.2429,0,0], [0.0732,-0.0155,-0.0247], [0,-0.386,0], [0.13,0.2254,-0.0288], [0,-0.443,0], [-0.254,0,0], [-0.2429,0,0], [-0.0732,-0.0155,-0.0247], [0,-0.386,0], [-0.13,0.2254,-0.0288], [0,0,0], [0,0,0], [0.0291,0.1195,0.0718], [0,0,0], [0,0,0], [0,0,0], [-0.0291,0.1195,0.0718], [0,0,0], [0,0,0]],
"tin.doau":[[0,0.2,-0.0105], [0,0.2769,-0.0305], [0,0,0], [0,-0.443,0], [0.254,0,0], [0.2429,0,0], [0.0732,-0.0155,-0.0247], [0,-0.386,0], [0.13,0.2254,-0.0288], [0,-0.443,0], [-0.254,0,0], [-0.2429,0,0], [-0.0732,-0.0155,-0.0247], [0,-0.386,0], [-0.13,0.2254,-0.0288], [0,0,0], [0,0,0], [0.0291,0.1195,0.0718], [0,0,0], [0,0,0], [0,0,0], [-0.0291,0.1195,0.0718], [0,0,0], [0,0,0]],
"tng.doa3":[[0,0.2051,-0.0061], [0,0.2977,-0.0337], [0,0,0], [0,-0.4334,0], [0.2543,0,0], [0.2743,0,0], [0.0899,-0.0169,-0.0271], [0,-0.4338,0], [0.2832,0.2787,-0.0599], [0,-0.4334,0], [-0.2543,0,0], [-0.2743,0,0], [-0.0899,-0.0169,-0.0271], [0,-0.4338,0], [-0.2832,0.2787,-0.0599], [0,0,0], [0,0,0], [0.036,0.1885,0.0992], [0,0,0], [0,0,0], [0,0,0], [-0.036,0.1885,0.0992], [0,0,0], [0,0,0]],
"tng.doau":[[0,0.2051,-0.0061], [0,0.2977,-0.0337], [0,0,0], [0,-0.4334,0], [0.2543,0,0], [0.2743,0,0], [0.0899,-0.0169,-0.0271], [0,-0.4338,0], [0.2832,0.2787,-0.0599], [0,-0.4334,0], [-0.2543,0,0], [-0.2743,0,0], [-0.0899,-0.0169,-0.0271], [0,-0.4338,0], [-0.2832,0.2787,-0.0599], [0,0,0], [0,0,0], [0.036,0.1885,0.0992], [0,0,0], [0,0,0], [0,0,0], [-0.036,0.1885,0.0992], [0,0,0], [0,0,0], [0.125,0.3,-0.2], [0,0,-0.45], [0,0,-0.575], [-0.125,0.3,-0.2], [0,0,-0.45], [0,0,-0.575]],
"vay.doax":[[0,0.11,0], [0,0.0564,0.0138], [0,0,0], [0,-0.3931,0], [0.23,0,0], [0.23,0,0], [0.0784,-0.003,-0.0073], [0,-0.4276,0], [0.1206,0,0], [0,-0.3931,0], [-0.23,0,0], [-0.23,0,0], [-0.0784,-0.003,-0.0073], [0,-0.4276,0], [-0.1206,0,0], [0,0,0], [0,0.1758,-0.0192], [0.0295,0.0422,0.058], [0,-0.0688,0.1106], [0,0.2423,-0.021], [0,0.1758,-0.0192], [-0.0295,0.0422,0.058], [0,-0.0688,0.1106], [0,0.0982,0]],
"vcr.doax":[[0,0.113,0], [0,0.073,0.014], [0,0,0], [0,-0.438,0], [0.249,0,0], [0.249,0,0], [0.075,0.0217,-0.0108], [0,-0.438,0], [0.13,0,0], [0,-0.438,0], [-0.249,0,0], [-0.249,0,0], [-0.075,0.0217,-0.0108], [0,-0.438,0], [-0.13,0,0], [0,0,0], [0,0.2063,-0.0403], [0.0286,0.0478,0.0624], [0,-0.071,0.1079], [0,0.264,-0.0397], [0,0.2063,-0.0403], [-0.0286,0.0478,0.0624], [0,-0.071,0.1079], [0,0.13,0]],
"vhk.doax":[[0,0.1148,0], [0,0.0606,0.014], [0,0,0], [0,-0.4194,0], [0.249,0,0], [0.249,0,0], [0.075,0.0079,-0.0108], [0,-0.4194,0], [0.124,0,0], [0,-0.4194,0], [-0.249,0,0], [-0.249,0,0], [-0.075,0.0079,-0.0108], [0,-0.4194,0], [-0.124,0,0], [0,0,0], [0,0.1906,-0.0403], [0.0287,0.0364,0.0614], [0,-0.0638,0.1079], [0,0.2642,-0.0397], [0,0.1906,-0.0403], [-0.0287,0.0364,0.0614], [0,-0.0638,0.1079], [0,0.1197,0]],
"vht.doax":[[0,0.11,0], [0,0.0564,0.0138], [0,0,0], [0,-0.4253,0], [0.24,0,0], [0.24,0,0], [0.0784,0.0142,-0.0049], [0,-0.4125,0], [0.1206,0,0], [0,-0.4253,0], [-0.24,0,0], [-0.24,0,0], [-0.0784,0.0142,-0.0049], [0,-0.4125,0], [-0.1206,0,0], [0,0,0], [0,0.1759,-0.0192], [0.029,0.0466,0.0665], [0,-0.0688,0.098], [0,0.2565,-0.021], [0,0.1759,-0.0192], [-0.029,0.0466,0.0665], [0,-0.0688,0.098], [0,0.12,0]],
"vks.doax":[[0,0.11,0], [0,0.0564,0.0138], [0,0,0], [0,-0.3931,0], [0.23,0,0], [0.23,0,0], [0.0784,-0.003,-0.0073], [0,-0.4276,0], [0.1206,0,0], [0,-0.3931,0], [-0.23,0,0], [-0.23,0,0], [-0.0784,-0.003,-0.0073], [0,-0.4276,0], [-0.1206,0,0], [0,0,0], [0,0.1758,-0.0192], [0.0302,0.0443,0.0595], [0,-0.0688,0.1106], [0,0.2423,-0.021], [0,0.1758,-0.0192], [-0.0302,0.0443,0.0595], [0,-0.0688,0.1106], [0,0.0982,0]],
"vle.doax":[[0,0.11,0], [0,0.0564,0.0138], [0,0,0], [0,-0.4253,0], [0.24,0,0], [0.24,0,0], [0.0784,0.0142,-0.0049], [0,-0.4125,0], [0.1206,0,0], [0,-0.4253,0], [-0.24,0,0], [-0.24,0,0], [-0.0784,0.0142,-0.0049], [0,-0.4125,0], [-0.1206,0,0], [0,0,0], [0,0.1759,-0.0192], [0.0308,0.0486,0.0665], [0,-0.0688,0.098], [0,0.2565,-0.021], [0,0.1759,-0.0192], [-0.0308,0.0486,0.0665], [0,-0.0688,0.098], [0,0.12,0]],
"vls.doax":[[0,0.1148,0], [0,0.0606,0.014], [0,0,0], [0,-0.4194,0], [0.249,0,0], [0.249,0,0], [0.075,0.0079,-0.0108], [0,-0.4194,0], [0.124,0,0], [0,-0.4194,0], [-0.249,0,0], [-0.249,0,0], [-0.075,0.0079,-0.0108], [0,-0.4194,0], [-0.124,0,0], [0,0,0], [0,0.1906,-0.0403], [0.0289,0.0494,0.0596], [0,-0.0638,0.1079], [0,0.2642,-0.0397], [0,0.1906,-0.0403], [-0.0289,0.0494,0.0596], [0,-0.0638,0.1079], [0,0.1197,0]],
"vpd.doax":[[0,0.0525,0.0035], [0,0.1225,0.0112], [0,0,0], [0,-0.0315,0], [0.0279,0,-0.0013], [0.0455,0,0.0013], [0.0315,0,0.0084], [0,-0.035,0], [0.0266,0.0665,0.0035], [0,-0.0315,0], [-0.0279,0,-0.0013], [-0.0455,0,0.0013], [-0.0315,0,0.0084], [0,-0.035,0], [-0.0266,0.0665,0.0035], [0,0,0], [0,0,0], [0.0251,0.112,0.0476], [0,0,0], [0,0,0], [0,0,0], [-0.0251,0.112,0.0476], [0,0,0], [0,0,0]],
"vtn.doax":[[0,0.1148,0], [0,0.0606,0.014], [0,0,0], [0,-0.4194,0], [0.249,0,0], [0.249,0,0], [0.075,0.0079,-0.0108], [0,-0.4194,0], [0.124,0,0], [0,-0.4194,0], [-0.249,0,0], [-0.249,0,0], [-0.075,0.0079,-0.0108], [0,-0.4194,0], [-0.124,0,0], [0,0,0], [0,0.1906,-0.0403], [0.0291,0.0433,0.0564], [0,-0.0638,0.1079], [0,0.2642,-0.0397], [0,0.1906,-0.0403], [-0.0291,0.0433,0.0564], [0,-0.0638,0.1079], [0,0.1197,0]],
"vun.doax":[[0,0.11,0], [0,0.0564,0.0138], [0,0,0], [0,-0.4253,0], [0.247,0,0], [0.247,0,0], [0.0784,-0.0283,-0.0264], [0,-0.37,0], [0.1242,0,0], [0,-0.4253,0], [-0.247,0,0], [-0.247,0,0], [-0.0784,-0.0283,-0.0264], [0,-0.37,0], [-0.1242,0,0], [0,0,0], [0,0.1759,-0.0192], [0.029,0.0466,0.0665], [0,-0.0688,0.1195], [0,0.2565,-0.021], [0,0.1759,-0.0192], [-0.029,0.0466,0.0665], [0,-0.0688,0.1195], [0,0.12,0]],
"yti.doau":[[0,0.126,0.0034], [0,0.1759,-0.021], [0,0,0], [0,-0.2905,0], [0.1614,0,0], [0.1614,0,0], [0.0512,-0.0108,-0.0173], [0,-0.273,0], [0.0781,0.168,-0.016], [0,-0.2905,0], [-0.1614,0,0], [-0.1614,0,0], [-0.0512,-0.0108,-0.0173], [0,-0.273,0], [-0.0781,0.168,-0.016], [0,0,0], [0,0,0], [0.0251,0.112,0.0476], [0,0,0], [0,0,0], [0,0,0], [-0.0251,0.112,0.0476], [0,0,0], [0,0,0]],
"zac.doa3":[[0,0.2,-0.01], [0,0.33,-0.025], [0,0,0], [0,-0.437,0], [0.2743,0,0], [0.2612,0,0], [0.0761,-0.0168,-0.0257], [0,-0.437,0], [0.185,0.28,0], [0,-0.437,0], [-0.2743,0,0], [-0.2612,0,0], [-0.0761,-0.0168,-0.0257], [0,-0.437,0], [-0.185,0.28,0], [0,0,0], [0,0,0], [0.0305,0.1342,0.086], [0,0,0], [0,0,0], [0,0,0], [-0.0305,0.1342,0.086], [0,0,0], [0,0,0]],
"zac.doau":[[0,0.2,-0.01], [0,0.33,-0.025], [0,0,0], [0,-0.437,0], [0.2743,0,0], [0.2612,0,0], [0.0761,-0.0168,-0.0257], [0,-0.437,0], [0.185,0.28,0], [0,-0.437,0], [-0.2743,0,0], [-0.2612,0,0], [-0.0761,-0.0168,-0.0257], [0,-0.437,0], [-0.185,0.28,0], [0,0,0], [0,0,0], [0.0305,0.1342,0.086], [0,0,0], [0,0,0], [0,0,0], [-0.0305,0.1342,0.086], [0,0,0], [0,0,0]]}

    if cname in skeletons:
        return skeletons[cname]
    else:
        return false
 

Attachments

  • com.oculus.vrshell-20250501-144239.jpg
    com.oculus.vrshell-20250501-144239.jpg
    74.6 KB · Views: 49
  • com.oculus.vrshell-20250501-144126.jpg
    com.oculus.vrshell-20250501-144126.jpg
    64.1 KB · Views: 51
ALL DOA6 DOA5 DOA4 DOA3 DOA2U DOAD
Top