]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameTick.cpp
Fixed some warnings
[lugaru.git] / Source / GameTick.cpp
index 84a10da74e0b582f6e37e6ab0099912895165dbd..8b7b2676d77127b7d93b53195932c6308a3cb4aa 100644 (file)
@@ -44,6 +44,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "Menu.h"
 
 #include <algorithm>
+#include <set>
 
 using namespace std;
 using namespace Game;
@@ -147,12 +148,13 @@ extern bool winfreeze;
 extern bool campaign;
 
 
+extern void toggleFullscreen();
+
 
 void Loadlevel(int which);
 void Loadlevel(const char *name);
 
 
-
 class CampaignLevel
 {
 private:
@@ -580,7 +582,7 @@ static void ch_save(const char *args)
     if (Person::players.size() > maxplayers) {
         cout << "Warning: this level contains more players than allowed" << endl;
     }
-    for (int j = 1; j < Person::players.size(); j++) {
+    for (unsigned j = 1; j < Person::players.size(); j++) {
         fpackf(tfile, "Bi Bi Bf Bf Bf Bi Bi Bf Bb Bf", Person::players[j]->whichskin, Person::players[j]->creature,
                Person::players[j]->coords.x, Person::players[j]->coords.y, Person::players[j]->coords.z,
                Person::players[j]->num_weapons, Person::players[j]->howactive, Person::players[j]->scale, Person::players[j]->immobile, Person::players[j]->yaw);
@@ -696,7 +698,7 @@ static int findClosestPlayer()
     int closest = -1;
     float closestdist = std::numeric_limits<float>::max();
 
-    for (int i = 1; i < Person::players.size(); i++) {
+    for (unsigned i = 1; i < Person::players.size(); i++) {
         float distance = distsq(&Person::players[i]->coords, &Person::players[0]->coords);
         if (distance < closestdist) {
             closestdist = distance;
@@ -967,7 +969,7 @@ static void ch_black(const char *args)
 
 static void ch_sizemin(const char *args)
 {
-    for (int i = 1; i < Person::players.size(); i++)
+    for (unsigned i = 1; i < Person::players.size(); i++)
         if (Person::players[i]->scale < 0.8 * 0.2)
             Person::players[i]->scale = 0.8 * 0.2;
 }
@@ -1074,7 +1076,7 @@ static void ch_dialogue(const char *args)
     }
 
     for (int i = 0; i < numdialogueboxes[numdialogues]; i++) {
-        for (int j = 0; j < Person::players.size(); j++) {
+        for (unsigned j = 0; j < Person::players.size(); j++) {
             participantfacing[numdialogues][i][j] = Person::players[j]->facing;
         }
     }
@@ -1157,7 +1159,7 @@ static void ch_immobile(const char *args)
 
 static void ch_allimmobile(const char *args)
 {
-    for (int i = 1; i < Person::players.size(); i++)
+    for (unsigned i = 1; i < Person::players.size(); i++)
         Person::players[i]->immobile = 1;
 }
 
@@ -1320,18 +1322,17 @@ static void cmd_dispatch(const string cmd)
 extern bool save_image(const char * fname);
 void Screenshot (void)
 {
-    char temp[1024];
+    char filename[1024];
     time_t t = time(NULL);
     struct tm *tme = localtime(&t);
-    sprintf(temp, "Screenshots/Screenshot_%04d_%02d_%02d--%02d_%02d_%02d.png", tme->tm_year + 1900, tme->tm_mon + 1, tme->tm_mday, tme->tm_hour, tme->tm_min, tme->tm_sec);
+    sprintf(filename, "Screenshots/Screenshot-%04d%02d%02d-%02d%02d%02d.png",
+            tme->tm_year + 1900, tme->tm_mon + 1, tme->tm_mday, tme->tm_hour, tme->tm_min, tme->tm_sec);
 
 #if defined(_WIN32)
     mkdir("Screenshots");
-#else
-    mkdir("Screenshots", S_IRWXU);
 #endif
 
-    save_image(temp);
+    save_image(filename);
 }
 
 void Game::SetUpLighting()
@@ -2147,7 +2148,7 @@ void Loadlevel(const char *name)
 
         fclose(tfile);
 
-        for (int i = 0; i < Person::players.size(); i++) {
+        for (unsigned i = 0; i < Person::players.size(); i++) {
             if (visibleloading)
                 LoadingScreen();
             Person::players[i]->burnt = 0;
@@ -2890,7 +2891,7 @@ void doDebugKeys()
 {
     float headprop, bodyprop, armprop, legprop;
     if (debugmode) {
-        if (Input::isKeyPressed(SDLK_h)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_H)) {
             Person::players[0]->damagetolerance = 200000;
             Person::players[0]->damage = 0;
             Person::players[0]->burnt = 0;
@@ -2898,18 +2899,18 @@ void doDebugKeys()
             Person::players[0]->superpermanentdamage = 0;
         }
 
-        if (Input::isKeyPressed(SDLK_j)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_J)) {
             environment++;
             if (environment > 2)
                 environment = 0;
             Setenvironment(environment);
         }
 
-        if (Input::isKeyPressed(SDLK_c)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_C)) {
             cameramode = 1 - cameramode;
         }
 
-        if (Input::isKeyPressed(SDLK_x) && !Input::isKeyDown(SDLK_LSHIFT)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_X) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             if (Person::players[0]->num_weapons > 0) {
                 if (weapons[Person::players[0]->weaponids[0]].getType() == sword)
                     weapons[Person::players[0]->weaponids[0]].setType(staff);
@@ -2920,7 +2921,7 @@ void doDebugKeys()
             }
         }
 
-        if (Input::isKeyPressed(SDLK_x) && Input::isKeyDown(SDLK_LSHIFT)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_X) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             int closest = findClosestPlayer();
             if (closest >= 0) {
                 if (Person::players[closest]->num_weapons) {
@@ -2941,7 +2942,7 @@ void doDebugKeys()
             }
         }
 
-        if (Input::isKeyDown(SDLK_u)) {
+        if (Input::isKeyDown(SDL_SCANCODE_U)) {
             int closest = findClosestPlayer();
             if (closest >= 0) {
                 Person::players[closest]->yaw += multiplier * 50;
@@ -2950,9 +2951,9 @@ void doDebugKeys()
         }
 
 
-        if (Input::isKeyPressed(SDLK_o) && !Input::isKeyDown(SDLK_LSHIFT)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_O) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             int closest = findClosestPlayer();
-            if (Input::isKeyDown(SDLK_LCTRL))
+            if (Input::isKeyDown(SDL_SCANCODE_LCTRL))
                 closest = 0;
 
             if (closest >= 0) {
@@ -2977,7 +2978,7 @@ void doDebugKeys()
             }
         }
 
-        if (Input::isKeyPressed(SDLK_o) && Input::isKeyDown(SDLK_LSHIFT)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_O) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             int closest = findClosestPlayer();
             if (closest >= 0) {
                 if (Person::players[closest]->creature == wolftype) {
@@ -3045,17 +3046,17 @@ void doDebugKeys()
             }
         }
 
-        if (Input::isKeyPressed(SDLK_b) && !Input::isKeyDown(SDLK_LSHIFT)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_B) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             slomo = 1 - slomo;
             slomodelay = 1000;
         }
 
 
-        if (((Input::isKeyPressed(SDLK_i) && !Input::isKeyDown(SDLK_LSHIFT)))) {
+        if (((Input::isKeyPressed(SDL_SCANCODE_I) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)))) {
             int closest = -1;
             float closestdist = std::numeric_limits<float>::max();
 
-            for (int i = 1; i < Person::players.size(); i++) {
+            for (unsigned i = 1; i < Person::players.size(); i++) {
                 float distance = distsq(&Person::players[i]->coords, &Person::players[0]->coords);
                 if (!Person::players[i]->headless)
                     if (distance < closestdist) {
@@ -3105,7 +3106,7 @@ void doDebugKeys()
             }
         }
 
-        if (((Input::isKeyPressed(SDLK_i) && Input::isKeyDown(SDLK_LSHIFT)))) {
+        if (((Input::isKeyPressed(SDL_SCANCODE_I) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)))) {
             int closest = findClosestPlayer();
             XYZ flatfacing2, flatvelocity2;
             XYZ blah;
@@ -3180,8 +3181,8 @@ void doDebugKeys()
                 }
 
                 XYZ temppos;
-                for (int j = 0; j < Person::players.size(); j++) {
-                    if (j != closest) {
+                for (unsigned j = 0; j < Person::players.size(); j++) {
+                    if (int(j) != closest) {
                         if (distsq(&Person::players[j]->coords, &Person::players[closest]->coords) < 25) {
                             Person::players[j]->DoDamage((25 - distsq(&Person::players[j]->coords, &Person::players[closest]->coords)) * 60);
                             if (Person::players[j]->skeleton.free == 2)
@@ -3211,7 +3212,7 @@ void doDebugKeys()
             }
         }
 
-        if (Input::isKeyPressed(SDLK_f)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_F)) {
             Person::players[0]->onfire = 1 - Person::players[0]->onfire;
             if (Person::players[0]->onfire) {
                 Person::players[0]->CatchFire();
@@ -3222,7 +3223,7 @@ void doDebugKeys()
             }
         }
 
-        if (Input::isKeyPressed(SDLK_n) && !Input::isKeyDown(SDLK_LCTRL)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_N) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
             //if(!Person::players[0]->skeleton.free)Person::players[0]->damage+=500;
             Person::players[0]->RagDoll(0);
             //Person::players[0]->spurt=1;
@@ -3231,7 +3232,7 @@ void doDebugKeys()
             emit_sound_at(whooshsound, Person::players[0]->coords, 128.);
         }
 
-        if (Input::isKeyPressed(SDLK_n) && Input::isKeyDown(SDLK_LCTRL)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_N) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
             for (int i = 0; i < objects.numobjects; i++) {
                 if (objects.type[i] == treeleavestype) {
                     objects.scale[i] *= .9;
@@ -3239,7 +3240,7 @@ void doDebugKeys()
             }
         }
 
-        if (Input::isKeyPressed(SDLK_m) && Input::isKeyDown(SDLK_LSHIFT)) {
+        if (Input::isKeyPressed(SDL_SCANCODE_M) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
             editorenabled = 1 - editorenabled;
             if (editorenabled) {
                 Person::players[0]->damagetolerance = 100000;
@@ -3254,7 +3255,7 @@ void doDebugKeys()
         }
 
         //skip level
-        if (whichlevel != -2 && Input::isKeyPressed(SDLK_k) && Input::isKeyDown(SDLK_LSHIFT) && !editorenabled) {
+        if (whichlevel != -2 && Input::isKeyPressed(SDL_SCANCODE_K) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !editorenabled) {
             targetlevel++;
             if (targetlevel > numchallengelevels - 1)
                 targetlevel = 0;
@@ -3263,20 +3264,20 @@ void doDebugKeys()
         }
 
         if (editorenabled) {
-            if (Input::isKeyPressed(SDLK_DELETE) && Input::isKeyDown(SDLK_LSHIFT)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_DELETE) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
                 int closest = findClosestPlayer();
                 if (closest >= 0) {
                     Person::players.erase(Person::players.begin()+closest);
                 }
             }
 
-            if (Input::isKeyPressed(SDLK_DELETE) && Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_DELETE) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 int closest = findClosestObject();
                 if (closest >= 0)
                     objects.position[closest].y -= 500;
             }
 
-            if (Input::isKeyPressed(SDLK_m) && Input::isKeyDown(SDLK_LSHIFT)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_M) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
                 //drawmode++;
                 //if(drawmode>2)drawmode=0;
                 if (objects.numobjects < max_objects - 1) {
@@ -3303,7 +3304,7 @@ void doDebugKeys()
                 }
             }
 
-            if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_P) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 Person::players.push_back(shared_ptr<Person>(new Person()));
 
                 Person::players.back()->scale = .2 * 5 * Person::players[0]->scale;
@@ -3440,7 +3441,7 @@ void doDebugKeys()
                 Person::players.back()->loaded = 1;
             }
 
-            if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_P) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
                 if (Person::players.back()->numwaypoints < 90) {
                     Person::players.back()->waypoints[Person::players.back()->numwaypoints] = Person::players[0]->coords;
                     Person::players.back()->waypointtype[Person::players.back()->numwaypoints] = editorpathtype;
@@ -3448,7 +3449,7 @@ void doDebugKeys()
                 }
             }
 
-            if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_P) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 if (numpathpoints < 30) {
                     bool connected, alreadyconnected;
                     connected = 0;
@@ -3480,17 +3481,17 @@ void doDebugKeys()
                 }
             }
 
-            if (Input::isKeyPressed(SDLK_PERIOD)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_PERIOD)) {
                 pathpointselected++;
                 if (pathpointselected >= numpathpoints)
                     pathpointselected = -1;
             }
-            if (Input::isKeyPressed(SDLK_COMMA) && !Input::isKeyDown(SDLK_LSHIFT)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_COMMA) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
                 pathpointselected--;
                 if (pathpointselected <= -2)
                     pathpointselected = numpathpoints - 1;
             }
-            if (Input::isKeyPressed(SDLK_COMMA) && Input::isKeyDown(SDLK_LSHIFT)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_COMMA) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
                 if (pathpointselected != -1) {
                     numpathpoints--;
                     pathpoint[pathpointselected] = pathpoint[numpathpoints];
@@ -3513,7 +3514,7 @@ void doDebugKeys()
                 }
             }
 
-            if (Input::isKeyPressed(SDLK_LEFT) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_LEFT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editortype--;
                 if (editortype == treeleavestype || editortype == 10)
                     editortype--;
@@ -3521,7 +3522,7 @@ void doDebugKeys()
                     editortype = firetype;
             }
 
-            if (Input::isKeyPressed(SDLK_RIGHT) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_RIGHT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editortype++;
                 if (editortype == treeleavestype || editortype == 10)
                     editortype++;
@@ -3529,44 +3530,44 @@ void doDebugKeys()
                     editortype = 0;
             }
 
-            if (Input::isKeyDown(SDLK_LEFT) && !Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyDown(SDL_SCANCODE_LEFT) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editoryaw -= multiplier * 100;
                 if (editoryaw < -.01)
                     editoryaw = -.01;
             }
 
-            if (Input::isKeyDown(SDLK_RIGHT) && !Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyDown(SDL_SCANCODE_RIGHT) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editoryaw += multiplier * 100;
             }
 
-            if (Input::isKeyDown(SDLK_UP) && !Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyDown(SDL_SCANCODE_UP) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editorsize += multiplier;
             }
 
-            if (Input::isKeyDown(SDLK_DOWN) && !Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyDown(SDL_SCANCODE_DOWN) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editorsize -= multiplier;
                 if (editorsize < .1)
                     editorsize = .1;
             }
 
 
-            if (Input::isKeyPressed(SDLK_LEFT) && Input::isKeyDown(SDLK_LSHIFT) && Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_LEFT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 mapradius -= multiplier * 10;
             }
 
-            if (Input::isKeyPressed(SDLK_RIGHT) && Input::isKeyDown(SDLK_LSHIFT) && Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_RIGHT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 mapradius += multiplier * 10;
             }
-            if (Input::isKeyDown(SDLK_UP) && Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyDown(SDL_SCANCODE_UP) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editorpitch += multiplier * 100;
             }
 
-            if (Input::isKeyDown(SDLK_DOWN) && Input::isKeyDown(SDLK_LCTRL)) {
+            if (Input::isKeyDown(SDL_SCANCODE_DOWN) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) {
                 editorpitch -= multiplier * 100;
                 if (editorpitch < -.01)
                     editorpitch = -.01;
             }
-            if (Input::isKeyPressed(SDLK_DELETE) && objects.numobjects && Input::isKeyDown(SDLK_LSHIFT)) {
+            if (Input::isKeyPressed(SDL_SCANCODE_DELETE) && objects.numobjects && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
                 int closest = findClosestObject();
                 if (closest >= 0)
                     objects.DeleteObject(closest);
@@ -3577,8 +3578,8 @@ void doDebugKeys()
 
 void doJumpReversals()
 {
-    for (int k = 0; k < Person::players.size(); k++)
-        for (int i = k; i < Person::players.size(); i++) {
+    for (unsigned k = 0; k < Person::players.size(); k++)
+        for (unsigned i = k; i < Person::players.size(); i++) {
             if (i == k)
                 continue;
             if (     Person::players[k]->skeleton.free == 0 &&
@@ -3587,8 +3588,8 @@ void doJumpReversals()
                       Person::players[k]->animTarget == jumpupanim) &&
                      (Person::players[i]->aitype == playercontrolled ||
                       Person::players[k]->aitype == playercontrolled) &&
-                     (Person::players[i]->aitype == attacktypecutoff && Person::players[i]->stunned <= 0 ||
-                      Person::players[k]->aitype == attacktypecutoff && Person::players[k]->stunned <= 0)) {
+                     ((Person::players[i]->aitype == attacktypecutoff && Person::players[i]->stunned <= 0) ||
+                      (Person::players[k]->aitype == attacktypecutoff && Person::players[k]->stunned <= 0))) {
                 if (     distsq(&Person::players[i]->coords, &Person::players[k]->coords) < 10 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5) &&
                          distsqflat(&Person::players[i]->coords, &Person::players[k]->coords) < 2 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5)) {
                     //TODO: refactor two huge similar ifs
@@ -3597,7 +3598,7 @@ void doJumpReversals()
                             Person::players[k]->animTarget != getupfromfrontanim &&
                             animation[Person::players[k]->animTarget].height == middleheight &&
                             normaldotproduct(Person::players[i]->velocity, Person::players[k]->coords - Person::players[i]->coords) < 0 &&
-                            (Person::players[k]->aitype == playercontrolled && Person::players[k]->attackkeydown ||
+                            ((Person::players[k]->aitype == playercontrolled && Person::players[k]->attackkeydown) ||
                              Person::players[k]->aitype != playercontrolled)) {
                         Person::players[i]->victim = Person::players[k];
                         Person::players[i]->velocity = 0;
@@ -3678,7 +3679,7 @@ void doJumpReversals()
 void doAerialAcrobatics()
 {
     static XYZ facing, flatfacing;
-    for (int k = 0; k < Person::players.size(); k++) {
+    for (unsigned k = 0; k < Person::players.size(); k++) {
         Person::players[k]->turnspeed = 500;
 
         if ((Person::players[k]->isRun() &&
@@ -4079,7 +4080,7 @@ void doAttacks()
     if (Input::isKeyDown(attackkey) &&
             !oldattackkey &&
             !Person::players[0]->backkeydown) {
-        for (int k = 0; k < Person::players.size(); k++) {
+        for (unsigned k = 0; k < Person::players.size(); k++) {
             if ((Person::players[k]->animTarget == swordslashanim ||
                     Person::players[k]->animTarget == staffhitanim ||
                     Person::players[k]->animTarget == staffspinhitanim) &&
@@ -4092,7 +4093,7 @@ void doAttacks()
     if (!hostile || indialogue != -1)
         Person::players[0]->attackkeydown = 0;
 
-    for (int k = 0; k < Person::players.size(); k++) {
+    for (unsigned k = 0; k < Person::players.size(); k++) {
         if (indialogue != -1)
             Person::players[k]->attackkeydown = 0;
         if (Person::players[k]->animTarget != rabbitrunninganim && Person::players[k]->animTarget != wolfrunninganim) {
@@ -4110,7 +4111,7 @@ void doAttacks()
                     if (Person::players[k]->jumppower <= 1) {
                         Person::players[k]->jumppower -= 2;
                     } else {
-                        for (int i = 0; i < Person::players.size(); i++) {
+                        for (unsigned i = 0; i < Person::players.size(); i++) {
                             if (i == k)
                                 continue;
                             if (Person::players[i]->animTarget == swordslashanim ||
@@ -4149,7 +4150,7 @@ void doAttacks()
                     //normal attacks (?)
                     Person::players[k]->hasvictim = 0;
                     if (Person::players.size() > 1)
-                        for (int i = 0; i < Person::players.size(); i++) {
+                        for (unsigned i = 0; i < Person::players.size(); i++) {
                             if (i == k || !(k == 0 || i == 0))
                                 continue;
                             if (!Person::players[k]->hasvictim)
@@ -4420,7 +4421,7 @@ void doAttacks()
                         }
                     const bool hasstaff = attackweapon == staff;
                     if (k == 0 && Person::players.size() > 1)
-                        for (int i = 0; i < Person::players.size(); i++) {
+                        for (unsigned i = 0; i < Person::players.size(); i++) {
                             if (i == k)
                                 continue;
                             if ((playerrealattackkeydown || Person::players[i]->dead || !hasstaff) &&
@@ -4545,7 +4546,7 @@ void doAttacks()
                         }
                     if (!Person::players[k]->hasvictim) {
                         //find victim
-                        for (int i = 0; i < Person::players.size(); i++) {
+                        for (unsigned i = 0; i < Person::players.size(); i++) {
                             if (i == k || !(i == 0 || k == 0))
                                 continue;
                             if (!Person::players[i]->skeleton.free) {
@@ -4608,8 +4609,8 @@ void doPlayerCollisions()
     static XYZ rotatetarget;
     static float collisionradius;
     if (Person::players.size() > 1)
-        for (int k = 0; k < Person::players.size(); k++)
-            for (int i = k + 1; i < Person::players.size(); i++) {
+        for (unsigned k = 0; k < Person::players.size(); k++)
+            for (unsigned i = k + 1; i < Person::players.size(); i++) {
                 //neither player is part of a reversal
                 if ((animation[Person::players[i]->animTarget].attack != reversed &&
                         animation[Person::players[i]->animTarget].attack != reversal &&
@@ -4967,7 +4968,7 @@ void doAI(int i)
 
                 if (Person::players[i]->losupdatedelay < 0 && !editorenabled && Person::players[i]->occluded < 2) {
                     Person::players[i]->losupdatedelay = .2;
-                    for (int j = 0; j < Person::players.size(); j++)
+                    for (unsigned j = 0; j < Person::players.size(); j++)
                         if (j == 0 || Person::players[j]->skeleton.free || Person::players[j]->aitype != passivetype)
                             if (abs(Random() % 2) || animation[Person::players[j]->animTarget].height != lowheight || j != 0)
                                 if (distsq(&Person::players[i]->coords, &Person::players[j]->coords) < 400)
@@ -5088,7 +5089,7 @@ void doAI(int i)
                 //wolf smell
                 if (Person::players[i]->creature == wolftype) {
                     XYZ windsmell;
-                    for (int j = 0; j < Person::players.size(); j++) {
+                    for (unsigned j = 0; j < Person::players.size(); j++) {
                         if (j == 0 || (Person::players[j]->dead && Person::players[j]->bloodloss > 0)) {
                             float smelldistance = 50;
                             if (j == 0 && Person::players[j]->num_weapons > 0) {
@@ -5111,7 +5112,7 @@ void doAI(int i)
 
                 if (Person::players[i]->howactive < typesleeping && Person::players[i]->losupdatedelay < 0 && !editorenabled && Person::players[i]->occluded < 2) {
                     Person::players[i]->losupdatedelay = .2;
-                    for (int j = 0; j < Person::players.size(); j++) {
+                    for (unsigned j = 0; j < Person::players.size(); j++) {
                         if (j == 0 || Person::players[j]->skeleton.free || Person::players[j]->aitype != passivetype) {
                             if (abs(Random() % 2) || animation[Person::players[j]->animTarget].height != lowheight || j != 0)
                                 if (distsq(&Person::players[i]->coords, &Person::players[j]->coords) < 400)
@@ -5301,7 +5302,7 @@ void doAI(int i)
                 if (!Person::players[i]->ally) {
                     int closest = -1;
                     float closestdist = -1;
-                    for (int k = 0; k < Person::players.size(); k++) {
+                    for (unsigned k = 0; k < Person::players.size(); k++) {
                         if (k != i && k != 0 && !Person::players[k]->dead &&
                                 Person::players[k]->howactive < typedead1 &&
                                 !Person::players[k]->skeleton.free &&
@@ -5650,7 +5651,7 @@ void doAI(int i)
                          Person::players[i]->isCrouch() ||
                          Person::players[i]->isRun())) {
                     int target = -2;
-                    for (int j = 0; j < Person::players.size(); j++)
+                    for (unsigned j = 0; j < Person::players.size(); j++)
                         if (j != i && !Person::players[j]->skeleton.free &&
                                 Person::players[j]->hasvictim &&
                                 (tutoriallevel == 1 && reversaltrain ||
@@ -5794,6 +5795,7 @@ void updateSettingsMenu()
     else
         sprintf (sbuf, "Resolution: %d*%d (widescreen)", (int)newscreenwidth, (int)newscreenheight);
     Menu::setText(0, sbuf);
+    Menu::setText(14, fullscreen ? "Fullscreen: On" : "Fullscreen: Off");
     if (newdetail == 0) Menu::setText(1, "Detail: Low");
     if (newdetail == 1) Menu::setText(1, "Detail: Medium");
     if (newdetail == 2) Menu::setText(1, "Detail: High");
@@ -5874,6 +5876,7 @@ void Game::LoadMenu()
         break;
     case 3:
         Menu::addButton( 0, "", 10 + 20, 440);
+        Menu::addButton(14, "", 10 + 400, 440);
         Menu::addButton( 1, "", 10 + 60, 405);
         Menu::addButton( 2, "", 10 + 70, 370);
         Menu::addButton( 3, "", 10 + 20 - 1000, 335 - 1000);
@@ -6009,7 +6012,7 @@ void Game::LoadMenu()
     }
 }
 
-extern SDL_Rect **resolutions;
+extern set<pair<int,int>> resolutions;
 
 void MenuTick()
 {
@@ -6033,6 +6036,7 @@ void MenuTick()
     char sbuf[256];
 
     if (Input::MouseClicked() && (selected >= 0)) { // handling of the left mouse clic in menus
+        set<pair<int,int>>::iterator newscreenresolution;
         switch (mainmenu) {
         case 1:
         case 2:
@@ -6081,40 +6085,17 @@ void MenuTick()
             break;
         case 3:
             fireSound();
-            bool isCustomResolution, found;
             switch (selected) {
             case 0:
-                isCustomResolution = true;
-                found = false;
-                for (int i = 0; (!found) && (resolutions[i]); i++) {
-                    if ((resolutions[i]->w == screenwidth) && (resolutions[i]->h == screenwidth))
-                        isCustomResolution = false;
-
-                    if ((resolutions[i]->w == newscreenwidth) && (resolutions[i]->h == newscreenheight)) {
-                        i++;
-                        if (resolutions[i] != NULL) {
-                            newscreenwidth = (int) resolutions[i]->w;
-                            newscreenheight = (int) resolutions[i]->h;
-                        } else if (isCustomResolution) {
-                            if ((screenwidth == newscreenwidth) && (screenheight == newscreenheight)) {
-                                newscreenwidth = (int) resolutions[0]->w;
-                                newscreenheight = (int) resolutions[0]->h;
-                            } else {
-                                newscreenwidth = screenwidth;
-                                newscreenheight = screenheight;
-                            }
-                        } else {
-                            newscreenwidth = (int) resolutions[0]->w;
-                            newscreenheight = (int) resolutions[0]->h;
-                        }
-                        found = true;
-                    }
-                }
-
-                if (!found) {
-                    newscreenwidth = (int) resolutions[0]->w;
-                    newscreenheight = (int) resolutions[0]->h;
+                newscreenresolution = resolutions.find(make_pair(newscreenwidth, newscreenheight));
+                /* Next one (end() + 1 is also end() so the ++ is safe even if it was not found) */
+                newscreenresolution++;
+                if (newscreenresolution == resolutions.end()) {
+                    /* It was the last one (or not found), go back to the beginning */
+                    newscreenresolution = resolutions.begin();
                 }
+                newscreenwidth  = newscreenresolution->first;
+                newscreenheight = newscreenresolution->second;
                 break;
             case 1:
                 newdetail++;
@@ -6186,6 +6167,9 @@ void MenuTick()
             case 13:
                 showdamagebar = !showdamagebar;
                 break;
+            case 14:
+                toggleFullscreen();
+                break;
             }
             updateSettingsMenu();
             break;
@@ -6296,10 +6280,7 @@ void MenuTick()
                     mainmenu = 5;
                 else
                     mainmenu = 1;
-                for (int j = 0; j < 255; j++) {
-                    displaytext[0][j] = 0;
-                }
-                displaychars[0] = 0;
+                displaytext[0].clear();
                 displayselected = 0;
                 entername = 0;
             }
@@ -6373,7 +6354,7 @@ void MenuTick()
         }
     }
 
-    if (Input::isKeyDown(SDLK_q) && Input::isKeyDown(SDLK_LMETA)) {
+    if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) {
         tryquit = 1;
         if (mainmenu == 3) {
             SaveSettings();
@@ -6383,9 +6364,9 @@ void MenuTick()
     OPENAL_SetFrequency(channels[stream_menutheme], 22050);
 
     if (entername) {
-        inputText(displaytext[0], &displayselected, &displaychars[0]);
+        inputText(displaytext[0], &displayselected);
         if (!waiting) { // the input as finished
-            if (displaychars[0]) { // with enter
+            if (!displaytext[0].empty()) { // with enter
                 accountactive = Account::add(string(displaytext[0]));
 
                 mainmenu = 8;
@@ -6394,10 +6375,7 @@ void MenuTick()
 
                 fireSound(firestartsound);
 
-                for (int i = 0; i < 255; i++) {
-                    displaytext[0][i] = 0;
-                }
-                displaychars[0] = 0;
+                displaytext[0].clear();
 
                 displayselected = 0;
             }
@@ -6435,8 +6413,8 @@ void Game::Tick()
     keyboardfrozen = false;
     Input::Tick();
 
-    if (Input::isKeyPressed(SDLK_F6)) {
-        if (Input::isKeyDown(SDLK_LSHIFT))
+    if (Input::isKeyPressed(SDL_SCANCODE_F6)) {
+        if (Input::isKeyDown(SDL_SCANCODE_LSHIFT))
             stereoreverse = true;
         else
             stereoreverse = false;
@@ -6447,16 +6425,16 @@ void Game::Tick()
             printf("Stereo unreversed\n");
     }
 
-    if (Input::isKeyDown(SDLK_F7)) {
-        if (Input::isKeyDown(SDLK_LSHIFT))
+    if (Input::isKeyDown(SDL_SCANCODE_F7)) {
+        if (Input::isKeyDown(SDL_SCANCODE_LSHIFT))
             stereoseparation -= 0.001;
         else
             stereoseparation -= 0.010;
         printf("Stereo decreased increased to %f\n", stereoseparation);
     }
 
-    if (Input::isKeyDown(SDLK_F8)) {
-        if (Input::isKeyDown(SDLK_LSHIFT))
+    if (Input::isKeyDown(SDL_SCANCODE_F8)) {
+        if (Input::isKeyDown(SDL_SCANCODE_LSHIFT))
             stereoseparation += 0.001;
         else
             stereoseparation += 0.010;
@@ -6464,7 +6442,7 @@ void Game::Tick()
     }
 
 
-    if (Input::isKeyPressed(SDLK_TAB) && tutoriallevel) {
+    if (Input::isKeyPressed(SDL_SCANCODE_TAB) && tutoriallevel) {
         if (tutorialstage != 51)
             tutorialstagetime = tutorialmaxtime;
         emit_sound_np(consolefailsound, 128.);
@@ -6505,7 +6483,7 @@ void Game::Tick()
             LoadMenu();
         }
         //escape key pressed
-        if (Input::isKeyPressed(SDLK_ESCAPE) &&
+        if (Input::isKeyPressed(SDL_SCANCODE_ESCAPE) &&
                 (gameon || mainmenu == 0 || (mainmenu >= 3 && mainmenu != 8 && !(mainmenu == 7 && entername)))) {
             selected = -1;
             if (mainmenu == 0 && !winfreeze)
@@ -6566,37 +6544,13 @@ void Game::Tick()
             leveltime += multiplier;
 
         //keys
-        if (Input::isKeyPressed(SDLK_v) && debugmode) {
+        if (Input::isKeyPressed(SDL_SCANCODE_V) && debugmode) {
             freeze = 1 - freeze;
             if (freeze) {
                 OPENAL_SetFrequency(OPENAL_ALL, 0.001);
             }
         }
 
-        if (Input::isKeyPressed(chatkey) && !console && !chatting && debugmode)
-            chatting = 1;
-
-        if (chatting) {
-            inputText(displaytext[0], &displayselected, &displaychars[0]);
-            if (!waiting) {
-                if (displaychars[0]) {
-                    for (int j = 0; j < 255; j++)
-                        displaytext[0][j] = 0;
-                    displaychars[0] = 0;
-                    displayselected = 0;
-                }
-                chatting = 0;
-            }
-
-            displayblinkdelay -= multiplier;
-            if (displayblinkdelay <= 0) {
-                displayblinkdelay = .3;
-                displayblink = 1 - displayblink;
-            }
-        }
-        if (chatting)
-            keyboardfrozen = true;
-
         if (Input::isKeyPressed(consolekey) && debugmode) {
             console = !console;
             if (console) {
@@ -6609,20 +6563,15 @@ void Game::Tick()
 
         if (console)
             freeze = 1;
-        if (console && !Input::isKeyDown(SDLK_LMETA)) {
-            inputText(consoletext[0], &consoleselected, &consolechars[0]);
+        if (console && !Input::isKeyDown(SDL_SCANCODE_LGUI)) {
+            inputText(consoletext[0], &consoleselected);
             if (!waiting) {
-                if (consolechars[0] > 0) {
-                    consoletext[0][consolechars[0]] = '\0';
+                if (!consoletext[0].empty()) {
                     cmd_dispatch(consoletext[0]);
                     for (int k = 14; k >= 1; k--) {
-                        for (int j = 0; j < 255; j++)
-                            consoletext[k][j] = consoletext[k - 1][j];
-                        consolechars[k] = consolechars[k - 1];
+                        consoletext[k] = consoletext[k - 1];
                     }
-                    for (int j = 0; j < 255; j++)
-                        consoletext[0][j] = 0;
-                    consolechars[0] = 0;
+                    consoletext[0].clear();
                     consoleselected = 0;
                 }
             }
@@ -6636,7 +6585,7 @@ void Game::Tick()
 
 
 
-        if (Input::isKeyDown(SDLK_q) && Input::isKeyDown(SDLK_LMETA)) {
+        if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) {
             tryquit = 1;
             if (mainmenu == 3) {
                 SaveSettings();
@@ -6653,10 +6602,10 @@ void Game::Tick()
         else
             oldwinfreeze++;
 
-        if ((Input::isKeyPressed(jumpkey) || Input::isKeyPressed(SDLK_SPACE)) && !campaign)
+        if ((Input::isKeyPressed(jumpkey) || Input::isKeyPressed(SDL_SCANCODE_SPACE)) && !campaign)
             if (winfreeze)
                 winfreeze = 0;
-        if ((Input::isKeyDown(SDLK_ESCAPE)) && !campaign && gameon) {
+        if ((Input::isKeyDown(SDL_SCANCODE_ESCAPE)) && !campaign && gameon) {
             if (console) {
                 console = false;
                 freeze = 0;
@@ -6869,29 +6818,29 @@ void Game::Tick()
                         viewer.y += multiplier * 4;
                     if (Input::isKeyDown(crouchkey))
                         viewer.y -= multiplier * 4;
-                    if (     Input::isKeyPressed(SDLK_1) ||
-                             Input::isKeyPressed(SDLK_2) ||
-                             Input::isKeyPressed(SDLK_3) ||
-                             Input::isKeyPressed(SDLK_4) ||
-                             Input::isKeyPressed(SDLK_5) ||
-                             Input::isKeyPressed(SDLK_6) ||
-                             Input::isKeyPressed(SDLK_7) ||
-                             Input::isKeyPressed(SDLK_8) ||
-                             Input::isKeyPressed(SDLK_9) ||
-                             Input::isKeyPressed(SDLK_0) ||
-                             Input::isKeyPressed(SDLK_MINUS)) {
+                    if (     Input::isKeyPressed(SDL_SCANCODE_1) ||
+                             Input::isKeyPressed(SDL_SCANCODE_2) ||
+                             Input::isKeyPressed(SDL_SCANCODE_3) ||
+                             Input::isKeyPressed(SDL_SCANCODE_4) ||
+                             Input::isKeyPressed(SDL_SCANCODE_5) ||
+                             Input::isKeyPressed(SDL_SCANCODE_6) ||
+                             Input::isKeyPressed(SDL_SCANCODE_7) ||
+                             Input::isKeyPressed(SDL_SCANCODE_8) ||
+                             Input::isKeyPressed(SDL_SCANCODE_9) ||
+                             Input::isKeyPressed(SDL_SCANCODE_0) ||
+                             Input::isKeyPressed(SDL_SCANCODE_MINUS)) {
                         int whichend;
-                        if (Input::isKeyPressed(SDLK_1)) whichend = 1;
-                        if (Input::isKeyPressed(SDLK_2)) whichend = 2;
-                        if (Input::isKeyPressed(SDLK_3)) whichend = 3;
-                        if (Input::isKeyPressed(SDLK_4)) whichend = 4;
-                        if (Input::isKeyPressed(SDLK_5)) whichend = 5;
-                        if (Input::isKeyPressed(SDLK_6)) whichend = 6;
-                        if (Input::isKeyPressed(SDLK_7)) whichend = 7;
-                        if (Input::isKeyPressed(SDLK_8)) whichend = 8;
-                        if (Input::isKeyPressed(SDLK_9)) whichend = 9;
-                        if (Input::isKeyPressed(SDLK_0)) whichend = 0;
-                        if (Input::isKeyPressed(SDLK_MINUS))
+                        if (Input::isKeyPressed(SDL_SCANCODE_1)) whichend = 1;
+                        if (Input::isKeyPressed(SDL_SCANCODE_2)) whichend = 2;
+                        if (Input::isKeyPressed(SDL_SCANCODE_3)) whichend = 3;
+                        if (Input::isKeyPressed(SDL_SCANCODE_4)) whichend = 4;
+                        if (Input::isKeyPressed(SDL_SCANCODE_5)) whichend = 5;
+                        if (Input::isKeyPressed(SDL_SCANCODE_6)) whichend = 6;
+                        if (Input::isKeyPressed(SDL_SCANCODE_7)) whichend = 7;
+                        if (Input::isKeyPressed(SDL_SCANCODE_8)) whichend = 8;
+                        if (Input::isKeyPressed(SDL_SCANCODE_9)) whichend = 9;
+                        if (Input::isKeyPressed(SDL_SCANCODE_0)) whichend = 0;
+                        if (Input::isKeyPressed(SDL_SCANCODE_MINUS))
                             whichend = -1;
                         if (whichend != -1) {
                             participantfocus[whichdialogue][indialogue] = whichend;
@@ -6916,32 +6865,32 @@ void Game::Tick()
                             }
                         }
 
-                        for (int j = 0; j < Person::players.size(); j++) {
+                        for (unsigned j = 0; j < Person::players.size(); j++) {
                             participantfacing[whichdialogue][indialogue][j] = participantfacing[whichdialogue][indialogue - 1][j];
                         }
                     }
                     //TODO: should these be KeyDown or KeyPressed?
-                    if (     Input::isKeyDown(SDLK_KP1) ||
-                             Input::isKeyDown(SDLK_KP2) ||
-                             Input::isKeyDown(SDLK_KP3) ||
-                             Input::isKeyDown(SDLK_KP4) ||
-                             Input::isKeyDown(SDLK_KP5) ||
-                             Input::isKeyDown(SDLK_KP6) ||
-                             Input::isKeyDown(SDLK_KP7) ||
-                             Input::isKeyDown(SDLK_KP8) ||
-                             Input::isKeyDown(SDLK_KP9) ||
-                             Input::isKeyDown(SDLK_KP0)) {
+                    if (     Input::isKeyDown(SDL_SCANCODE_KP_1) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_2) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_3) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_4) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_5) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_6) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_7) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_8) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_9) ||
+                             Input::isKeyDown(SDL_SCANCODE_KP_0)) {
                         int whichend;
-                        if (Input::isKeyDown(SDLK_KP1)) whichend = 1;
-                        if (Input::isKeyDown(SDLK_KP2)) whichend = 2;
-                        if (Input::isKeyDown(SDLK_KP3)) whichend = 3;
-                        if (Input::isKeyDown(SDLK_KP4)) whichend = 4;
-                        if (Input::isKeyDown(SDLK_KP5)) whichend = 5;
-                        if (Input::isKeyDown(SDLK_KP6)) whichend = 6;
-                        if (Input::isKeyDown(SDLK_KP7)) whichend = 7;
-                        if (Input::isKeyDown(SDLK_KP8)) whichend = 8;
-                        if (Input::isKeyDown(SDLK_KP9)) whichend = 9;
-                        if (Input::isKeyDown(SDLK_KP0)) whichend = 0;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_1)) whichend = 1;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_2)) whichend = 2;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_3)) whichend = 3;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_4)) whichend = 4;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_5)) whichend = 5;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_6)) whichend = 6;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_7)) whichend = 7;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_8)) whichend = 8;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_9)) whichend = 9;
+                        if (Input::isKeyDown(SDL_SCANCODE_KP_0)) whichend = 0;
                         participantfacing[whichdialogue][indialogue][whichend] = facing;
                     }
                     if (indialogue >= numdialogueboxes[whichdialogue]) {
@@ -6957,17 +6906,17 @@ void Game::Tick()
                     yaw = dialoguecamerayaw[whichdialogue][indialogue];
                     pitch = dialoguecamerapitch[whichdialogue][indialogue];
                     if (dialoguetime > 0.5)
-                        if (     Input::isKeyPressed(SDLK_1) ||
-                                 Input::isKeyPressed(SDLK_2) ||
-                                 Input::isKeyPressed(SDLK_3) ||
-                                 Input::isKeyPressed(SDLK_4) ||
-                                 Input::isKeyPressed(SDLK_5) ||
-                                 Input::isKeyPressed(SDLK_6) ||
-                                 Input::isKeyPressed(SDLK_7) ||
-                                 Input::isKeyPressed(SDLK_8) ||
-                                 Input::isKeyPressed(SDLK_9) ||
-                                 Input::isKeyPressed(SDLK_0) ||
-                                 Input::isKeyPressed(SDLK_MINUS) ||
+                        if (     Input::isKeyPressed(SDL_SCANCODE_1) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_2) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_3) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_4) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_5) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_6) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_7) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_8) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_9) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_0) ||
+                                 Input::isKeyPressed(SDL_SCANCODE_MINUS) ||
                                  Input::isKeyPressed(attackkey)) {
                             indialogue++;
                             if (indialogue < numdialogueboxes[whichdialogue]) {
@@ -7043,11 +6992,11 @@ void Game::Tick()
 
             doJumpReversals();
 
-            for (int k = 0; k < Person::players.size(); k++)
+            for (unsigned k = 0; k < Person::players.size(); k++)
                 if (k != 0 && Person::players[k]->immobile)
                     Person::players[k]->coords = Person::players[k]->realoldcoords;
 
-            for (int k = 0; k < Person::players.size(); k++) {
+            for (unsigned k = 0; k < Person::players.size(); k++) {
                 if (!isnormal(Person::players[k]->coords.x) || !isnormal(Person::players[k]->coords.y) || !isnormal(Person::players[k]->coords.z)) {
                     if (!isnormal(Person::players[k]->coords.x) || !isnormal(Person::players[k]->coords.y) || !isnormal(Person::players[k]->coords.z)) {
                         Person::players[k]->DoDamage(1000);
@@ -7059,8 +7008,8 @@ void Game::Tick()
             static bool respawnkeydown;
             if (!editorenabled &&
                     (whichlevel != -2 &&
-                     (Input::isKeyDown(SDLK_z) &&
-                      Input::isKeyDown(SDLK_LMETA) &&
+                     (Input::isKeyDown(SDL_SCANCODE_Z) &&
+                      Input::isKeyDown(SDL_SCANCODE_LGUI) &&
                       debugmode) ||
                      (Input::isKeyDown(jumpkey) &&
                       !respawnkeydown &&
@@ -7081,7 +7030,7 @@ void Game::Tick()
             static bool movekey;
 
             //?
-            for (int i = 0; i < Person::players.size(); i++) {
+            for (unsigned i = 0; i < Person::players.size(); i++) {
                 static float oldtargetyaw;
                 if (!Person::players[i]->skeleton.free) {
                     oldtargetyaw = Person::players[i]->targetyaw;
@@ -7169,7 +7118,7 @@ void Game::Tick()
                                 }
 
                     //avoid flaming players
-                    for (int j = 0; j < Person::players.size(); j++)
+                    for (unsigned j = 0; j < Person::players.size(); j++)
                         if (Person::players[j]->onfire)
                             if (distsq(&Person::players[j]->coords, &Person::players[i]->coords) < sq(0.3) * 200)
                                 if (     distsq(&Person::players[i]->coords, &Person::players[j]->coords) <
@@ -7335,7 +7284,7 @@ void Game::Tick()
                                     Person::players[i]->isIdle() || Person::players[i]->animTarget == rollanim ||
                                     Person::players[i]->animTarget == backhandspringanim) {
                                 if (Person::players.size() > 1)
-                                    for (int j = 0; j < Person::players.size(); j++) {
+                                    for (unsigned j = 0; j < Person::players.size(); j++) {
                                         if (Person::players[i]->weaponactive == -1)
                                             if (j != i)
                                                 if (Person::players[j]->num_weapons &&
@@ -7442,7 +7391,7 @@ void Game::Tick()
                                         Person::players[i]->animTarget == sneakanim ||
                                         Person::players[i]->isFlip())
                                     if (Person::players.size() > 1)
-                                        for (int j = 0; j < Person::players.size(); j++) {
+                                        for (unsigned j = 0; j < Person::players.size(); j++) {
                                             if (i != j)
                                                 if (tutoriallevel != 1 || tutorialstage == 49)
                                                     if (hostile)
@@ -7506,7 +7455,7 @@ void Game::Tick()
                                 }
 
                                 Person::players[i]->weaponactive = -1;
-                                for (int j = 0; j < Person::players.size(); j++) {
+                                for (unsigned j = 0; j < Person::players.size(); j++) {
                                     Person::players[j]->wentforweapon = 0;
                                 }
                             }
@@ -7603,14 +7552,14 @@ void Game::Tick()
                             if (i == 0) {
                                 Person::players[i]->superruntoggle = 1;
                                 if (Person::players.size() > 1)
-                                    for (int j = 0; j < Person::players.size(); j++)
+                                    for (unsigned j = 0; j < Person::players.size(); j++)
                                         if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->aitype == passivetype)
                                             if (distsq(&Person::players[j]->coords, &Person::players[i]->coords) < 16)
                                                 Person::players[i]->superruntoggle = 0;
                             }
 
                             if (Person::players.size() > 1)
-                                for (int j = 0; j < Person::players.size(); j++) {
+                                for (unsigned j = 0; j < Person::players.size(); j++) {
                                     if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->victim && Person::players[i]->lowreversaldelay <= 0) {
                                         if (distsq(&Person::players[j]->coords, &Person::players[j]->victim->coords) < 3 &&
                                                 Person::players[j]->victim == Person::players[i] &&
@@ -7654,7 +7603,7 @@ void Game::Tick()
                             target = -2;
                             if (Person::players[i]->isCrouch()) {
                                 if (Person::players.size() > 1)
-                                    for (int j = 0; j < Person::players.size(); j++) {
+                                    for (unsigned j = 0; j < Person::players.size(); j++) {
                                         if (j != i &&
                                                 !Person::players[j]->skeleton.free &&
                                                 Person::players[j]->victim &&
@@ -7844,7 +7793,7 @@ void Game::Tick()
                                 //Dodge sweep?
                                 target = -2;
                                 if (Person::players.size() > 1)
-                                    for (int j = 0; j < Person::players.size(); j++) {
+                                    for (unsigned j = 0; j < Person::players.size(); j++) {
                                         if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->victim) {
                                             if (distsq(&Person::players[j]->coords, &Person::players[j]->victim->coords) < 3 &&
                                                     (Person::players[j]->victim == Person::players[i]) &&
@@ -7929,7 +7878,7 @@ void Game::Tick()
             }
 
             //Rotation
-            for (int k = 0; k < Person::players.size(); k++) {
+            for (unsigned k = 0; k < Person::players.size(); k++) {
                 if (fabs(Person::players[k]->yaw - Person::players[k]->targetyaw) > 180) {
                     if (Person::players[k]->yaw > Person::players[k]->targetyaw)
                         Person::players[k]->yaw -= 360;
@@ -7966,7 +7915,7 @@ void Game::Tick()
             }
 
             //do animations
-            for (int k = 0; k < Person::players.size(); k++) {
+            for (unsigned k = 0; k < Person::players.size(); k++) {
                 Person::players[k]->DoAnimations();
                 Person::players[k]->whichpatchx = Person::players[k]->coords.x / (terrain.size / subdivision * terrain.scale);
                 Person::players[k]->whichpatchz = Person::players[k]->coords.z / (terrain.size / subdivision * terrain.scale);
@@ -8104,7 +8053,7 @@ void Game::Tick()
         }
     }
 
-    if (Input::isKeyPressed(SDLK_F1))
+    if (Input::isKeyPressed(SDL_SCANCODE_F1))
         Screenshot();
 }
 
@@ -8150,7 +8099,7 @@ void Game::TickOnceAfter()
         realthreat = 0;
 
         musictype = leveltheme;
-        for (int i = 0; i < Person::players.size(); i++) {
+        for (unsigned i = 0; i < Person::players.size(); i++) {
             if ((Person::players[i]->aitype == attacktypecutoff ||
                     Person::players[i]->aitype == getweapontype ||
                     Person::players[i]->aitype == gethelptype ||