+static void player__skate_clear_mechanics(void){
+ struct player_skate_state *state = &player_skate.state;
+ state->jump_charge = 0.0f;
+ state->charging_jump = 0;
+ state->jump_dir = 0;
+ v3_zero( state->flip_axis );
+ state->flip_time = 0.0f;
+ state->flip_rate = 0.0f;
+ state->reverse = 0.0f;
+ state->slip = 0.0f;
+ state->grabbing = 0.0f;
+ v2_zero( state->grab_mouse_delta );
+ state->slap = 0.0f;
+ state->jump_time = 0.0;
+ state->start_push = 0.0;
+ state->cur_push = 0.0;
+ state->air_start = 0.0;
+
+ v3_zero( state->air_init_v );
+ v3_zero( state->air_init_co );
+
+ state->gravity_bias = k_gravity;
+ v3_copy( localplayer.rb.co, state->prev_pos );
+ v4_copy( localplayer.rb.q, state->smoothed_rotation );
+ v3_zero( state->throw_v );
+ v3_zero( state->trick_vel );
+ v3_zero( state->trick_euler );
+ v3_zero( state->cog_v );
+ state->grind_cooldown = 0;
+ state->surface_cooldown = 0;
+ v3_muladds( localplayer.rb.co, localplayer.rb.to_world[1], 1.0f, state->cog );
+ v3_copy( localplayer.rb.to_world[1], state->up_dir );
+ v3_copy( localplayer.rb.to_world[1], player_skate.surface_picture );
+ v3_copy( localplayer.rb.co, state->prev_pos );
+ v3_zero( player_skate.weight_distribution );
+}
+
+#include "network_compression.h"
+
+static void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ){
+ struct player_skate_animator *animator = data;
+
+ bitpack_qv3f( ctx, 24, -1024.0f, 1024.0f, animator->root_co );
+ bitpack_qquat( ctx, animator->root_q );
+
+ bitpack_qv3f( ctx, 8, -1.0f, 1.0f, animator->offset );
+ bitpack_qv3f( ctx, 8, -1.0f, 1.0f, animator->local_cog );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->slide );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->z );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->x );
+
+ /* these could likely be pressed down into single bits if needed */
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->fly );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->grind );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->stand );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->push );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->jump ); /*??*/
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->jump_charge ); /*??*/
+
+ /* just the sign bit? */
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->reverse );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->delayed_slip_dir );
+ bitpack_bytes( ctx, 1, &animator->jump_dir );
+ bitpack_bytes( ctx, 1, &animator->trick_type );
+
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->grind_balance );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->airdir );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->weight );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->trick_foot );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->slap );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->subslap );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->grabbing );
+
+ /* animator->wobble is ommited */
+
+ bitpack_qv2f( ctx, 8, -1.0f, 1.0f, animator->foot_offset );
+ bitpack_qquat( ctx, animator->qfixuptotal );
+ bitpack_qquat( ctx, animator->qflip );
+
+ bitpack_qv3f( ctx, 16, -100.0f, 100.0f, animator->board_euler );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->board_lean );
+ bitpack_qv2f( ctx, 8, -1.0f, 1.0f, animator->steer );
+ bitpack_qv2f( ctx, 8, -1.0f, 1.0f, animator->grab );
+
+ bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->push_time );
+ bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->jump_time );
+ bitpack_qf32( ctx, 16, 0.0f, 4.0f, &animator->handplant_t );
+ bitpack_qv3f( ctx, 16, -100.0f, 100.0f, animator->root_v );
+ bitpack_bytes( ctx, 1, &animator->activity );
+}