zoomstate_set = 1;\r
}\r
\r
+void dodging_pressedkeys()\r
+{\r
+ float length;\r
+ float tap_direction_x;\r
+ float tap_direction_y;\r
+\r
+ tap_direction_x = 0;\r
+ tap_direction_y = 0;\r
+\r
+ float dodge_detected;\r
+ if (!cvar("g_dodging"))\r
+ return;\r
+\r
+ dodge_detected = 0;\r
+\r
+ // first check if the last dodge is far enough back in time so we can dodge again\r
+ if ((time - self.last_dodging_time) < cvar("sv_dodging_delay"))\r
+ return;\r
+\r
+ if (check_close_to_ground(cvar("sv_dodging_height_threshold")) != 1 \r
+ && check_close_to_wall(cvar("sv_dodging_wall_distance_threshold")) != 1)\r
+ return;\r
+\r
+ if (self.movement_x > 0) {\r
+ // is this a state change?\r
+ if (!(self.pressedkeys & KEY_FORWARD)) {\r
+ if ((time - self.last_FORWARD_KEY_time) < self.cvar_cl_dodging_timeout) { \r
+ tap_direction_x = 1.0;\r
+ dodge_detected = 1;\r
+ }\r
+ self.last_FORWARD_KEY_time = time;\r
+ }\r
+ }\r
+\r
+ if (self.movement_x < 0) {\r
+ // is this a state change?\r
+ if (!(self.pressedkeys & KEY_BACKWARD)) {\r
+ tap_direction_x = -1.0;\r
+ if ((time - self.last_BACKWARD_KEY_time) < self.cvar_cl_dodging_timeout) { \r
+ dodge_detected = 1;\r
+ }\r
+ self.last_BACKWARD_KEY_time = time;\r
+ }\r
+ }\r
+\r
+ if (self.movement_y > 0) {\r
+ // is this a state change?\r
+ if (!(self.pressedkeys & KEY_RIGHT)) {\r
+ tap_direction_y = 1.0;\r
+ if ((time - self.last_RIGHT_KEY_time) < self.cvar_cl_dodging_timeout) { \r
+ dodge_detected = 1;\r
+ }\r
+ self.last_RIGHT_KEY_time = time;\r
+ }\r
+ }\r
+\r
+ if (self.movement_y < 0) {\r
+ // is this a state change?\r
+ if (!(self.pressedkeys & KEY_LEFT)) {\r
+ tap_direction_y = -1.0;\r
+ if ((time - self.last_LEFT_KEY_time) < self.cvar_cl_dodging_timeout) { \r
+ dodge_detected = 1;\r
+ }\r
+ self.last_LEFT_KEY_time = time;\r
+ }\r
+ }\r
+\r
+\r
+ if (dodge_detected == 1) {\r
+ self.last_dodging_time = time;\r
+\r
+ self.dodging_action = 1;\r
+ self.dodging_single_action = 1;\r
+\r
+ self.dodging_velocity_gain = cvar("sv_dodging_horiz_speed");\r
+\r
+ self.dodging_direction_x = tap_direction_x;\r
+ self.dodging_direction_y = tap_direction_y;\r
+\r
+ // normalize the dodging_direction vector.. (unlike UT99) XD\r
+ length = self.dodging_direction_x * self.dodging_direction_x;\r
+ length = length + self.dodging_direction_y * self.dodging_direction_y;\r
+ length = sqrt(length);\r
+\r
+ self.dodging_direction_x = self.dodging_direction_x * 1.0/length;\r
+ self.dodging_direction_y = self.dodging_direction_y * 1.0/length;\r
+ }\r
+\r
+ return;\r
+}\r
+\r
void GetPressedKeys(void) {\r
+ // get keys for dodging\r
+ dodging_pressedkeys();\r
+\r
if (self.movement_x > 0) // get if movement keys are pressed\r
{ // forward key pressed\r
self.pressedkeys |= KEY_FORWARD;\r