+ camera_mode;
+ float camera_type_blend;
+
+ v3f fpv_offset, /* expressed relative to rigidbody */
+ tpv_offset,
+ fpv_viewpoint, /* expressed relative to neck bone inverse final */
+ fpv_offset_smooth,
+ fpv_viewpoint_smooth,
+ tpv_offset_smooth,
+ tpv_lpf,
+ cam_velocity_smooth;
+
+ v3f cam_override_pos;
+ v2f cam_override_angles;
+ float cam_override_strength;
+
+ float cam_velocity_influence,
+ cam_velocity_coefficient,
+ cam_velocity_constant,
+ cam_velocity_coefficient_smooth,
+ cam_velocity_constant_smooth,
+ cam_velocity_influence_smooth,
+ cam_land_punch,
+ cam_land_punch_v;
+
+ ent_gate *gate_waiting;
+
+ /*
+ * Input
+ * --------------------------------
+ */
+ struct input_binding *input_js1h,
+ *input_js1v,
+ *input_js2h,
+ *input_js2v,
+ *input_jump,
+ *input_push,
+ *input_trick0,
+ *input_trick1,
+ *input_trick2,
+ *input_walk,
+ *input_walkh,
+ *input_walkv,
+ *input_use,
+ *input_reset,
+ *input_grab,
+ *input_camera;
+
+ /*
+ * Animation
+ * --------------------------------------------------
+ */
+
+ struct player_avatar *playeravatar;
+ glmesh *playermesh;
+ struct player_ragdoll ragdoll;
+ vg_tex2d *playertex;
+
+ player_pose holdout_pose;
+ float holdout_time;
+
+ /*
+ * Rewind
+ * ----------------------------------------------------
+ */
+ int rewinding, rewind_sound_wait;
+
+ struct rewind_frame{
+ v3f pos;
+ v3f ang;
+ }
+ *rewind_buffer;
+ u32 rewind_length;
+ float rewind_accum;
+ ent_gate *rewind_gate;
+
+ float rewind_total_length, rewind_predicted_time,
+ dist_accum;
+ double rewind_start, rewind_time;
+
+ /*
+ * Subsystems
+ * -------------------------------------------------
+ */
+
+ enum player_subsystem{
+ k_player_subsystem_walk = 0,
+ k_player_subsystem_skate = 1,
+ k_player_subsystem_dead = 2,
+ k_player_subsystem_drive = 3
+ }
+ subsystem,
+ subsystem_gate;