@@ -1395,7 +1395,7 @@ void model_render_buffers(draw_list* scene, model_render_params* interp, vertex_
13951395 }
13961396}
13971397
1398- void model_render_children_buffers (draw_list* scene, model_render_params* interp, polymodel* pm, int mn, int detail_level, uint tmap_flags, bool trans_buffer)
1398+ void model_render_children_buffers (draw_list* scene, model_render_params* interp, polymodel* pm, polymodel_instance *pmi, int mn, int detail_level, uint tmap_flags, bool trans_buffer)
13991399{
14001400 int i;
14011401
@@ -1405,9 +1405,15 @@ void model_render_children_buffers(draw_list* scene, model_render_params* interp
14051405 }
14061406
14071407 bsp_info *model = &pm->submodel [mn];
1408+ submodel_instance *smi = NULL ;
14081409
1409- if (model->blown_off )
1410+ if ( pmi != NULL ) {
1411+ smi = &pmi->submodel [mn];
1412+ }
1413+
1414+ if ( (smi != NULL && smi->blown_off ) || model->blown_off ) {
14101415 return ;
1416+ }
14111417
14121418 const uint model_flags = interp->get_model_flags ();
14131419
@@ -1430,6 +1436,10 @@ void model_render_children_buffers(draw_list* scene, model_render_params* interp
14301436 // the submodel relative to its parent
14311437 angles ang = model->angs ;
14321438
1439+ if ( smi != NULL ) {
1440+ ang = smi->angs ;
1441+ }
1442+
14331443 // Add barrel rotation if needed
14341444 if ( model->gun_rotation ) {
14351445 if ( pm->gun_submodel_rotation > PI2 ) {
@@ -1477,7 +1487,7 @@ void model_render_children_buffers(draw_list* scene, model_render_params* interp
14771487
14781488 while ( i >= 0 ) {
14791489 if ( !pm->submodel [i].is_thruster ) {
1480- model_render_children_buffers ( scene, interp, pm, i, detail_level, tmap_flags, trans_buffer );
1490+ model_render_children_buffers ( scene, interp, pm, pmi, i, detail_level, tmap_flags, trans_buffer );
14811491 }
14821492
14831493 i = pm->submodel [i].next_sibling ;
@@ -2670,6 +2680,7 @@ void model_render_queue(model_render_params *interp, draw_list *scene, int model
26702680 const int model_flags = interp->get_model_flags ();
26712681
26722682 polymodel *pm = model_get (model_num);
2683+ polymodel_instance *pmi = NULL ;
26732684
26742685 model_do_dumb_rotation (model_num);
26752686
@@ -2714,6 +2725,7 @@ void model_render_queue(model_render_params *interp, draw_list *scene, int model
27142725
27152726 if (objp->type == OBJ_SHIP) {
27162727 shipp = &Ships[objp->instance ];
2728+ pmi = model_get_instance (shipp->model_instance_num );
27172729 }
27182730 }
27192731
@@ -2849,7 +2861,7 @@ void model_render_queue(model_render_params *interp, draw_list *scene, int model
28492861
28502862 while ( i >= 0 ) {
28512863 if ( !pm->submodel [i].is_thruster ) {
2852- model_render_children_buffers ( scene, interp, pm, i, detail_level, tmap_flags, trans_buffer );
2864+ model_render_children_buffers ( scene, interp, pm, pmi, i, detail_level, tmap_flags, trans_buffer );
28532865 } else {
28542866 draw_thrusters = true ;
28552867 }
@@ -2886,7 +2898,7 @@ void model_render_queue(model_render_params *interp, draw_list *scene, int model
28862898
28872899 while ( i >= 0 ) {
28882900 if ( !pm->submodel [i].is_thruster ) {
2889- model_render_children_buffers ( scene, interp, pm, i, detail_level, tmap_flags, trans_buffer );
2901+ model_render_children_buffers ( scene, interp, pm, pmi, i, detail_level, tmap_flags, trans_buffer );
28902902 }
28912903
28922904 i = pm->submodel [i].next_sibling ;
@@ -2907,7 +2919,7 @@ void model_render_queue(model_render_params *interp, draw_list *scene, int model
29072919
29082920 while ( i >= 0 ) {
29092921 if (pm->submodel [i].is_thruster ) {
2910- model_render_children_buffers ( scene, interp, pm, i, detail_level, tmap_flags, trans_buffer );
2922+ model_render_children_buffers ( scene, interp, pm, pmi, i, detail_level, tmap_flags, trans_buffer );
29112923 }
29122924 i = pm->submodel [i].next_sibling ;
29132925 }
0 commit comments