home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 12122 / render_mesh5.5.7z / render_mesh5.5.ms
Encoding:
Text File  |  2016-12-25  |  14.9 KB  |  517 lines

  1.  
  2. scale_value = 0
  3.     
  4.     
  5. if ( (getfiles "D:\logger_maxscript.txt").count != 0 ) then (
  6.     logfile="D:\logger_maxscript.txt"
  7.     openLog "D:\logger_maxscript.txt" mode:"a" outputOnly:true
  8.     )    
  9.     
  10.     
  11.     
  12. fname = getOpenFileName \
  13. caption:"Open .mesh from Mesh folder" \
  14. types:"Halo5Mesh (*.*)|*.*" \
  15. historyCategory:"Halo5MeshPresets"    
  16.     
  17.  
  18. -- f__model = fopen fname "rb"   --"D:\\needler\\needler.model" "rb"
  19. -- f__model = fopen "D:\\plasma_rifle_h2\\plasma_rifle_h2.model" "rb"
  20.  
  21. f_header = fopen fname "rb"  
  22.  
  23. fseek f_header -64 #seek_end
  24. --values.X * (cinfo.x_max - cinfo.x_min) + cinfo.x_min
  25.  
  26. if((findString fname "storm_masterchief.render_model" ) != undefined  ) do ( 
  27.     fseek f_header 0x06d39ca #seek_set
  28.     )
  29.  
  30.  
  31. X_MIN = readfloat f_header
  32. X_MAX = readfloat f_header
  33. X_VALUE = X_MAX - X_MIN
  34. print("X_VALUE: " + (X_VALUE as string)  + "        X_MIN: "+  (X_MIN as string) + "        X_MAX: "  + (X_MAX as string))
  35. Y_MIN = readfloat f_header
  36. Y_MAX = readfloat f_header
  37. Y_VALUE = Y_MAX - Y_MIN
  38. print("Y_VALUE: " + (Y_VALUE as string)  + "        Y_MIN: "+  (Y_MIN as string) + "        Y_MAX: "  + (Y_MAX as string))
  39. Z_MIN = readfloat f_header
  40. Z_MAX = readfloat f_header
  41. Z_VALUE = Z_MAX - Z_MIN
  42. print("Z_VALUE: " + (Z_VALUE as string)  + "        Z_MIN: "+  (Z_MIN as string) + "        Z_MAX: "  + (Z_MAX as string))
  43. U_MIN = readfloat f_header
  44. U_MAX = readfloat f_header
  45. U_VALUE = U_MAX - U_MIN
  46. print("U_VALUE: " + (U_VALUE as string)  + "        U_MIN: "+  (U_MIN as string) + "        U_MAX: "  + (U_MAX as string))
  47. V_MIN = readfloat f_header
  48. V_MAX = readfloat f_header
  49. V_VALUE = V_MAX - V_MIN
  50. print("V_VALUE: " + (V_VALUE as string)  + "        V_MIN: "+  (V_MIN as string) + "        V_MAX: "  + (V_MAX as string))
  51. W_MIN = readfloat f_header
  52. W_MAX = readfloat f_header
  53. W_VALUE = W_MAX - W_MIN
  54. print("W_VALUE: " + (W_VALUE as string)  + "        W_MIN: "+  (W_MIN as string) + "        W_MAX: "  + (W_MAX as string))
  55.  
  56. scale_value =  V_VALUE * U_VALUE * X_VALUE * Y_VALUE * Z_VALUE
  57.  
  58. if(scale_value == 0) do (
  59.     X_VALUE = 1
  60.     Y_VALUE = 1
  61.     Z_VALUE = 1
  62.     U_VALUE = 1
  63.     V_VALUE = 1
  64.     )
  65.  
  66.  
  67. fclose f_header
  68.  
  69. file_array = getFiles (fname + "[*")
  70.  
  71.  
  72.  
  73. for i = 1 to file_array.count do (
  74. print("FILENAME:    " + file_array[i])
  75.  
  76. try (
  77.  
  78. f__mesh = fopen (file_array[i])  "rb"                    --                fopen "D:\\needler\\needler.render_model[0_mesh resource!_]" "rb"
  79.  
  80. struct data_chunk1 (
  81.     public
  82.     offset_block = 0,
  83.     size_block = 0,    
  84.     types= 0,
  85.     offset_block2 = 0,
  86.     data_coding = 0,  
  87.     element_number=0,
  88.     m = 0
  89.     )
  90.     
  91. data_chunk1_array = #()
  92.  
  93. vert_arrays = #()
  94. UV_arrays = #()
  95. face_arrays = #()
  96. m_array = #()
  97. ms = #()
  98.     
  99. vert_array = #()
  100. UV_array = #()
  101. face_array = #()
  102.  
  103.  
  104. print f__mesh
  105.  
  106. fseek f__mesh 0x20 #seek_set
  107.  
  108. v1 = #()
  109. for i = 1 to 0x0C do (
  110.     val = (readlong f__mesh #unsigned)
  111.     append v1 val
  112.     )
  113.     
  114.     
  115.     
  116. print v1
  117.  
  118. print("")
  119. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  120. print("")
  121.  
  122.  
  123.  
  124. for i = 1 to v1[1] do (
  125.     vv1 = #()
  126.     
  127.     vv1s = (i as string + "    ||    ")
  128.     for i = 1 to 0x010 do (
  129.         val = readbyte f__mesh #unsigned
  130.         vv1s = vv1s + "    " + (bit.intAsHex val)
  131.         append vv1 val
  132.         )
  133.     print vv1s
  134.     size1 = vv1[1] + vv1[2] * 0x100 + vv1[3] * 0x10000 + vv1[4] * 0x1000000
  135.     offset1 = vv1[9] + vv1[10] * 0x100 + vv1[11] * 0x10000 + vv1[12] * 0x1000000 + (v1[8] + v1[9])
  136.     vd = data_chunk1()
  137.     vd.offset_block = offset1
  138.     vd.size_block = size1
  139.     append data_chunk1_array vd
  140.     print("offset block: 0x0" + (bit.intAsHex (vd.offset_block )) +"    size block: 0x0" + (bit.intAsHex (vd.size_block )) + "    offset next block: 0x0" + (bit.intAsHex (vd.offset_block + vd.size_block)))
  141.  
  142.         
  143.     )
  144.  
  145. print("")
  146. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  147. print("")
  148.  
  149.     
  150. for i = 1 to v1[2] do (
  151.     vv1 = #()
  152.     vv1s = (i as string + "    ||    ")
  153.     for i = 1 to 0x020 do (
  154.         val = readbyte f__mesh #unsigned
  155.         vv1s = vv1s + "    " + (bit.intAsHex val)
  156.         )
  157.     print vv1s
  158.         
  159.     )
  160.     
  161. print("")
  162. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  163. print("")
  164.  
  165. for i = 1 to v1[3] do (
  166.     vv1 = #()
  167.     vv1s = (i as string + "    ||    ")
  168.     for i = 1 to 0x014 do (
  169.         val = readbyte f__mesh #unsigned
  170.         append vv1 val
  171.         vv1s = vv1s + "    " + (bit.intAsHex val)
  172.         )
  173.     print vv1s
  174.         
  175.     data_chunk1_array[i + v1[2]].types = vv1[1]
  176.     offset1 = vv1[17] + vv1[18] * 0x100 + vv1[19] * 0x10000 + vv1[20] * 0x1000000
  177.  
  178.     
  179.     )
  180.  
  181.     
  182. print("")
  183. print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  184. print("")
  185.  
  186. offset_3 = ftell f__mesh
  187. fseek f__mesh (0x18 + 32) #seek_cur
  188.  
  189. for i = (v1[2] + 1) to data_chunk1_array.count do (
  190.     if(data_chunk1_array[i].types == 1) then (
  191.         vv1 = #()
  192.         vv1s = (i as string + "    ||    ")
  193.         for i = 1 to 0x050 do (
  194.             val = readbyte f__mesh #unsigned
  195.             append vv1 val
  196.             vv1s = vv1s + "    " + (bit.intAsHex val)
  197.         )
  198.         print vv1s
  199.         data_chunk1_array[i].data_coding = vv1[1] + vv1[2] * 0x100
  200.         data_chunk1_array[i].element_number = vv1[5] + vv1[6] * 0x100 + vv1[7] * 0x10000 + vv1[8] * 0x1000000
  201.  
  202.         )
  203.     else if (data_chunk1_array[i].types == 2) then (
  204.         vv1 = #()
  205.         vv1s = (i as string + "    ||    ")
  206.         for i = 1 to 0x048 do (
  207.             val = readbyte f__mesh #unsigned
  208.             append vv1 val
  209.             vv1s = vv1s + "    " + (bit.intAsHex val)
  210.         )
  211.         print vv1s
  212.         --print(vv1 as string)
  213.         data_chunk1_array[i].data_coding = vv1[1] + vv1[2] * 0x100
  214.         data_chunk1_array[i].element_number = vv1[5] + vv1[6] * 0x100 + vv1[7] * 0x10000 + vv1[8] * 0x1000000
  215.         )
  216.     else (print "!!!ERROR!!!")
  217.     )
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237. submesh_number = (data_chunk1_array.count - v1[2])/2
  238. print("submesh_number: " + (submesh_number as string))
  239.     
  240.         print("")
  241.  
  242.             print("")
  243.  
  244.                 print("")
  245.  
  246.                 
  247.                 
  248. for i = v1[2] + 1 to (v1[2] +  submesh_number) do (
  249.     print ("vertex mesh number: " + (i as string ) + "    //    " + ((vert_arrays.count + 1) as string)) 
  250.     print("offset block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block )) +"    size block: 0x0" + (bit.intAsHex (data_chunk1_array[i].size_block )) + "    offset next block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block + data_chunk1_array[i].size_block)))
  251.     vn = data_chunk1_array[i].size_block / 0x01c
  252.     --print("vertex number: " + (vn as string))
  253.     print("data coding: 0x0" + (bit.intAsHex (data_chunk1_array[i].data_coding )))
  254.     print("vertex number: " + (data_chunk1_array[i].element_number as string) +  "    (0x0" + (bit.intAsHex (data_chunk1_array[i].element_number )) + ")")
  255.     
  256.     fseek f__mesh data_chunk1_array[i].offset_block  #seek_set
  257.     
  258.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  259.  
  260.     vert_array = #()
  261.     UV_array = #()
  262.     
  263.     
  264.     if data_chunk1_array[i].data_coding == 0x01c24 then (
  265.         for j = 1 to data_chunk1_array[i].element_number do (
  266.             offs = ftell f__mesh
  267.             x = readshort f__mesh #unsigned
  268.             y = readshort f__mesh #unsigned
  269.             z = readshort f__mesh #unsigned        
  270.             fseek f__mesh 0x2 #seek_cur        
  271.             u = readshort f__mesh #unsigned
  272.             w = readshort f__mesh #unsigned    
  273.             u_f = u
  274.             w_f = w
  275.             
  276.             fseek f__mesh 0x10 #seek_cur    
  277.             append vert_array [x,y,z]
  278.             append UV_array [u_f,-w_f+1,0]
  279.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  280.             )
  281.         )
  282.     else if  data_chunk1_array[i].data_coding == 0x01c01 then (    
  283.         for j = 1 to data_chunk1_array[i].element_number do (
  284.             offs = ftell f__mesh
  285.             x = readshort f__mesh #unsigned
  286.             y = readshort f__mesh #unsigned
  287.             z = readshort f__mesh #unsigned        
  288.             fseek f__mesh 0x2 #seek_cur        
  289.             u = readshort f__mesh #unsigned
  290.             w = readshort f__mesh #unsigned    
  291.             u_f = u
  292.             w_f = w
  293.             
  294.             fseek f__mesh 0x10 #seek_cur    
  295.             append vert_array [x,y,z]
  296.             append UV_array [u_f,-w_f+1,0]
  297.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  298.             )
  299.         )
  300.     else if  data_chunk1_array[i].data_coding == 0x01c05 then (    
  301.         for j = 1 to data_chunk1_array[i].element_number do (
  302.             offs = ftell f__mesh
  303.             x = readshort f__mesh #unsigned
  304.             y = readshort f__mesh #unsigned
  305.             z = readshort f__mesh #unsigned        
  306.             fseek f__mesh 0x2 #seek_cur        
  307.             u = readshort f__mesh #unsigned
  308.             w = readshort f__mesh #unsigned    
  309.             u_f = u
  310.             w_f = w
  311.             
  312.             fseek f__mesh 0x10 #seek_cur    
  313.             append vert_array [x,y,z]
  314.             append UV_array [u_f,-w_f+1,0]
  315.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  316.             )
  317.         )
  318.     else if  data_chunk1_array[i].data_coding == 0x01802 then (    
  319.         for j = 1 to data_chunk1_array[i].element_number do (
  320.             offs = ftell f__mesh
  321.             x = readshort f__mesh #unsigned
  322.             y = readshort f__mesh #unsigned
  323.             z = readshort f__mesh #unsigned        
  324.             fseek f__mesh 0x2 #seek_cur        
  325.             u = readshort f__mesh #unsigned
  326.             w = readshort f__mesh #unsigned    
  327.             u_f = u
  328.             w_f = w
  329.             
  330.             fseek f__mesh 0xC #seek_cur    
  331.             append vert_array [x,y,z]
  332.             append UV_array [u_f,-w_f+1,0]
  333.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  334.             )
  335.         )    
  336.     else if  data_chunk1_array[i].data_coding == 0x02003 then (    
  337.         for j = 1 to data_chunk1_array[i].element_number do (
  338.             offs = ftell f__mesh
  339.             x = readshort f__mesh #unsigned
  340.             y = readshort f__mesh #unsigned
  341.             z = readshort f__mesh #unsigned        
  342.             fseek f__mesh 0x2 #seek_cur        
  343.             u = readshort f__mesh #unsigned
  344.             w = readshort f__mesh #unsigned    
  345.             u_f = u
  346.             w_f = w
  347.             
  348.             fseek f__mesh 0x14 #seek_cur    
  349.             append vert_array [x,y,z]
  350.             append UV_array [u_f,-w_f+1,0]
  351.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  352.             )
  353.         )
  354.         else if  data_chunk1_array[i].data_coding == 0x02025 then (    
  355.         for j = 1 to data_chunk1_array[i].element_number do (
  356.             offs = ftell f__mesh
  357.             x = readshort f__mesh #unsigned
  358.             y = readshort f__mesh #unsigned
  359.             z = readshort f__mesh #unsigned        
  360.             fseek f__mesh 0x2 #seek_cur        
  361.             u = readshort f__mesh #unsigned
  362.             w = readshort f__mesh #unsigned    
  363.             u_f = u
  364.             w_f = w
  365.             
  366.             fseek f__mesh 0x14 #seek_cur    
  367.             append vert_array [x,y,z]
  368.             append UV_array [u_f,-w_f+1,0]
  369.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  370.             )
  371.         )
  372.         else if  data_chunk1_array[i].data_coding == 0x02c2f then (    
  373.         for j = 1 to data_chunk1_array[i].element_number do (
  374.             offs = ftell f__mesh
  375.             x = readshort f__mesh #unsigned
  376.             y = readshort f__mesh #unsigned
  377.             z = readshort f__mesh #unsigned        
  378.             fseek f__mesh 0x2 #seek_cur        
  379.             u = readshort f__mesh #unsigned
  380.             w = readshort f__mesh #unsigned    
  381.             u_f = u
  382.             w_f = w
  383.             
  384.             fseek f__mesh 0x020 #seek_cur    
  385.             append vert_array [x,y,z]
  386.             append UV_array [u_f,-w_f+1,0]
  387.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  388.             )
  389.         )
  390.  
  391.     else if  data_chunk1_array[i].data_coding == 0x0240e then (    
  392.         for j = 1 to data_chunk1_array[i].element_number do (
  393.             offs = ftell f__mesh
  394.             x = readshort f__mesh #unsigned
  395.             y = readshort f__mesh #unsigned
  396.             z = readshort f__mesh #unsigned        
  397.             fseek f__mesh 0x2 #seek_cur        
  398.             u = readshort f__mesh #unsigned
  399.             w = readshort f__mesh #unsigned    
  400.             u_f = u
  401.             w_f = w
  402.             
  403.             fseek f__mesh 0x18 #seek_cur    
  404.             append vert_array [x,y,z]
  405.             append UV_array [u_f,-w_f+1,0]
  406.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  407.             )
  408.         )
  409.     else if  data_chunk1_array[i].data_coding == 0x02428 then (    
  410.         for j = 1 to data_chunk1_array[i].element_number do (
  411.             offs = ftell f__mesh
  412.             x = readshort f__mesh #unsigned
  413.             y = readshort f__mesh #unsigned
  414.             z = readshort f__mesh #unsigned        
  415.             fseek f__mesh 0x2 #seek_cur        
  416.             u = readshort f__mesh #unsigned
  417.             w = readshort f__mesh #unsigned    
  418.             u_f = u
  419.             w_f = w
  420.             
  421.             fseek f__mesh 0x18 #seek_cur    
  422.             append vert_array [x,y,z]
  423.             append UV_array [u_f,-w_f+1,0]
  424.             --print((j as string)+"||"+((offs) as string) + "    ||    " + ((x) as string) +"    "+((y) as string)+"    "+((z) as string)+"    ||    "+((u) as string)+"    "+((w) as string))
  425.             )
  426.         )
  427.         
  428.     else(
  429.         print("error reading vertex! unknown coding format:  0x0" + (bit.intAsHex (data_chunk1_array[i].data_coding)) )
  430.         )
  431.         
  432.     for j = 1 to data_chunk1_array[i].element_number do (
  433.         vert_array[j] = [vert_array[j].x * X_VALUE , vert_array[j].y * Y_VALUE , vert_array[j].z * Z_VALUE ]
  434.         UV_array[j] = [UV_array[j].x * U_VALUE / 65536 + U_MIN, UV_array[j].y * V_VALUE / 65536 - V_MIN, 0]
  435.         )
  436.  
  437.  
  438.     append UV_arrays UV_array
  439.     append vert_arrays vert_array
  440.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  441.     print("")
  442.     )
  443.     
  444.     print("")
  445.         print("FACES")
  446.             print("")
  447.     
  448. for i = v1[2] + 1 + submesh_number  to (v1[2]  + submesh_number + submesh_number) do (
  449.     print ("faces mesh number: " + i as string  + "    //    " + ((face_arrays.count + 1 )as string))
  450.     print("offset block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block )) +"    size block: 0x0" + (bit.intAsHex (data_chunk1_array[i].size_block )) + "    offset next block: 0x0" + (bit.intAsHex (data_chunk1_array[i].offset_block + data_chunk1_array[i].size_block)))
  451.     fnum = data_chunk1_array[i].size_block / 6
  452.     print("faces number: " + (fnum as string))
  453.         print("data coding: 0x0" + (bit.intAsHex (data_chunk1_array[i].data_coding )))
  454.  
  455.     fseek f__mesh data_chunk1_array[i].offset_block  #seek_set
  456.     
  457.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  458.  
  459.     face_array = #()
  460.     m = 0
  461.     for j = 1 to fnum do (
  462.         offs = ftell f__mesh
  463.         x = (readshort f__mesh #unsigned) + 1
  464.         y = (readshort f__mesh #unsigned) + 1
  465.         z = (readshort f__mesh #unsigned) + 1    
  466.         if x > m do m = x
  467.         if y > m do m = y
  468.         if z > m do m = z
  469.         --print((j as string) + "        " +([x,y,z] as string) )
  470.         append face_array [x,y,z]
  471.         )
  472.  
  473.     append face_arrays face_array
  474.     print ("m: " + (m as string))
  475.     append ms m
  476.     data_chunk1_array[i].m = m
  477.     print("offset: 0x0" + (bit.intAsHex (ftell f__mesh)) +"   ")
  478.     print("")
  479.     )    
  480.     
  481.     
  482.     for i = 1 to submesh_number do (
  483.         try(
  484.             msh = mesh name:((i as string) + "__f" + (face_arrays[i].count as string) + "__v" + (vert_arrays[i].count as string)) vertices:vert_arrays[i] faces:face_arrays[i]    
  485.             setNumTVerts msh UV_arrays[i].count        
  486.             for j = 1 to UV_arrays[i].count do (setTVert msh j UV_arrays[i][j]) 
  487.             buildTVFaces msh false
  488.             for j = 1 to face_arrays[i].count do (setTVFace msh j face_arrays[i][j])
  489.             )
  490.         catch(
  491.             print("ERROR CREATING MESH " + (i as string) + "        number faces: " + (face_arrays[i].count as string) + "        number vertex: " + (vert_arrays[i].count as string) + "        found vertex: " + (ms[i] as string))
  492.             
  493.             )
  494.     )
  495.     
  496.     
  497.     
  498.     
  499.     
  500.     
  501.     
  502.     
  503.     
  504.     
  505.     
  506.     
  507.     
  508.     
  509.     
  510.     fclose f__mesh
  511.  
  512.     )
  513.     catch (
  514.     print("FILE_IMPORT_ERROR: " + file_array[i] + "   size:  " + ((getFileSize(file_array[i])) as string))
  515.     )
  516.     
  517. )