X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Fdodging%2Fsv_dodging.qc;h=66d18ac671e8ad9c5ce074c8f74eee7e494fb9f5;hb=37b3d02a3583ada75dd373d067a8ab6a0ce109a1;hp=6640cb8bf23a51a48c08cdd4662fbd89a4fcefcf;hpb=c89e099b706d9c07b2ce49fd267c0f35f06f2146;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/mutator/dodging/sv_dodging.qc b/qcsrc/common/mutators/mutator/dodging/sv_dodging.qc index 6640cb8bf..66d18ac67 100644 --- a/qcsrc/common/mutators/mutator/dodging/sv_dodging.qc +++ b/qcsrc/common/mutators/mutator/dodging/sv_dodging.qc @@ -40,10 +40,12 @@ #endif #ifdef CSQC + float cvar_cl_dodging_timeout; #define PHYS_DODGING_FRAMETIME (1 / (frametime <= 0 ? 60 : frametime)) #define PHYS_DODGING_TIMEOUT(s) STAT(DODGING_TIMEOUT) #define PHYS_DODGING_PRESSED_KEYS(s) (s).pressedkeys #elif defined(SVQC) + .float cvar_cl_dodging_timeout; #define PHYS_DODGING_FRAMETIME sys_frametime #define PHYS_DODGING_TIMEOUT(s) CS(s).cvar_cl_dodging_timeout #define PHYS_DODGING_PRESSED_KEYS(s) CS(s).pressedkeys @@ -56,8 +58,6 @@ bool autocvar_sv_dodging_sound; #include #include -.float cvar_cl_dodging_timeout; - REGISTER_MUTATOR(dodging, cvar("g_dodging")) { // this just turns on the cvar. @@ -113,20 +113,20 @@ REGISTER_MUTATOR(dodging, true); return true; // returns true if the player is close to a wall -bool is_close_to_wall(entity this, float threshold) +bool is_close_to_wall(entity this, float threshold, vector forward, vector right) { - X(v_right); - X(-v_right); - X(v_forward); - X(-v_forward); + X(right); + X(-right); + X(forward); + X(-forward); return false; } -bool is_close_to_ground(entity this, float threshold) +bool is_close_to_ground(entity this, float threshold, vector up) { if (IS_ONGROUND(this)) return true; - X(-v_up); // necessary for dodging down a slope using doubletap (using `+dodge` works anyway) + X(-up); // necessary for dodging down a slope using doubletap (using `+dodge` works anyway) return false; } @@ -180,10 +180,11 @@ bool PM_dodging_checkpressedkeys(entity this) if ((time - this.last_dodging_time) < PHYS_DODGING_DELAY) return false; - makevectors(this.angles); + vector forward, right, up; + MAKE_VECTORS(this.angles, forward, right, up); - bool can_dodge = (is_close_to_ground(this, PHYS_DODGING_HEIGHT_THRESHOLD) && (PHYS_DODGING_MAXSPEED == 0 || vdist(this.velocity, <, PHYS_DODGING_MAXSPEED))); - bool can_wall_dodge = (PHYS_DODGING_WALL && is_close_to_wall(this, PHYS_DODGING_DISTANCE_THRESHOLD)); + bool can_dodge = (is_close_to_ground(this, PHYS_DODGING_HEIGHT_THRESHOLD, up) && (PHYS_DODGING_MAXSPEED == 0 || vdist(this.velocity, <, PHYS_DODGING_MAXSPEED))); + bool can_wall_dodge = (PHYS_DODGING_WALL && is_close_to_wall(this, PHYS_DODGING_DISTANCE_THRESHOLD, forward, right)); bool can_air_dodge = (PHYS_DODGING_AIR && (PHYS_DODGING_AIR_MAXSPEED == 0 || vdist(this.velocity, <, PHYS_DODGING_AIR_MAXSPEED))); if (!can_dodge && !can_wall_dodge && !can_air_dodge) return false; @@ -221,11 +222,11 @@ void PM_dodging(entity this) return; } - // make sure v_up, v_right and v_forward are sane + vector forward, right, up; if(PHYS_DODGING_AIR) - makevectors(this.v_angle); + MAKE_VECTORS(this.v_angle, forward, right, up); else - makevectors(this.angles); + MAKE_VECTORS(this.angles, forward, right, up); // fraction of the force to apply each frame // if we have e.g. 0.5 sec ramptime and a frametime of 0.25, then the ramp code @@ -237,15 +238,15 @@ void PM_dodging(entity this) float velocity_increase = min(common_factor * this.dodging_force_total, this.dodging_force_remaining); this.dodging_force_remaining -= velocity_increase; - this.velocity += this.dodging_direction.x * velocity_increase * v_forward - + this.dodging_direction.y * velocity_increase * v_right; + this.velocity += this.dodging_direction.x * velocity_increase * forward + + this.dodging_direction.y * velocity_increase * right; // the up part of the dodge is a single shot action if (this.dodging_single_action == 1) { UNSET_ONGROUND(this); - this.velocity += PHYS_DODGING_UP_SPEED * v_up; + this.velocity += PHYS_DODGING_UP_SPEED * up; #ifdef SVQC if (autocvar_sv_dodging_sound)