| 2485 | void MovePlayerToWaypoint(object *objp); |
| 2486 | |
| 2487 | void ResetPlayerObject(int slot, bool f_reset_pos) { |
| 2488 | // Init physics |
| 2489 | object *playobj = &Objects[Players[slot].objnum]; |
| 2490 | ship *ship = &Ships[Players[slot].ship_index]; |
| 2491 | |
| 2492 | playobj->shields = INITIAL_SHIELDS; |
| 2493 | Players[slot].energy = INITIAL_ENERGY; |
| 2494 | playobj->mtype.phys_info = Ships[Players[slot].ship_index].phys_info; |
| 2495 | Objects[Players[slot].objnum].effect_info->type_flags = EF_VOLUME_LIT; |
| 2496 | |
| 2497 | if (playobj->effect_info->sound_handle != SOUND_NONE_INDEX) { |
| 2498 | Sound_system.StopSoundLooping(playobj->effect_info->sound_handle); |
| 2499 | playobj->effect_info->sound_handle = SOUND_NONE_INDEX; |
| 2500 | } |
| 2501 | |
| 2502 | if (f_reset_pos) { |
| 2503 | if ((Game_mode & GM_MULTI) && !(Netgame.flags & NF_RESPAWN_WAYPOINT)) { |
| 2504 | ObjSetPos(playobj, &Players[slot].start_pos, Players[slot].start_roomnum, &Players[slot].start_orient, false); |
| 2505 | } else { |
| 2506 | MovePlayerToWaypoint(playobj); |
| 2507 | } |
| 2508 | } |
| 2509 | |
| 2510 | playobj->render_type = RT_POLYOBJ; |
| 2511 | playobj->rtype.pobj_info.model_num = ship->model_handle; |
| 2512 | playobj->rtype.pobj_info.dying_model_num = ship->dying_model_handle; |
| 2513 | playobj->rtype.pobj_info.tmap_override = -1; |
| 2514 | playobj->rtype.pobj_info.subobj_flags = 0xFFFFFFFF; |
| 2515 | playobj->lighting_render_type = LRT_GOURAUD; |
| 2516 | playobj->lm_object.used = 0; |
| 2517 | playobj->flags = (OF_POLYGON_OBJECT | OF_DESTROYABLE); |
| 2518 | |
| 2519 | if (Demo_flags == DF_PLAYBACK) { |
| 2520 | playobj->flags |= OF_SERVER_OBJECT; |
| 2521 | } |
| 2522 | |
| 2523 | if (Game_mode & GM_MULTI) { |
| 2524 | if (Netgame.local_role == LR_CLIENT) { |
| 2525 | playobj->flags |= OF_SERVER_OBJECT; |
| 2526 | } else |
| 2527 | playobj->flags |= OF_CLIENT_KNOWS; |
| 2528 | } |
| 2529 | |
| 2530 | playobj->size = Poly_models[playobj->rtype.pobj_info.model_num].rad; |
| 2531 | |
| 2532 | vm_MakeZero(&playobj->mtype.phys_info.velocity); |
| 2533 | vm_MakeZero(&playobj->mtype.phys_info.thrust); |
| 2534 | vm_MakeZero(&playobj->mtype.phys_info.rotvel); |
| 2535 | vm_MakeZero(&playobj->mtype.phys_info.rotthrust); |
| 2536 | |
| 2537 | playobj->mtype.phys_info.turnroll = 0; |
| 2538 | |
| 2539 | if (slot == Player_num) { |
| 2540 | SetObjectControlType(playobj, CT_FLYING); |
| 2541 | playobj->movement_type = MT_PHYSICS; |
| 2542 | } else { |
| 2543 | SetObjectControlType(playobj, CT_NONE); |
| 2544 | playobj->movement_type = MT_PHYSICS; |
no test coverage detected