]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameTick.cpp
Moved Person loading from file into a Person constructor
[lugaru.git] / Source / GameTick.cpp
index 37a4587937be9b43bb3343c1cd4717cfd5822b34..85514c32be90e4b7bedfa6af0a74dbc85edf77ad 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(
@@ -1324,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;
@@ -1436,7 +1339,6 @@ void Game::Loadlevel(const char *name)
         perror("Problem");
     }
     leveltime = 0;
-    loadingstuff = 0;
     visibleloading = 0;
 }
 
@@ -2394,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;
@@ -2493,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;
@@ -2939,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);
                                 }
-
                             }
                         }
                     }
@@ -3384,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) {
@@ -5460,7 +5356,6 @@ void Game::Tick()
         displaytime[i] += multiplier;
     }
 
-    keyboardfrozen = false;
     Input::Tick();
 
     if (Input::isKeyPressed(SDL_SCANCODE_F6)) {