]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Person.cpp
renames for readability
[lugaru.git] / Source / Person.cpp
index a6a9c504a2e32c26be88915a9a408704d1382473..e3e6b2ee5a6c307f6f822492c288f2a57fcfb4f3 100644 (file)
@@ -28,7 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "Game.h"
 
 extern float multiplier;
-extern int channels[100];
 extern Terrain terrain;
 extern float gravity;
 extern int environment;
@@ -49,7 +48,6 @@ extern bool osx;
 extern bool autoslomo;
 extern float camerashake;
 extern float woozy;
-extern float terraindetail;
 extern float viewdistance;
 extern float blackout;
 extern int difficulty;
@@ -85,19 +83,21 @@ extern int indialogue;
 
 extern bool gamestarted;
 
+Person player[maxplayers];
+
 void Person::CheckKick()
 {
   if (!(hasvictim
-       && (targetanimation == rabbitkickanim
+       && (animTarget == rabbitkickanim
            && victim
            && victim != this
-           && currentframe >= 2
-           && currentanimation == rabbitkickanim)
-       && (findDistancefast(&coords,&victim->coords) < 1.2)
+           && frameCurrent >= 2
+           && animCurrent == rabbitkickanim)
+       && (distsq(&coords,&victim->coords) < 1.2)
        && (!victim->skeleton.free)))
     return;
 
-  if (animation[victim->targetanimation].height!=lowheight)
+  if (animation[victim->animTarget].height!=lowheight)
     {
       float damagemult = (creature == wolftype ? 2.5 : 1.) * power * power;
       XYZ relative = velocity;
@@ -117,9 +117,9 @@ void Person::CheckKick()
       if(id==0)camerashake+=.4;
 
       target=0;
-      currentframe=3;
-      targetanimation=backflipanim;
-      targetframe=4;
+      frameCurrent=3;
+      animTarget=backflipanim;
+      frameTarget=4;
       velocity=facing*-10;
       velocity.y=5;
       skeleton.free=0;
@@ -130,18 +130,18 @@ void Person::CheckKick()
     }
   else if (victim->isCrouch())
     {
-      targetanimation=rabbitkickreversedanim;
-      currentanimation=rabbitkickreversedanim;
-      victim->currentanimation=rabbitkickreversalanim;
-      victim->targetanimation=rabbitkickreversalanim;
+      animTarget=rabbitkickreversedanim;
+      animCurrent=rabbitkickreversedanim;
+      victim->animCurrent=rabbitkickreversalanim;
+      victim->animTarget=rabbitkickreversalanim;
       targettilt2=0;
-      currentframe=0;
-      targetframe=1;
+      frameCurrent=0;
+      frameTarget=1;
       target=0;
       velocity=0;
       victim->oldcoords=victim->coords;
       coords=victim->coords;
-      victim->targetrotation=targetrotation;
+      victim->targetyaw=targetyaw;
       victim->victim=this;
     }
 }
@@ -153,7 +153,7 @@ void Person::CatchFire(){
                howmany=abs(Random()%(skeleton.num_joints));
                if(!skeleton.free)flatvelocity=velocity;
                if(skeleton.free)flatvelocity=skeleton.joints[howmany].velocity;
-               if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords;
+               if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords;
                if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords;
                Sprite::MakeSprite(flamesprite, flatfacing,flatvelocity, 1,1,1, 2, 1);
        }
@@ -177,10 +177,14 @@ int Person::getIdle(){
                        if(creature==wolftype)return wolfidle;
                }
                if(aitype==playercontrolled&&stunned<=0&&weaponactive!=-1){
-                       if(weapons.type[weaponids[weaponactive]]==knife)return knifefightidleanim;
-                       if(weapons.type[weaponids[weaponactive]]==sword&&victim->weaponactive!=-1)return swordfightidlebothanim;
-                       if(weapons.type[weaponids[weaponactive]]==sword)return swordfightidleanim;
-                       if(weapons.type[weaponids[weaponactive]]==staff)return swordfightidleanim;
+                       if(weapons[weaponids[weaponactive]].getType()==knife)
+                               return knifefightidleanim;
+                       if(weapons[weaponids[weaponactive]].getType()==sword&&victim->weaponactive!=-1)
+                               return swordfightidlebothanim;
+                       if(weapons[weaponids[weaponactive]].getType()==sword)
+                               return swordfightidleanim;
+                       if(weapons[weaponids[weaponactive]].getType()==staff)
+                               return swordfightidleanim;
                }
                if(aitype!=playercontrolled&&stunned<=0&&creature!=wolftype&&!pause)return fightsidestep;
        }
@@ -250,20 +254,20 @@ void Person::DoBlood(float howmuch,int which){
                                bloodvel=0;
                                if(!skeleton.free){
                                        bloodvel.z=10;
-                                       bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                                       bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                }
                                if(skeleton.free){
                                        bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0);
                                }
-                               if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                               if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                if(!skeleton.free)bloodvel+=DoRotation(velocity,((float)(Random()%100))/4,((float)(Random()%100))/4,0)*scale;
                                if(skeleton.free){
                                        Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1);
                                        Sprite::MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1);
                                }
                                if(!skeleton.free){
-                                       Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
-                                       Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .3, 1);
+                                       Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
+                                       Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .3, 1);
                                }
                        }
                        if(Random()%2==0)
@@ -272,17 +276,17 @@ void Person::DoBlood(float howmuch,int which){
                                                bloodvel=0;
                                                if(skeleton.free) {
                                                        bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0);
-                                                       bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                                                       bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                                } else {
                                                        bloodvel.z=10;
-                                                       bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                                                       bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                                        bloodvel+=DoRotation(velocity,((float)(Random()%100))/4,((float)(Random()%100))/4,0)*scale;
                                                }
                                                bloodvel*=.2;
                                                if(skeleton.free){
                                                        Sprite::MakeSprite(splintersprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1);
                                                } else {
-                                                       Sprite::MakeSprite(splintersprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
+                                                       Sprite::MakeSprite(splintersprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
                                                }
                                                Sprite::setLastSpriteSpecial(3);
                                        }
@@ -292,7 +296,6 @@ void Person::DoBlood(float howmuch,int which){
                        bleeding=howmuch+(float)abs(Random()%100)/200-.25;
                        bleedxint=0;
                        bleedyint=0;
-                       int texdetailint=realtexdetail;
                        if(creature==rabbittype)
                                while(bloodText[bleedxint*512*3+bleedyint*3+0]>which+4||bloodText[bleedxint*512*3+bleedyint*3+0]<which-4||bleedxint<10||bleedyint<10||bleedxint>500||bleedyint>500){
                                        bleedxint=abs(Random()%512);
@@ -362,20 +365,20 @@ void Person::DoBloodBig(float howmuch,int which){
                                        bloodvel=0;
                                        if(!skeleton.free){
                                                bloodvel.z=10;
-                                               bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                                               bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                        }
                                        if(skeleton.free){
                                                bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0);
                                        }
-                                       if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                                       if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                        if(!skeleton.free)bloodvel+=DoRotation(velocity,((float)(Random()%100))/4,((float)(Random()%100))/4,0)*scale;
                                        if(skeleton.free){
                                                Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1);
                                                Sprite::MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1);
                                        }
                                        if(!skeleton.free){
-                                               Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
-                                               Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .3, 1);
+                                               Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
+                                               Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .3, 1);
                                        }
                                }
                        }
@@ -397,9 +400,7 @@ void Person::DoBloodBig(float howmuch,int which){
                                offsetx=Random()%20;
                        }
                        if(which==220||which==215){
-                               //offsety=Random()%20;
                                offsetx=20;
-                               //offsetx=abs(Random()%80);
                        }
 
 
@@ -474,7 +475,7 @@ void Person::DoBloodBig(float howmuch,int which){
                                                                        }
                                                                }
                                                        }
-                                                       glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
+                                                       skeleton.drawmodel.textureptr.bind();
                                                        DoMipmaps();
 
                                                        bleedxint=0;
@@ -515,7 +516,7 @@ void Person::DoBloodBig(float howmuch,int which){
 }
 
 bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){
-       static int bleedxint,bleedyint,i,j;
+       static int i,j;
        static XYZ bloodvel;
        static XYZ startpoint,endpoint,colpoint,movepoint;
        static float rotationpoint;
@@ -529,7 +530,7 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){
 
        if(bloodtoggle&&decals&&tutoriallevel!=1){
                where-=coords;
-               if(!skeleton.free)where=DoRotation(where,0,-rotation,0);
+               if(!skeleton.free)where=DoRotation(where,0,-yaw,0);
                //where=scale;
                startpoint=where;
                startpoint.y+=100;
@@ -551,9 +552,9 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){
                        t = dotproduct(&temp,&N)/findLength(&N);
                        r = 1 - (s + t);*/
 
-                       bary.x=findDistancefast(&p0,&p1);
-                       bary.y=findDistancefast(&p0,&p2);
-                       bary.z=findDistancefast(&p0,&p3);
+                       bary.x=distsq(&p0,&p1);
+                       bary.y=distsq(&p0,&p2);
+                       bary.z=distsq(&p0,&p3);
 
                        total=bary.x+bary.y+bary.z;
                        bary.x/=total;
@@ -588,20 +589,20 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){
                                        bloodvel=0;
                                        if(!skeleton.free){
                                                bloodvel.z=10;
-                                               bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                                               bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                        }
                                        if(skeleton.free){
                                                bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0);
                                        }
-                                       if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                                       if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                        if(!skeleton.free)bloodvel+=DoRotation(velocity,((float)(Random()%100))/4,((float)(Random()%100))/4,0)*scale;
                                        if(skeleton.free){
                                                Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1);
                                                Sprite::MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1);
                                        }
                                        if(!skeleton.free){
-                                               Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
-                                               Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .3, 1);
+                                               Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
+                                               Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .3, 1);
                                        }
                                }
                        }
@@ -702,7 +703,7 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){
                                                                        }
                                                                }
                                                        }
-                                                       glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
+                                                       skeleton.drawmodel.textureptr.bind();
                                                        DoMipmaps();
 
                                                        bleedy=(1+coordsy)*512;
@@ -739,8 +740,8 @@ void Person::Reverse()
   if (!((victim->aitype == playercontrolled
         || hostiletime > 1
         || staggerdelay <= 0)
-       && victim->targetanimation != jumpupanim
-       && victim->targetanimation != jumpdownanim
+       && victim->animTarget != jumpupanim
+       && victim->animTarget != jumpdownanim
        && (tutoriallevel != 1 || cananger)
        && hostile))
     return;
@@ -750,41 +751,41 @@ void Person::Reverse()
       && (creature != wolftype || victim->creature == wolftype))
     return;
 
-  if(targetanimation==sweepanim){
-    targetanimation=sweepreversedanim;
-    currentanimation=sweepreversedanim;
-    victim->currentanimation=sweepreversalanim;
-    victim->targetanimation=sweepreversalanim;
+  if(animTarget==sweepanim){
+    animTarget=sweepreversedanim;
+    animCurrent=sweepreversedanim;
+    victim->animCurrent=sweepreversalanim;
+    victim->animTarget=sweepreversalanim;
   }
-  if(targetanimation==spinkickanim){
-    targetanimation=spinkickreversedanim;
-    currentanimation=spinkickreversedanim;
-    victim->currentanimation=spinkickreversalanim;
-    victim->targetanimation=spinkickreversalanim;
+  if(animTarget==spinkickanim){
+    animTarget=spinkickreversedanim;
+    animCurrent=spinkickreversedanim;
+    victim->animCurrent=spinkickreversalanim;
+    victim->animTarget=spinkickreversalanim;
   }
-  if(targetanimation==upunchanim||targetanimation==rabbittacklinganim){
-    if(targetanimation==rabbittacklinganim){
-      currentframe=6;
-      targetframe=7;
-      victim->currentframe=6;
-      victim->targetframe=7;
+  if(animTarget==upunchanim||animTarget==rabbittacklinganim){
+    if(animTarget==rabbittacklinganim){
+      frameCurrent=6;
+      frameTarget=7;
+      victim->frameCurrent=6;
+      victim->frameTarget=7;
     }
-    targetanimation=upunchreversedanim;
-    currentanimation=upunchreversedanim;
-    victim->currentanimation=upunchreversalanim;
-    victim->targetanimation=upunchreversalanim;
+    animTarget=upunchreversedanim;
+    animCurrent=upunchreversedanim;
+    victim->animCurrent=upunchreversalanim;
+    victim->animTarget=upunchreversalanim;
   }
-  if(targetanimation==staffhitanim&&findDistancefast(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){
+  if(animTarget==staffhitanim&&distsq(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){
     if(victim->weaponactive!=-1){
       victim->throwtogglekeydown=1;
-      weapons.owner[victim->weaponids[0]]=-1;
-      weapons.velocity[victim->weaponids[0]]=victim->velocity*.2;
-      if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1;
-      weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]];
-      weapons.missed[victim->weaponids[0]]=1;
-      weapons.freetime[victim->weaponids[0]]=0;
-      weapons.firstfree[victim->weaponids[0]]=1;
-      weapons.physics[victim->weaponids[0]]=1;
+      weapons[victim->weaponids[0]].owner=-1;
+      weapons[victim->weaponids[0]].velocity=victim->velocity*.2;
+      if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1;
+      weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity;
+      weapons[victim->weaponids[0]].missed=1;
+      weapons[victim->weaponids[0]].freetime=0;
+      weapons[victim->weaponids[0]].firstfree=1;
+      weapons[victim->weaponids[0]].physics=1;
       victim->num_weapons--;
       if(victim->num_weapons){
        victim->weaponids[0]=victim->weaponids[victim->num_weapons];
@@ -797,22 +798,22 @@ void Person::Reverse()
       }
     }
 
-    targetanimation=staffhitreversedanim;
-    currentanimation=staffhitreversedanim;
-    victim->currentanimation=staffhitreversalanim;
-    victim->targetanimation=staffhitreversalanim;
+    animTarget=staffhitreversedanim;
+    animCurrent=staffhitreversedanim;
+    victim->animCurrent=staffhitreversalanim;
+    victim->animTarget=staffhitreversalanim;
   }
-  if(targetanimation==staffspinhitanim&&findDistancefast(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%2==0)){
+  if(animTarget==staffspinhitanim&&distsq(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%2==0)){
     if(victim->weaponactive!=-1){
       victim->throwtogglekeydown=1;
-      weapons.owner[victim->weaponids[0]]=-1;
-      weapons.velocity[victim->weaponids[0]]=victim->velocity*.2;
-      if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1;
-      weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]];
-      weapons.missed[victim->weaponids[0]]=1;
-      weapons.freetime[victim->weaponids[0]]=0;
-      weapons.firstfree[victim->weaponids[0]]=1;
-      weapons.physics[victim->weaponids[0]]=1;
+      weapons[victim->weaponids[0]].owner=-1;
+      weapons[victim->weaponids[0]].velocity=victim->velocity*.2;
+      if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1;
+      weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity;
+      weapons[victim->weaponids[0]].missed=1;
+      weapons[victim->weaponids[0]].freetime=0;
+      weapons[victim->weaponids[0]].firstfree=1;
+      weapons[victim->weaponids[0]].physics=1;
       victim->num_weapons--;
       if(victim->num_weapons){
        victim->weaponids[0]=victim->weaponids[victim->num_weapons];
@@ -824,22 +825,22 @@ void Person::Reverse()
        player[j].wentforweapon=0;
       }
     }
-    targetanimation=staffspinhitreversedanim;
-    currentanimation=staffspinhitreversedanim;
-    victim->currentanimation=staffspinhitreversalanim;
-    victim->targetanimation=staffspinhitreversalanim;
+    animTarget=staffspinhitreversedanim;
+    animCurrent=staffspinhitreversedanim;
+    victim->animCurrent=staffspinhitreversalanim;
+    victim->animTarget=staffspinhitreversalanim;
   }
-  if(targetanimation==swordslashanim&&findDistancefast(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){
+  if(animTarget==swordslashanim&&distsq(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){
     if(victim->weaponactive!=-1){
       victim->throwtogglekeydown=1;
-      weapons.owner[victim->weaponids[0]]=-1;
-      weapons.velocity[victim->weaponids[0]]=victim->velocity*.2;
-      if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1;
-      weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]];
-      weapons.missed[victim->weaponids[0]]=1;
-      weapons.freetime[victim->weaponids[0]]=0;
-      weapons.firstfree[victim->weaponids[0]]=1;
-      weapons.physics[victim->weaponids[0]]=1;
+      weapons[victim->weaponids[0]].owner=-1;
+      weapons[victim->weaponids[0]].velocity=victim->velocity*.2;
+      if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1;
+      weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity;
+      weapons[victim->weaponids[0]].missed=1;
+      weapons[victim->weaponids[0]].freetime=0;
+      weapons[victim->weaponids[0]].firstfree=1;
+      weapons[victim->weaponids[0]].physics=1;
       victim->num_weapons--;
       if(victim->num_weapons){
        victim->weaponids[0]=victim->weaponids[victim->num_weapons];
@@ -851,22 +852,22 @@ void Person::Reverse()
        player[j].wentforweapon=0;
       }
     }
-    targetanimation=swordslashreversedanim;
-    currentanimation=swordslashreversedanim;
-    victim->currentanimation=swordslashreversalanim;
-    victim->targetanimation=swordslashreversalanim;
+    animTarget=swordslashreversedanim;
+    animCurrent=swordslashreversedanim;
+    victim->animCurrent=swordslashreversalanim;
+    victim->animTarget=swordslashreversalanim;
   }
-  if(targetanimation==knifeslashstartanim&&findDistancefast(&victim->coords,&coords)<2&&(victim->id==0||Random()%4==0)){
+  if(animTarget==knifeslashstartanim&&distsq(&victim->coords,&coords)<2&&(victim->id==0||Random()%4==0)){
     if(victim->weaponactive!=-1){
       victim->throwtogglekeydown=1;
-      weapons.owner[victim->weaponids[0]]=-1;
-      weapons.velocity[victim->weaponids[0]]=victim->velocity*.2;
-      if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1;
-      weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]];
-      weapons.missed[victim->weaponids[0]]=1;
-      weapons.freetime[victim->weaponids[0]]=0;
-      weapons.firstfree[victim->weaponids[0]]=1;
-      weapons.physics[victim->weaponids[0]]=1;
+      weapons[victim->weaponids[0]].owner=-1;
+      weapons[victim->weaponids[0]].velocity=victim->velocity*.2;
+      if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1;
+      weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity;
+      weapons[victim->weaponids[0]].missed=1;
+      weapons[victim->weaponids[0]].freetime=0;
+      weapons[victim->weaponids[0]].firstfree=1;
+      weapons[victim->weaponids[0]].physics=1;
       victim->num_weapons--;
       if(victim->num_weapons){
        victim->weaponids[0]=victim->weaponids[victim->num_weapons];
@@ -878,77 +879,79 @@ void Person::Reverse()
        player[j].wentforweapon=0;
       }
     }
-    targetanimation=knifeslashreversedanim;
-    currentanimation=knifeslashreversedanim;
-    victim->currentanimation=knifeslashreversalanim;
-    victim->targetanimation=knifeslashreversalanim;
+    animTarget=knifeslashreversedanim;
+    animCurrent=knifeslashreversedanim;
+    victim->animCurrent=knifeslashreversalanim;
+    victim->animTarget=knifeslashreversalanim;
   }
-  if(targetanimation!=knifeslashstartanim&&targetanimation!=staffhitanim&&targetanimation!=staffspinhitanim&&targetanimation!=winduppunchanim&&targetanimation!=wolfslapanim&&targetanimation!=swordslashanim&&targetanimation!=swordslashanim){
+  if(animTarget!=knifeslashstartanim&&animTarget!=staffhitanim&&animTarget!=staffspinhitanim&&animTarget!=winduppunchanim&&animTarget!=wolfslapanim&&animTarget!=swordslashanim&&animTarget!=swordslashanim){
     victim->targettilt2=targettilt2;
-    victim->currentframe=currentframe;
-    victim->targetframe=targetframe;
+    victim->frameCurrent=frameCurrent;
+    victim->frameTarget=frameTarget;
     victim->target=target;
     victim->velocity=0;
     victim->oldcoords=victim->coords;
     victim->coords=coords;
-    victim->targetrotation=targetrotation;
-    victim->rotation=targetrotation;
+    victim->targetyaw=targetyaw;
+    victim->yaw=targetyaw;
     victim->victim=this;
   }
-  if(targetanimation==winduppunchanim){
-    targetanimation=winduppunchblockedanim;
-    victim->targetanimation=blockhighleftanim;
-    victim->targetframe=1;
+  if(animTarget==winduppunchanim){
+    animTarget=winduppunchblockedanim;
+    victim->animTarget=blockhighleftanim;
+    victim->frameTarget=1;
     victim->target=.5;
     victim->victim=this;
-    victim->targetrotation=targetrotation+180;
+    victim->targetyaw=targetyaw+180;
   }
-  if(targetanimation==wolfslapanim){
-    targetanimation=winduppunchblockedanim;
-    victim->targetanimation=blockhighleftanim;
-    victim->targetframe=1;
+  if(animTarget==wolfslapanim){
+    animTarget=winduppunchblockedanim;
+    victim->animTarget=blockhighleftanim;
+    victim->frameTarget=1;
     victim->target=.5;
     victim->victim=this;
-    victim->targetrotation=targetrotation+180;
+    victim->targetyaw=targetyaw+180;
   }
-  if((targetanimation==swordslashanim||targetanimation==staffhitanim||targetanimation==staffspinhitanim)&&victim->weaponactive!=-1){
-    targetanimation=swordslashparriedanim;
+  if((animTarget==swordslashanim||animTarget==staffhitanim||animTarget==staffspinhitanim)&&victim->weaponactive!=-1){
+    animTarget=swordslashparriedanim;
     parriedrecently=.4;
     victim->parriedrecently=0;
-    victim->targetanimation=swordslashparryanim;
-    victim->targetframe=1;
+    victim->animTarget=swordslashparryanim;
+    victim->frameTarget=1;
     victim->target=.5;
     victim->victim=this;
-    victim->targetrotation=targetrotation+180;
+    victim->targetyaw=targetyaw+180;
 
-    if(abs(Random()%20)==0||weapons.type[victim->weaponids[victim->weaponactive]]==knife){
+    if(abs(Random()%20)==0||weapons[victim->weaponids[victim->weaponactive]].getType()==knife){
       if(victim->weaponactive!=-1){
-       if(weapons.type[victim->weaponids[0]]==staff||weapons.type[weaponids[0]]==staff){
-         if(weapons.type[victim->weaponids[0]]==staff)weapons.damage[victim->weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
-         if(weapons.type[weaponids[0]]==staff)weapons.damage[weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
-         emit_sound_at(swordstaffsound, victim->coords);
-       }
-       else{
-         emit_sound_at(metalhitsound, victim->coords);
-       }
+               if(weapons[victim->weaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff) {
+                 if(weapons[victim->weaponids[0]].getType()==staff)
+                       weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
+                 if(weapons[weaponids[0]].getType()==staff)
+                       weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
+                 emit_sound_at(swordstaffsound, victim->coords);
+               }
+               else{
+                 emit_sound_at(metalhitsound, victim->coords);
+               }
       }
       XYZ aim;
       victim->Puff(righthand);
       victim->target=0;
-      victim->targetframe=0;
-      victim->targetanimation=staggerbackhighanim;
-      victim->targetrotation=targetrotation+180;
+      victim->frameTarget=0;
+      victim->animTarget=staggerbackhighanim;
+      victim->targetyaw=targetyaw+180;
       victim->target=0;
-      weapons.owner[victim->weaponids[0]]=-1;
+      weapons[victim->weaponids[0]].owner=-1;
       aim=DoRotation(facing,0,90,0)*21;
       aim.y+=7;
-      weapons.velocity[victim->weaponids[0]]=aim*-.2;
-      weapons.tipvelocity[victim->weaponids[0]]=aim;
-      weapons.missed[victim->weaponids[0]]=1;
-      weapons.hitsomething[victim->weaponids[0]]=0;
-      weapons.freetime[victim->weaponids[0]]=0;
-      weapons.firstfree[victim->weaponids[0]]=1;
-      weapons.physics[victim->weaponids[0]]=1;
+      weapons[victim->weaponids[0]].velocity=aim*-.2;
+      weapons[victim->weaponids[0]].tipvelocity=aim;
+      weapons[victim->weaponids[0]].missed=1;
+      weapons[victim->weaponids[0]].hitsomething=0;
+      weapons[victim->weaponids[0]].freetime=0;
+      weapons[victim->weaponids[0]].firstfree=1;
+      weapons[victim->weaponids[0]].physics=1;
       victim->num_weapons--;
       if(victim->num_weapons){
        victim->weaponids[0]=victim->weaponids[num_weapons];
@@ -962,9 +965,9 @@ void Person::Reverse()
 
     if(abs(Random()%20)==0){
       if(weaponactive!=-1){
-       if(weapons.type[victim->weaponids[0]]==staff||weapons.type[weaponids[0]]==staff){
-         if(weapons.type[victim->weaponids[0]]==staff)weapons.damage[victim->weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
-         if(weapons.type[weaponids[0]]==staff)weapons.damage[weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
+       if(weapons[victim->weaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff){
+         if(weapons[victim->weaponids[0]].getType()==staff)weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
+         if(weapons[weaponids[0]].getType()==staff)weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
 
          emit_sound_at(swordstaffsound, coords);
        }
@@ -976,20 +979,20 @@ void Person::Reverse()
       XYZ aim;
       Puff(righthand);
       target=0;
-      targetframe=0;
-      targetanimation=staggerbackhighanim;
-      targetrotation=targetrotation+180;
+      frameTarget=0;
+      animTarget=staggerbackhighanim;
+      targetyaw=targetyaw+180;
       target=0;
-      weapons.owner[weaponids[0]]=-1;
+      weapons[weaponids[0]].owner=-1;
       aim=DoRotation(facing,0,90,0)*21;
       aim.y+=7;
-      weapons.velocity[weaponids[0]]=aim*-.2;
-      weapons.tipvelocity[weaponids[0]]=aim;
-      weapons.hitsomething[weaponids[0]]=0;
-      weapons.missed[weaponids[0]]=1;
-      weapons.freetime[weaponids[0]]=0;
-      weapons.firstfree[weaponids[0]]=1;
-      weapons.physics[weaponids[0]]=1;
+      weapons[weaponids[0]].velocity=aim*-.2;
+      weapons[weaponids[0]].tipvelocity=aim;
+      weapons[weaponids[0]].hitsomething=0;
+      weapons[weaponids[0]].missed=1;
+      weapons[weaponids[0]].freetime=0;
+      weapons[weaponids[0]].firstfree=1;
+      weapons[weaponids[0]].physics=1;
       num_weapons--;
       if(num_weapons){
        weaponids[0]=weaponids[num_weapons];
@@ -1004,43 +1007,43 @@ void Person::Reverse()
     }
   }
   if(hasvictim)
-    if(targetanimation==knifeslashstartanim||targetanimation==swordslashanim||targetanimation==staffhitanim||targetanimation==staffspinhitanim){
-      if((targetanimation!=staffhitanim&&targetanimation!=staffspinhitanim)||findDistancefast(&coords,&victim->coords)>.2){
-       victim->targetanimation=dodgebackanim;
-       victim->targetframe=0;
+    if(animTarget==knifeslashstartanim||animTarget==swordslashanim||animTarget==staffhitanim||animTarget==staffspinhitanim){
+      if((animTarget!=staffhitanim&&animTarget!=staffspinhitanim)||distsq(&coords,&victim->coords)>.2){
+       victim->animTarget=dodgebackanim;
+       victim->frameTarget=0;
        victim->target=0;
 
        XYZ rotatetarget;
        rotatetarget=coords-victim->coords;
        Normalise(&rotatetarget);
-       victim->targetrotation=-asin(0-rotatetarget.x);
-       victim->targetrotation*=360/6.28;
-       if(rotatetarget.z<0)victim->targetrotation=180-victim->targetrotation;
+       victim->targetyaw=-asin(0-rotatetarget.x);
+       victim->targetyaw*=360/6.28;
+       if(rotatetarget.z<0)victim->targetyaw=180-victim->targetyaw;
 
        victim->targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70;
 
        victim->lastattack3=victim->lastattack2;
        victim->lastattack2=victim->lastattack;
-       victim->lastattack=victim->targetanimation;
+       victim->lastattack=victim->animTarget;
       }
       else
        {
-         victim->targetanimation=sweepanim;
-         victim->targetframe=0;
+         victim->animTarget=sweepanim;
+         victim->frameTarget=0;
          victim->target=0;
 
          XYZ rotatetarget;
          rotatetarget=coords-victim->coords;
          Normalise(&rotatetarget);
-         victim->targetrotation=-asin(0-rotatetarget.x);
-         victim->targetrotation*=360/6.28;
-         if(rotatetarget.z<0)victim->targetrotation=180-victim->targetrotation;
+         victim->targetyaw=-asin(0-rotatetarget.x);
+         victim->targetyaw*=360/6.28;
+         if(rotatetarget.z<0)victim->targetyaw=180-victim->targetyaw;
 
          victim->targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70;
 
          victim->lastattack3=victim->lastattack2;
          victim->lastattack2=victim->lastattack;
-         victim->lastattack=victim->targetanimation;
+         victim->lastattack=victim->animTarget;
        }
     }
 
@@ -1052,7 +1055,7 @@ void Person::Reverse()
   if(aitype!=playercontrolled&&Random()%5==0&&escapednum<2&&difficulty==1)feint=1;
   if(aitype!=playercontrolled&&Random()%10==0&&escapednum<2&&difficulty==0)feint=1;
 
-  if(victim->id==0&&animation[victim->targetanimation].attack==reversal)numreversals++;
+  if(victim->id==0&&animation[victim->animTarget].attack==reversal)numreversals++;
 }
 
 void Person::DoDamage(float howmuch){
@@ -1085,7 +1088,7 @@ void Person::DoDamage(float howmuch){
                for(int i=0;i<skeleton.num_joints; i++){
                        if(!skeleton.free)flatvelocity2=velocity;
                        if(skeleton.free)flatvelocity2=skeleton.joints[i].velocity;
-                       if(!skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(skeleton.joints[i].position,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords;
+                       if(!skeleton.free)flatfacing2=DoRotation(DoRotation(DoRotation(skeleton.joints[i].position,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords;
                        if(skeleton.free)flatfacing2=skeleton.joints[i].position*scale+coords;
                        flatvelocity2.x+=(float)(abs(Random()%100)-50)/10;
                        flatvelocity2.y+=(float)(abs(Random()%100)-50)/10;
@@ -1153,73 +1156,73 @@ void Person::DoHead(){
        if(!freeze&&!winfreeze){
 
                //head facing
-               targetheadrotation=(float)((int)((0-rotation-targetheadrotation+180)*100)%36000)/100;
-               targetheadrotation2=(float)((int)(targetheadrotation2*100)%36000)/100;
+               targetheadyaw=(float)((int)((0-yaw-targetheadyaw+180)*100)%36000)/100;
+               targetheadpitch=(float)((int)(targetheadpitch*100)%36000)/100;
 
-               while(targetheadrotation>180)targetheadrotation-=360;
-               while(targetheadrotation<-180)targetheadrotation+=360;
+               while(targetheadyaw>180)targetheadyaw-=360;
+               while(targetheadyaw<-180)targetheadyaw+=360;
 
-               if(targetheadrotation>160)targetheadrotation2=targetheadrotation2*-1;
-               if(targetheadrotation<-160)targetheadrotation2=targetheadrotation2*-1;
-               if(targetheadrotation>160)targetheadrotation=targetheadrotation-180;
-               if(targetheadrotation<-160)targetheadrotation=targetheadrotation+180;
+               if(targetheadyaw>160)targetheadpitch=targetheadpitch*-1;
+               if(targetheadyaw<-160)targetheadpitch=targetheadpitch*-1;
+               if(targetheadyaw>160)targetheadyaw=targetheadyaw-180;
+               if(targetheadyaw<-160)targetheadyaw=targetheadyaw+180;
 
-               if(targetheadrotation2>120)targetheadrotation2=120;
-               if(targetheadrotation2<-120)targetheadrotation2=-120;
-               if(targetheadrotation>120)targetheadrotation=120;
-               if(targetheadrotation<-120)targetheadrotation=-120;
+               if(targetheadpitch>120)targetheadpitch=120;
+               if(targetheadpitch<-120)targetheadpitch=-120;
+               if(targetheadyaw>120)targetheadyaw=120;
+               if(targetheadyaw<-120)targetheadyaw=-120;
 
-               if(!isIdle())targetheadrotation2=0;
+               if(!isIdle())targetheadpitch=0;
                if(isIdle()){
-                       if(targetheadrotation>80)targetheadrotation=80;
-                       if(targetheadrotation<-80)targetheadrotation=-80;
-                       if(targetheadrotation2>50)targetheadrotation2=50;
-                       if(targetheadrotation2<-50)targetheadrotation2=-50;
+                       if(targetheadyaw>80)targetheadyaw=80;
+                       if(targetheadyaw<-80)targetheadyaw=-80;
+                       if(targetheadpitch>50)targetheadpitch=50;
+                       if(targetheadpitch<-50)targetheadpitch=-50;
                }
 
-               if(abs(headrotation-targetheadrotation)<multiplier*lookspeed)headrotation=targetheadrotation;
-               else if(headrotation>targetheadrotation){
-                       headrotation-=multiplier*lookspeed;
+               if(abs(headyaw-targetheadyaw)<multiplier*lookspeed)headyaw=targetheadyaw;
+               else if(headyaw>targetheadyaw){
+                       headyaw-=multiplier*lookspeed;
                }
-               else if(headrotation<targetheadrotation){
-                       headrotation+=multiplier*lookspeed;
+               else if(headyaw<targetheadyaw){
+                       headyaw+=multiplier*lookspeed;
                }
 
-               if(abs(headrotation2-targetheadrotation2)<multiplier*lookspeed/2)headrotation2=targetheadrotation2;
-               else if(headrotation2>targetheadrotation2){
-                       headrotation2-=multiplier*lookspeed/2;
+               if(abs(headpitch-targetheadpitch)<multiplier*lookspeed/2)headpitch=targetheadpitch;
+               else if(headpitch>targetheadpitch){
+                       headpitch-=multiplier*lookspeed/2;
                }
-               else if(headrotation2<targetheadrotation2){
-                       headrotation2+=multiplier*lookspeed/2;
+               else if(headpitch<targetheadpitch){
+                       headpitch+=multiplier*lookspeed/2;
                }
 
                rotatearound=skeleton.joints[skeleton.jointlabels[neck]].position;
-               skeleton.joints[skeleton.jointlabels[head]].position=rotatearound+DoRotation(skeleton.joints[skeleton.jointlabels[head]].position-rotatearound,headrotation2,0,0);
+               skeleton.joints[skeleton.jointlabels[head]].position=rotatearound+DoRotation(skeleton.joints[skeleton.jointlabels[head]].position-rotatearound,headpitch,0,0);
 
                facing=0;
                facing.z=-1;
-               if(targetanimation!=bounceidleanim&&targetanimation!=fightidleanim&&targetanimation!=wolfidle&&targetanimation!=knifefightidleanim&&targetanimation!=drawrightanim&&targetanimation!=drawleftanim&&targetanimation!=walkanim){
-                       facing=DoRotation(facing,headrotation2*.4,0,0);
-                       facing=DoRotation(facing,0,headrotation*.4,0);
+               if(animTarget!=bounceidleanim&&animTarget!=fightidleanim&&animTarget!=wolfidle&&animTarget!=knifefightidleanim&&animTarget!=drawrightanim&&animTarget!=drawleftanim&&animTarget!=walkanim){
+                       facing=DoRotation(facing,headpitch*.4,0,0);
+                       facing=DoRotation(facing,0,headyaw*.4,0);
                }
 
-               if(targetanimation==bounceidleanim||targetanimation==fightidleanim||targetanimation==wolfidle||targetanimation==knifefightidleanim||targetanimation==drawrightanim||targetanimation==drawleftanim){
-                       facing=DoRotation(facing,headrotation2*.8,0,0);
-                       facing=DoRotation(facing,0,headrotation*.8,0);
+               if(animTarget==bounceidleanim||animTarget==fightidleanim||animTarget==wolfidle||animTarget==knifefightidleanim||animTarget==drawrightanim||animTarget==drawleftanim){
+                       facing=DoRotation(facing,headpitch*.8,0,0);
+                       facing=DoRotation(facing,0,headyaw*.8,0);
                }
 
-               if(targetanimation==walkanim){
-                       facing=DoRotation(facing,headrotation2*.6,0,0);
-                       facing=DoRotation(facing,0,headrotation*.6,0);
+               if(animTarget==walkanim){
+                       facing=DoRotation(facing,headpitch*.6,0,0);
+                       facing=DoRotation(facing,0,headyaw*.6,0);
                }
 
                skeleton.specialforward[0]=facing;
-               //skeleton.specialforward[0]=DoRotation(facing,0,rotation,0);
+               //skeleton.specialforward[0]=DoRotation(facing,0,yaw,0);
                static int i;
                for(i=0;i<skeleton.num_muscles;i++){
                        if(skeleton.muscles[i].visible&&(skeleton.muscles[i].parent1->label==head||skeleton.muscles[i].parent2->label==head))
                        {
-                               skeleton.FindRotationMuscle(i,targetanimation);
+                               skeleton.FindRotationMuscle(i,animTarget);
                        }
                }
        }
@@ -1237,7 +1240,7 @@ void Person::RagDoll(bool checkcollision){
 
                facing=0;
                facing.z=1;
-               facing=DoRotation(facing,0,rotation,0);
+               facing=DoRotation(facing,0,yaw,0);
 
                skeleton.freetime=0;
 
@@ -1252,7 +1255,7 @@ void Person::RagDoll(bool checkcollision){
                if(!isnormal(velocity.x))velocity.x=0;
                if(!isnormal(velocity.y))velocity.y=0;
                if(!isnormal(velocity.z))velocity.z=0;
-               if(!isnormal(rotation))rotation=0;
+               if(!isnormal(yaw))yaw=0;
                if(!isnormal(coords.x))coords=0;
                if(!isnormal(tilt))tilt=0;
                if(!isnormal(tilt2))tilt2=0;
@@ -1260,8 +1263,8 @@ void Person::RagDoll(bool checkcollision){
                for(i=0;i<skeleton.num_joints;i++){
                        skeleton.joints[i].delay=0;
                        skeleton.joints[i].locked=0;
-                       skeleton.joints[i].position=DoRotation(DoRotation(DoRotation(skeleton.joints[i].position,0,0,tilt),tilt2,0,0),0,rotation,0);
-                       if(!isnormal(skeleton.joints[i].position.x))skeleton.joints[i].position=DoRotation(skeleton.joints[i].position,0,rotation,0);
+                       skeleton.joints[i].position=DoRotation(DoRotation(DoRotation(skeleton.joints[i].position,0,0,tilt),tilt2,0,0),0,yaw,0);
+                       if(!isnormal(skeleton.joints[i].position.x))skeleton.joints[i].position=DoRotation(skeleton.joints[i].position,0,yaw,0);
                        if(!isnormal(skeleton.joints[i].position.x))skeleton.joints[i].position=skeleton.joints[i].position;
                        if(!isnormal(skeleton.joints[i].position.x))skeleton.joints[i].position=coords;
                        skeleton.joints[i].position.y+=.1;
@@ -1274,7 +1277,7 @@ void Person::RagDoll(bool checkcollision){
                        skeleton.joints[i].velchange=0;
                }
                skeleton.DoConstraints(&coords,&scale);
-               if(animation[currentanimation].height==lowheight||animation[targetanimation].height==lowheight)
+               if(animation[animCurrent].height==lowheight||animation[animTarget].height==lowheight)
                {
                        skeleton.DoConstraints(&coords,&scale);
                        skeleton.DoConstraints(&coords,&scale);
@@ -1282,16 +1285,16 @@ void Person::RagDoll(bool checkcollision){
                        skeleton.DoConstraints(&coords,&scale);
                }
 
-               speed=animation[targetanimation].speed[targetframe]*2;
-               if(animation[currentanimation].speed[currentframe]>animation[targetanimation].speed[targetframe]){
-                       speed=animation[currentanimation].speed[currentframe]*2;
+               speed=animation[animTarget].speed[frameTarget]*2;
+               if(animation[animCurrent].speed[frameCurrent]>animation[animTarget].speed[frameTarget]){
+                       speed=animation[animCurrent].speed[frameCurrent]*2;
                }
                if(transspeed)speed=transspeed*2;
 
                speed*=speedmult;
 
                for(i=0;i<skeleton.num_joints;i++){
-                       if((animation[currentanimation].attack!=reversed||currentanimation==swordslashreversedanim)&&currentanimation!=rabbitkickanim&&!isLanding()&&!wasLanding()&&animation[currentanimation].height==animation[targetanimation].height)skeleton.joints[i].velocity=velocity/scale+facing*5+DoRotation(DoRotation(DoRotation((animation[targetanimation].position[i][targetframe]-animation[currentanimation].position[i][currentframe])*speed,0,0,tilt),tilt2,0,0),0,rotation,0);
+                       if((animation[animCurrent].attack!=reversed||animCurrent==swordslashreversedanim)&&animCurrent!=rabbitkickanim&&!isLanding()&&!wasLanding()&&animation[animCurrent].height==animation[animTarget].height)skeleton.joints[i].velocity=velocity/scale+facing*5+DoRotation(DoRotation(DoRotation((animation[animTarget].position[i][frameTarget]-animation[animCurrent].position[i][frameCurrent])*speed,0,0,tilt),tilt2,0,0),0,yaw,0);
                        else skeleton.joints[i].velocity=velocity/scale+facing*5;
                        change.x=(float)(Random()%100)/100;
                        change.y=(float)(Random()%100)/100;
@@ -1323,21 +1326,21 @@ void Person::RagDoll(bool checkcollision){
                                skeleton.joints[j].position-=average;
                        }
 
-                       whichpatchx=coords.x/(terrain.size/subdivision*terrain.scale*terraindetail);
-                       whichpatchz=coords.z/(terrain.size/subdivision*terrain.scale*terraindetail);
+                       whichpatchx=coords.x/(terrain.size/subdivision*terrain.scale);
+                       whichpatchz=coords.z/(terrain.size/subdivision*terrain.scale);
                        if(terrain.patchobjectnum[whichpatchx][whichpatchz])
                                for(l=0;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
                                        i=terrain.patchobjects[whichpatchx][whichpatchz][l];
                                        lowpoint=coords;
                                        lowpoint.y+=1;
-                                       if(SphereCheck(&lowpoint, 3, &colpoint, &objects.position[i], &objects.rotation[i], &objects.model[i])!=-1){
+                                       if(SphereCheck(&lowpoint, 3, &colpoint, &objects.position[i], &objects.yaw[i], &objects.model[i])!=-1){
                                                coords.x=lowpoint.x;
                                                coords.z=lowpoint.z;
                                        }
                                }
                }
 
-               rotation=0;
+               yaw=0;
                updatedelay=0;
 
                velocity=0;
@@ -1347,16 +1350,16 @@ void Person::RagDoll(bool checkcollision){
                velocity/=skeleton.num_joints;
 
                if(Random()%2==0){
-                       if(weaponactive!=-1&&targetanimation!=rabbitkickanim&&num_weapons>0){
-                               weapons.owner[weaponids[0]]=-1;
-                               weapons.hitsomething[weaponids[0]]=0;
-                               weapons.velocity[weaponids[0]]=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale*-.3;
-                               weapons.velocity[weaponids[0]].x+=.01;
-                               weapons.tipvelocity[weaponids[0]]=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale;
-                               weapons.missed[weaponids[0]]=1;
-                               weapons.freetime[weaponids[0]]=0;
-                               weapons.firstfree[weaponids[0]]=1;
-                               weapons.physics[weaponids[0]]=1;
+                       if(weaponactive!=-1&&animTarget!=rabbitkickanim&&num_weapons>0){
+                               weapons[weaponids[0]].owner=-1;
+                               weapons[weaponids[0]].hitsomething=0;
+                               weapons[weaponids[0]].velocity=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale*-.3;
+                               weapons[weaponids[0]].velocity.x+=.01;
+                               weapons[weaponids[0]].tipvelocity=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale;
+                               weapons[weaponids[0]].missed=1;
+                               weapons[weaponids[0]].freetime=0;
+                               weapons[weaponids[0]].firstfree=1;
+                               weapons[weaponids[0]].physics=1;
                                num_weapons--;
                                if(num_weapons){
                                        weaponids[0]=weaponids[num_weapons];
@@ -1369,10 +1372,10 @@ void Person::RagDoll(bool checkcollision){
                        }
                }
 
-               targetanimation=bounceidleanim;
-               currentanimation=bounceidleanim;
-               targetframe=0;
-               currentframe=0;
+               animTarget=bounceidleanim;
+               animCurrent=bounceidleanim;
+               frameTarget=0;
+               frameCurrent=0;
        }
 }
 
@@ -1385,48 +1388,48 @@ void Person::FootLand(int which, float opacity){
                if(opacity>1)
                {
                        footvel=0;
-                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
-                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
+                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                        //footpoint.y=coords.y;
-                       if(findDistancefast(&footpoint,&viewer))Sprite::MakeSprite(cloudsprite, footpoint,footvel, 1,1,1, .5, .2*opacity);
+                       if(distsq(&footpoint,&viewer))Sprite::MakeSprite(cloudsprite, footpoint,footvel, 1,1,1, .5, .2*opacity);
                }
                else if(environment==snowyenvironment&&onterrain&&terrain.getOpacity(coords.x,coords.z)<.2){
                        footvel=velocity/5;
                        if(footvel.y<.8)footvel.y=.8;
-                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
-                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
+                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                        footpoint.y=terrain.getHeight(footpoint.x,footpoint.z);
                        terrainlight=terrain.getLighting(footpoint.x,footpoint.z);
-                       if(findDistancefast(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, terrainlight.x,terrainlight.y,terrainlight.z, .5, .7*opacity);
-                       if(opacity>=1||detail==2)if(detail==2)if(findDistancefast(&footpoint,&viewer)<viewdistance*viewdistance/4)terrain.MakeDecal(footprintdecal,footpoint,.2,1*opacity,rotation);
+                       if(distsq(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, terrainlight.x,terrainlight.y,terrainlight.z, .5, .7*opacity);
+                       if(opacity>=1||detail==2)if(detail==2)if(distsq(&footpoint,&viewer)<viewdistance*viewdistance/4)terrain.MakeDecal(footprintdecal,footpoint,.2,1*opacity,yaw);
                }
                else if(environment==grassyenvironment&&onterrain&&terrain.getOpacity(coords.x,coords.z)<.2){
                        footvel=velocity/5;
                        if(footvel.y<.8)footvel.y=.8;
-                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
-                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
+                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                        footpoint.y=terrain.getHeight(footpoint.x,footpoint.z);
                        terrainlight=terrain.getLighting(footpoint.x,footpoint.z);
-                       if(findDistancefast(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, terrainlight.x*90/255,terrainlight.y*70/255,terrainlight.z*8/255, .5, .5*opacity);
+                       if(distsq(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, terrainlight.x*90/255,terrainlight.y*70/255,terrainlight.z*8/255, .5, .5*opacity);
                }
                else if(environment==desertenvironment&&onterrain&&terrain.getOpacity(coords.x,coords.z)<.2){
                        footvel=velocity/5;
                        if(footvel.y<.8)footvel.y=.8;
-                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
-                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
+                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                        footpoint.y=terrain.getHeight(footpoint.x,footpoint.z);
                        terrainlight=terrain.getLighting(footpoint.x,footpoint.z);
-                       if(findDistancefast(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, terrainlight.x*190/255,terrainlight.y*170/255,terrainlight.z*108/255, .5, .7*opacity);
-                       if(opacity>=1||detail==2)if(detail==2)if(findDistancefast(&footpoint,&viewer)<viewdistance*viewdistance/4)terrain.MakeDecal(footprintdecal,footpoint,.2,.25*opacity,rotation);
+                       if(distsq(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, terrainlight.x*190/255,terrainlight.y*170/255,terrainlight.z*108/255, .5, .7*opacity);
+                       if(opacity>=1||detail==2)if(detail==2)if(distsq(&footpoint,&viewer)<viewdistance*viewdistance/4)terrain.MakeDecal(footprintdecal,footpoint,.2,.25*opacity,yaw);
                }
-               else if(isLanding()||targetanimation==jumpupanim||isLandhard())
+               else if(isLanding()||animTarget==jumpupanim||isLandhard())
                {
                        footvel=velocity/5;
                        if(footvel.y<.8)footvel.y=.8;
-                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
-                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                       if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
+                       if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                        //footpoint.y=coords.y;
-                       if(findDistancefast(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, 1,1,1, .5, .2*opacity);
+                       if(distsq(&footpoint,&viewer)<viewdistance*viewdistance/4)Sprite::MakeSprite(cloudsprite, footpoint,footvel*.6, 1,1,1, .5, .2*opacity);
                }
 }
 
@@ -1434,22 +1437,31 @@ void Person::Puff(int whichlabel){
        static XYZ footvel,footpoint;
 
        footvel=0;
-       footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[whichlabel]].position,0,rotation,0)*scale+coords;
+       footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[whichlabel]].position,0,yaw,0)*scale+coords;
        Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,1,1, .9, .3);
 }
 
+Joint& Person::getJointFor(int bodypart) {
+    return skeleton.joints[skeleton.jointlabels[bodypart]]; 
+}
+
+void Person::setAnimation(int animation) {
+    animTarget=animation;
+    frameTarget=0;
+    target=0;
+}
 
 void   Person::DoAnimations(){
        if(!skeleton.free){
                int i = 0;
                static float oldtarget;
 
-               if(isIdle()&&currentanimation!=getIdle())normalsupdatedelay=0;
+               if(isIdle()&&animCurrent!=getIdle())normalsupdatedelay=0;
 
-               if(targetanimation==tempanim||currentanimation==tempanim){
+               if(animTarget==tempanim||animCurrent==tempanim){
                        animation[tempanim]=tempanimation;
                }
-               if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
+               if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){
                        float gLoc[3];
                        float vel[3];
                        gLoc[0]=coords.x;
@@ -1466,56 +1478,56 @@ void    Person::DoAnimations(){
                        if(((velocity.y<-15)||(crouchkeydown&&velocity.y<-8))&&abs(velocity.y)*4>fast_sqrt(velocity.x*velocity.x*velocity.z*velocity.z))landhard=1;
                        if(!crouchkeydown&&velocity.y>=-15)landhard=0;
                }
-               if((currentanimation==jumpupanim||targetanimation==jumpdownanim)/*&&velocity.y<40*/&&!isFlip()&&(!isLanding()&&!isLandhard())&&((crouchkeydown&&!crouchtogglekeydown))){
+               if((animCurrent==jumpupanim||animTarget==jumpdownanim)/*&&velocity.y<40*/&&!isFlip()&&(!isLanding()&&!isLandhard())&&((crouchkeydown&&!crouchtogglekeydown))){
                        XYZ targfacing;
                        targfacing=0;
                        targfacing.z=1;
 
-                       targfacing=DoRotation(targfacing,0,targetrotation,0);
+                       targfacing=DoRotation(targfacing,0,targetyaw,0);
 
-                       if(normaldotproduct(targfacing,velocity)>=-.3)targetanimation=flipanim;
-                       else targetanimation=backflipanim;
+                       if(normaldotproduct(targfacing,velocity)>=-.3)animTarget=flipanim;
+                       else animTarget=backflipanim;
                        crouchtogglekeydown=1;
-                       targetframe=0;
+                       frameTarget=0;
                        target=0;
 
                        if(id==0)numflipped++;
                }
 
-               if(animation[targetanimation].attack!=reversed)feint=0;
+               if(animation[animTarget].attack!=reversed)feint=0;
                if(!crouchkeydown||(isLanding()||isLandhard())||(wasLanding()||wasLandhard())){
                        crouchtogglekeydown=0;
                        if(aitype==playercontrolled)feint=0;
                }
                else
                {
-                       if(!crouchtogglekeydown&&animation[targetanimation].attack==reversed&&aitype==playercontrolled&&(escapednum<2||reversaltrain))feint=1;
+                       if(!crouchtogglekeydown&&animation[animTarget].attack==reversed&&aitype==playercontrolled&&(escapednum<2||reversaltrain))feint=1;
                        if(!isFlip())crouchtogglekeydown=1;
                }
 
 
-               if(animation[targetanimation].attack||currentanimation==getupfrombackanim||currentanimation==getupfromfrontanim){
+               if(animation[animTarget].attack||animCurrent==getupfrombackanim||animCurrent==getupfromfrontanim){
                        if(detail)normalsupdatedelay=0;
                }
 
                if(target>=1){
-                       if(targetanimation==rollanim&&targetframe==3&&onfire){
+                       if(animTarget==rollanim&&frameTarget==3&&onfire){
                                onfire=0;
                                emit_sound_at(fireendsound, coords);
-                               OPENAL_SetPaused(channels[stream_firesound], true);
+                               pause_sound(stream_firesound);
                                deathbleeding=0;
                        }
 
-                       if(targetanimation==rabbittacklinganim&&targetframe==1){
-                               //if(victim->aitype==attacktypecutoff&&Random()%2==0&&victim->stunned<=0&&animation[victim->targetanimation].attack==neutral&&victim->id!=0)Reverse();
+                       if(animTarget==rabbittacklinganim&&frameTarget==1){
+                               //if(victim->aitype==attacktypecutoff&&Random()%2==0&&victim->stunned<=0&&animation[victim->animTarget].attack==neutral&&victim->id!=0)Reverse();
                                if(victim->aitype==attacktypecutoff&&victim->stunned<=0&&victim->surprised<=0&&victim->id!=0)Reverse();
-                               if(targetanimation==rabbittacklinganim&&targetframe==1&&!victim->isCrouch()&&victim->targetanimation!=backhandspringanim){
-                                       if(normaldotproduct(victim->facing,facing)>0)victim->targetanimation=rabbittackledbackanim;
-                                       else victim->targetanimation=rabbittackledfrontanim;
-                                       victim->targetframe=2;
+                               if(animTarget==rabbittacklinganim&&frameTarget==1&&!victim->isCrouch()&&victim->animTarget!=backhandspringanim){
+                                       if(normaldotproduct(victim->facing,facing)>0)victim->animTarget=rabbittackledbackanim;
+                                       else victim->animTarget=rabbittackledfrontanim;
+                                       victim->frameTarget=2;
                                        victim->target=0;
-                                       victim->rotation=rotation;
-                                       victim->targetrotation=rotation;
+                                       victim->yaw=yaw;
+                                       victim->targetyaw=yaw;
                                        if(victim->aitype==gethelptype)victim->DoDamage(victim->damagetolerance-victim->damage);
                                        //victim->DoDamage(30);
                                        if(creature==wolftype){
@@ -1529,8 +1541,8 @@ void      Person::DoAnimations(){
                                }
                        }
 
-                       if(!drawtogglekeydown&&drawkeydown&&(weaponactive==-1||num_weapons==1)&&(animation[targetanimation].label[targetframe]||(targetanimation!=currentanimation&&currentanimation==rollanim))&&num_weapons>0&&creature!=wolftype){
-                               if(weapons.type[weaponids[0]]==knife){
+                       if(!drawtogglekeydown&&drawkeydown&&(weaponactive==-1||num_weapons==1)&&(animation[animTarget].label[frameTarget]||(animTarget!=animCurrent&&animCurrent==rollanim))&&num_weapons>0&&creature!=wolftype){
+                               if(weapons[weaponids[0]].getType()==knife){
                                        if(weaponactive==-1)weaponactive=0;
                                        else if(weaponactive==0)weaponactive=-1;
 
@@ -1545,53 +1557,53 @@ void    Person::DoAnimations(){
                        }
                        //Footstep sounds
                        if(tutoriallevel!=1||id==0)
-                               if((animation[targetanimation].label[targetframe]&&(animation[targetanimation].label[targetframe]<5||animation[targetanimation].label[targetframe]==8))/*||(targetanimation==rollanim&&targetframe==animation[rollanim].numframes-1)*/){
+                               if((animation[animTarget].label[frameTarget]&&(animation[animTarget].label[frameTarget]<5||animation[animTarget].label[frameTarget]==8))/*||(animTarget==rollanim&&frameTarget==animation[rollanim].numframes-1)*/){
                                        int whichsound;
                                        if(onterrain){
                                                if(terrain.getOpacity(coords.x,coords.z)<.2){
-                                                       if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound;
+                                                       if(animation[animTarget].label[frameTarget]==1)whichsound=footstepsound;
                                                        else whichsound=footstepsound2;
-                                                       if(animation[targetanimation].label[targetframe]==1)FootLand(0,1);
-                                                       if(animation[targetanimation].label[targetframe]==2)FootLand(1,1);
-                                                       if(animation[targetanimation].label[targetframe]==3&&isRun()){
+                                                       if(animation[animTarget].label[frameTarget]==1)FootLand(0,1);
+                                                       if(animation[animTarget].label[frameTarget]==2)FootLand(1,1);
+                                                       if(animation[animTarget].label[frameTarget]==3&&isRun()){
                                                                FootLand(1,1);
                                                                FootLand(0,1);
                                                        }
 
                                                }
                                                if(terrain.getOpacity(coords.x,coords.z)>=.2){
-                                                       if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound3;
+                                                       if(animation[animTarget].label[frameTarget]==1)whichsound=footstepsound3;
                                                        else whichsound=footstepsound4;
                                                }
                                        }
                                        if(!onterrain){
-                                               if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound3;
+                                               if(animation[animTarget].label[frameTarget]==1)whichsound=footstepsound3;
                                                else whichsound=footstepsound4;
                                        }
-                                       if(animation[targetanimation].label[targetframe]==4&&(weaponactive==-1||(targetanimation!=knifeslashstartanim&&targetanimation!=knifethrowanim&&targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim&&targetanimation!=knifefollowanim))){
-                                               if(animation[targetanimation].attack!=neutral){
+                                       if(animation[animTarget].label[frameTarget]==4&&(weaponactive==-1||(animTarget!=knifeslashstartanim&&animTarget!=knifethrowanim&&animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim&&animTarget!=knifefollowanim))){
+                                               if(animation[animTarget].attack!=neutral){
                                                        i=abs(Random()%3);
                                                        if(i==0)whichsound=lowwhooshsound;
                                                        if(i==1)whichsound=midwhooshsound;
                                                        if(i==2)whichsound=highwhooshsound;
                                                }
-                                               if(animation[targetanimation].attack==neutral)whichsound=movewhooshsound;
+                                               if(animation[animTarget].attack==neutral)whichsound=movewhooshsound;
                                        }
-                                       else if(animation[targetanimation].label[targetframe]==4)whichsound=knifeswishsound;
-                                       if(animation[targetanimation].label[targetframe]==8&&tutoriallevel!=1)whichsound=landsound2;
+                                       else if(animation[animTarget].label[frameTarget]==4)whichsound=knifeswishsound;
+                                       if(animation[animTarget].label[frameTarget]==8&&tutoriallevel!=1)whichsound=landsound2;
 
                                        emit_sound_at(whichsound, coords, 256.);
 
                                        if(id==0)
                                                if(whichsound==footstepsound||whichsound==footstepsound2||whichsound==footstepsound3||whichsound==footstepsound4){
                                                        envsound[numenvsounds]=coords;
-                                                       if(targetanimation==wolfrunninganim||targetanimation==rabbitrunninganim)envsoundvol[numenvsounds]=15;
+                                                       if(animTarget==wolfrunninganim||animTarget==rabbitrunninganim)envsoundvol[numenvsounds]=15;
                                                        else envsoundvol[numenvsounds]=6;
                                                        envsoundlife[numenvsounds]=.4;
                                                        numenvsounds++;
                                                }
 
-                                               if(animation[targetanimation].label[targetframe]==3){
+                                               if(animation[animTarget].label[frameTarget]==3){
                                                        whichsound--;
                                                        emit_sound_at(whichsound, coords, 128.);
                                                }
@@ -1600,11 +1612,11 @@ void    Person::DoAnimations(){
                                //Combat sounds
                                if(tutoriallevel!=1||id==0)
                                        if(speechdelay<=0)
-                                               if(targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim&&targetanimation!=staffgroundsmashanim)
-                                                       if((animation[targetanimation].label[targetframe]&&(animation[targetanimation].label[targetframe]<5||animation[targetanimation].label[targetframe]==8))/*||(targetanimation==rollanim&&targetframe==animation[rollanim].numframes-1)*/){
+                                               if(animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim&&animTarget!=staffgroundsmashanim)
+                                                       if((animation[animTarget].label[frameTarget]&&(animation[animTarget].label[frameTarget]<5||animation[animTarget].label[frameTarget]==8))/*||(animTarget==rollanim&&frameTarget==animation[rollanim].numframes-1)*/){
                                                                int whichsound=-1;
-                                                               if(animation[targetanimation].label[targetframe]==4&&aitype!=playercontrolled){
-                                                                       if(animation[targetanimation].attack!=neutral){
+                                                               if(animation[animTarget].label[frameTarget]==4&&aitype!=playercontrolled){
+                                                                       if(animation[animTarget].attack!=neutral){
                                                                                i=abs(Random()%4);
                                                                                if(creature==rabbittype){
                                                                                        if(i==0)whichsound=rabbitattacksound;
@@ -1620,10 +1632,10 @@ void    Person::DoAnimations(){
                                                                                }
                                                                                speechdelay=.3;
                                                                        }
-                                                                       //if(animation[targetanimation].attack==neutral)whichsound=movewhooshsound;
+                                                                       //if(animation[animTarget].attack==neutral)whichsound=movewhooshsound;
                                                                }
-                                                               //else if(animation[targetanimation].label[targetframe]==4)whichsound=knifeswishsound;
-                                                               //if(animation[targetanimation].label[targetframe]==8)whichsound=landsound2;
+                                                               //else if(animation[animTarget].label[frameTarget]==4)whichsound=knifeswishsound;
+                                                               //if(animation[animTarget].label[frameTarget]==8)whichsound=landsound2;
 
                                                                if(whichsound!=-1){
                                                                        emit_sound_at(whichsound, coords);
@@ -1632,28 +1644,28 @@ void    Person::DoAnimations(){
 
 
 
-                                                       if((!wasLanding()&&!wasLandhard())&&currentanimation!=getIdle()&&(isLanding()||isLandhard())){
+                                                       if((!wasLanding()&&!wasLandhard())&&animCurrent!=getIdle()&&(isLanding()||isLandhard())){
                                                                FootLand(0,1);
                                                                FootLand(1,1);
                                                        }
 
                                                        transspeed=0;
                                                        currentoffset=targetoffset;
-                                                       targetframe=currentframe;
-                                                       currentanimation=targetanimation;
-                                                       targetframe++;
-
-                                                       if(targetanimation==removeknifeanim&&animation[targetanimation].label[currentframe]==5){
-                                                               for(i=0;i<weapons.numweapons;i++){
-                                                                       if(/*weapons.velocity[i].x==0&&weapons.velocity[i].y==0&&weapons.velocity[i].z==0&&*/weapons.owner[i]==-1)
-                                                                               if(findDistancefastflat(&coords,&weapons.position[i])<4&&weaponactive==-1){
-                                                                                       if(findDistancefast(&coords,&weapons.position[i])>=1){
-                                                                                               if(weapons.type[i]!=staff){
+                                                       frameTarget=frameCurrent;
+                                                       animCurrent=animTarget;
+                                                       frameTarget++;
+
+                                                       if(animTarget==removeknifeanim&&animation[animTarget].label[frameCurrent]==5){
+                                                               for(i=0;i<weapons.size();i++){
+                                                                       if(weapons[i].owner==-1)
+                                                                               if(distsqflat(&coords,&weapons[i].position)<4&&weaponactive==-1){
+                                                                                       if(distsq(&coords,&weapons[i].position)>=1){
+                                                                                               if(weapons[i].getType()!=staff){
                                                                                                        emit_sound_at(knifedrawsound, coords, 128.);
                                                                                                }
 
                                                                                                weaponactive=0;
-                                                                                               weapons.owner[i]=id;
+                                                                                               weapons[i].owner=id;
                                                                                                if(num_weapons>0){
                                                                                                        weaponids[num_weapons]=weaponids[0];
                                                                                                }
@@ -1664,36 +1676,34 @@ void    Person::DoAnimations(){
                                                                }
                                                        }
 
-                                                       static bool willwork;
-                                                       if(targetanimation==crouchremoveknifeanim&&animation[targetanimation].label[currentframe]==5){
-                                                               for(i=0;i<weapons.numweapons;i++){
-                                                                       bool willwork=1;
-                                                                       if(weapons.owner[i]!=-1)
-                                                                               if(player[weapons.owner[i]].weaponstuck!=-1)
-                                                                                       if(player[weapons.owner[i]].weaponids[player[weapons.owner[i]].weaponstuck]==i)
-                                                                                               if(player[weapons.owner[i]].num_weapons>1)willwork=0;
-                                                                       if((/*weapons.velocity[i].x==0&&weapons.velocity[i].y==0&&weapons.velocity[i].z==0&&*/weapons.owner[i]==-1)||(hasvictim&&weapons.owner[i]==victim->id&&victim->skeleton.free))
-                                                                               if(willwork&&findDistancefastflat(&coords,&weapons.position[i])<3&&weaponactive==-1){
-                                                                                       if(findDistancefast(&coords,&weapons.position[i])<1||hasvictim){
-                                                                                               bool fleshstuck=0;
-                                                                                               if(weapons.owner[i]!=-1)
+                                                       if(animTarget==crouchremoveknifeanim&&animation[animTarget].label[frameCurrent]==5){
+                                                               for(i=0;i<weapons.size();i++){
+                                                                       bool willwork=true;
+                                                                       if(weapons[i].owner!=-1)
+                                                                               if(player[weapons[i].owner].weaponstuck!=-1)
+                                                                                       if(player[weapons[i].owner].weaponids[player[weapons[i].owner].weaponstuck]==i)
+                                                                                               if(player[weapons[i].owner].num_weapons>1)willwork=0;
+                                                                       if((weapons[i].owner==-1)||(hasvictim&&weapons[i].owner==victim->id&&victim->skeleton.free))
+                                                                               if(willwork&&distsqflat(&coords,&weapons[i].position)<3&&weaponactive==-1){
+                                                                                       if(distsq(&coords,&weapons[i].position)<1||hasvictim){
+                                                                                               bool fleshstuck=false;
+                                                                                               if(weapons[i].owner!=-1)
                                                                                                        if(victim->weaponstuck!=-1){
                                                                                                                if(victim->weaponids[victim->weaponstuck]==i){
-                                                                                                                       fleshstuck=1;
-                                                                                                               }
-                                                                                                       }
-                                                                                                       if(!fleshstuck){
-                                                                                                               if(weapons.type[i]!=staff){
-                                                                                                                       emit_sound_at(knifedrawsound, coords, 128.);
+                                                                                                                       fleshstuck=true;
                                                                                                                }
                                                                                                        }
                                                                                                        if(fleshstuck){
                                                                                                                emit_sound_at(fleshstabremovesound, coords, 128.);
+                                                                                                       } else {
+                                                                                                               if(weapons[i].getType()!=staff){
+                                                                                                                       emit_sound_at(knifedrawsound, coords, 128.);
+                                                                                                               }
                                                                                                        }
                                                                                                        weaponactive=0;
-                                                                                                       if(weapons.owner[i]!=-1){
+                                                                                                       if(weapons[i].owner!=-1){
 
-                                                                                                               victim=&player[weapons.owner[i]];
+                                                                                                               victim=&player[weapons[i].owner];
                                                                                                                if(victim->num_weapons==1)victim->num_weapons=0;
                                                                                                                else victim->num_weapons=1;
 
@@ -1713,12 +1723,12 @@ void    Person::DoAnimations(){
                                                                                                                Normalise(&relative);
                                                                                                                XYZ footvel,footpoint;
                                                                                                                footvel=0;
-                                                                                                               footpoint=weapons.position[i];
+                                                                                                               footpoint=weapons[i].position;
                                                                                                                if(victim->weaponstuck!=-1){
                                                                                                                        if(victim->weaponids[victim->weaponstuck]==i){
                                                                                                                                if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3);
-                                                                                                                               weapons.bloody[i]=2;
-                                                                                                                               weapons.blooddrip[i]=5;
+                                                                                                                               weapons[i].bloody=2;
+                                                                                                                               weapons[i].blooddrip=5;
                                                                                                                                victim->weaponstuck=-1;
                                                                                                                        }
                                                                                                                }
@@ -1733,7 +1743,7 @@ void      Person::DoAnimations(){
                                                                                                                victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity+=relative*6;
                                                                                                                victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity+=relative*6;
                                                                                                        }
-                                                                                                       weapons.owner[i]=id;
+                                                                                                       weapons[i].owner=id;
                                                                                                        if(num_weapons>0){
                                                                                                                weaponids[num_weapons]=weaponids[0];
                                                                                                        }
@@ -1744,7 +1754,7 @@ void      Person::DoAnimations(){
                                                                }
                                                        }
 
-                                                       if(currentanimation==drawleftanim&&animation[targetanimation].label[currentframe]==5){
+                                                       if(animCurrent==drawleftanim&&animation[animTarget].label[frameCurrent]==5){
                                                                if(weaponactive==-1)weaponactive=0;
                                                                else if(weaponactive==0){
                                                                        weaponactive=-1;
@@ -1764,26 +1774,26 @@ void    Person::DoAnimations(){
                                                        }
 
 
-                                                       if((currentanimation==walljumprightkickanim&&targetanimation==walljumprightkickanim)||(currentanimation==walljumpleftkickanim&&targetanimation==walljumpleftkickanim)){
-                                                               XYZ rotatetarget=DoRotation(skeleton.forward,0,rotation,0);
+                                                       if((animCurrent==walljumprightkickanim&&animTarget==walljumprightkickanim)||(animCurrent==walljumpleftkickanim&&animTarget==walljumpleftkickanim)){
+                                                               XYZ rotatetarget=DoRotation(skeleton.forward,0,yaw,0);
                                                                Normalise(&rotatetarget);
-                                                               targetrotation=-asin(0-rotatetarget.x);
-                                                               targetrotation*=360/6.28;
-                                                               if(rotatetarget.z<0)targetrotation=180-targetrotation;
+                                                               targetyaw=-asin(0-rotatetarget.x);
+                                                               targetyaw*=360/6.28;
+                                                               if(rotatetarget.z<0)targetyaw=180-targetyaw;
 
-                                                               if(targetanimation==walljumprightkickanim)targetrotation+=40;
-                                                               if(targetanimation==walljumpleftkickanim)targetrotation-=40;
+                                                               if(animTarget==walljumprightkickanim)targetyaw+=40;
+                                                               if(animTarget==walljumpleftkickanim)targetyaw-=40;
                                                        }
 
                                                        bool dojumpattack;
                                                        dojumpattack=0;
-                                                       if((targetanimation==rabbitrunninganim||targetanimation==wolfrunninganim)&&targetframe==3&&(jumpkeydown||attackkeydown||id!=0))dojumpattack=1;
+                                                       if((animTarget==rabbitrunninganim||animTarget==wolfrunninganim)&&frameTarget==3&&(jumpkeydown||attackkeydown||id!=0))dojumpattack=1;
                                                        if(hasvictim)
-                       if(findDistancefast(&victim->coords,&/*player[i].*/coords)<5&&victim->aitype==gethelptype&&(attackkeydown)&&!victim->skeleton.free&&victim->isRun()&&victim->runninghowlong>=1)dojumpattack=1;                                                  if(!hostile)dojumpattack=0;
+                       if(distsq(&victim->coords,&/*player[i].*/coords)<5&&victim->aitype==gethelptype&&(attackkeydown)&&!victim->skeleton.free&&victim->isRun()&&victim->runninghowlong>=1)dojumpattack=1;                                                    if(!hostile)dojumpattack=0;
                                                        if(dojumpattack){
-                                                               if((targetanimation==rabbitrunninganim||targetanimation==wolfrunninganim)&&id==0){
-                                                                       targetanimation=rabbittackleanim;
-                                                                       targetframe=0;
+                                                               if((animTarget==rabbitrunninganim||animTarget==wolfrunninganim)&&id==0){
+                                                                       animTarget=rabbittackleanim;
+                                                                       frameTarget=0;
                                                                        emit_sound_at(jumpsound, coords);
                                                                }
 
@@ -1797,29 +1807,29 @@ void    Person::DoAnimations(){
                                                                targetloc+=coords;
                                                                for(i=0;i<numplayers;i++){
                                                                        if(i!=id)
-                                                                               if(findDistancefast(&targetloc,&player[i].coords)<closestdist||closestdist==0){
-                                                                                       closestdist=findDistancefast(&targetloc,&player[i].coords);
+                                                                               if(distsq(&targetloc,&player[i].coords)<closestdist||closestdist==0){
+                                                                                       closestdist=distsq(&targetloc,&player[i].coords);
                                                                                        closestid=i;
                                                                                }
                                                                }
                                                                if(closestid!=-1)
-                                                                       if(closestdist<5&&!player[closestid].dead&&animation[player[closestid].targetanimation].height!=lowheight&&player[closestid].targetanimation!=backhandspringanim){
+                                                                       if(closestdist<5&&!player[closestid].dead&&animation[player[closestid].animTarget].height!=lowheight&&player[closestid].animTarget!=backhandspringanim){
                                                                                hasvictim=1;
                                                                                victim=&player[closestid];
                                                                                coords=victim->coords;
-                                                                               currentanimation=rabbittacklinganim;
-                                                                               targetanimation=rabbittacklinganim;
-                                                                               currentframe=0;
-                                                                               targetframe=1;
+                                                                               animCurrent=rabbittacklinganim;
+                                                                               animTarget=rabbittacklinganim;
+                                                                               frameCurrent=0;
+                                                                               frameTarget=1;
                                                                                XYZ rotatetarget;
                                                                                if(coords.z!=victim->coords.z||coords.x!=victim->coords.x){
                                                                                        rotatetarget=coords-victim->coords;
                                                                                        Normalise(&rotatetarget);
-                                                                                       targetrotation=-asin(0-rotatetarget.x);
-                                                                                       targetrotation*=360/6.28;
-                                                                                       if(rotatetarget.z<0)targetrotation=180-targetrotation;
+                                                                                       targetyaw=-asin(0-rotatetarget.x);
+                                                                                       targetyaw*=360/6.28;
+                                                                                       if(rotatetarget.z<0)targetyaw=180-targetyaw;
                                                                                }
-                                                                               if(targetanimation!=rabbitrunninganim){
+                                                                               if(animTarget!=rabbitrunninganim){
                                                                                        emit_sound_at(jumpsound, coords, 128.);
                                                                                }
                                                                        }
@@ -1830,9 +1840,9 @@ void      Person::DoAnimations(){
                                                        if(creature==wolftype)damagemult=2.5*power;
                                                        if(hasvictim){damagemult/=victim->damagetolerance/200;}
                                                        //if(onfire)damagemult=3;
-                                                       if((animation[targetanimation].attack==normalattack||targetanimation==walljumprightkickanim||targetanimation==walljumpleftkickanim)&&(!feint)&&(victim->skeleton.free!=2||targetanimation==killanim||targetanimation==dropkickanim||targetanimation==crouchstabanim||targetanimation==swordgroundstabanim||targetanimation==staffgroundsmashanim)){
-                                                               if(targetanimation==spinkickanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->targetanimation].height!=lowheight){
+                                                       if((animation[animTarget].attack==normalattack||animTarget==walljumprightkickanim||animTarget==walljumpleftkickanim)&&(!feint)&&(victim->skeleton.free!=2||animTarget==killanim||animTarget==dropkickanim||animTarget==crouchstabanim||animTarget==swordgroundstabanim||animTarget==staffgroundsmashanim)){
+                                                               if(animTarget==spinkickanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->animTarget].height!=lowheight){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                if(Random()%2||creature==wolftype){
@@ -1866,8 +1876,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==wolfslapanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->targetanimation].height!=lowheight){
+                                                               if(animTarget==wolfslapanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->animTarget].height!=lowheight){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                if(Random()%2||creature==wolftype){
@@ -1898,8 +1908,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==walljumprightkickanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){
+                                                               if(animTarget==walljumprightkickanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].height!=lowheight){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                victim->spurt=1;
@@ -1933,8 +1943,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==walljumpleftkickanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){
+                                                               if(animTarget==walljumpleftkickanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].height!=lowheight){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                victim->spurt=1;
@@ -1968,8 +1978,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==blockhighleftstrikeanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){
+                                                               if(animTarget==blockhighleftstrikeanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].height!=lowheight){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                if(Random()%2){
@@ -1992,8 +2002,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==killanim&&animation[targetanimation].label[currentframe]==8){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim->dead){
+                                                               if(animTarget==killanim&&animation[animTarget].label[frameCurrent]==8){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim->dead){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.2;
                                                                                emit_sound_at(whooshhitsound, victim->coords, 128.);
@@ -2025,8 +2035,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==killanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->dead){
+                                                               if(animTarget==killanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->dead){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                if(tutoriallevel!=1){
@@ -2049,8 +2059,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==dropkickanim&&animation[targetanimation].label[currentframe]==7){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->skeleton.free){
+                                                               if(animTarget==dropkickanim&&animation[animTarget].label[frameCurrent]==7){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->skeleton.free){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                if(tutoriallevel!=1){
@@ -2088,51 +2098,51 @@ void    Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if((targetanimation==crouchstabanim||targetanimation==swordgroundstabanim)&&animation[targetanimation].label[currentframe]==5){
+                                                               if((animTarget==crouchstabanim||animTarget==swordgroundstabanim)&&animation[animTarget].label[frameCurrent]==5){
                                                                        //if(id==0)camerashake+=.4;
 
                                                                        if(hasvictim)
                                                                                if(!victim->skeleton.free)hasvictim=0;
 
                                                                        if(!hasvictim){
-                                                                               terrain.MakeDecal(blooddecalfast,(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2),.08,.6,Random()%360);
+                                                                               terrain.MakeDecal(blooddecalfast,(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2),.08,.6,Random()%360);
                                                                                emit_sound_at(knifesheathesound, coords, 128.);
                                                                        }
 
                                                                        if(victim&&hasvictim){
-                                                                               if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
+                                                                               if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
 
                                                                                        XYZ where,startpoint,endpoint,movepoint,colpoint;
                                                                                        float rotationpoint;
                                                                                        int whichtri;
-                                                                                       if(weapons.type[weaponids[weaponactive]]==knife){
-                                                                                               where=(weapons.tippoint[weaponids[weaponactive]]*.6+weapons.position[weaponids[weaponactive]]*.4);
+                                                                                       if(weapons[weaponids[weaponactive]].getType()==knife){
+                                                                                               where=(weapons[weaponids[weaponactive]].tippoint*.6+weapons[weaponids[weaponactive]].position*.4);
                                                                                                where-=victim->coords;
-                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                                //where=scale;
                                                                                                startpoint=where;
                                                                                                startpoint.y+=100;
                                                                                                endpoint=where;
                                                                                                endpoint.y-=100;
                                                                                        }
-                                                                                       if(weapons.type[weaponids[weaponactive]]==sword){
-                                                                                               where=weapons.position[weaponids[weaponactive]];
+                                                                                       if(weapons[weaponids[weaponactive]].getType()==sword){
+                                                                                               where=weapons[weaponids[weaponactive]].position;
                                                                                                where-=victim->coords;
-                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                                startpoint=where;
-                                                                                               where=weapons.tippoint[weaponids[weaponactive]];
+                                                                                               where=weapons[weaponids[weaponactive]].tippoint;
                                                                                                where-=victim->coords;
-                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                                endpoint=where;
                                                                                        }
-                                                                                       if(weapons.type[weaponids[weaponactive]]==staff){
-                                                                                               where=weapons.position[weaponids[weaponactive]];
+                                                                                       if(weapons[weaponids[weaponactive]].getType()==staff){
+                                                                                               where=weapons[weaponids[weaponactive]].position;
                                                                                                where-=victim->coords;
-                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                                startpoint=where;
-                                                                                               where=weapons.tippoint[weaponids[weaponactive]];
+                                                                                               where=weapons[weaponids[weaponactive]].tippoint;
                                                                                                where-=victim->coords;
-                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                               if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                                endpoint=where;
                                                                                        }
                                                                                        movepoint=0;
@@ -2145,7 +2155,7 @@ void      Person::DoAnimations(){
                                                                                                        if (!victim->dead)
                                                                                                          award_bonus(id, FinishedBonus);
                                                                                                }
-                                                                                               if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
+                                                                                               if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2;
 
                                                                                                victim->skeleton.longdead=0;
                                                                                                victim->skeleton.free=1;
@@ -2159,9 +2169,9 @@ void      Person::DoAnimations(){
                                                                                                emit_sound_at(fleshstabsound, coords, 128);
 
                                                                                        }
-                                                                                       if(whichtri!=-1||weapons.bloody[weaponids[weaponactive]]){
-                                                                                               weapons.blooddrip[weaponids[weaponactive]]+=5;
-                                                                                               weapons.blooddripdelay[weaponids[weaponactive]]=0;
+                                                                                       if(whichtri!=-1||weapons[weaponids[weaponactive]].bloody){
+                                                                                               weapons[weaponids[weaponactive]].blooddrip+=5;
+                                                                                               weapons[weaponids[weaponactive]].blooddripdelay=0;
                                                                                        }
                                                                                        if(whichtri==-1){
                                                                                                hasvictim=0;
@@ -2171,7 +2181,7 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if((targetanimation==crouchstabanim||targetanimation==swordgroundstabanim)&&animation[targetanimation].label[currentframe]==6){
+                                                               if((animTarget==crouchstabanim||animTarget==swordgroundstabanim)&&animation[animTarget].label[frameCurrent]==6){
                                                                        if(!hasvictim){
                                                                                emit_sound_at(knifedrawsound, coords, 128);
                                                                        }
@@ -2182,20 +2192,20 @@ void    Person::DoAnimations(){
                                                                                emit_sound_at(fleshstabremovesound, coords, 128.);
 
                                                                                footvel=0;
-                                                                               footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2);
+                                                                               footpoint=(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2);
 
-                                                                               if(weapons.type[weaponids[weaponactive]]==sword){
+                                                                               if(weapons[weaponids[weaponactive]].getType()==sword){
                                                                                        XYZ where,startpoint,endpoint,movepoint;
                                                                                        float rotationpoint;
                                                                                        int whichtri;
 
-                                                                                       where=weapons.position[weaponids[weaponactive]];
+                                                                                       where=weapons[weaponids[weaponactive]].position;
                                                                                        where-=victim->coords;
-                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                        startpoint=where;
-                                                                                       where=weapons.tippoint[weaponids[weaponactive]];
+                                                                                       where=weapons[weaponids[weaponactive]].tippoint;
                                                                                        where-=victim->coords;
-                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                        endpoint=where;
 
                                                                                        movepoint=0;
@@ -2204,21 +2214,21 @@ void    Person::DoAnimations(){
                                                                                        footpoint+=victim->coords;
 
                                                                                        if(whichtri==-1){
-                                                                                               footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2);
+                                                                                               footpoint=(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2);
                                                                                        }
                                                                                }
-                                                                               if(weapons.type[weaponids[weaponactive]]==staff){
+                                                                               if(weapons[weaponids[weaponactive]].getType()==staff){
                                                                                        XYZ where,startpoint,endpoint,movepoint;
                                                                                        float rotationpoint;
                                                                                        int whichtri;
 
-                                                                                       where=weapons.position[weaponids[weaponactive]];
+                                                                                       where=weapons[weaponids[weaponactive]].position;
                                                                                        where-=victim->coords;
-                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                        startpoint=where;
-                                                                                       where=weapons.tippoint[weaponids[weaponactive]];
+                                                                                       where=weapons[weaponids[weaponactive]].tippoint;
                                                                                        where-=victim->coords;
-                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
+                                                                                       if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0);
                                                                                        endpoint=where;
 
                                                                                        movepoint=0;
@@ -2227,12 +2237,12 @@ void    Person::DoAnimations(){
                                                                                        footpoint+=victim->coords;
 
                                                                                        if(whichtri==-1){
-                                                                                               footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2);
+                                                                                               footpoint=(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2);
                                                                                        }
                                                                                }
                                                                                hasvictim=victim->DoBloodBigWhere(2,220,footpoint);
                                                                                if(hasvictim){
-                                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
+                                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
                                                                                                victim->skeleton.longdead=0;
                                                                                                victim->skeleton.free=1;
                                                                                                victim->skeleton.broken=0;
@@ -2260,13 +2270,13 @@ void    Person::DoAnimations(){
                                                                                }
                                                                        }
                                                                        if(!hasvictim&&onterrain){
-                                                                               weapons.bloody[weaponids[weaponactive]]=0;
-                                                                               weapons.blooddrip[weaponids[weaponactive]]=0;
+                                                                               weapons[weaponids[weaponactive]].bloody=0;
+                                                                               weapons[weaponids[weaponactive]].blooddrip=0;
                                                                        }
                                                                }
 
-                                                               if(targetanimation==upunchanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
+                                                               if(animTarget==upunchanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                if(Random()%2){
@@ -2287,9 +2297,9 @@ void      Person::DoAnimations(){
                                                                                }
                                                                                victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*150;
 
-                                                                               victim->targetframe=0;
-                                                                               victim->targetanimation=staggerbackhardanim;
-                                                                               victim->targetrotation=targetrotation+180;
+                                                                               victim->frameTarget=0;
+                                                                               victim->animTarget=staggerbackhardanim;
+                                                                               victim->targetyaw=targetyaw+180;
                                                                                victim->target=0;
                                                                                victim->stunned=1;
 
@@ -2302,16 +2312,16 @@ void    Person::DoAnimations(){
                                                                }
 
 
-                                                               if(targetanimation==winduppunchanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*2){
+                                                               if(animTarget==winduppunchanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*2){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
-                                                                               if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->targetanimation].height!=lowheight){
+                                                                               if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->animTarget].height!=lowheight){
                                                                                        if(tutoriallevel!=1){
                                                                                                emit_sound_at(thudsound, victim->coords);
                                                                                        }
                                                                                }
-                                                                               else if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->targetanimation].height==lowheight){
+                                                                               else if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->animTarget].height==lowheight){
                                                                                        if(tutoriallevel!=1){
                                                                                                emit_sound_at(whooshhitsound, victim->coords);
                                                                                        }
@@ -2322,7 +2332,7 @@ void      Person::DoAnimations(){
                                                                                        }
                                                                                }
 
-                                                                               if(victim->damage>victim->damagetolerance-60||normaldotproduct(victim->facing,victim->coords-coords)>0||animation[victim->targetanimation].height==lowheight)
+                                                                               if(victim->damage>victim->damagetolerance-60||normaldotproduct(victim->facing,victim->coords-coords)>0||animation[victim->animTarget].height==lowheight)
                                                                                        victim->RagDoll(0);
                                                                                XYZ relative;
                                                                                relative=victim->coords-coords;
@@ -2335,9 +2345,9 @@ void      Person::DoAnimations(){
                                                                                }
                                                                                victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*400;
 
-                                                                               victim->targetframe=0;
-                                                                               victim->targetanimation=staggerbackhardanim;
-                                                                               victim->targetrotation=targetrotation+180;
+                                                                               victim->frameTarget=0;
+                                                                               victim->animTarget=staggerbackhardanim;
+                                                                               victim->targetyaw=targetyaw+180;
                                                                                victim->target=0;
                                                                                victim->stunned=1;
 
@@ -2348,8 +2358,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==blockhighleftanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4){
+                                                               if(animTarget==blockhighleftanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*4){
                                                                                if(victim->id==0)camerashake+=.4;
                                                                                emit_sound_at(landsound2, victim->coords);
 
@@ -2357,14 +2367,14 @@ void    Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==swordslashparryanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4){
+                                                               if(animTarget==swordslashparryanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*4){
                                                                                if(victim->id==0)camerashake+=.4;
 
                                                                                if(weaponactive!=-1){
-                                                                                       if(weapons.type[victim->weaponids[0]]==staff||weapons.type[weaponids[0]]==staff){
-                                                                                               if(weapons.type[victim->weaponids[0]]==staff)weapons.damage[victim->weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
-                                                                                               if(weapons.type[weaponids[0]]==staff)weapons.damage[weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
+                                                                                       if(weapons[victim->weaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff){
+                                                                                               if(weapons[victim->weaponids[0]].getType()==staff)weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
+                                                                                               if(weapons[weaponids[0]].getType()==staff)weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
 
                                                                                                emit_sound_at(swordstaffsound, victim->coords);
                                                                                        }
@@ -2377,23 +2387,23 @@ void    Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==knifethrowanim&&animation[targetanimation].label[currentframe]==5){
+                                                               if(animTarget==knifethrowanim&&animation[animTarget].label[frameCurrent]==5){
                                                                        if(weaponactive!=-1){
                                                                                escapednum=0;
                                                                                XYZ aim;
-                                                                               weapons.owner[weaponids[0]]=-1;
-                                                                               aim=victim->coords+DoRotation(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position,0,victim->rotation,0)*victim->scale+victim->velocity*findDistance(&victim->coords,&coords)/50-(coords+DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,rotation,0)*scale);
+                                                                               weapons[weaponids[0]].owner=-1;
+                                                                               aim=victim->coords+DoRotation(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position,0,victim->yaw,0)*victim->scale+victim->velocity*findDistance(&victim->coords,&coords)/50-(coords+DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,yaw,0)*scale);
                                                                                Normalise(&aim);
-                                                                               /*if(victim->targetanimation==jumpupanim||victim->targetanimation==jumpdownanim){
+                                                                               /*if(victim->animTarget==jumpupanim||victim->animTarget==jumpdownanim){
                                                                                aim=DoRotation(aim,(float)abs(Random()%15)-7,(float)abs(Random()%15)-7,0);
                                                                                }*/
-                                                                               weapons.velocity[weaponids[0]]=aim*50;
-                                                                               weapons.tipvelocity[weaponids[0]]=aim*50;
-                                                                               weapons.missed[weaponids[0]]=0;
-                                                                               weapons.hitsomething[weaponids[0]]=0;
-                                                                               weapons.freetime[weaponids[0]]=0;
-                                                                               weapons.firstfree[weaponids[0]]=1;
-                                                                               weapons.physics[weaponids[0]]=0;
+                                                                               weapons[weaponids[0]].velocity=aim*50;
+                                                                               weapons[weaponids[0]].tipvelocity=aim*50;
+                                                                               weapons[weaponids[0]].missed=0;
+                                                                               weapons[weaponids[0]].hitsomething=0;
+                                                                               weapons[weaponids[0]].freetime=0;
+                                                                               weapons[weaponids[0]].firstfree=1;
+                                                                               weapons[weaponids[0]].physics=0;
                                                                                num_weapons--;
                                                                                if(num_weapons){
                                                                                        weaponids[0]=weaponids[num_weapons];
@@ -2402,9 +2412,9 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==knifeslashstartanim&&animation[targetanimation].label[currentframe]==5){
+                                                               if(animTarget==knifeslashstartanim&&animation[animTarget].label[frameCurrent]==5){
                                                                        if(hasvictim)
-                                                                               if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4.5&&/*animation[victim->targetanimation].height!=lowheight&&*/victim->targetanimation!=dodgebackanim&&victim->targetanimation!=rollanim){
+                                                                               if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*4.5&&/*animation[victim->animTarget].height!=lowheight&&*/victim->animTarget!=dodgebackanim&&victim->animTarget!=rollanim){
                                                                                        escapednum=0;
                                                                                        if(tutoriallevel!=1)victim->DoBloodBig(1.5/victim->armorhigh,225);
 
@@ -2413,11 +2423,11 @@ void    Person::DoAnimations(){
                                                                                                emit_sound_at(knifeslicesound, victim->coords);
                                                                                        }
                                                                                        //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
-                                                                                       if(animation[victim->targetanimation].attack&&(victim->aitype!=playercontrolled||victim->targetanimation==knifeslashstartanim)&&(victim->creature==rabbittype||victim->deathbleeding<=0)){
+                                                                                       if(animation[victim->animTarget].attack&&(victim->aitype!=playercontrolled||victim->animTarget==knifeslashstartanim)&&(victim->creature==rabbittype||victim->deathbleeding<=0)){
                                                                                                if(victim->id != 0 || difficulty==2){
-                                                                                                       victim->targetframe=0;
-                                                                                                       victim->targetanimation=staggerbackhardanim;
-                                                                                                       victim->targetrotation=targetrotation+180;
+                                                                                                       victim->frameTarget=0;
+                                                                                                       victim->animTarget=staggerbackhardanim;
+                                                                                                       victim->targetyaw=targetyaw+180;
                                                                                                        victim->target=0;
                                                                                                }
                                                                                        }
@@ -2425,8 +2435,8 @@ void      Person::DoAnimations(){
                                                                                        victim->highreversaldelay=0;
                                                                                        if(aitype!=playercontrolled)weaponmissdelay=.6;
 
-                                                                                       if(tutoriallevel!=1)if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
-                                                                                       if(tutoriallevel!=1)weapons.blooddrip[weaponids[weaponactive]]+=3;
+                                                                                       if(tutoriallevel!=1)if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1;
+                                                                                       if(tutoriallevel!=1)weapons[weaponids[weaponactive]].blooddrip+=3;
 
                                                                                        XYZ footvel,footpoint;
                                                                                        footvel=0;
@@ -2434,7 +2444,7 @@ void      Person::DoAnimations(){
                                                                                                footpoint=(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2*victim->scale+victim->coords;
                                                                                        }
                                                                                        if(!skeleton.free){
-                                                                                               footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->rotation,0)*victim->scale+victim->coords;
+                                                                                               footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->yaw,0)*victim->scale+victim->coords;
                                                                                        }
                                                                                        if(tutoriallevel!=1){
                                                                                                if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .6, .3);
@@ -2451,8 +2461,8 @@ void      Person::DoAnimations(){
                                                                                        victim->DoDamage(damagemult*0);
                                                                                }
                                                                }
-                                                               if(targetanimation==swordslashanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim){
+                                                               if(animTarget==swordslashanim&&animation[animTarget].label[frameCurrent]==5&&victim->animTarget!=rollanim){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->animTarget!=dodgebackanim){
                                                                                if(victim->weaponactive==-1||normaldotproduct(victim->facing,victim->coords-coords)>0||(Random()%2==0)){
                                                                                        award_bonus(id, Slashbonus);
                                                                                        escapednum=0;
@@ -2464,20 +2474,20 @@ void    Person::DoAnimations(){
                                                                                        }
                                                                                        //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
                                                                                        if(tutoriallevel!=1){
-                                                                                               victim->targetframe=0;
-                                                                                               victim->targetanimation=staggerbackhardanim;
-                                                                                               victim->targetrotation=targetrotation+180;
+                                                                                               victim->frameTarget=0;
+                                                                                               victim->animTarget=staggerbackhardanim;
+                                                                                               victim->targetyaw=targetyaw+180;
                                                                                                victim->target=0;
                                                                                        }
 
                                                                                        if(tutoriallevel!=1){
-                                                                                               if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
-                                                                                               weapons.blooddrip[weaponids[weaponactive]]+=3;
+                                                                                               if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1;
+                                                                                               weapons[weaponids[weaponactive]].blooddrip+=3;
 
                                                                                                float bloodlossamount;
                                                                                                bloodlossamount=200+abs((float)(Random()%40))-20;
                                                                                                victim->bloodloss+=bloodlossamount/victim->armorhigh;
-                                                                                               //victim->bloodloss+=100*(6.5-findDistancefast(&coords,&victim->coords));
+                                                                                               //victim->bloodloss+=100*(6.5-distsq(&coords,&victim->coords));
                                                                                                victim->DoDamage(damagemult*0);
 
                                                                                                XYZ footvel,footpoint;
@@ -2486,7 +2496,7 @@ void      Person::DoAnimations(){
                                                                                                        footpoint=(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2*victim->scale+victim->coords;
                                                                                                }
                                                                                                if(!skeleton.free){
-                                                                                                       footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->rotation,0)*victim->scale+victim->coords;
+                                                                                                       footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->yaw,0)*victim->scale+victim->coords;
                                                                                                }
                                                                                                if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
                                                                                                footvel=DoRotation(facing,0,90,0)*.8;
@@ -2499,9 +2509,9 @@ void      Person::DoAnimations(){
                                                                                }
                                                                                else {
                                                                                        if(victim->weaponactive!=-1){
-                                                                                               if(weapons.type[victim->weaponids[0]]==staff||weapons.type[weaponids[0]]==staff){
-                                                                                                       if(weapons.type[victim->weaponids[0]]==staff)weapons.damage[victim->weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
-                                                                                                       if(weapons.type[weaponids[0]]==staff)weapons.damage[weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
+                                                                                               if(weapons[victim->weaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff){
+                                                                                                       if(weapons[victim->weaponids[0]].getType()==staff)weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
+                                                                                                       if(weapons[weaponids[0]].getType()==staff)weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250;
 
                                                                                                        emit_sound_at(swordstaffsound, victim->coords);
                                                                                                }
@@ -2514,20 +2524,20 @@ void    Person::DoAnimations(){
                                                                                        XYZ aim;
                                                                                        victim->Puff(righthand);
                                                                                        victim->target=0;
-                                                                                       victim->targetframe=0;
-                                                                                       victim->targetanimation=staggerbackhighanim;
-                                                                                       victim->targetrotation=targetrotation+180;
+                                                                                       victim->frameTarget=0;
+                                                                                       victim->animTarget=staggerbackhighanim;
+                                                                                       victim->targetyaw=targetyaw+180;
                                                                                        victim->target=0;
-                                                                                       weapons.owner[victim->weaponids[0]]=-1;
+                                                                                       weapons[victim->weaponids[0]].owner=-1;
                                                                                        aim=DoRotation(facing,0,90,0)*21;
                                                                                        aim.y+=7;
-                                                                                       weapons.velocity[victim->weaponids[0]]=aim*-.2;
-                                                                                       weapons.tipvelocity[victim->weaponids[0]]=aim;
-                                                                                       weapons.missed[victim->weaponids[0]]=1;
-                                                                                       weapons.hitsomething[weaponids[0]]=0;
-                                                                                       weapons.freetime[victim->weaponids[0]]=0;
-                                                                                       weapons.firstfree[victim->weaponids[0]]=1;
-                                                                                       weapons.physics[victim->weaponids[0]]=1;
+                                                                                       weapons[victim->weaponids[0]].velocity=aim*-.2;
+                                                                                       weapons[victim->weaponids[0]].tipvelocity=aim;
+                                                                                       weapons[victim->weaponids[0]].missed=1;
+                                                                                       weapons[weaponids[0]].hitsomething=0;
+                                                                                       weapons[victim->weaponids[0]].freetime=0;
+                                                                                       weapons[victim->weaponids[0]].firstfree=1;
+                                                                                       weapons[victim->weaponids[0]].physics=1;
                                                                                        victim->num_weapons--;
                                                                                        if(victim->num_weapons){
                                                                                                victim->weaponids[0]=victim->weaponids[num_weapons];
@@ -2542,10 +2552,10 @@ void    Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==staffhitanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim&&victim->targetanimation!=sweepanim){
+                                                               if(animTarget==staffhitanim&&animation[animTarget].label[frameCurrent]==5&&victim->animTarget!=rollanim){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->animTarget!=dodgebackanim&&victim->animTarget!=sweepanim){
                                                                                if(tutoriallevel!=1){
-                                                                                       weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/250;
+                                                                                       weapons[weaponids[0]].damage+=.4+float(abs(Random()%100)-50)/250;
                                                                                        escapednum=0;
                                                                                        if(id==0)camerashake+=.4;
                                                                                        if(Random()%2||creature==wolftype){
@@ -2576,10 +2586,10 @@ void    Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==staffspinhitanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim&&victim->targetanimation!=sweepanim){
+                                                               if(animTarget==staffspinhitanim&&animation[animTarget].label[frameCurrent]==5&&victim->animTarget!=rollanim){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->animTarget!=dodgebackanim&&victim->animTarget!=sweepanim){
                                                                                if(tutoriallevel!=1){
-                                                                                       weapons.damage[weaponids[0]]+=.6+float(abs(Random()%100)-50)/250;
+                                                                                       weapons[weaponids[0]].damage+=.6+float(abs(Random()%100)-50)/250;
                                                                                        escapednum=0;
                                                                                        if(id==0)camerashake+=.4;
                                                                                        if(Random()%2||creature==wolftype){
@@ -2607,11 +2617,11 @@ void    Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==staffgroundsmashanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5){
+                                                               if(animTarget==staffgroundsmashanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5){
                                                                                escapednum=0;
                                                                                if(tutoriallevel!=1){
-                                                                                       if(!victim->dead)weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/500;
+                                                                                       if(!victim->dead)weapons[weaponids[0]].damage+=.4+float(abs(Random()%100)-50)/500;
                                                                                        if(id==0)camerashake+=.4;
                                                                                        if(Random()%2||creature==wolftype){
                                                                                                victim->spurt=1;
@@ -2661,8 +2671,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==lowkickanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=highheight){
+                                                               if(animTarget==lowkickanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].height!=highheight){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.4;
                                                                                XYZ relative;
@@ -2672,7 +2682,7 @@ void      Person::DoAnimations(){
 
                                                                                SolidHitBonus(id);
 
-                                                                               if(animation[victim->targetanimation].height==lowheight){
+                                                                               if(animation[victim->animTarget].height==lowheight){
                                                                                        if(Random()%2){
                                                                                                victim->spurt=1;
                                                                                                DoBlood(.2,250);
@@ -2700,9 +2710,9 @@ void      Person::DoAnimations(){
                                                                                                victim->skeleton.joints[i].velocity+=relative*damagemult*10;
                                                                                        }
                                                                                        victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
-                                                                                       victim->targetframe=0;
-                                                                                       victim->targetanimation=staggerbackhighanim;
-                                                                                       victim->targetrotation=targetrotation+180;
+                                                                                       victim->frameTarget=0;
+                                                                                       victim->animTarget=staggerbackhighanim;
+                                                                                       victim->targetyaw=targetyaw+180;
                                                                                        victim->target=0;
                                                                                        if(tutoriallevel!=1){
                                                                                                emit_sound_at(landsound2, victim->coords, 128.);
@@ -2719,8 +2729,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==sweepanim&&animation[targetanimation].label[currentframe]==5){
-                                                                       if(victim->targetanimation!=jumpupanim&&findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim!=this){
+                                                               if(animTarget==sweepanim&&animation[animTarget].label[frameCurrent]==5){
+                                                                       if(victim->animTarget!=jumpupanim&&distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim!=this){
                                                                                escapednum=0;
                                                                                if(id==0)camerashake+=.2;
                                                                                if(tutoriallevel!=1){
@@ -2731,7 +2741,7 @@ void      Person::DoAnimations(){
                                                                                relative.y=0;
                                                                                Normalise(&relative);
 
-                                                                               if(animation[victim->targetanimation].height==middleheight||animation[victim->currentanimation].height==middleheight||victim->damage>=victim->damagetolerance-40){
+                                                                               if(animation[victim->animTarget].height==middleheight||animation[victim->animCurrent].height==middleheight||victim->damage>=victim->damagetolerance-40){
                                                                                        victim->RagDoll(0);
 
                                                                                        for(i=0;i<victim->skeleton.num_joints;i++){
@@ -2758,9 +2768,9 @@ void      Person::DoAnimations(){
                                                                                                        victim->skeleton.joints[i].velocity+=relative*damagemult*80;
                                                                                        }
                                                                                        victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
-                                                                                       victim->targetframe=0;
-                                                                                       victim->targetanimation=staggerbackhighanim;
-                                                                                       victim->targetrotation=targetrotation+180;
+                                                                                       victim->frameTarget=0;
+                                                                                       victim->animTarget=staggerbackhighanim;
+                                                                                       victim->targetyaw=targetyaw+180;
                                                                                        victim->target=0;
                                                                                        if(tutoriallevel!=1){
                                                                                                emit_sound_at(landsound2, victim->coords, 128.);
@@ -2774,8 +2784,8 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
                                                        }
-                                                       if(animation[targetanimation].attack==reversal&&(!victim->feint||(victim->lastattack==victim->lastattack2&&victim->lastattack2==victim->lastattack3&&Random()%2)||targetanimation==knifefollowanim)){
-                                                               if(targetanimation==spinkickreversalanim&&animation[targetanimation].label[currentframe]==7){
+                                                       if(animation[animTarget].attack==reversal&&(!victim->feint||(victim->lastattack==victim->lastattack2&&victim->lastattack2==victim->lastattack3&&Random()%2)||animTarget==knifefollowanim)){
+                                                               if(animTarget==spinkickreversalanim&&animation[animTarget].label[frameCurrent]==7){
                                                                        escapednum=0;
                                                                        if(id==0)camerashake+=.4;
                                                                        if(Random()%2){
@@ -2807,10 +2817,10 @@ void    Person::DoAnimations(){
                                                                        award_bonus(id, Reversal);
                                                                }
 
-                                                               if((targetanimation==swordslashreversalanim||targetanimation==knifeslashreversalanim||targetanimation==staffhitreversalanim||targetanimation==staffspinhitreversalanim)&&animation[targetanimation].label[currentframe]==5){
+                                                               if((animTarget==swordslashreversalanim||animTarget==knifeslashreversalanim||animTarget==staffhitreversalanim||animTarget==staffspinhitreversalanim)&&animation[animTarget].label[frameCurrent]==5){
                                                                        if(victim->weaponactive!=-1&&victim->num_weapons>0){
-                                                                               if(weapons.owner[victim->weaponids[victim->weaponactive]]==victim->id){
-                                                                                       weapons.owner[victim->weaponids[victim->weaponactive]]=id;
+                                                                               if(weapons[victim->weaponids[victim->weaponactive]].owner==victim->id){
+                                                                                       weapons[victim->weaponids[victim->weaponactive]].owner=id;
                                                                                        weaponactive=0;
                                                                                        if(num_weapons>0){
                                                                                                weaponids[num_weapons]=weaponids[victim->weaponactive];
@@ -2827,7 +2837,7 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==staffhitreversalanim&&animation[targetanimation].label[currentframe]==5){
+                                                               if(animTarget==staffhitreversalanim&&animation[animTarget].label[frameCurrent]==5){
                                                                        escapednum=0;
                                                                        if(id==0)camerashake+=.4;
                                                                        if(Random()%2){
@@ -2850,7 +2860,7 @@ void      Person::DoAnimations(){
                                                                        victim->DoDamage(damagemult*70/victim->protectionhigh);
                                                                }
 
-                                                               if(targetanimation==staffspinhitreversalanim&&animation[targetanimation].label[currentframe]==7){
+                                                               if(animTarget==staffspinhitreversalanim&&animation[animTarget].label[frameCurrent]==7){
                                                                        escapednum=0;
                                                                        if(id==0)camerashake+=.4;
                                                                        if(Random()%2){
@@ -2880,7 +2890,7 @@ void      Person::DoAnimations(){
                                                                        victim->DoDamage(damagemult*70/victim->protectionhigh);
                                                                }
 
-                                                               if(targetanimation==upunchreversalanim&&animation[targetanimation].label[currentframe]==7){
+                                                               if(animTarget==upunchreversalanim&&animation[animTarget].label[frameCurrent]==7){
                                                                        escapednum=0;
                                                                        victim->RagDoll(1);
                                                                        XYZ relative;
@@ -2909,13 +2919,13 @@ void    Person::DoAnimations(){
                                                                        bool doslice;
                                                                        doslice=0;
                                                                        if(weaponactive!=-1||creature==wolftype)doslice=1;
-                                                                       if(creature==rabbittype&&weaponactive!=-1)if(weapons.type[weaponids[0]]==staff)doslice=0;
+                                                                       if(creature==rabbittype&&weaponactive!=-1)if(weapons[weaponids[0]].getType()==staff)doslice=0;
                                                                        if(doslice){
                                                                                if(weaponactive!=-1){
                                                                                        victim->DoBloodBig(2/victim->armorhigh,225);
                                                                                        emit_sound_at(knifeslicesound, victim->coords);
-                                                                                       if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
-                                                                                       weapons.blooddrip[weaponids[weaponactive]]+=3;
+                                                                                       if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1;
+                                                                                       weapons[weaponids[weaponactive]].blooddrip+=3;
                                                                                }
                                                                                if(weaponactive==-1&&creature==wolftype){;
                                                                                        emit_sound_at(clawslicesound, victim->coords, 128.);
@@ -2927,7 +2937,7 @@ void      Person::DoAnimations(){
 
 
 
-                                                               if(targetanimation==swordslashreversalanim&&animation[targetanimation].label[currentframe]==7){
+                                                               if(animTarget==swordslashreversalanim&&animation[animTarget].label[frameCurrent]==7){
                                                                        escapednum=0;
                                                                        victim->RagDoll(1);
                                                                        XYZ relative;
@@ -2951,7 +2961,7 @@ void      Person::DoAnimations(){
                                                                        award_bonus(id, swordreversebonus);
                                                                }
 
-                                                               if(hasvictim&&targetanimation==knifeslashreversalanim&&animation[targetanimation].label[currentframe]==7){
+                                                               if(hasvictim&&animTarget==knifeslashreversalanim&&animation[animTarget].label[frameCurrent]==7){
                                                                        escapednum=0;
                                                                        if(id==0)camerashake+=.4;
                                                                        if(Random()%2){
@@ -2978,7 +2988,7 @@ void      Person::DoAnimations(){
                                                                        award_bonus(id, Reversal);
                                                                }
 
-                                                               if(hasvictim&&targetanimation==sneakattackanim&&animation[targetanimation].label[currentframe]==7){
+                                                               if(hasvictim&&animTarget==sneakattackanim&&animation[animTarget].label[frameCurrent]==7){
                                                                        escapednum=0;
                                                                        victim->RagDoll(0);
                                                                        victim->skeleton.spinny=0;
@@ -2996,13 +3006,13 @@ void    Person::DoAnimations(){
                                                                        bool doslice;
                                                                        doslice=0;
                                                                        if(weaponactive!=-1||creature==wolftype)doslice=1;
-                                                                       if(creature==rabbittype&&weaponactive!=-1)if(weapons.type[weaponids[0]]==staff)doslice=0;
+                                                                       if(creature==rabbittype&&weaponactive!=-1)if(weapons[weaponids[0]].getType()==staff)doslice=0;
                                                                        if(doslice){
                                                                                if(weaponactive!=-1){
                                                                                        victim->DoBloodBig(200,225);
                                                                                        emit_sound_at(knifeslicesound, victim->coords);
-                                                                                       if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
-                                                                                       weapons.blooddrip[weaponids[weaponactive]]+=5;
+                                                                                       if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2;
+                                                                                       weapons[weaponids[weaponactive]].blooddrip+=5;
                                                                                }
 
                                                                                if(creature==wolftype&&weaponactive==-1){
@@ -3014,24 +3024,24 @@ void    Person::DoAnimations(){
                                                                        award_bonus(id, spinecrusher);
                                                                }
 
-                                                               if(hasvictim&&(targetanimation==knifefollowanim||targetanimation==knifesneakattackanim)&&animation[targetanimation].label[currentframe]==5){
+                                                               if(hasvictim&&(animTarget==knifefollowanim||animTarget==knifesneakattackanim)&&animation[animTarget].label[frameCurrent]==5){
                                                                        if(weaponactive!=-1&&victim->bloodloss<victim->damagetolerance){
                                                                                escapednum=0;
-                                                                               if(targetanimation==knifefollowanim)victim->DoBloodBig(200,210);
-                                                                               if(targetanimation==knifesneakattackanim){
+                                                                               if(animTarget==knifefollowanim)victim->DoBloodBig(200,210);
+                                                                               if(animTarget==knifesneakattackanim){
                                                                                        /*victim->DoBloodBig(200,195);
                                                                                        XYZ bloodvel;
                                                                                        bloodvel=0;
                                                                                        bloodvel.z=20;
                                                                                        bloodvel.y=5;
-                                                                                       bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
-                                                                                       Sprite::MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
+                                                                                       bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
+                                                                                       Sprite::MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
                                                                                        */
                                                                                        XYZ footvel,footpoint;
                                                                                        footvel=0;
-                                                                                       footpoint=weapons.tippoint[weaponids[0]];
+                                                                                       footpoint=weapons[weaponids[0]].tippoint;
                                                                                        if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
-                                                                                       footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]);
+                                                                                       footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position);
                                                                                        Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                        Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                        Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1);
@@ -3039,13 +3049,13 @@ void    Person::DoAnimations(){
                                                                                        victim->DoBloodBig(200,195);
                                                                                        award_bonus(id, tracheotomy);
                                                                                }
-                                                                               if(targetanimation==knifefollowanim){
+                                                                               if(animTarget==knifefollowanim){
                                                                                        award_bonus(id, Stabbonus);
                                                                                        XYZ footvel,footpoint;
                                                                                        footvel=0;
-                                                                                       footpoint=weapons.tippoint[weaponids[0]];
+                                                                                       footpoint=weapons[weaponids[0]].tippoint;
                                                                                        if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
-                                                                                       footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1;
+                                                                                       footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position)*-1;
                                                                                        Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                        Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                        Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .2, 1);
@@ -3055,33 +3065,33 @@ void    Person::DoAnimations(){
                                                                                victim->bloodloss+=10000;
                                                                                victim->velocity=0;
                                                                                emit_sound_at(fleshstabsound, victim->coords);
-                                                                               if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
-                                                                               weapons.blooddrip[weaponids[weaponactive]]+=5;
+                                                                               if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2;
+                                                                               weapons[weaponids[weaponactive]].blooddrip+=5;
                                                                        }
                                                                }
 
-                                                               if(hasvictim&&(targetanimation==knifefollowanim||targetanimation==knifesneakattackanim)&&animation[targetanimation].label[currentframe]==6){
+                                                               if(hasvictim&&(animTarget==knifefollowanim||animTarget==knifesneakattackanim)&&animation[animTarget].label[frameCurrent]==6){
                                                                        escapednum=0;
                                                                        victim->velocity=0;
                                                                        for(i=0;i<victim->skeleton.num_joints;i++){
                                                                                victim->skeleton.joints[i].velocity=0;
                                                                        }
-                                                                       if(targetanimation==knifefollowanim){
+                                                                       if(animTarget==knifefollowanim){
                                                                                victim->RagDoll(0);
                                                                                for(i=0;i<victim->skeleton.num_joints;i++){
                                                                                        victim->skeleton.joints[i].velocity=0;
                                                                                }
                                                                        }
-                                                                       if(weaponactive!=-1&&animation[victim->targetanimation].attack!=reversal){
+                                                                       if(weaponactive!=-1&&animation[victim->animTarget].attack!=reversal){
                                                                                emit_sound_at(fleshstabremovesound, victim->coords);
-                                                                               if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
-                                                                               weapons.blooddrip[weaponids[weaponactive]]+=5;
+                                                                               if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2;
+                                                                               weapons[weaponids[weaponactive]].blooddrip+=5;
 
                                                                                XYZ footvel,footpoint;
                                                                                footvel=0;
-                                                                               footpoint=weapons.tippoint[weaponids[0]];
+                                                                               footpoint=weapons[weaponids[0]].tippoint;
                                                                                if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
-                                                                               footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1;
+                                                                               footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position)*-1;
                                                                                Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1);
@@ -3089,7 +3099,7 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(hasvictim&&(targetanimation==swordsneakattackanim)&&animation[targetanimation].label[currentframe]==5){
+                                                               if(hasvictim&&(animTarget==swordsneakattackanim)&&animation[animTarget].label[frameCurrent]==5){
                                                                        if(weaponactive!=-1&&victim->bloodloss<victim->damagetolerance){
                                                                                award_bonus(id, backstab);
 
@@ -3097,9 +3107,9 @@ void      Person::DoAnimations(){
 
                                                                                XYZ footvel,footpoint;
                                                                                footvel=0;
-                                                                               footpoint=(weapons.tippoint[weaponids[0]]+weapons.position[weaponids[0]])/2;
+                                                                               footpoint=(weapons[weaponids[0]].tippoint+weapons[weaponids[0]].position)/2;
                                                                                if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
-                                                                               footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]);
+                                                                               footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position);
                                                                                Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                Sprite::MakeSprite(bloodflamesprite, footpoint,DoRotation(footvel*5,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .3, 1);
@@ -3109,12 +3119,12 @@ void    Person::DoAnimations(){
                                                                                victim->bloodloss+=10000;
                                                                                victim->velocity=0;
                                                                                emit_sound_at(fleshstabsound, victim->coords);
-                                                                               if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
-                                                                               weapons.blooddrip[weaponids[weaponactive]]+=5;
+                                                                               if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2;
+                                                                               weapons[weaponids[weaponactive]].blooddrip+=5;
                                                                        }
                                                                }
 
-                                                               if(hasvictim&&targetanimation==swordsneakattackanim&&animation[targetanimation].label[currentframe]==6){
+                                                               if(hasvictim&&animTarget==swordsneakattackanim&&animation[animTarget].label[frameCurrent]==6){
                                                                        escapednum=0;
                                                                        victim->velocity=0;
                                                                        for(i=0;i<victim->skeleton.num_joints;i++){
@@ -3122,14 +3132,14 @@ void    Person::DoAnimations(){
                                                                        }
                                                                        if(weaponactive!=-1){
                                                                                emit_sound_at(fleshstabremovesound, victim->coords);
-                                                                               if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
-                                                                               weapons.blooddrip[weaponids[weaponactive]]+=5;
+                                                                               if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2;
+                                                                               weapons[weaponids[weaponactive]].blooddrip+=5;
 
                                                                                XYZ footvel,footpoint;
                                                                                footvel=0;
-                                                                               footpoint=weapons.tippoint[weaponids[0]];
+                                                                               footpoint=weapons[weaponids[0]].tippoint;
                                                                                if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
-                                                                               footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1;
+                                                                               footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position)*-1;
                                                                                Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
                                                                                Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1);
@@ -3137,7 +3147,7 @@ void      Person::DoAnimations(){
                                                                        }
                                                                }
 
-                                                               if(targetanimation==sweepreversalanim&&animation[targetanimation].label[currentframe]==7){
+                                                               if(animTarget==sweepreversalanim&&animation[animTarget].label[frameCurrent]==7){
                                                                        escapednum=0;
                                                                        if(id==0)camerashake+=.4;
                                                                        if(Random()%2){
@@ -3152,13 +3162,13 @@ void    Person::DoAnimations(){
                                                                        bool doslice;
                                                                        doslice=0;
                                                                        if(weaponactive!=-1||creature==wolftype)doslice=1;
-                                                                       if(creature==rabbittype&&weaponactive!=-1)if(weapons.type[weaponids[0]]==staff)doslice=0;
+                                                                       if(creature==rabbittype&&weaponactive!=-1)if(weapons[weaponids[0]].getType()==staff)doslice=0;
                                                                        if(doslice){
                                                                                if(weaponactive!=-1){
                                                                                        victim->DoBloodBig(2/victim->armorhead,225);
                                                                                        emit_sound_at(knifeslicesound, victim->coords);
-                                                                                       if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
-                                                                                       weapons.blooddrip[weaponids[weaponactive]]+=3;
+                                                                                       if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1;
+                                                                                       weapons[weaponids[weaponactive]].blooddrip+=3;
                                                                                }
                                                                                if(weaponactive==-1&&creature==wolftype){
                                                                                        emit_sound_at(clawslicesound, victim->coords, 128.);
@@ -3188,7 +3198,7 @@ void      Person::DoAnimations(){
                                                                        victim->velocity=0;
                                                                }
 
-                                                               if(targetanimation==sweepreversalanim&&((animation[targetanimation].label[currentframe]==9&&victim->damage<victim->damagetolerance)||(animation[targetanimation].label[currentframe]==7&&victim->damage>victim->damagetolerance))){
+                                                               if(animTarget==sweepreversalanim&&((animation[animTarget].label[frameCurrent]==9&&victim->damage<victim->damagetolerance)||(animation[animTarget].label[frameCurrent]==7&&victim->damage>victim->damagetolerance))){
                                                                        escapednum=0;
                                                                        victim->RagDoll(0);
                                                                        XYZ relative;
@@ -3205,7 +3215,7 @@ void      Person::DoAnimations(){
                                                                        victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200;
                                                                }
 
-                                                               if(hasvictim&&(targetanimation==spinkickreversalanim||targetanimation==sweepreversalanim||targetanimation==rabbitkickreversalanim||targetanimation==upunchreversalanim||targetanimation==jumpreversalanim||targetanimation==swordslashreversalanim||targetanimation==knifeslashreversalanim||targetanimation==rabbittacklereversal||targetanimation==wolftacklereversal||targetanimation==staffhitreversalanim||targetanimation==staffspinhitreversalanim))
+                                                               if(hasvictim&&(animTarget==spinkickreversalanim||animTarget==sweepreversalanim||animTarget==rabbitkickreversalanim||animTarget==upunchreversalanim||animTarget==jumpreversalanim||animTarget==swordslashreversalanim||animTarget==knifeslashreversalanim||animTarget==rabbittacklereversal||animTarget==wolftacklereversal||animTarget==staffhitreversalanim||animTarget==staffspinhitreversalanim))
                                                                        if(victim->damage>victim->damagetolerance&&bonus!=reverseko){
                                                                          award_bonus(id, reverseko);
                                                                        }
@@ -3213,43 +3223,43 @@ void    Person::DoAnimations(){
 
 
                                                        //Animation end
-                                                       if(targetframe>animation[currentanimation].numframes-1){
-                                                               targetframe=0;
+                                                       if(frameTarget>animation[animCurrent].numframes-1){
+                                                               frameTarget=0;
                                                                if(wasStop()){
-                                                                       targetanimation=getIdle();
+                                                                       animTarget=getIdle();
                                                                        FootLand(0,1);
                                                                        FootLand(1,1);
                                                                }
-                                                               if(currentanimation==rabbittackleanim||currentanimation==rabbittacklinganim){
-                                                                       targetanimation=rollanim;
-                                                                       targetframe=3;
+                                                               if(animCurrent==rabbittackleanim||animCurrent==rabbittacklinganim){
+                                                                       animTarget=rollanim;
+                                                                       frameTarget=3;
                                                                        emit_sound_at(movewhooshsound, coords, 128.);
                                                                }
-                                                               if(currentanimation==staggerbackhighanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==staggerbackhighanim){
+                                                                       animTarget=getIdle();
                                                                }
-                                                               if(currentanimation==staggerbackhardanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==staggerbackhardanim){
+                                                                       animTarget=getIdle();
                                                                }
-                                                               if(currentanimation==removeknifeanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==removeknifeanim){
+                                                                       animTarget=getIdle();
                                                                }
-                                                               if(currentanimation==crouchremoveknifeanim){
-                                                                       targetanimation=getCrouch();
+                                                               if(animCurrent==crouchremoveknifeanim){
+                                                                       animTarget=getCrouch();
                                                                }
-                                                               if(currentanimation==backhandspringanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==backhandspringanim){
+                                                                       animTarget=getIdle();
                                                                }
-                                                               if(currentanimation==dodgebackanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==dodgebackanim){
+                                                                       animTarget=getIdle();
                                                                }
-                                                               if(currentanimation==drawleftanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==drawleftanim){
+                                                                       animTarget=getIdle();
                                                                }
-                                                               if(currentanimation==drawrightanim||currentanimation==crouchdrawrightanim){
-                                                                       targetanimation=getIdle();
-                                                                       if(currentanimation==crouchdrawrightanim){
-                                                                               targetanimation=getCrouch();
+                                                               if(animCurrent==drawrightanim||animCurrent==crouchdrawrightanim){
+                                                                       animTarget=getIdle();
+                                                                       if(animCurrent==crouchdrawrightanim){
+                                                                               animTarget=getCrouch();
                                                                        }
                                                                        if(weaponactive==-1)weaponactive=0;
                                                                        else if(weaponactive==0){
@@ -3269,23 +3279,23 @@ void    Person::DoAnimations(){
                                                                                emit_sound_at(knifedrawsound, coords, 128.);
                                                                        }
                                                                }
-                                                               if(currentanimation==rollanim){
-                                                                       targetanimation=getCrouch();
+                                                               if(animCurrent==rollanim){
+                                                                       animTarget=getCrouch();
                                                                        FootLand(0,1);
                                                                        FootLand(1,1);
                                                                }
                                                                if(isFlip()){
-                                                                       if(targetanimation==walljumprightkickanim){
+                                                                       if(animTarget==walljumprightkickanim){
                                                                                targetrot=-190;
                                                                        }
-                                                                       if(targetanimation==walljumpleftkickanim){
+                                                                       if(animTarget==walljumpleftkickanim){
                                                                                targetrot=190;
                                                                        }
-                                                                       targetanimation=jumpdownanim;
+                                                                       animTarget=jumpdownanim;
                                                                }
-                                                               if(currentanimation==climbanim){
-                                                                       targetanimation=getCrouch();
-                                                                       targetframe=1;
+                                                               if(animCurrent==climbanim){
+                                                                       animTarget=getCrouch();
+                                                                       frameTarget=1;
                                                                        coords+=facing*.1;
                                                                        if(!isnormal(coords.x))
                                                                                coords=oldcoords;
@@ -3298,23 +3308,23 @@ void    Person::DoAnimations(){
                                                                        collided=0;
                                                                        avoidcollided=0;
                                                                }
-                                                               if(targetanimation==rabbitkickreversalanim){
-                                                                       targetanimation=getCrouch();
+                                                               if(animTarget==rabbitkickreversalanim){
+                                                                       animTarget=getCrouch();
                                                                        lastfeint=0;
                                                                }
-                                                               if(targetanimation==jumpreversalanim){
-                                                                       targetanimation=getCrouch();
+                                                               if(animTarget==jumpreversalanim){
+                                                                       animTarget=getCrouch();
                                                                        lastfeint=0;
                                                                }
-                                                               if(targetanimation==walljumprightanim||targetanimation==walljumpbackanim||targetanimation==walljumpfrontanim){
-                                                                       if(attackkeydown&&targetanimation!=walljumpfrontanim){
+                                                               if(animTarget==walljumprightanim||animTarget==walljumpbackanim||animTarget==walljumpfrontanim){
+                                                                       if(attackkeydown&&animTarget!=walljumpfrontanim){
                                                                                int closest=-1;
                                                                                float closestdist=-1;
                                                                                float distance;
                                                                                if(numplayers>1)
                                                                                        for(i=0;i<numplayers;i++){
                                                                                                if(id!=i&&player[i].coords.y<coords.y&&!player[i].skeleton.free){
-                                                                                                       distance=findDistancefast(&player[i].coords,&coords);
+                                                                                                       distance=distsq(&player[i].coords,&coords);
                                                                                                        if(closestdist==-1||distance<closestdist){
                                                                                                                closestdist=distance;
                                                                                                                closest=i;
@@ -3323,47 +3333,47 @@ void    Person::DoAnimations(){
                                                                                        }
                                                                                        if(closestdist>0&&closest>=0&&closestdist<16){
                                                                                                victim=&player[closest];
-                                                                                               targetanimation=walljumprightkickanim;
-                                                                                               targetframe=0;
+                                                                                               animTarget=walljumprightkickanim;
+                                                                                               frameTarget=0;
                                                                                                XYZ rotatetarget=victim->coords-coords;
                                                                                                Normalise(&rotatetarget);
-                                                                                               rotation=-asin(0-rotatetarget.x);
-                                                                                               rotation*=360/6.28;
-                                                                                               if(rotatetarget.z<0)rotation=180-rotation;
+                                                                                               yaw=-asin(0-rotatetarget.x);
+                                                                                               yaw*=360/6.28;
+                                                                                               if(rotatetarget.z<0)yaw=180-yaw;
                                                                                                targettilt2=-asin(rotatetarget.y)*360/6.28;
                                                                                                velocity=(victim->coords-coords)*4;
                                                                                                velocity.y+=2;
                                                                                                transspeed=40;
                                                                                        }
                                                                        }
-                                                                       if(targetanimation==walljumpbackanim){
-                                                                               targetanimation=backflipanim;
-                                                                               targetframe=3;
+                                                                       if(animTarget==walljumpbackanim){
+                                                                               animTarget=backflipanim;
+                                                                               frameTarget=3;
                                                                                velocity=facing*-8;
                                                                                velocity.y=4;
                                                                                if(id==0)
                                                                                  resume_stream(whooshsound);
                                                                        }
-                                                                       if(targetanimation==walljumprightanim){
-                                                                               targetanimation=rightflipanim;
-                                                                               targetframe=4;
-                                                                               targetrotation-=90;
-                                                                               rotation-=90;
+                                                                       if(animTarget==walljumprightanim){
+                                                                               animTarget=rightflipanim;
+                                                                               frameTarget=4;
+                                                                               targetyaw-=90;
+                                                                               yaw-=90;
                                                                                velocity=DoRotation(facing,0,30,0)*-8;
                                                                                velocity.y=4;
                                                                        }
-                                                                       if(targetanimation==walljumpfrontanim){
-                                                                               targetanimation=frontflipanim;
-                                                                               targetframe=2;
-                                                                               //targetrotation-=180;
-                                                                               ////rotation-=180;
+                                                                       if(animTarget==walljumpfrontanim){
+                                                                               animTarget=frontflipanim;
+                                                                               frameTarget=2;
+                                                                               //targetyaw-=180;
+                                                                               ////yaw-=180;
                                                                                velocity=facing*8;
                                                                                velocity.y=4;
                                                                        }
                                                                        if(id==0)
                                                                          resume_stream(whooshsound);
                                                                }
-                                                               if(targetanimation==walljumpleftanim){
+                                                               if(animTarget==walljumpleftanim){
                                                                        if(attackkeydown){
                                                                                int closest=-1;
                                                                                float closestdist=-1;
@@ -3371,7 +3381,7 @@ void      Person::DoAnimations(){
                                                                                if(numplayers>1)
                                                                                        for(i=0;i<numplayers;i++){
                                                                                                if(id!=i&&player[i].coords.y<coords.y&&!player[i].skeleton.free){
-                                                                                                       distance=findDistancefast(&player[i].coords,&coords);
+                                                                                                       distance=distsq(&player[i].coords,&coords);
                                                                                                        if(closestdist==-1||distance<closestdist){
                                                                                                                closestdist=distance;
                                                                                                                closest=i;
@@ -3380,94 +3390,92 @@ void    Person::DoAnimations(){
                                                                                        }
                                                                                        if(closestdist>0&&closest>=0&&closestdist<16){
                                                                                                victim=&player[closest];
-                                                                                               targetanimation=walljumpleftkickanim;
-                                                                                               targetframe=0;
+                                                                                               animTarget=walljumpleftkickanim;
+                                                                                               frameTarget=0;
                                                                                                XYZ rotatetarget=victim->coords-coords;
                                                                                                Normalise(&rotatetarget);
-                                                                                               rotation=-asin(0-rotatetarget.x);
-                                                                                               rotation*=360/6.28;
-                                                                                               if(rotatetarget.z<0)rotation=180-rotation;
+                                                                                               yaw=-asin(0-rotatetarget.x);
+                                                                                               yaw*=360/6.28;
+                                                                                               if(rotatetarget.z<0)yaw=180-yaw;
                                                                                                targettilt2=-asin(rotatetarget.y)*360/6.28;
                                                                                                velocity=(victim->coords-coords)*4;
                                                                                                velocity.y+=2;
                                                                                                transspeed=40;
                                                                                        }
                                                                        }
-                                                                       if(targetanimation!=walljumpleftkickanim){
-                                                                               targetanimation=leftflipanim;
-                                                                               targetframe=4;
-                                                                               targetrotation+=90;
-                                                                               rotation+=90;
+                                                                       if(animTarget!=walljumpleftkickanim){
+                                                                               animTarget=leftflipanim;
+                                                                               frameTarget=4;
+                                                                               targetyaw+=90;
+                                                                               yaw+=90;
                                                                                velocity=DoRotation(facing,0,-30,0)*-8;
                                                                                velocity.y=4;
                                                                        }
                                                                        if(id==0)
                                                                          resume_stream(whooshsound);
                                                                }
-                                                               if(targetanimation==sneakattackanim){
-                                                                       float ycoords=oldcoords.y;
-                                                                       currentanimation=getCrouch();
-                                                                       targetanimation=getCrouch();
-                                                                       targetframe=1;
-                                                                       currentframe=0;
-                                                                       targetrotation+=180;
-                                                                       rotation+=180;
+                                                               if(animTarget==sneakattackanim){
+                                                                       animCurrent=getCrouch();
+                                                                       animTarget=getCrouch();
+                                                                       frameTarget=1;
+                                                                       frameCurrent=0;
+                                                                       targetyaw+=180;
+                                                                       yaw+=180;
                                                                        targettilt2*=-1;
                                                                        tilt2*=-1;
                                                                        transspeed=1000000;
-                                                                       targetheadrotation+=180;
+                                                                       targetheadyaw+=180;
                                                                        coords-=facing*.7;
                                                                        if(onterrain)coords.y=terrain.getHeight(coords.x,coords.z);
 
                                                                        lastfeint=0;
                                                                }
-                                                               if(targetanimation==knifesneakattackanim||targetanimation==swordsneakattackanim){
-                                                                       float ycoords=oldcoords.y;
-                                                                       targetanimation=getIdle();
-                                                                       targetframe=0;
+                                                               if(animTarget==knifesneakattackanim||animTarget==swordsneakattackanim){
+                                                                       animTarget=getIdle();
+                                                                       frameTarget=0;
                                                                        if(onterrain)coords.y=terrain.getHeight(coords.x,coords.z);
 
                                                                        lastfeint=0;
                                                                }
-                                                               if(currentanimation==knifefollowanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==knifefollowanim){
+                                                                       animTarget=getIdle();
                                                                        lastfeint=0;
                                                                }
-                                                               if(animation[targetanimation].attack==reversal&&currentanimation!=sneakattackanim&&currentanimation!=knifesneakattackanim&&currentanimation!=swordsneakattackanim&&currentanimation!=knifefollowanim){
+                                                               if(animation[animTarget].attack==reversal&&animCurrent!=sneakattackanim&&animCurrent!=knifesneakattackanim&&animCurrent!=swordsneakattackanim&&animCurrent!=knifefollowanim){
                                                                        float ycoords=oldcoords.y;
-                                                                       targetanimation=getStop();
-                                                                       targetrotation+=180;
-                                                                       rotation+=180;
+                                                                       animTarget=getStop();
+                                                                       targetyaw+=180;
+                                                                       yaw+=180;
                                                                        targettilt2*=-1;
                                                                        tilt2*=-1;
                                                                        transspeed=1000000;
-                                                                       targetheadrotation+=180;
+                                                                       targetheadyaw+=180;
                                                                        if(!isnormal(coords.x))
                                                                                coords=oldcoords;
-                                                                       if(currentanimation==spinkickreversalanim||currentanimation==swordslashreversalanim)
+                                                                       if(animCurrent==spinkickreversalanim||animCurrent==swordslashreversalanim)
                                                                                oldcoords=coords+facing*.5;
-                                                                       else if(currentanimation==sweepreversalanim)
+                                                                       else if(animCurrent==sweepreversalanim)
                                                                                oldcoords=coords+facing*1.1;
-                                                                       else if(currentanimation==upunchreversalanim){
+                                                                       else if(animCurrent==upunchreversalanim){
                                                                                oldcoords=coords+facing*1.5;
-                                                                               targetrotation+=180;
-                                                                               rotation+=180;
-                                                                               targetheadrotation+=180;
+                                                                               targetyaw+=180;
+                                                                               yaw+=180;
+                                                                               targetheadyaw+=180;
                                                                                targettilt2*=-1;
                                                                                tilt2*=-1;
                                                                        }
-                                                                       else if(currentanimation==knifeslashreversalanim){
+                                                                       else if(animCurrent==knifeslashreversalanim){
                                                                                oldcoords=coords+facing*.5;
-                                                                               targetrotation+=90;
-                                                                               rotation+=90;
-                                                                               targetheadrotation+=90;
+                                                                               targetyaw+=90;
+                                                                               yaw+=90;
+                                                                               targetheadyaw+=90;
                                                                                targettilt2=0;
                                                                                tilt2=0;
                                                                        }
-                                                                       else if(currentanimation==staffspinhitreversalanim){
-                                                                               targetrotation+=180;
-                                                                               rotation+=180;
-                                                                               targetheadrotation+=180;
+                                                                       else if(animCurrent==staffspinhitreversalanim){
+                                                                               targetyaw+=180;
+                                                                               yaw+=180;
+                                                                               targetheadyaw+=180;
                                                                                targettilt2=0;
                                                                                tilt2=0;
                                                                        }
@@ -3479,70 +3487,70 @@ void    Person::DoAnimations(){
 
                                                                        lastfeint=0;
                                                                }
-                                                               if(currentanimation==knifesneakattackedanim||currentanimation==swordsneakattackedanim){
+                                                               if(animCurrent==knifesneakattackedanim||animCurrent==swordsneakattackedanim){
                                                                        velocity=0;
                                                                        velocity.y=-5;
                                                                        RagDoll(0);
                                                                }
-                                                               if(animation[targetanimation].attack==reversed){
+                                                               if(animation[animTarget].attack==reversed){
                                                                        escapednum++;
-                                                                       if(targetanimation==sweepreversedanim)targetrotation+=90;
-                                                                       targetanimation=backhandspringanim;
-                                                                       targetframe=2;
+                                                                       if(animTarget==sweepreversedanim)targetyaw+=90;
+                                                                       animTarget=backhandspringanim;
+                                                                       frameTarget=2;
                                                                        emit_sound_at(landsound, coords, 128);
 
-                                                                       if(currentanimation==upunchreversedanim||currentanimation==swordslashreversedanim){
-                                                                               targetanimation=rollanim;
-                                                                               targetframe=5;
+                                                                       if(animCurrent==upunchreversedanim||animCurrent==swordslashreversedanim){
+                                                                               animTarget=rollanim;
+                                                                               frameTarget=5;
                                                                                oldcoords=coords;
-                                                                               coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0))/2*scale;
+                                                                               coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0))/2*scale;
                                                                                coords.y=oldcoords.y;
                                                                        }
-                                                                       if(currentanimation==knifeslashreversedanim){
-                                                                               targetanimation=rollanim;
-                                                                               targetframe=0;
-                                                                               targetrotation+=90;
-                                                                               rotation+=90;
+                                                                       if(animCurrent==knifeslashreversedanim){
+                                                                               animTarget=rollanim;
+                                                                               frameTarget=0;
+                                                                               targetyaw+=90;
+                                                                               yaw+=90;
                                                                                oldcoords=coords;
-                                                                               coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0))/2*scale;
+                                                                               coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0))/2*scale;
                                                                                coords.y=oldcoords.y;
                                                                        }
                                                                }
                                                                if(wasFlip()){
-                                                                       targetanimation=jumpdownanim;
+                                                                       animTarget=jumpdownanim;
                                                                }
-                                                               if(wasLanding())targetanimation=getIdle();
-                                                               if(wasLandhard())targetanimation=getIdle();
-                                                               if(currentanimation==spinkickanim||currentanimation==getupfrombackanim||currentanimation==getupfromfrontanim||currentanimation==lowkickanim){
-                                                                       targetanimation=getIdle();
+                                                               if(wasLanding())animTarget=getIdle();
+                                                               if(wasLandhard())animTarget=getIdle();
+                                                               if(animCurrent==spinkickanim||animCurrent==getupfrombackanim||animCurrent==getupfromfrontanim||animCurrent==lowkickanim){
+                                                                       animTarget=getIdle();
                                                                        oldcoords=coords;
-                                                                       coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0))/2*scale;
+                                                                       coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0))/2*scale;
                                                                        coords.y=oldcoords.y;
-                                                                       //coords+=DoRotation(animation[currentanimation].offset,0,rotation,0)*scale;
+                                                                       //coords+=DoRotation(animation[animCurrent].offset,0,yaw,0)*scale;
                                                                        targetoffset.y=coords.y;
                                                                        if(onterrain)targetoffset.y=terrain.getHeight(coords.x,coords.z);
-                                                                       currentoffset=DoRotation(animation[currentanimation].offset*-1,0,rotation,0)*scale;
+                                                                       currentoffset=DoRotation(animation[animCurrent].offset*-1,0,yaw,0)*scale;
                                                                        currentoffset.y-=(coords.y-targetoffset.y);
                                                                        coords.y=targetoffset.y;
                                                                        targetoffset=0;
                                                                        normalsupdatedelay=0;
                                                                }
-                                                               if(currentanimation==upunchanim){
-                                                                       targetanimation=getStop();
+                                                               if(animCurrent==upunchanim){
+                                                                       animTarget=getStop();
                                                                        normalsupdatedelay=0;
                                                                        lastfeint=0;
                                                                }
-                                                               if(currentanimation==rabbitkickanim&&targetanimation!=backflipanim){
-                                                                       targetrotation=rotation;
+                                                               if(animCurrent==rabbitkickanim&&animTarget!=backflipanim){
+                                                                       targetyaw=yaw;
                                                                        bool hasstaff;
                                                                        hasstaff=0;
-                                                                       if(num_weapons>0)if(weapons.type[0]==staff)hasstaff=1;
+                                                                       if(num_weapons>0)if(weapons[0].getType()==staff)hasstaff=1;
                                                                        if(!hasstaff)DoDamage(35);
                                                                        RagDoll(0);
                                                                        lastfeint=0;
                                                                        rabbitkickragdoll=1;
                                                                }
-                                                               if(currentanimation==rabbitkickreversedanim){
+                                                               if(animCurrent==rabbitkickreversedanim){
                                                                        if(!feint){
                                                                                velocity=0;
                                                                                velocity.y=-10;
@@ -3553,19 +3561,19 @@ void    Person::DoAnimations(){
                                                                        }
                                                                        if(feint){
                                                                                escapednum++;
-                                                                               targetanimation=rollanim;
+                                                                               animTarget=rollanim;
                                                                                coords+=facing;
-                                                                               if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
+                                                                               if(id==0)pause_sound(whooshsound);
                                                                        }
                                                                        lastfeint=0;
                                                                }
-                                                               if(currentanimation==rabbittackledbackanim||currentanimation==rabbittackledfrontanim){
+                                                               if(animCurrent==rabbittackledbackanim||animCurrent==rabbittackledfrontanim){
                                                                        velocity=0;
                                                                        velocity.y=-10;
                                                                        RagDoll(0);
                                                                        skeleton.spinny=0;
                                                                }
-                                                               if(currentanimation==jumpreversedanim){
+                                                               if(animCurrent==jumpreversedanim){
                                                                        if(!feint){
                                                                                velocity=0;
                                                                                velocity.y=-10;
@@ -3576,81 +3584,81 @@ void    Person::DoAnimations(){
                                                                        }
                                                                        if(feint){
                                                                                escapednum++;
-                                                                               targetanimation=rollanim;
+                                                                               animTarget=rollanim;
                                                                                coords+=facing*2;
-                                                                               if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
+                                                                               if(id==0)pause_sound(whooshsound);
                                                                        }
                                                                        lastfeint=0;
                                                                }
 
-                                                               if(animation[currentanimation].attack==normalattack&&!victim->skeleton.free&&victim->targetanimation!=staggerbackhighanim&&victim->targetanimation!=staggerbackhardanim&&targetanimation!=winduppunchblockedanim&&targetanimation!=blockhighleftanim&&targetanimation!=swordslashparryanim&&targetanimation!=swordslashparriedanim&&targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim){
-                                                                       targetanimation=getupfromfrontanim;
+                                                               if(animation[animCurrent].attack==normalattack&&!victim->skeleton.free&&victim->animTarget!=staggerbackhighanim&&victim->animTarget!=staggerbackhardanim&&animTarget!=winduppunchblockedanim&&animTarget!=blockhighleftanim&&animTarget!=swordslashparryanim&&animTarget!=swordslashparriedanim&&animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim){
+                                                                       animTarget=getupfromfrontanim;
                                                                        lastfeint=0;
                                                                }
-                                                               else if(animation[currentanimation].attack==normalattack){
-                                                                       targetanimation=getIdle();
+                                                               else if(animation[animCurrent].attack==normalattack){
+                                                                       animTarget=getIdle();
                                                                        lastfeint=0;
                                                                }
-                                                               if(currentanimation==blockhighleftanim&&aitype!=playercontrolled){
-                                                                       targetanimation=blockhighleftstrikeanim;
+                                                               if(animCurrent==blockhighleftanim&&aitype!=playercontrolled){
+                                                                       animTarget=blockhighleftstrikeanim;
                                                                }
-                                                               if(currentanimation==knifeslashstartanim||currentanimation==knifethrowanim||currentanimation==swordslashanim||currentanimation==staffhitanim||currentanimation==staffgroundsmashanim||currentanimation==staffspinhitanim){
-                                                                       targetanimation=getIdle();
+                                                               if(animCurrent==knifeslashstartanim||animCurrent==knifethrowanim||animCurrent==swordslashanim||animCurrent==staffhitanim||animCurrent==staffgroundsmashanim||animCurrent==staffspinhitanim){
+                                                                       animTarget=getIdle();
                                                                        lastfeint=0;
                                                                }
-                                                               if(currentanimation==spinkickanim&&victim->skeleton.free){
-                                                                       if(creature==rabbittype)targetanimation=fightidleanim;
+                                                               if(animCurrent==spinkickanim&&victim->skeleton.free){
+                                                                       if(creature==rabbittype)animTarget=fightidleanim;
                                                                }
                                                        }
                                                        target=0;
 
                                                        if(isIdle()&&!wasIdle())normalsupdatedelay=0;
 
-                                                       if(currentanimation==jumpupanim&&velocity.y<0&&!isFlip()){
-                                                               targetanimation=jumpdownanim;
+                                                       if(animCurrent==jumpupanim&&velocity.y<0&&!isFlip()){
+                                                               animTarget=jumpdownanim;
                                                        }
                }
                if(!skeleton.free){
                        oldtarget=target;
-                       if(!transspeed&&animation[targetanimation].attack!=2&&animation[targetanimation].attack!=3){
+                       if(!transspeed&&animation[animTarget].attack!=2&&animation[animTarget].attack!=3){
                                if(!isRun()||!wasRun()){
-                                       if(animation[targetanimation].speed[targetframe]>animation[currentanimation].speed[currentframe])
-                                               target+=multiplier*animation[targetanimation].speed[targetframe]*speed*2;
-                                       if(animation[targetanimation].speed[targetframe]<=animation[currentanimation].speed[currentframe])
-                                               target+=multiplier*animation[currentanimation].speed[currentframe]*speed*2;
+                                       if(animation[animTarget].speed[frameTarget]>animation[animCurrent].speed[frameCurrent])
+                                               target+=multiplier*animation[animTarget].speed[frameTarget]*speed*2;
+                                       if(animation[animTarget].speed[frameTarget]<=animation[animCurrent].speed[frameCurrent])
+                                               target+=multiplier*animation[animCurrent].speed[frameCurrent]*speed*2;
                                }
                                if(isRun()&&wasRun()){
                                        float tempspeed;
                                        tempspeed=velspeed;
                                        if(tempspeed<10*speedmult)tempspeed=10*speedmult;
-                                       target+=multiplier*animation[targetanimation].speed[currentframe]*speed*1.7*tempspeed/(speed*45*scale);
+                                       target+=multiplier*animation[animTarget].speed[frameCurrent]*speed*1.7*tempspeed/(speed*45*scale);
                                }
                        }
                        else if(transspeed)target+=multiplier*transspeed*speed*2;
                        else{
                                if(!isRun()||!wasRun()){
-                                       if(animation[targetanimation].speed[targetframe]>animation[currentanimation].speed[currentframe])
-                                               target+=multiplier*animation[targetanimation].speed[targetframe]*2;
-                                       if(animation[targetanimation].speed[targetframe]<=animation[currentanimation].speed[currentframe])
-                                               target+=multiplier*animation[currentanimation].speed[currentframe]*2;
+                                       if(animation[animTarget].speed[frameTarget]>animation[animCurrent].speed[frameCurrent])
+                                               target+=multiplier*animation[animTarget].speed[frameTarget]*2;
+                                       if(animation[animTarget].speed[frameTarget]<=animation[animCurrent].speed[frameCurrent])
+                                               target+=multiplier*animation[animCurrent].speed[frameCurrent]*2;
                                }
                        }
 
-                       if(currentanimation!=targetanimation)target=(target+oldtarget)/2;
+                       if(animCurrent!=animTarget)target=(target+oldtarget)/2;
 
-                       if(target>1){currentframe=targetframe; target=1;}
+                       if(target>1){frameCurrent=frameTarget; target=1;}
                        oldrot=rot;
                        rot=targetrot*target;
-                       rotation+=rot-oldrot;
+                       yaw+=rot-oldrot;
                        if(target==1){
                                rot=0;
                                oldrot=0;
                                targetrot=0;
                        }
-                       if(currentanimation!=oldcurrentanimation||targetanimation!=oldtargetanimation||((currentframe!=oldcurrentframe||targetframe!=oldtargetframe)&&!calcrot)){
+                       if(animCurrent!=oldanimCurrent||animTarget!=oldanimTarget||((frameCurrent!=oldframeCurrent||frameTarget!=oldframeTarget)&&!calcrot)){
                                //Old rotates
                                for(i=0;i<skeleton.num_joints;i++){
-                                       skeleton.joints[i].position=animation[currentanimation].position[i][currentframe];
+                                       skeleton.joints[i].position=animation[animCurrent].position[i][frameCurrent];
                                }
 
                                skeleton.FindForwards();
@@ -3658,7 +3666,7 @@ void      Person::DoAnimations(){
                                for(i=0;i<skeleton.num_muscles;i++){
                                        if(skeleton.muscles[i].visible)
                                        {
-                                               skeleton.FindRotationMuscle(i,targetanimation);
+                                               skeleton.FindRotationMuscle(i,animTarget);
                                        }
                                }
                                for(i=0;i<skeleton.num_muscles;i++){
@@ -3672,7 +3680,7 @@ void      Person::DoAnimations(){
 
                                //New rotates
                                for(i=0;i<skeleton.num_joints;i++){
-                                       skeleton.joints[i].position=animation[targetanimation].position[i][targetframe];
+                                       skeleton.joints[i].position=animation[animTarget].position[i][frameTarget];
                                }
 
                                skeleton.FindForwards();
@@ -3680,7 +3688,7 @@ void      Person::DoAnimations(){
                                for(i=0;i<skeleton.num_muscles;i++){
                                        if(skeleton.muscles[i].visible)
                                        {
-                                               skeleton.FindRotationMuscle(i,targetanimation);
+                                               skeleton.FindRotationMuscle(i,animTarget);
                                        }
                                }
                                for(i=0;i<skeleton.num_muscles;i++){
@@ -3698,16 +3706,16 @@ void    Person::DoAnimations(){
                                        }
                                }
                        }
-                       if(currentframe>=animation[currentanimation].numframes)currentframe=animation[currentanimation].numframes-1;
+                       if(frameCurrent>=animation[animCurrent].numframes)frameCurrent=animation[animCurrent].numframes-1;
 
-                       oldcurrentanimation=currentanimation;
-                       oldtargetanimation=targetanimation;
-                       oldtargetframe=targetframe;
-                       oldcurrentframe=currentframe;
+                       oldanimCurrent=animCurrent;
+                       oldanimTarget=animTarget;
+                       oldframeTarget=frameTarget;
+                       oldframeCurrent=frameCurrent;
 
                        for(i=0;i<skeleton.num_joints;i++){
-                               skeleton.joints[i].velocity=(animation[currentanimation].position[i][currentframe]*(1-target)+animation[targetanimation].position[i][targetframe]*(target)-skeleton.joints[i].position)/multiplier;
-                               skeleton.joints[i].position=animation[currentanimation].position[i][currentframe]*(1-target)+animation[targetanimation].position[i][targetframe]*(target);
+                               skeleton.joints[i].velocity=(animation[animCurrent].position[i][frameCurrent]*(1-target)+animation[animTarget].position[i][frameTarget]*(target)-skeleton.joints[i].position)/multiplier;
+                               skeleton.joints[i].position=animation[animCurrent].position[i][frameCurrent]*(1-target)+animation[animTarget].position[i][frameTarget]*(target);
                        }
                        offset=currentoffset*(1-target)+targetoffset*target;
                        for(i=0;i<skeleton.num_muscles;i++){
@@ -3722,8 +3730,8 @@ void      Person::DoAnimations(){
 
                if(isLanding()&&landhard){
                        if(id==0)camerashake+=.4;
-                       targetanimation=getLandhard();
-                       targetframe=0;
+                       animTarget=getLandhard();
+                       frameTarget=0;
                        target=0;
                        landhard=0;
                        transspeed=15;
@@ -3742,7 +3750,6 @@ void      Person::DoStuff(){
        static int howmany;
        static int bloodsize;
        static int startx,starty,endx,endy;
-       static int texdetailint;
        static GLubyte color;
        static XYZ bloodvel;
 
@@ -3788,18 +3795,18 @@ void    Person::DoStuff(){
                superruntoggle=0;
                if(aitype!=passivetype){
                        superruntoggle=1;
-                       if(aitype==attacktypecutoff&&(player[0].isIdle()||player[0].isCrouch()||player[0].skeleton.free||player[0].targetanimation==getupfrombackanim||player[0].targetanimation==getupfromfrontanim||player[0].targetanimation==sneakanim)&&findDistancefast(&coords,&player[0].coords)<16){
+                       if(aitype==attacktypecutoff&&(player[0].isIdle()||player[0].isCrouch()||player[0].skeleton.free||player[0].animTarget==getupfrombackanim||player[0].animTarget==getupfromfrontanim||player[0].animTarget==sneakanim)&&distsq(&coords,&player[0].coords)<16){
                                superruntoggle=0;
                        }
                }
                if(scale<0.2)superruntoggle=0;
-               if(targetanimation==wolfrunninganim&&!superruntoggle){
-                       targetanimation=getRun();
-                       targetframe=0;
+               if(animTarget==wolfrunninganim&&!superruntoggle){
+                       animTarget=getRun();
+                       frameTarget=0;
                }
        }
        if(weaponactive==-1&&num_weapons>0){
-               if(weapons.type[weaponids[0]]==staff){
+               if(weapons[weaponids[0]].getType()==staff){
                        weaponactive=0;
                }
        }
@@ -3812,7 +3819,7 @@ void      Person::DoStuff(){
                if(burnt>.6)burnt=.6;
                OPENAL_SetVolume(channels[stream_firesound], 256+256*findLength(&velocity)/3);
 
-               if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
+               if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){
                        float gLoc[3];
                        float vel[3];
                        gLoc[0]=coords.x;
@@ -3833,7 +3840,7 @@ void      Person::DoStuff(){
                howmany=abs(Random()%(skeleton.num_joints));
                if(!skeleton.free)flatvelocity=(coords-oldcoords)/multiplier/2;//velocity/2;
                if(skeleton.free)flatvelocity=skeleton.joints[howmany].velocity*scale/2;
-               if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords;
+               if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords;
                if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords;
                Sprite::MakeSprite(flamesprite, flatfacing,flatvelocity, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1);
        }
@@ -3843,7 +3850,7 @@ void      Person::DoStuff(){
                howmany=abs(Random()%(skeleton.num_joints));
                if(!skeleton.free)flatvelocity=(coords-oldcoords)/multiplier/2;//velocity/2;
                if(skeleton.free)flatvelocity=skeleton.joints[howmany].velocity*scale/2;
-               if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords;
+               if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords;
                if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords;
                Sprite::MakeSprite(breathsprite, flatfacing,flatvelocity, 1,1,1, .6+(float)abs(Random()%100)/200-.25, .3);
        }
@@ -3851,7 +3858,7 @@ void      Person::DoStuff(){
        if(bleeding>0){
                bleeding-=multiplier*.3;
                if(bloodtoggle==2){
-                       glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
+                       skeleton.drawmodel.textureptr.bind();
                        if(bleeding<=0&&(detail!=2||osx))DoMipmaps();
                }
        }
@@ -3865,15 +3872,15 @@ void    Person::DoStuff(){
                        bloodvel=0;
                        if(!skeleton.free){
                                bloodvel.z=5*neckspurtamount;
-                               bloodvel=DoRotation(bloodvel,((float)(Random()%100))/40,rotation+((float)(Random()%100))/40,0)*scale;
+                               bloodvel=DoRotation(bloodvel,((float)(Random()%100))/40,yaw+((float)(Random()%100))/40,0)*scale;
                        }
                        if(skeleton.free){
                                bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/40,((float)(Random()%100))/40,0);
                        }
-                       if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/40,rotation+((float)(Random()%100))/40,0)*scale;
+                       if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/40,yaw+((float)(Random()%100))/40,0)*scale;
                        if(!skeleton.free)bloodvel+=DoRotation(velocity,((float)(Random()%100))/40,((float)(Random()%100))/40,0)*scale;
                        if(skeleton.free)Sprite::MakeSprite(bloodsprite, (skeleton.joints[skeleton.jointlabels[neck]].position+(skeleton.joints[skeleton.jointlabels[neck]].position-skeleton.joints[skeleton.jointlabels[head]].position)/5)*scale+coords,bloodvel, 1,1,1, .05, .9);
-                       if(!skeleton.free)Sprite::MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position+(skeleton.joints[skeleton.jointlabels[neck]].position-skeleton.joints[skeleton.jointlabels[head]].position)/5,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, .9);
+                       if(!skeleton.free)Sprite::MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position+(skeleton.joints[skeleton.jointlabels[neck]].position-skeleton.joints[skeleton.jointlabels[head]].position)/5,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, .9);
                        neckspurtparticledelay=.05;
                }
                if(neckspurtdelay<0){
@@ -3889,27 +3896,27 @@ void    Person::DoStuff(){
                        XYZ bloodvel;
                        if(bloodtoggle){
                                bloodvel=0;
-                               if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[abdomen]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
+                               if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[abdomen]].velocity,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
                                if(!skeleton.free)bloodvel+=DoRotation(velocity,((float)(Random()%100))/4,((float)(Random()%100))/4,0)*scale;
                                if(skeleton.free)Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[abdomen]].position*scale+coords,bloodvel, 1,1,1, .05, 1);
-                               if(!skeleton.free)Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[abdomen]].position+skeleton.joints[skeleton.jointlabels[abdomen]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
+                               if(!skeleton.free)Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[abdomen]].position+skeleton.joints[skeleton.jointlabels[abdomen]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
                        }
                }
                bloodloss+=deathbleeding*multiplier*80;
                deathbleeding-=multiplier*1.6;
                //if(id==0)deathbleeding-=multiplier*.2;
                if(deathbleeding<0)deathbleeding=0;
-               if(bloodloss>damagetolerance&&animation[targetanimation].attack==neutral){
+               if(bloodloss>damagetolerance&&animation[animTarget].attack==neutral){
                        if(weaponactive!=-1){
-                               weapons.owner[weaponids[0]]=-1;
-                               weapons.velocity[weaponids[0]]=velocity*scale*-.3;
-                               weapons.velocity[weaponids[0]].x+=.01;
-                               weapons.tipvelocity[weaponids[0]]=velocity*scale;
-                               weapons.missed[weaponids[0]]=1;
-                               weapons.hitsomething[weaponids[0]]=0;
-                               weapons.freetime[weaponids[0]]=0;
-                               weapons.firstfree[weaponids[0]]=1;
-                               weapons.physics[weaponids[0]]=1;
+                               weapons[weaponids[0]].owner=-1;
+                               weapons[weaponids[0]].velocity=velocity*scale*-.3;
+                               weapons[weaponids[0]].velocity.x+=.01;
+                               weapons[weaponids[0]].tipvelocity=velocity*scale;
+                               weapons[weaponids[0]].missed=1;
+                               weapons[weaponids[0]].hitsomething=0;
+                               weapons[weaponids[0]].freetime=0;
+                               weapons[weaponids[0]].firstfree=1;
+                               weapons[weaponids[0]].physics=1;
                                num_weapons--;
                                if(num_weapons){
                                        weaponids[0]=weaponids[num_weapons];
@@ -3933,7 +3940,7 @@ void      Person::DoStuff(){
                          award_bonus(0, Wolfbonus);
                        }
                        dead=2;
-                       if(targetanimation==knifefollowedanim&&!skeleton.free){
+                       if(animTarget==knifefollowedanim&&!skeleton.free){
                                for(i=0;i<skeleton.num_joints;i++){
                                        skeleton.joints[i].velocity=0;
                                        skeleton.joints[i].velocity.y=-2;
@@ -3947,14 +3954,13 @@ void    Person::DoStuff(){
                }
        }
 
-       if(texupdatedelay<0&&bleeding>0&&bloodtoggle==2&&findDistancefast(&viewer,&coords)<9){
+       if(texupdatedelay<0&&bleeding>0&&bloodtoggle==2&&distsq(&viewer,&coords)<9){
                texupdatedelay=.12;
 
                bloodsize=5-realtexdetail;
 
                startx=0;
                starty=0;
-               texdetailint=realtexdetail;
                startx=bleedy;//abs(Random()%(skeleton.skinsize-bloodsize-1));
                starty=bleedx;//abs(Random()%(skeleton.skinsize-bloodsize-1));
                endx=startx+bloodsize;
@@ -3978,7 +3984,7 @@ void      Person::DoStuff(){
                        }
                }
                if(!osx&&detail>1){
-                       glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
+                       skeleton.drawmodel.textureptr.bind();
                        DoMipmaps();
                }
 
@@ -4103,11 +4109,11 @@ void    Person::DoStuff(){
                        if(environment==snowyenvironment){
                                XYZ footpoint;
                                XYZ footvel;
-                               if(!skeleton.free)footvel=DoRotation(skeleton.specialforward[0],0,rotation,0)*-1;
+                               if(!skeleton.free)footvel=DoRotation(skeleton.specialforward[0],0,yaw,0)*-1;
                                if(skeleton.free)footvel=skeleton.specialforward[0]*-1;
-                               if(!skeleton.free)footpoint=DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords;
+                               if(!skeleton.free)footpoint=DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords;
                                if(skeleton.free)footpoint=((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2)*scale+coords;
-                               if(targetanimation==sleepanim)footvel=DoRotation(footvel,0,90,0);
+                               if(animTarget==sleepanim)footvel=DoRotation(footvel,0,90,0);
                                Sprite::MakeSprite(breathsprite, footpoint+footvel*.2,footvel*.4, 1,1,1, .4, .3);
                        }
                }
@@ -4128,7 +4134,7 @@ void      Person::DoStuff(){
                }
                if(!dead){
                        twitchdelay-=multiplier*1.5;
-                       if(targetanimation!=hurtidleanim){
+                       if(animTarget!=hurtidleanim){
                                if(headmorphstart==0&&headmorphend==0&&twitchdelay<=0){
                                        headmorphness=0;
                                        targetheadmorphness=1;
@@ -4141,7 +4147,7 @@ void      Person::DoStuff(){
                                        headmorphend=0;
                                }
                        }
-                       if((isIdle()||isCrouch())&&targetanimation!=hurtidleanim){
+                       if((isIdle()||isCrouch())&&animTarget!=hurtidleanim){
                                twitchdelay3-=multiplier*1;
                                if(Random()%2==0){
                                        if(righthandmorphstart==0&&righthandmorphend==0&&twitchdelay3<=0){
@@ -4199,14 +4205,14 @@ void    Person::DoStuff(){
        if(creature==wolftype){
                twitchdelay2-=multiplier*1.5;
                if(tailmorphend!=0)
-                       if((isRun()||targetanimation==jumpupanim||targetanimation==jumpdownanim||targetanimation==backflipanim)&&!skeleton.free){
+                       if((isRun()||animTarget==jumpupanim||animTarget==jumpdownanim||animTarget==backflipanim)&&!skeleton.free){
                                tailmorphness=0;
                                targettailmorphness=1;
                                tailmorphend=0;
                                twitchdelay2=.1;
                        }
                        if(tailmorphend!=5)
-                               if(targetanimation==flipanim||targetanimation==frontflipanim||targetanimation==rollanim||skeleton.free){
+                               if(animTarget==flipanim||animTarget==frontflipanim||animTarget==rollanim||skeleton.free){
                                        tailmorphness=0;
                                        targettailmorphness=1;
                                        tailmorphend=5;
@@ -4269,11 +4275,11 @@ void    Person::DoStuff(){
                if(bloodtoggle&&!bled)
                        for(l=0;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
                                j=terrain.patchobjects[whichpatchx][whichpatchz][l];
-                               XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.rotation[j],0);
+                               XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.yaw[j],0);
                                float size=.8;
                                float opacity=.6;
-                               float rotation=0;
-                               objects.model[j].MakeDecal(blooddecalslow,&point,&size,&opacity,&rotation);
+                               float yaw=0;
+                               objects.model[j].MakeDecal(blooddecalslow,&point,&size,&opacity,&yaw);
                        }
                        bled=1;
        }
@@ -4311,15 +4317,15 @@ void    Person::DoStuff(){
                RagDoll(0);
 
                if(weaponactive!=-1){
-                       weapons.owner[weaponids[0]]=-1;
-                       weapons.velocity[weaponids[0]]=velocity*scale*-.3;
-                       weapons.velocity[weaponids[0]].x+=.01;
-                       weapons.tipvelocity[weaponids[0]]=velocity*scale;
-                       weapons.missed[weaponids[0]]=1;
-                       weapons.hitsomething[weaponids[0]]=0;
-                       weapons.freetime[weaponids[0]]=0;
-                       weapons.firstfree[weaponids[0]]=1;
-                       weapons.physics[weaponids[0]]=1;
+                       weapons[weaponids[0]].owner=-1;
+                       weapons[weaponids[0]].velocity=velocity*scale*-.3;
+                       weapons[weaponids[0]].velocity.x+=.01;
+                       weapons[weaponids[0]].tipvelocity=velocity*scale;
+                       weapons[weaponids[0]].missed=1;
+                       weapons[weaponids[0]].hitsomething=0;
+                       weapons[weaponids[0]].freetime=0;
+                       weapons[weaponids[0]].firstfree=1;
+                       weapons[weaponids[0]].physics=1;
                        num_weapons--;
                        if(num_weapons){
                                weaponids[0]=weaponids[num_weapons];
@@ -4333,7 +4339,7 @@ void      Person::DoStuff(){
 
 
 
-               if((id==0||findDistancefast(&coords,&viewer)<50)&&autoslomo){
+               if((id==0||distsq(&coords,&viewer)<50)&&autoslomo){
                        slomo=1;
                        slomodelay=.2;
                }
@@ -4370,15 +4376,15 @@ void    Person::DoStuff(){
                DoBlood(1,255);
 
                if(weaponactive!=-1){
-                       weapons.owner[weaponids[0]]=-1;
-                       weapons.velocity[weaponids[0]]=velocity*scale*-.3;
-                       weapons.velocity[weaponids[0]].x+=.01;
-                       weapons.tipvelocity[weaponids[0]]=velocity*scale;
-                       weapons.missed[weaponids[0]]=1;
-                       weapons.hitsomething[weaponids[0]]=0;
-                       weapons.freetime[weaponids[0]]=0;
-                       weapons.firstfree[weaponids[0]]=1;
-                       weapons.physics[weaponids[0]]=1;
+                       weapons[weaponids[0]].owner=-1;
+                       weapons[weaponids[0]].velocity=velocity*scale*-.3;
+                       weapons[weaponids[0]].velocity.x+=.01;
+                       weapons[weaponids[0]].tipvelocity=velocity*scale;
+                       weapons[weaponids[0]].missed=1;
+                       weapons[weaponids[0]].hitsomething=0;
+                       weapons[weaponids[0]].freetime=0;
+                       weapons[weaponids[0]].firstfree=1;
+                       weapons[weaponids[0]].physics=1;
                        num_weapons--;
                        if(num_weapons){
                                weaponids[0]=weaponids[num_weapons];
@@ -4410,7 +4416,7 @@ void      Person::DoStuff(){
        }
 
        if(skeleton.free==1){
-               if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
+               if(id==0)pause_sound(whooshsound);
 
                if(!dead){
                        //If knocked over, open hands and close mouth
@@ -4460,20 +4466,11 @@ void    Person::DoStuff(){
                        velocity=0;
                }
 
-               float gLoc[3];
-               float vel[3];
-               gLoc[0]=coords.x;
-               gLoc[1]=coords.y;
-               gLoc[2]=coords.z;
-               vel[0]=velocity.x;
-               vel[1]=velocity.y;
-               vel[2]=velocity.z;
-
                if(findLength(&average)<10&&dead&&skeleton.free){
                        skeleton.longdead+=(2000-findLength(&average))*multiplier+multiplier;
                        if(skeleton.longdead>2000){
                                if(skeleton.longdead>6000){
-                                       if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
+                                       if(id==0)pause_sound(whooshsound);
                                        skeleton.free=3;
                                        DrawSkeleton();
                                        skeleton.free=2;
@@ -4488,11 +4485,11 @@ void    Person::DoStuff(){
                                        if(bloodtoggle&&!bled)
                                                for(l=0;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
                                                        j=terrain.patchobjects[whichpatchx][whichpatchz][l];
-                                                       XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.rotation[j],0);
+                                                       XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.yaw[j],0);
                                                        float size=.2*1.2;
                                                        float opacity=.6;
-                                                       float rotation=0;
-                                                       objects.model[j].MakeDecal(blooddecal,&point,&size,&opacity,&rotation);
+                                                       float yaw=0;
+                                                       objects.model[j].MakeDecal(blooddecal,&point,&size,&opacity,&yaw);
                                                }
                                                bled=1;
                                }
@@ -4506,11 +4503,11 @@ void    Person::DoStuff(){
                                        if(bloodtoggle&&!bled)
                                                for(l=0;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
                                                        j=terrain.patchobjects[whichpatchx][whichpatchz][l];
-                                                       XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.rotation[j],0);
+                                                       XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.yaw[j],0);
                                                        float size=.8;
                                                        float opacity=.6;
-                                                       float rotation=0;
-                                                       objects.model[j].MakeDecal(blooddecalslow,&point,&size,&opacity,&rotation);
+                                                       float yaw=0;
+                                                       objects.model[j].MakeDecal(blooddecalslow,&point,&size,&opacity,&yaw);
                                                }
                                                bled=1;
                                }
@@ -4529,7 +4526,7 @@ void      Person::DoStuff(){
                                if(objects.type[i]!=treeleavestype&&objects.type[i]!=bushtype&&objects.type[i]!=firetype){
                                        colviewer=startpoint;
                                        coltarget=endpoint;
-                                       if(objects.model[i].LineCheck(&colviewer,&coltarget,&colpoint,&objects.position[i],&objects.rotation[i])!=-1)canrecover=0;
+                                       if(objects.model[i].LineCheck(&colviewer,&coltarget,&colpoint,&objects.position[i],&objects.yaw[i])!=-1)canrecover=0;
                                }
                        }
                        if(canrecover){
@@ -4552,21 +4549,21 @@ void    Person::DoStuff(){
                                }
                                Normalise(&terrainnormal);
 
-                               targetrotation=-asin(0-terrainnormal.x);
-                               targetrotation*=360/6.28;
-                               if(terrainnormal.z<0)targetrotation=180-targetrotation;
-                               rotation=targetrotation;
+                               targetyaw=-asin(0-terrainnormal.x);
+                               targetyaw*=360/6.28;
+                               if(terrainnormal.z<0)targetyaw=180-targetyaw;
+                               yaw=targetyaw;
 
-                               targetframe=0;
-                               //      targetframe=2;
-                               targetanimation=flipanim;
+                               frameTarget=0;
+                               //      frameTarget=2;
+                               animTarget=flipanim;
                                crouchtogglekeydown=1;
                                target=0;
                                tilt2=0;
                                targettilt2=0;
 
-                               currentanimation=tempanim;
-                               currentframe=0;
+                               animCurrent=tempanim;
+                               frameCurrent=0;
                                target=0;
                                //tilt2=targettilt2;
 
@@ -4574,7 +4571,7 @@ void      Person::DoStuff(){
 
                                for(i=0;i<skeleton.num_joints;i++){
                                        tempanimation.position[i][0]=skeleton.joints[i].position;
-                                       tempanimation.position[i][0]=DoRotation(tempanimation.position[i][0],0,-rotation,0);
+                                       tempanimation.position[i][0]=DoRotation(tempanimation.position[i][0],0,-yaw,0);
                                }
                        }
                }
@@ -4582,7 +4579,7 @@ void      Person::DoStuff(){
                if(findLength(&average)<10&&!dead&&skeleton.free){
                        skeleton.longdead+=(2000-findLength(&average))*multiplier+multiplier;
                        if(skeleton.longdead>(damage+500)*1.5){
-                               if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
+                               if(id==0)pause_sound(whooshsound);
                                skeleton.free=0;
                                velocity=0;
                                XYZ middle;
@@ -4603,113 +4600,99 @@ void   Person::DoStuff(){
                                }
                                Normalise(&terrainnormal);
 
-                               targetrotation=-asin(0-terrainnormal.x);
-                               targetrotation*=360/6.28;
-                               if(terrainnormal.z<0)targetrotation=180-targetrotation;
-                               rotation=targetrotation;
-
-                               /*if(onterrain){
-                               terrainnormal=terrain.getNormal(coords.x,coords.z);
-                               targettilt2=asin(terrainnormal.y)*180/3.14*-1;
-                               }
-                               else*/
-
-                               /*XYZ otherterrainnormal;
-                               otherterrainnormal=terrain.getNormal(coords.x,coords.y);
-                               otherterrainnormal.y=fast_sqrt(otherterrainnormal.x*otherterrainnormal.x+otherterrainnormal.z*otherterrainnormal.z)*-1;
-                               if(abs(terrainnormal.y)<abs(otherterrainnormal.y))terrainnormal.y=fast_sqrt(otherterrainnormal.x*otherterrainnormal.x+otherterrainnormal.z*otherterrainnormal.z)*-1;
-                               targettilt2=asin(otherterrainnormal.y)*180/3.14;
-                               */
+                               targetyaw=-asin(0-terrainnormal.x);
+                               targetyaw*=360/6.28;
+                               if(terrainnormal.z<0)targetyaw=180-targetyaw;
+                               yaw=targetyaw;
 
                                targettilt2=asin(terrainnormal.y)*180/3.14*-1;
 
 
-
                                if(skeleton.forward.y<0){
-                                       targetanimation=getupfrombackanim;
-                                       targetframe=0;
+                                       animTarget=getupfrombackanim;
+                                       frameTarget=0;
                                        targettilt2=0;
                                }
                                if(skeleton.forward.y>-.3){
-                                       targetanimation=getupfromfrontanim;
-                                       rotation+=180;
-                                       targetrotation+=180;
+                                       animTarget=getupfromfrontanim;
+                                       yaw+=180;
+                                       targetyaw+=180;
                                        targettilt2*=-1;
-                                       targetframe=0;
+                                       frameTarget=0;
                                        targettilt2=0;
                                }
 
                                if((Random()%8==0&&id!=0&&creature==rabbittype)||(Random()%2==0&&id!=0&&creature==wolftype)||(id==0&&crouchkeydown&&(forwardkeydown||backkeydown||leftkeydown||rightkeydown))){
-                                       targetanimation=rollanim;
-                                       targetrotation=lookrotation;
+                                       animTarget=rollanim;
+                                       targetyaw=lookyaw;
                                        if(id==0){
                                                if(rightkeydown){
-                                                       targetrotation-=90;
-                                                       if(forwardkeydown)targetrotation+=45;
-                                                       if(backkeydown)targetrotation-=45;
+                                                       targetyaw-=90;
+                                                       if(forwardkeydown)targetyaw+=45;
+                                                       if(backkeydown)targetyaw-=45;
                                                }
                                                if(leftkeydown){
-                                                       targetrotation+=90;
-                                                       if(forwardkeydown)targetrotation-=45;
-                                                       if(backkeydown)targetrotation+=45;
+                                                       targetyaw+=90;
+                                                       if(forwardkeydown)targetyaw-=45;
+                                                       if(backkeydown)targetyaw+=45;
                                                }
                                                if(backkeydown){
                                                        if ( !leftkeydown&&!rightkeydown)
-                                                               targetrotation+=180;
+                                                               targetyaw+=180;
                                                }
-                                               targetrotation+=180;
+                                               targetyaw+=180;
                                        }
                                }
 
                                if(abs(targettilt2)>50)targettilt2=0;
-                               currentanimation=tempanim;
-                               currentframe=0;
+                               animCurrent=tempanim;
+                               frameCurrent=0;
                                target=0;
                                tilt2=targettilt2;
 
-                               if(middle.y>0&&targetanimation!=rollanim)targetoffset.y=middle.y+1;
+                               if(middle.y>0&&animTarget!=rollanim)targetoffset.y=middle.y+1;
 
                                for(i=0;i<skeleton.num_joints;i++){
                                        tempanimation.position[i][0]=skeleton.joints[i].position;
-                                       tempanimation.position[i][0]=DoRotation(tempanimation.position[i][0],0,-rotation,0);
+                                       tempanimation.position[i][0]=DoRotation(tempanimation.position[i][0],0,-yaw,0);
                                }
                        }
                }
 
                bool hasstaff;
                hasstaff=0;
-               if(num_weapons>0)if(weapons.type[0]==staff)hasstaff=1;
+               if(num_weapons>0)if(weapons[0].getType()==staff)hasstaff=1;
                if(!skeleton.freefall&&freefall&&((jumpkeydown&&jumpkeydowntime<.2)||(hasstaff&&rabbitkickragdoll))&&!dead){
                        if(velocity.y>-30){
                                XYZ tempvelocity;
                                tempvelocity=velocity;
                                Normalise(&tempvelocity);
-                               targetrotation=-asin(0-tempvelocity.x);
-                               targetrotation*=360/6.28;
-                               if(velocity.z<0)targetrotation=180-targetrotation;
-                               //targetrotation+=180;
+                               targetyaw=-asin(0-tempvelocity.x);
+                               targetyaw*=360/6.28;
+                               if(velocity.z<0)targetyaw=180-targetyaw;
+                               //targetyaw+=180;
 
                                skeleton.free=0;
                                if(dotproduct(&skeleton.forward,&tempvelocity)<0){
-                                       targetanimation=rollanim;
-                                       targetframe=2;
+                                       animTarget=rollanim;
+                                       frameTarget=2;
                                }
                                else{
-                                       targetanimation=backhandspringanim;
-                                       targetrotation+=180;
-                                       targetframe=6;
+                                       animTarget=backhandspringanim;
+                                       targetyaw+=180;
+                                       frameTarget=6;
                                }
                                target=0;
 
                                emit_sound_at(movewhooshsound, coords, 128.);
 
-                               currentanimation=targetanimation;
-                               currentframe=targetframe-1;
+                               animCurrent=animTarget;
+                               frameCurrent=frameTarget-1;
                                target=0;
 
                                velocity=0;
 
-                               rotation=targetrotation;
+                               yaw=targetyaw;
                                tilt=0;
                                targettilt=0;
                                tilt2=0;
@@ -4718,16 +4701,13 @@ void    Person::DoStuff(){
                }
                if(skeleton.freefall==0)freefall=0;
 
-               if(!isnormal(velocity.x)&&velocity.x){
-                       int xy=1;
-               }
        }
 
        if(aitype!=passivetype||skeleton.free==1)
                if(findLengthfast(&velocity)>.1)
                        for(i=0;i<objects.numobjects;i++){
                                if(objects.type[i]==firetype)
-                                       if(findDistancefastflat(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*12&&findDistancefast(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*49){
+                                       if(distsqflat(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*12&&distsq(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*49){
                                                if(onfire){
                                                        if(!objects.onfire[i]){
                                                                emit_sound_at(firestartsound, objects.position[i]);
@@ -4741,7 +4721,7 @@ void      Person::DoStuff(){
                                                }
                                        }
                                        if(objects.type[i]==bushtype)
-                                               if(findDistancefastflat(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*12&&findDistancefast(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*49){
+                                               if(distsqflat(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*12&&distsq(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*49){
                                                        if(onfire){
                                                                if(!objects.onfire[i]){
                                                                        emit_sound_at(firestartsound, objects.position[i]);
@@ -4806,14 +4786,14 @@ void    Person::DoStuff(){
                                                }
                                                XYZ tempcoord;
                                                if(objects.type[i]==treeleavestype&&environment!=desertenvironment){
-                                                       if(objects.rotation2[i]==0)tempcoord=coords;
+                                                       if(objects.pitch[i]==0)tempcoord=coords;
                                                        else{
                                                                tempcoord=coords-objects.position[i];
-                                                               tempcoord=DoRotation(tempcoord,0,-objects.rotation[i],0);
-                                                               tempcoord=DoRotation(tempcoord,-objects.rotation2[i],0,0);
+                                                               tempcoord=DoRotation(tempcoord,0,-objects.yaw[i],0);
+                                                               tempcoord=DoRotation(tempcoord,-objects.pitch[i],0,0);
                                                                tempcoord+=objects.position[i];
                                                        }
-                                                       if(findDistancefastflat(&tempcoord,&objects.position[i])<objects.scale[i]*objects.scale[i]*8&&findDistancefast(&tempcoord,&objects.position[i])<objects.scale[i]*objects.scale[i]*300&&tempcoord.y>objects.position[i].y+3*objects.scale[i]){
+                                                       if(distsqflat(&tempcoord,&objects.position[i])<objects.scale[i]*objects.scale[i]*8&&distsq(&tempcoord,&objects.position[i])<objects.scale[i]*objects.scale[i]*300&&tempcoord.y>objects.position[i].y+3*objects.scale[i]){
                                                                if(objects.messedwith[i]<=0){
                                                                        XYZ tempvel;
                                                                        XYZ pos;
@@ -4894,14 +4874,14 @@ void    Person::DoStuff(){
                                        }
                                }
 
-                               if(targetanimation==staggerbackhighanim)staggerdelay=1;
-                               if(targetanimation==staggerbackhardanim)staggerdelay=1;
+                               if(animTarget==staggerbackhighanim)staggerdelay=1;
+                               if(animTarget==staggerbackhardanim)staggerdelay=1;
                                staggerdelay-=multiplier;
-                               if(targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim&&targetanimation!=staffgroundsmashanim)hasvictim=1;
-                               if(velocity.y<-30&&targetanimation==jumpdownanim)RagDoll(0);
-                               if(currentanimation!=getIdle()&&wasIdle()&&targetanimation!=getIdle()&&isIdle()){
-                                       targetanimation=getIdle();
-                                       targetframe=0;
+                               if(animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim&&animTarget!=staffgroundsmashanim)hasvictim=1;
+                               if(velocity.y<-30&&animTarget==jumpdownanim)RagDoll(0);
+                               if(animCurrent!=getIdle()&&wasIdle()&&animTarget!=getIdle()&&isIdle()){
+                                       animTarget=getIdle();
+                                       frameTarget=0;
                                        target=0;
                                }
                                weaponmissdelay-=multiplier;
@@ -4918,11 +4898,11 @@ void    Person::DoStuff(){
                                if(!isnormal(targettilt2)&&targettilt2){
                                        targettilt2=0;
                                }
-                               if(!isnormal(targetrotation)&&targetrotation){
-                                       targetrotation=0;
+                               if(!isnormal(targetyaw)&&targetyaw){
+                                       targetyaw=0;
                                }
 
-                               if(targetanimation==bounceidleanim||targetanimation==wolfidle||targetanimation==walkanim||targetanimation==drawrightanim||targetanimation==crouchdrawrightanim||targetanimation==drawleftanim||targetanimation==fightidleanim||targetanimation==fightsidestep||targetanimation==hanganim||isCrouch()||targetanimation==backhandspringanim){
+                               if(animTarget==bounceidleanim||animTarget==wolfidle||animTarget==walkanim||animTarget==drawrightanim||animTarget==crouchdrawrightanim||animTarget==drawleftanim||animTarget==fightidleanim||animTarget==fightsidestep||animTarget==hanganim||isCrouch()||animTarget==backhandspringanim){
                                        //open hands and close mouth
                                        if(righthandmorphend!=0&&righthandmorphness==targetrighthandmorphness){
                                                righthandmorphness=0;
@@ -4943,7 +4923,7 @@ void      Person::DoStuff(){
                                        }
                                }
 
-                               if(targetanimation==rollanim||targetanimation==dodgebackanim||targetanimation==removeknifeanim||targetanimation==knifefightidleanim||targetanimation==swordfightidleanim||targetanimation==blockhighleftstrikeanim||targetanimation==crouchremoveknifeanim||targetanimation==sneakanim||targetanimation==sweepanim||targetanimation==spinkickreversedanim||targetanimation==jumpdownanim||isWallJump()||isFlip()||targetanimation==climbanim||isRun()||targetanimation==getupfrombackanim||targetanimation==getupfromfrontanim){
+                               if(animTarget==rollanim||animTarget==dodgebackanim||animTarget==removeknifeanim||animTarget==knifefightidleanim||animTarget==swordfightidleanim||animTarget==blockhighleftstrikeanim||animTarget==crouchremoveknifeanim||animTarget==sneakanim||animTarget==sweepanim||animTarget==spinkickreversedanim||animTarget==jumpdownanim||isWallJump()||isFlip()||animTarget==climbanim||isRun()||animTarget==getupfrombackanim||animTarget==getupfromfrontanim){
                                        //open hands and mouth
                                        if(righthandmorphend!=0&&righthandmorphness==targetrighthandmorphness){
                                                righthandmorphness=0;
@@ -4964,7 +4944,7 @@ void      Person::DoStuff(){
                                        }
                                }
 
-                               if(targetanimation==jumpupanim||targetanimation==crouchstabanim||targetanimation==swordgroundstabanim||targetanimation==swordfightidlebothanim||targetanimation==blockhighleftanim||targetanimation==blockhighleftanim){
+                               if(animTarget==jumpupanim||animTarget==crouchstabanim||animTarget==swordgroundstabanim||animTarget==swordfightidlebothanim||animTarget==blockhighleftanim||animTarget==blockhighleftanim){
                                        //close hands and mouth
                                        if(righthandmorphend!=1&&righthandmorphness==targetrighthandmorphness){
                                                righthandmorphness=0;
@@ -4985,7 +4965,7 @@ void      Person::DoStuff(){
                                        }
                                }
 
-                               if(targetanimation==spinkickanim||targetanimation==staffspinhitreversalanim||targetanimation==staffspinhitreversedanim||targetanimation==staffhitreversalanim||targetanimation==staffhitreversedanim||targetanimation==hurtidleanim||targetanimation==winduppunchanim||targetanimation==swordslashreversalanim||targetanimation==swordslashreversedanim||targetanimation==knifeslashreversalanim||targetanimation==knifeslashreversedanim||targetanimation==knifethrowanim||targetanimation==knifefollowanim||targetanimation==knifefollowedanim||targetanimation==killanim||targetanimation==dropkickanim||targetanimation==upunchanim||targetanimation==knifeslashstartanim||targetanimation==swordslashanim||targetanimation==staffhitanim||targetanimation==staffspinhitanim||targetanimation==staffgroundsmashanim||targetanimation==spinkickreversalanim||targetanimation==sweepreversalanim||targetanimation==lowkickanim||targetanimation==sweepreversedanim||targetanimation==rabbitkickreversalanim||targetanimation==rabbitkickreversedanim||targetanimation==jumpreversalanim||targetanimation==jumpreversedanim){
+                               if(animTarget==spinkickanim||animTarget==staffspinhitreversalanim||animTarget==staffspinhitreversedanim||animTarget==staffhitreversalanim||animTarget==staffhitreversedanim||animTarget==hurtidleanim||animTarget==winduppunchanim||animTarget==swordslashreversalanim||animTarget==swordslashreversedanim||animTarget==knifeslashreversalanim||animTarget==knifeslashreversedanim||animTarget==knifethrowanim||animTarget==knifefollowanim||animTarget==knifefollowedanim||animTarget==killanim||animTarget==dropkickanim||animTarget==upunchanim||animTarget==knifeslashstartanim||animTarget==swordslashanim||animTarget==staffhitanim||animTarget==staffspinhitanim||animTarget==staffgroundsmashanim||animTarget==spinkickreversalanim||animTarget==sweepreversalanim||animTarget==lowkickanim||animTarget==sweepreversedanim||animTarget==rabbitkickreversalanim||animTarget==rabbitkickreversedanim||animTarget==jumpreversalanim||animTarget==jumpreversedanim){
                                        //close hands and yell
                                        if(righthandmorphend!=1&&righthandmorphness==targetrighthandmorphness){
                                                righthandmorphness=0;
@@ -5005,13 +4985,7 @@ void     Person::DoStuff(){
                                                targetheadmorphness=1;
                                        }
                                }
-                               /*
-                               if(speechdelay>.25){
-                               if(headmorphend!=2)headmorphness=0;
-                               headmorphend=2;
-                               targetheadmorphness=1;
-                               }
-                               */
+                               
                                bool behind;
                                behind=0;
                                if(hasvictim){
@@ -5020,8 +4994,8 @@ void      Person::DoStuff(){
                                        }
                                }
 
-                               if(!dead&&targetanimation!=hurtidleanim)
-                                       if(behind||targetanimation==killanim||targetanimation==knifethrowanim||targetanimation==knifefollowanim||targetanimation==spinkickreversalanim||targetanimation==rabbitkickreversedanim||targetanimation==jumpreversedanim){
+                               if(!dead&&animTarget!=hurtidleanim)
+                                       if(behind||animTarget==killanim||animTarget==knifethrowanim||animTarget==knifefollowanim||animTarget==spinkickreversalanim||animTarget==rabbitkickreversedanim||animTarget==jumpreversedanim){
                                                if(headmorphend!=4||headmorphness==targetheadmorphness){
                                                        headmorphend=4;
                                                        //headmorphness=1;
@@ -5030,11 +5004,11 @@ void    Person::DoStuff(){
                                        }
 
                                        if(weaponactive!=-1){
-                                               if(weapons.type[weaponids[weaponactive]]!=staff){
+                                               if(weapons[weaponids[weaponactive]].getType()!=staff){
                                                        righthandmorphstart=1;
                                                        righthandmorphend=1;
                                                }
-                                               if(weapons.type[weaponids[weaponactive]]==staff){
+                                               if(weapons[weaponids[weaponactive]].getType()==staff){
                                                        righthandmorphstart=2;
                                                        righthandmorphend=2;
                                                }
@@ -5043,7 +5017,7 @@ void      Person::DoStuff(){
 
                                        terrainnormal=terrain.getNormal(coords.x,coords.z);
 
-                                       if(animation[targetanimation].attack!=reversal){
+                                       if(animation[animTarget].attack!=reversal){
                                                if(!isnormal(coords.x))
                                                        coords=oldcoords;
                                                oldcoords=coords;
@@ -5052,18 +5026,18 @@ void    Person::DoStuff(){
                                        flatfacing=0;
                                        flatfacing.z=1;
 
-                                       flatfacing=DoRotation(flatfacing,0,rotation,0);
+                                       flatfacing=DoRotation(flatfacing,0,yaw,0);
                                        facing=flatfacing;
                                        ReflectVector(&facing,terrainnormal);
                                        Normalise(&facing);
 
-                                       if(isRun()||targetanimation==sneakanim||targetanimation==rollanim||targetanimation==walkanim){
+                                       if(isRun()||animTarget==sneakanim||animTarget==rollanim||animTarget==walkanim){
                                                if(onterrain)targettilt2=-facing.y*20;
                                                else targettilt2=0;
                                        }
                                        onterrain=0;
-                                       if(!isRun()&&!animation[targetanimation].attack&&targetanimation!=getupfromfrontanim&&targetanimation!=getupfrombackanim&&targetanimation!=sneakanim)targettilt2=0;
-                                       if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
+                                       if(!isRun()&&!animation[animTarget].attack&&animTarget!=getupfromfrontanim&&animTarget!=getupfrombackanim&&animTarget!=sneakanim)targettilt2=0;
+                                       if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){
                                                flatvelocity=velocity;
                                                flatvelocity.y=0;
                                                flatvelspeed=findLength(&flatvelocity);
@@ -5084,7 +5058,7 @@ void      Person::DoStuff(){
                                        else if(tilt2<targettilt2){
                                                tilt2+=multiplier*400;
                                        }
-                                       if(!animation[targetanimation].attack&&targetanimation!=getupfrombackanim&&targetanimation!=getupfromfrontanim){
+                                       if(!animation[animTarget].attack&&animTarget!=getupfrombackanim&&animTarget!=getupfromfrontanim){
                                                if(tilt2>25)tilt2=25;
                                                if(tilt2<-25)tilt2=-25;
                                        }
@@ -5097,8 +5071,8 @@ void      Person::DoStuff(){
                                        }
 
                                        //Running velocity
-                                       //if(!creature==wolftype||targetanimation==rabbitkickanim)
-                                       if(targetanimation==rabbittackleanim){
+                                       //if(!creature==wolftype||animTarget==rabbitkickanim)
+                                       if(animTarget==rabbittackleanim){
                                                velocity+=facing*multiplier*speed*700*scale;
                                                velspeed=findLength(&velocity);
                                                if(velspeed>speed*65*scale){
@@ -5111,8 +5085,8 @@ void      Person::DoStuff(){
                                                velspeed=findLength(&velocity);
                                                velocity=flatfacing*velspeed;
                                        }
-                                       if(targetanimation!=rabbitrunninganim&&targetanimation!=wolfrunninganim){
-                                               if(isRun()||targetanimation==rabbitkickanim){
+                                       if(animTarget!=rabbitrunninganim&&animTarget!=wolfrunninganim){
+                                               if(isRun()||animTarget==rabbitkickanim){
                                                        velocity+=facing*multiplier*speed*700*scale;
                                                        velspeed=findLength(&velocity);
                                                        if(velspeed>speed*45*scale){
@@ -5150,7 +5124,7 @@ void      Person::DoStuff(){
                                                velocity=flatfacing*velspeed;
                                        }
 
-                                       if(targetanimation==rollanim&&animation[targetanimation].label[targetframe]!=6){
+                                       if(animTarget==rollanim&&animation[animTarget].label[frameTarget]!=6){
                                                velocity+=facing*multiplier*speed*700*scale;
                                                velspeed=findLength(&velocity);
                                                if(velspeed>speed*45*scale){
@@ -5165,7 +5139,7 @@ void      Person::DoStuff(){
                                        }
 
 
-                                       /*if(currentanimation==rollanim&&(isCrouch()||isIdle())){
+                                       /*if(animCurrent==rollanim&&(isCrouch()||isIdle())){
                                        velocity+=facing*multiplier*speed*700*scale;
                                        velspeed=findLength(&velocity);
                                        if(velspeed>speed*25*scale){
@@ -5179,7 +5153,7 @@ void      Person::DoStuff(){
                                        velocity=flatfacing*velspeed;
                                        }*/
 
-                                       if(targetanimation==sneakanim||targetanimation==walkanim){
+                                       if(animTarget==sneakanim||animTarget==walkanim){
                                                velocity+=facing*multiplier*speed*700*scale;
                                                velspeed=findLength(&velocity);
                                                if(velspeed>speed*12*scale){
@@ -5193,7 +5167,7 @@ void      Person::DoStuff(){
                                                velocity=flatfacing*velspeed;
                                        }
 
-                                       if((targetanimation==fightidleanim||targetanimation==knifefightidleanim)&&(currentanimation==bounceidleanim||currentanimation==hurtidleanim)){
+                                       if((animTarget==fightidleanim||animTarget==knifefightidleanim)&&(animCurrent==bounceidleanim||animCurrent==hurtidleanim)){
                                                velocity+=facing*multiplier*speed*700*scale;
                                                velspeed=findLength(&velocity);
                                                if(velspeed>speed*2*scale){
@@ -5208,7 +5182,7 @@ void      Person::DoStuff(){
                                        }
 
 
-                                       if((targetanimation==bounceidleanim||currentanimation==hurtidleanim)&&(currentanimation==fightidleanim||currentanimation==knifefightidleanim)){
+                                       if((animTarget==bounceidleanim||animCurrent==hurtidleanim)&&(animCurrent==fightidleanim||animCurrent==knifefightidleanim)){
                                                velocity-=facing*multiplier*speed*700*scale;
                                                velspeed=findLength(&velocity);
                                                if(velspeed>speed*2*scale){
@@ -5222,7 +5196,7 @@ void      Person::DoStuff(){
                                                velocity=flatfacing*velspeed*-1;
                                        }
 
-                                       if(targetanimation==fightsidestep){
+                                       if(animTarget==fightsidestep){
                                                velocity+=DoRotation(facing*multiplier*speed*700*scale,0,-90,0);
                                                velspeed=findLength(&velocity);
                                                if(velspeed>speed*12*scale){
@@ -5236,16 +5210,16 @@ void    Person::DoStuff(){
                                                velocity=DoRotation(flatfacing*velspeed,0,-90,0);
                                        }
 
-                                       if(targetanimation==staggerbackhighanim){
+                                       if(animTarget==staggerbackhighanim){
                                                coords-=facing*multiplier*speed*16*scale;
                                                velocity=0;
                                        }
-                                       if(targetanimation==staggerbackhardanim&&animation[staggerbackhardanim].label[targetframe]!=6){
+                                       if(animTarget==staggerbackhardanim&&animation[staggerbackhardanim].label[frameTarget]!=6){
                                                coords-=facing*multiplier*speed*20*scale;
                                                velocity=0;
                                        }
 
-                                       if(targetanimation==backhandspringanim){
+                                       if(animTarget==backhandspringanim){
                                                //coords-=facing*multiplier*50*scale;
                                                velocity+=facing*multiplier*speed*700*scale*-1;
                                                velspeed=findLength(&velocity);
@@ -5259,7 +5233,7 @@ void      Person::DoStuff(){
                                                velspeed=findLength(&velocity);
                                                velocity=flatfacing*velspeed*-1;
                                        }
-                                       if(targetanimation==dodgebackanim){
+                                       if(animTarget==dodgebackanim){
                                                //coords-=facing*multiplier*50*scale;
                                                velocity+=facing*multiplier*speed*700*scale*-1;
                                                velspeed=findLength(&velocity);
@@ -5274,33 +5248,33 @@ void    Person::DoStuff(){
                                                velocity=flatfacing*velspeed*-1;
                                        }
 
-                                       if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
+                                       if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){
                                                velspeed=findLength(&velocity);
                                        }
 
 
-                                       if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
+                                       if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){
                                                velocity.y+=gravity*multiplier;
                                        }
 
-                                       if(targetanimation!=climbanim&&targetanimation!=hanganim&&!isWallJump())coords+=velocity*multiplier;
+                                       if(animTarget!=climbanim&&animTarget!=hanganim&&!isWallJump())coords+=velocity*multiplier;
 
-                                       if(coords.y<terrain.getHeight(coords.x,coords.z)&&(targetanimation==jumpdownanim||targetanimation==jumpupanim||isFlip())){
-                                               if(isFlip()&&animation[targetanimation].label[targetframe]==7)RagDoll(0);
+                                       if(coords.y<terrain.getHeight(coords.x,coords.z)&&(animTarget==jumpdownanim||animTarget==jumpupanim||isFlip())){
+                                               if(isFlip()&&animation[animTarget].label[frameTarget]==7)RagDoll(0);
 
-                                               if(targetanimation==jumpupanim){jumppower=-4;targetanimation=getIdle();}
+                                               if(animTarget==jumpupanim){jumppower=-4;animTarget=getIdle();}
                                                target=0;
-                                               targetframe=0;
+                                               frameTarget=0;
                                                onterrain=1;
 
                                                if(id==0){
-                                                       OPENAL_SetPaused(channels[whooshsound], true);
+                                                       pause_sound(whooshsound);
                                                        OPENAL_SetVolume(channels[whooshsound], 0);
                                                }
 
-                                               if(targetanimation==jumpdownanim||isFlip()){
+                                               if(animTarget==jumpdownanim||isFlip()){
                                                        if(isFlip())jumppower=-4;
-                                                       targetanimation=getLanding();
+                                                       animTarget=getLanding();
                                                        emit_sound_at(landsound, coords, 128.);
 
                                                        if(id==0){
@@ -5312,14 +5286,14 @@ void    Person::DoStuff(){
                                                }
                                        }
 
-                                       if(targetanimation!=jumpupanim&&targetanimation!=jumpdownanim&&!isFlip()&&targetanimation!=climbanim&&targetanimation!=hanganim&&!isWallJump())coords.y+=gravity*multiplier*2;
-                                       if(targetanimation!=jumpupanim&&targetanimation!=jumpdownanim&&!isFlip()&&coords.y<terrain.getHeight(coords.x,coords.z)){
+                                       if(animTarget!=jumpupanim&&animTarget!=jumpdownanim&&!isFlip()&&animTarget!=climbanim&&animTarget!=hanganim&&!isWallJump())coords.y+=gravity*multiplier*2;
+                                       if(animTarget!=jumpupanim&&animTarget!=jumpdownanim&&!isFlip()&&coords.y<terrain.getHeight(coords.x,coords.z)){
                                                coords.y=terrain.getHeight(coords.x,coords.z);
                                                onterrain=1;
                                        }
 
 
-                                       if(isIdle()||targetanimation==drawrightanim||targetanimation==drawleftanim||targetanimation==crouchdrawrightanim||targetanimation==crouchstabanim||targetanimation==swordgroundstabanim||isStop()||targetanimation==removeknifeanim||targetanimation==crouchremoveknifeanim||isLanding()||isCrouch()||animation[targetanimation].attack||(targetanimation==rollanim&&animation[targetanimation].label[targetframe]==6)){
+                                       if(isIdle()||animTarget==drawrightanim||animTarget==drawleftanim||animTarget==crouchdrawrightanim||animTarget==crouchstabanim||animTarget==swordgroundstabanim||isStop()||animTarget==removeknifeanim||animTarget==crouchremoveknifeanim||isLanding()||isCrouch()||animation[animTarget].attack||(animTarget==rollanim&&animation[animTarget].label[frameTarget]==6)){
                                                velspeed=findLength(&velocity);
                                                velocity.y=0;
                                                if(velspeed<multiplier*300*scale){
@@ -5365,19 +5339,19 @@ void    Person::DoStuff(){
                                                }
                                        }
 
-                                       if(animation[targetanimation].attack==normalattack&&targetanimation!=rabbitkickanim&&!victim->skeleton.free){
+                                       if(animation[animTarget].attack==normalattack&&animTarget!=rabbitkickanim&&!victim->skeleton.free){
                                                terrainnormal=victim->coords-coords;
                                                Normalise(&terrainnormal);
-                                               targetrotation=-asin(0-terrainnormal.x);
-                                               targetrotation*=360/6.28;
-                                               if(terrainnormal.z<0)targetrotation=180-targetrotation;
+                                               targetyaw=-asin(0-terrainnormal.x);
+                                               targetyaw*=360/6.28;
+                                               if(terrainnormal.z<0)targetyaw=180-targetyaw;
                                                targettilt2=-asin(terrainnormal.y)*360/6.28;//*-70;
                                        }
 
-                                       if(animation[targetanimation].attack==reversal&&targetanimation!=rabbittacklinganim){
-                                               targetrotation=victim->targetrotation;
+                                       if(animation[animTarget].attack==reversal&&animTarget!=rabbittacklinganim){
+                                               targetyaw=victim->targetyaw;
                                        }
-                                       if(targetanimation==rabbittacklinganim){
+                                       if(animTarget==rabbittacklinganim){
                                                coords=victim->coords;
                                        }
                        }
@@ -5387,7 +5361,7 @@ void      Person::DoStuff(){
                        midterrain=0;
                        midterrain.x=terrain.size*terrain.scale/2;
                        midterrain.z=terrain.size*terrain.scale/2;
-                       if(findDistancefastflat(&coords,&midterrain)>(terrain.size*terrain.scale/2-viewdistance)*(terrain.size*terrain.scale/2-viewdistance)){
+                       if(distsqflat(&coords,&midterrain)>(terrain.size*terrain.scale/2-viewdistance)*(terrain.size*terrain.scale/2-viewdistance)){
                                XYZ tempposit;
                                tempposit=coords-midterrain;
                                tempposit.y=0;
@@ -5400,7 +5374,7 @@ void      Person::DoStuff(){
 
 int Person::DrawSkeleton(){
        int oldplayerdetail;
-       if((frustum.SphereInFrustum(coords.x,coords.y+scale*3,coords.z,scale*8)&&findDistancefast(&viewer,&coords)<viewdistance*viewdistance)||skeleton.free==3){
+       if((frustum.SphereInFrustum(coords.x,coords.y+scale*3,coords.z,scale*8)&&distsq(&viewer,&coords)<viewdistance*viewdistance)||skeleton.free==3){
                if(onterrain&&(isIdle()||isCrouch()||wasIdle()||wasCrouch())&&!skeleton.free){
                        calcrot=1;
                }
@@ -5415,18 +5389,18 @@ int Person::DrawSkeleton(){
                XYZ terrainlight;
                float terrainheight;
                float distance;
-               if(!isnormal(rotation))rotation=0;
+               if(!isnormal(yaw))yaw=0;
                if(!isnormal(tilt))tilt=0;
                if(!isnormal(tilt2))tilt2=0;
                oldplayerdetail=playerdetail;
                playerdetail=0;
-               if(findDistancefast(&viewer,&coords)<viewdistance*viewdistance/32&&detail==2){
+               if(distsq(&viewer,&coords)<viewdistance*viewdistance/32&&detail==2){
                        playerdetail=1;
                }
-               if(findDistancefast(&viewer,&coords)<viewdistance*viewdistance/128&&detail==1){
+               if(distsq(&viewer,&coords)<viewdistance*viewdistance/128&&detail==1){
                        playerdetail=1;
                }
-               if(findDistancefast(&viewer,&coords)<viewdistance*viewdistance/256&&(detail!=1&&detail!=2)){
+               if(distsq(&viewer,&coords)<viewdistance*viewdistance/256&&(detail!=1&&detail!=2)){
                        playerdetail=1;
                }
                if(id==0)
@@ -5449,145 +5423,145 @@ int Person::DrawSkeleton(){
                static float M[16];
                static int i,j,k;
                static int weaponattachmuscle;
-               static int weaponrotatemuscle,weaponrotatemuscle2;
+               static int weaponrotatemuscle;
                static XYZ weaponpoint;
                static int start,endthing;
                if((dead!=2||skeleton.free!=2)&&updatedelay<=0){
                        if(!isSleeping()&&!isSitting()){
-                               if(onterrain&&((isIdle()||isCrouch()||isLanding()||isLandhard()||targetanimation==drawrightanim||targetanimation==drawleftanim||targetanimation==crouchdrawrightanim)&&(wasIdle()||wasCrouch()||wasLanding()||wasLandhard()||currentanimation==drawrightanim||currentanimation==drawleftanim||currentanimation==crouchdrawrightanim))&&!skeleton.free){
+                               if(onterrain&&((isIdle()||isCrouch()||isLanding()||isLandhard()||animTarget==drawrightanim||animTarget==drawleftanim||animTarget==crouchdrawrightanim)&&(wasIdle()||wasCrouch()||wasLanding()||wasLandhard()||animCurrent==drawrightanim||animCurrent==drawleftanim||animCurrent==crouchdrawrightanim))&&!skeleton.free){
                                        XYZ point,newpoint,change,change2;
-                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
+                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
                                        heightleft=terrain.getHeight(point.x,point.z)+.04;
                                        point.y=heightleft;
                                        change=skeleton.joints[skeleton.jointlabels[leftankle]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
                                        change2=skeleton.joints[skeleton.jointlabels[leftknee]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
-                                       skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0);
+                                       skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0);
                                        skeleton.joints[skeleton.jointlabels[leftankle]].position=skeleton.joints[skeleton.jointlabels[leftfoot]].position+change;
                                        skeleton.joints[skeleton.jointlabels[leftknee]].position=(skeleton.joints[skeleton.jointlabels[leftfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[leftknee]].position)/2;
 
-                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                                        heightright=terrain.getHeight(point.x,point.z)+.04;
                                        point.y=heightright;
                                        change=skeleton.joints[skeleton.jointlabels[rightankle]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
                                        change2=skeleton.joints[skeleton.jointlabels[rightknee]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
-                                       skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0);
+                                       skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0);
                                        skeleton.joints[skeleton.jointlabels[rightankle]].position=skeleton.joints[skeleton.jointlabels[rightfoot]].position+change;
                                        skeleton.joints[skeleton.jointlabels[rightknee]].position=(skeleton.joints[skeleton.jointlabels[rightfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[rightknee]].position)/2;
                                        skeleton.DoConstraints(&coords,&scale);
 
                                        if(creature==wolftype){
-                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
+                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
                                                heightleft=terrain.getHeight(point.x,point.z)+.04;
                                                point.y=heightleft;
                                                change=skeleton.joints[skeleton.jointlabels[leftankle]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
                                                change2=skeleton.joints[skeleton.jointlabels[leftknee]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
-                                               skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0);
+                                               skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0);
                                                skeleton.joints[skeleton.jointlabels[leftankle]].position=skeleton.joints[skeleton.jointlabels[leftfoot]].position+change;
                                                skeleton.joints[skeleton.jointlabels[leftknee]].position=(skeleton.joints[skeleton.jointlabels[leftfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[leftknee]].position)/2;
 
-                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                                                heightright=terrain.getHeight(point.x,point.z)+.04;
                                                point.y=heightright;
                                                change=skeleton.joints[skeleton.jointlabels[rightankle]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
                                                change2=skeleton.joints[skeleton.jointlabels[rightknee]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
-                                               skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0);
+                                               skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0);
                                                skeleton.joints[skeleton.jointlabels[rightankle]].position=skeleton.joints[skeleton.jointlabels[rightfoot]].position+change;
                                                skeleton.joints[skeleton.jointlabels[rightknee]].position=(skeleton.joints[skeleton.jointlabels[rightfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[rightknee]].position)/2;
                                                skeleton.DoConstraints(&coords,&scale);
                                        }
                                }
-                               if(onterrain&&((isIdle()||isCrouch()||isLanding()||isLandhard()||targetanimation==drawrightanim||targetanimation==drawleftanim||targetanimation==crouchdrawrightanim)&&!(wasIdle()||wasCrouch()||wasLanding()||wasLandhard()||currentanimation==drawrightanim||currentanimation==drawleftanim||currentanimation==crouchdrawrightanim))&&!skeleton.free){
+                               if(onterrain&&((isIdle()||isCrouch()||isLanding()||isLandhard()||animTarget==drawrightanim||animTarget==drawleftanim||animTarget==crouchdrawrightanim)&&!(wasIdle()||wasCrouch()||wasLanding()||wasLandhard()||animCurrent==drawrightanim||animCurrent==drawleftanim||animCurrent==crouchdrawrightanim))&&!skeleton.free){
                                        XYZ point,newpoint,change,change2;
-                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
+                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
                                        heightleft=terrain.getHeight(point.x,point.z)+.04;
                                        point.y=heightleft;
                                        change=skeleton.joints[skeleton.jointlabels[leftankle]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
                                        change2=skeleton.joints[skeleton.jointlabels[leftknee]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
-                                       skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*target+skeleton.joints[skeleton.jointlabels[leftfoot]].position*(1-target);
+                                       skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*target+skeleton.joints[skeleton.jointlabels[leftfoot]].position*(1-target);
                                        skeleton.joints[skeleton.jointlabels[leftankle]].position=skeleton.joints[skeleton.jointlabels[leftfoot]].position+change;
                                        skeleton.joints[skeleton.jointlabels[leftknee]].position=(skeleton.joints[skeleton.jointlabels[leftfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[leftknee]].position)/2;
 
-                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                                        heightright=terrain.getHeight(point.x,point.z)+.04;
                                        point.y=heightright;
                                        change=skeleton.joints[skeleton.jointlabels[rightankle]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
                                        change2=skeleton.joints[skeleton.jointlabels[rightknee]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
-                                       skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*target+skeleton.joints[skeleton.jointlabels[rightfoot]].position*(1-target);
+                                       skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*target+skeleton.joints[skeleton.jointlabels[rightfoot]].position*(1-target);
                                        skeleton.joints[skeleton.jointlabels[rightankle]].position=skeleton.joints[skeleton.jointlabels[rightfoot]].position+change;
                                        skeleton.joints[skeleton.jointlabels[rightknee]].position=(skeleton.joints[skeleton.jointlabels[rightfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[rightknee]].position)/2;
                                        skeleton.DoConstraints(&coords,&scale);
 
                                        if(creature==wolftype){
-                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
+                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
                                                heightleft=terrain.getHeight(point.x,point.z)+.04;
                                                point.y=heightleft;
                                                change=skeleton.joints[skeleton.jointlabels[leftankle]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
                                                change2=skeleton.joints[skeleton.jointlabels[leftknee]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
-                                               skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*target+skeleton.joints[skeleton.jointlabels[leftfoot]].position*(1-target);
+                                               skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*target+skeleton.joints[skeleton.jointlabels[leftfoot]].position*(1-target);
                                                skeleton.joints[skeleton.jointlabels[leftankle]].position=skeleton.joints[skeleton.jointlabels[leftfoot]].position+change;
                                                skeleton.joints[skeleton.jointlabels[leftknee]].position=(skeleton.joints[skeleton.jointlabels[leftfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[leftknee]].position)/2;
 
-                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                                                heightright=terrain.getHeight(point.x,point.z)+.04;
                                                point.y=heightright;
                                                change=skeleton.joints[skeleton.jointlabels[rightankle]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
                                                change2=skeleton.joints[skeleton.jointlabels[rightknee]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
-                                               skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*target+skeleton.joints[skeleton.jointlabels[rightfoot]].position*(1-target);
+                                               skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*target+skeleton.joints[skeleton.jointlabels[rightfoot]].position*(1-target);
                                                skeleton.joints[skeleton.jointlabels[rightankle]].position=skeleton.joints[skeleton.jointlabels[rightfoot]].position+change;
                                                skeleton.joints[skeleton.jointlabels[rightknee]].position=(skeleton.joints[skeleton.jointlabels[rightfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[rightknee]].position)/2;
                                                skeleton.DoConstraints(&coords,&scale);
                                        }
                                }
 
-                               if(onterrain&&(!(isIdle()||isCrouch()||isLanding()||isLandhard()||targetanimation==drawrightanim||targetanimation==drawleftanim||targetanimation==crouchdrawrightanim)&&(wasIdle()||wasCrouch()||wasLanding()||wasLandhard()||currentanimation==drawrightanim||currentanimation==drawleftanim||currentanimation==crouchdrawrightanim))&&!skeleton.free){
+                               if(onterrain&&(!(isIdle()||isCrouch()||isLanding()||isLandhard()||animTarget==drawrightanim||animTarget==drawleftanim||animTarget==crouchdrawrightanim)&&(wasIdle()||wasCrouch()||wasLanding()||wasLandhard()||animCurrent==drawrightanim||animCurrent==drawleftanim||animCurrent==crouchdrawrightanim))&&!skeleton.free){
                                        XYZ point,newpoint,change,change2;
-                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
+                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
                                        heightleft=terrain.getHeight(point.x,point.z)+.04;
                                        point.y=heightleft;
                                        change=skeleton.joints[skeleton.jointlabels[leftankle]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
                                        change2=skeleton.joints[skeleton.jointlabels[leftknee]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
-                                       skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*(1-target)+skeleton.joints[skeleton.jointlabels[leftfoot]].position*target;
+                                       skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*(1-target)+skeleton.joints[skeleton.jointlabels[leftfoot]].position*target;
                                        skeleton.joints[skeleton.jointlabels[leftankle]].position=skeleton.joints[skeleton.jointlabels[leftfoot]].position+change;
                                        skeleton.joints[skeleton.jointlabels[leftknee]].position=(skeleton.joints[skeleton.jointlabels[leftfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[leftknee]].position)/2;
 
-                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                                       point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                                        heightright=terrain.getHeight(point.x,point.z)+.04;
                                        point.y=heightright;
                                        change=skeleton.joints[skeleton.jointlabels[rightankle]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
                                        change2=skeleton.joints[skeleton.jointlabels[rightknee]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
-                                       skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*(1-target)+skeleton.joints[skeleton.jointlabels[rightfoot]].position*target;
+                                       skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*(1-target)+skeleton.joints[skeleton.jointlabels[rightfoot]].position*target;
                                        skeleton.joints[skeleton.jointlabels[rightankle]].position=skeleton.joints[skeleton.jointlabels[rightfoot]].position+change;
                                        skeleton.joints[skeleton.jointlabels[rightknee]].position=(skeleton.joints[skeleton.jointlabels[rightfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[rightknee]].position)/2;
                                        skeleton.DoConstraints(&coords,&scale);
 
                                        if(creature==wolftype){
-                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords;
+                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords;
                                                heightleft=terrain.getHeight(point.x,point.z)+.04;
                                                point.y=heightleft;
                                                change=skeleton.joints[skeleton.jointlabels[leftankle]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
                                                change2=skeleton.joints[skeleton.jointlabels[leftknee]].position-skeleton.joints[skeleton.jointlabels[leftfoot]].position;
-                                               skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*(1-target)+skeleton.joints[skeleton.jointlabels[leftfoot]].position*target;
+                                               skeleton.joints[skeleton.jointlabels[leftfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*(1-target)+skeleton.joints[skeleton.jointlabels[leftfoot]].position*target;
                                                skeleton.joints[skeleton.jointlabels[leftankle]].position=skeleton.joints[skeleton.jointlabels[leftfoot]].position+change;
                                                skeleton.joints[skeleton.jointlabels[leftknee]].position=(skeleton.joints[skeleton.jointlabels[leftfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[leftknee]].position)/2;
 
-                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords;
+                                               point=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords;
                                                heightright=terrain.getHeight(point.x,point.z)+.04;
                                                point.y=heightright;
                                                change=skeleton.joints[skeleton.jointlabels[rightankle]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
                                                change2=skeleton.joints[skeleton.jointlabels[rightknee]].position-skeleton.joints[skeleton.jointlabels[rightfoot]].position;
-                                               skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-rotation,0)*(1-target)+skeleton.joints[skeleton.jointlabels[rightfoot]].position*target;
+                                               skeleton.joints[skeleton.jointlabels[rightfoot]].position=DoRotation((point-coords)/scale,0,-yaw,0)*(1-target)+skeleton.joints[skeleton.jointlabels[rightfoot]].position*target;
                                                skeleton.joints[skeleton.jointlabels[rightankle]].position=skeleton.joints[skeleton.jointlabels[rightfoot]].position+change;
                                                skeleton.joints[skeleton.jointlabels[rightknee]].position=(skeleton.joints[skeleton.jointlabels[rightfoot]].position+change2)/2+(skeleton.joints[skeleton.jointlabels[rightknee]].position)/2;
                                                skeleton.DoConstraints(&coords,&scale);
                                        }
                                }
                        }
-                       if(!skeleton.free&&(!animation[targetanimation].attack&&targetanimation!=getupfrombackanim&&((targetanimation!=rollanim&&!isFlip())||animation[targetanimation].label[targetframe]==6)&&targetanimation!=getupfromfrontanim&&targetanimation!=wolfrunninganim&&targetanimation!=rabbitrunninganim&&targetanimation!=backhandspringanim&&targetanimation!=walljumpfrontanim&&targetanimation!=hurtidleanim&&!isLandhard()&&!isSleeping()))
+                       if(!skeleton.free&&(!animation[animTarget].attack&&animTarget!=getupfrombackanim&&((animTarget!=rollanim&&!isFlip())||animation[animTarget].label[frameTarget]==6)&&animTarget!=getupfromfrontanim&&animTarget!=wolfrunninganim&&animTarget!=rabbitrunninganim&&animTarget!=backhandspringanim&&animTarget!=walljumpfrontanim&&animTarget!=hurtidleanim&&!isLandhard()&&!isSleeping()))
                                DoHead();
                        else {
-                               targetheadrotation=-targetrotation;
-                               targetheadrotation2=0;
-                               if(animation[targetanimation].attack==3)targetheadrotation+=180;
+                               targetheadyaw=-targetyaw;
+                               targetheadpitch=0;
+                               if(animation[animTarget].attack==3)targetheadyaw+=180;
                        }
                        for(i=0;i<skeleton.drawmodel.vertexNum;i++){
                                skeleton.drawmodel.vertex[i]=0;
@@ -5631,7 +5605,7 @@ int Person::DrawSkeleton(){
                                                start=tailmorphstart;
                                                endthing=tailmorphend;
                                        }
-                                       if(calcrot)skeleton.FindRotationMuscle(i,targetanimation);
+                                       if(calcrot)skeleton.FindRotationMuscle(i,animTarget);
                                        mid=(skeleton.muscles[i].parent1->position+skeleton.muscles[i].parent2->position)/2;
                                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
                                        glPushMatrix();
@@ -5762,7 +5736,7 @@ int Person::DrawSkeleton(){
                                }
                                updatedelay=1+(float)(Random()%100)/1000;
                        }
-                       if(skeleton.free!=2&&(skeleton.free==1||skeleton.free==3||id==0||(normalsupdatedelay<=0)||targetanimation==getupfromfrontanim||targetanimation==getupfrombackanim||currentanimation==getupfromfrontanim||currentanimation==getupfrombackanim)){
+                       if(skeleton.free!=2&&(skeleton.free==1||skeleton.free==3||id==0||(normalsupdatedelay<=0)||animTarget==getupfromfrontanim||animTarget==getupfrombackanim||animCurrent==getupfromfrontanim||animCurrent==getupfrombackanim)){
                                normalsupdatedelay=1;
                                if(playerdetail||skeleton.free==3)skeleton.drawmodel.CalculateNormals(0);
                                if(!playerdetail||skeleton.free==3)skeleton.drawmodellow.CalculateNormals(0);
@@ -5790,7 +5764,7 @@ int Person::DrawSkeleton(){
                if(!skeleton.free)glTranslatef(coords.x,coords.y-.02,coords.z);
                if(skeleton.free)glTranslatef(coords.x,coords.y-.02,coords.z);
                if(!skeleton.free)glTranslatef(offset.x*scale,offset.y*scale,offset.z*scale);
-               if(!skeleton.free)glRotatef(rotation,0,1,0);
+               if(!skeleton.free)glRotatef(yaw,0,1,0);
                if(showpoints){
                        glPointSize(5);
                        glColor4f(.4,1,.4,1);
@@ -5818,7 +5792,7 @@ int Person::DrawSkeleton(){
                }
 
                terrainlight=terrain.getLighting(coords.x,coords.z);
-               distance=findDistancefast(&viewer,&coords);
+               distance=distsq(&viewer,&coords);
                distance=(viewdistance*viewdistance-(distance-(viewdistance*viewdistance*fadestart))*(1/(1-fadestart)))/viewdistance/viewdistance;
                if(distance>1)distance=1;
                if(distance>0){
@@ -5845,7 +5819,7 @@ int Person::DrawSkeleton(){
                                glEnable(GL_LIGHTING);
                                glEnable(GL_BLEND);
                                if(canattack&&cananger)
-                                       if(animation[targetanimation].attack==normalattack||animation[targetanimation].attack==reversed){
+                                       if(animation[animTarget].attack==normalattack||animation[animTarget].attack==reversed){
                                                glDisable(GL_TEXTURE_2D);
                                                glColor4f(1,0,0,0.8);
                                        }
@@ -5865,7 +5839,7 @@ int Person::DrawSkeleton(){
                                else skeleton.drawmodellow.drawdifftex(skeleton.drawmodel.textureptr);
                        }
 
-                       if(!(animation[targetanimation].attack==normalattack||animation[targetanimation].attack==reversed))
+                       if(!(animation[animTarget].attack==normalattack||animation[animTarget].attack==reversed))
                                if(tutoriallevel&&id!=0){
                                        glPopMatrix();
                                        glMatrixMode(GL_MODELVIEW);
@@ -5875,7 +5849,7 @@ int Person::DrawSkeleton(){
                                        glEnable(GL_LIGHTING);
                                        glEnable(GL_BLEND);
                                        if(canattack&&cananger)
-                                               if(animation[targetanimation].attack==normalattack||animation[targetanimation].attack==reversed){
+                                               if(animation[animTarget].attack==normalattack||animation[animTarget].attack==reversed){
                                                        glDisable(GL_TEXTURE_2D);
                                                        glColor4f(1,0,0,0.8);
                                                }
@@ -5915,7 +5889,7 @@ int Person::DrawSkeleton(){
                        for(k=0;k<num_weapons;k++){
                                i=weaponids[k];
                                if(weaponactive==k){
-                                       if(weapons.type[i]!=staff){
+                                       if(weapons[i].getType()!=staff){
                                                for(j=0;j<skeleton.num_muscles;j++){
                                                        if((skeleton.muscles[j].parent1->label==righthand||skeleton.muscles[j].parent2->label==righthand)&&skeleton.muscles[j].numvertices>0){
                                                                weaponattachmuscle=j;
@@ -5929,7 +5903,7 @@ int Person::DrawSkeleton(){
                                                weaponpoint=(skeleton.muscles[weaponattachmuscle].parent1->position+skeleton.muscles[weaponattachmuscle].parent2->position)/2;
                                                if(creature==wolftype)weaponpoint=(skeleton.joints[skeleton.jointlabels[rightwrist]].position*.7+skeleton.joints[skeleton.jointlabels[righthand]].position*.3);
                                        }
-                                       if(weapons.type[i]==staff){
+                                       if(weapons[i].getType()==staff){
                                                for(j=0;j<skeleton.num_muscles;j++){
                                                        if((skeleton.muscles[j].parent1->label==righthand||skeleton.muscles[j].parent2->label==righthand)&&skeleton.muscles[j].numvertices>0){
                                                                weaponattachmuscle=j;
@@ -5948,13 +5922,13 @@ int Person::DrawSkeleton(){
                                                vec2=(skeleton.joints[skeleton.jointlabels[rightwrist]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position);
                                                CrossProduct(&vec1,&vec2,&tempnormthing);
                                                Normalise(&tempnormthing);
-                                               if(targetanimation!=staffhitanim&&currentanimation!=staffhitanim&&targetanimation!=staffgroundsmashanim&&currentanimation!=staffgroundsmashanim&&targetanimation!=staffspinhitanim&&currentanimation!=staffspinhitanim)weaponpoint+=tempnormthing*.1-skeleton.specialforward[1]*.3+(skeleton.joints[skeleton.jointlabels[rightwrist]].position-skeleton.joints[skeleton.jointlabels[rightelbow]].position);
+                                               if(animTarget!=staffhitanim&&animCurrent!=staffhitanim&&animTarget!=staffgroundsmashanim&&animCurrent!=staffgroundsmashanim&&animTarget!=staffspinhitanim&&animCurrent!=staffspinhitanim)weaponpoint+=tempnormthing*.1-skeleton.specialforward[1]*.3+(skeleton.joints[skeleton.jointlabels[rightwrist]].position-skeleton.joints[skeleton.jointlabels[rightelbow]].position);
                                        }
                                }
                                if(weaponactive!=k&&weaponstuck!=k){
-                                       if(weapons.type[i]==knife)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[righthip]].position-skeleton.joints[skeleton.jointlabels[lefthip]].position)*.1+(skeleton.joints[skeleton.jointlabels[rightshoulder]].position-skeleton.joints[skeleton.jointlabels[leftshoulder]].position)*.35;
-                                       if(weapons.type[i]==sword)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33;
-                                       if(weapons.type[i]==staff)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33;
+                                       if(weapons[i].getType()==knife)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[righthip]].position-skeleton.joints[skeleton.jointlabels[lefthip]].position)*.1+(skeleton.joints[skeleton.jointlabels[rightshoulder]].position-skeleton.joints[skeleton.jointlabels[leftshoulder]].position)*.35;
+                                       if(weapons[i].getType()==sword)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33;
+                                       if(weapons[i].getType()==staff)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33;
                                        for(j=0;j<skeleton.num_muscles;j++){
                                                if((skeleton.muscles[j].parent1->label==abdomen||skeleton.muscles[j].parent2->label==abdomen)&&(skeleton.muscles[j].parent1->label==neck||skeleton.muscles[j].parent2->label==neck)&&skeleton.muscles[j].numvertices>0){
                                                        weaponrotatemuscle=j;
@@ -5970,152 +5944,153 @@ int Person::DrawSkeleton(){
                                                }
                                        }
                                }
-                               if(!skeleton.free){
-                                       weapons.position[i]=DoRotation(DoRotation(DoRotation(weaponpoint,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords+currentoffset*(1-target)*scale+targetoffset*target*scale;
-                                       weapons.bigrotation[i]=rotation;
-                                       weapons.bigtilt[i]=tilt;
-                                       weapons.bigtilt2[i]=tilt2;
-                               }
                                if(skeleton.free){
-                                       weapons.position[i]=weaponpoint*scale+coords;
-                                       weapons.bigrotation[i]=0;
-                                       weapons.bigtilt[i]=0;
-                                       weapons.bigtilt2[i]=0;
+                                       weapons[i].position=weaponpoint*scale+coords;
+                                       weapons[i].bigrotation=0;
+                                       weapons[i].bigtilt=0;
+                                       weapons[i].bigtilt2=0;
+                               } else {
+                                       weapons[i].position=DoRotation(DoRotation(DoRotation(weaponpoint,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords+currentoffset*(1-target)*scale+targetoffset*target*scale;
+                                       weapons[i].bigrotation=yaw;
+                                       weapons[i].bigtilt=tilt;
+                                       weapons[i].bigtilt2=tilt2;
                                }
-                               weapons.rotation1[i]=skeleton.muscles[weaponrotatemuscle].lastrotate1;
-                               weapons.rotation2[i]=skeleton.muscles[weaponrotatemuscle].lastrotate2;
-                               weapons.rotation3[i]=skeleton.muscles[weaponrotatemuscle].lastrotate3;
+                               weapons[i].rotation1=skeleton.muscles[weaponrotatemuscle].lastrotate1;
+                               weapons[i].rotation2=skeleton.muscles[weaponrotatemuscle].lastrotate2;
+                               weapons[i].rotation3=skeleton.muscles[weaponrotatemuscle].lastrotate3;
                                if(weaponactive==k){
-                                       if(weapons.type[i]==knife){
-                                               weapons.smallrotation[i]=180;
-                                               weapons.smallrotation2[i]=0;
+                                       if(weapons[i].getType()==knife){
+                                               weapons[i].smallrotation=180;
+                                               weapons[i].smallrotation2=0;
                                                if(isCrouch()||wasCrouch()){
-                                                       weapons.smallrotation2[i]=20;
+                                                       weapons[i].smallrotation2=20;
                                                }
-                                               if(targetanimation==hurtidleanim){
-                                                       weapons.smallrotation2[i]=50;
+                                               if(animTarget==hurtidleanim){
+                                                       weapons[i].smallrotation2=50;
                                                }
-                                               if((currentanimation==crouchstabanim&&targetanimation==crouchstabanim)||(currentanimation==backhandspringanim&&targetanimation==backhandspringanim)){
+                                               if((animCurrent==crouchstabanim&&animTarget==crouchstabanim)||(animCurrent==backhandspringanim&&animTarget==backhandspringanim)){
                                                        XYZ temppoint1,temppoint2,tempforward;
                                                        float distance;
 
                                                        temppoint1=skeleton.joints[skeleton.jointlabels[righthand]].position;
-                                                       temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target);
+                                                       temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target);
                                                        distance=findDistance(&temppoint1,&temppoint2);
-                                                       weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance);
-                                                       weapons.rotation2[i]*=360/6.28;
+                                                       weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance);
+                                                       weapons[i].rotation2*=360/6.28;
                                                        temppoint1.y=0;
                                                        temppoint2.y=0;
-                                                       weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
-                                                       weapons.rotation1[i]*=360/6.28;
-                                                       weapons.rotation3[i]=0;
-                                                       weapons.smallrotation[i]=-90;
-                                                       weapons.smallrotation2[i]=0;
-                                                       if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i];
+                                                       weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
+                                                       weapons[i].rotation1*=360/6.28;
+                                                       weapons[i].rotation3=0;
+                                                       weapons[i].smallrotation=-90;
+                                                       weapons[i].smallrotation2=0;
+                                                       if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1;
                                                }
-                                               if((currentanimation==knifeslashreversalanim&&targetanimation==knifeslashreversalanim)||(currentanimation==knifeslashreversedanim&&targetanimation==knifeslashreversedanim)){
+                                               if((animCurrent==knifeslashreversalanim&&animTarget==knifeslashreversalanim)||(animCurrent==knifeslashreversedanim&&animTarget==knifeslashreversedanim)){
                                                        XYZ temppoint1,temppoint2,tempforward;
                                                        float distance;
 
                                                        temppoint1=skeleton.joints[skeleton.jointlabels[righthand]].position;
-                                                       temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target);
+                                                       temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target);
                                                        distance=findDistance(&temppoint1,&temppoint2);
-                                                       weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance);
-                                                       weapons.rotation2[i]*=360/6.28;
+                                                       weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance);
+                                                       weapons[i].rotation2*=360/6.28;
                                                        temppoint1.y=0;
                                                        temppoint2.y=0;
-                                                       weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
-                                                       weapons.rotation1[i]*=360/6.28;
-                                                       weapons.rotation3[i]=0;
-                                                       weapons.smallrotation[i]=90;
-                                                       weapons.smallrotation2[i]=0;
-                                                       if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i];
+                                                       weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
+                                                       weapons[i].rotation1*=360/6.28;
+                                                       weapons[i].rotation3=0;
+                                                       weapons[i].smallrotation=90;
+                                                       weapons[i].smallrotation2=0;
+                                                       if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1;
                                                }
-                                               if(targetanimation==knifethrowanim){
-                                                       weapons.smallrotation[i]=90;
-                                                       //weapons.smallrotation2[i]=-90;
-                                                       weapons.smallrotation2[i]=0;
-                                                       weapons.rotation1[i]=0;
-                                                       weapons.rotation2[i]=0;
-                                                       weapons.rotation3[i]=0;
+                                               if(animTarget==knifethrowanim){
+                                                       weapons[i].smallrotation=90;
+                                                       //weapons[i].smallrotation2=-90;
+                                                       weapons[i].smallrotation2=0;
+                                                       weapons[i].rotation1=0;
+                                                       weapons[i].rotation2=0;
+                                                       weapons[i].rotation3=0;
                                                }
-                                               if(targetanimation==knifesneakattackanim&&targetframe<5){
-                                                       weapons.smallrotation[i]=-90;
-                                                       weapons.rotation1[i]=0;
-                                                       weapons.rotation2[i]=0;
-                                                       weapons.rotation3[i]=0;
+                                               if(animTarget==knifesneakattackanim&&frameTarget<5){
+                                                       weapons[i].smallrotation=-90;
+                                                       weapons[i].rotation1=0;
+                                                       weapons[i].rotation2=0;
+                                                       weapons[i].rotation3=0;
                                                }
                                        }
-                                       if(weapons.type[i]==sword){
-                                               weapons.smallrotation[i]=0;
-                                               weapons.smallrotation2[i]=0;
-                                               if(targetanimation==knifethrowanim){
-                                                       weapons.smallrotation[i]=-90;
-                                                       weapons.smallrotation2[i]=0;
-                                                       weapons.rotation1[i]=0;
-                                                       weapons.rotation2[i]=0;
-                                                       weapons.rotation3[i]=0;
+                                       if(weapons[i].getType()==sword){
+                                               weapons[i].smallrotation=0;
+                                               weapons[i].smallrotation2=0;
+                                               if(animTarget==knifethrowanim){
+                                                       weapons[i].smallrotation=-90;
+                                                       weapons[i].smallrotation2=0;
+                                                       weapons[i].rotation1=0;
+                                                       weapons[i].rotation2=0;
+                                                       weapons[i].rotation3=0;
                                                }
-                                               if((targetanimation==swordgroundstabanim&&currentanimation==swordgroundstabanim)||(targetanimation==swordsneakattackanim&&currentanimation==swordsneakattackanim)||(targetanimation==swordslashparryanim&&currentanimation==swordslashparryanim)||(targetanimation==swordslashparriedanim&&currentanimation==swordslashparriedanim)||(targetanimation==swordslashreversalanim&&currentanimation==swordslashreversalanim)||(targetanimation==swordslashreversedanim&&currentanimation==swordslashreversedanim)||(targetanimation==knifeslashreversalanim&&currentanimation==knifeslashreversalanim)||(targetanimation==knifeslashreversedanim&&currentanimation==knifeslashreversedanim)||(targetanimation==swordslashanim&&currentanimation==swordslashanim)||(targetanimation==drawleftanim&&currentanimation==drawleftanim)||(currentanimation==backhandspringanim&&targetanimation==backhandspringanim)){
+                                               if((animTarget==swordgroundstabanim&&animCurrent==swordgroundstabanim)||(animTarget==swordsneakattackanim&&animCurrent==swordsneakattackanim)||(animTarget==swordslashparryanim&&animCurrent==swordslashparryanim)||(animTarget==swordslashparriedanim&&animCurrent==swordslashparriedanim)||(animTarget==swordslashreversalanim&&animCurrent==swordslashreversalanim)||(animTarget==swordslashreversedanim&&animCurrent==swordslashreversedanim)||(animTarget==knifeslashreversalanim&&animCurrent==knifeslashreversalanim)||(animTarget==knifeslashreversedanim&&animCurrent==knifeslashreversedanim)||(animTarget==swordslashanim&&animCurrent==swordslashanim)||(animTarget==drawleftanim&&animCurrent==drawleftanim)||(animCurrent==backhandspringanim&&animTarget==backhandspringanim)){
                                                        XYZ temppoint1,temppoint2,tempforward;
                                                        float distance;
 
-                                                       temppoint1=animation[currentanimation].position[skeleton.jointlabels[righthand]][currentframe]*(1-target)+animation[targetanimation].position[skeleton.jointlabels[righthand]][targetframe]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position;
-                                                       temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target);
+                                                       temppoint1=animation[animCurrent].position[skeleton.jointlabels[righthand]][frameCurrent]*(1-target)+animation[animTarget].position[skeleton.jointlabels[righthand]][frameTarget]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position;
+                                                       temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target);
                                                        distance=findDistance(&temppoint1,&temppoint2);
-                                                       weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance);
-                                                       weapons.rotation2[i]*=360/6.28;
+                                                       weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance);
+                                                       weapons[i].rotation2*=360/6.28;
                                                        temppoint1.y=0;
                                                        temppoint2.y=0;
-                                                       weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
-                                                       weapons.rotation1[i]*=360/6.28;
-                                                       weapons.rotation3[i]=0;
-                                                       weapons.smallrotation[i]=90;
-                                                       weapons.smallrotation2[i]=0;
-                                                       if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i];
+                                                       weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
+                                                       weapons[i].rotation1*=360/6.28;
+                                                       weapons[i].rotation3=0;
+                                                       weapons[i].smallrotation=90;
+                                                       weapons[i].smallrotation2=0;
+                                                       if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1;
                                                }
                                        }
-                                       if(weapons.type[i]==staff){
-                                               weapons.smallrotation[i]=100;
-                                               weapons.smallrotation2[i]=0;
-                                               if((targetanimation==staffhitanim&&currentanimation==staffhitanim)||(targetanimation==staffhitreversedanim&&currentanimation==staffhitreversedanim)||(targetanimation==staffspinhitreversedanim&&currentanimation==staffspinhitreversedanim)||(targetanimation==staffgroundsmashanim&&currentanimation==staffgroundsmashanim)||(targetanimation==staffspinhitanim&&currentanimation==staffspinhitanim)){
+                                       if(weapons[i].getType()==staff){
+                                               weapons[i].smallrotation=100;
+                                               weapons[i].smallrotation2=0;
+                                               if((animTarget==staffhitanim&&animCurrent==staffhitanim)||(animTarget==staffhitreversedanim&&animCurrent==staffhitreversedanim)||(animTarget==staffspinhitreversedanim&&animCurrent==staffspinhitreversedanim)||(animTarget==staffgroundsmashanim&&animCurrent==staffgroundsmashanim)||(animTarget==staffspinhitanim&&animCurrent==staffspinhitanim)){
                                                        XYZ temppoint1,temppoint2,tempforward;
                                                        float distance;
 
-                                                       temppoint1=animation[currentanimation].position[skeleton.jointlabels[righthand]][currentframe]*(1-target)+animation[targetanimation].position[skeleton.jointlabels[righthand]][targetframe]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position;
-                                                       temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target);
+                                                       temppoint1=animation[animCurrent].position[skeleton.jointlabels[righthand]][frameCurrent]*(1-target)+animation[animTarget].position[skeleton.jointlabels[righthand]][frameTarget]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position;
+                                                       temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target);
                                                        distance=findDistance(&temppoint1,&temppoint2);
-                                                       weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance);
-                                                       weapons.rotation2[i]*=360/6.28;
+                                                       weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance);
+                                                       weapons[i].rotation2*=360/6.28;
                                                        temppoint1.y=0;
                                                        temppoint2.y=0;
-                                                       weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
-                                                       weapons.rotation1[i]*=360/6.28;
-                                                       weapons.rotation3[i]=0;
-                                                       weapons.smallrotation[i]=90;
-                                                       weapons.smallrotation2[i]=0;
-                                                       if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i];
+                                                       weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2));
+                                                       weapons[i].rotation1*=360/6.28;
+                                                       weapons[i].rotation3=0;
+                                                       weapons[i].smallrotation=90;
+                                                       weapons[i].smallrotation2=0;
+                                                       if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1;
                                                }
                                        }
                                }
                                if(weaponactive!=k&&weaponstuck!=k){
-                                       if(weapons.type[i]==knife){
-                                               weapons.smallrotation[i]=-70;
-                                               weapons.smallrotation2[i]=10;
+                                       if(weapons[i].getType()==knife){
+                                               weapons[i].smallrotation=-70;
+                                               weapons[i].smallrotation2=10;
                                        }
-                                       if(weapons.type[i]==sword){
-                                               weapons.smallrotation[i]=-100;
-                                               weapons.smallrotation2[i]=-8;
+                                       if(weapons[i].getType()==sword){
+                                               weapons[i].smallrotation=-100;
+                                               weapons[i].smallrotation2=-8;
                                        }
-                                       if(weapons.type[i]==staff){
-                                               weapons.smallrotation[i]=-100;
-                                               weapons.smallrotation2[i]=-8;
+                                       if(weapons[i].getType()==staff){
+                                               weapons[i].smallrotation=-100;
+                                               weapons[i].smallrotation2=-8;
                                        }
                                }
                                if(weaponstuck==k){
-                                       if(weaponstuckwhere==0)weapons.smallrotation[i]=180;
-                                       else weapons.smallrotation[i]=0;
-                                       weapons.smallrotation2[i]=10;
+                                       if(weaponstuckwhere==0)
+                                               weapons[i].smallrotation=180;
+                                       else
+                                               weapons[i].smallrotation=0;
+                                       weapons[i].smallrotation2=10;
                                }
                        }
                }
@@ -6123,8 +6098,8 @@ int Person::DrawSkeleton(){
 
        calcrot=0;
        if(skeleton.free)calcrot=1;
-       if(animation[targetanimation].attack||isRun()||targetanimation==staggerbackhardanim||isFlip()||targetanimation==climbanim||targetanimation==sneakanim||targetanimation==rollanim||targetanimation==walkanim||targetanimation==backhandspringanim||isFlip()||isWallJump())calcrot=1;
-       if(currentanimation!=targetanimation)calcrot=1;
+       if(animation[animTarget].attack||isRun()||animTarget==staggerbackhardanim||isFlip()||animTarget==climbanim||animTarget==sneakanim||animTarget==rollanim||animTarget==walkanim||animTarget==backhandspringanim||isFlip()||isWallJump())calcrot=1;
+       if(animCurrent!=animTarget)calcrot=1;
        //if(id==0)calcrot=1;
        if(skeleton.free==2)calcrot=0;
 
@@ -6148,7 +6123,7 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate,
 
        oldp1=*p1;
        *p1=*p1-*move;
-       if(findDistancefast(p1,&model->boundingspherecenter)>radius*radius+model->boundingsphereradius*model->boundingsphereradius)return -1;
+       if(distsq(p1,&model->boundingspherecenter)>radius*radius+model->boundingsphereradius*model->boundingsphereradius)return -1;
        if(*rotate)*p1=DoRotation(*p1,0,-*rotate,0);
        for(i=0;i<4;i++){
                for (j=0;j<model->TriangleNum;j++){
@@ -6174,22 +6149,22 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate,
                                                end.y-=radius;
                                                if(LineFacetd(&start,&end,&model->vertex[model->Triangles[j].vertex[0]],&model->vertex[model->Triangles[j].vertex[1]],&model->vertex[model->Triangles[j].vertex[2]],&model->facenormals[j],&point)){
                                                        p1->y=point.y+radius;
-                                                       if((targetanimation==jumpdownanim||isFlip())){
-                                                               if(isFlip()&&(targetframe<5||animation[targetanimation].label[targetframe]==7||animation[targetanimation].label[targetframe]==4))RagDoll(0);
+                                                       if((animTarget==jumpdownanim||isFlip())){
+                                                               if(isFlip()&&(frameTarget<5||animation[animTarget].label[frameTarget]==7||animation[animTarget].label[frameTarget]==4))RagDoll(0);
 
-                                                               if(targetanimation==jumpupanim){jumppower=-4;targetanimation=getIdle();}
+                                                               if(animTarget==jumpupanim){jumppower=-4;animTarget=getIdle();}
                                                                target=0;
-                                                               targetframe=0;
+                                                               frameTarget=0;
                                                                onterrain=1;
 
                                                                if(id==0){
-                                                                       OPENAL_SetPaused(channels[whooshsound], true);
+                                                                       pause_sound(whooshsound);
                                                                        OPENAL_SetVolume(channels[whooshsound], 0);
                                                                }
 
-                                                               if((targetanimation==jumpdownanim||isFlip())&&!wasLanding()&&!wasLandhard()){
+                                                               if((animTarget==jumpdownanim||isFlip())&&!wasLanding()&&!wasLandhard()){
                                                                        if(isFlip())jumppower=-4;
-                                                                       targetanimation=getLanding();
+                                                                       animTarget=getLanding();
                                                                        emit_sound_at(landsound, coords, 128.);
 
                                                                        if(id==0){
@@ -6226,7 +6201,7 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate,
                                                p1->x, p1->y, p1->z, radius/2);
                                        end=*p1-point;
                                        if(dotproduct(&model->facenormals[j],&end)>0&&intersecting){
-                                               if((targetanimation==jumpdownanim||targetanimation==jumpupanim||isFlip())){
+                                               if((animTarget==jumpdownanim||animTarget==jumpupanim||isFlip())){
                                                        start=velocity;
                                                        velocity-=DoRotation(model->facenormals[j],0,*rotate,0)*findLength(&velocity)*abs(normaldotproduct(velocity,DoRotation(model->facenormals[j],0,*rotate,0)));//(distance-radius*.5)/multiplier;
                                                        if(findLengthfast(&start)<findLengthfast(&velocity))velocity=start;