Guest User

Untitled

a guest
Jun 9th, 2023
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. global.Anorms = [
  2. [ -0.525731,  0.000000,  0.850651 ],
  3. [ -0.442863,  0.238856,  0.864188 ],
  4. [ -0.295242,  0.000000,  0.955423 ],
  5. [ -0.309017,  0.500000,  0.809017 ],
  6. [ -0.162460,  0.262866,  0.951056 ],
  7. [  0.000000,  0.000000,  1.000000 ],
  8. [  0.000000,  0.850651,  0.525731 ],
  9. [ -0.147621,  0.716567,  0.681718 ],
  10. [  0.147621,  0.716567,  0.681718 ],
  11. [  0.000000,  0.525731,  0.850651 ],
  12. [  0.309017,  0.500000,  0.809017 ],
  13. [  0.525731,  0.000000,  0.850651 ],
  14. [  0.295242,  0.000000,  0.955423 ],
  15. [  0.442863,  0.238856,  0.864188 ],
  16. [  0.162460,  0.262866,  0.951056 ],
  17. [ -0.681718,  0.147621,  0.716567 ],
  18. [ -0.809017,  0.309017,  0.500000 ],
  19. [ -0.587785,  0.425325,  0.688191 ],
  20. [ -0.850651,  0.525731,  0.000000 ],
  21. [ -0.864188,  0.442863,  0.238856 ],
  22. [ -0.716567,  0.681718,  0.147621 ],
  23. [ -0.688191,  0.587785,  0.425325 ],
  24. [ -0.500000,  0.809017,  0.309017 ],
  25. [ -0.238856,  0.864188,  0.442863 ],
  26. [ -0.425325,  0.688191,  0.587785 ],
  27. [ -0.716567,  0.681718, -0.147621 ],
  28. [ -0.500000,  0.809017, -0.309017 ],
  29. [ -0.525731,  0.850651,  0.000000 ],
  30. [  0.000000,  0.850651, -0.525731 ],
  31. [ -0.238856,  0.864188, -0.442863 ],
  32. [  0.000000,  0.955423, -0.295242 ],
  33. [ -0.262866,  0.951056, -0.162460 ],
  34. [  0.000000,  1.000000,  0.000000 ],
  35. [  0.000000,  0.955423,  0.295242 ],
  36. [ -0.262866,  0.951056,  0.162460 ],
  37. [  0.238856,  0.864188,  0.442863 ],
  38. [  0.262866,  0.951056,  0.162460 ],
  39. [  0.500000,  0.809017,  0.309017 ],
  40. [  0.238856,  0.864188, -0.442863 ],
  41. [  0.262866,  0.951056, -0.162460 ],
  42. [  0.500000,  0.809017, -0.309017 ],
  43. [  0.850651,  0.525731,  0.000000 ],
  44. [  0.716567,  0.681718,  0.147621 ],
  45. [  0.716567,  0.681718, -0.147621 ],
  46. [  0.525731,  0.850651,  0.000000 ],
  47. [  0.425325,  0.688191,  0.587785 ],
  48. [  0.864188,  0.442863,  0.238856 ],
  49. [  0.688191,  0.587785,  0.425325 ],
  50. [  0.809017,  0.309017,  0.500000 ],
  51. [  0.681718,  0.147621,  0.716567 ],
  52. [  0.587785,  0.425325,  0.688191 ],
  53. [  0.955423,  0.295242,  0.000000 ],
  54. [  1.000000,  0.000000,  0.000000 ],
  55. [  0.951056,  0.162460,  0.262866 ],
  56. [  0.850651, -0.525731,  0.000000 ],
  57. [  0.955423, -0.295242,  0.000000 ],
  58. [  0.864188, -0.442863,  0.238856 ],
  59. [  0.951056, -0.162460,  0.262866 ],
  60. [  0.809017, -0.309017,  0.500000 ],
  61. [  0.681718, -0.147621,  0.716567 ],
  62. [  0.850651,  0.000000,  0.525731 ],
  63. [  0.864188,  0.442863, -0.238856 ],
  64. [  0.809017,  0.309017, -0.500000 ],
  65. [  0.951056,  0.162460, -0.262866 ],
  66. [  0.525731,  0.000000, -0.850651 ],
  67. [  0.681718,  0.147621, -0.716567 ],
  68. [  0.681718, -0.147621, -0.716567 ],
  69. [  0.850651,  0.000000, -0.525731 ],
  70. [  0.809017, -0.309017, -0.500000 ],
  71. [  0.864188, -0.442863, -0.238856 ],
  72. [  0.951056, -0.162460, -0.262866 ],
  73. [  0.147621,  0.716567, -0.681718 ],
  74. [  0.309017,  0.500000, -0.809017 ],
  75. [  0.425325,  0.688191, -0.587785 ],
  76. [  0.442863,  0.238856, -0.864188 ],
  77. [  0.587785,  0.425325, -0.688191 ],
  78. [  0.688191,  0.587785, -0.425325 ],
  79. [ -0.147621,  0.716567, -0.681718 ],
  80. [ -0.309017,  0.500000, -0.809017 ],
  81. [  0.000000,  0.525731, -0.850651 ],
  82. [ -0.525731,  0.000000, -0.850651 ],
  83. [ -0.442863,  0.238856, -0.864188 ],
  84. [ -0.295242,  0.000000, -0.955423 ],
  85. [ -0.162460,  0.262866, -0.951056 ],
  86. [  0.000000,  0.000000, -1.000000 ],
  87. [  0.295242,  0.000000, -0.955423 ],
  88. [  0.162460,  0.262866, -0.951056 ],
  89. [ -0.442863, -0.238856, -0.864188 ],
  90. [ -0.309017, -0.500000, -0.809017 ],
  91. [ -0.162460, -0.262866, -0.951056 ],
  92. [  0.000000, -0.850651, -0.525731 ],
  93. [ -0.147621, -0.716567, -0.681718 ],
  94. [  0.147621, -0.716567, -0.681718 ],
  95. [  0.000000, -0.525731, -0.850651 ],
  96. [  0.309017, -0.500000, -0.809017 ],
  97. [  0.442863, -0.238856, -0.864188 ],
  98. [  0.162460, -0.262866, -0.951056 ],
  99. [  0.238856, -0.864188, -0.442863 ],
  100. [  0.500000, -0.809017, -0.309017 ],
  101. [  0.425325, -0.688191, -0.587785 ],
  102. [  0.716567, -0.681718, -0.147621 ],
  103. [  0.688191, -0.587785, -0.425325 ],
  104. [  0.587785, -0.425325, -0.688191 ],
  105. [  0.000000, -0.955423, -0.295242 ],
  106. [  0.000000, -1.000000,  0.000000 ],
  107. [  0.262866, -0.951056, -0.162460 ],
  108. [  0.000000, -0.850651,  0.525731 ],
  109. [  0.000000, -0.955423,  0.295242 ],
  110. [  0.238856, -0.864188,  0.442863 ],
  111. [  0.262866, -0.951056,  0.162460 ],
  112. [  0.500000, -0.809017,  0.309017 ],
  113. [  0.716567, -0.681718,  0.147621 ],
  114. [  0.525731, -0.850651,  0.000000 ],
  115. [ -0.238856, -0.864188, -0.442863 ],
  116. [ -0.500000, -0.809017, -0.309017 ],
  117. [ -0.262866, -0.951056, -0.162460 ],
  118. [ -0.850651, -0.525731,  0.000000 ],
  119. [ -0.716567, -0.681718, -0.147621 ],
  120. [ -0.716567, -0.681718,  0.147621 ],
  121. [ -0.525731, -0.850651,  0.000000 ],
  122. [ -0.500000, -0.809017,  0.309017 ],
  123. [ -0.238856, -0.864188,  0.442863 ],
  124. [ -0.262866, -0.951056,  0.162460 ],
  125. [ -0.864188, -0.442863,  0.238856 ],
  126. [ -0.809017, -0.309017,  0.500000 ],
  127. [ -0.688191, -0.587785,  0.425325 ],
  128. [ -0.681718, -0.147621,  0.716567 ],
  129. [ -0.442863, -0.238856,  0.864188 ],
  130. [ -0.587785, -0.425325,  0.688191 ],
  131. [ -0.309017, -0.500000,  0.809017 ],
  132. [ -0.147621, -0.716567,  0.681718 ],
  133. [ -0.425325, -0.688191,  0.587785 ],
  134. [ -0.162460, -0.262866,  0.951056 ],
  135. [  0.442863, -0.238856,  0.864188 ],
  136. [  0.162460, -0.262866,  0.951056 ],
  137. [  0.309017, -0.500000,  0.809017 ],
  138. [  0.147621, -0.716567,  0.681718 ],
  139. [  0.000000, -0.525731,  0.850651 ],
  140. [  0.425325, -0.688191,  0.587785 ],
  141. [  0.587785, -0.425325,  0.688191 ],
  142. [  0.688191, -0.587785,  0.425325 ],
  143. [ -0.955423,  0.295242,  0.000000 ],
  144. [ -0.951056,  0.162460,  0.262866 ],
  145. [ -1.000000,  0.000000,  0.000000 ],
  146. [ -0.850651,  0.000000,  0.525731 ],
  147. [ -0.955423, -0.295242,  0.000000 ],
  148. [ -0.951056, -0.162460,  0.262866 ],
  149. [ -0.864188,  0.442863, -0.238856 ],
  150. [ -0.951056,  0.162460, -0.262866 ],
  151. [ -0.809017,  0.309017, -0.500000 ],
  152. [ -0.864188, -0.442863, -0.238856 ],
  153. [ -0.951056, -0.162460, -0.262866 ],
  154. [ -0.809017, -0.309017, -0.500000 ],
  155. [ -0.681718,  0.147621, -0.716567 ],
  156. [ -0.681718, -0.147621, -0.716567 ],
  157. [ -0.850651,  0.000000, -0.525731 ],
  158. [ -0.688191,  0.587785, -0.425325 ],
  159. [ -0.587785,  0.425325, -0.688191 ],
  160. [ -0.425325,  0.688191, -0.587785 ],
  161. [ -0.425325, -0.688191, -0.587785 ],
  162. [ -0.587785, -0.425325, -0.688191 ],
  163. [ -0.688191, -0.587785, -0.425325 ]];
  164.  
  165. #macro ANORMS global.Anorms
  166.  
  167. // Function to parse the MDL file
  168. function parse_mdl(file, absolute = false) {
  169.    
  170.     if QuakeMgr.mdlDat[? file] == undefined{
  171.        
  172.         shader_set(shd_palettize);
  173.         texture_set_stage( shader_get_sampler_index(shd_palettize,"u_pal"), sprite_get_texture(global.palTex,0) );
  174.         gpu_set_tex_repeat_ext(shader_get_sampler_index(shd_palettize,"u_pal"),false);
  175.         gpu_set_tex_filter_ext(shader_get_sampler_index(shd_palettize,"u_pal"),false);
  176.        
  177.         //trace("Importing MDL: "+file);
  178.         var value = string_replace_all(file,"/","\\");
  179.        
  180.         if absolute == false{
  181.             value = filename_dir_goup(filename_dir(QuakeMgr.bspFile))+"\\"+value;
  182.         }
  183.        
  184.         if file_exists(value){
  185.             //trace("MDL Found: "+filename_name(value));
  186.             _isMDLEntity = true;
  187.         }else{
  188.             //trace("MDL Does Not Exist: "+filename_name(value));
  189.             return false;
  190.         }
  191.         // Open the file
  192.         var mdl_buff = buffer_load(value);
  193.    
  194.         var _mdl = {
  195.             ident: 0,
  196.             version: 0,
  197.             scale: [0, 0, 0],
  198.             translate: [0, 0, 0],
  199.             boundingradius: 0,
  200.             eyeposition: [0, 0, 0],
  201.             num_skins: 0,
  202.             skinwidth: 0,
  203.             skinheight: 0,
  204.             num_verts: 0,
  205.             num_tris: 0,
  206.             num_frames: 0,
  207.             synctype: 0,
  208.             flags: 0,
  209.             size: 0,
  210.             skins: null,
  211.             group: 0,
  212.             num_pics: 0,
  213.             verts: null,
  214.             tris: null,
  215.             frames: null
  216.         };
  217.  
  218.         // Read the header information
  219.         _mdl.ident = buffer_read(mdl_buff, buffer_u32);
  220.         if _mdl.ident != 1330660425{
  221.             trace("Incorrect Model Ident");
  222.             return false;
  223.         }else{
  224.             //trace("Model Ident as Expected");
  225.         }
  226.    
  227.         _mdl.version = buffer_read(mdl_buff, buffer_u32);
  228.         if _mdl.version != 6{
  229.             trace("Incorrect Model Version");
  230.             return false;
  231.         }else{
  232.             //trace("Model Version as Expected");
  233.         }
  234.    
  235.         _mdl.scale = [buffer_read(mdl_buff, buffer_f32),
  236.                     buffer_read(mdl_buff, buffer_f32),
  237.                     buffer_read(mdl_buff, buffer_f32)]
  238.    
  239.         _mdl.translate = [buffer_read(mdl_buff, buffer_f32),
  240.                         buffer_read(mdl_buff, buffer_f32),
  241.                         buffer_read(mdl_buff, buffer_f32)]
  242.                
  243.         _mdl.boundingradius = buffer_read(mdl_buff, buffer_f32);
  244.    
  245.  
  246.         _mdl.eyeposition = [buffer_read(mdl_buff, buffer_f32),
  247.                             buffer_read(mdl_buff, buffer_f32),
  248.                             buffer_read(mdl_buff, buffer_f32)]
  249.                        
  250.         _mdl.num_skins = buffer_read(mdl_buff, buffer_u32);
  251.         _mdl.skinwidth = buffer_read(mdl_buff, buffer_u32);
  252.         _mdl.skinheight = buffer_read(mdl_buff,buffer_u32);
  253.    
  254.         _mdl.num_verts = buffer_read(mdl_buff,  buffer_u32);
  255.         _mdl.num_tris = buffer_read(mdl_buff,   buffer_u32);
  256.         _mdl.num_frames = buffer_read(mdl_buff, buffer_u32);
  257.    
  258.         _mdl.synctype = buffer_read(mdl_buff, buffer_u32);
  259.         _mdl.flags = buffer_read(mdl_buff, buffer_u32);
  260.    
  261.         _mdl.size = buffer_read(mdl_buff, buffer_f32);
  262.                
  263.         var w,h;
  264.         w = _mdl.skinwidth;
  265.         h = _mdl.skinheight;
  266.        
  267.         _mdl.skins = array_create(_mdl.num_skins);
  268.         var skin = 0;
  269.        
  270.         for ( var i = 0; i < _mdl.num_skins; ++i){//_mdl.num_skins{
  271.            
  272.             _mdl.group = buffer_read(mdl_buff, buffer_s32);
  273.             if _mdl.group != 0{
  274.                 _mdl.num_pics = buffer_read(mdl_buff, buffer_u32);
  275.                 //trace("MDL Contains "+string(_mdl.num_pics)+" Pics in Group");
  276.             }else{
  277.                 //trace("MDL Contains Single Image Skin");
  278.                 _mdl.num_pics = 1;
  279.             }
  280.            
  281.            
  282.             //trace("Number of frames in Skin: "+string(_mdl.num_pics) );
  283.            
  284.             _mdl.skins[skin] = array_create(_mdl.num_pics);
  285.            
  286.             for ( var pic = 0; pic < _mdl.num_pics; pic++){
  287.                 if ( w > 0 && h > 0 ){
  288.                    
  289.                     var surf = surface_create(w,h,surface_r8unorm);
  290.                     var mBuffer = buffer_create( (w*h),buffer_fast,1)
  291.                     //trace("Building Skin: " +string(skin)+", "+string(pic));
  292.                     //trace(string(w)+", "+string(h));
  293.                     //repeat ( w * h ){
  294.                     //  buffer_write(mBuffer, buffer_u32, buffer_read(mdl_buff, buffer_u8) );
  295.                     //}
  296.                    
  297.                
  298.                     buffer_copy(mdl_buff,buffer_tell(mdl_buff),w*h,mBuffer,0);
  299.                    
  300.                     buffer_seek(mdl_buff,buffer_seek_relative,w*h);
  301.                    
  302.                     buffer_set_surface( mBuffer,surf,0);
  303.                     buffer_delete(mBuffer);
  304.                    
  305.                     var surf2 = surface_create(w,h);
  306.                     surface_set_target(surf2);
  307.                     draw_clear_alpha(0,0);
  308.                     draw_surface(surf,0,0);
  309.                     surface_reset_target();
  310.                     surface_free(surf);
  311.                    
  312.                     _mdl.skins[skin][pic] = {};
  313.                    
  314.                     _mdl.skins[skin][pic].sprite = sprite_create_from_surface(surf2,0,0, w,h, 0,0,0,0);
  315.                     _mdl.skins[skin][pic].texture = sprite_get_texture( _mdl.skins[skin][pic].sprite, 0);
  316.                    
  317.                     surface_free(surf2);
  318.                    
  319.                     //sprite_save(_mdl.skins[skin][pic].sprite,0,string_replace_all(value,".mdl","")+"-"+string(skin)+"-"+string(pic)+".png");
  320.                 }
  321.                 //pic++;
  322.             }
  323.             skin++;
  324.         }
  325.        
  326.         gpu_set_tex_filter_ext(shader_get_sampler_index(shd_palettize,"u_pal"),true);
  327.         shader_reset();
  328.         //trace("Loading verts");
  329.         _mdl.verts = array_create(_mdl.num_verts);
  330.         for ( var i = 0; i < _mdl.num_verts; i++){//_mdl.num_verts{
  331.             var vert = {};
  332.             vert.onseam = buffer_read(mdl_buff,buffer_u32);
  333.             vert.s = buffer_read(mdl_buff,buffer_u32);
  334.             vert.t = buffer_read(mdl_buff,buffer_u32);
  335.            
  336.             vert.s = ( vert.s + 0.5 ) / _mdl.skinwidth;
  337.             vert.t = ( vert.t + 0.5 ) / _mdl.skinheight;
  338.            
  339.             _mdl.verts[i] = vert;
  340.         }
  341.        
  342.         _mdl.tris = array_create(_mdl.num_tris);
  343.         //trace("Loading tris");
  344.         for ( var i = 0; i < _mdl.num_tris; i++){//_mdl.num_tris{
  345.             var tri = {};
  346.             tri.facesfront = buffer_read(mdl_buff,buffer_u32);
  347.             tri.vert[0] = buffer_read(mdl_buff,buffer_u32);
  348.             tri.vert[1] = buffer_read(mdl_buff,buffer_u32);
  349.             tri.vert[2] = buffer_read(mdl_buff,buffer_u32);
  350.             _mdl.tris[i] = tri;
  351.         }
  352.        
  353.         //trace("Loading Frames");
  354.         _mdl.frames = array_create(_mdl.num_frames,undefined);
  355.         for (var frame = 0; frame < _mdl.num_frames; ++frame)
  356.         {
  357.             var _frame = {};
  358.             _mdl.frames[frame] = _frame;
  359.             _frame.type = buffer_read(mdl_buff, buffer_s32);
  360.             // Simple frame
  361.             if (_frame.type == 0)
  362.             {
  363.                 _frame.bboxmin = array_create(3);
  364.                 _frame.bboxmin[0] = buffer_read(mdl_buff, buffer_u8);
  365.                 _frame.bboxmin[1] = buffer_read(mdl_buff, buffer_u8);
  366.                 _frame.bboxmin[2] = buffer_read(mdl_buff, buffer_u8);
  367.                 /*_frame.bboxmin[3] =*/ buffer_read(mdl_buff, buffer_u8);
  368.                 _frame.bboxmax = array_create(3);
  369.                 _frame.bboxmax[0] = buffer_read(mdl_buff, buffer_u8);
  370.                 _frame.bboxmax[1] = buffer_read(mdl_buff, buffer_u8);
  371.                 _frame.bboxmax[2] = buffer_read(mdl_buff, buffer_u8);
  372.                 /*_frame.bboxmax[3] =*/ buffer_read(mdl_buff, buffer_u8);
  373.                 _frame.name = read_string_from_buffer(mdl_buff, 16);
  374.                 _frame.verts = array_create(_mdl.num_verts);
  375.                 for (var i = 0; i < _mdl.num_verts; ++i)
  376.                 {
  377.                     _frame.verts[i] = {};
  378.                     _frame.verts[i].v = array_create(3);
  379.                     _frame.verts[i].v[0] = buffer_read(mdl_buff, buffer_u8);
  380.                     _frame.verts[i].v[1] = buffer_read(mdl_buff, buffer_u8);
  381.                     _frame.verts[i].v[2] = buffer_read(mdl_buff, buffer_u8);
  382.                     _frame.verts[i].normalIndex = buffer_read(mdl_buff, buffer_u8);
  383.                 }
  384.             }
  385.             // Compound frame
  386.             else
  387.             {
  388.                 _frame.nm = buffer_read(mdl_buff, buffer_s32);
  389.                 if (_frame.nm < 0)
  390.                 {
  391.                     debugLog(kLogError, "corrupted frame section");
  392.                     return false;
  393.                 }
  394.                 _frame.bboxmin[0] = buffer_read(mdl_buff, buffer_u8);
  395.                 _frame.bboxmin[1] = buffer_read(mdl_buff, buffer_u8);
  396.                 _frame.bboxmin[2] = buffer_read(mdl_buff, buffer_u8);
  397.                 /*_frame.bboxmin[3] =*/ buffer_read(mdl_buff, buffer_u8);
  398.                 _frame.bboxmax = array_create(3);
  399.                 _frame.bboxmax[0] = buffer_read(mdl_buff, buffer_u8);
  400.                 _frame.bboxmax[1] = buffer_read(mdl_buff, buffer_u8);
  401.                 _frame.bboxmax[2] = buffer_read(mdl_buff, buffer_u8);
  402.                 /*_frame.bboxmax[3] =*/ buffer_read(mdl_buff, buffer_u8);
  403.                 _frame.times = array_create(_frame.nm);
  404.                 for (var subframe = 0; subframe < _frame.nm; ++subframe)
  405.                 {
  406.                     _frame.times[subframe] = buffer_read(mdl_buff, buffer_f32);
  407.                 }
  408.                 _frame.frames = array_create(_frame.nm);
  409.                 for (var subframe = 0; subframe < _frame.nm; ++subframe)
  410.                 {
  411.                     _frame.frames[subframe] = {};
  412.                     _frame.frames[subframe].bboxmin = array_create(3);
  413.                     _frame.frames[subframe].bboxmin[0] = buffer_read(mdl_buff, buffer_u8);
  414.                     _frame.frames[subframe].bboxmin[1] = buffer_read(mdl_buff, buffer_u8);
  415.                     _frame.frames[subframe].bboxmin[2] = buffer_read(mdl_buff, buffer_u8);
  416.                     /*_frame.bboxmin[3] =*/ buffer_read(mdl_buff, buffer_u8);
  417.                     _frame.frames[subframe].bboxmax = array_create(3);
  418.                     _frame.frames[subframe].bboxmax[0] = buffer_read(mdl_buff, buffer_u8);
  419.                     _frame.frames[subframe].bboxmax[1] = buffer_read(mdl_buff, buffer_u8);
  420.                     _frame.frames[subframe].bboxmax[2] = buffer_read(mdl_buff, buffer_u8);
  421.                     /*_frame.bboxmax[3] =*/ buffer_read(mdl_buff, buffer_u8);
  422.                     _frame.frames[subframe].name = read_string_from_buffer(mdl_buff, 16);
  423.                     _frame.frames[subframe].verts = array_create(_mdl.num_verts);
  424.                     for (var i = 0; i < _mdl.num_verts; ++i)
  425.                     {
  426.                         _frame.frames[subframe].verts[i] = {};
  427.                         _frame.frames[subframe].verts[i].v = array_create(3);
  428.                         _frame.frames[subframe].verts[i].v[0] = buffer_read(mdl_buff, buffer_u8);
  429.                         _frame.frames[subframe].verts[i].v[1] = buffer_read(mdl_buff, buffer_u8);
  430.                         _frame.frames[subframe].verts[i].v[2] = buffer_read(mdl_buff, buffer_u8);
  431.                         _frame.frames[subframe].verts[i].normalIndex = buffer_read(mdl_buff, buffer_u8);
  432.                     }
  433.                 }
  434.             }
  435.         }
  436.        
  437.         //trace("Creating Vertex Buffers");
  438.         for ( var _f = 0; _f < _mdl.num_frames; _f++){
  439.             var _frame = _mdl.frames[_f];
  440.             if (_frame.type == 0){
  441.                 var _vbuff = vertex_create_buffer();
  442.                 _frame.vbuff = _vbuff;
  443.                 vertex_begin(_vbuff,QuakeMgr.vFormatMDL);
  444.                 var _verts = _frame.verts;
  445.                 for (var _t = 0; _t < _mdl.num_tris; ++_t){
  446.                     var _tri = _mdl.tris[_t];
  447.                     mdl_add_tri(_mdl,_vbuff,_tri,_verts);
  448.                 }
  449.                 vertex_end(_vbuff);
  450.             } else {
  451.                 //trace("Number of Subframes: "+string(_frame.nm));
  452.                 for (var subframe = 0; subframe < _frame.nm; ++subframe){
  453.                    
  454.                     var _subframe = _frame.frames[subframe];
  455.                     var _vbuff = vertex_create_buffer();
  456.                     _subframe.vbuff = _vbuff;
  457.                     vertex_begin(_vbuff,QuakeMgr.vFormatMDL);
  458.                     var _verts = _subframe.verts;
  459.                     for (var _t = 0; _t < _mdl.num_tris; ++_t){
  460.                         var _tri = _mdl.tris[_t];
  461.                         mdl_add_tri(_mdl,_vbuff,_tri,_verts);
  462.                     }
  463.                     vertex_end(_vbuff);
  464.                 }
  465.             }
  466.    
  467.             // Close the file
  468.             buffer_delete(mdl_buff);
  469.        
  470.             QuakeMgr.mdlDat[? file] = _mdl;
  471.         }
  472.    
  473.     }else{
  474.         //trace("MDL Already Imported: "+file);
  475.     }
  476.    
  477.     return QuakeMgr.mdlDat[? file];
  478. }
  479.  
  480. function mdl_add_tri( _mdl,_vbuffer,_tri, _verts ){
  481.    
  482.     var v1,v2,v3;
  483.     v1 = _verts[_tri.vert[0]].v;
  484.     v2 = _verts[_tri.vert[1]].v;
  485.     v3 = _verts[_tri.vert[2]].v;
  486.    
  487.     var vst1,vst2,vst3;
  488.     vst1 = _mdl.verts[_tri.vert[0]];
  489.     vst2 = _mdl.verts[_tri.vert[1]];
  490.     vst3 = _mdl.verts[_tri.vert[2]];
  491.    
  492.     var n1,n2,n3;
  493.     n1 = ANORMS[_verts[_tri.vert[0]].normalIndex];
  494.     n2 = ANORMS[_verts[_tri.vert[1]].normalIndex];
  495.     n3 = ANORMS[_verts[_tri.vert[2]].normalIndex];
  496.    
  497.     mdl_add_point(_mdl,_vbuffer,v1,vst1,n1,_tri.facesfront);
  498.     mdl_add_point(_mdl,_vbuffer,v2,vst2,n2,_tri.facesfront);
  499.     mdl_add_point(_mdl,_vbuffer,v3,vst3,n3,_tri.facesfront);
  500.    
  501. }
  502.  
  503. function mdl_add_point(_mdl, _vbuffer, _vF,_vST, _norm, facesfront){
  504.    
  505.     vertex_position_3d(_vbuffer, _vF[0]*_mdl.scale[0]+_mdl.translate[0],_vF[1]*_mdl.scale[1]+_mdl.translate[1],_vF[2]*_mdl.scale[2]+_mdl.translate[2]);
  506.     vertex_normal(_vbuffer,_norm[0],_norm[1],_norm[2]);
  507.     vertex_color(_vbuffer,c_white,1);
  508.    
  509.    
  510.     var s,t;
  511.     s = _vST.s;
  512.     t = _vST.t;
  513.    
  514.     s = facesfront ? _vST.s : _vST.s + (0.5) * (_vST.onseam != 0);
  515.    
  516.    
  517.     vertex_texcoord(_vbuffer, s,t);
  518.    
  519. }
Advertisement
Add Comment
Please, Sign In to add comment