]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameTick.cpp
Using initialization list in Muscle constructor
[lugaru.git] / Source / GameTick.cpp
index f9a3f88a789bc15a21c74de39aef131b2bcf184a..1f971e70f8f7869b67d0232493d7e1e6b9b74094 100644 (file)
@@ -102,7 +102,7 @@ extern float envsoundlife[30];
 extern float usermousesensitivity;
 extern bool ismotionblur;
 extern bool showdamagebar; // (des)activate the damage bar
-extern bool decals;
+extern bool decalstoggle;
 extern bool skyboxtexture;
 extern float skyboxr;
 extern float skyboxg;
@@ -606,7 +606,7 @@ void Game::Loadlevel(const std::string& name, bool tutorial)
     }
 
     if (!stealthloading) {
-        terrain.numdecals = 0;
+        terrain.decals.clear();
         Sprite::deleteSprites();
 
         for (int i = 0; i < subdivision; i++) {
@@ -1586,10 +1586,8 @@ void doDevKeys()
 
 void doJumpReversals()
 {
-    for (unsigned k = 0; k < Person::players.size(); k++)
-        for (unsigned i = k; i < Person::players.size(); i++) {
-            if (i == k)
-                continue;
+    for (unsigned k = 0; k < Person::players.size(); k++) {
+        for (unsigned i = k + 1; i < Person::players.size(); i++) {
             if (     Person::players[k]->skeleton.free == 0 &&
                      Person::players[i]->skeleton.oldfree == 0 &&
                      (Person::players[i]->animTarget == jumpupanim ||
@@ -1682,6 +1680,7 @@ void doJumpReversals()
                 }
             }
         }
+    }
 }
 
 void doAerialAcrobatics()
@@ -1776,13 +1775,13 @@ void doAerialAcrobatics()
                             lowpointtarget = lowpoint + DoRotation(Person::players[k]->facing, 0, -90, 0) * 1.5;
                             XYZ tempcoords1 = lowpoint;
                             whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
-                            if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
-                                Person::players[k]->setAnimation(walljumpleftanim);
+                            if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
+                                Person::players[k]->setTargetAnimation(walljumpleftanim);
                                 emit_sound_at(movewhooshsound, Person::players[k]->coords);
                                 if (k == 0)
                                     pause_sound(whooshsound);
 
-                                lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+                                lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
                                 Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
                                 if (lowpointtarget.z < 0)
                                     Person::players[k]->yaw = 180 - Person::players[k]->yaw;
@@ -1794,13 +1793,13 @@ void doAerialAcrobatics()
                                 lowpoint = tempcoords1;
                                 lowpointtarget = lowpoint + DoRotation(Person::players[k]->facing, 0, 90, 0) * 1.5;
                                 whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
-                                if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
-                                    Person::players[k]->setAnimation(walljumprightanim);
+                                if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
+                                    Person::players[k]->setTargetAnimation(walljumprightanim);
                                     emit_sound_at(movewhooshsound, Person::players[k]->coords);
                                     if (k == 0)
                                         pause_sound(whooshsound);
 
-                                    lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+                                    lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
                                     Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
                                     if (lowpointtarget.z < 0)
                                         Person::players[k]->yaw = 180 - Person::players[k]->yaw;
@@ -1812,13 +1811,13 @@ void doAerialAcrobatics()
                                     lowpoint = tempcoords1;
                                     lowpointtarget = lowpoint + Person::players[k]->facing * 2;
                                     whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
-                                    if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
-                                        Person::players[k]->setAnimation(walljumpbackanim);
+                                    if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
+                                        Person::players[k]->setTargetAnimation(walljumpbackanim);
                                         emit_sound_at(movewhooshsound, Person::players[k]->coords);
                                         if (k == 0)
                                             pause_sound(whooshsound);
 
-                                        lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+                                        lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
                                         Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
                                         if (lowpointtarget.z < 0)
                                             Person::players[k]->yaw = 180 - Person::players[k]->yaw;
@@ -1830,13 +1829,13 @@ void doAerialAcrobatics()
                                         lowpoint = tempcoords1;
                                         lowpointtarget = lowpoint - Person::players[k]->facing * 2;
                                         whichhit = Object::objects[i]->model.LineCheck(&lowpoint, &lowpointtarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw);
-                                        if (whichhit != -1 && fabs(Object::objects[i]->model.facenormals[whichhit].y) < .3) {
-                                            Person::players[k]->setAnimation(walljumpfrontanim);
+                                        if (whichhit != -1 && fabs(Object::objects[i]->model.Triangles[whichhit].facenormal.y) < .3) {
+                                            Person::players[k]->setTargetAnimation(walljumpfrontanim);
                                             emit_sound_at(movewhooshsound, Person::players[k]->coords);
                                             if (k == 0)
                                                 pause_sound(whooshsound);
 
-                                            lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+                                            lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
                                             Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
                                             if (lowpointtarget.z < 0)
                                                 Person::players[k]->yaw = 180 - Person::players[k]->yaw;
@@ -1979,7 +1978,7 @@ void doAerialAcrobatics()
                                                                     lowpoint.y += (float)j / 13;
                                                                     lowpointtarget = lowpoint + facing * 1.3;
                                                                     flatfacing = Person::players[k]->coords;
-                                                                    Person::players[k]->coords = colpoint - DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[k]->yaw, 0) * .01;
+                                                                    Person::players[k]->coords = colpoint - DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[k]->yaw, 0) * .01;
                                                                     Person::players[k]->coords.y = lowpointtarget.y - .07;
                                                                     Person::players[k]->currentoffset = (flatfacing - Person::players[k]->coords) / Person::players[k]->scale;
 
@@ -1990,7 +1989,7 @@ void doAerialAcrobatics()
                                                                         }
                                                                         emit_sound_at(jumpsound, Person::players[k]->coords, 128.);
 
-                                                                        lowpointtarget = DoRotation(Object::objects[i]->model.facenormals[whichhit], 0, Object::objects[i]->yaw, 0);
+                                                                        lowpointtarget = DoRotation(Object::objects[i]->model.Triangles[whichhit].facenormal, 0, Object::objects[i]->yaw, 0);
                                                                         Person::players[k]->yaw = -asin(0 - lowpointtarget.x) * 180 / M_PI;
                                                                         if (lowpointtarget.z < 0)
                                                                             Person::players[k]->yaw = 180 - Person::players[k]->yaw;
@@ -2011,7 +2010,7 @@ void doAerialAcrobatics()
                                                                         Person::players[k]->frameTarget = 1;
                                                                         //hang ledge (?)
                                                                         if (j > 25) {
-                                                                            Person::players[k]->setAnimation(hanganim);
+                                                                            Person::players[k]->setTargetAnimation(hanganim);
                                                                             Person::players[k]->jumppower = 0;
                                                                         }
                                                                     }
@@ -2042,7 +2041,7 @@ void doAerialAcrobatics()
                         //stagger off ledge (?)
                         if (Person::players[k]->animTarget == staggerbackhighanim || Person::players[k]->animTarget == staggerbackhardanim)
                             Person::players[k]->RagDoll(0);
-                        Person::players[k]->setAnimation(jumpdownanim);
+                        Person::players[k]->setTargetAnimation(jumpdownanim);
 
                         if (!k)
                             emit_sound_at(whooshsound, Person::players[k]->coords, 128.);
@@ -2120,7 +2119,7 @@ void doAttacks()
                                     Person::players[i]->animTarget == staffhitanim ||
                                     Person::players[i]->animTarget == staffspinhitanim)
                                 if (distsq(&Person::players[k]->coords, &Person::players[i]->coords) < 6.5 && !Person::players[i]->skeleton.free) {
-                                    Person::players[k]->setAnimation(dodgebackanim);
+                                    Person::players[k]->setTargetAnimation(dodgebackanim);
                                     Person::players[k]->targetyaw = roughDirectionTo(Person::players[k]->coords, Person::players[i]->coords);
                                     Person::players[k]->targettilt2 = pitchTo(Person::players[k]->coords, Person::players[i]->coords);
                                 }
@@ -2128,7 +2127,7 @@ void doAttacks()
                         if (Person::players[k]->animTarget != dodgebackanim) {
                             if (k == 0)
                                 numflipped++;
-                            Person::players[k]->setAnimation(backhandspringanim);
+                            Person::players[k]->setTargetAnimation(backhandspringanim);
                             Person::players[k]->targetyaw = -yaw + 180;
                             if (Person::players[k]->leftkeydown)
                                 Person::players[k]->targetyaw -= 45;
@@ -2459,20 +2458,11 @@ void doAttacks()
                                                     Person::players[i]->skeleton.free &&
                                                     Person::players[i]->skeleton.longdead > 1000) {
                                                 Person::players[k]->animTarget = killanim;
-                                                //TODO: refactor this out, what does it do?
-                                                for (int j = 0; j < terrain.numdecals; j++) {
-                                                    if ((terrain.decaltype[j] == blooddecal || terrain.decaltype[j] == blooddecalslow) &&
-                                                            terrain.decalalivetime[j] < 2)
-                                                        terrain.DeleteDecal(j);
-                                                }
+                                                terrain.deleteDeadDecals();
                                                 for (unsigned int l = 0; l < Object::objects.size(); l++) {
-                                                    if (Object::objects[l]->model.type == decalstype)
-                                                        for (int j = 0; j < Object::objects[l]->model.numdecals; j++) {
-                                                            if ((Object::objects[l]->model.decaltype[j] == blooddecal ||
-                                                                    Object::objects[l]->model.decaltype[j] == blooddecalslow) &&
-                                                                    Object::objects[l]->model.decalalivetime[j] < 2)
-                                                                Object::objects[l]->model.DeleteDecal(j);
-                                                        }
+                                                    if (Object::objects[l]->model.type == decalstype) {
+                                                        Object::objects[l]->model.deleteDeadDecals();
+                                                    }
                                                 }
                                             }
                                             if (!Person::players[i]->dead || musictype != 2)
@@ -2485,21 +2475,11 @@ void doAttacks()
                                                          Person::players[i]->skeleton.free) &&
                                                         (!Person::players[i]->dead || musictype != stream_fighttheme)) {
                                                     Person::players[k]->animTarget = dropkickanim;
-                                                    for (int j = 0; j < terrain.numdecals; j++) {
-                                                        if ((terrain.decaltype[j] == blooddecal || terrain.decaltype[j] == blooddecalslow) &&
-                                                                terrain.decalalivetime[j] < 2) {
-                                                            terrain.DeleteDecal(j);
-                                                        }
-                                                    }
+                                                    terrain.deleteDeadDecals();
                                                     for (unsigned int l = 0; l < Object::objects.size(); l++) {
-                                                        if (Object::objects[l]->model.type == decalstype)
-                                                            for (int j = 0; j < Object::objects[l]->model.numdecals; j++) {
-                                                                if ((Object::objects[l]->model.decaltype[j] == blooddecal ||
-                                                                        Object::objects[l]->model.decaltype[j] == blooddecalslow) &&
-                                                                        Object::objects[l]->model.decalalivetime[j] < 2) {
-                                                                    Object::objects[l]->model.DeleteDecal(j);
-                                                                }
-                                                            }
+                                                        if (Object::objects[l]->model.type == decalstype) {
+                                                            Object::objects[l]->model.deleteDeadDecals();
+                                                        }
                                                     }
                                                 }
                                         }
@@ -2577,7 +2557,7 @@ void doAttacks()
                                   Person::players[k]->rabbitkickenabled) ||
                                  Person::players[k]->jumpkeydown)) {
                             oldattackkey = 1;
-                            Person::players[k]->setAnimation(rabbitkickanim);
+                            Person::players[k]->setTargetAnimation(rabbitkickanim);
                         }
                     //update counts
                     if (Animation::animations[Person::players[k]->animTarget].attack && k == 0) {
@@ -2748,18 +2728,18 @@ void doPlayerCollisions()
                                                                                 if (Person::players[k]->howactive == typeactive || hostile)
                                                                                     if (Person::players[k]->isIdle()) {
                                                                                         if (Person::players[k]->howactive < typesleeping)
-                                                                                            Person::players[k]->setAnimation(Person::players[k]->getStop());
+                                                                                            Person::players[k]->setTargetAnimation(Person::players[k]->getStop());
                                                                                         else if (Person::players[k]->howactive == typesleeping)
-                                                                                            Person::players[k]->setAnimation(getupfromfrontanim);
+                                                                                            Person::players[k]->setTargetAnimation(getupfromfrontanim);
                                                                                         if (!editorenabled)
                                                                                             Person::players[k]->howactive = typeactive;
                                                                                     }
                                                                                 if (Person::players[i]->howactive == typeactive || hostile)
                                                                                     if (Person::players[i]->isIdle()) {
                                                                                         if (Person::players[i]->howactive < typesleeping)
-                                                                                            Person::players[i]->setAnimation(Person::players[k]->getStop());
+                                                                                            Person::players[i]->setTargetAnimation(Person::players[k]->getStop());
                                                                                         else
-                                                                                            Person::players[i]->setAnimation(getupfromfrontanim);
+                                                                                            Person::players[i]->setTargetAnimation(getupfromfrontanim);
                                                                                         if (!editorenabled)
                                                                                             Person::players[i]->howactive = typeactive;
                                                                                     }
@@ -3518,7 +3498,7 @@ void Game::Tick()
                                                     Person::players[i]->isIdle() ||
                                                     Person::players[i]->aitype != playercontrolled) {
                                                 Person::players[i]->throwtogglekeydown = 1;
-                                                Person::players[i]->setAnimation(crouchremoveknifeanim);
+                                                Person::players[i]->setTargetAnimation(crouchremoveknifeanim);
                                                 Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, weapons[j].position);
                                                 Person::players[i]->hasvictim = 0;
                                             }
@@ -3546,7 +3526,7 @@ void Game::Tick()
                                                    Person::players[i]->coords.y < weapons[j].position.y) {
                                             if (!Person::players[i]->isFlip()) {
                                                 Person::players[i]->throwtogglekeydown = 1;
-                                                Person::players[i]->setAnimation(removeknifeanim);
+                                                Person::players[i]->setTargetAnimation(removeknifeanim);
                                                 Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, weapons[j].position);
                                             }
                                             if (Person::players[i]->isFlip()) {
@@ -3594,7 +3574,7 @@ void Game::Tick()
                                                         Person::players[i]->throwtogglekeydown = 1;
                                                         Person::players[i]->victim = Person::players[j];
                                                         Person::players[i]->hasvictim = 1;
-                                                        Person::players[i]->setAnimation(crouchremoveknifeanim);
+                                                        Person::players[i]->setTargetAnimation(crouchremoveknifeanim);
                                                         Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, Person::players[j]->coords);
                                                     }
                                                     if (Person::players[i]->animTarget == rollanim || Person::players[i]->animTarget == backhandspringanim) {
@@ -3691,7 +3671,7 @@ void Game::Tick()
                                                             if (!Person::players[i]->isFlip()) {
                                                                 Person::players[i]->throwtogglekeydown = 1;
                                                                 Person::players[i]->victim = Person::players[j];
-                                                                Person::players[i]->setAnimation(knifethrowanim);
+                                                                Person::players[i]->setTargetAnimation(knifethrowanim);
                                                                 Person::players[i]->targetyaw = roughDirectionTo(Person::players[i]->coords, Person::players[j]->coords);
                                                                 Person::players[i]->targettilt2 = pitchTo(Person::players[i]->coords, Person::players[j]->coords);
                                                             }
@@ -3755,7 +3735,7 @@ void Game::Tick()
                                     isgood = false;
                             if (isgood && Person::players[i]->creature != wolftype) {
                                 if (Person::players[i]->isIdle() && Person::players[i]->num_weapons && weapons[Person::players[i]->weaponids[0]].getType() == knife) {
-                                    Person::players[i]->setAnimation(drawrightanim);
+                                    Person::players[i]->setTargetAnimation(drawrightanim);
                                     Person::players[i]->drawtogglekeydown = 1;
                                 }
                                 if ((Person::players[i]->isIdle() ||
@@ -3764,11 +3744,11 @@ void Game::Tick()
                                          Person::players[i]->isRun())) &&
                                         Person::players[i]->num_weapons &&
                                         weapons[Person::players[i]->weaponids[0]].getType() == sword) {
-                                    Person::players[i]->setAnimation(drawleftanim);
+                                    Person::players[i]->setTargetAnimation(drawleftanim);
                                     Person::players[i]->drawtogglekeydown = 1;
                                 }
                                 if (Person::players[i]->isCrouch() && Person::players[i]->num_weapons && weapons[Person::players[i]->weaponids[0]].getType() == knife) {
-                                    Person::players[i]->setAnimation(crouchdrawrightanim);
+                                    Person::players[i]->setTargetAnimation(crouchdrawrightanim);
                                     Person::players[i]->drawtogglekeydown = 1;
                                 }
                             }
@@ -3785,9 +3765,9 @@ void Game::Tick()
                                 Person::players[i]->attackkeydown &&
                                 musictype != stream_fighttheme) {
                             if (weapons[Person::players[i]->weaponids[Person::players[i]->weaponactive]].getType() == knife)
-                                Person::players[i]->setAnimation(crouchstabanim);
+                                Person::players[i]->setTargetAnimation(crouchstabanim);
                             if (weapons[Person::players[i]->weaponids[Person::players[i]->weaponactive]].getType() == sword)
-                                Person::players[i]->setAnimation(swordgroundstabanim);
+                                Person::players[i]->setTargetAnimation(swordgroundstabanim);
                             Person::players[i]->hasvictim = 0;
                         }
                     }
@@ -3860,7 +3840,7 @@ void Game::Tick()
                             Person::players[i]->lowreversaldelay = .5;
 
                             if (Person::players[i]->isIdle()) {
-                                Person::players[i]->setAnimation(Person::players[i]->getCrouch());
+                                Person::players[i]->setTargetAnimation(Person::players[i]->getCrouch());
                                 Person::players[i]->transspeed = 10;
                             }
                             if (Person::players[i]->isRun() ||
@@ -3869,7 +3849,7 @@ void Game::Tick()
                                       Person::players[i]->rightkeydown ||
                                       Person::players[i]->forwardkeydown ||
                                       Person::players[i]->backkeydown))) {
-                                Person::players[i]->setAnimation(rollanim);
+                                Person::players[i]->setTargetAnimation(rollanim);
                                 Person::players[i]->transspeed = 20;
                             }
                         }
@@ -3905,12 +3885,12 @@ void Game::Tick()
                                         Person::players[i]->animCurrent = Person::players[i]->getCrouch();
                                         Person::players[i]->frameCurrent = 0;
                                     }
-                                    Person::players[i]->setAnimation(Person::players[i]->getIdle());
+                                    Person::players[i]->setTargetAnimation(Person::players[i]->getIdle());
                                     Person::players[i]->transspeed = 10;
                                 }
                             }
                             if (Person::players[i]->animTarget == sneakanim) {
-                                Person::players[i]->setAnimation(Person::players[i]->getIdle());
+                                Person::players[i]->setTargetAnimation(Person::players[i]->getIdle());
                                 Person::players[i]->transspeed = 10;
                             }
                         }
@@ -3926,9 +3906,9 @@ void Game::Tick()
                                      !Person::players[i]->jumpkeydown &&
                                      Person::players[i]->crouchkeydown)) {
                                 if (Person::players[i]->aitype == passivetype)
-                                    Person::players[i]->setAnimation(walkanim);
+                                    Person::players[i]->setTargetAnimation(walkanim);
                                 else
-                                    Person::players[i]->setAnimation(Person::players[i]->getRun());
+                                    Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
                             }
                             if (Person::players[i]->isCrouch()) {
                                 Person::players[i]->animTarget = sneakanim;
@@ -3937,7 +3917,7 @@ void Game::Tick()
                                 Person::players[i]->frameTarget = 0;
                             }
                             if (Person::players[i]->animTarget == hanganim/*&&(!Person::players[i]->forwardstogglekeydown||Person::players[i]->aitype!=playercontrolled)*/) {
-                                Person::players[i]->setAnimation(climbanim);
+                                Person::players[i]->setTargetAnimation(climbanim);
                                 Person::players[i]->frameTarget = 1;
                                 Person::players[i]->jumpclimb = 1;
                             }
@@ -3958,7 +3938,7 @@ void Game::Tick()
                                      Person::players[i]->frameTarget > 0 &&
                                      !Person::players[i]->jumpkeydown &&
                                      Person::players[i]->crouchkeydown)) {
-                                Person::players[i]->setAnimation(Person::players[i]->getRun());
+                                Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
                             }
                             if (Person::players[i]->isCrouch()) {
                                 Person::players[i]->animTarget = sneakanim;
@@ -3987,7 +3967,7 @@ void Game::Tick()
                                      Person::players[i]->frameTarget > 0 &&
                                      !Person::players[i]->jumpkeydown &&
                                      Person::players[i]->crouchkeydown)) {
-                                Person::players[i]->setAnimation(Person::players[i]->getRun());
+                                Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
                             }
                             if (Person::players[i]->isCrouch()) {
                                 Person::players[i]->animTarget = sneakanim;
@@ -4016,7 +3996,7 @@ void Game::Tick()
                                      Person::players[i]->frameTarget > 0 &&
                                      !Person::players[i]->jumpkeydown &&
                                      Person::players[i]->crouchkeydown)) {
-                                Person::players[i]->setAnimation(Person::players[i]->getRun());
+                                Person::players[i]->setTargetAnimation(Person::players[i]->getRun());
                             }
                             if (Person::players[i]->isCrouch()) {
                                 Person::players[i]->animTarget = sneakanim;
@@ -4052,7 +4032,7 @@ void Game::Tick()
                                     ((Person::players[i]->animTarget != rabbitrunninganim &&
                                       Person::players[i]->animTarget != wolfrunninganim) || i != 0)) {
                                 Person::players[i]->jumpstart = 0;
-                                Person::players[i]->setAnimation(jumpupanim);
+                                Person::players[i]->setTargetAnimation(jumpupanim);
                                 Person::players[i]->yaw = Person::players[i]->targetyaw;
                                 Person::players[i]->transspeed = 20;
                                 Person::players[i]->FootLand(leftfoot, 1);
@@ -4106,7 +4086,7 @@ void Game::Tick()
                                 emit_sound_at(jumpsound, Person::players[i]->coords, 128.);
                             }
                             if ((Person::players[i]->isIdle()) && Person::players[i]->jumppower > 1) {
-                                Person::players[i]->setAnimation(Person::players[i]->getLanding());
+                                Person::players[i]->setTargetAnimation(Person::players[i]->getLanding());
                                 Person::players[i]->frameTarget = 2;
                                 Person::players[i]->landhard = 0;
                                 Person::players[i]->jumpstart = 1;
@@ -4131,12 +4111,14 @@ void Game::Tick()
                         }
 
                         if (!movekey) {
-                            if (Person::players[i]->isRun() || Person::players[i]->animTarget == walkanim)
-                                Person::players[i]->setAnimation(Person::players[i]->getStop());
+                            if (Person::players[i]->isRun() || Person::players[i]->animTarget == walkanim) {
+                                Person::players[i]->setTargetAnimation(Person::players[i]->getStop());
+                            }
                             if (Person::players[i]->animTarget == sneakanim) {
                                 Person::players[i]->animTarget = Person::players[i]->getCrouch();
-                                if (Person::players[i]->animCurrent == sneakanim)
+                                if (Person::players[i]->animCurrent == sneakanim) {
                                     Person::players[i]->target = 0;
+                                }
                                 Person::players[i]->frameTarget = 0;
                             }
                         }
@@ -4145,9 +4127,9 @@ void Game::Tick()
                                  Person::players[i]->aitype == searchtype ||
                                  (Person::players[i]->aitype == passivetype &&
                                   Person::players[i]->numwaypoints <= 1)))
-                            Person::players[i]->setAnimation(Person::players[i]->getStop());
+                            Person::players[i]->setTargetAnimation(Person::players[i]->getStop());
                         if (Person::players[i]->isRun() && (Person::players[i]->aitype == passivetype))
-                            Person::players[i]->setAnimation(Person::players[i]->getStop());
+                            Person::players[i]->setTargetAnimation(Person::players[i]->getStop());
                     }
                 }
                 if (Person::players[i]->animTarget == rollanim)
@@ -4165,7 +4147,7 @@ void Game::Tick()
 
                 //stop to turn in right direction
                 if (fabs(Person::players[k]->yaw - Person::players[k]->targetyaw) > 90 && (Person::players[k]->isRun() || Person::players[k]->animTarget == walkanim))
-                    Person::players[k]->setAnimation(Person::players[k]->getStop());
+                    Person::players[k]->setTargetAnimation(Person::players[k]->getStop());
 
                 if (Person::players[k]->animTarget == backhandspringanim || Person::players[k]->animTarget == dodgebackanim)
                     Person::players[k]->targettilt = 0;