home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 12084 / render_mesh5.2.7z / render_mesh5.2.ms
Encoding:
Text File  |  2016-12-14  |  13.6 KB  |  471 lines

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