home *** CD-ROM | disk | FTP | other *** search
- if (heapSize < 20000000) then
- heapSize = 200000000
- fname = getOpenFileName \
- caption:"Open .kimesh from Mesh folder" \
- types:"Killer Instinct Meshes (*.kimesh)|*.kimesh" \
- historyCategory:"KIObjectPresets"
- f = fopen fname "rb"
-
- clearlistener()
-
- fn ReadHalfFloat fstream =
- (
- hf=readshort fstream
- sign = bit.get hf 16
- exponent = (bit.shift (bit.and hf (bit.hexasint "7C00")) -10) as integer - 16
- fraction = bit.and hf (bit.hexasint "03FF")
- if sign==true then sign = 1 else sign = 0
- exponentF = exponent + 127
- outputAsFloat = bit.or (bit.or (bit.shift fraction 13) \
- (bit.shift exponentF 23)) (bit.shift sign 31)
- return bit.intasfloat outputasfloat*2
- )
-
- 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
- (
- VertCount, FaceCount, FaceStride, UVType
- )
-
- struct Mesh_Info_Struct2
- (
- VertStride, VertOff, WStride, WOff
- )
-
- clearlistener()
-
- --------------------------------------------------------------------------------------------
-
- FaceStart=#()
- VertStart=#()
- WeightStart=#()
-
- fseek f 0x8 #seek_set
- OffStride=readlong f
- fseek f 0xDC #seek_set
- for i=1 to 1 do (
- getPos = ftell f + 80
- append FaceStart (readlong f+(OffStride+12))
- fseek f getPos #seek_set
- )
- for i=1 to 1 do (
- getPos = ftell f + 80
- append VertStart (readlong f+(OffStride+12))
- fseek f getPos #seek_set
- )
- for i=1 to 1 do (
- getPos = ftell f + 80
- append WeightStart (readlong f+(OffStride+12))
- fseek f getPos #seek_set
- )
-
- fseek f 0x25C #seek_set
- MeshCount=readlong f
- MatSize=readlong f
- fseek f 0x380#seek_set
- OffVertInfo=readlong f
-
- fseek f (OffStride+(MatSize+94)) #seek_set
-
- Print ("Mesh Info Start @ 0x"+((bit.intAsHex(ftell f))as string))
-
- Mesh_Info_Array=#()
-
- Stride=0
- if MeshCount>1 then Stride=432
- if MeshCount<=1 then Stride=358
- for i=1 to MeshCount do (
- getPos = ftell f + Stride
- fseek f 0x16 #seek_cur
- UVType = (readlong f)
- FaceStride = (readlong f)
- FaceCount = (readlong f)
- VertCount = (readlong f)
- fseek f getPos #seek_set
- append Mesh_Info_Array (Mesh_Info_Struct VertCount:VertCount FaceCount:FaceCount FaceStride:FaceStride UVType: UVType )
- )
-
- Print ("Mesh Info End @ 0x"+((bit.intAsHex(ftell f))as string))
-
- -------------------------------------------------------------------------------------------------------------------
-
- fseek f (OffStride+(OffVertInfo+12)) #seek_set
-
- -----------------------------------------------------------------------------------------------------------------
-
- Mesh_Info_Array2=#()
-
- for i=1 to MeshCount do (
- getPos = ftell f + 80
- VertStride = (readlong f)
- VertOff = (readlong f)
- fseek f 0x20 #seek_cur
- WStride = (readlong f)
- WOff = (readlong f)
- fseek f getPos #seek_set
- append Mesh_Info_Array2 (Mesh_Info_Struct2 VertStride:VertStride VertOff:VertOff WStride:WStride WOff:WOff)
- )
-
- print Mesh_Info_Array
- print Mesh_Info_Array2
-
- ---------------------------------------------------------------------------------------------------------------
-
- for i=1 to MeshCount do (
-
- FaceArray=#()
- vertArray=#()
- UV_array=#()
- Weight_array=#()
-
- FStride=(Mesh_Info_Array[i].FaceStride*2)
-
- fseek f (FaceStart[1]+FStride) #seek_set
-
- Print ("Face Start @ 0x"+((bit.intAsHex(ftell f))as string))
-
- for x = 1 to Mesh_Info_Array[i].FaceCount do (
- fa=(readshort f #unsigned+1)
- fb=(readshort f #unsigned+1)
- fc=(readshort f #unsigned+1)
- append FaceArray[fc,fb,fa]
- )
-
- Print ("Face End @ 0x"+((bit.intAsHex(ftell f))as string))
-
- fseek f (VertStart[1]+(Mesh_Info_Array2[i].VertOff)) #seek_set
-
- Print ("Vertex Start @ 0x"+((bit.intAsHex(ftell f))as string))
-
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- vx=readfloat f
- vy=readfloat f
- vz=readfloat f
-
- tu=ReadLong f
- tv=ReadLong f
-
- append VertArray([vx,-vz,vy]*100)
- )
-
- Print ("Vertex End @ 0x"+((bit.intAsHex(ftell f))as string))
-
- fseek f (WeightStart[1]+(Mesh_Info_Array2[i].WOff)) #seek_set
-
- Print ("Weights Start @ 0x"+((bit.intAsHex(ftell f))as string))
-
- if Mesh_Info_Array2[i].WStride==8 then
- if Mesh_Info_Array[i].UVType==1552 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadShort f
- tv=ReadShort f*-1
-
- readlong f
-
- append UV_array([tu,tv,0]/32767)
- )
-
- if Mesh_Info_Array2[i].WStride==8 then
- if Mesh_Info_Array[i].UVType==1584 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadShort f
- tv=ReadShort f*-1
-
- readlong f
-
- append UV_array([tu,tv,0]/32767)
- )
-
- if Mesh_Info_Array2[i].WStride==8 then
- if Mesh_Info_Array[i].UVType==1776 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadFloat f
- tv=ReadFloat f*-1
-
- append UV_array([tu,tv,0])
- )
-
- if Mesh_Info_Array2[i].WStride==12 then
- if Mesh_Info_Array[i].UVType==1648 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadShort f
- tv=ReadShort f*-1
-
- readlong f
- readlong f
-
- append UV_array([tu,tv,0]/32767)
- )
-
- if Mesh_Info_Array2[i].WStride==12 then
- if Mesh_Info_Array[i].UVType==1776 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadShort f
- tv=ReadShort f*-1
-
- readlong f
- readlong f
-
- append UV_array([tu,tv,0]/32767)
- )
-
- if Mesh_Info_Array2[i].WStride==12 then
- if Mesh_Info_Array[i].UVType==1584 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadFloat f
- tv=ReadFloat f*-1
-
- readlong f
-
- append UV_array([tu,tv,0])
- )
-
- if Mesh_Info_Array2[i].WStride==12 then
- if Mesh_Info_Array[i].UVType==1552 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadFloat f
- tv=ReadFloat f*-1
-
- readlong f
-
- append UV_array([tu,tv,0])
- )
-
- if Mesh_Info_Array2[i].WStride==16 then
- if Mesh_Info_Array[i].UVType==1264 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadFloat f
- tv=ReadFloat f*-1
-
- readlong f
- readlong f
-
- append UV_array([tu,tv,0])
- )
-
- if Mesh_Info_Array2[i].WStride==16 then
- if Mesh_Info_Array[i].UVType==1552 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadShort f
- tv=ReadShort f*-1
-
- readlong f
- readlong f
- readlong f
-
- append UV_array([tu,tv,0]/32767)
- )
-
- if Mesh_Info_Array2[i].WStride==16 then
- if Mesh_Info_Array[i].UVType==1776 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadFloat f
- tv=ReadFloat f*-1
-
- readlong f
- readlong f
-
- append UV_array([tu,tv,0])
- )
-
- if Mesh_Info_Array2[i].WStride==24 then
- if Mesh_Info_Array[i].UVType==1776 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadFloat f
- tv=ReadFloat f*-1
-
- readlong f
- readlong f
- readlong f
- readlong f
-
- append UV_array([tu,tv,0])
- )
-
- if Mesh_Info_Array2[i].WStride==24 then
- if Mesh_Info_Array[i].UVType==1648 then
- for x = 1 to Mesh_Info_Array[i].VertCount do(
-
- tu=ReadFloat f
- tv=ReadFloat f*-1
-
- readlong f
- readlong f
- readlong f
- readlong f
-
- append UV_array([tu,tv,0])
- )
-
- Print ("Weights End @ 0x"+((bit.intAsHex(ftell f))as string))
-
- Try(
- msh = mesh vertices:vertArray faces:faceArray
- msh.numTVerts = UV_array.count
- buildTVFaces msh
- msh.name=("Killer_Instinct_MDL"+("_"+i as string))
- for j = 1 to UV_array.count do setTVert msh j UV_array[j]
- for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
- msh.wirecolor = (color 230 200 210)
- )catch(format "Import Error!!!\n")
- )
-
- fclose f