]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameTick.cpp
Cleaned up FootLand method
[lugaru.git] / Source / GameTick.cpp
index c66767df4012221c9b61621ad4b245160bb8cda5..d935138b0a41ceeabe07eb896a9a6cca189b2def 100644 (file)
@@ -85,8 +85,6 @@ extern bool ambientsound;
 extern bool mousejump;
 extern float viewdistance;
 extern bool freeze;
-extern bool keyboardfrozen;
-extern bool loadingstuff;
 extern XYZ windvector;
 extern bool debugmode;
 static int leveltheme;
@@ -602,18 +600,18 @@ void Setenvironment(int which)
         if (ambientsound)
             emit_stream_np(stream_wind);
 
-        objects.treetextureptr.load(":Data:Textures:snowtree.png", 0, 1);
-        objects.bushtextureptr.load(":Data:Textures:bushsnow.png", 0, 1);
-        objects.rocktextureptr.load(":Data:Textures:bouldersnow.jpg", 1, 0);
-        objects.boxtextureptr.load(":Data:Textures:snowbox.jpg", 1, 0);
+        objects.treetextureptr.load(":Data:Textures:snowtree.png", 0);
+        objects.bushtextureptr.load(":Data:Textures:bushsnow.png", 0);
+        objects.rocktextureptr.load(":Data:Textures:bouldersnow.jpg", 1);
+        objects.boxtextureptr.load(":Data:Textures:snowbox.jpg", 1);
 
         footstepsound = footstepsn1;
         footstepsound2 = footstepsn2;
         footstepsound3 = footstepst1;
         footstepsound4 = footstepst2;
 
-        terraintexture.load(":Data:Textures:snow.jpg", 1, 0);
-        terraintexture2.load(":Data:Textures:rock.jpg", 1, 0);
+        terraintexture.load(":Data:Textures:snow.jpg", 1);
+        terraintexture2.load(":Data:Textures:rock.jpg", 1);
 
 
         temptexdetail = texdetail;
@@ -633,10 +631,10 @@ void Setenvironment(int which)
     } else if (environment == desertenvironment) {
         windvector = 0;
         windvector.z = 2;
-        objects.treetextureptr.load(":Data:Textures:deserttree.png", 0, 1);
-        objects.bushtextureptr.load(":Data:Textures:bushdesert.png", 0, 1);
-        objects.rocktextureptr.load(":Data:Textures:boulderdesert.jpg", 1, 0);
-        objects.boxtextureptr.load(":Data:Textures:desertbox.jpg", 1, 0);
+        objects.treetextureptr.load(":Data:Textures:deserttree.png", 0);
+        objects.bushtextureptr.load(":Data:Textures:bushdesert.png", 0);
+        objects.rocktextureptr.load(":Data:Textures:boulderdesert.jpg", 1);
+        objects.boxtextureptr.load(":Data:Textures:desertbox.jpg", 1);
 
 
         if (ambientsound)
@@ -647,8 +645,8 @@ void Setenvironment(int which)
         footstepsound3 = footstepsn1;
         footstepsound4 = footstepsn2;
 
-        terraintexture.load(":Data:Textures:sand.jpg", 1, 0);
-        terraintexture2.load(":Data:Textures:sandslope.jpg", 1, 0);
+        terraintexture.load(":Data:Textures:sand.jpg", 1);
+        terraintexture2.load(":Data:Textures:sandslope.jpg", 1);
 
 
         temptexdetail = texdetail;
@@ -668,10 +666,10 @@ void Setenvironment(int which)
     } else if (environment == grassyenvironment) {
         windvector = 0;
         windvector.z = 2;
-        objects.treetextureptr.load(":Data:Textures:tree.png", 0, 1);
-        objects.bushtextureptr.load(":Data:Textures:bush.png", 0, 1);
-        objects.rocktextureptr.load(":Data:Textures:boulder.jpg", 1, 0);
-        objects.boxtextureptr.load(":Data:Textures:grassbox.jpg", 1, 0);
+        objects.treetextureptr.load(":Data:Textures:tree.png", 0);
+        objects.bushtextureptr.load(":Data:Textures:bush.png", 0);
+        objects.rocktextureptr.load(":Data:Textures:boulder.jpg", 1);
+        objects.boxtextureptr.load(":Data:Textures:grassbox.jpg", 1);
 
         if (ambientsound)
             emit_stream_np(stream_wind, 100.);
@@ -681,8 +679,8 @@ void Setenvironment(int which)
         footstepsound3 = footstepst1;
         footstepsound4 = footstepst2;
 
-        terraintexture.load(":Data:Textures:grassdirt.jpg", 1, 0);
-        terraintexture2.load(":Data:Textures:mossrock.jpg", 1, 0);
+        terraintexture.load(":Data:Textures:grassdirt.jpg", 1);
+        terraintexture2.load(":Data:Textures:mossrock.jpg", 1);
 
 
         temptexdetail = texdetail;
@@ -733,9 +731,9 @@ void LoadCampaign()
 
     ifstream test(ConvertFileName((":Data:Textures:" + accountactive->getCurrentCampaign() + ":World.png").c_str()));
     if (test.good()) {
-        Mainmenuitems[7].load((":Data:Textures:" + accountactive->getCurrentCampaign() + ":World.png").c_str(), 0, 0);
+        Mainmenuitems[7].load((":Data:Textures:" + accountactive->getCurrentCampaign() + ":World.png").c_str(), 0);
     } else {
-        Mainmenuitems[7].load(":Data:Textures:World.png", 0, 0);
+        Mainmenuitems[7].load(":Data:Textures:World.png", 0);
     }
 
     if (accountactive->getCampaignChoicesMade() == 0) {
@@ -790,8 +788,6 @@ void Game::Loadlevel(const char *name)
     static const char *pfx = ":Data:Maps:";
     char *buf;
 
-    float headprop, legprop, armprop, bodyprop;
-
     LOGFUNC;
 
     LOG(std::string("Loading level...") + name);
@@ -817,7 +813,6 @@ void Game::Loadlevel(const char *name)
         tutorialstagetime = 0;
         tutorialmaxtime = 1;
     }
-    loadingstuff = 1;
     pause_sound(whooshsound);
     pause_sound(stream_firesound);
 
@@ -915,6 +910,7 @@ void Game::Loadlevel(const char *name)
         }
 
         weapons.clear();
+        Person::players.resize(1);
 
         funpackf(tfile, "Bi", &mapvers);
         if (mapvers >= 15)
@@ -954,7 +950,6 @@ void Game::Loadlevel(const char *name)
             funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &Person::players[0]->coords.x, &Person::players[0]->coords.y, &Person::players[0]->coords.z, &Person::players[0]->yaw, &Person::players[0]->targetyaw, &Person::players[0]->num_weapons);
         if (stealthloading)
             funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat, &lamefloat, &lamefloat, &lamefloat, &lamefloat, &Person::players[0]->num_weapons);
-        Person::players[0]->originalcoords = Person::players[0]->coords;
         if (Person::players[0]->num_weapons > 0 && Person::players[0]->num_weapons < 5)
             for (int j = 0; j < Person::players[0]->num_weapons; j++) {
                 Person::players[0]->weaponids[j] = weapons.size();
@@ -1031,8 +1026,9 @@ void Game::Loadlevel(const char *name)
                     funpackf(tfile, "Bf Bf", &dialoguecamerayaw[k][l], &dialoguecamerapitch[k][l]);
                 }
             }
-        } else
+        } else {
             numdialogues = 0;
+        }
 
         for (int k = 0; k < Person::players[0]->numclothes; k++) {
             funpackf(tfile, "Bi", &templength);
@@ -1095,112 +1091,20 @@ void Game::Loadlevel(const char *name)
 
         int numplayers;
         funpackf(tfile, "Bi", &numplayers);
-        int howmanyremoved = 0;
-        bool removeanother = 0;
         if (numplayers > maxplayers) {
             cout << "Warning: this level contains more players than allowed" << endl;
         }
-        if (numplayers > 1) {
-            for (int i = 1; i < numplayers; i++) {
-                Person::players.push_back(shared_ptr<Person>(new Person()));
-                if (visibleloading)
-                    LoadingScreen();
-                removeanother = 0;
-
-                funpackf(tfile, "Bi Bi Bf Bf Bf Bi", &Person::players[i - howmanyremoved]->whichskin, &Person::players[i - howmanyremoved]->creature, &Person::players[i - howmanyremoved]->coords.x, &Person::players[i - howmanyremoved]->coords.y, &Person::players[i - howmanyremoved]->coords.z, &Person::players[i - howmanyremoved]->num_weapons);
-                if (mapvers >= 5)
-                    funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->howactive);
-                else
-                    Person::players[i - howmanyremoved]->howactive = typeactive;
-                if (mapvers >= 3)
-                    funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->scale);
-                else
-                    Person::players[i - howmanyremoved]->scale = -1;
-                if (mapvers >= 11)
-                    funpackf(tfile, "Bb", &Person::players[i - howmanyremoved]->immobile);
-                else
-                    Person::players[i - howmanyremoved]->immobile = 0;
-                if (mapvers >= 12)
-                    funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->yaw);
-                else
-                    Person::players[i - howmanyremoved]->yaw = 0;
-                Person::players[i - howmanyremoved]->targetyaw = Person::players[i - howmanyremoved]->yaw;
-                if (Person::players[i - howmanyremoved]->num_weapons < 0 || Person::players[i - howmanyremoved]->num_weapons > 5) {
-                    removeanother = 1;
-                    howmanyremoved++;
-                }
-                if (!removeanother) {
-                    if (Person::players[i - howmanyremoved]->num_weapons > 0 && Person::players[i - howmanyremoved]->num_weapons < 5) {
-                        for (int j = 0; j < Person::players[i - howmanyremoved]->num_weapons; j++) {
-                            Person::players[i - howmanyremoved]->weaponids[j] = weapons.size();
-                            int type;
-                            funpackf(tfile, "Bi", &type);
-                            weapons.push_back(Weapon(type, i));
-                        }
-                    }
-                    funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->numwaypoints);
-                    for (int j = 0; j < Person::players[i - howmanyremoved]->numwaypoints; j++) {
-                        funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->waypoints[j].x);
-                        funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->waypoints[j].y);
-                        funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->waypoints[j].z);
-                        if (mapvers >= 5)
-                            funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->waypointtype[j]);
-                        else
-                            Person::players[i - howmanyremoved]->waypointtype[j] = wpkeepwalking;
-                    }
-
-                    funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->waypoint);
-                    if (Person::players[i - howmanyremoved]->waypoint > Person::players[i - howmanyremoved]->numwaypoints - 1)
-                        Person::players[i - howmanyremoved]->waypoint = 0;
-
-                    funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->armorhead, &Person::players[i - howmanyremoved]->armorhigh, &Person::players[i - howmanyremoved]->armorlow);
-                    funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->protectionhead, &Person::players[i - howmanyremoved]->protectionhigh, &Person::players[i - howmanyremoved]->protectionlow);
-                    funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->metalhead, &Person::players[i - howmanyremoved]->metalhigh, &Person::players[i - howmanyremoved]->metallow);
-                    funpackf(tfile, "Bf Bf", &Person::players[i - howmanyremoved]->power, &Person::players[i - howmanyremoved]->speedmult);
-
-                    if (mapvers >= 4)
-                        funpackf(tfile, "Bf Bf Bf Bf", &headprop, &bodyprop, &armprop, &legprop);
-                    else {
-                        headprop = 1;
-                        bodyprop = 1;
-                        armprop = 1;
-                        legprop = 1;
-                    }
-                    if (Person::players[i - howmanyremoved]->creature == wolftype) {
-                        Person::players[i - howmanyremoved]->proportionhead = 1.1 * headprop;
-                        Person::players[i - howmanyremoved]->proportionbody = 1.1 * bodyprop;
-                        Person::players[i - howmanyremoved]->proportionarms = 1.1 * armprop;
-                        Person::players[i - howmanyremoved]->proportionlegs = 1.1 * legprop;
-                    }
-
-                    if (Person::players[i - howmanyremoved]->creature == rabbittype) {
-                        Person::players[i - howmanyremoved]->proportionhead = 1.2 * headprop;
-                        Person::players[i - howmanyremoved]->proportionbody = 1.05 * bodyprop;
-                        Person::players[i - howmanyremoved]->proportionarms = 1.00 * armprop;
-                        Person::players[i - howmanyremoved]->proportionlegs = 1.1 * legprop;
-                        Person::players[i - howmanyremoved]->proportionlegs.y = 1.05 * legprop;
-                    }
-
-                    funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->numclothes);
-                    if (Person::players[i - howmanyremoved]->numclothes) {
-                        for (int k = 0; k < Person::players[i - howmanyremoved]->numclothes; k++) {
-                            int templength;
-                            funpackf(tfile, "Bi", &templength);
-                            for (int l = 0; l < templength; l++)
-                                funpackf(tfile, "Bb", &Person::players[i - howmanyremoved]->clothes[k][l]);
-                            Person::players[i - howmanyremoved]->clothes[k][templength] = '\0';
-                            funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->clothestintr[k], &Person::players[i - howmanyremoved]->clothestintg[k], &Person::players[i - howmanyremoved]->clothestintb[k]);
-                        }
-                    }
-                }
+        for (int i = 1; i < numplayers; i++) {
+            unsigned j = 1;
+            try {
+                Person::players.push_back(shared_ptr<Person>(new Person(tfile, mapvers, j)));
+                j++;
+            } catch (InvalidPersonException e) {
             }
         }
         if (visibleloading)
             LoadingScreen();
 
-        numplayers -= howmanyremoved;
-        Person::players.resize(numplayers);
-
         funpackf(tfile, "Bi", &numpathpoints);
         if (numpathpoints > 30 || numpathpoints < 0)
             numpathpoints = 0;
@@ -1280,7 +1184,7 @@ void Game::Loadlevel(const char *name)
                         (char *)":Data:Models:Body7.solid",
                         (char *)":Data:Models:Bodylow.solid",
                         (char *)":Data:Models:Belt.solid", 1);
-                    Person::players[i]->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1, 1);
+                    Person::players[i]->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1);
                 }
                 if (Person::players[i]->creature == wolftype) {
                     Person::players[i]->skeleton.Load(
@@ -1301,15 +1205,7 @@ void Game::Loadlevel(const char *name)
 
             Person::players[i]->skeleton.drawmodel.textureptr.load(creatureskin[Person::players[i]->creature][Person::players[i]->whichskin], 1, &Person::players[i]->skeleton.skinText[0], &Person::players[i]->skeleton.skinsize);
 
-            if (Person::players[i]->numclothes) {
-                for (int j = 0; j < Person::players[i]->numclothes; j++) {
-                    tintr = Person::players[i]->clothestintr[j];
-                    tintg = Person::players[i]->clothestintg[j];
-                    tintb = Person::players[i]->clothestintb[j];
-                    Person::players[i]->addClothes(j);
-                }
-                Person::players[i]->DoMipmaps();
-            }
+            Person::players[i]->addClothes();
 
             Person::players[i]->animCurrent = bounceidleanim;
             Person::players[i]->animTarget = bounceidleanim;
@@ -1332,7 +1228,6 @@ void Game::Loadlevel(const char *name)
             Person::players[i]->normalsupdatedelay = 0;
 
             Person::players[i]->aitype = passivetype;
-            Person::players[i]->madskills = 0;
 
             if (i == 0) {
                 Person::players[i]->proportionhead = 1.2;
@@ -1444,7 +1339,6 @@ void Game::Loadlevel(const char *name)
         perror("Problem");
     }
     leveltime = 0;
-    loadingstuff = 0;
     visibleloading = 0;
 }
 
@@ -2057,15 +1951,7 @@ void doDebugKeys()
                         &Person::players[closest]->skeleton.skinText[0], &Person::players[closest]->skeleton.skinsize);
             }
 
-            if (Person::players[closest]->numclothes) {
-                for (int i = 0; i < Person::players[closest]->numclothes; i++) {
-                    tintr = Person::players[closest]->clothestintr[i];
-                    tintg = Person::players[closest]->clothestintg[i];
-                    tintb = Person::players[closest]->clothestintb[i];
-                    Person::players[closest]->addClothes(i);
-                }
-                Person::players[closest]->DoMipmaps();
-            }
+            Person::players[closest]->addClothes();
         }
 
         if (Input::isKeyPressed(SDL_SCANCODE_O) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
@@ -2410,7 +2296,7 @@ void doDebugKeys()
                     Person::players.back()->whichskin = 2;
                 }
 
-                Person::players.back()->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1, 1);
+                Person::players.back()->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1);
                 Person::players.back()->power = 1;
                 Person::players.back()->speedmult = 1;
                 Person::players.back()->animCurrent = bounceidleanim;
@@ -2491,20 +2377,13 @@ void doDebugKeys()
                 Person::players.back()->immobile = Person::players[0]->immobile;
 
                 Person::players.back()->numclothes = Person::players[0]->numclothes;
-                if (Person::players.back()->numclothes)
-                    for (int i = 0; i < Person::players.back()->numclothes; i++) {
-                        strcpy(Person::players.back()->clothes[i], Person::players[0]->clothes[i]);
-                        Person::players.back()->clothestintr[i] = Person::players[0]->clothestintr[i];
-                        Person::players.back()->clothestintg[i] = Person::players[0]->clothestintg[i];
-                        Person::players.back()->clothestintb[i] = Person::players[0]->clothestintb[i];
-                        tintr = Person::players.back()->clothestintr[i];
-                        tintg = Person::players.back()->clothestintg[i];
-                        tintb = Person::players.back()->clothestintb[i];
-                        Person::players.back()->addClothes(i);
-                    }
-                if (Person::players.back()->numclothes) {
-                    Person::players.back()->DoMipmaps();
+                for (int i = 0; i < Person::players.back()->numclothes; i++) {
+                    strcpy(Person::players.back()->clothes[i], Person::players[0]->clothes[i]);
+                    Person::players.back()->clothestintr[i] = Person::players[0]->clothestintr[i];
+                    Person::players.back()->clothestintg[i] = Person::players[0]->clothestintg[i];
+                    Person::players.back()->clothestintb[i] = Person::players[0]->clothestintb[i];
                 }
+                Person::players.back()->addClothes();
 
                 Person::players.back()->power = Person::players[0]->power;
                 Person::players.back()->speedmult = Person::players[0]->speedmult;
@@ -2516,7 +2395,6 @@ void doDebugKeys()
                 Person::players.back()->bleeding = 0;
                 Person::players.back()->numwaypoints = 0;
                 Person::players.back()->waypoint = 0;
-                Person::players.back()->jumppath = 0;
                 Person::players.back()->weaponstuck = -1;
                 Person::players.back()->weaponactive = -1;
                 Person::players.back()->num_weapons = 0;
@@ -2962,12 +2840,8 @@ void doAerialAcrobatics()
                                 Person::players[k]->animTarget = Person::players[k]->getLanding();
                                 emit_sound_at(landsound, Person::players[k]->coords, 128.);
                                 if (k == 0) {
-                                    envsound[numenvsounds] = Person::players[k]->coords;
-                                    envsoundvol[numenvsounds] = 16;
-                                    envsoundlife[numenvsounds] = .4;
-                                    numenvsounds++;
+                                    addEnvSound(Person::players[k]->coords);
                                 }
-
                             }
                         }
                     }
@@ -3407,8 +3281,7 @@ void doAttacks()
                                             !Person::players[i]->skeleton.free &&
                                             Person::players[i]->animTarget != getupfrombackanim &&
                                             Person::players[i]->animTarget != getupfromfrontanim &&
-                                            (Person::players[i]->stunned > 0 && Person::players[k]->madskills ||
-                                             Person::players[i]->surprised > 0 ||
+                                            (Person::players[i]->surprised > 0 ||
                                              Person::players[i]->aitype == passivetype ||
                                              attackweapon && Person::players[i]->stunned > 0) &&
                                             normaldotproduct(Person::players[i]->facing, Person::players[i]->coords - Person::players[k]->coords) > 0) {
@@ -5434,13 +5307,6 @@ void MenuTick()
         }
     }
 
-    if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) {
-        tryquit = 1;
-        if (mainmenu == 3) {
-            SaveSettings();
-        }
-    }
-
     OPENAL_SetFrequency(channels[stream_menutheme], 22050);
 
     if (entername) {
@@ -5490,7 +5356,6 @@ void Game::Tick()
         displaytime[i] += multiplier;
     }
 
-    keyboardfrozen = false;
     Input::Tick();
 
     if (Input::isKeyPressed(SDL_SCANCODE_F6)) {
@@ -5663,15 +5528,6 @@ void Game::Tick()
             }
         }
 
-
-
-        if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) {
-            tryquit = 1;
-            if (mainmenu == 3) {
-                SaveSettings();
-            }
-        }
-
         static int oldwinfreeze;
         if (winfreeze && !oldwinfreeze) {
             OPENAL_SetFrequency(OPENAL_ALL, 0.001);
@@ -6830,8 +6686,8 @@ void Game::Tick()
                                 Person::players[i]->setAnimation(jumpupanim);
                                 Person::players[i]->yaw = Person::players[i]->targetyaw;
                                 Person::players[i]->transspeed = 20;
-                                Person::players[i]->FootLand(0, 1);
-                                Person::players[i]->FootLand(1, 1);
+                                Person::players[i]->FootLand(leftfoot, 1);
+                                Person::players[i]->FootLand(rightfoot, 1);
 
                                 facing = 0;
                                 facing.z = -1;