if (heapSize < 200000) then
        heapSize = 2000000 -- allow ~ 40 MB instead of just 7.5 MB. Prevents "Runtime Error: Out of scripter memory"
fname = getOpenFileName \
caption:"WWE 2015 [PC] Model File" \
types:"WWEModel File(*.yobj)|*.yobj" \
historyCategory:"WWE Object Presets"
f = fopen fname "rb"

fn ReadBEShort fstream = (
short = readshort fstream #unsigned
short = bit.swapBytes short 2 1
b = (bit.get short 16)
for i = 17 to 32 do short = bit.set short i b
return short
)

fn PrintOffset Var =
(
        local Var = Var
print ("This is the offset 0x" + (bit.intAsHex Var) as string)
        Var
)

fn floatSwap2 f =
(
        i = bit.floatAsInt f
        h = bit.intashex i
        while h.count < 8 do h = "0" + h
       
        s = (substring h 7 2) + (substring h 5 2) + (substring h 3 2) + (substring h 1 2)
        bit.intAsFloat (bit.hexasint s)
)       

fn ReadBEword fstream = (
return (bit.swapBytes (readshort fstream #unsigned) 1 2)
)

        fn convertTo32 input16 = (
                inputAsInt = input16
                sign = bit.get inputAsInt 16
                exponent = (bit.shift (bit.and inputAsInt (bit.hexasint "7C00")) -10) as integer - 16
                fraction = bit.and inputAsInt (bit.hexasint "03FF")
                if sign==true then sign = 1 else sign = 0
                exponentF = exponent + 127
                --Ouput 32 bit integer representing a 32 bit float
                outputAsFloat = bit.or (bit.or (bit.shift fraction 13) (bit.shift exponentF 23)) (bit.shift sign 31)
                --Output Check 
                return bit.intasfloat outputasfloat
        )

fn ReadBEHalfFloat fstream = (
return convertTo32(ReadBEword fstream)
)

fn ReadHalfFloat fstream = (
return convertTo32(readshort fstream#unsigned)
)

fn ReadBElong fstream = (
long = readlong fstream
long = bit.swapBytes long 1 4
long = bit.swapBytes long 2 3
return long
)

fn ReadBEfloat fstream = (
return floatSwap2(readfloat fstream)
)

fn ReadFixedString bstream fixedLen =
(
        local str = ""
        for i = 1 to fixedLen do
        (
                str += bit.intAsChar (ReadByte bstream #unsigned)
        )
        str
)

struct weight_data
(
   boneids,weights
)

struct Mesh_Info_Struct
(
   Unk109,Unk107,Objname,VertOff,WeightOff,UVOff,MatPCount,matPOff,FaceOff,FaceSec,VertCount,WeightCount,BtableStart
)
struct Mesh_Info_Struct2
(
Unk102, Unk103, Unk999, Unk108, Unk114
)

Idstring = ReadFixedString f 4
Totalsize = ReadBElong f
Unk001 = ReadBElong f
Unk002 = ReadBElong f
Unk003 = ReadBElong f
Unk004 = ReadBElong f
MeshCount = ReadBElong f
MeshOff = ReadBElong f + 8
BoneCount = ReadBElong f
TexCount = ReadBElong f
BoneOffset = ReadBElong f + 8
TexOff = ReadBElong f + 8
MnameOff = ReadBElong f + 8
MnameCount = ReadBElong f
Unk013 = ReadBElong f
Unk014 = ReadBElong f
Unk015 = ReadBElong f
Unk016 = ReadBElong f
fseek f 0x54 #seek_set
BoneMapOff=ReadBElong f+8

fseek f BoneOffset#seek_set
tarr = #()
rarr = #()
qarr = #()
Barr = #()
Parr = #()

clearlistener()

for a = 1 to BoneCount Do (
BoneName = ReadFixedString f 16
tx = ReadBEfloat f
ty = ReadBEfloat f
tz = ReadBEfloat f
tw = ReadBEfloat f
rx = (ReadBEfloat f * 180) / pi
ry = (ReadBEfloat f * 180) / pi
rz = (ReadBEfloat f * 180) / pi
rw = ReadBEfloat f
parent = ReadBElong f
fseek f 0xC#seek_cur
qx = ReadBEfloat f
qy = ReadBEfloat f
qz = ReadBEfloat f
qw = ReadBEfloat f
tfm = (eulerangles rx ry rz) as matrix3
append tarr [tx,ty,tz]
append rarr tfm
append qarr [qx,qy,qz,qw]
append Barr BoneName
append Parr parent
)
BNArr = #()
for a = 1 to BoneCount Do (
if isvalidnode (getNodeByName Barr[a]) != true then (
tfm = rarr[a]
tfm.row4 = tarr[a]
if (Parr[a] != -1) do (
tfm = tfm * BNArr[(Parr[a] + 1)].objecttransform
)
newBone = bonesys.createbone   \
              tfm.row4   \
              (tfm.row4 + 0.01 * (normalize tfm.row1)) \
              (normalize tfm.row3)
         newBone.name = Barr[a]
         newBone.width  = 0.01
         newBone.height = 0.01
         newBone.transform = tfm
         newBone.setBoneEnable false 0
         newBone.wirecolor = yellow
         newbone.showlinks = true
         newBone.pos.controller      = TCB_position ()
         newBone.rotation.controller = TCB_rotation ()
              )
if isvalidnode (getNodeByName Barr[a]) == true then (
newBone = getNodeByName Barr[a]
)
if (Parr[a] != -1) then
newBone.parent = BNArr[(Parr[a] + 1)]
append BNArr newBone

)

rootRT = dummy name:"Main_Root" boxsize:[.1,.1,.1]
for b in BNArr where b.parent==undefined do b.parent = rootRT
rootRT.transform = (matrix3 [1,0,0] [0,0,-1] [0,1,0] [0,0,0])

Print ("Bone End @ 0x"+((bit.intAsHex(ftell f))as string))	

fseek f MeshOff#seek_set
Mesh_Info_Arr = #()
Mesh_Info_Arr2 = #()	
for a = 1 to MeshCount Do (
VCount1 = ReadBElong f
FaceSec = ReadBElong f
BtableStart = (ftell f)
UsedBoneID = ReadBElong f
fseek f 0x50#seek_cur
WeightCount = ReadBElong f
Unk102 = ReadBElong f
Unk103 = ReadBElong f
VertOff = ReadBElong f + 8
WeightOff = ReadBElong f + 8
UVOff = ReadBElong f + 8
Unk999 = ReadBElong f
Unk107 = ReadBElong f
Objname = ReadFixedString f 16
Unk108 = ReadBElong f
Unk109 = ReadBElong f
MatPCount = ReadBElong f
matPOff = ReadBElong f + 8
FaceOff = ReadBElong f + 8
VertCount = ReadBElong f
Unk114 = ReadBElong f
fseek f 0x10#seek_cur
append Mesh_Info_Arr (Mesh_Info_Struct Unk109:Unk109 Unk107:Unk107 Objname:Objname VertOff:VertOff WeightOff:WeightOff UVOff:UVOff MatPCount:MatPCount matPOff:matPOff FaceOff:FaceOff FaceSec:FaceSec VertCount:VertCount WeightCount:WeightCount BtableStart:BtableStart )
append Mesh_Info_Arr2 (Mesh_Info_Struct2 Unk102:Unk102 Unk103:Unk103 Unk999:Unk999 Unk108:Unk108 Unk114:Unk114)
)

print Mesh_Info_Arr
print Mesh_Info_Arr2

fseek f BoneMapOff #seek_set
Print ("Bone Map @ 0x"+((bit.intAsHex(ftell f))as string))	
usedID = ReadBElong f
BoneMapOffset = ReadBElong f	
Used_Bone_array = #()
for b = 1 to usedID do (
bid = ReadBElong f+1
append Used_Bone_array bid
)

print (usedID  as string)

for a = 1 to MeshCount Do (
Vert_array = #()
Normal_array = #()
UV_array = #()
Face_array = #()
Weight_array = #()

fseek f Mesh_Info_Arr[a].VertOff#seek_set
scale1 = 10
VertOff = ReadBElong f + 8
print VertOff
fseek f VertOff#seek_set   
for b = 1 to Mesh_Info_Arr[a].VertCount Do (
vx = ReadBEfloat f
vy = ReadBEfloat f
vz = ReadBEfloat f
fseek f 0x10#seek_cur
append Vert_array [vx,vz,-vy]
)

fseek f Mesh_Info_Arr[a].UVOff#seek_set
for b = 1 to Mesh_Info_Arr[a].VertCount Do (
tu = ReadBEfloat f
tv = ReadBEfloat f * -1
append UV_array [tu,tv,0]
)

fseek f Mesh_Info_Arr[a].WeightOff#seek_set
Print ("Weight Start @ 0x"+((bit.intAsHex(ftell f))as string))	
for b = 1 to Mesh_Info_Arr[a].VertCount Do (
Bone1 = 65535
Bone2 = 65535
Bone3 = 65535
Bone4 = 65535
Bone5 = 65535
Bone6 = 65535
Bone7 = 65535
if Mesh_Info_Arr2[a].Unk114==0 then	
if Mesh_Info_Arr[a].WeightCount == 1 do (
Bone1=Readshort	f#unsigned 
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
if Bone1<0 or Bone1>usedID then Bone1=65535		
)
if Mesh_Info_Arr2[a].Unk114!=0	then 
if Mesh_Info_Arr[a].WeightCount == 1 do (
Bone1 = readBEshort f
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
if Bone1<0 or Bone1>usedID then Bone1=65535		
)
if Mesh_Info_Arr2[a].Unk114==0 then	
if Mesh_Info_Arr[a].WeightCount == 2 do (
Bone1=Readshort	f#unsigned 
if Bone1<0 or Bone1>usedID then Bone1=65535	
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=Readshort	f#unsigned 
if Bone2<0 or Bone2>usedID then Bone2=65535		
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114!=0 then	
if Mesh_Info_Arr[a].WeightCount == 2 do (
Bone1=ReadBEshort	f
if Bone1<0 or Bone1>usedID then Bone1=65535	
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=ReadBEshort	f
if Bone2<0 or Bone2>usedID then Bone2=65535		
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114==0 then	
if Mesh_Info_Arr[a].WeightCount == 3 do (
Bone1=Readshort	f#unsigned 
if Bone1<0 or Bone1>usedID then Bone1=65535				
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=Readshort	f#unsigned  
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=Readshort	f#unsigned 
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114!=0 then	
if Mesh_Info_Arr[a].WeightCount == 3 do (
Bone1=ReadBEshort	f
if Bone1<0 or Bone1>usedID then Bone1=65535			
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=ReadBEshort	f 
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=ReadBEshort	f
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114==0 then	
if Mesh_Info_Arr[a].WeightCount == 4 do (
Bone1=Readshort	f#unsigned 
if Bone1<0 or Bone1>usedID then Bone1=65535				
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=Readshort	f#unsigned  
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=Readshort	f#unsigned 
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=Readshort	f#unsigned 
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114!=0 then	
if Mesh_Info_Arr[a].WeightCount == 4 do (
Bone1=ReadBEshort	f
if Bone1<0 or Bone1>usedID then Bone1=65535			
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=ReadBEshort	f 
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=ReadBEshort	f
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=ReadBEshort	f
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114==0 then	
if Mesh_Info_Arr[a].WeightCount == 5 do (
Bone1=Readshort	f#unsigned 
if Bone1<0 or Bone1>usedID then Bone1=65535				
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=Readshort	f#unsigned  
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=Readshort	f#unsigned 
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=Readshort	f#unsigned 
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
Bone5=Readshort	f#unsigned 
if Bone5<0 or Bone5>usedID then Bone5=65535			
fseek f 0x2#seek_cur	
Weight5 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114!=0 then	
if Mesh_Info_Arr[a].WeightCount == 5 do (
Bone1=ReadBEshort	f
if Bone1<0 or Bone1>usedID then Bone1=65535			
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=ReadBEshort	f 
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=ReadBEshort	f
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=ReadBEshort	f
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
Bone5=ReadBEshort	f
if Bone5<0 or Bone5>usedID then Bone5=65535			
fseek f 0x2#seek_cur	
Weight5 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114==0 then	
if Mesh_Info_Arr[a].WeightCount == 6 do (
Bone1=Readshort	f#unsigned 
if Bone1<0 or Bone1>usedID then Bone1=65535				
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=Readshort	f#unsigned  
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=Readshort	f#unsigned 
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=Readshort	f#unsigned 
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
Bone5=Readshort	f#unsigned 
if Bone5<0 or Bone5>usedID then Bone5=65535			
fseek f 0x2#seek_cur	
Weight5 = ReadBEfloat f
Bone6=Readshort	f#unsigned 
if Bone6<0 or Bone6>usedID then Bone6=65535			
fseek f 0x2#seek_cur	
Weight6 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114!=0 then	
if Mesh_Info_Arr[a].WeightCount == 6 do (
Bone1=ReadBEshort	f
if Bone1<0 or Bone1>usedID then Bone1=65535			
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=ReadBEshort	f 
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=ReadBEshort	f
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=ReadBEshort	f
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
Bone5=ReadBEshort	f
if Bone5<0 or Bone5>usedID then Bone5=65535			
fseek f 0x2#seek_cur	
Weight5 = ReadBEfloat f
Bone6=ReadBEshort	f
if Bone6<0 or Bone6>usedID then Bone6=65535			
fseek f 0x2#seek_cur	
Weight6 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114==0 then	
if Mesh_Info_Arr[a].WeightCount == 7 do (
Bone1=Readshort	f#unsigned 
if Bone1<0 or Bone1>usedID then Bone1=65535				
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=Readshort	f#unsigned  
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=Readshort	f#unsigned 
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=Readshort	f#unsigned 
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
Bone5=Readshort	f#unsigned 
if Bone5<0 or Bone5>usedID then Bone5=65535			
fseek f 0x2#seek_cur	
Weight5 = ReadBEfloat f
Bone6=Readshort	f#unsigned 
if Bone6<0 or Bone6>usedID then Bone6=65535			
fseek f 0x2#seek_cur	
Weight6 = ReadBEfloat f
Bone7=Readshort	f#unsigned 
if Bone7<0 or Bone7>usedID then Bone7=65535			
fseek f 0x2#seek_cur	
Weight7 = ReadBEfloat f
)
if Mesh_Info_Arr2[a].Unk114!=0 then	
if Mesh_Info_Arr[a].WeightCount == 7 do (
Bone1=ReadBEshort	f
if Bone1<0 or Bone1>usedID then Bone1=65535			
fseek f 0x2#seek_cur	
Weight1 = ReadBEfloat f
Bone2=ReadBEshort	f 
if Bone2<0 or Bone2>usedID then Bone2=65535			
fseek f 0x2#seek_cur	
Weight2 = ReadBEfloat f
Bone3=ReadBEshort	f
if Bone3<0 or Bone3>usedID then Bone3=65535			
fseek f 0x2#seek_cur	
Weight3 = ReadBEfloat f
Bone4=ReadBEshort	f
if Bone4<0 or Bone4>usedID then Bone4=65535			
fseek f 0x2#seek_cur	
Weight4 = ReadBEfloat f
Bone5=ReadBEshort	f
if Bone5<0 or Bone5>usedID then Bone5=65535			
fseek f 0x2#seek_cur	
Weight5 = ReadBEfloat f
Bone6=ReadBEshort	f
if Bone6<0 or Bone6>usedID then Bone6=65535			
fseek f 0x2#seek_cur	
Weight6 = ReadBEfloat f
Bone7=ReadBEshort	f
if Bone7<0 or Bone7>usedID then Bone7=65535			
fseek f 0x2#seek_cur	
Weight7 = ReadBEfloat f
)

w = (weight_data boneids:#() weights:#())
maxweight = 0		
if(Bone1 != 65535) then (
if(weight1 != 0) then	
   maxweight = maxweight + weight1
)	
if(Bone2 != 65535) then (
if(weight2 != 0) then		
   maxweight = maxweight + weight2
)
if(Bone3 != 65535) then (
if(weight3 != 0) then	
   maxweight = maxweight + weight3
)
if(Bone4 != 65535) then (
if(weigh4 != 0) then		
   maxweight = maxweight + weight4
)	
if(Bone5 != 65535) then (
if(weight5 != 0) then		
   maxweight = maxweight + weight5
)	
if(Bone6 != 65535) then (
if(weight6 != 0) then		
   maxweight = maxweight + weight6
)
if(Bone7 != 65535) then (
if(weight7 != 0) then		
   maxweight = maxweight + weight7
)	
if(maxweight != 0) then (
      if(Bone1 != 65535) then (
         w1 = weight1 as float
         append w.boneids (bone1 + 1)
         append w.weights w1
      )
      if(Bone2 != 65535) then (
         w2 = weight2 as float
         append w.boneids (bone2 + 1)
         append w.weights w2
      )
      if(Bone3 != 65535) then (
         w3 = weight3 as float
         append w.boneids (bone3 + 1)
         append w.weights w3
      )  
      if(Bone4 != 65535) then (
         w4 = weight4 as float
         append w.boneids (bone4 + 1)
         append w.weights w4
      )  
      if(Bone5 != 65535) then (
         w5 = weight5 as float
         append w.boneids (bone5 + 1)
         append w.weights w5
      )  	  
      if(Bone6 != 65535) then (
         w6 = weight6 as float
         append w.boneids (bone6 + 1)
         append w.weights w6
      )    
      if(Bone7 != 65535) then (
         w7 = weight7 as float
         append w.boneids (bone7 + 1)
         append w.weights w7
      )      
   )
append Weight_array w
)

fseek f Mesh_Info_Arr[a].FaceOff#seek_set
Ftmp = #()
for b = 1 to Mesh_Info_Arr[a].FaceSec Do (
FSize = ReadBElong f as float
FCount = ReadBElong f as float
FStart = (ReadBElong f + 8) as float
append Ftmp [FSize,FCount,FStart]
)
for b = 1 to Mesh_Info_Arr[a].FaceSec Do (
fseek f Ftmp[b].z#seek_set
FaceEnd = ((ftell f) + (2 * Ftmp[b].y))
StartDirection = 1
Face_array2 = #()
f1 = ReadBEword f + 1
f2 = ReadBEword f + 1
FaceDirection = StartDirection
do (
f3 = ReadBEword f
if (f3==0xFFFF) then (
f1 = ReadBEword f + 1
f2 = ReadBEword f + 1
FaceDirection = StartDirection   
) else (
f3 += 1
FaceDirection *= -1
if (f1!=f2)AND(f2!=f3)AND(f3!=f1) then (
append Face_array2 [(f1),(f2),(f3)]
if FaceDirection > 0 then append Face_array [(f1),(f2),(f3)]
else append Face_array [(f1),(f3),(f2)]
)
f1 = f2
f2 = f3
)
)while (ftell f) < (FaceEnd)
)

try(
msh = mesh vertices:Vert_array faces:Face_array
msh.numTVerts = UV_array.count
buildTVFaces msh
msh.name = Mesh_Info_Arr[a].Objname
for j = 1 to UV_array.count do setTVert msh j UV_array[j]
for j = 1 to Face_array.count do setTVFace msh j Face_array[j]
for j = 1 to Normal_array.count do setNormal msh j Normal_array[j]

max modify mode
select msh
skinMod = skin ()
addModifier msh skinMod
for i = 1 to Used_Bone_array.count do
(
	maxbone = BNArr[(Used_Bone_array[i])]
	if i != Used_Bone_array.count then 
		skinOps.addBone skinMod maxbone 0
	else
		skinOps.addBone skinMod maxbone 1
)
modPanel.setCurrentObject skinMod
for i = 1 to Vert_array.count do (
   w = Weight_array[i]
   bi = #() --bone index array
   wv = #() --weight value array
   
   for j = 1 to w.boneids.count do
   (
      boneid = w.boneids[j]
      weight = w.weights[j]
      append bi boneid
      append wv weight
   )   
   
   skinOps.ReplaceVertexWeights skinMod i bi wv
)
)catch(format "Wrong Skel or Messed Bones!!\n")
)

fclose f