Advertisement
Guest User

Untitled

a guest
Jun 21st, 2013
494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. if (heapSize < 20000000) then
  2. heapSize = 200000000 -- allow ~ 40 MB instead of just 7.5 MB. Prevents "Runtime Error: Out of scripter memory"
  3. fname = getOpenFileName \
  4. caption:"Open .43 from Mesh folder" \
  5. types:"FAF6 (*.43)|*.43" \
  6. f = fopen fname "rb"
  7. clearlistener()
  8. fscale=100
  9.  
  10. fn ReadFixedString bstream fixedLen =
  11. (
  12. local str = ""
  13. for i = 1 to fixedLen do
  14. (
  15. str+=bit.intAsChar(ReadByte bstream #unsigned)
  16. )
  17. str
  18. )
  19.  
  20. Face_array=#()
  21. Vert_array=#()
  22. UV_array=#()
  23.  
  24. fseek f 0x0 #seek_set
  25. count=readlong f
  26. if count == 1 do ReadFixedString f 52
  27. if count == 2 do ReadFixedString f 96
  28. if count == 3 do ReadFixedString f 140
  29. if count == 7 do ReadFixedString f 316
  30. if count == 8 do ReadFixedString f 360
  31. if count == 9 do ReadFixedString f 404
  32. if count == 10 do ReadFixedString f 448
  33. facecount=readlong f
  34. print facecount
  35.  
  36. for x = 1 to facecount/6 do(
  37.  
  38. fa=readshort f +1
  39. fb=readshort f +1
  40. fc=readshort f +1
  41. append Face_array[fc,fb,fa]
  42. )
  43.  
  44. null1=readlong f
  45. null2=readlong f
  46. offset=readlong f
  47. if offset ==63 or offset == 47 or offset == 43 do ReadFixedString f 44
  48. if offset > 63 do ReadFixedString f 46
  49. vertsize=readlong f
  50. fseek f 0x24 #seek_cur
  51. vertcount=readlong f
  52. print vertcount
  53.  
  54. if vertsize == 48 then
  55. for x = 1 to vertcount/vertsize do(
  56.  
  57. vx=readfloat f
  58. vy=readfloat f
  59. vz=readfloat f
  60. p1=readfloat f
  61. p2=readfloat f
  62. p3=readfloat f
  63. p4=readfloat f
  64. tu=readfloat f
  65. tv=readfloat f
  66. p4=readfloat f
  67. p5=readfloat f
  68. p9=readfloat f
  69. append Vert_array([vz,vy,vx] *50)
  70. append UV_array[tu,tv,0]
  71. )
  72.  
  73. if vertsize == 52 then
  74. for x = 1 to vertcount/vertsize do(
  75.  
  76. vx=readfloat f
  77. vy=readfloat f
  78. vz=readfloat f
  79. p1=readfloat f
  80. p2=readfloat f
  81. p3=readfloat f
  82. p4=readfloat f
  83. tu=readfloat f
  84. tv=readfloat f
  85. p4=readfloat f
  86. p5=readfloat f
  87. p9=readfloat f
  88. p10=readfloat f
  89. append Vert_array([vz,vy,vx] *50)
  90. append UV_array[tu,tv,0]
  91. )
  92.  
  93. if vertsize == 60 then
  94. for x = 1 to vertcount/vertsize do(
  95.  
  96. vx=readfloat f
  97. vy=readfloat f
  98. vz=readfloat f
  99. p1=readfloat f
  100. p2=readfloat f
  101. p3=readfloat f
  102. p4=readfloat f
  103. p5=readfloat f
  104. p6=readfloat f
  105. tu=readfloat f
  106. tv=readfloat f
  107. p9=readfloat f
  108. p10=readfloat f
  109. p11=readfloat f
  110. p12=readfloat f
  111. append Vert_array([vz,vy,vx] *50)
  112. append UV_array[tu,tv,0]
  113. )
  114.  
  115. msh = mesh vertices:Vert_array faces:Face_array
  116. msh.numTVerts = UV_array.count
  117. buildTVFaces msh
  118. rotate msh (angleaxis 90 [1,0,0])
  119. rotate msh (angleaxis -90 [0,0,1])
  120. for j = 1 to UV_array.count do setTVert msh j UV_array[j]
  121. for j = 1 to Face_array.count do setTVFace msh j Face_array[j]
  122. Print ("Last Read @ 0x"+((bit.intAsHex(ftell f))as string))
  123.  
  124.  
  125.  
  126. fclose f
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement