allow replays to pass through rifts
[carveJwlIkooP6JGAAIwe30JlM.git] / player_replay.c
index 12f7f6b830a046559591cda15af319950b766582..9fbbfcc6e7dd07c5ae9b2433071dd8b3154e061a 100644 (file)
@@ -176,7 +176,7 @@ static f32 replay_subframe_time( replay_buffer *replay ){
    replay_frame *next = frame->r;
    if( next ){
       f64 l = next->time - frame->time,
-          t = (replay->cursor - frame->time) / l;
+          t = (l <= (1.0/128.0))? 0.0: (replay->cursor - frame->time) / l;
       return vg_clampf( t, 0.0f, 1.0f );
    }
    else 
@@ -218,8 +218,8 @@ struct replay_rb{
    v4f q;
 };
 
-static 
-void skaterift_record_frame( replay_buffer *replay, int force_gamestate ){
+static void skaterift_record_frame( replay_buffer *replay, 
+                                    int force_gamestate ){
    f64 delta      = 9999999.9,
        statedelta = 9999999.9;
 
@@ -302,8 +302,15 @@ void skaterift_record_frame( replay_buffer *replay, int force_gamestate ){
    if( localplayer.gate_waiting ){
       m4x3_mulv( localplayer.gate_waiting->transport, 
                   frame->cam_pos, frame->cam_pos );
+
+      v3f v0;
+      v3_angles_vector( localplayer.cam.angles, v0 );
+      m3x3_mulv( localplayer.gate_waiting->transport, v0, v0 );
+      v3_angles( v0, frame->cam_angles );
    }
-   v3_copy( localplayer.cam.angles, frame->cam_angles );
+   else 
+      v3_copy( localplayer.cam.angles, frame->cam_angles );
+
    frame->cam_fov = localplayer.cam.fov;
 
    /* animator */
@@ -333,7 +340,7 @@ void skaterift_restore_frame( replay_frame *frame ){
       memcpy( &player_skate.state, src, src_size );
    }
    else if( frame->system == k_player_subsystem_dead ){
-      player__dead_transition();
+      player__dead_transition(0);
       struct replay_rb *arr = src;
 
       for( u32 i=0; i<localplayer.ragdoll.part_count; i ++ ){