+ v3f walk_apply;
+ v3_zero( walk_apply );
+
+ /* Do XY translation */
+ v3_muladds( walk_apply, right_dir, walk[0], walk_apply );
+ v3_muladds( walk_apply, forward_dir, walk[1], walk_apply );
+ v3_add( walk_apply, phys->rb.co, phys->rb.co );
+ v3_divs( walk_apply, VG_TIMESTEP_FIXED, phys->rb.v );
+
+ /* Directly resolve collisions */
+ player_walk_update_collision();
+ rb_debug( rbf, 0xffffff00 );
+ rb_debug( rbb, 0xffffff00 );
+
+ len = 0;
+ len += rb_sphere_scene( rbf, &world.rb_geo, manifold+len );
+ len += rb_sphere_scene( rbb, &world.rb_geo, manifold+len );
+
+ v3f dt;
+ v3_zero( dt );
+ for( int j=0; j<3; j++ )
+ {
+ for( int i=0; i<len; i++ )
+ {
+ struct contact *ct = &manifold[i];
+
+ float p = vg_maxf( 0.0f, ct->p - 0.00f ),
+ cur = vg_clampf( v3_dot( ct->n, dt ), 0.0f, p );
+ v3_muladds( dt, ct->n, (p - cur) * 0.333333333f, dt );
+ }
+ }
+ v3_add( dt, phys->rb.co, phys->rb.co );
+
+ /* jump */