home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 15635 / aco11_ch.7z / aco11_ch.ms
Encoding:
Text File  |  2019-02-01  |  16.5 KB  |  567 lines

  1. --1 -6 verts
  2. --7 - a uv
  3. -- datapc_whiteroom.forge - animals (ce_a)
  4. -- datapc_sharedgroup_01.forge animals textures (ce_a)
  5. -- datapc_ACE_EGYPT.forge animals models (ce_a)
  6.  
  7. --f__mesh = fopen "D:\\ACorig\\_unp\\1096652136\\CE_W_DLC02_Akhenaten_Sword_LOD0\\1.dat" "rb"  
  8. --dt = 5
  9.         -- 4 - most weapons
  10.         -- 5
  11.         
  12.         
  13.         
  14.         
  15.         
  16.         
  17.         
  18.         
  19.         
  20.  
  21. if (heapSize < 200000) then
  22.         heapSize = 2000000 -- allow ~ 40 MB instead of just 7.5 MB. Prevents "Runtime Error: Out of scripter memory"
  23. fname = getOpenFileName \
  24. caption:"Open LOD file" \
  25. types:"Assassin's Creed Origins (*.*)|*.*" \
  26. historyCategory:"AssassinsCreedOrigins"
  27.  
  28. f__mesh = fopen fname "rb"
  29.  
  30.  
  31. struct submeshOrig
  32. (
  33. num = 0,
  34. id = 0,
  35. vert_count = 0,
  36. face_count = 0,
  37. max_face_index = 0,
  38. min_face_index = 0x010000,
  39. name = "",
  40. vert_arr = #(),
  41. face_arr = #(),
  42. uv_arr = #(),
  43. uv_arr2 = #(),
  44.  
  45. face_offset = 0,
  46. vert_offset = 0,
  47. uv_offset = 0
  48.  
  49. )
  50.  
  51. face_count = 0
  52. vert_count = 0
  53. vert_size = 0x14
  54. v_count_offset = 0
  55. UV_arrays = #()
  56.  
  57. glob_vert_array = #()
  58. glob_face_array = #()
  59. glob_UV_array = #()
  60.  
  61. stp = 0
  62.  
  63.     size_vert_buffer_offset = 0
  64. vert_buffer_offset = size_vert_buffer_offset + 4
  65.  
  66.  
  67.  
  68.  
  69. fseek f__mesh 0x08 #seek_set 
  70. name_len = readlong f__mesh #unsigned
  71. str_name = ""
  72.  
  73.  
  74. for i = 1 to name_len do (
  75.     str_name = str_name + bit.intaschar(readbyte f__mesh #unsigned)
  76.     )
  77. print("name: " + str_name)
  78.  
  79.  
  80.  
  81.  
  82. fseek f__mesh 0x1d #seek_cur
  83. ch1_number = readlong f__mesh #unsigned
  84. print("block_chunks1 offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch1_number)) + "(" + (ch1_number as string) +")")
  85.  
  86.  
  87.  
  88.  
  89. for i = 1 to ch1_number do (
  90.     str22 = "blk:: "
  91.     
  92.         
  93.         for qq = 1 to 0x51 do (
  94.             tmp_bt = readbyte f__mesh #unsigned
  95.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  96.             if(str2.count == 1) do str2 = "0" + str2
  97.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  98.             str22 = str22 + str2 + "    "
  99.             )    
  100.     print(str22)            
  101.     )
  102. print("block_chunks1-0 end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  103.  
  104.  
  105.  
  106. for i = 1 to 2 do (
  107.     str22 = ""
  108.     
  109.         
  110.         for qq = 1 to 0x10 do (
  111.             tmp_bt = readbyte f__mesh #unsigned
  112.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  113.             if(str2.count == 1) do str2 = "0" + str2
  114.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  115.             str22 = str22 + str2 + "    "
  116.             )    
  117.     print(str22)            
  118.     )
  119.     
  120. readbyte f__mesh #unsigned
  121. print("block_chunks1-1 end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  122.  
  123. for i = 1 to 2 do (
  124.     str22 = "blc:: "
  125.     
  126.         
  127.         for qq = 1 to 0x11 do (
  128.             tmp_bt = readbyte f__mesh #unsigned
  129.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  130.             if(str2.count == 1) do str2 = "0" + str2
  131.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  132.             str22 = str22 + str2 + "    "
  133.             )    
  134.     print(str22)            
  135.     )
  136. print("block_chunks1-2 end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  137.  
  138.  
  139.  
  140.  
  141. fseek f__mesh 0x29 #seek_cur
  142. ch1000_number = readlong f__mesh #unsigned
  143. print("ch1000_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch1000_number)) + "(" + (ch1000_number as string)+")")
  144. --fseek f__mesh (ch1000_number * 0x18) #seek_cur
  145. for i = 1 to ch1000_number do (
  146.     str22 = "blk:: "
  147.  
  148.     
  149.     for qq = 1 to 0x18 do (
  150.         tmp_bt = readbyte f__mesh #unsigned
  151.         str2 = toUpper(bit.intAsHex((tmp_bt) ))
  152.         if(str2.count == 1) do str2 = "0" + str2
  153.         if(str2.count == 8) do str2 = str2[7] + str2[8]
  154.         str22 = str22 + str2 + "    "
  155.         )    
  156.     print(str22)
  157.     )
  158. print("ch1000_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  159.  
  160.  
  161.  
  162.  
  163.  
  164. ch20_number = readlong f__mesh #unsigned
  165. ch20_offset = ftell f__mesh
  166. print("block_chunks20 offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch20_number)) + "(" + (ch20_number as string)+")")
  167. fseek f__mesh ch20_number #seek_cur
  168. print("block_chunks20 end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  169.  
  170.  
  171. ch30_number = readlong f__mesh #unsigned
  172. ch30_offset = ftell f__mesh
  173. print("ch30_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch30_number)) + "(" + (ch30_number as string)+")")
  174. fseek f__mesh ch30_number #seek_cur
  175. print("ch30_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  176.  
  177. ch40_number = readlong f__mesh #unsigned
  178. print("ch40_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch40_number)) + "(" + (ch40_number as string)+")")
  179. fseek f__mesh ch40_number #seek_cur
  180. print("ch40_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  181.  
  182.  
  183. ch50_number = readlong f__mesh #unsigned   -- faces
  184. ch50_offset = ftell f__mesh
  185. print("ch50_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch50_number)) + "(" + (ch50_number as string)+")")
  186. fseek f__mesh ch50_number #seek_cur
  187. print("ch50_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  188.  
  189.  
  190. ch60_number = readlong f__mesh #unsigned
  191. print("ch60_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch60_number)) + "(" + (ch60_number as string)+")")
  192. fseek f__mesh ch60_number #seek_cur
  193. print("ch60_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  194.  
  195.  
  196. ch70_number = readlong f__mesh #unsigned
  197. print("ch70_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch70_number)) + "(" + (ch70_number as string)+")")
  198. fseek f__mesh ch70_number #seek_cur
  199. print("ch70_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  200.  
  201.  
  202. ch80_number = readlong f__mesh #unsigned
  203. print("ch80_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch80_number)) + "(" + (ch80_number as string)+")")
  204. fseek f__mesh ch80_number #seek_cur
  205. print("ch80_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  206.  
  207.  
  208. for i = 1 to 1 do (
  209.     
  210.         str22 = "blk:: "
  211.     
  212.         
  213.         for qq = 1 to 0x12 do (
  214.             tmp_bt = readbyte f__mesh #unsigned
  215.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  216.             if(str2.count == 1) do str2 = "0" + str2
  217.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  218.             str22 = str22 + str2 + "    "
  219.             )    
  220.     print(str22)
  221.     )
  222.     
  223. ch90_number = readlong f__mesh #unsigned
  224. print("ch90_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch90_number)) + "(" + (ch90_number as string)+")")
  225.  
  226.  
  227. mesh_array = #()
  228. for i = 1 to ch90_number do (
  229.     cur_submesh = submeshOrig()
  230.     cur_submesh.num = i
  231.     fseek f__mesh 0x14 #seek_cur
  232.     cur_submesh.vert_count = readlong f__mesh #unsigned
  233.     fseek f__mesh 0x04 #seek_cur
  234.     cur_submesh.face_count = readlong f__mesh #unsigned
  235.     append mesh_array cur_submesh
  236.     
  237.     fseek f__mesh 0x04 #seek_cur
  238.     
  239.     fseek f__mesh -0x24 #seek_cur
  240.     cur_submesh.id = readshort f__mesh #unsigned
  241.     fseek f__mesh -0x2 #seek_cur
  242.  
  243.         str22 = "blk:: "
  244.     
  245.         
  246.         for qq = 1 to 0x24 do (
  247.         
  248.             tmp_bt = readbyte f__mesh #unsigned
  249.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  250.             if(str2.count == 1) do str2 = "0" + str2
  251.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  252.             str22 = str22 + str2 + "    "
  253.             )    
  254.     print(str22)
  255.     )
  256.     
  257. for cur_submesh in mesh_array do (
  258.     print("submesh: vert_count: " + (cur_submesh.vert_count as string )   + "  face_count: " +  (cur_submesh.face_count as string ))
  259.     )
  260.  
  261. print("ch90_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  262.  
  263. fseek f__mesh 0x10 #seek_cur
  264.  
  265. ch100_number = readlong f__mesh #unsigned
  266. print("ch100_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch100_number)) + "(" + (ch100_number as string)+")")
  267.  
  268.  
  269. for i = 1 to ch100_number do (
  270.  
  271.  
  272.     
  273.         str22 = "blk:: "
  274.     
  275.         
  276.         for qq = 1 to 0x1e do (
  277.             tmp_bt = readbyte f__mesh #unsigned
  278.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  279.             if(str2.count == 1) do str2 = "0" + str2
  280.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  281.             str22 = str22 + str2 + "    "
  282.             )    
  283.     print(str22)
  284.     )
  285. print("ch90_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292. fseek f__mesh 0x16 #seek_cur
  293.  
  294. ch110_number = readlong f__mesh #unsigned
  295. print("ch110_number offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) - 4)) + "    || value: 0x" + toUpper(bit.intAsHex(ch110_number)) + "(" + (ch110_number as string)+")")
  296.  
  297.  
  298. for i = 1 to ch110_number do (
  299.  
  300.  
  301.     
  302.         str22 = ":: "
  303.     
  304.         
  305.         for qq = 1 to 0x0a do (
  306.             tmp_bt = readbyte f__mesh #unsigned
  307.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  308.             if(str2.count == 1) do str2 = "0" + str2
  309.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  310.             str22 = str22 + str2 + "    "
  311.             )    
  312.     print(str22)
  313.     )
  314. print("ch90_number end offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh) )))
  315.  
  316.  
  317.  
  318.  
  319. print("#################################################################################################################################")
  320. print("###############################################################   FINAL     #####################################################")
  321. print("#################################################################################################################################")
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333. print("mesh_array_count:" + (mesh_array.count as string))
  334. print("")
  335. print("")
  336.  
  337. print("reading faces::")
  338. fseek f__mesh ch50_offset #seek_set
  339. print("faces offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh))) + "    || value: 0x" + toUpper(bit.intAsHex(ch50_number / 6)) + "(" + ((ch50_number / 6) as string)+")")
  340.  
  341.  
  342.  
  343.  
  344. for cur_submesh in mesh_array do (
  345.     for i = 1 to cur_submesh.face_count do (
  346.         x = (readshort f__mesh #unsigned)  + 1
  347.         y = (readshort f__mesh #unsigned)  + 1
  348.         z = (readshort f__mesh #unsigned)  + 1
  349.         
  350.         if (x != y) AND (y != z) AND (x != z) do (
  351.         
  352.         append cur_submesh.face_arr [x,y,z] 
  353.  
  354.         if x > cur_submesh.max_face_index do cur_submesh.max_face_index = x
  355.         if y > cur_submesh.max_face_index do cur_submesh.max_face_index = y
  356.         if z > cur_submesh.max_face_index do cur_submesh.max_face_index = z
  357.  
  358.         if x < cur_submesh.min_face_index do cur_submesh.min_face_index = x
  359.         if y < cur_submesh.min_face_index do cur_submesh.min_face_index = y
  360.         if z < cur_submesh.min_face_index do cur_submesh.min_face_index = z)
  361.         
  362.         )
  363.     )    
  364. print("end of face buffer")
  365. print("current offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh)) ))    
  366.  
  367.  
  368. for cur_submesh in mesh_array do (
  369.     print("submesh: "+ (cur_submesh.num as string )+ "  id: 0x"+ toUpper(bit.intAsHex((cur_submesh.id)))+ " vert_count: " + (cur_submesh.vert_count as string )   + "  face_count: " +  (cur_submesh.face_count as string )  + "  min_face_index: " +  (cur_submesh.min_face_index as string ) + "  max_face_index: " +  (cur_submesh.max_face_index as string ) )
  370.     )
  371.  
  372. --#################################################################################################################################
  373. --############################################################### External UV #####################################################
  374. --#################################################################################################################################
  375.  
  376. if((ch30_number > 0) AND (ch20_number > 0)) then (
  377. print("EXTERNAL UV")
  378. fseek f__mesh ch30_offset #seek_set
  379. print("vertex offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh))) + "    || value: 0x" + toUpper(bit.intAsHex(ch50_number / 6)) + "(" + ((ch50_number / 6) as string)+")")
  380.  
  381. global_vertex_count = 0
  382.  
  383. for cur_submesh in mesh_array do (
  384.     global_vertex_count  = global_vertex_count + cur_submesh.vert_count
  385.     for i = 1 to cur_submesh.vert_count do (
  386.         voff = ftell f__mesh
  387.         x = readshort  f__mesh #signed
  388.         y = readshort  f__mesh #signed
  389.         z = readshort  f__mesh #signed
  390.         append cur_submesh.vert_arr [x,y,z]
  391.         fseek f__mesh (voff + 0x0c)  #seek_set    
  392.         )
  393.     )    
  394. print("end of vertex buffer")
  395. print("current offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh)) ))    
  396.  
  397. uv_size = (ch20_number / global_vertex_count)
  398. print ("uv_size " + ( uv_size as string))
  399. fseek f__mesh ch20_offset #seek_set
  400.  
  401. fseek f__mesh ch20_offset #seek_set
  402. print("UV offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh))) + "    || value: 0x" + toUpper(bit.intAsHex(ch50_number / 6)) + "(" + ((ch50_number / 6) as string)+")")
  403.  
  404. if(uv_size >= 16) then (
  405. for cur_submesh in mesh_array do (
  406.     for i = 1 to cur_submesh.vert_count do (
  407.         voff = ftell f__mesh
  408.         fseek f__mesh 4  #seek_cur
  409.         u = (readshort f__mesh #unsigned)
  410.         v = (readshort f__mesh #unsigned)
  411.         append cur_submesh.uv_arr [((u as float) / 65536 * 32), 1 - ((v as float) / 65536 * 32), 0]
  412.         u2 = (readshort f__mesh #unsigned)
  413.         v2 = (readshort f__mesh #unsigned)
  414.         append cur_submesh.uv_arr2 [((u2 as float) / 65536 * 32), 1 - ((v2 as float) / 65536 * 32), 0]
  415.  
  416.         fseek f__mesh (voff + 0x10)  #seek_set    
  417.         )
  418.     )    
  419.     )
  420. else if(uv_size >= 8) then (
  421. for cur_submesh in mesh_array do (
  422.     for i = 1 to cur_submesh.vert_count do (
  423.         voff = ftell f__mesh
  424.         u2 = (readshort f__mesh #unsigned)
  425.         v2 = (readshort f__mesh #unsigned)
  426.         u = (readshort f__mesh #unsigned)
  427.         v = (readshort f__mesh #unsigned)
  428.         append cur_submesh.uv_arr [((u as float) / 65536 * 32), 1 - ((v as float) / 65536 * 32), 0]
  429.         append cur_submesh.uv_arr2 [((u2 as float) / 65536 * 32), 1 - ((v2 as float) / 65536 * 32), 0]
  430.  
  431.         --fseek f__mesh (voff + 0x0c)  #seek_set    
  432.         )
  433.     )    
  434.     )
  435.     
  436. print("end of UV buffer")
  437. print("current offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh)) ))    
  438.  
  439. )
  440.  
  441.  
  442.  
  443.  
  444.  
  445. --#################################################################################################################################
  446. --############################################################### Internal UV #####################################################
  447. --#################################################################################################################################
  448.  
  449.  
  450. if((ch30_number == 0) AND (ch20_number > 0)) then (
  451.  
  452. print("INTERNAL UV")
  453.  
  454. fseek f__mesh ch20_offset #seek_set
  455. print("vertex offset:  0x"  + toUpper(bit.intAsHex((ftell f__mesh))) + "    || value: 0x" + toUpper(bit.intAsHex(ch50_number / 6)) + "(" + ((ch50_number / 6) as string)+")")
  456.  
  457.  
  458.  
  459. for cur_submesh in mesh_array do (
  460.         for i = 1 to (amax cur_submesh.vert_count cur_submesh.max_face_index) do (
  461.         voff = ftell f__mesh
  462.         x = (readshort f__mesh #signed)
  463.         y = (readshort f__mesh #signed)
  464.         z = (readshort f__mesh #signed)        
  465.         tmp_buf = #()
  466.         scl = 1
  467.         str1 = ""
  468.         
  469.         for qq = 1 to (vert_size - 10) do (
  470.             tmp_bt = readbyte f__mesh #usigned
  471.             append tmp_buf tmp_bt
  472.             str2 = toUpper(bit.intAsHex((tmp_bt) ))
  473.             if(str2.count == 1) do str2 = "0" + str2
  474.             if(str2.count == 8) do str2 = str2[7] + str2[8]
  475.             str1 = str1 + str2 + "    "
  476.             )        
  477.         if(tmp_buf[1] < 0) do scl = -1
  478.         u = (readshort f__mesh #unsigned)
  479.         v = (readshort f__mesh #unsigned)
  480.  
  481.         str1 = str1 + " || scl: " + (scl as string)
  482.         --print str1
  483.         append cur_submesh.uv_arr [((u as float) / 65536 * 32), 1 - ((v as float) / 65536 * 32), 0]
  484.         append cur_submesh.uv_arr2 [((u as float) / 65536 * 32), 1 - ((v as float) / 65536 * 32), 0]
  485.  
  486.         append cur_submesh.vert_arr ([x,y,z] * scl)
  487.         
  488.         
  489.         fseek f__mesh (voff + 0x14) #seek_set
  490.         )
  491.     )
  492.     )
  493.     
  494.     
  495.     
  496.     
  497.     
  498.     
  499.     
  500.     
  501.     
  502.     
  503.     
  504.     
  505.     
  506.     
  507.     
  508.     
  509.     
  510.     
  511.     
  512.     
  513.     
  514.     
  515.     
  516.     
  517.     
  518.         
  519. for cur_submesh in mesh_array do (
  520.     print("submesh: "+ (cur_submesh.num as string )+ "  id: 0x"+ toUpper(bit.intAsHex((cur_submesh.id)))+ " vert_count: " + (cur_submesh.vert_count as string ) +"||"+  (cur_submesh.vert_arr.count as string ) + " UV_count: " + "||"+  (cur_submesh.vert_arr.count as string ) + "  face_count: " +  (cur_submesh.face_count as string ) + "||" +  (cur_submesh.face_arr.count as string )  + "  min_face_index: " +  (cur_submesh.min_face_index as string ) + "  max_face_index: " +  (cur_submesh.max_face_index as string ) )
  521.     )    
  522.     
  523.     
  524.     
  525.     
  526.     
  527.     
  528.     
  529.     
  530.     
  531.     
  532.     
  533.     
  534.     
  535. for cur_submesh in mesh_array do (
  536.     --try(
  537.     msh = mesh name:(str_name + "_num" + (cur_submesh.num as string)) vertices:cur_submesh.vert_arr faces:cur_submesh.face_arr
  538.     
  539.     meshop.setNumMaps msh 3
  540.  
  541.     
  542.     meshop.setMapSupport msh 1 true 
  543.     for i=1 to cur_submesh.vert_count do (
  544.         meshop.setMapVert msh 1 i cur_submesh.uv_arr[i])
  545.     meshop.buildMapFaces msh 1
  546.     update msh
  547.     
  548.     meshop.setMapSupport msh 2 true 
  549.     for i=1 to cur_submesh.vert_count do (
  550.         meshop.setMapVert msh 2 i cur_submesh.uv_arr2[i])
  551.     meshop.buildMapFaces msh 2
  552.     update msh
  553.     
  554.     
  555.     
  556.     
  557.     print ("SUCCESSFUL CREATING SUBMESH num: " + (cur_submesh.num as string))
  558.     --)
  559.     --catch (
  560.     --print("error creating submesh")
  561.     --)
  562.     )
  563.  
  564.  
  565.  
  566. fclose f__mesh
  567.