From 39abaf054aa1621c97c4e60714a620be39078b34 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Sat, 10 Dec 2011 20:00:17 +0100 Subject: [PATCH] add duckwalk anims for all directions (optional, if missing, duckwalk is used) --- qcsrc/server/cl_player.qc | 28 +++++++++++++++++++++++----- qcsrc/server/defs.qh | 9 ++++++++- qcsrc/server/g_subs.qc | 18 ++++++++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 4d0471237..2b3e4d4db 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -229,8 +229,14 @@ void player_setupanimsformodel() self.anim_forwardleft = animfixfps(self, '20 1 1'); self.anim_backright = animfixfps(self, '21 1 1'); self.anim_backleft = animfixfps(self, '22 1 1'); - self.anim_melee = animfixfps(self, '23 1 1'); - self.anim_duckwalkbackwards = animfixfps(self, '24 1 1'); + self.anim_melee = animfixfps2(self, '23 1 1', '11 1 5'); + self.anim_duckwalkbackwards = animfixfps2(self, '24 1 1', '4 1 1'); + self.anim_duckwalkstrafeleft = animfixfps2(self, '25 1 1', '4 1 1'); + self.anim_duckwalkstraferight = animfixfps2(self, '26 1 1', '4 1 1'); + self.anim_duckwalkforwardright = animfixfps2(self, '27 1 1', '4 1 1'); + self.anim_duckwalkforwardleft = animfixfps2(self, '28 1 1', '4 1 1'); + self.anim_duckwalkbackright = animfixfps2(self, '29 1 1', '4 1 1'); + self.anim_duckwalkbackleft = animfixfps2(self, '30 1 1', '4 1 1'); // TODO introspect models for finding right "fps" value (1/duration) // reset animstate now setanim(self, self.anim_idle, TRUE, FALSE, TRUE); @@ -287,10 +293,22 @@ void player_anim (void) } else if (self.crouch) { - if (self.movement_x < 0) - setanim(self, self.anim_duckwalkbackwards, TRUE, FALSE, FALSE); - else if (self.movement_x * self.movement_x + self.movement_y * self.movement_y > 20) + if (self.movement_x > 0 && self.movement_y == 0) setanim(self, self.anim_duckwalk, TRUE, FALSE, FALSE); + else if (self.movement_x < 0 && self.movement_y == 0) + setanim(self, self.anim_duckwalkbackwards, TRUE, FALSE, FALSE); + else if (self.movement_x == 0 && self.movement_y > 0) + setanim(self, self.anim_duckwalkstraferight, TRUE, FALSE, FALSE); + else if (self.movement_x == 0 && self.movement_y < 0) + setanim(self, self.anim_duckwalkstrafeleft, TRUE, FALSE, FALSE); + else if (self.movement_x > 0 && self.movement_y > 0) + setanim(self, self.anim_duckwalkforwardright, TRUE, FALSE, FALSE); + else if (self.movement_x > 0 && self.movement_y < 0) + setanim(self, self.anim_duckwalkforwardleft, TRUE, FALSE, FALSE); + else if (self.movement_x < 0 && self.movement_y > 0) + setanim(self, self.anim_duckwalkbackright, TRUE, FALSE, FALSE); + else if (self.movement_x < 0 && self.movement_y < 0) + setanim(self, self.anim_duckwalkbackleft, TRUE, FALSE, FALSE); else setanim(self, self.anim_duckidle, TRUE, FALSE, FALSE); } diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index d32c27aad..ae8be3f9d 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -130,7 +130,6 @@ float maxclients; .vector anim_draw; // player pulls out a weapon // .vector anim_duck; // player crouches (from idle to duckidle) .vector anim_duckwalk; // player walking while crouching -.vector anim_duckwalkbackwards; // player walking while crouching .vector anim_duckjump; // player jumping from a crouch .vector anim_duckidle; // player idling while crouching .vector anim_idle; // player standing @@ -150,6 +149,14 @@ float maxclients; .vector anim_backright; // player running backward and right .vector anim_backleft; // player running back and left .vector anim_melee; // player doing the melee action +.vector anim_duck; // player doing the melee action +.vector anim_duckwalkbackwards; +.vector anim_duckwalkstrafeleft; +.vector anim_duckwalkstraferight; +.vector anim_duckwalkforwardright; +.vector anim_duckwalkforwardleft; +.vector anim_duckwalkbackright; +.vector anim_duckwalkbackleft; // weapon animation vectors: .vector anim_fire1; diff --git a/qcsrc/server/g_subs.qc b/qcsrc/server/g_subs.qc index 6a62d61b5..a331da4f0 100644 --- a/qcsrc/server/g_subs.qc +++ b/qcsrc/server/g_subs.qc @@ -71,6 +71,24 @@ vector animfixfps(entity e, vector a) return a; } +vector animfixfps2(entity e, vector a, vector b) +{ + // multi-frame anim: keep as-is + float dur; + dur = frameduration(e.modelindex, a_x); + if(dur <= 0) + { + a = b; + dur = frameduration(e.modelindex, a_x); + } + if(a_y == 1) + { + if(dur > 0) + a_z = 1.0 / dur; + } + return a; +} + /* ================== SUB_Remove -- 2.39.2