]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Objects/Person.cpp
Moved things related to tutorial in new Tutorial class
[lugaru.git] / Source / Objects / Person.cpp
index c1eb88dfa28505e5faa17c702c513e4ce83cd310..9969e61194413125dd5b4fbaec5d5fe40af5aca5 100644 (file)
@@ -18,16 +18,16 @@ You should have received a copy of the GNU General Public License
 along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-/**> HEADER FILES <**/
-#include "Animation/Animation.h"
-#include "Audio/openal_wrapper.h"
-#include "Audio/Sounds.h"
-#include "Level/Awards.h"
-#include "Level/Dialog.h"
-#include "Objects/Person.h"
-#include "Utils/Folders.h"
+#include "Objects/Person.hpp"
 
-#include "Game.h"
+#include "Animation/Animation.hpp"
+#include "Audio/openal_wrapper.hpp"
+#include "Audio/Sounds.hpp"
+#include "Game.hpp"
+#include "Level/Awards.hpp"
+#include "Level/Dialog.hpp"
+#include "Utils/Folders.hpp"
+#include "Tutorial.hpp"
 
 extern float multiplier;
 extern Terrain terrain;
@@ -45,7 +45,6 @@ extern float realtexdetail;
 extern GLubyte bloodText[512 * 512 * 3];
 extern GLubyte wolfbloodText[512 * 512 * 3];
 extern int bloodtoggle;
-extern Objects objects;
 extern bool autoslomo;
 extern float camerashake;
 extern float woozy;
@@ -58,9 +57,7 @@ extern bool freeze;
 extern bool winfreeze;
 extern bool showpoints;
 extern bool immediate;
-extern int tutoriallevel;
 extern float smoketex;
-extern int tutorialstage;
 extern bool reversaltrain;
 extern bool canattack;
 extern bool cananger;
@@ -481,10 +478,10 @@ void Person::CheckKick()
 
         victim->spurt = 1;
         DoBlood(.2, 250);
-        if (tutoriallevel != 1)
+        if (!Tutorial::active)
             emit_sound_at(heavyimpactsound, victim->coords);
         victim->RagDoll(0);
-        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
             victim->skeleton.joints[i].velocity += relative * 120 * damagemult;
         }
         victim->Puff(neck);
@@ -532,7 +529,7 @@ void Person::CatchFire()
     XYZ flatfacing, flatvelocity;
     int howmany;
     for (int i = 0; i < 10; i++) {
-        howmany = abs(Random() % (skeleton.joints.size()));
+        howmany = fabs(Random() % (skeleton.joints.size()));
         if (skeleton.free) {
             flatvelocity = skeleton.joints[howmany].velocity;
             flatfacing = skeleton.joints[howmany].position * scale + coords;
@@ -682,7 +679,7 @@ void Person::DoBlood(float howmuch, int which)
     // FIXME: should abstract out inputs
     static int bleedxint, bleedyint;
     static XYZ bloodvel;
-    if (bloodtoggle && tutoriallevel != 1) {
+    if (bloodtoggle && !Tutorial::active) {
         if (bleeding <= 0 && spurt) {
             spurt = 0;
             for (int i = 0; i < 3; i++) {
@@ -762,7 +759,7 @@ void Person::DoBloodBig(float howmuch, int which)
     if (howmuch && id == 0)
         blooddimamount = 1;
 
-    if (tutoriallevel != 1 || id == 0)
+    if (!Tutorial::active || id == 0)
         if (aitype != playercontrolled && howmuch > 0) {
             // play pain sounds
             int whichsound = -1;
@@ -792,7 +789,7 @@ void Person::DoBloodBig(float howmuch, int which)
         Game::flash(.5, 0);
     }
 
-    if (bloodtoggle && decals && tutoriallevel != 1) {
+    if (bloodtoggle && decals && !Tutorial::active) {
         if (bleeding <= 0 && spurt) {
             spurt = 0;
             for (int i = 0; i < 3; i++) {
@@ -947,7 +944,7 @@ void Person::DoBloodBig(float howmuch, int which)
     deathbleeding += bleeding;
     bloodloss += bleeding * 3;
 
-    if (tutoriallevel != 1 && aitype != playercontrolled && bloodloss > damagetolerance * 2 / 3 && bloodloss < damagetolerance && creature == rabbittype) {
+    if (!Tutorial::active && aitype != playercontrolled && bloodloss > damagetolerance * 2 / 3 && bloodloss < damagetolerance && creature == rabbittype) {
         if (abs(Random() % 2) == 0) {
             aitype = gethelptype;
             lastseentime = 12;
@@ -975,7 +972,7 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where)
     float coordsx, coordsy;
     float total;
 
-    if (bloodtoggle && decals && tutoriallevel != 1) {
+    if (bloodtoggle && decals && !Tutorial::active) {
         where -= coords;
         if (!skeleton.free)
             where = DoRotation(where, 0, -yaw, 0);
@@ -1160,7 +1157,7 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where)
     deathbleeding += bleeding;
     bloodloss += bleeding * 3;
 
-    if (tutoriallevel != 1 && aitype != playercontrolled && bloodloss > damagetolerance * 2 / 3 && bloodloss < damagetolerance && creature == rabbittype) {
+    if (!Tutorial::active && aitype != playercontrolled && bloodloss > damagetolerance * 2 / 3 && bloodloss < damagetolerance && creature == rabbittype) {
         if (abs(Random() % 2) == 0) {
             aitype = gethelptype;
             lastseentime = 12;
@@ -1185,7 +1182,7 @@ void Person::Reverse()
             || staggerdelay <= 0)
             && victim->animTarget != jumpupanim
             && victim->animTarget != jumpdownanim
-            && (tutoriallevel != 1 || cananger)
+            && (!Tutorial::active || cananger)
             && hostile))
         return;
 
@@ -1489,7 +1486,7 @@ void Person::Reverse()
 void Person::DoDamage(float howmuch)
 {
     // subtract health (temporary?)
-    if (tutoriallevel != 1)
+    if (!Tutorial::active)
         damage += howmuch / power;
     // stats?
     if (id != 0)
@@ -1501,9 +1498,9 @@ void Person::DoDamage(float howmuch)
     if (id == 0 && (bonus == solidhit || bonus == twoxcombo || bonus == threexcombo || bonus == fourxcombo || bonus == megacombo))
         bonus = 0;
     // subtract health
-    if (tutoriallevel != 1)
+    if (!Tutorial::active)
         permanentdamage += howmuch / 2 / power;
-    if (tutoriallevel != 1)
+    if (!Tutorial::active)
         superpermanentdamage += howmuch / 4 / power;
     // visual effects
     if (permanentdamage > damagetolerance / 2 && permanentdamage - howmuch < damagetolerance / 2 && Random() % 2)
@@ -1519,9 +1516,9 @@ void Person::DoDamage(float howmuch)
         blackout = 1;
 
     // cancel attack?
-    if (aitype == passivetype && damage < damagetolerance && ((tutoriallevel != 1 || cananger) && hostile))
+    if (aitype == passivetype && damage < damagetolerance && ((!Tutorial::active || cananger) && hostile))
         aitype = attacktypecutoff;
-    if (tutoriallevel != 1 && aitype != playercontrolled && damage < damagetolerance && damage > damagetolerance * 2 / 3 && creature == rabbittype) {
+    if (!Tutorial::active && aitype != playercontrolled && damage < damagetolerance && damage > damagetolerance * 2 / 3 && creature == rabbittype) {
         if (abs(Random() % 2) == 0) {
             aitype = gethelptype;
             lastseentime = 12;
@@ -1533,7 +1530,7 @@ void Person::DoDamage(float howmuch)
     if (howmuch > damagetolerance * 50 && skeleton.free != 2) {
         XYZ flatvelocity2;
         XYZ flatfacing2;
-        for (int i = 0; i < skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < skeleton.joints.size(); i++) {
             if (skeleton.free) {
                 flatvelocity2 = skeleton.joints[i].velocity;
                 flatfacing2 = skeleton.joints[i].position * scale + coords;
@@ -1562,7 +1559,7 @@ void Person::DoDamage(float howmuch)
     }
 
     // play sounds
-    if (tutoriallevel != 1 || id == 0)
+    if (!Tutorial::active || id == 0)
         if (speechdelay <= 0 && !dead && aitype != playercontrolled) {
             int whichsound = -1;
 
@@ -1676,7 +1673,7 @@ void Person::DoHead()
 
         skeleton.specialforward[0] = facing;
         //skeleton.specialforward[0]=DoRotation(facing,0,yaw,0);
-        for (int i = 0; i < skeleton.muscles.size(); i++) {
+        for (unsigned i = 0; i < skeleton.muscles.size(); i++) {
             if (skeleton.muscles[i].visible && (skeleton.muscles[i].parent1->label == head || skeleton.muscles[i].parent2->label == head)) {
                 skeleton.FindRotationMuscle(i, animTarget);
             }
@@ -1690,7 +1687,7 @@ void Person::DoHead()
 void Person::RagDoll(bool checkcollision)
 {
     static XYZ change;
-    static int l, i, j;
+    static int l, i;
     static float speed;
     if (!skeleton.free) {
         if (id == 0)
@@ -1722,7 +1719,7 @@ void Person::RagDoll(bool checkcollision)
         if (!isnormal(tilt)) tilt = 0;
         if (!isnormal(tilt2)) tilt2 = 0;
 
-        for (int i = 0; i < skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < skeleton.joints.size(); 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, yaw, 0);
@@ -1733,7 +1730,7 @@ void Person::RagDoll(bool checkcollision)
             skeleton.joints[i].realoldposition = skeleton.joints[i].position * scale + coords;
         }
 
-        for (int i = 0; i < skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < skeleton.joints.size(); i++) {
             skeleton.joints[i].velocity = 0;
             skeleton.joints[i].velchange = 0;
         }
@@ -1754,7 +1751,7 @@ void Person::RagDoll(bool checkcollision)
 
         speed *= speedmult;
 
-        for (int i = 0; i < skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < skeleton.joints.size(); i++) {
             if ((Animation::animations[animCurrent].attack != reversed || animCurrent == swordslashreversedanim) && animCurrent != rabbitkickanim && !isLanding() && !wasLanding() && Animation::animations[animCurrent].height == Animation::animations[animTarget].height)
                 skeleton.joints[i].velocity = velocity / scale + facing * 5 + DoRotation(DoRotation(DoRotation((targetFrame().joints[i].position - currentFrame().joints[i].position) * speed, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0);
             else
@@ -1763,30 +1760,29 @@ void Person::RagDoll(bool checkcollision)
             change.y = (float)(Random() % 100) / 100;
             change.z = (float)(Random() % 100) / 100;
             skeleton.joints[i].velocity += change;
-            skeleton.joints[abs(Random() % skeleton.joints.size())].velocity -= change;
+            skeleton.joints[fabs(Random() % skeleton.joints.size())].velocity -= change;
 
             change.x = (float)(Random() % 100) / 100;
             change.y = (float)(Random() % 100) / 100;
             change.z = (float)(Random() % 100) / 100;
             skeleton.joints[i].velchange += change;
-            skeleton.joints[abs(Random() % skeleton.joints.size())].velchange -= change;
+            skeleton.joints[fabs(Random() % skeleton.joints.size())].velchange -= change;
         }
 
         if (checkcollision) {
-            XYZ average;
             XYZ lowpoint;
             XYZ colpoint;
-            int howmany;
-            average = 0;
-            howmany = 0;
-            for (j = 0; j < skeleton.joints.size(); j++) {
-                average += skeleton.joints[j].position;
-                howmany++;
-            }
-            average /= howmany;
-            coords += average * scale;
-            for (j = 0; j < skeleton.joints.size(); j++) {
-                skeleton.joints[j].position -= average;
+            if (!skeleton.joints.empty()) {
+                XYZ average;
+                average = 0;
+                for (unsigned j = 0; j < skeleton.joints.size(); j++) {
+                    average += skeleton.joints[j].position;
+                }
+                average /= skeleton.joints.size();
+                coords += average * scale;
+                for (unsigned j = 0; j < skeleton.joints.size(); j++) {
+                    skeleton.joints[j].position -= average;
+                }
             }
 
             whichpatchx = coords.x / (terrain.size / subdivision * terrain.scale);
@@ -1796,7 +1792,7 @@ void Person::RagDoll(bool checkcollision)
                     i = terrain.patchobjects[whichpatchx][whichpatchz][l];
                     lowpoint = coords;
                     lowpoint.y += 1;
-                    if (SphereCheck(&lowpoint, 3, &colpoint, &objects.position[i], &objects.yaw[i], &objects.model[i]) != -1) {
+                    if (SphereCheck(&lowpoint, 3, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw, &Object::objects[i]->model) != -1) {
                         coords.x = lowpoint.x;
                         coords.z = lowpoint.z;
                     }
@@ -1807,7 +1803,7 @@ void Person::RagDoll(bool checkcollision)
         updatedelay = 0;
 
         velocity = 0;
-        for (int i = 0; i < skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < skeleton.joints.size(); i++) {
             velocity += skeleton.joints[i].velocity * scale;
         }
         velocity /= skeleton.joints.size();
@@ -2034,9 +2030,9 @@ void Person::DoAnimations()
                 drawtogglekeydown = 1;
             }
             //Footstep sounds
-            if (tutoriallevel != 1 || id == 0)
+            if (!Tutorial::active || id == 0)
                 if ((targetFrame().label && (targetFrame().label < 5 || targetFrame().label == 8))) {
-                    int whichsound;
+                    int whichsound = -1;
                     if (onterrain) {
                         if (terrain.getOpacity(coords.x, coords.z) < .2) {
                             if (targetFrame().label == 1)
@@ -2076,32 +2072,38 @@ void Person::DoAnimations()
                             if (r == 2)
                                 whichsound = highwhooshsound;
                         }
-                        if (Animation::animations[animTarget].attack == neutral)
+                        if (Animation::animations[animTarget].attack == neutral) {
                             whichsound = movewhooshsound;
-                    } else if (targetFrame().label == 4)
+                        }
+                    } else if (targetFrame().label == 4) {
                         whichsound = knifeswishsound;
-                    if (targetFrame().label == 8 && tutoriallevel != 1)
+                    }
+                    if (targetFrame().label == 8 && !Tutorial::active) {
                         whichsound = landsound2;
+                    }
 
-                    emit_sound_at(whichsound, coords, 256.);
+                    if (whichsound != -1) {
+                        emit_sound_at(whichsound, coords, 256.);
 
-                    if (id == 0)
-                        if (whichsound == footstepsound || whichsound == footstepsound2 || whichsound == footstepsound3 || whichsound == footstepsound4) {
-                            if (animTarget == wolfrunninganim || animTarget == rabbitrunninganim) {
-                                addEnvSound(coords, 15);
-                            } else {
-                                addEnvSound(coords, 6);
+                        if (id == 0) {
+                            if (whichsound == footstepsound || whichsound == footstepsound2 || whichsound == footstepsound3 || whichsound == footstepsound4) {
+                                if (animTarget == wolfrunninganim || animTarget == rabbitrunninganim) {
+                                    addEnvSound(coords, 15);
+                                } else {
+                                    addEnvSound(coords, 6);
+                                }
                             }
                         }
 
-                    if (targetFrame().label == 3) {
-                        whichsound--;
-                        emit_sound_at(whichsound, coords, 128.);
+                        if (targetFrame().label == 3) {
+                            whichsound--;
+                            emit_sound_at(whichsound, coords, 128.);
+                        }
                     }
                 }
 
             //Combat sounds
-            if (tutoriallevel != 1 || id == 0)
+            if (!Tutorial::active || id == 0)
                 if (speechdelay <= 0)
                     if (animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != staffgroundsmashanim)
                         if ((targetFrame().label && (targetFrame().label < 5 || targetFrame().label == 8))) {
@@ -2195,7 +2197,7 @@ void Person::DoAnimations()
                                     victim->skeleton.free = 1;
                                     victim->skeleton.broken = 0;
 
-                                    for (int j = 0; j < victim->skeleton.joints.size(); j++) {
+                                    for (unsigned j = 0; j < victim->skeleton.joints.size(); j++) {
                                         victim->skeleton.joints[j].velchange = 0;
                                         victim->skeleton.joints[j].locked = 0;
                                     }
@@ -2343,7 +2345,7 @@ void Person::DoAnimations()
                             if (creature == wolftype)
                                 DoBloodBig(0, 250);
                         }
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(heavyimpactsound, victim->coords, 128.);
                         }
                         if (creature == wolftype) {
@@ -2357,7 +2359,7 @@ void Person::DoAnimations()
                         relative.y = 0;
                         Normalise(&relative);
                         relative = DoRotation(relative, 0, -90, 0);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                         }
                         victim->jointVel(head) += relative * damagemult * 200;
@@ -2392,7 +2394,7 @@ void Person::DoAnimations()
                         relative.y -= 1;
                         Normalise(&relative);
                         relative = DoRotation(relative, 0, 90, 0);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 20;
                         }
                         victim->jointVel(head) += relative * damagemult * 100;
@@ -2408,7 +2410,7 @@ void Person::DoAnimations()
                             camerashake += .4;
                         victim->spurt = 1;
                         DoBlood(.2, 250);
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(heavyimpactsound, victim->coords, 160.);
                         }
                         if (creature == wolftype) {
@@ -2422,7 +2424,7 @@ void Person::DoAnimations()
                         relative.y = 0;
                         Normalise(&relative);
                         relative = DoRotation(relative, 0, -90, 0);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                         }
                         victim->jointVel(head) += relative * damagemult * 200;
@@ -2443,7 +2445,7 @@ void Person::DoAnimations()
                             camerashake += .4;
                         victim->spurt = 1;
                         DoBlood(.2, 250);
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(heavyimpactsound, victim->coords, 160.);
                         }
                         if (creature == wolftype) {
@@ -2457,7 +2459,7 @@ void Person::DoAnimations()
                         relative.y = 0;
                         Normalise(&relative);
                         relative = DoRotation(relative, 0, 90, 0);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                         }
                         victim->jointVel(head) += relative * damagemult * 200;
@@ -2486,7 +2488,7 @@ void Person::DoAnimations()
                         relative = victim->coords - coords;
                         relative.y = 0;
                         Normalise(&relative);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 30;
                         }
                         victim->jointVel(head) += relative * damagemult * 100;
@@ -2507,7 +2509,7 @@ void Person::DoAnimations()
                         victim->skeleton.broken = 0;
                         victim->skeleton.spinny = 1;
 
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velchange = 0;
                             victim->skeleton.joints[i].delay = 0;
                             victim->skeleton.joints[i].locked = 0;
@@ -2518,7 +2520,7 @@ void Person::DoAnimations()
                         relative = 0;
                         relative.y = 1;
                         Normalise(&relative);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity.y = relative.y * 10;
                             victim->skeleton.joints[i].position.y += relative.y * .3;
                             victim->skeleton.joints[i].oldposition.y += relative.y * .3;
@@ -2534,14 +2536,14 @@ void Person::DoAnimations()
                         escapednum = 0;
                         if (id == 0)
                             camerashake += .4;
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(heavyimpactsound, coords, 128.);
                         }
                         XYZ relative;
                         relative = victim->coords - coords;
                         relative.y = 0;
                         Normalise(&relative);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 90;
                         }
                         victim->Puff(abdomen);
@@ -2559,7 +2561,7 @@ void Person::DoAnimations()
                         escapednum = 0;
                         if (id == 0)
                             camerashake += .4;
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(thudsound, coords);
                         }
 
@@ -2568,7 +2570,7 @@ void Person::DoAnimations()
                         victim->skeleton.broken = 0;
                         victim->skeleton.spinny = 1;
 
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velchange = 0;
                             //victim->skeleton.joints[i].delay=0;
                             victim->skeleton.joints[i].locked = 0;
@@ -2578,7 +2580,7 @@ void Person::DoAnimations()
                         Normalise(&relative);
                         relative.y += .3;
                         Normalise(&relative);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 20;
                         }
                         if (!victim->dead)
@@ -2664,7 +2666,7 @@ void Person::DoAnimations()
                                 victim->skeleton.free = 1;
                                 victim->skeleton.broken = 0;
 
-                                for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                                for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                     victim->skeleton.joints[i].velchange = 0;
                                     victim->skeleton.joints[i].locked = 0;
                                     //victim->skeleton.joints[i].velocity=0;
@@ -2754,7 +2756,7 @@ void Person::DoAnimations()
                                 victim->skeleton.free = 1;
                                 victim->skeleton.broken = 0;
 
-                                for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                                for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                     victim->skeleton.joints[i].velchange = 0;
                                     victim->skeleton.joints[i].locked = 0;
                                     //victim->skeleton.joints[i].velocity=0;
@@ -2792,7 +2794,7 @@ void Person::DoAnimations()
                             victim->spurt = 1;
                             DoBlood(.2, 235);
                         }
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(heavyimpactsound, victim->coords, 128);
                         }
 
@@ -2801,7 +2803,7 @@ void Person::DoAnimations()
                         relative = victim->coords - coords;
                         relative.y = 0;
                         Normalise(&relative);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity = relative * 30;
                         }
                         victim->jointVel(head) += relative * damagemult * 150;
@@ -2827,15 +2829,15 @@ void Person::DoAnimations()
                         if (id == 0)
                             camerashake += .4;
                         if (victim->damage <= victim->damagetolerance - 60 && normaldotproduct(victim->facing, victim->coords - coords) < (scale * 5) * (scale * 5) * 0 && Animation::animations[victim->animTarget].height != lowheight) {
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 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::animations[victim->animTarget].height == lowheight) {
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 emit_sound_at(whooshhitsound, victim->coords);
                             }
                         } else {
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 emit_sound_at(heavyimpactsound, victim->coords);
                             }
                         }
@@ -2848,7 +2850,7 @@ void Person::DoAnimations()
                         Normalise(&relative);
                         relative.y = .3;
                         Normalise(&relative);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity = relative * 5;
                         }
                         victim->jointVel(abdomen) += relative * damagemult * 400;
@@ -2917,11 +2919,11 @@ void Person::DoAnimations()
                     if (hasvictim)
                         if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 4.5 &&/*Animation::animations[victim->animTarget].height!=lowheight&&*/victim->animTarget != dodgebackanim && victim->animTarget != rollanim) {
                             escapednum = 0;
-                            if (tutoriallevel != 1)
+                            if (!Tutorial::active)
                                 victim->DoBloodBig(1.5 / victim->armorhigh, 225);
 
                             award_bonus(id, Slicebonus);
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 emit_sound_at(knifeslicesound, victim->coords);
                             }
                             //victim->jointVel(abdomen)+=relative*damagemult*200;
@@ -2938,10 +2940,10 @@ void Person::DoAnimations()
                             if (aitype != playercontrolled)
                                 weaponmissdelay = .6;
 
-                            if (tutoriallevel != 1)
+                            if (!Tutorial::active)
                                 if (bloodtoggle && !weapons[weaponids[weaponactive]].bloody)
                                     weapons[weaponids[weaponactive]].bloody = 1;
-                            if (tutoriallevel != 1)
+                            if (!Tutorial::active)
                                 weapons[weaponids[weaponactive]].blooddrip += 3;
 
                             XYZ footvel, footpoint;
@@ -2951,7 +2953,7 @@ void Person::DoAnimations()
                             } else {
                                 footpoint = DoRotation((victim->jointPos(abdomen) + victim->jointPos(neck)) / 2, 0, victim->yaw, 0) * victim->scale + victim->coords;
                             }
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 if (bloodtoggle)
                                     Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .6, .3);
                                 footvel = DoRotation(facing, 0, 90, 0) * .8;
@@ -2961,7 +2963,7 @@ void Person::DoAnimations()
                                 Sprite::MakeSprite(bloodflamesprite, footpoint, footvel * 5, 1, 1, 1, .2, 1);
                                 Sprite::MakeSprite(bloodflamesprite, footpoint, footvel * 2, 1, 1, 1, .2, 1);
                             }
-                            if (tutoriallevel == 1) {
+                            if (Tutorial::active) {
                                 Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 1, 1, .6, .3);
                             }
                             victim->DoDamage(damagemult * 0);
@@ -2972,7 +2974,7 @@ void Person::DoAnimations()
                         if (victim->weaponactive == -1 || normaldotproduct(victim->facing, victim->coords - coords) > 0 || (Random() % 2 == 0)) {
                             award_bonus(id, Slashbonus);
                             escapednum = 0;
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 if (normaldotproduct(victim->facing, victim->coords - coords) < 0)
                                     victim->DoBloodBig(2 / victim->armorhigh, 190);
                                 else
@@ -2981,14 +2983,14 @@ void Person::DoAnimations()
                                 emit_sound_at(swordslicesound, victim->coords);
                             }
                             //victim->jointVel(abdomen)+=relative*damagemult*200;
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 victim->frameTarget = 0;
                                 victim->animTarget = staggerbackhardanim;
                                 victim->targetyaw = targetyaw + 180;
                                 victim->target = 0;
                             }
 
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 if (bloodtoggle && !weapons[weaponids[weaponactive]].bloody)
                                     weapons[weaponids[weaponactive]].bloody = 1;
                                 weapons[weaponids[weaponactive]].blooddrip += 3;
@@ -3057,7 +3059,7 @@ void Person::DoAnimations()
 
                 if (animTarget == staffhitanim && Animation::animations[animTarget].frames[frameCurrent].label == 5 && victim->animTarget != rollanim) {
                     if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 6.5 && victim->animTarget != dodgebackanim && victim->animTarget != sweepanim) {
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             weapons[weaponids[0]].damage += .4 + float(abs(Random() % 100) - 50) / 250;
                             escapednum = 0;
                             if (id == 0)
@@ -3075,13 +3077,13 @@ void Person::DoAnimations()
                         relative = DoRotation(relative, 0, 90, 0);
                         relative.y -= 1;
                         Normalise(&relative);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 60;
                         }
                         victim->jointVel(head) += relative * damagemult * 230;
                         victim->jointVel(neck) += relative * damagemult * 230;
                         victim->Puff(head);
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             victim->DoDamage(damagemult * 120 / victim->protectionhigh);
 
                             award_bonus(id, solidhit, 30);
@@ -3091,7 +3093,7 @@ void Person::DoAnimations()
 
                 if (animTarget == staffspinhitanim && Animation::animations[animTarget].frames[frameCurrent].label == 5 && victim->animTarget != rollanim) {
                     if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 6.5 && victim->animTarget != dodgebackanim && victim->animTarget != sweepanim) {
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             weapons[weaponids[0]].damage += .6 + float(abs(Random() % 100) - 50) / 250;
                             escapednum = 0;
                             if (id == 0)
@@ -3107,13 +3109,13 @@ void Person::DoAnimations()
                         relative.y = 0;
                         Normalise(&relative);
                         relative = DoRotation(relative, 0, -90, 0);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                         }
                         victim->jointVel(head) += relative * damagemult * 220;
                         victim->jointVel(neck) += relative * damagemult * 220;
                         victim->Puff(head);
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             victim->DoDamage(damagemult * 350 / victim->protectionhead);
 
                             award_bonus(id, solidhit, 60);
@@ -3124,7 +3126,7 @@ void Person::DoAnimations()
                 if (animTarget == staffgroundsmashanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) {
                     if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 6.5) {
                         escapednum = 0;
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             if (!victim->dead)
                                 weapons[weaponids[0]].damage += .4 + float(abs(Random() % 100) - 50) / 500;
                             if (id == 0)
@@ -3138,7 +3140,7 @@ void Person::DoAnimations()
                         victim->skeleton.free = 1;
                         victim->skeleton.broken = 0;
 
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velchange = 0;
                             victim->skeleton.joints[i].locked = 0;
                             //victim->skeleton.joints[i].velocity=0;
@@ -3150,18 +3152,18 @@ void Person::DoAnimations()
                         relative.y = -1;
                         Normalise(&relative);
                         if (!victim->dead) {
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 victim->skeleton.joints[i].velocity = relative * damagemult * 40;
                             }
                             victim->jointVel(abdomen) += relative * damagemult * 40;
                         }
                         if (victim->dead) {
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 victim->skeleton.joints[i].velocity = relative * damagemult * abs(Random() % 20);
                             }
                         }
                         victim->Puff(abdomen);
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             victim->DoDamage(damagemult * 100 / victim->protectionhigh);
 
                             if (!victim->dead) {
@@ -3189,11 +3191,11 @@ void Person::DoAnimations()
                                 DoBlood(.2, 250);
                             }
                             victim->RagDoll(0);
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                             }
                             victim->jointVel(head) += relative * damagemult * 200;
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 emit_sound_at(heavyimpactsound, victim->coords, 128.);
                             }
                             victim->Puff(head);
@@ -3208,7 +3210,7 @@ void Person::DoAnimations()
                         } else {
                             if (victim->damage >= victim->damagetolerance)
                                 victim->RagDoll(0);
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 victim->skeleton.joints[i].velocity += relative * damagemult * 10;
                             }
                             victim->jointVel(abdomen) += relative * damagemult * 200;
@@ -3216,7 +3218,7 @@ void Person::DoAnimations()
                             victim->animTarget = staggerbackhighanim;
                             victim->targetyaw = targetyaw + 180;
                             victim->target = 0;
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 emit_sound_at(landsound2, victim->coords, 128.);
                             }
                             victim->Puff(abdomen);
@@ -3238,7 +3240,7 @@ void Person::DoAnimations()
                         escapednum = 0;
                         if (id == 0)
                             camerashake += .2;
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(landsound2, victim->coords, 128.);
                         }
                         XYZ relative;
@@ -3249,12 +3251,12 @@ void Person::DoAnimations()
                         if (Animation::animations[victim->animTarget].height == middleheight || Animation::animations[victim->animCurrent].height == middleheight || victim->damage >= victim->damagetolerance - 40) {
                             victim->RagDoll(0);
 
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 victim->skeleton.joints[i].velocity += relative * damagemult * 15;
                             }
                             relative = DoRotation(relative, 0, -90, 0);
                             relative.y += .1;
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 if (victim->skeleton.joints[i].label == leftfoot || victim->skeleton.joints[i].label == rightfoot || victim->skeleton.joints[i].label == leftankle || victim->skeleton.joints[i].label == rightankle)
                                     victim->skeleton.joints[i].velocity = relative * 80;
                             }
@@ -3264,11 +3266,11 @@ void Person::DoAnimations()
                         } else {
                             if (victim->damage >= victim->damagetolerance)
                                 victim->RagDoll(0);
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 victim->skeleton.joints[i].velocity += relative * damagemult * 10;
                             }
                             relative = DoRotation(relative, 0, -90, 0);
-                            for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                            for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                                 if (victim->skeleton.joints[i].label == leftfoot || victim->skeleton.joints[i].label == rightfoot || victim->skeleton.joints[i].label == leftankle || victim->skeleton.joints[i].label == rightankle)
                                     victim->skeleton.joints[i].velocity += relative * damagemult * 80;
                             }
@@ -3277,7 +3279,7 @@ void Person::DoAnimations()
                             victim->animTarget = staggerbackhighanim;
                             victim->targetyaw = targetyaw + 180;
                             victim->target = 0;
-                            if (tutoriallevel != 1) {
+                            if (!Tutorial::active) {
                                 emit_sound_at(landsound2, victim->coords, 128.);
                             }
                             victim->Puff(abdomen);
@@ -3298,7 +3300,7 @@ void Person::DoAnimations()
                         victim->spurt = 1;
                         DoBlood(.2, 230);
                     }
-                    if (tutoriallevel != 1) {
+                    if (!Tutorial::active) {
                         emit_sound_at(heavyimpactsound, victim->coords, 128.);
                     }
                     if (creature == wolftype) {
@@ -3311,7 +3313,7 @@ void Person::DoAnimations()
                     relative = victim->coords - oldcoords;
                     relative.y = 0;
                     Normalise(&relative);
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                     }
                     victim->jointVel(abdomen) += relative * damagemult * 200;
@@ -3348,7 +3350,7 @@ void Person::DoAnimations()
                     relative = victim->coords - oldcoords;
                     relative.y = 0;
                     Normalise(&relative);
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 30;
                     }
                     victim->jointVel(abdomen) += relative * damagemult * 200;
@@ -3367,7 +3369,7 @@ void Person::DoAnimations()
 
                     award_bonus(id, staffreversebonus);
 
-                    if (tutoriallevel != 1) {
+                    if (!Tutorial::active) {
                         emit_sound_at(heavyimpactsound, victim->coords, 128.);
                     }
                     victim->RagDoll(0);
@@ -3377,7 +3379,7 @@ void Person::DoAnimations()
                     relative = victim->coords - oldcoords;
                     relative.y = 0;
                     Normalise(&relative);
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 30;
                     }
                     victim->jointVel(abdomen) += relative * damagemult * 200;
@@ -3393,7 +3395,7 @@ void Person::DoAnimations()
                     relative.y = 0;
                     Normalise(&relative);
                     relative.y -= .1;
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 70;
                     }
                     victim->jointVel(lefthand) *= .1;
@@ -3443,7 +3445,7 @@ void Person::DoAnimations()
                     relative.y = 0;
                     Normalise(&relative);
                     relative.y -= .1;
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 70;
                     }
                     victim->jointVel(lefthand) *= .1 - 1;
@@ -3466,7 +3468,7 @@ void Person::DoAnimations()
                         victim->spurt = 1;
                         DoBlood(.2, 230);
                     }
-                    if (tutoriallevel != 1) {
+                    if (!Tutorial::active) {
                         emit_sound_at(heavyimpactsound, victim->coords, 128.);
                     }
                     victim->RagDoll(0);
@@ -3475,7 +3477,7 @@ void Person::DoAnimations()
                     relative.y = 0;
                     Normalise(&relative);
                     relative = DoRotation(relative, 0, -90, 0);
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                     }
                     victim->jointVel(abdomen) += relative * damagemult * 200;
@@ -3495,7 +3497,7 @@ void Person::DoAnimations()
                     Normalise(&relative);
                     if (victim->id == 0)
                         relative /= 30;
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 40;
                     }
                     victim->damage = victim->damagetolerance;
@@ -3570,12 +3572,12 @@ void Person::DoAnimations()
                 if (hasvictim && (animTarget == knifefollowanim || animTarget == knifesneakattackanim) && Animation::animations[animTarget].frames[frameCurrent].label == 6) {
                     escapednum = 0;
                     victim->velocity = 0;
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity = 0;
                     }
                     if (animTarget == knifefollowanim) {
                         victim->RagDoll(0);
-                        for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                        for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                             victim->skeleton.joints[i].velocity = 0;
                         }
                     }
@@ -3628,7 +3630,7 @@ void Person::DoAnimations()
                 if (hasvictim && animTarget == swordsneakattackanim && Animation::animations[animTarget].frames[frameCurrent].label == 6) {
                     escapednum = 0;
                     victim->velocity = 0;
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity = 0;
                     }
                     if (weaponactive != -1) {
@@ -3659,7 +3661,7 @@ void Person::DoAnimations()
                         DoBlood(.2, 240);
                     }
                     if (weaponactive == -1) {
-                        if (tutoriallevel != 1) {
+                        if (!Tutorial::active) {
                             emit_sound_at(heavyimpactsound, victim->coords, 128.);
                         }
                     }
@@ -3696,7 +3698,7 @@ void Person::DoAnimations()
                     relative = DoRotation(relative, 0, 90, 0);
                     relative.y = .5;
                     Normalise(&relative);
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 20;
                     }
                     victim->jointVel(head) += relative * damagemult * 200;
@@ -3716,7 +3718,7 @@ void Person::DoAnimations()
                     relative = DoRotation(relative, 0, 90, 0);
                     relative.y = .5;
                     Normalise(&relative);
-                    for (int i = 0; i < victim->skeleton.joints.size(); i++) {
+                    for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) {
                         victim->skeleton.joints[i].velocity += relative * damagemult * 20;
                     }
                     victim->jointVel(head) += relative * damagemult * 200;
@@ -3730,7 +3732,7 @@ void Person::DoAnimations()
 
 
             //Animation end
-            if (frameTarget > Animation::animations[animCurrent].frames.size() - 1) {
+            if (frameTarget > int(Animation::animations[animCurrent].frames.size()) - 1) {
                 frameTarget = 0;
                 if (wasStop()) {
                     animTarget = getIdle();
@@ -4183,23 +4185,23 @@ void Person::DoAnimations()
                 oldrot = 0;
                 targetrot = 0;
             }
-            if (frameCurrent >= Animation::animations[animCurrent].frames.size()) {
+            if (frameCurrent >= int(Animation::animations[animCurrent].frames.size())) {
                 frameCurrent = Animation::animations[animCurrent].frames.size() - 1;
             }
             if (animCurrent != oldanimCurrent || animTarget != oldanimTarget || ((frameCurrent != oldframeCurrent || frameTarget != oldframeTarget) && !calcrot)) {
                 //Old rotates
-                for (int i = 0; i < skeleton.joints.size(); i++) {
+                for (unsigned i = 0; i < skeleton.joints.size(); i++) {
                     skeleton.joints[i].position = currentFrame().joints[i].position;
                 }
 
                 skeleton.FindForwards();
 
-                for (int i = 0; i < skeleton.muscles.size(); i++) {
+                for (unsigned i = 0; i < skeleton.muscles.size(); i++) {
                     if (skeleton.muscles[i].visible) {
                         skeleton.FindRotationMuscle(i, animTarget);
                     }
                 }
-                for (int i = 0; i < skeleton.muscles.size(); i++) {
+                for (unsigned i = 0; i < skeleton.muscles.size(); i++) {
                     if (skeleton.muscles[i].visible) {
                         if (isnormal((float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100))
                             skeleton.muscles[i].oldrotate1 = (float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100;
@@ -4211,18 +4213,18 @@ void Person::DoAnimations()
                 }
 
                 //New rotates
-                for (int i = 0; i < skeleton.joints.size(); i++) {
+                for (unsigned i = 0; i < skeleton.joints.size(); i++) {
                     skeleton.joints[i].position = targetFrame().joints[i].position;
                 }
 
                 skeleton.FindForwards();
 
-                for (int i = 0; i < skeleton.muscles.size(); i++) {
+                for (unsigned i = 0; i < skeleton.muscles.size(); i++) {
                     if (skeleton.muscles[i].visible) {
                         skeleton.FindRotationMuscle(i, animTarget);
                     }
                 }
-                for (int i = 0; i < skeleton.muscles.size(); i++) {
+                for (unsigned i = 0; i < skeleton.muscles.size(); i++) {
                     if (skeleton.muscles[i].visible) {
                         if (isnormal((float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100))
                             skeleton.muscles[i].newrotate1 = (float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100;
@@ -4245,12 +4247,12 @@ void Person::DoAnimations()
             oldframeTarget = frameTarget;
             oldframeCurrent = frameCurrent;
 
-            for (int i = 0; i < skeleton.joints.size(); i++) {
+            for (unsigned i = 0; i < skeleton.joints.size(); i++) {
                 skeleton.joints[i].velocity = (currentFrame().joints[i].position * (1 - target) + targetFrame().joints[i].position * (target) - skeleton.joints[i].position) / multiplier;
                 skeleton.joints[i].position = currentFrame().joints[i].position * (1 - target) + targetFrame().joints[i].position * (target);
             }
             offset = currentoffset * (1 - target) + targetoffset * target;
-            for (int i = 0; i < skeleton.muscles.size(); i++) {
+            for (unsigned i = 0; i < skeleton.muscles.size(); i++) {
                 if (skeleton.muscles[i].visible) {
                     skeleton.muscles[i].rotate1 = skeleton.muscles[i].oldrotate1 * (1 - target) + skeleton.muscles[i].newrotate1 * (target);
                     skeleton.muscles[i].rotate2 = skeleton.muscles[i].oldrotate2 * (1 - target) + skeleton.muscles[i].newrotate2 * (target);
@@ -4281,9 +4283,7 @@ void Person::DoStuff()
     static XYZ flatfacing;
     static XYZ flatvelocity;
     static float flatvelspeed;
-    static int i, j, l;
-    static XYZ average;
-    static int howmany;
+    static int i, l;
     static int bloodsize;
     static int startx, starty, endx, endy;
     static GLubyte color;
@@ -4382,7 +4382,7 @@ void Person::DoStuff()
     }
     while (flamedelay < 0 && onfire) {
         flamedelay += .006;
-        howmany = abs(Random() % (skeleton.joints.size()));
+        int howmany = fabs(Random() % (skeleton.joints.size()));
         if (skeleton.free) {
             flatvelocity = skeleton.joints[howmany].velocity * scale / 2;
             flatfacing = skeleton.joints[howmany].position * scale + coords;
@@ -4393,9 +4393,9 @@ void Person::DoStuff()
         Sprite::MakeSprite(flamesprite, flatfacing, flatvelocity, 1, 1, 1, .6 + (float)abs(Random() % 100) / 200 - .25, 1);
     }
 
-    while (flamedelay < 0 && !onfire && tutoriallevel == 1 && id != 0) {
+    while (flamedelay < 0 && !onfire && Tutorial::active && id != 0) {
         flamedelay += .05;
-        howmany = abs(Random() % (skeleton.joints.size()));
+        int howmany = fabs(Random() % (skeleton.joints.size()));
         if (skeleton.free) {
             flatvelocity = skeleton.joints[howmany].velocity * scale / 2;
             flatfacing = skeleton.joints[howmany].position * scale + coords;
@@ -4487,7 +4487,7 @@ void Person::DoStuff()
             }
             dead = 2;
             if (animTarget == knifefollowedanim && !skeleton.free) {
-                for (int i = 0; i < skeleton.joints.size(); i++) {
+                for (unsigned i = 0; i < skeleton.joints.size(); i++) {
                     skeleton.joints[i].velocity = 0;
                     skeleton.joints[i].velocity.y = -2;
                 }
@@ -4534,7 +4534,7 @@ void Person::DoStuff()
             endy = starty;
 
         for (i = startx; i < endx; i++) {
-            for (j = starty; j < endy; j++) {
+            for (int j = starty; j < endy; j++) {
                 if (Random() % 2 == 0) {
                     color = Random() % 85 + 170;
                     if (skeleton.skinText[i * skeleton.skinsize * 3 + j * 3 + 0] > color / 2)
@@ -4830,12 +4830,12 @@ 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.yaw[j], 0);
+                int j = terrain.patchobjects[whichpatchx][whichpatchz][l];
+                XYZ point = DoRotation(headpoint - Object::objects[j]->position, 0, -Object::objects[j]->yaw, 0);
                 float size = .8;
                 float opacity = .6;
                 float yaw = 0;
-                objects.model[j].MakeDecal(blooddecalslow, &point, &size, &opacity, &yaw);
+                Object::objects[j]->model.MakeDecal(blooddecalslow, &point, &size, &opacity, &yaw);
             }
         bled = 1;
     }
@@ -4925,7 +4925,7 @@ void Person::DoStuff()
         dead = 0;
         skeleton.free = 1;
         damage -= 20;
-        for (int i = 0; i < skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < skeleton.joints.size(); i++) {
             skeleton.joints[i].velocity = 0;
         }
     }
@@ -4997,21 +4997,22 @@ void Person::DoStuff()
             award_bonus(id, deepimpact);
         DoDamage(damageamount / ((protectionhigh + protectionhead + protectionlow) / 3));
 
+        XYZ average;
         average = 0;
-        howmany = 0;
-        for (j = 0; j < skeleton.joints.size(); j++) {
-            average += skeleton.joints[j].position;
-            howmany++;
-        }
-        average /= howmany;
-        coords += average * scale;
-        for (j = 0; j < skeleton.joints.size(); j++) {
-            skeleton.joints[j].position -= average;
+        if (!skeleton.joints.empty()) {
+            for (unsigned j = 0; j < skeleton.joints.size(); j++) {
+                average += skeleton.joints[j].position;
+            }
+            average /= skeleton.joints.size();
+            coords += average * scale;
+            for (unsigned j = 0; j < skeleton.joints.size(); j++) {
+                skeleton.joints[j].position -= average;
+            }
+            average /= multiplier;
         }
-        average /= multiplier;
 
         velocity = 0;
-        for (int i = 0; i < skeleton.joints.size(); i++) {
+        for (unsigned i = 0; i < skeleton.joints.size(); i++) {
             velocity += skeleton.joints[i].velocity * scale;
         }
         velocity /= skeleton.joints.size();
@@ -5039,12 +5040,12 @@ 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.yaw[j], 0);
+                            int j = terrain.patchobjects[whichpatchx][whichpatchz][l];
+                            XYZ point = DoRotation(headpoint - Object::objects[j]->position, 0, -Object::objects[j]->yaw, 0);
                             float size = .2 * 1.2;
                             float opacity = .6;
                             float yaw = 0;
-                            objects.model[j].MakeDecal(blooddecal, &point, &size, &opacity, &yaw);
+                            Object::objects[j]->model.MakeDecal(blooddecal, &point, &size, &opacity, &yaw);
                         }
                     bled = 1;
                 }
@@ -5058,12 +5059,12 @@ 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.yaw[j], 0);
+                            int j = terrain.patchobjects[whichpatchx][whichpatchz][l];
+                            XYZ point = DoRotation(headpoint - Object::objects[j]->position, 0, -Object::objects[j]->yaw, 0);
                             float size = .8;
                             float opacity = .6;
                             float yaw = 0;
-                            objects.model[j].MakeDecal(blooddecalslow, &point, &size, &opacity, &yaw);
+                            Object::objects[j]->model.MakeDecal(blooddecalslow, &point, &size, &opacity, &yaw);
                         }
                     bled = 1;
                 }
@@ -5080,11 +5081,11 @@ void Person::DoStuff()
                 canrecover = 0;
             if (velocity.y < -30)
                 canrecover = 0;
-            for (i = 0; i < objects.numobjects; i++) {
-                if (objects.type[i] != treeleavestype && objects.type[i] != bushtype && objects.type[i] != firetype) {
+            for (i = 0; i < Object::objects.size(); i++) {
+                if (Object::objects[i]->type != treeleavestype && Object::objects[i]->type != bushtype && Object::objects[i]->type != firetype) {
                     colviewer = startpoint;
                     coltarget = endpoint;
-                    if (objects.model[i].LineCheck(&colviewer, &coltarget, &colpoint, &objects.position[i], &objects.yaw[i]) != -1)
+                    if (Object::objects[i]->model.LineCheck(&colviewer, &coltarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw) != -1)
                         canrecover = 0;
                 }
             }
@@ -5125,7 +5126,7 @@ void Person::DoStuff()
                 frameCurrent = 0;
                 target = 0;
 
-                for (int i = 0; i < skeleton.joints.size(); i++) {
+                for (unsigned i = 0; i < skeleton.joints.size(); i++) {
                     tempanimation.frames[0].joints[i].position = skeleton.joints[i].position;
                     tempanimation.frames[0].joints[i].position = DoRotation(tempanimation.frames[0].joints[i].position, 0, -yaw, 0);
                 }
@@ -5216,7 +5217,7 @@ void Person::DoStuff()
                 if (middle.y > 0 && animTarget != rollanim)
                     targetoffset.y = middle.y + 1;
 
-                for (int i = 0; i < skeleton.joints.size(); i++) {
+                for (unsigned i = 0; i < skeleton.joints.size(); i++) {
                     tempanimation.frames[0].joints[i].position = skeleton.joints[i].position;
                     tempanimation.frames[0].joints[i].position = DoRotation(tempanimation.frames[0].joints[i].position, 0, -yaw, 0);
                 }
@@ -5272,36 +5273,36 @@ void Person::DoStuff()
 
     if (aitype != passivetype || skeleton.free == 1)
         if (findLengthfast(&velocity) > .1)
-            for (i = 0; i < objects.numobjects; i++) {
-                if (objects.type[i] == firetype)
-                    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) {
+            for (i = 0; i < Object::objects.size(); i++) {
+                if (Object::objects[i]->type == firetype)
+                    if (distsqflat(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 12 && distsq(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 49) {
                         if (onfire) {
-                            if (!objects.onfire[i]) {
-                                emit_sound_at(firestartsound, objects.position[i]);
+                            if (!Object::objects[i]->onfire) {
+                                emit_sound_at(firestartsound, Object::objects[i]->position);
                             }
-                            objects.onfire[i] = 1;
+                            Object::objects[i]->onfire = 1;
                         }
                         if (!onfire) {
-                            if (objects.onfire[i]) {
+                            if (Object::objects[i]->onfire) {
                                 CatchFire();
                             }
                         }
                     }
-                if (objects.type[i] == bushtype)
-                    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 (Object::objects[i]->type == bushtype)
+                    if (distsqflat(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 12 && distsq(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 49) {
                         if (onfire) {
-                            if (!objects.onfire[i]) {
-                                emit_sound_at(firestartsound, objects.position[i]);
+                            if (!Object::objects[i]->onfire) {
+                                emit_sound_at(firestartsound, Object::objects[i]->position);
                             }
-                            objects.onfire[i] = 1;
+                            Object::objects[i]->onfire = 1;
                         }
 
                         if (!onfire) {
-                            if (objects.onfire[i]) {
+                            if (Object::objects[i]->onfire) {
                                 CatchFire();
                             }
                         }
-                        if (objects.messedwith[i] <= 0) {
+                        if (Object::objects[i]->messedwith <= 0) {
                             XYZ tempvel;
                             XYZ pos;
 
@@ -5311,14 +5312,14 @@ void Person::DoStuff()
                                 addEnvSound(coords, 4 * findLength(&velocity));
                             }
 
-                            int howmany;
+                            int howmany = 0;
                             if (environment == grassyenvironment)
                                 howmany = findLength(&velocity) * 4;
                             if (environment == snowyenvironment)
                                 howmany = findLength(&velocity) * 2;
                             if (detail == 2)
                                 if (environment != desertenvironment)
-                                    for (j = 0; j < howmany; j++) {
+                                    for (int j = 0; j < howmany; j++) {
                                         tempvel.x = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.y = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.z = float(abs(Random() % 100) - 50) / 20;
@@ -5333,7 +5334,7 @@ void Person::DoStuff()
                             howmany = findLength(&velocity) * 4;
                             if (detail == 2)
                                 if (environment == snowyenvironment)
-                                    for (j = 0; j < howmany; j++) {
+                                    for (int j = 0; j < howmany; j++) {
                                         tempvel.x = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.y = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.z = float(abs(Random() % 100) - 50) / 20;
@@ -5346,22 +5347,22 @@ void Person::DoStuff()
                                         Sprite::setLastSpriteSpecial(2);
                                     }
                         }
-                        objects.rotx[i] += velocity.x * multiplier * 6;
-                        objects.roty[i] += velocity.z * multiplier * 6;
-                        objects.messedwith[i] = .5;
+                        Object::objects[i]->rotx += velocity.x * multiplier * 6;
+                        Object::objects[i]->roty += velocity.z * multiplier * 6;
+                        Object::objects[i]->messedwith = .5;
                     }
                 XYZ tempcoord;
-                if (objects.type[i] == treeleavestype && environment != desertenvironment) {
-                    if (objects.pitch[i] == 0)
+                if (Object::objects[i]->type == treeleavestype && environment != desertenvironment) {
+                    if (Object::objects[i]->pitch == 0)
                         tempcoord = coords;
                     else {
-                        tempcoord = coords - objects.position[i];
-                        tempcoord = DoRotation(tempcoord, 0, -objects.yaw[i], 0);
-                        tempcoord = DoRotation(tempcoord, -objects.pitch[i], 0, 0);
-                        tempcoord += objects.position[i];
+                        tempcoord = coords - Object::objects[i]->position;
+                        tempcoord = DoRotation(tempcoord, 0, -Object::objects[i]->yaw, 0);
+                        tempcoord = DoRotation(tempcoord, -Object::objects[i]->pitch, 0, 0);
+                        tempcoord += Object::objects[i]->position;
                     }
-                    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) {
+                    if (distsqflat(&tempcoord, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 8 && distsq(&tempcoord, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 300 && tempcoord.y > Object::objects[i]->position.y + 3 * Object::objects[i]->scale) {
+                        if (Object::objects[i]->messedwith <= 0) {
                             XYZ tempvel;
                             XYZ pos;
 
@@ -5371,14 +5372,14 @@ void Person::DoStuff()
                                 addEnvSound(coords, 4 * findLength(&velocity));
                             }
 
-                            int howmany;
+                            int howmany = 0;
                             if (environment == grassyenvironment)
                                 howmany = findLength(&velocity) * 4;
                             if (environment == snowyenvironment)
                                 howmany = findLength(&velocity) * 2;
                             if (detail == 2)
                                 if (environment != desertenvironment)
-                                    for (j = 0; j < howmany; j++) {
+                                    for (int j = 0; j < howmany; j++) {
                                         tempvel.x = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.y = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.z = float(abs(Random() % 100) - 50) / 20;
@@ -5394,7 +5395,7 @@ void Person::DoStuff()
                             howmany = findLength(&velocity) * 4;
                             if (detail == 2)
                                 if (environment == snowyenvironment)
-                                    for (j = 0; j < howmany; j++) {
+                                    for (int j = 0; j < howmany; j++) {
                                         tempvel.x = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.y = float(abs(Random() % 100) - 50) / 20;
                                         tempvel.z = float(abs(Random() % 100) - 50) / 20;
@@ -5408,7 +5409,7 @@ void Person::DoStuff()
                                         Sprite::setLastSpriteSpecial(2);
                                     }
                         }
-                        objects.messedwith[i] = .5;
+                        Object::objects[i]->messedwith = .5;
                     }
                 }
             }
@@ -5421,7 +5422,7 @@ void Person::DoStuff()
         if (hasvictim)
             if (aitype != passivetype && victim->skeleton.free && !victim->dead)
                 play = 1;
-        if (tutoriallevel == 1 && id != 0)
+        if (Tutorial::active && id != 0)
             play = 0;
         if (play && aitype != playercontrolled) {
             int whichsound = -1;
@@ -6051,7 +6052,7 @@ int Person::DrawSkeleton()
         }
         static XYZ mid;
         static float M[16];
-        static int i, j, k;
+        static int i, k;
         static int weaponattachmuscle;
         static int weaponrotatemuscle;
         static XYZ weaponpoint;
@@ -6103,7 +6104,7 @@ int Person::DrawSkeleton()
                 skeleton.drawmodelclothes.vertex[i] = 0;
                 skeleton.drawmodelclothes.vertex[i].y = 999;
             }
-            for (int i = 0; i < skeleton.muscles.size(); i++) {
+            for (unsigned i = 0; i < skeleton.muscles.size(); i++) {
                 // convenience renames
                 const int p1 = skeleton.muscles[i].parent1->label;
                 const int p2 = skeleton.muscles[i].parent2->label;
@@ -6162,7 +6163,7 @@ int Person::DrawSkeleton()
                     glRotatef(-skeleton.muscles[i].lastrotate3, 0, 1, 0);
 
                     if (playerdetail || skeleton.free == 3) {
-                        for (j = 0; j < skeleton.muscles[i].vertices.size(); j++) {
+                        for (unsigned j = 0; j < skeleton.muscles[i].vertices.size(); j++) {
                             XYZ &v0 = skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]];
                             XYZ &v1 = skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]];
                             glMatrixMode(GL_MODELVIEW);
@@ -6191,7 +6192,7 @@ int Person::DrawSkeleton()
                         }
                     }
                     if (!playerdetail || skeleton.free == 3) {
-                        for (j = 0; j < skeleton.muscles[i].verticeslow.size(); j++) {
+                        for (unsigned j = 0; j < skeleton.muscles[i].verticeslow.size(); j++) {
                             XYZ &v0 = skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]];
                             glMatrixMode(GL_MODELVIEW);
                             glPushMatrix();
@@ -6241,7 +6242,7 @@ int Person::DrawSkeleton()
                     skeleton.muscles[i].lastrotate3 = skeleton.muscles[i].rotate3;
                     glRotatef(-skeleton.muscles[i].lastrotate3, 0, 1, 0);
 
-                    for (j = 0; j < skeleton.muscles[i].verticesclothes.size(); j++) {
+                    for (unsigned j = 0; j < skeleton.muscles[i].verticesclothes.size(); j++) {
                         XYZ &v0 = skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]];
                         glMatrixMode(GL_MODELVIEW);
                         glPushMatrix();
@@ -6361,7 +6362,7 @@ int Person::DrawSkeleton()
                 glEnable(GL_LIGHTING);
                 glEnable(GL_BLEND);
             }
-            if (tutoriallevel && id != 0) {
+            if (Tutorial::active && id != 0) {
                 glColor4f(.7, .7, .7, 0.6);
                 glDepthMask(0);
                 glEnable(GL_LIGHTING);
@@ -6378,21 +6379,21 @@ int Person::DrawSkeleton()
             }
             if (playerdetail) {
                 if (!showpoints) {
-                    if ((tutoriallevel && id != 0))
+                    if (Tutorial::active && (id != 0))
                         skeleton.drawmodel.drawdifftex(Sprite::cloudimpacttexture);
                     else
                         skeleton.drawmodel.draw();
                 }
             }
             if (!playerdetail) {
-                if ((tutoriallevel && id != 0))
+                if (Tutorial::active && (id != 0))
                     skeleton.drawmodellow.drawdifftex(Sprite::cloudimpacttexture);
                 else
                     skeleton.drawmodellow.drawdifftex(skeleton.drawmodel.textureptr);
             }
 
             if (!(Animation::animations[animTarget].attack == normalattack || Animation::animations[animTarget].attack == reversed))
-                if (tutoriallevel && id != 0) {
+                if (Tutorial::active && id != 0) {
                     glPopMatrix();
                     glMatrixMode(GL_MODELVIEW);
                     glEnable(GL_TEXTURE_2D);
@@ -6411,14 +6412,14 @@ int Person::DrawSkeleton()
                     glTranslatef(smoketex * .6, 0, 0);
                     if (playerdetail) {
                         if (!showpoints) {
-                            if ((tutoriallevel && id != 0))
+                            if (Tutorial::active && (id != 0))
                                 skeleton.drawmodel.drawdifftex(Sprite::cloudimpacttexture);
                             else
                                 skeleton.drawmodel.draw();
                         }
                     }
                     if (!playerdetail) {
-                        if ((tutoriallevel && id != 0))
+                        if (Tutorial::active && (id != 0))
                             skeleton.drawmodellow.drawdifftex(Sprite::cloudimpacttexture);
                         else
                             skeleton.drawmodellow.drawdifftex(skeleton.drawmodel.textureptr);
@@ -6426,7 +6427,7 @@ int Person::DrawSkeleton()
                 }
 
 
-            if (tutoriallevel && id != 0) {
+            if (Tutorial::active && id != 0) {
                 glPopMatrix();
                 glMatrixMode(GL_MODELVIEW);
                 glEnable(GL_TEXTURE_2D);
@@ -6448,12 +6449,12 @@ int Person::DrawSkeleton()
                 i = weaponids[k];
                 if (weaponactive == k) {
                     if (weapons[i].getType() != staff) {
-                        for (j = 0; j < skeleton.muscles.size(); j++) {
+                        for (unsigned j = 0; j < skeleton.muscles.size(); j++) {
                             if ((skeleton.muscles[j].parent1->label == righthand || skeleton.muscles[j].parent2->label == righthand) && skeleton.muscles[j].vertices.size() > 0) {
                                 weaponattachmuscle = j;
                             }
                         }
-                        for (j = 0; j < skeleton.muscles.size(); j++) {
+                        for (unsigned j = 0; j < skeleton.muscles.size(); j++) {
                             if ((skeleton.muscles[j].parent1->label == rightwrist || skeleton.muscles[j].parent2->label == rightwrist) && (skeleton.muscles[j].parent1->label != righthand && skeleton.muscles[j].parent2->label != righthand) && skeleton.muscles[j].vertices.size() > 0) {
                                 weaponrotatemuscle = j;
                             }
@@ -6463,12 +6464,12 @@ int Person::DrawSkeleton()
                             weaponpoint = (jointPos(rightwrist) * .7 + jointPos(righthand) * .3);
                     }
                     if (weapons[i].getType() == staff) {
-                        for (j = 0; j < skeleton.muscles.size(); j++) {
+                        for (unsigned j = 0; j < skeleton.muscles.size(); j++) {
                             if ((skeleton.muscles[j].parent1->label == righthand || skeleton.muscles[j].parent2->label == righthand) && skeleton.muscles[j].vertices.size() > 0) {
                                 weaponattachmuscle = j;
                             }
                         }
-                        for (j = 0; j < skeleton.muscles.size(); j++) {
+                        for (unsigned j = 0; j < skeleton.muscles.size(); j++) {
                             if ((skeleton.muscles[j].parent1->label == rightelbow || skeleton.muscles[j].parent2->label == rightelbow) && (skeleton.muscles[j].parent1->label != rightshoulder && skeleton.muscles[j].parent2->label != rightshoulder) && skeleton.muscles[j].vertices.size() > 0) {
                                 weaponrotatemuscle = j;
                             }
@@ -6492,7 +6493,7 @@ int Person::DrawSkeleton()
                         weaponpoint = jointPos(abdomen) + (jointPos(lefthip) - jointPos(righthip)) * .09 + (jointPos(leftshoulder) - jointPos(rightshoulder)) * .33;
                     if (weapons[i].getType() == staff)
                         weaponpoint = jointPos(abdomen) + (jointPos(lefthip) - jointPos(righthip)) * .09 + (jointPos(leftshoulder) - jointPos(rightshoulder)) * .33;
-                    for (j = 0; j < skeleton.muscles.size(); j++) {
+                    for (unsigned j = 0; j < skeleton.muscles.size(); 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].vertices.size() > 0) {
                             weaponrotatemuscle = j;
                         }
@@ -6503,7 +6504,7 @@ int Person::DrawSkeleton()
                         weaponpoint = jointPos(abdomen) * .5 + jointPos(neck) * .5 - skeleton.forward * .8;
                     else
                         weaponpoint = jointPos(abdomen) * .5 + jointPos(neck) * .5 + skeleton.forward * .8;
-                    for (j = 0; j < skeleton.muscles.size(); j++) {
+                    for (unsigned j = 0; j < skeleton.muscles.size(); 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].vertices.size() > 0) {
                             weaponrotatemuscle = j;
                         }