@@ -2621,7 +2621,7 @@ void create_path_to_point(vec3d *curpos, vec3d *goalpos, object *curobjp, object
26212621void copy_xlate_model_path_points (object *objp, model_path *mp, int dir, int count, int path_num, pnode *pnp, int randomize_pnt)
26222622{
26232623 polymodel *pm;
2624- int i, modelnum;
2624+ int i, modelnum, model_instance_num ;
26252625 vec3d v1;
26262626 int pp_index; // index in Path_points at which to store point, if this is a modify-in-place (pnp ! NULL)
26272627 int start_index, finish_index;
@@ -2646,14 +2646,12 @@ void copy_xlate_model_path_points(object *objp, model_path *mp, int dir, int cou
26462646
26472647 // Goober5000 - check for rotating submodels
26482648 modelnum = Ship_info[Ships[objp->instance ].ship_info_index ].model_num ;
2649+ model_instance_num = Ships[objp->instance ].model_instance_num ;
26492650 pm = model_get (modelnum);
26502651 if ((mp->parent_submodel >= 0 ) && (pm->submodel [mp->parent_submodel ].movement_type >= 0 ))
26512652 {
26522653 rotating_submodel = true ;
26532654
2654- // start submodel calculation
2655- ship_model_start (objp);
2656-
26572655 model_find_submodel_offset (&submodel_offset, modelnum, mp->parent_submodel );
26582656 }
26592657 else
@@ -2670,7 +2668,7 @@ void copy_xlate_model_path_points(object *objp, model_path *mp, int dir, int cou
26702668 {
26712669 // movement... find location of point like with docking code and spark generation
26722670 vm_vec_sub (&local_vert, &mp->verts [i].pos , &submodel_offset);
2673- model_find_world_point (&v1, &local_vert, modelnum, mp->parent_submodel , &objp->orient , &objp->pos );
2671+ model_instance_find_world_point (&v1, &local_vert, modelnum, model_instance_num, mp->parent_submodel , &objp->orient , &objp->pos );
26742672 }
26752673 else
26762674 {
@@ -2692,12 +2690,6 @@ void copy_xlate_model_path_points(object *objp, model_path *mp, int dir, int cou
26922690 add_path_point (&v1, path_num, i, pp_index);
26932691 offset++;
26942692 }
2695-
2696- // stop submodel calculation
2697- if (!rotating_submodel)
2698- {
2699- ship_model_stop (objp);
2700- }
27012693}
27022694
27032695
@@ -6253,10 +6245,9 @@ void render_path_points(object *objp)
62536245 vec3d dock_point, global_dock_point;
62546246 vertex v;
62556247
6256- ship_model_start (&Objects[aip->goal_objnum ]);
62576248 if (pm->n_docks ) {
62586249 dock_point = pm->docking_bays [0 ].pnt [0 ];
6259- model_find_world_point (&global_dock_point, &dock_point, pm->id , 0 , &dobjp->orient , &dobjp->pos );
6250+ model_instance_find_world_point (&global_dock_point, &dock_point, pm->id , shipp-> model_instance_num , 0 , &dobjp->orient , &dobjp->pos );
62606251 g3_rotate_vertex (&v, &global_dock_point);
62616252 gr_set_color (255 , 255 , 255 );
62626253 g3_draw_sphere ( &v, 1 .5f );
@@ -6289,8 +6280,6 @@ void render_path_points(object *objp)
62896280 pp++;
62906281 }
62916282 }
6292-
6293- ship_model_stop (&Objects[aip->goal_objnum ]);
62946283}
62956284
62966285/* *
@@ -9040,22 +9029,21 @@ void find_adjusted_dockpoint_info(vec3d *global_p0, vec3d *global_p1, vec3d *glo
90409029 {
90419030 vec3d submodel_offset;
90429031 vec3d local_p0, local_p1;
9032+ ship *shipp;
90439033
9044- ship_model_start ( objp) ;
9034+ shipp = &Ships[ objp-> instance ] ;
90459035
90469036 // calculate the dockpoint locations relative to the unrotated submodel
90479037 model_find_submodel_offset (&submodel_offset, modelnum, submodel);
90489038 vm_vec_sub (&local_p0, &pm->docking_bays [dock_index].pnt [0 ], &submodel_offset);
90499039 vm_vec_sub (&local_p1, &pm->docking_bays [dock_index].pnt [1 ], &submodel_offset);
90509040
90519041 // find the dynamic positions of the dockpoints
9052- model_find_world_point (global_p0, &local_p0, modelnum, submodel, &objp->orient , &objp->pos );
9053- model_find_world_point (global_p1, &local_p1, modelnum, submodel, &objp->orient , &objp->pos );
9042+ model_instance_find_world_point (global_p0, &local_p0, modelnum, shipp-> model_instance_num , submodel, &objp->orient , &objp->pos );
9043+ model_instance_find_world_point (global_p1, &local_p1, modelnum, shipp-> model_instance_num , submodel, &objp->orient , &objp->pos );
90549044
90559045 // find the normal of the first dockpoint
9056- model_find_world_dir (global_p0_norm, &pm->docking_bays [dock_index].norm [0 ], modelnum, submodel, &objp->orient , &objp->pos );
9057-
9058- ship_model_stop (objp);
9046+ model_instance_find_world_dir (global_p0_norm, &pm->docking_bays [dock_index].norm [0 ], modelnum, shipp->model_instance_num , submodel, &objp->orient , &objp->pos );
90599047 }
90609048 // use the static dockpoints
90619049 else
@@ -9137,23 +9125,21 @@ float dock_orient_and_approach(object *docker_objp, int docker_index, object *do
91379125 vec3d submodel_offset;
91389126 vec3d dockpoint_temp;
91399127
9140- ship_model_start (dockee_objp);
9141-
91429128 // get submodel center
91439129 model_find_submodel_offset (&submodel_offset, sip1->model_num , dockee_rotating_submodel);
91449130 vm_vec_add (&submodel_pos, &dockee_objp->pos , &submodel_offset);
91459131
9132+ polymodel_instance *pmi1 = model_get_instance (Ships[dockee_objp->instance ].model_instance_num );
9133+
91469134 // get angular velocity of dockpoint
91479135 // WMC - hack(?) to fix bug where sii might not exist
9148- if (pm1 ->submodel [dockee_rotating_submodel].sii != NULL ) {
9149- submodel_omega = pm1 ->submodel [dockee_rotating_submodel].sii ->cur_turn_rate ;
9136+ if ( pmi1 ->submodel [dockee_rotating_submodel].sii != NULL ) {
9137+ submodel_omega = pmi1 ->submodel [dockee_rotating_submodel].sii ->cur_turn_rate ;
91509138 }
91519139
91529140 // get radius to dockpoint
91539141 vm_vec_avg (&dockpoint_temp, &dockee_p0, &dockee_p1);
91549142 submodel_radius = vm_vec_dist (&submodel_pos, &dockpoint_temp);
9155-
9156- ship_model_stop (dockee_objp);
91579143 }
91589144
91599145 // Goober5000
0 commit comments