i wonder whether anybody besides me really digged the UT99 dodging movement style. Well i looked into the quakeC source with some help from the #nexuiz channel (Thanks Spaceman and Samual)..
Anyway, here's a rudimentary diff to add something in the direction of dodging...
Note you need to set the cvars
dodge
dodge_up
dodge_double_time
dodge_reload_time
to sensible values.. I used these:
set dodge 500
set dodge_up 200
set dodge_double_time 0.25
set dodge_reload_time 0.5
EDIT: Notes:
- This is totally a hack
- Acceleration is far too high. There should be a "ramp" (albeit a very short one in the order of i'd say 50ms or so)
- Since i have no idea how the code of the client is really layed out there are probably one million better places to add something like this..
EDIT2: Notes:
- To those who don't know what this is about: Besides normal jumping you get another kind of jump when your feet touch the floor (i.e. walking or standing - during bunnyhopping this is impossible to do for practical purposes). Double tap a walking key (FORWARD, BACKWARD, RIGHT, LEFT) and you make a quick jump. Thus the name "dodging". It's good to dodge e.g a rocket.. It's also a great way to start bunnyhopping

- Code: Select all
Index: data/qcsrc/server/cl_client.qc
===================================================================
--- data/qcsrc/server/cl_client.qc (revision 7768)
+++ data/qcsrc/server/cl_client.qc (working copy)
@@ -1951,14 +1951,43 @@
zoomstate_set = 1;
}
+
+.float time_last_dodge;
+.float time_FORWARD_key;
+.float time_BACKWARD_key;
+.float time_RIGHT_key;
+.float time_LEFT_key;
+
void GetPressedKeys(void) {
if (self.movement_x > 0) // get if movement keys are pressed
{ // forward key pressed
+ if (!(self.pressedkeys & KEY_FORWARD)) { // is this a state change?
+ if (
+ (time - self.time_FORWARD_key < cvar("dodge_double_time")) &&
+ (self.lastflags & FL_ONGROUND) &&
+ ((time - self.time_last_dodge) > cvar("dodge_reload_time"))
+ ) { // are we allowed to dodge?
+ self.velocity = self.velocity + (cvar("dodge") * v_forward) + (cvar("dodge_up") * v_up);//'100 0 50';
+ self.time_last_dodge = time;
+ }
+ self.time_FORWARD_key = time;
+ }
self.pressedkeys |= KEY_FORWARD;
self.pressedkeys &~= KEY_BACKWARD;
}
else if (self.movement_x < 0)
{ // backward key pressed
+ if (!(self.pressedkeys & KEY_BACKWARD)) { // is this a state change?
+ if (
+ (time - self.time_BACKWARD_key < cvar("dodge_double_time")) &&
+ (self.lastflags & FL_ONGROUND) &&
+ ((time - self.time_last_dodge) > cvar("dodge_reload_time"))
+ ) { // are we allowed to dodge?
+ self.velocity = self.velocity + (cvar("dodge") * v_forward * -1.0) + (cvar("dodge_up") * v_up);//'100 0 50';
+ self.time_last_dodge = time;
+ }
+ self.time_BACKWARD_key = time;
+ }
self.pressedkeys |= KEY_BACKWARD;
self.pressedkeys &~= KEY_FORWARD;
}
@@ -1970,11 +1999,33 @@
if (self.movement_y > 0)
{ // right key pressed
+ if (!(self.pressedkeys & KEY_RIGHT)) { // is this a state change?
+ if (
+ (time - self.time_RIGHT_key < cvar("dodge_double_time")) &&
+ (self.lastflags & FL_ONGROUND) &&
+ ((time - self.time_last_dodge) > cvar("dodge_reload_time"))
+ ) { // are we allowed to dodge?
+ self.velocity = self.velocity + (cvar("dodge") * v_right) + (cvar("dodge_up") * v_up);//'100 0 50';
+ self.time_last_dodge = time;
+ }
+ self.time_RIGHT_key = time;
+ }
self.pressedkeys |= KEY_RIGHT;
self.pressedkeys &~= KEY_LEFT;
}
else if (self.movement_y < 0)
{ // left key pressed
+ if (!(self.pressedkeys & KEY_LEFT)) { // is this a state change?
+ if (
+ (time - self.time_LEFT_key < cvar("dodge_double_time")) &&
+ (self.lastflags & FL_ONGROUND) &&
+ ((time - self.time_last_dodge) > cvar("dodge_reload_time"))
+ ) { // are we allowed to dodge?
+ self.velocity = self.velocity + (cvar("dodge") * v_right * -1.0) + (cvar("dodge_up") * v_up);//'100 0 50';
+ self.time_last_dodge = time;
+ }
+ self.time_LEFT_key = time;
+ }
self.pressedkeys |= KEY_LEFT;
self.pressedkeys &~= KEY_RIGHT;
}