+// get pressed keys for PlayerDodge\r
+void PlayerDodge_GetPressedKeys()\r
+{\r
+ float length;\r
+ float tap_direction_x;\r
+ float tap_direction_y;\r
+ float dodge_detected;\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
+ 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
+\r