home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 10794 / Killer_Instinct_UPD1.7z / Killer_Instinct_UPD1.ms
Encoding:
Text File  |  2016-04-19  |  7.3 KB  |  336 lines

  1. if (heapSize < 20000000) then
  2.     heapSize = 200000000
  3. fname = getOpenFileName \
  4. caption:"Open .kimesh from Mesh folder" \
  5. types:"Killer Instinct Meshes (*.kimesh)|*.kimesh" \
  6. historyCategory:"KIObjectPresets"
  7. f = fopen fname "rb"
  8.  
  9. clearlistener()    
  10.  
  11. fn ReadHalfFloat fstream = 
  12.     (
  13.     hf=readshort fstream
  14.     sign = bit.get hf 16
  15.     exponent = (bit.shift (bit.and hf (bit.hexasint "7C00")) -10) as integer - 16
  16.     fraction = bit.and hf (bit.hexasint "03FF")
  17.     if sign==true then sign = 1 else sign = 0
  18.     exponentF = exponent + 127
  19.     outputAsFloat = bit.or (bit.or (bit.shift fraction 13) \
  20.     (bit.shift exponentF 23)) (bit.shift sign 31)
  21.     return bit.intasfloat outputasfloat*2
  22. )
  23.  
  24. fn readFixedString bstream fixedLen = (
  25. local str = ""
  26. for i = 1 to fixedLen do (
  27. str += bit.intAsChar (ReadByte bstream #unsigned))
  28. str
  29. )
  30.  
  31. struct weight_data
  32. (
  33.    boneids,weights
  34. )
  35.     
  36. struct Mesh_Info_Struct
  37. (
  38. VertCount, FaceCount, FaceStride, UVType
  39. )    
  40.     
  41. struct Mesh_Info_Struct2
  42. (
  43. VertStride, VertOff, WStride, WOff     
  44. )    
  45.  
  46. clearlistener()
  47.  
  48. --------------------------------------------------------------------------------------------    
  49.     
  50. FaceStart=#() 
  51. VertStart=#() 
  52. WeightStart=#() 
  53.  
  54. fseek f 0x8 #seek_set    
  55. OffStride=readlong f    
  56. fseek f 0xDC #seek_set    
  57. for i=1 to 1 do (
  58. getPos = ftell f + 80
  59. append FaceStart (readlong f+(OffStride+12))    
  60. fseek f getPos #seek_set        
  61. )    
  62. for i=1 to 1 do (
  63. getPos = ftell f + 80
  64. append VertStart (readlong f+(OffStride+12))    
  65. fseek f getPos #seek_set        
  66. )    
  67. for i=1 to 1 do (
  68. getPos = ftell f + 80
  69. append WeightStart (readlong f+(OffStride+12))    
  70. fseek f getPos #seek_set        
  71. )    
  72.  
  73. fseek f 0x25C #seek_set    
  74. MeshCount=readlong f    
  75. MatSize=readlong f    
  76. fseek f 0x380#seek_set    
  77. OffVertInfo=readlong f    
  78.     
  79. fseek f (OffStride+(MatSize+94)) #seek_set    
  80.  
  81. Print ("Mesh Info Start @ 0x"+((bit.intAsHex(ftell f))as string))    
  82.  
  83. Mesh_Info_Array=#()
  84.     
  85. Stride=0
  86. if MeshCount>1 then Stride=432
  87. if MeshCount<=1 then Stride=358
  88. for i=1 to MeshCount do (
  89. getPos = ftell f + Stride        
  90. fseek f 0x16 #seek_cur    
  91. UVType = (readlong f)    
  92. FaceStride = (readlong f)    
  93. FaceCount = (readlong f)
  94. VertCount = (readlong f)    
  95. fseek f getPos #seek_set    
  96. append Mesh_Info_Array (Mesh_Info_Struct VertCount:VertCount FaceCount:FaceCount FaceStride:FaceStride UVType: UVType )    
  97. )    
  98.  
  99. Print ("Mesh Info End @ 0x"+((bit.intAsHex(ftell f))as string))    
  100.     
  101. -------------------------------------------------------------------------------------------------------------------
  102.         
  103. fseek f (OffStride+(OffVertInfo+12)) #seek_set
  104.  
  105. -----------------------------------------------------------------------------------------------------------------
  106.         
  107. Mesh_Info_Array2=#()
  108.     
  109. for i=1 to MeshCount do (
  110. getPos = ftell f + 80    
  111. VertStride = (readlong f)    
  112. VertOff = (readlong f)    
  113. fseek f 0x20 #seek_cur    
  114. WStride = (readlong f)    
  115. WOff = (readlong f)        
  116. fseek f getPos #seek_set    
  117. append Mesh_Info_Array2 (Mesh_Info_Struct2 VertStride:VertStride VertOff:VertOff WStride:WStride WOff:WOff)        
  118. )    
  119.  
  120. print Mesh_Info_Array
  121. print Mesh_Info_Array2
  122.  
  123. ---------------------------------------------------------------------------------------------------------------    
  124.  
  125. for i=1 to MeshCount do (    
  126.     
  127. FaceArray=#()
  128. vertArray=#()
  129. UV_array=#()
  130. Weight_array=#()        
  131.  
  132. FStride=(Mesh_Info_Array[i].FaceStride*2)    
  133.  
  134. fseek f (FaceStart[1]+FStride) #seek_set        
  135.     
  136. Print ("Face Start @ 0x"+((bit.intAsHex(ftell f))as string))    
  137.     
  138. for x = 1 to Mesh_Info_Array[i].FaceCount do (
  139. fa=(readshort f #unsigned+1)
  140. fb=(readshort f #unsigned+1)
  141. fc=(readshort f #unsigned+1) 
  142. append FaceArray[fc,fb,fa]    
  143. )    
  144.  
  145. Print ("Face End @ 0x"+((bit.intAsHex(ftell f))as string))
  146.  
  147. fseek f (VertStart[1]+(Mesh_Info_Array2[i].VertOff)) #seek_set    
  148.     
  149. Print ("Vertex Start @ 0x"+((bit.intAsHex(ftell f))as string))
  150.     
  151. for x = 1 to Mesh_Info_Array[i].VertCount do(
  152.  
  153. vx=readfloat f
  154. vy=readfloat f
  155. vz=readfloat f
  156.  
  157. tu=ReadLong f    
  158. tv=ReadLong f    
  159.     
  160. append VertArray([vx,-vz,vy]*100)
  161. )
  162.     
  163. Print ("Vertex End @ 0x"+((bit.intAsHex(ftell f))as string))
  164.     
  165. fseek f (WeightStart[1]+(Mesh_Info_Array2[i].WOff)) #seek_set        
  166.     
  167. Print ("Weights Start @ 0x"+((bit.intAsHex(ftell f))as string))    
  168.     
  169. if Mesh_Info_Array2[i].WStride==8 then     
  170. if Mesh_Info_Array[i].UVType==1552 then     
  171. for x = 1 to Mesh_Info_Array[i].VertCount do(
  172.  
  173. tu=ReadShort f    
  174. tv=ReadShort f*-1        
  175.     
  176. readlong f    
  177.         
  178. append UV_array([tu,tv,0]/32767)    
  179. )    
  180.  
  181. if Mesh_Info_Array2[i].WStride==8 then     
  182. if Mesh_Info_Array[i].UVType==1584 then     
  183. for x = 1 to Mesh_Info_Array[i].VertCount do(
  184.  
  185. tu=ReadShort f    
  186. tv=ReadShort f*-1        
  187.     
  188. readlong f    
  189.         
  190. append UV_array([tu,tv,0]/32767)    
  191. )    
  192.  
  193. if Mesh_Info_Array2[i].WStride==8 then 
  194. if Mesh_Info_Array[i].UVType==1776 then     
  195. for x = 1 to Mesh_Info_Array[i].VertCount do(
  196.  
  197. tu=ReadFloat f    
  198. tv=ReadFloat f*-1        
  199.  
  200. append UV_array([tu,tv,0])    
  201. )    
  202.  
  203. if Mesh_Info_Array2[i].WStride==12 then 
  204. if Mesh_Info_Array[i].UVType==1648 then     
  205. for x = 1 to Mesh_Info_Array[i].VertCount do(
  206.  
  207. tu=ReadShort f    
  208. tv=ReadShort f*-1        
  209.     
  210. readlong f    
  211. readlong f        
  212.     
  213. append UV_array([tu,tv,0]/32767)    
  214. )    
  215.  
  216. if Mesh_Info_Array2[i].WStride==12 then     
  217. if Mesh_Info_Array[i].UVType==1776 then     
  218. for x = 1 to Mesh_Info_Array[i].VertCount do(
  219.  
  220. tu=ReadShort f    
  221. tv=ReadShort f*-1        
  222.     
  223. readlong f    
  224. readlong f        
  225.     
  226. append UV_array([tu,tv,0]/32767)    
  227. )    
  228.  
  229. if Mesh_Info_Array2[i].WStride==12 then 
  230. if Mesh_Info_Array[i].UVType==1584 then     
  231. for x = 1 to Mesh_Info_Array[i].VertCount do(
  232.  
  233. tu=ReadFloat f    
  234. tv=ReadFloat f*-1        
  235.  
  236. readlong f        
  237.     
  238. append UV_array([tu,tv,0])    
  239. )    
  240.  
  241. if Mesh_Info_Array2[i].WStride==12 then 
  242. if Mesh_Info_Array[i].UVType==1552 then     
  243. for x = 1 to Mesh_Info_Array[i].VertCount do(
  244.  
  245. tu=ReadFloat f    
  246. tv=ReadFloat f*-1        
  247.  
  248. readlong f        
  249.     
  250. append UV_array([tu,tv,0])    
  251. )    
  252.  
  253. if Mesh_Info_Array2[i].WStride==16 then     
  254. if Mesh_Info_Array[i].UVType==1264 then     
  255. for x = 1 to Mesh_Info_Array[i].VertCount do(
  256.  
  257. tu=ReadFloat f    
  258. tv=ReadFloat f*-1        
  259.  
  260. readlong f    
  261. readlong f    
  262.     
  263. append UV_array([tu,tv,0])    
  264. )    
  265.  
  266. if Mesh_Info_Array2[i].WStride==16 then     
  267. if Mesh_Info_Array[i].UVType==1552 then     
  268. for x = 1 to Mesh_Info_Array[i].VertCount do(
  269.  
  270. tu=ReadShort f    
  271. tv=ReadShort f*-1        
  272.     
  273. readlong f    
  274. readlong f    
  275. readlong f    
  276.     
  277. append UV_array([tu,tv,0]/32767)    
  278. )    
  279.  
  280. if Mesh_Info_Array2[i].WStride==16 then 
  281. if Mesh_Info_Array[i].UVType==1776 then     
  282. for x = 1 to Mesh_Info_Array[i].VertCount do(
  283.  
  284. tu=ReadFloat f    
  285. tv=ReadFloat f*-1        
  286.  
  287. readlong f    
  288. readlong f    
  289.     
  290. append UV_array([tu,tv,0])    
  291. )    
  292.  
  293. if Mesh_Info_Array2[i].WStride==24 then 
  294. if Mesh_Info_Array[i].UVType==1776 then     
  295. for x = 1 to Mesh_Info_Array[i].VertCount do(
  296.  
  297. tu=ReadFloat f    
  298. tv=ReadFloat f*-1        
  299.  
  300. readlong f    
  301. readlong f    
  302. readlong f        
  303. readlong f    
  304.     
  305. append UV_array([tu,tv,0])    
  306. )    
  307.  
  308. if Mesh_Info_Array2[i].WStride==24 then 
  309. if Mesh_Info_Array[i].UVType==1648 then     
  310. for x = 1 to Mesh_Info_Array[i].VertCount do(
  311.  
  312. tu=ReadFloat f    
  313. tv=ReadFloat f*-1        
  314.  
  315. readlong f    
  316. readlong f    
  317. readlong f        
  318. readlong f    
  319.     
  320. append UV_array([tu,tv,0])    
  321. )    
  322.  
  323. Print ("Weights End @ 0x"+((bit.intAsHex(ftell f))as string))
  324.  
  325. Try(    
  326. msh = mesh vertices:vertArray faces:faceArray
  327. msh.numTVerts = UV_array.count
  328. buildTVFaces msh
  329. msh.name=("Killer_Instinct_MDL"+("_"+i as string))
  330. for j = 1 to UV_array.count do setTVert msh j UV_array[j]
  331. for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
  332. msh.wirecolor = (color 230 200 210)    
  333. )catch(format "Import Error!!!\n")
  334. )
  335.  
  336. fclose f