- else{
- /* de-transform camera and player back */
- m4x3f inverse;
- m4x3_invert_affine( player->gate_waiting->transport, inverse );
- m4x3_mulv( inverse, player->cam.pos, player->cam.pos );
-
- struct skeleton *sk = &player->playeravatar->sk;
- skeleton_apply_transform( sk, inverse );
+
+ m4x3f inverse;
+ m4x3_invert_affine( localplayer.gate_waiting->transport, inverse );
+
+ /* de-transform camera and player back */
+ v3f v0;
+ m4x3_mulv( inverse, localplayer.cam.pos, localplayer.cam.pos );
+ v3_angles_vector( localplayer.cam.angles, v0 );
+ m3x3_mulv( inverse, v0, v0 );
+ v3_angles( v0, localplayer.cam.angles );
+
+ skeleton_apply_transform( &localplayer.skeleton, inverse,
+ localplayer.final_mtx );
+
+ /* record and re-put things again */
+ if( cleared ){
+ skaterift_record_frame( &skaterift.replay, 1 );
+ localplayer.deferred_frame_record = 1;
+
+ skeleton_apply_transform( &localplayer.skeleton,
+ localplayer.gate_waiting->transport,
+ localplayer.final_mtx );
+
+ m4x3_mulv( localplayer.gate_waiting->transport,
+ localplayer.cam.pos, localplayer.cam.pos );
+ v3_angles_vector( localplayer.cam.angles, v0 );
+ m3x3_mulv( localplayer.gate_waiting->transport, v0, v0 );
+ v3_angles( v0, localplayer.cam.angles );
+ player_apply_transport_to_cam( localplayer.gate_waiting->transport );
+ localplayer.gate_waiting = NULL;