MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / ResetPlayerObject

Function ResetPlayerObject

Descent3/Player.cpp:2487–2576  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2485void MovePlayerToWaypoint(object *objp);
2486
2487void 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;

Callers 5

StartLevelFunction · 0.85
MultiDoPlayerFunction · 0.85
MultiDoPlayerEnteredGameFunction · 0.85
EndPlayerDeathFunction · 0.85
PlayerStopObservingFunction · 0.85

Calls 10

ObjSetPosFunction · 0.85
MovePlayerToWaypointFunction · 0.85
vm_MakeZeroFunction · 0.85
SetObjectControlTypeFunction · 0.85
MultiMakePlayerRealFunction · 0.85
ObjGetFunction · 0.85
ResetReticleFunction · 0.85
StopSoundLoopingMethod · 0.80
CheckItemMethod · 0.80
AddMethod · 0.45

Tested by

no test coverage detected