From: MirceaKitsune Date: Thu, 7 Feb 2013 20:59:44 +0000 (+0200) Subject: Use Erebus animations for the nex fox models, which are a lot prettier. Also fix... X-Git-Url: https://git.xonotic.org/?p=voretournament%2Fvoretournament.git;a=commitdiff_plain;h=cf4f57c4dedbc5059d219d6199ba924594c6468a Use Erebus animations for the nex fox models, which are a lot prettier. Also fix bad animations and further reduce bad stretching on _state models. New animations are also included, such as more strafe animations and a melee animation for reflecting the grabber alt fire attack --- diff --git a/data/models/player/fox.iqm b/data/models/player/fox.iqm index e08990e2..b29a47d4 100644 Binary files a/data/models/player/fox.iqm and b/data/models/player/fox.iqm differ diff --git a/data/models/player/fox.iqm.framegroups b/data/models/player/fox.iqm.framegroups index 98eabd70..6432971b 100644 --- a/data/models/player/fox.iqm.framegroups +++ b/data/models/player/fox.iqm.framegroups @@ -1,31 +1,31 @@ -0 36 15.000000 0 // dieone -36 20 15.000000 0 // dietwo -56 15 15.000000 1 // draw +0 36 30.000000 0 // dieone +36 20 25.000000 0 // dietwo +56 15 30.000000 1 // draw 71 20 15.000000 1 // duck -91 21 30.000000 1 // duckwalk +91 20 32.000000 1 // duckwalk 112 16 15.000000 0 // duckjump -128 15 5.000000 1 // duckidle +128 15 10.000000 1 // duckidle 143 41 5.000000 1 // idle 184 160 25.000000 0 // jump -344 15 15.000000 0 // painone -359 17 15.000000 0 // paintwo -376 3 15.000000 0 // shoot +344 15 24.000000 0 // painone +359 17 34.000000 0 // paintwo +376 3 3.000000 0 // shoot 379 21 15.000000 1 // taunt -400 21 35.000000 1 // run -421 21 35.000000 1 // runbackwards -442 21 35.000000 1 // strafeleft -463 21 35.000000 1 // straferight +400 20 29.000000 1 // run +421 20 29.000000 1 // runbackwards +442 20 29.000000 1 // strafeleft +463 20 29.000000 1 // straferight 484 2 15.000000 0 // deadone 486 2 15.000000 0 // deadtwo -488 21 35.000000 1 // forwardright -509 21 35.000000 1 // forwardleft -530 21 35.000000 1 // backright -551 21 30.000000 1 // backleft +488 20 29.000000 1 // forwardright +509 20 29.000000 1 // forwardleft +530 20 29.000000 1 // backright +551 20 29.000000 1 // backleft 572 21 20.000000 0 // melee -593 21 30.000000 1 // duckwalkbackwards -91 21 30.000000 1 // duckwalkstrafeleft -91 21 30.000000 1 // duckwalkstraferight -91 21 30.000000 1 // duckwalkforwardright -91 21 30.000000 1 // duckwalkforwardleft -593 21 30.000000 1 // duckwalkbackright -593 21 30.000000 1 // duckwalkbackleft \ No newline at end of file +593 20 32.000000 1 // duckwalkbackwards +614 20 32.000000 1 // duckwalkstrafeleft +635 20 32.000000 1 // duckwalkstraferight +656 20 32.000000 1 // duckwalkforwardright +677 20 32.000000 1 // duckwalkforwardleft +698 20 32.000000 1 // duckwalkbackright +719 20 32.000000 1 // duckwalkbackleft diff --git a/data/models/player/fox_state1.iqm b/data/models/player/fox_state1.iqm index aed1efc6..d24f86d8 100644 Binary files a/data/models/player/fox_state1.iqm and b/data/models/player/fox_state1.iqm differ diff --git a/data/models/player/fox_state1.iqm.framegroups b/data/models/player/fox_state1.iqm.framegroups index 98eabd70..6432971b 100644 --- a/data/models/player/fox_state1.iqm.framegroups +++ b/data/models/player/fox_state1.iqm.framegroups @@ -1,31 +1,31 @@ -0 36 15.000000 0 // dieone -36 20 15.000000 0 // dietwo -56 15 15.000000 1 // draw +0 36 30.000000 0 // dieone +36 20 25.000000 0 // dietwo +56 15 30.000000 1 // draw 71 20 15.000000 1 // duck -91 21 30.000000 1 // duckwalk +91 20 32.000000 1 // duckwalk 112 16 15.000000 0 // duckjump -128 15 5.000000 1 // duckidle +128 15 10.000000 1 // duckidle 143 41 5.000000 1 // idle 184 160 25.000000 0 // jump -344 15 15.000000 0 // painone -359 17 15.000000 0 // paintwo -376 3 15.000000 0 // shoot +344 15 24.000000 0 // painone +359 17 34.000000 0 // paintwo +376 3 3.000000 0 // shoot 379 21 15.000000 1 // taunt -400 21 35.000000 1 // run -421 21 35.000000 1 // runbackwards -442 21 35.000000 1 // strafeleft -463 21 35.000000 1 // straferight +400 20 29.000000 1 // run +421 20 29.000000 1 // runbackwards +442 20 29.000000 1 // strafeleft +463 20 29.000000 1 // straferight 484 2 15.000000 0 // deadone 486 2 15.000000 0 // deadtwo -488 21 35.000000 1 // forwardright -509 21 35.000000 1 // forwardleft -530 21 35.000000 1 // backright -551 21 30.000000 1 // backleft +488 20 29.000000 1 // forwardright +509 20 29.000000 1 // forwardleft +530 20 29.000000 1 // backright +551 20 29.000000 1 // backleft 572 21 20.000000 0 // melee -593 21 30.000000 1 // duckwalkbackwards -91 21 30.000000 1 // duckwalkstrafeleft -91 21 30.000000 1 // duckwalkstraferight -91 21 30.000000 1 // duckwalkforwardright -91 21 30.000000 1 // duckwalkforwardleft -593 21 30.000000 1 // duckwalkbackright -593 21 30.000000 1 // duckwalkbackleft \ No newline at end of file +593 20 32.000000 1 // duckwalkbackwards +614 20 32.000000 1 // duckwalkstrafeleft +635 20 32.000000 1 // duckwalkstraferight +656 20 32.000000 1 // duckwalkforwardright +677 20 32.000000 1 // duckwalkforwardleft +698 20 32.000000 1 // duckwalkbackright +719 20 32.000000 1 // duckwalkbackleft diff --git a/data/models/player/fox_state2.iqm b/data/models/player/fox_state2.iqm index 56db65df..696c4178 100644 Binary files a/data/models/player/fox_state2.iqm and b/data/models/player/fox_state2.iqm differ diff --git a/data/models/player/fox_state2.iqm.framegroups b/data/models/player/fox_state2.iqm.framegroups index 98eabd70..6432971b 100644 --- a/data/models/player/fox_state2.iqm.framegroups +++ b/data/models/player/fox_state2.iqm.framegroups @@ -1,31 +1,31 @@ -0 36 15.000000 0 // dieone -36 20 15.000000 0 // dietwo -56 15 15.000000 1 // draw +0 36 30.000000 0 // dieone +36 20 25.000000 0 // dietwo +56 15 30.000000 1 // draw 71 20 15.000000 1 // duck -91 21 30.000000 1 // duckwalk +91 20 32.000000 1 // duckwalk 112 16 15.000000 0 // duckjump -128 15 5.000000 1 // duckidle +128 15 10.000000 1 // duckidle 143 41 5.000000 1 // idle 184 160 25.000000 0 // jump -344 15 15.000000 0 // painone -359 17 15.000000 0 // paintwo -376 3 15.000000 0 // shoot +344 15 24.000000 0 // painone +359 17 34.000000 0 // paintwo +376 3 3.000000 0 // shoot 379 21 15.000000 1 // taunt -400 21 35.000000 1 // run -421 21 35.000000 1 // runbackwards -442 21 35.000000 1 // strafeleft -463 21 35.000000 1 // straferight +400 20 29.000000 1 // run +421 20 29.000000 1 // runbackwards +442 20 29.000000 1 // strafeleft +463 20 29.000000 1 // straferight 484 2 15.000000 0 // deadone 486 2 15.000000 0 // deadtwo -488 21 35.000000 1 // forwardright -509 21 35.000000 1 // forwardleft -530 21 35.000000 1 // backright -551 21 30.000000 1 // backleft +488 20 29.000000 1 // forwardright +509 20 29.000000 1 // forwardleft +530 20 29.000000 1 // backright +551 20 29.000000 1 // backleft 572 21 20.000000 0 // melee -593 21 30.000000 1 // duckwalkbackwards -91 21 30.000000 1 // duckwalkstrafeleft -91 21 30.000000 1 // duckwalkstraferight -91 21 30.000000 1 // duckwalkforwardright -91 21 30.000000 1 // duckwalkforwardleft -593 21 30.000000 1 // duckwalkbackright -593 21 30.000000 1 // duckwalkbackleft \ No newline at end of file +593 20 32.000000 1 // duckwalkbackwards +614 20 32.000000 1 // duckwalkstrafeleft +635 20 32.000000 1 // duckwalkstraferight +656 20 32.000000 1 // duckwalkforwardright +677 20 32.000000 1 // duckwalkforwardleft +698 20 32.000000 1 // duckwalkbackright +719 20 32.000000 1 // duckwalkbackleft diff --git a/data/models/player/fox_state3.iqm b/data/models/player/fox_state3.iqm index 374d4589..dd20e542 100644 Binary files a/data/models/player/fox_state3.iqm and b/data/models/player/fox_state3.iqm differ diff --git a/data/models/player/fox_state3.iqm.framegroups b/data/models/player/fox_state3.iqm.framegroups index 98eabd70..6432971b 100644 --- a/data/models/player/fox_state3.iqm.framegroups +++ b/data/models/player/fox_state3.iqm.framegroups @@ -1,31 +1,31 @@ -0 36 15.000000 0 // dieone -36 20 15.000000 0 // dietwo -56 15 15.000000 1 // draw +0 36 30.000000 0 // dieone +36 20 25.000000 0 // dietwo +56 15 30.000000 1 // draw 71 20 15.000000 1 // duck -91 21 30.000000 1 // duckwalk +91 20 32.000000 1 // duckwalk 112 16 15.000000 0 // duckjump -128 15 5.000000 1 // duckidle +128 15 10.000000 1 // duckidle 143 41 5.000000 1 // idle 184 160 25.000000 0 // jump -344 15 15.000000 0 // painone -359 17 15.000000 0 // paintwo -376 3 15.000000 0 // shoot +344 15 24.000000 0 // painone +359 17 34.000000 0 // paintwo +376 3 3.000000 0 // shoot 379 21 15.000000 1 // taunt -400 21 35.000000 1 // run -421 21 35.000000 1 // runbackwards -442 21 35.000000 1 // strafeleft -463 21 35.000000 1 // straferight +400 20 29.000000 1 // run +421 20 29.000000 1 // runbackwards +442 20 29.000000 1 // strafeleft +463 20 29.000000 1 // straferight 484 2 15.000000 0 // deadone 486 2 15.000000 0 // deadtwo -488 21 35.000000 1 // forwardright -509 21 35.000000 1 // forwardleft -530 21 35.000000 1 // backright -551 21 30.000000 1 // backleft +488 20 29.000000 1 // forwardright +509 20 29.000000 1 // forwardleft +530 20 29.000000 1 // backright +551 20 29.000000 1 // backleft 572 21 20.000000 0 // melee -593 21 30.000000 1 // duckwalkbackwards -91 21 30.000000 1 // duckwalkstrafeleft -91 21 30.000000 1 // duckwalkstraferight -91 21 30.000000 1 // duckwalkforwardright -91 21 30.000000 1 // duckwalkforwardleft -593 21 30.000000 1 // duckwalkbackright -593 21 30.000000 1 // duckwalkbackleft \ No newline at end of file +593 20 32.000000 1 // duckwalkbackwards +614 20 32.000000 1 // duckwalkstrafeleft +635 20 32.000000 1 // duckwalkstraferight +656 20 32.000000 1 // duckwalkforwardright +677 20 32.000000 1 // duckwalkforwardleft +698 20 32.000000 1 // duckwalkbackright +719 20 32.000000 1 // duckwalkbackleft diff --git a/data/qcsrc/server/cl_player.qc b/data/qcsrc/server/cl_player.qc index e953ff7d..c0887e40 100644 --- a/data/qcsrc/server/cl_player.qc +++ b/data/qcsrc/server/cl_player.qc @@ -218,70 +218,39 @@ float player_getspecies() void player_setupanimsformodel() { - local string animfilename; - local float animfile; // defaults for legacy .zym models without animinfo files - self.anim_die1 = '0 1 0.5'; // 2 seconds - self.anim_die2 = '1 1 0.5'; // 2 seconds - self.anim_draw = '2 1 3'; // TODO: analyze models and set framerate - self.anim_duck = '3 1 100'; // this anim seems bogus in most models, so make it play VERY briefly! - self.anim_duckwalk = '4 1 1'; - self.anim_duckjump = '5 1 100'; // zym anims keep playing until changed, so this only has to start the anim, landing will end it - self.anim_duckidle = '6 1 1'; - self.anim_idle = '7 1 1'; - self.anim_jump = '8 1 100'; // zym anims keep playing until changed, so this only has to start the anim, landing will end it - self.anim_pain1 = '9 1 2'; // 0.5 seconds - self.anim_pain2 = '10 1 2'; // 0.5 seconds - self.anim_shoot = '11 1 5'; // TODO: analyze models and set framerate - self.anim_taunt = '12 1 0.33'; // FIXME? there is no code using this anim - self.anim_run = '13 1 1'; - self.anim_runbackwards = '14 1 1'; - self.anim_strafeleft = '15 1 1'; - self.anim_straferight = '16 1 1'; - self.anim_dead1 = '17 1 1'; - self.anim_dead2 = '18 1 1'; - self.anim_forwardright = '19 1 1'; - self.anim_forwardleft = '20 1 1'; - self.anim_backright = '21 1 1'; - self.anim_backleft = '22 1 1'; - animparseerror = FALSE; - animfilename = strcat(self.playermodel, ".animinfo"); // only the normal player model may contain animation info - animfile = fopen(animfilename, FILE_READ); - if (animfile >= 0) - { - self.anim_die1 = animparseline(animfile); - self.anim_die2 = animparseline(animfile); - self.anim_draw = animparseline(animfile); - self.anim_duck = animparseline(animfile); - self.anim_duckwalk = animparseline(animfile); - self.anim_duckjump = animparseline(animfile); - self.anim_duckidle = animparseline(animfile); - self.anim_idle = animparseline(animfile); - self.anim_jump = animparseline(animfile); - self.anim_pain1 = animparseline(animfile); - self.anim_pain2 = animparseline(animfile); - self.anim_shoot = animparseline(animfile); - self.anim_taunt = animparseline(animfile); - self.anim_run = animparseline(animfile); - self.anim_runbackwards = animparseline(animfile); - self.anim_strafeleft = animparseline(animfile); - self.anim_straferight = animparseline(animfile); - self.anim_forwardright = animparseline(animfile); - self.anim_forwardleft = animparseline(animfile); - self.anim_backright = animparseline(animfile); - self.anim_backleft = animparseline(animfile); - fclose(animfile); - - // derived anims - self.anim_dead1 = '0 1 1' + '1 0 0' * (self.anim_die1_x + self.anim_die1_y - 1); - self.anim_dead2 = '0 1 1' + '1 0 0' * (self.anim_die2_x + self.anim_die2_y - 1); - - if (animparseerror) - print("Parse error in ", animfilename, ", some player animations are broken\n"); - } - else - dprint("File ", animfilename, " not found, assuming legacy .zym model animation timings\n"); - + self.anim_die1 = animfixfps(self, '0 1 0.5'); // 2 seconds + self.anim_die2 = animfixfps(self, '1 1 0.5'); // 2 seconds + self.anim_draw = animfixfps(self, '2 1 3'); + // self.anim_duck = '3 1 100'; // This anim is broken, use slot 3 as a new free slot in the future ;) + self.anim_duckwalk = animfixfps(self, '4 1 1'); + self.anim_duckjump = '5 1 100'; // NOTE: zym anims keep playing until changed, so this only has to start the anim, landing will end it + self.anim_duckidle = animfixfps(self, '6 1 1'); + self.anim_idle = animfixfps(self, '7 1 1'); + self.anim_jump = '8 1 100'; // NOTE: zym anims keep playing until changed, so this only has to start the anim, landing will end it + self.anim_pain1 = animfixfps(self, '9 1 2'); // 0.5 seconds + self.anim_pain2 = animfixfps(self, '10 1 2'); // 0.5 seconds + self.anim_shoot = animfixfps(self, '11 1 5'); // analyze models and set framerate + self.anim_taunt = animfixfps(self, '12 1 0.33'); + self.anim_run = animfixfps(self, '13 1 1'); + self.anim_runbackwards = animfixfps(self, '14 1 1'); + self.anim_strafeleft = animfixfps(self, '15 1 1'); + self.anim_straferight = animfixfps(self, '16 1 1'); + //self.anim_dead1 = animfixfps(self, '17 1 1'); + //self.anim_dead2 = animfixfps(self, '18 1 1'); + self.anim_forwardright = animfixfps(self, '19 1 1'); + 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_duckwalkstrafeleft = animfixfps(self, '25 1 1'); + self.anim_duckwalkstraferight = animfixfps(self, '26 1 1'); + self.anim_duckwalkforwardright = animfixfps(self, '27 1 1'); + self.anim_duckwalkforwardleft = animfixfps(self, '28 1 1'); + self.anim_duckwalkbackright = animfixfps(self, '29 1 1'); + self.anim_duckwalkbackleft = animfixfps(self, '30 1 1'); + // TODO introspect models for finding right "fps" value (1/duration) // reset animstate now setanim(self, self.anim_idle, TRUE, FALSE, TRUE); }; @@ -329,8 +298,22 @@ void player_anim (void) } else if (self.crouch) { - 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/data/qcsrc/server/cl_weaponsystem.qc b/data/qcsrc/server/cl_weaponsystem.qc index 48058cca..7b005c8e 100644 --- a/data/qcsrc/server/cl_weaponsystem.qc +++ b/data/qcsrc/server/cl_weaponsystem.qc @@ -407,21 +407,10 @@ void CL_Weaponentity_Think() animfilename = strcat("models/weapons/h_", self.owner.weaponname, ".iqm.animinfo"); animfile = fopen(animfilename, FILE_READ); // preset some defaults that work great for renamed zym files (which don't need an animinfo) - self.anim_fire1 = '0 1 0.01'; - self.anim_fire2 = '1 1 0.01'; - self.anim_idle = '2 1 0.01'; - self.anim_reload = '3 1 0.01'; - if (animfile >= 0) - { - animparseerror = FALSE; - self.anim_fire1 = animparseline(animfile); - self.anim_fire2 = animparseline(animfile); - self.anim_idle = animparseline(animfile); - self.anim_reload = animparseline(animfile); - fclose(animfile); - if (animparseerror) - print("Parse error in ", animfilename, ", some player animations are broken\n"); - } + self.anim_fire1 = animfixfps(self, '0 1 0.01'); + self.anim_fire2 = animfixfps(self, '1 1 0.01'); + self.anim_idle = animfixfps(self, '2 1 0.01'); + self.anim_reload = animfixfps(self, '3 1 0.01'); // if we have a "weapon" tag, let's attach the v_ model to it ("invisible hand" style model) // if we don't, this is a "real" animated model @@ -536,10 +525,10 @@ void CL_Weaponentity_Think() self.movedir = '0 0 0'; self.spawnorigin = '0 0 0'; self.oldorigin = '0 0 0'; - self.anim_fire1 = '0 1 0.01'; - self.anim_fire2 = '0 1 0.01'; - self.anim_idle = '0 1 0.01'; - self.anim_reload = '0 1 0.01'; + self.anim_fire1 = animfixfps(self, '0 1 0.01'); + self.anim_fire2 = animfixfps(self, '0 1 0.01'); + self.anim_idle = animfixfps(self, '0 1 0.01'); + self.anim_reload = animfixfps(self, '0 1 0.01'); } self.view_ofs = '0 0 0'; @@ -1247,10 +1236,20 @@ void weapon_thinkf(float fr, float t, void() func) if (t) if (!self.crouch) // shoot anim stands up, this looks bad { - local vector anim; - anim = self.anim_shoot; - anim_z = anim_y / (t + sys_frametime); - setanim(self, anim, FALSE, TRUE, TRUE); + vector anim; + if(self.weapon == WEP_GRABBER && self.BUTTON_ATCK2) + { + // use melee attack animation for grabber alt fire + anim = self.anim_melee; + anim_z = anim_y / (t + sys_frametime); + setanim(self, anim, FALSE, TRUE, TRUE); + } + else + { + anim = self.anim_shoot; + anim_z = anim_y / (t + sys_frametime); + setanim(self, anim, FALSE, TRUE, TRUE); + } } }; @@ -1734,4 +1733,4 @@ void W_Reload(float sent_ammo_min, float sent_ammo_amount, float sent_time, stri self.clip_load = 0; self.old_clip_load = self.clip_load; self.clip_load = self.(weapon_load[self.weapon]) = -1; -} \ No newline at end of file +} diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index 0e6853f4..b53f2c47 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -162,6 +162,15 @@ float maxclients; .vector anim_forwardleft; // player running forward and left .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/data/qcsrc/server/g_subs.qc b/data/qcsrc/server/g_subs.qc index 49aaebf6..496f532e 100644 --- a/data/qcsrc/server/g_subs.qc +++ b/data/qcsrc/server/g_subs.qc @@ -54,29 +54,18 @@ void updateanim(entity e) //print(ftos(time), " -> ", ftos(e.frame), "\n"); }; -float animparseerror; -vector animparseline(float animfile) -{ - local string line; - local float c; - local vector anim; - if (animfile < 0) - return '0 1 2'; - line = fgets(animfile); - c = tokenize_console(line); - if (c < 3) +vector animfixfps(entity e, vector a) +{ + // multi-frame anim: keep as-is + if(a_y == 1) { - animparseerror = TRUE; - return '0 1 2'; + float dur; + dur = frameduration(e.modelindex, a_x); + if(dur > 0) + a_z = 1.0 / dur; } - anim_x = stof(argv(0)); - anim_y = stof(argv(1)); - anim_z = stof(argv(2)); - // don't allow completely bogus values - if (anim_x < 0 || anim_y < 1 || anim_z < 0.001) - anim = '0 1 2'; - return anim; -}; + return a; +} /* ================== diff --git a/docs/TODO.txt b/docs/TODO.txt index caecd20c..5048f5e4 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -278,4 +278,4 @@ - 0.8: Weight paint new fox state models so that deforms cause less sharp edges when the spine bones rotate from one another -- 0.8 BUG URGENT: Fix new fox animations which aren't being exported properly +- 0.8 BUG: Normal grabber shoot seems to play melee animation on player models diff --git a/misc/source/media/models/player/fox.blend b/misc/source/media/models/player/fox.blend index 2706e199..ab3558b3 100644 Binary files a/misc/source/media/models/player/fox.blend and b/misc/source/media/models/player/fox.blend differ diff --git a/misc/source/media/models/player/fox_state1.blend b/misc/source/media/models/player/fox_state1.blend index cf69c9e4..d1b9bf47 100644 Binary files a/misc/source/media/models/player/fox_state1.blend and b/misc/source/media/models/player/fox_state1.blend differ diff --git a/misc/source/media/models/player/fox_state2.blend b/misc/source/media/models/player/fox_state2.blend index 3acec993..61b5ee76 100644 Binary files a/misc/source/media/models/player/fox_state2.blend and b/misc/source/media/models/player/fox_state2.blend differ diff --git a/misc/source/media/models/player/fox_state3.blend b/misc/source/media/models/player/fox_state3.blend index b6427686..5718f565 100644 Binary files a/misc/source/media/models/player/fox_state3.blend and b/misc/source/media/models/player/fox_state3.blend differ