From: Rudolf Polzer Date: Sun, 9 Oct 2011 14:18:34 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/fruitiex/animations' X-Git-Tag: xonotic-v0.6.0~40^2~76 X-Git-Url: http://de.git.xonotic.org/?a=commitdiff_plain;h=60ed95fe707decf91bb54393d4c11ee4faa2e418;hp=abec41f6c279942ebf39e2db21cf907008d32ce7;p=xonotic%2Fxonotic-data.pk3dir.git Merge remote-tracking branch 'origin/fruitiex/animations' --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 93a94a1aa..8ac7df977 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -387,6 +387,7 @@ set sv_doublejump 0 "allow Quake 2-style double jumps" set sv_jumpspeedcap_min "" "lower bound on the baseline velocity of a jump; final velocity will be >= (jumpheight * min + jumpheight)" set sv_jumpspeedcap_max "" "upper bound on the baseline velocity of a jump; final velocity will be <= (jumpheight * max + jumpheight)" set sv_jumpspeedcap_max_disable_on_ramps 0 "disable upper baseline velocity bound on ramps to preserve the old rampjump style" +set sv_player_jumpanim_minfall 48 "minimum distance player has to have below their feet before the jump animation will be activated (only when falling, +jump will play anim instantly)" seta sv_precacheplayermodels 1 seta sv_precacheweapons 0 diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 485a4ed25..777284841 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -1155,6 +1155,7 @@ string autocvar_sv_player_headsize; string autocvar_sv_player_maxs; string autocvar_sv_player_mins; string autocvar_sv_player_viewoffset; +float autocvar_sv_player_jumpanim_minfall; float autocvar_sv_precacheplayermodels; float autocvar_sv_precacheweapons; float autocvar_sv_q3acompat_machineshotgunswap; diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 8eef87f96..34a0cee02 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -2948,7 +2948,7 @@ void PlayerPreThink (void) self.prevorigin = self.origin; - if ((self.BUTTON_CROUCH && !self.hook.state) || self.health <= g_bloodloss) + if (((self.BUTTON_CROUCH && !self.hook.state) || self.health <= g_bloodloss) && self.animstate_startframe != self.anim_melee_x) // prevent crouching if using melee attack { if (!self.crouch) { diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index b7e8bc226..85d4cd000 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -171,7 +171,7 @@ void PlayerJump (void) if (self.crouch) setanim(self, self.anim_duckjump, FALSE, TRUE, TRUE); - else + else if (self.animstate_startframe != self.anim_melee_x || (self.animstate_startframe == self.anim_melee_x && time - self.animstate_starttime >= 21/20)) // jump animation shouldn't override melee until we have animation blending (or until the anim finished, 21/20 = numframes/fps) setanim(self, self.anim_jump, FALSE, TRUE, TRUE); if(g_jump_grunt) diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 277338c5c..15bb65262 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -293,13 +293,32 @@ void player_anim (void) if (!self.animstate_override) { - if (!(self.flags & FL_ONGROUND)) + if (!(self.flags & FL_ONGROUND) || self.BUTTON_JUMP) { if (self.crouch) - setanim(self, self.anim_duckjump, FALSE, TRUE, self.restart_jump); + { + if (self.animstate_startframe != self.anim_duckjump_x) // don't perform another trace if already playing the crouch jump anim + { + traceline(self.origin + '0 0 1' * PL_CROUCH_MIN_z, self.origin + '0 0 1' * (PL_CROUCH_MIN_z - autocvar_sv_player_jumpanim_minfall), TRUE, self); + if(!trace_startsolid && trace_fraction == 1 || !(self.animstate_startframe == self.anim_duckwalk_x || self.animstate_startframe == self.anim_duckidle_x)) // don't get stuck on non-crouch anims + { + setanim(self, self.anim_duckjump, FALSE, TRUE, self.restart_jump); + self.restart_jump = FALSE; + } + } + } else - setanim(self, self.anim_jump, FALSE, TRUE, self.restart_jump); - self.restart_jump = FALSE; + { + if (self.animstate_startframe != self.anim_jump_x) // don't perform another trace if already playing the jump anim + { + traceline(self.origin + '0 0 1' * PL_MIN_z, self.origin + '0 0 1' * (PL_MIN_z - autocvar_sv_player_jumpanim_minfall), TRUE, self); + if(!trace_startsolid && trace_fraction == 1 || self.animstate_startframe == self.anim_idle_x || (self.animstate_startframe == self.anim_melee_x && time - self.animstate_starttime >= 21/20)) // don't get stuck on idle animation in midair, nor melee after it finished + { + setanim(self, self.anim_jump, FALSE, TRUE, self.restart_jump); + self.restart_jump = FALSE; + } + } + } } else if (self.crouch) { @@ -522,10 +541,13 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht if(sv_gentle < 1) { if(self.classname != "body") // pain anim is BORKED on our ZYMs, FIXME remove this once we have good models { - if (random() > 0.5) - setanim(self, self.anim_pain1, FALSE, TRUE, TRUE); - else - setanim(self, self.anim_pain2, FALSE, TRUE, TRUE); + if (!self.animstate_override) + { + if (random() > 0.5) + setanim(self, self.anim_pain1, FALSE, TRUE, TRUE); + else + setanim(self, self.anim_pain2, FALSE, TRUE, TRUE); + } } if(sound_allowed(MSG_BROADCAST, attacker)) diff --git a/qcsrc/server/cl_weaponsystem.qc b/qcsrc/server/cl_weaponsystem.qc index 62eb0b6f9..b3b0e6ea0 100644 --- a/qcsrc/server/cl_weaponsystem.qc +++ b/qcsrc/server/cl_weaponsystem.qc @@ -1297,6 +1297,12 @@ void weapon_thinkf(float fr, float t, void() func) anim_z = anim_y / (t + sys_frametime); setanim(self, anim, FALSE, TRUE, TRUE); } + else if (self.animstate_startframe == self.anim_idle_x) // only allow shoot anim to override idle animation until we have animation blending + { + anim = self.anim_shoot; + anim_z = anim_y / (t + sys_frametime); + setanim(self, anim, FALSE, TRUE, TRUE); + } } }; diff --git a/qcsrc/server/t_jumppads.qc b/qcsrc/server/t_jumppads.qc index 888b94456..64dc74b98 100644 --- a/qcsrc/server/t_jumppads.qc +++ b/qcsrc/server/t_jumppads.qc @@ -200,6 +200,14 @@ void trigger_push_touch() } else other.lastteleporttime = time; + + if (!other.animstate_override) + { + if (other.crouch) + setanim(other, other.anim_duckjump, FALSE, TRUE, TRUE); + else + setanim(other, other.anim_jump, FALSE, TRUE, TRUE); + } } else other.jumppadcount = TRUE; diff --git a/qcsrc/server/w_shotgun.qc b/qcsrc/server/w_shotgun.qc index 5cbd2fc5d..b21a5f50a 100644 --- a/qcsrc/server/w_shotgun.qc +++ b/qcsrc/server/w_shotgun.qc @@ -195,6 +195,7 @@ float w_shotgun(float req) } } if (self.clip_load >= 0) // we are not currently reloading + if (!self.crouch) // we are not currently crouching; this fixes an exploit where your melee anim is not visible, and besides wouldn't make much sense if (self.BUTTON_ATCK2 && autocvar_g_balance_shotgun_secondary) if (weapon_prepareattack(1, autocvar_g_balance_shotgun_secondary_refire)) {