m4x3_mulv( gate->transport, localplayer.cam.pos, localplayer.cam.pos );
- if( gate->flags & k_ent_gate_nonlocal )
- world_set_active_instance( gate->target );
-
audio_lock();
audio_oneshot( &audio_gate_pass, 1.0f, 0.0f );
audio_unlock();
skaterift_replay_debug_info();
}
-
static void player__setpos( v3f pos ){
v3_copy( pos, localplayer.rb.co );
v3_zero( localplayer.rb.v );
rb_update_transform( &localplayer.rb );
}
-static void player__spawn( ent_spawn *rp ){
+static void player__reset(void){
replay_clear( &skaterift.replay );
- player__setpos( rp->transform.co );
+
+ v3_zero( localplayer.rb.v );
v3_zero( localplayer.rb.w );
- q_identity( localplayer.rb.q );
+
+ f32 l = v4_length( localplayer.rb.q );
+ if( (l < 0.9f) || (l > 1.1f) )
+ q_identity( localplayer.rb.q );
+
rb_update_transform( &localplayer.rb );
q_identity( localplayer.qbasis );
m3x3_identity( localplayer.invbasis );
localplayer.subsystem = k_player_subsystem_walk;
+ player__walk_reset();
+
localplayer.immobile = 0;
localplayer.gate_waiting = NULL;
- world_static.last_use = 0.0;
- world_static.focused_entity = 0;
+ localplayer.viewable_world = world_current_instance();
+
world_static.challenge_target = NULL;
world_static.challenge_timer = 0.0f;
+ world_static.focused_entity = 0;
+ world_static.active_trigger_volume_count = 0;
+ world_static.last_use = 0.0;
world_entity_unfocus();
- if( player_subsystems[ localplayer.subsystem ]->reset )
- player_subsystems[ localplayer.subsystem ]->reset( rp );
-
localplayer.boundary_hash ^= NETMSG_BOUNDARY_BIT;
for( u32 i=0; i<vg_list_size(world_static.instances); i++ ){
}
}
+static void player__spawn( ent_spawn *rp ){
+ player__setpos( rp->transform.co );
+ player__reset();
+}
+
static void player__kill(void){
}