]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameTick.cpp
Replaced as much char* as possible by std::strings
[lugaru.git] / Source / GameTick.cpp
index 5e4f306c04df2f03e9871325ee044aaa6ccfcf28..df0bc200ee2a9d762ea0bd38adc287538ebb7eb7 100644 (file)
@@ -827,7 +827,7 @@ void Game::Loadlevel(const std::string& name)
     hostiletime = 0;
     won = 0;
 
-    animation[bounceidleanim].Load((char *)"Idle", middleheight, neutral);
+    animation[bounceidleanim].Load("Idle", middleheight, neutral);
 
     Dialog::dialogs.clear();
 
@@ -939,10 +939,12 @@ void Game::Loadlevel(const std::string& name)
         skyboxlightg = skyboxg;
         skyboxlightb = skyboxb;
     }
-    if (!stealthloading)
-        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)
+    /* TODO - This should be done in an other way so that we can rebuild main player as well (so coords would need to be copied from old ones after rebuilding) */
+    if (stealthloading) {
         funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat, &lamefloat, &lamefloat, &lamefloat, &lamefloat, &Person::players[0]->num_weapons);
+    } else {
+        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 (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();
@@ -1093,110 +1095,63 @@ void Game::Loadlevel(const std::string& name)
     for (unsigned i = 0; i < Person::players.size(); i++) {
         if (visibleloading)
             LoadingScreen();
-        Person::players[i]->burnt = 0;
-        Person::players[i]->bled = 0;
-        Person::players[i]->onfire = 0;
-        if (i == 0 || Person::players[i]->scale < 0)
+        if (i == 0) {
+            Person::players[i]->burnt = 0;
+            Person::players[i]->bled = 0;
+            Person::players[i]->onfire = 0;
             Person::players[i]->scale = .2;
-        Person::players[i]->skeleton.free = 0;
-        Person::players[i]->skeleton.id = i;
-        if (i == 0 && mapvers < 9)
-            Person::players[i]->creature = rabbittype;
-        if (Person::players[i]->creature != wolftype) {
-            Person::players[i]->skeleton.Load(
-                (char *)"Skeleton/BasicFigure",
-                (char *)"Skeleton/BasicFigureLow",
-                (char *)"Skeleton/RabbitBelt",
-                (char *)"Models/Body.solid",
-                (char *)"Models/Body2.solid",
-                (char *)"Models/Body3.solid",
-                (char *)"Models/Body4.solid",
-                (char *)"Models/Body5.solid",
-                (char *)"Models/Body6.solid",
-                (char *)"Models/Body7.solid",
-                (char *)"Models/BodyLow.solid",
-                (char *)"Models/Belt.solid", 0);
-        } else {
-            if (Person::players[i]->creature != wolftype) {
-                Person::players[i]->skeleton.Load(
-                    (char *)"Skeleton/BasicFigure",
-                    (char *)"Skeleton/BasicFigureLow",
-                    (char *)"Skeleton/RabbitBelt",
-                    (char *)"Models/Body.solid",
-                    (char *)"Models/Body2.solid",
-                    (char *)"Models/Body3.solid",
-                    (char *)"Models/Body4.solid",
-                    (char *)"Models/Body5.solid",
-                    (char *)"Models/Body6.solid",
-                    (char *)"Models/Body7.solid",
-                    (char *)"Models/BodyLow.solid",
-                    (char *)"Models/Belt.solid", 1);
-                Person::players[i]->skeleton.drawmodelclothes.textureptr.load("Textures/Belt.png", 1);
-            }
-            if (Person::players[i]->creature == wolftype) {
-                Person::players[i]->skeleton.Load(
-                    (char *)"Skeleton/BasicFigureWolf",
-                    (char *)"Skeleton/BasicFigureWolfLow",
-                    (char *)"Skeleton/RabbitBelt",
-                    (char *)"Models/Wolf.solid",
-                    (char *)"Models/Wolf2.solid",
-                    (char *)"Models/Wolf3.solid",
-                    (char *)"Models/Wolf4.solid",
-                    (char *)"Models/Wolf5.solid",
-                    (char *)"Models/Wolf6.solid",
-                    (char *)"Models/Wolf7.solid",
-                    (char *)"Models/WolfLow.solid",
-                    (char *)"Models/Belt.solid", 0);
+            if (mapvers < 9) {
+                Person::players[i]->creature = rabbittype;
             }
         }
+        Person::players[i]->skeleton.free = 0;
 
-        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);
+        Person::players[i]->skeletonLoad();
 
         Person::players[i]->addClothes();
 
-        Person::players[i]->animCurrent = bounceidleanim;
-        Person::players[i]->animTarget = bounceidleanim;
-        Person::players[i]->frameCurrent = 0;
-        Person::players[i]->frameTarget = 1;
-        Person::players[i]->target = 0;
+        if (i == 0) {
+            Person::players[i]->animCurrent = bounceidleanim;
+            Person::players[i]->animTarget = bounceidleanim;
+            Person::players[i]->frameCurrent = 0;
+            Person::players[i]->frameTarget = 1;
+            Person::players[i]->target = 0;
+        }
         Person::players[i]->speed = 1 + (float)(Random() % 100) / 1000;
         if (difficulty == 0)
             Person::players[i]->speed -= .2;
         if (difficulty == 1)
             Person::players[i]->speed -= .1;
 
-        Person::players[i]->velocity = 0;
-        Person::players[i]->oldcoords = Person::players[i]->coords;
-        Person::players[i]->realoldcoords = Person::players[i]->coords;
-
-        Person::players[i]->id = i;
-        Person::players[i]->skeleton.id = i;
-        Person::players[i]->updatedelay = 0;
-        Person::players[i]->normalsupdatedelay = 0;
+        if (i == 0) {
+            Person::players[i]->velocity = 0;
+            Person::players[i]->oldcoords = Person::players[i]->coords;
+            Person::players[i]->realoldcoords = Person::players[i]->coords;
 
-        Person::players[i]->aitype = passivetype;
+            Person::players[i]->id = i;
+            Person::players[i]->updatedelay = 0;
+            Person::players[i]->normalsupdatedelay = 0;
 
-        if (i == 0) {
             Person::players[i]->proportionhead = 1.2;
             Person::players[i]->proportionbody = 1.05;
             Person::players[i]->proportionarms = 1.00;
             Person::players[i]->proportionlegs = 1.1;
             Person::players[i]->proportionlegs.y = 1.05;
-        }
-        Person::players[i]->headless = 0;
-        Person::players[i]->currentoffset = 0;
-        Person::players[i]->targetoffset = 0;
-
-        Person::players[i]->damagetolerance = 200;
-
-        if (Person::players[i]->creature == wolftype) {
-            if (i == 0 || Person::players[i]->scale < 0)
+            Person::players[i]->headless = 0;
+            Person::players[i]->currentoffset = 0;
+            Person::players[i]->targetoffset = 0;
+            if (Person::players[i]->creature == wolftype) {
                 Person::players[i]->scale = .23;
-            Person::players[i]->damagetolerance = 300;
+                Person::players[i]->damagetolerance = 300;
+            } else {
+                Person::players[i]->damagetolerance = 200;
+            }
         }
 
+
         if (visibleloading)
             LoadingScreen();
+
         if (cellophane) {
             Person::players[i]->proportionhead.z = 0;
             Person::players[i]->proportionbody.z = 0;
@@ -1204,43 +1159,44 @@ void Game::Loadlevel(const std::string& name)
             Person::players[i]->proportionlegs.z = 0;
         }
 
-        Person::players[i]->tempanimation.Load((char *)"Tempanim", 0, 0);
-
-        Person::players[i]->headmorphness = 0;
-        Person::players[i]->targetheadmorphness = 1;
-        Person::players[i]->headmorphstart = 0;
-        Person::players[i]->headmorphend = 0;
-
-        Person::players[i]->pausetime = 0;
-
-        Person::players[i]->dead = 0;
-        Person::players[i]->jumppower = 5;
-        Person::players[i]->damage = 0;
-        Person::players[i]->permanentdamage = 0;
-        Person::players[i]->superpermanentdamage = 0;
-
-        Person::players[i]->forwardkeydown = 0;
-        Person::players[i]->leftkeydown = 0;
-        Person::players[i]->backkeydown = 0;
-        Person::players[i]->rightkeydown = 0;
-        Person::players[i]->jumpkeydown = 0;
-        Person::players[i]->crouchkeydown = 0;
-        Person::players[i]->throwkeydown = 0;
-
-        Person::players[i]->collided = -10;
-        Person::players[i]->loaded = 1;
-        Person::players[i]->bloodloss = 0;
-        Person::players[i]->weaponactive = -1;
-        Person::players[i]->weaponstuck = -1;
-        Person::players[i]->bleeding = 0;
-        Person::players[i]->deathbleeding = 0;
-        Person::players[i]->stunned = 0;
-        Person::players[i]->hasvictim = 0;
-        Person::players[i]->wentforweapon = 0;
+        Person::players[i]->tempanimation.Load("Tempanim", 0, 0);
+
+        if (i == 0) {
+            Person::players[i]->headmorphness = 0;
+            Person::players[i]->targetheadmorphness = 1;
+            Person::players[i]->headmorphstart = 0;
+            Person::players[i]->headmorphend = 0;
+
+            Person::players[i]->pausetime = 0;
+
+            Person::players[i]->dead = 0;
+            Person::players[i]->jumppower = 5;
+            Person::players[i]->damage = 0;
+            Person::players[i]->permanentdamage = 0;
+            Person::players[i]->superpermanentdamage = 0;
+
+            Person::players[i]->forwardkeydown = 0;
+            Person::players[i]->leftkeydown = 0;
+            Person::players[i]->backkeydown = 0;
+            Person::players[i]->rightkeydown = 0;
+            Person::players[i]->jumpkeydown = 0;
+            Person::players[i]->crouchkeydown = 0;
+            Person::players[i]->throwkeydown = 0;
+
+            Person::players[i]->collided = -10;
+            Person::players[i]->loaded = 1;
+            Person::players[i]->bloodloss = 0;
+            Person::players[i]->weaponactive = -1;
+            Person::players[i]->weaponstuck = -1;
+            Person::players[i]->bleeding = 0;
+            Person::players[i]->deathbleeding = 0;
+            Person::players[i]->stunned = 0;
+            Person::players[i]->hasvictim = 0;
+            Person::players[i]->wentforweapon = 0;
+        }
     }
 
     Person::players[0]->aitype = playercontrolled;
-    Person::players[0]->weaponactive = -1;
 
     if (difficulty == 1) {
         Person::players[0]->power = 1 / .9;
@@ -1918,11 +1874,9 @@ void doDebugKeys()
 
 
                 if (Person::players[closest]->creature == rabbittype) {
-                    Person::players[closest]->skeleton.id = closest;
-                    Person::players[closest]->skeleton.Load((char *)"Skeleton/BasicFigureWolf", (char *)"Skeleton/BasicFigureWolfLow", (char *)"Skeleton/RabbitBelt", (char *)"Models/Wolf.solid", (char *)"Models/Wolf2.solid", (char *)"Models/Wolf3.solid", (char *)"Models/Wolf4.solid", (char *)"Models/Wolf5.solid", (char *)"Models/Wolf6.solid", (char *)"Models/Wolf7.solid", (char *)"Models/WolfLow.solid", (char *)"Models/Belt.solid", 0);
-                    Person::players[closest]->skeleton.drawmodel.textureptr.load("Textures/Wolf.jpg", 1, &Person::players[closest]->skeleton.skinText[0], &Person::players[closest]->skeleton.skinsize);
-                    Person::players[closest]->whichskin = 0;
                     Person::players[closest]->creature = wolftype;
+                    Person::players[closest]->whichskin = 0;
+                    Person::players[closest]->skeletonLoad();
 
                     Person::players[closest]->proportionhead = 1.1;
                     Person::players[closest]->proportionbody = 1.1;
@@ -1933,11 +1887,9 @@ void doDebugKeys()
 
                     Person::players[closest]->damagetolerance = 300;
                 } else {
-                    Person::players[closest]->skeleton.id = closest;
-                    Person::players[closest]->skeleton.Load((char *)"Skeleton/BasicFigure", (char *)"Skeleton/BasicFigureLow", (char *)"Skeleton/RabbitBelt", (char *)"Models/Body.solid", (char *)"Models/Body2.solid", (char *)"Models/Body3.solid", (char *)"Models/Body4.solid", (char *)"Models/Body5.solid", (char *)"Models/Body6.solid", (char *)"Models/Body7.solid", (char *)"Models/BodyLow.solid", (char *)"Models/Belt.solid", 1);
-                    Person::players[closest]->skeleton.drawmodel.textureptr.load("Textures/Fur3.jpg", 1, &Person::players[closest]->skeleton.skinText[0], &Person::players[closest]->skeleton.skinsize);
-                    Person::players[closest]->whichskin = 0;
                     Person::players[closest]->creature = rabbittype;
+                    Person::players[closest]->whichskin = 0;
+                    Person::players[closest]->skeletonLoad(true);
 
                     Person::players[closest]->proportionhead = 1.2;
                     Person::players[closest]->proportionbody = 1.05;
@@ -2223,49 +2175,33 @@ void doDebugKeys()
             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;
+                Person::players.back()->id = Person::players.size()-1;
+
+                Person::players.back()->scale = Person::players[0]->scale;
                 Person::players.back()->creature = rabbittype;
                 Person::players.back()->howactive = editoractive;
-                Person::players.back()->skeleton.id = Person::players.size()-1;
-                Person::players.back()->skeleton.Load((char *)"Skeleton/BasicFigure", (char *)"Skeleton/BasicFigureLow", (char *)"Skeleton/RabbitBelt", (char *)"Models/Body.solid", (char *)"Models/Body2.solid", (char *)"Models/Body3.solid", (char *)"Models/Body4.solid", (char *)"Models/Body5.solid", (char *)"Models/Body6.solid", (char *)"Models/Body7.solid", (char *)"Models/BodyLow.solid", (char *)"Models/Belt.solid", 1);
 
                 int k = abs(Random() % 2) + 1;
                 if (k == 0) {
-                    Person::players.back()->skeleton.drawmodel.textureptr.load("Textures/Fur3.jpg", 1, &Person::players.back()->skeleton.skinText[0], &Person::players.back()->skeleton.skinsize);
                     Person::players.back()->whichskin = 0;
                 } else if (k == 1) {
-                    Person::players.back()->skeleton.drawmodel.textureptr.load("Textures/Fur.jpg", 1, &Person::players.back()->skeleton.skinText[0], &Person::players.back()->skeleton.skinsize);
                     Person::players.back()->whichskin = 1;
                 } else {
-                    Person::players.back()->skeleton.drawmodel.textureptr.load("Textures/Fur2.jpg", 1, &Person::players.back()->skeleton.skinText[0], &Person::players.back()->skeleton.skinsize);
                     Person::players.back()->whichskin = 2;
                 }
 
+                Person::players.back()->skeletonLoad(true);
+
                 Person::players.back()->skeleton.drawmodelclothes.textureptr.load("Textures/Belt.png", 1);
-                Person::players.back()->power = 1;
-                Person::players.back()->speedmult = 1;
-                Person::players.back()->animCurrent = bounceidleanim;
-                Person::players.back()->animTarget = bounceidleanim;
-                Person::players.back()->frameCurrent = 0;
-                Person::players.back()->frameTarget = 1;
-                Person::players.back()->target = 0;
-                Person::players.back()->bled = 0;
                 Person::players.back()->speed = 1 + (float)(Random() % 100) / 1000;
 
                 Person::players.back()->targetyaw = Person::players[0]->targetyaw;
                 Person::players.back()->yaw = Person::players[0]->yaw;
 
-                Person::players.back()->velocity = 0;
                 Person::players.back()->coords = Person::players[0]->coords;
                 Person::players.back()->oldcoords = Person::players.back()->coords;
                 Person::players.back()->realoldcoords = Person::players.back()->coords;
 
-                Person::players.back()->id = Person::players.size()-1;
-                Person::players.back()->updatedelay = 0;
-                Person::players.back()->normalsupdatedelay = 0;
-
-                Person::players.back()->aitype = passivetype;
-
                 if (Person::players[0]->creature == wolftype) {
                     headprop = Person::players[0]->proportionhead.x / 1.1;
                     bodyprop = Person::players[0]->proportionbody.x / 1.1;
@@ -2295,9 +2231,6 @@ void doDebugKeys()
                     Person::players.back()->proportionlegs.y = 1.05 * legprop;
                 }
 
-                Person::players.back()->headless = 0;
-                Person::players.back()->onfire = 0;
-
                 if (cellophane) {
                     Person::players.back()->proportionhead.z = 0;
                     Person::players.back()->proportionbody.z = 0;
@@ -2305,7 +2238,7 @@ void doDebugKeys()
                     Person::players.back()->proportionlegs.z = 0;
                 }
 
-                Person::players.back()->tempanimation.Load((char *)"Tempanim", 0, 0);
+                Person::players.back()->tempanimation.Load("Tempanim", 0, 0);
 
                 Person::players.back()->damagetolerance = 200;
 
@@ -2333,20 +2266,7 @@ void doDebugKeys()
                 Person::players.back()->power = Person::players[0]->power;
                 Person::players.back()->speedmult = Person::players[0]->speedmult;
 
-                Person::players.back()->damage = 0;
-                Person::players.back()->permanentdamage = 0;
-                Person::players.back()->superpermanentdamage = 0;
-                Person::players.back()->deathbleeding = 0;
-                Person::players.back()->bleeding = 0;
-                Person::players.back()->numwaypoints = 0;
-                Person::players.back()->waypoint = 0;
-                Person::players.back()->weaponstuck = -1;
-                Person::players.back()->weaponactive = -1;
-                Person::players.back()->num_weapons = 0;
-                Person::players.back()->bloodloss = 0;
-                Person::players.back()->dead = 0;
-
-                Person::players.back()->loaded = 1;
+                Person::players.back()->loaded = true;
             }
 
             if (Input::isKeyPressed(SDL_SCANCODE_P) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) {
@@ -4724,7 +4644,7 @@ void updateSettingsMenu()
 void updateStereoConfigMenu()
 {
     char sbuf[256];
-    sprintf(sbuf, "Stereo mode: %s", StereoModeName(newstereomode));
+    sprintf(sbuf, "Stereo mode: %s", StereoModeName(newstereomode).c_str());
     Menu::setText(0, sbuf);
     sprintf(sbuf, "Stereo separation: %.3f", stereoseparation);
     Menu::setText(1, sbuf);
@@ -5232,7 +5152,7 @@ void MenuTick()
                 if (selected == 0) {
                     newstereomode = (StereoMode)(newstereomode + 1);
                     while (!CanInitStereo(newstereomode)) {
-                        printf("Failed to initialize mode %s (%i)\n", StereoModeName(newstereomode), newstereomode);
+                        printf("Failed to initialize mode %s (%i)\n", StereoModeName(newstereomode).c_str(), newstereomode);
                         newstereomode = (StereoMode)(newstereomode + 1);
                         if (newstereomode >= stereoCount)
                             newstereomode = stereoNone;