home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 7920 / SwordsMan_01.7z / SwordsMan_Model.ms < prev   
Encoding:
Text File  |  2014-10-11  |  18.1 KB  |  774 lines

  1. if (heapSize < 200000) then
  2.         heapSize = 2000000 -- allow ~ 40 MB instead of just 7.5 MB. Prevents "Runtime Error: Out of scripter memory"
  3. fname = getOpenFileName \
  4. caption:"Open .ski from Mesh folder" \
  5. types:"SKI Mesh (*.ski)|*.ski" \
  6. historyCategory:"SKIObjectPresets"
  7. f = fopen fname "rb"
  8.  
  9. clearlistener()
  10. fn readHalfFloat fstream = (
  11.     hf=readshort fstream #unsigned
  12.     sign = bit.get hf 16
  13.     exponent = (bit.shift (bit.and hf (bit.hexasint "7C00")) -10) as integer - 16
  14.     fraction = bit.and hf (bit.hexasint "03FF")
  15.     if sign==true then sign = 1 else sign = 0
  16.     exponentF = exponent + 127
  17.     outputAsFloat = bit.or (bit.or (bit.shift fraction 13) \
  18.     (bit.shift exponentF 23)) (bit.shift sign 31)
  19.     return bit.intasfloat outputasfloat*2
  20.     )
  21.     
  22. fn readFixedString bstream fixedLen = (
  23. local str = ""
  24. for i = 1 to fixedLen do (
  25. str += bit.intAsChar (ReadByte bstream #unsigned))
  26. str
  27. )    
  28.  
  29. struct weight_data
  30. (
  31.     boneids,weights
  32. )
  33.  
  34. clearlistener()
  35.     
  36. BoneNamesArray = #()    
  37. fseek f 0x0 #seek_set
  38. MOXBIKSA=readFixedString f 8
  39. Version = ReadLong f
  40. numSkinObjext = ReadLong f
  41. numStaticObject = ReadLong f
  42. Unk1 = ReadLong f
  43. Unk2 = ReadLong f
  44. numTexture = ReadLong f
  45. numMaterial = ReadLong f
  46. numUsedBones = ReadLong f
  47. Unk3 = ReadLong f
  48. numSkeletonBones = ReadLong f
  49. fseek f 0x3C #seek_cur
  50. if Version==8 then fseek f 0x0 #seek_cur    
  51. if Version!=8 then    
  52. for a = 1 to numUsedBones Do (
  53. BoneNameSize = ReadLong f
  54. BName = readFixedString f BoneNameSize
  55. append BoneNamesArray BName    
  56. )
  57.  
  58.     for i = 1 to numTexture do (
  59.         texture_name_size = (readlong f)
  60.         texture_name = readFixedString f texture_name_size
  61.         )
  62.         
  63. if     numMaterial==1 then 
  64. if Version==9 then    
  65. (    
  66. Pos=ftell f        
  67. Check=readlong f
  68. if Check<100 then
  69. (
  70. fseek f Pos #seek_set    
  71. fseek f 0x63 #seek_cur    
  72. )
  73. if Check>100 then
  74. (    
  75. fseek f Pos #seek_set        
  76. (
  77.         MtlName = readFixedString f 11
  78.         fseek f 0x45 #seek_cur
  79. )
  80. )
  81. )
  82.  
  83. if     numMaterial==1 then
  84. if Version==10 then 
  85. (        
  86. MatId = readlong f    
  87. if MatId ==3 then
  88. (        fseek f 0x5F #seek_cur
  89. )        
  90. if MatId ==7 then
  91. (    
  92.         fseek f 0x67 #seek_cur
  93.         TexPathSize=readlong f
  94.         TexPath = readFixedString f TexPathSize
  95.         FF=readlong f
  96.         NSize = readlong f
  97.         Nname = readFixedString f NSize    
  98.         fseek f 0x4 #seek_cur
  99.         TexPathSize=readlong f
  100.         TexPath = readFixedString f TexPathSize
  101.         fseek f 0x8 #seek_cur    
  102. )
  103. if MatId ==8 then
  104. (    
  105.         fseek f 0x67 #seek_cur
  106.         TexPathSize=readlong f
  107.         TexPath = readFixedString f TexPathSize
  108.         FF=readlong f
  109.         NSize = readlong f
  110.         Nname = readFixedString f NSize    
  111.         fseek f 0x4 #seek_cur
  112.         TexPathSize=readlong f
  113.         TexPath = readFixedString f TexPathSize
  114.         fseek f 0x9 #seek_cur    
  115. )
  116. if MatId ==12 then
  117. (
  118.         fseek f 0x67 #seek_cur
  119.         TexPathSize=readlong f
  120.         TexPath = readFixedString f TexPathSize
  121.         FF=readlong f
  122.         NSize = readlong f
  123.         Nname = readFixedString f NSize    
  124.         fseek f 0x2A #seek_cur
  125.         TexPathSize=readlong f
  126.         TexPath = readFixedString f TexPathSize
  127.          fseek f 0x3D #seek_cur    
  128. )
  129. if MatId ==14 then
  130. (
  131.         fseek f 0x67 #seek_cur
  132.         TexPathSize=readlong f
  133.         TexPath = readFixedString f TexPathSize
  134.         if TexPathSize!=0 then (            
  135.         FF=readlong f
  136.         NSize = readlong f
  137.         Nname = readFixedString f NSize    
  138.         fseek f 0x2A #seek_cur
  139.         TexPathSize2=readlong f
  140.         TexPath = readFixedString f TexPathSize2
  141.         if TexPathSize2==0 then             
  142.         (
  143.          fseek f 0x46 #seek_cur            
  144.         TexPathSize3=readlong f
  145.         TexPath = readFixedString f TexPathSize3        
  146.         )    
  147.         if TexPathSize2!=0 then fseek f 0x4A #seek_cur
  148.         )
  149.         if TexPathSize==0 then (            
  150.         FF=readlong f
  151.         NSize = readlong f
  152.         Nname = readFixedString f NSize    
  153.         fseek f 0x2A #seek_cur
  154.         TexPathSize2=readlong f
  155.         TexPath = readFixedString f TexPathSize2
  156.         fseek f 0x39 #seek_cur    
  157.         TexPathSize3=readlong f
  158.         TexPath = readFixedString f TexPathSize3
  159.         fseek f 0xD #seek_cur            
  160. )
  161. )
  162. if MatId ==15 then
  163. (
  164.         fseek f 0x67 #seek_cur
  165.         TexPathSize=readlong f
  166.         TexPath = readFixedString f TexPathSize
  167.         if TexPathSize!=0 then (            
  168.         FF=readlong f
  169.         NSize = readlong f
  170.         Nname = readFixedString f NSize    
  171.         fseek f 0x2A #seek_cur
  172.         TexPathSize2=readlong f
  173.         TexPath = readFixedString f TexPathSize2
  174.         if TexPathSize2==0 then             
  175.         (
  176.          fseek f 0x46 #seek_cur            
  177.         TexPathSize3=readlong f
  178.         TexPath = readFixedString f TexPathSize3
  179.         fseek f 0x4 #seek_cur            
  180.         )    
  181.         if TexPathSize2!=0 then fseek f 0x4E #seek_cur
  182.         )
  183.         if TexPathSize==0 then (            
  184.         FF=readlong f
  185.         NSize = readlong f
  186.         Nname = readFixedString f NSize    
  187.         fseek f 0x2A #seek_cur
  188.         TexPathSize2=readlong f
  189.         TexPath = readFixedString f TexPathSize2
  190.         fseek f 0x39 #seek_cur    
  191.         TexPathSize3=readlong f
  192.         TexPath = readFixedString f TexPathSize3
  193.         fseek f 0x11 #seek_cur            
  194. )
  195. )
  196. if MatId ==16 then
  197. (
  198.         fseek f 0x67 #seek_cur
  199.         TexPathSize=readlong f
  200.         TexPath = readFixedString f TexPathSize
  201.         if TexPathSize==0 then (            
  202.         FF=readlong f
  203.         NSize = readlong f
  204.         Nname = readFixedString f NSize    
  205.         fseek f 0x2A #seek_cur
  206.         TexPathSize2=readlong f
  207.         TexPath = readFixedString f TexPathSize2
  208.         fseek f 0x39 #seek_cur    
  209.         TexPathSize3=readlong f
  210.         TexPath = readFixedString f TexPathSize3
  211.         fseek f 0x21 #seek_cur            
  212. )
  213.        if TexPathSize!=0 then (        
  214.         FF=readlong f
  215.         NSize = readlong f
  216.         Nname = readFixedString f NSize    
  217.         if NSize==0 then 
  218.         (
  219.         fseek f 0x4 #seek_cur
  220.         TexPathSize=readlong f
  221.         TexPath = readFixedString f TexPathSize
  222.         fseek f 0x22 #seek_cur    
  223.         TexPathSize3=readlong f    
  224.         TexPath = readFixedString f TexPathSize3
  225.         if TexPathSize3==0 then 
  226.         (
  227.         fseek f 0x46 #seek_cur    
  228.         TexPathSize4=readlong f    
  229.         TexPath = readFixedString f TexPathSize4    
  230.         fseek f 0x14 #seek_cur                        
  231.         )    
  232.         if TexPathSize3!=0 then  fseek f 0x5E #seek_cur        
  233.         )    
  234. )
  235. )
  236. if MatId ==19 then
  237. (
  238.         fseek f 0x7E #seek_cur
  239.         TexPathSize=readlong f
  240.         TexPath = readFixedString f TexPathSize
  241.         FF=readlong f
  242.         NSize = readlong f
  243.         Nname = readFixedString f NSize    
  244.         fseek f 0x2A #seek_cur
  245.         TexPathSize=readlong f
  246.         TexPath = readFixedString f TexPathSize
  247.          fseek f 0x37 #seek_cur    
  248. )
  249. )
  250.  
  251. if     numMaterial!=1 then
  252. if Version==10 then        
  253. for i = 1 to numMaterial do (
  254. -- for i = 1 to 2 do (
  255. MatId = readlong f
  256. if MatId ==3 then
  257. (        fseek f 0x5F #seek_cur
  258. )    
  259. if MatId ==7 then
  260. (    
  261.         fseek f 0x67 #seek_cur
  262.         TexPathSize=readlong f
  263.         TexPath = readFixedString f TexPathSize
  264.         FF=readlong f
  265.         NSize = readlong f
  266.         Nname = readFixedString f NSize    
  267.         fseek f 0x4 #seek_cur
  268.         TexPathSize=readlong f
  269.         TexPath = readFixedString f TexPathSize
  270.         fseek f 0x8 #seek_cur    
  271. )
  272. if MatId ==8 then
  273. (    
  274.         fseek f 0x67 #seek_cur
  275.         TexPathSize=readlong f
  276.         TexPath = readFixedString f TexPathSize
  277.         FF=readlong f
  278.         NSize = readlong f
  279.         Nname = readFixedString f NSize    
  280.         fseek f 0x4 #seek_cur
  281.         TexPathSize=readlong f
  282.         TexPath = readFixedString f TexPathSize
  283.         fseek f 0x9 #seek_cur    
  284. )
  285. if MatId ==12 then
  286. (
  287.         fseek f 0x67 #seek_cur
  288.         TexPathSize=readlong f
  289.         TexPath = readFixedString f TexPathSize
  290.         FF=readlong f
  291.         NSize = readlong f
  292.         Nname = readFixedString f NSize    
  293.         fseek f 0x2A #seek_cur
  294.         TexPathSize=readlong f
  295.         TexPath = readFixedString f TexPathSize
  296.          fseek f 0x3D #seek_cur    
  297. )
  298. if MatId ==14 then
  299. (
  300.         fseek f 0x67 #seek_cur
  301.         TexPathSize=readlong f
  302.         TexPath = readFixedString f TexPathSize
  303.         if TexPathSize!=0 then (            
  304.         FF=readlong f
  305.         NSize = readlong f
  306.         Nname = readFixedString f NSize
  307.         fseek f 0x4 #seek_cur    
  308.         PosFF=ftell f    
  309.         FFCheck=readlong f
  310.         if FFCheck!=0 then (
  311.         fseek f PosFF #seek_set                 
  312.         TexPathSize2=readlong f
  313.         TexPath = readFixedString f TexPathSize2
  314.         fseek f 0x70 #seek_cur    
  315.         Print ("!!!!! @ 0x"+((bit.intAsHex(ftell f))as string))        
  316.         )
  317.         if FFCheck==0 then 
  318.         (
  319.         fseek f 0x22 #seek_cur     
  320.         TexPathSize2=readlong f
  321.         TexPath = readFixedString f TexPathSize2
  322.         if TexPathSize2!=0 then             
  323.         (
  324.          fseek f 0x46 #seek_cur            
  325.         TexPathSize3=readlong f
  326.         TexPath = readFixedString f TexPathSize3    
  327.         readlong f    
  328.         )    
  329.         if TexPathSize2==0 then (
  330.         fseek f 0x42 #seek_cur    
  331.         TexPathSize3=readlong f
  332.         TexPath = readFixedString f TexPathSize3    
  333.         readlong f        
  334.         )    
  335.         )    
  336.         )
  337.         if TexPathSize==0 then (            
  338.         FF=readlong f
  339.         NSize = readlong f
  340.         Nname = readFixedString f NSize    
  341.         fseek f 0x2A #seek_cur
  342.         TexPathSize2=readlong f
  343.         TexPath = readFixedString f TexPathSize2
  344.         fseek f 0x39 #seek_cur    
  345.         TexPathSize3=readlong f
  346.         TexPath = readFixedString f TexPathSize3
  347.         fseek f 0xD #seek_cur            
  348. )
  349. )
  350. if MatId ==15 then
  351. (
  352.         fseek f 0x67 #seek_cur
  353.         TexPathSize=readlong f
  354.         TexPath = readFixedString f TexPathSize
  355.         if TexPathSize!=0 then (            
  356.         FF=readlong f
  357.         NSize = readlong f
  358.         Nname = readFixedString f NSize
  359.         fseek f 0x4 #seek_cur    
  360.         PosFF=ftell f    
  361.         FFCheck=readlong f
  362.         if FFCheck!=0 then (
  363.         fseek f PosFF #seek_set                 
  364.         TexPathSize2=readlong f
  365.         TexPath = readFixedString f TexPathSize2
  366.         fseek f 0x74 #seek_cur    
  367.         Print ("!!!!! @ 0x"+((bit.intAsHex(ftell f))as string))        
  368.         )
  369.         if FFCheck==0 then 
  370.         (
  371.         fseek f 0x22 #seek_cur     
  372.         TexPathSize2=readlong f
  373.         TexPath = readFixedString f TexPathSize2
  374.         if TexPathSize2!=0 then             
  375.         (
  376.          fseek f 0x46 #seek_cur            
  377.         TexPathSize3=readlong f
  378.         TexPath = readFixedString f TexPathSize3    
  379.         readlong f    
  380.         )    
  381.         if TexPathSize2==0 then (
  382.         fseek f 0x46 #seek_cur    
  383.         TexPathSize3=readlong f
  384.         TexPath = readFixedString f TexPathSize3    
  385.         readlong f        
  386.         )    
  387.         )    
  388.         )
  389.         if TexPathSize==0 then (            
  390.         FF=readlong f
  391.         NSize = readlong f
  392.         Nname = readFixedString f NSize    
  393.         fseek f 0x2A #seek_cur
  394.         TexPathSize2=readlong f
  395.         TexPath = readFixedString f TexPathSize2
  396.         fseek f 0x39 #seek_cur    
  397.         TexPathSize3=readlong f
  398.         TexPath = readFixedString f TexPathSize3
  399.         fseek f 0x11 #seek_cur            
  400. )
  401. )
  402. if MatId ==16 then
  403. (
  404.         fseek f 0x67 #seek_cur
  405.         TexPathSize=readlong f
  406.         TexPath = readFixedString f TexPathSize
  407.         if TexPathSize==0 then (            
  408.         FF=readlong f
  409.         NSize = readlong f
  410.         Nname = readFixedString f NSize    
  411.         fseek f 0x2A #seek_cur
  412.         TexPathSize2=readlong f
  413.         TexPath = readFixedString f TexPathSize2
  414.         fseek f 0x39 #seek_cur    
  415.         TexPathSize3=readlong f
  416.         TexPath = readFixedString f TexPathSize3
  417.         fseek f 0x21 #seek_cur            
  418. )
  419.        if TexPathSize!=0 then (        
  420.         FF=readlong f
  421.         NSize = readlong f
  422.         Nname = readFixedString f NSize    
  423.         if NSize==0 then 
  424.         (
  425.         fseek f 0x4 #seek_cur
  426.         TexPathSize=readlong f
  427.         TexPath = readFixedString f TexPathSize
  428.         fseek f 0x22 #seek_cur    
  429.         TexPathSize3=readlong f    
  430.         TexPath = readFixedString f TexPathSize3
  431.         if TexPathSize3==0 then 
  432.         (
  433.         fseek f 0x46 #seek_cur    
  434.         TexPathSize4=readlong f    
  435.         TexPath = readFixedString f TexPathSize4    
  436.         fseek f 0x14 #seek_cur                        
  437.         )    
  438.         if TexPathSize3!=0 then  fseek f 0x5E #seek_cur        
  439.         )    
  440. )
  441. )
  442. if MatId ==19 then
  443. (
  444.         fseek f 0x7E #seek_cur
  445.         TexPathSize=readlong f
  446.         TexPath = readFixedString f TexPathSize
  447.         FF=readlong f
  448.         NSize = readlong f
  449.         Nname = readFixedString f NSize    
  450.         fseek f 0x2A #seek_cur
  451.         TexPathSize=readlong f
  452.         TexPath = readFixedString f TexPathSize
  453.          fseek f 0x37 #seek_cur    
  454. )
  455. )
  456.         
  457. Print ("Mat End @ 0x"+((bit.intAsHex(ftell f))as string))    
  458.  
  459.         
  460. for a = 1 to numSkinObjext Do (
  461.     
  462. ModelNameSize = ReadLong f
  463. ModelName = readFixedString f ModelNameSize
  464. TextureID = ReadLong f
  465. MatlID = ReadLong f
  466. numVerts = ReadLong f
  467. numFaces = ReadLong f
  468.     
  469. vertArray = #()
  470. Facearray = #()    
  471. UV_array = #()
  472. Weight_array =#()
  473.     
  474. Print ("Vertex Start @ 0x"+((bit.intAsHex(ftell f))as string))        
  475.     
  476. if Version==9 then        
  477. for x = 1 to numVerts Do (
  478. vx = Readfloat f
  479. vy = Readfloat f
  480. vz = Readfloat f
  481.     
  482. weight1 = Readfloat f
  483. weight2 = Readfloat f
  484. weight3 = Readfloat f
  485. weight4 = 0
  486.     
  487. bone1 = readbyte f #unsigned    
  488. bone2 = readbyte f #unsigned    
  489. bone3 = readbyte f #unsigned    
  490. bone4 = readbyte f #unsigned    
  491.     
  492. n1= Readfloat f
  493. n2 = Readfloat f
  494. n3 = Readfloat f    
  495.     
  496. tu=ReadFloat f    
  497. tv=ReadFloat f*-1
  498.  
  499. w = (weight_data boneids:#() weights:#())
  500. maxweight = 0
  501. if(weight1 != 0) then
  502.    maxweight = maxweight + weight1
  503. if(weight2 != 0) then
  504.    maxweight = maxweight + weight2
  505. if(weight3 != 0) then
  506.    maxweight = maxweight + weight3
  507. if(weight4 != 0) then
  508.    maxweight = maxweight + weight4
  509.  
  510.  
  511. if(maxweight != 0) then (
  512.       if(weight1 != 0) then (
  513.          w1 = weight1 as float
  514.          append w.boneids (bone1 + 1)
  515.          append w.weights (w1)
  516.       )
  517.       if(weight2 != 0) then (
  518.          w2 = weight2 as float
  519.          append w.boneids (bone2 + 1)
  520.          append w.weights (w2)
  521.       )
  522.       if(weight3 != 0) then (
  523.          w3 = weight3 as float
  524.          append w.boneids (bone3 + 1)
  525.          append w.weights (w3)
  526.       )
  527.       if(weight4 != 0) then (
  528.          w4 = weight4 as float
  529.          append w.boneids (bone4 + 1)
  530.         append w.weights (w4)
  531.       )      
  532.    )
  533. append Weight_array w               
  534. append vertArray ([-vx,-vz,vy]*100)
  535. append UV_array [tu,tv,0]     
  536. )        
  537.     
  538. if Version==10 then        
  539. for x = 1 to numVerts Do (
  540. vx = Readfloat f
  541. vy = Readfloat f
  542. vz = Readfloat f
  543.     
  544. weight1 = Readfloat f
  545. weight2 = Readfloat f
  546. weight3 = Readfloat f
  547. weight4 = 0
  548.     
  549. bone1 = readbyte f #unsigned    
  550. bone2 = readbyte f #unsigned    
  551. bone3 = readbyte f #unsigned    
  552. bone4 = readbyte f #unsigned    
  553.     
  554. n1= Readfloat f
  555. n2 = Readfloat f
  556. n3 = Readfloat f    
  557.     
  558. tu=ReadFloat f    
  559. tv=ReadFloat f*-1
  560.  
  561. Unk1 = Readfloat f    
  562.  
  563. w = (weight_data boneids:#() weights:#())
  564. maxweight = 0
  565. if(weight1 != 0) then
  566.    maxweight = maxweight + weight1
  567. if(weight2 != 0) then
  568.    maxweight = maxweight + weight2
  569. if(weight3 != 0) then
  570.    maxweight = maxweight + weight3
  571. if(weight4 != 0) then
  572.    maxweight = maxweight + weight4
  573.  
  574.  
  575. if(maxweight != 0) then (
  576.       if(weight1 != 0) then (
  577.          w1 = weight1 as float
  578.          append w.boneids (bone1 + 1)
  579.          append w.weights (w1)
  580.       )
  581.       if(weight2 != 0) then (
  582.          w2 = weight2 as float
  583.          append w.boneids (bone2 + 1)
  584.          append w.weights (w2)
  585.       )
  586.       if(weight3 != 0) then (
  587.          w3 = weight3 as float
  588.          append w.boneids (bone3 + 1)
  589.          append w.weights (w3)
  590.       )
  591.       if(weight4 != 0) then (
  592.          w4 = weight4 as float
  593.          append w.boneids (bone4 + 1)
  594.         append w.weights (w4)
  595.       )      
  596.    )
  597. append Weight_array w               
  598. append vertArray ([-vx,-vz,vy]*100)
  599. append UV_array [tu,tv,0]     
  600. )    
  601.  
  602. Print ("Face Start @ 0x"+((bit.intAsHex(ftell f))as string))    
  603.  
  604. for x = 1 to (numFaces/3) do 
  605. (
  606. f1 = (Readshort f #unsigned + 1) 
  607. f2 = (Readshort f #unsigned + 1) 
  608. f3 = (Readshort f #unsigned + 1) 
  609. append Facearray [f3,f2,f1]
  610. )
  611.  
  612. Print ("Model End @ 0x"+((bit.intAsHex(ftell f))as string))    
  613.  
  614. msh = mesh vertices:vertArray faces:faceArray
  615. msh.numTVerts = UV_array.count
  616. msh.name=ModelName
  617. buildTVFaces msh
  618. for j = 1 to UV_array.count do setTVert msh j UV_array[j]
  619. for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
  620. msh.displayByLayer = false
  621. msh.backfacecull = true
  622. msh.wirecolor = (color 230 200 210)
  623.  
  624. if Version==8 then
  625. (                
  626. try(
  627. max modify mode
  628. select msh
  629. skinMod = skin ()
  630. addModifier msh skinMod
  631. for i = 1 to BNArr.count do
  632. (
  633.     maxbone = BNArr[i] 
  634.     if i != BNArr.count then 
  635.         skinOps.addBone skinMod maxbone 0
  636.     else
  637.         skinOps.addBone skinMod maxbone 1
  638. )
  639. modPanel.setCurrentObject skinMod
  640. for i = 1 to (numVerts) do (
  641.    w = Weight_array[i]
  642.    bi = #() --bone index array
  643.    wv = #() --weight value array
  644.    
  645.    for j = 1 to w.boneids.count do
  646.    (
  647.       boneid = w.boneids[j]
  648.       weight = w.weights[j]
  649.       append bi boneid
  650.       append wv weight
  651.    )   
  652.    
  653.    skinOps.ReplaceVertexWeights skinMod i bi wv
  654.    
  655. )
  656. )catch(format "Failed - New VertType!!!\n")
  657. )
  658.  
  659. if Version!=8 then
  660. (    
  661. try(
  662. max modify mode
  663. select msh
  664. skinMod = skin ()
  665. addModifier msh skinMod    
  666. for i = 1 to numUsedBones do
  667. (
  668.     maxbone = getnodebyname BoneNamesArray[i] 
  669.     if i != numUsedBones then 
  670.         skinOps.addBone skinMod maxbone 0
  671.     else
  672.         skinOps.addBone skinMod maxbone 1
  673. )
  674. modPanel.setCurrentObject skinMod
  675. for i = 1 to (numVerts) do (
  676.    w = Weight_array[i]
  677.    bi = #() --bone index array
  678.    wv = #() --weight value array
  679.    
  680.    for j = 1 to w.boneids.count do
  681.    (
  682.       boneid = w.boneids[j]
  683.       weight = w.weights[j]
  684.       append bi boneid
  685.       append wv weight
  686.    )   
  687.    
  688.    skinOps.ReplaceVertexWeights skinMod i bi wv
  689.    
  690. )
  691. )catch(format "Failed - New VertType!!!\n")
  692. )
  693. )
  694.   
  695. for a = 1 to numStaticObject Do (
  696.     
  697. ModelNameSize = ReadLong f
  698. ModelName = readFixedString f ModelNameSize
  699. Unk1 = ReadLong f    
  700. TextureID = ReadLong f
  701. MatlID = ReadLong f
  702. numVerts = ReadLong f
  703. numFaces = ReadLong f
  704.     
  705. vertArray = #()
  706. Facearray = #()    
  707. UV_array = #()
  708.     
  709. Print ("Vertex Start @ 0x"+((bit.intAsHex(ftell f))as string))    
  710.  
  711. if Version==9 then    
  712. for x = 1 to numVerts Do (
  713.     
  714. vx = Readfloat f
  715. vy = Readfloat f
  716. vz = Readfloat f
  717.     
  718. n1= Readfloat f
  719. n2 = Readfloat f
  720. n3 = Readfloat f    
  721.  
  722. tu=ReadFloat f    
  723. tv=ReadFloat f*-1    
  724.     
  725. append vertArray ([-vx,-vz,vy]*100)
  726. append UV_array [tu,tv,0]     
  727. )    
  728.     
  729. if Version==10 then    
  730. for x = 1 to numVerts Do (
  731.     
  732. vx = Readfloat f
  733. vy = Readfloat f
  734. vz = Readfloat f
  735.     
  736. n1= Readfloat f
  737. n2 = Readfloat f
  738. n3 = Readfloat f    
  739.  
  740. tu=ReadFloat f    
  741. tv=ReadFloat f*-1    
  742.     
  743. Unk1=ReadFloat f        
  744.     
  745. append vertArray ([-vx,-vz,vy]*100)
  746. append UV_array [tu,tv,0]     
  747. )    
  748.  
  749. Print ("Face Start @ 0x"+((bit.intAsHex(ftell f))as string))    
  750.  
  751. for x = 1 to (numFaces/3) do 
  752. (
  753. f1 = (Readshort f #unsigned + 1) 
  754. f2 = (Readshort f #unsigned + 1) 
  755. f3 = (Readshort f #unsigned + 1) 
  756. append Facearray [f3,f2,f1]
  757. )
  758.  
  759. try(
  760. msh = mesh vertices:vertArray faces:faceArray
  761. msh.numTVerts = UV_array.count
  762. msh.name=ModelName    
  763. buildTVFaces msh
  764. for j = 1 to UV_array.count do setTVert msh j UV_array[j]
  765. for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
  766. msh.displayByLayer = false
  767. msh.backfacecull = true
  768. msh.wirecolor = (color 230 200 210)
  769.  
  770. )catch(format "Failed - Static Mesh Error!!!\n")
  771. )
  772.  
  773. fclose f
  774.