chaos pt 1
[carveJwlIkooP6JGAAIwe30JlM.git] / player.c
index 5bd43325c4945ac8b47df3fe2080c9518c95ce89..b1788c626e8a410d148849144afa4bed296592ed 100644 (file)
--- a/player.c
+++ b/player.c
@@ -142,9 +142,6 @@ static void player__pass_gate( u32 id ){
 
    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();
@@ -219,18 +216,22 @@ static void player__im_gui(void){
    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 );
@@ -238,17 +239,19 @@ static void player__spawn( ent_spawn *rp ){
    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++ ){
@@ -259,6 +262,11 @@ static void player__spawn( ent_spawn *rp ){
    }
 }
 
+static void player__spawn( ent_spawn *rp ){
+   player__setpos( rp->transform.co );
+   player__reset();
+}
+
 
 static void player__kill(void){
 }