]> git.jsancho.org Git - lugaru.git/blobdiff - Source/ConsoleCmds.cpp
Attempt at fixing the crash in DoAnimation
[lugaru.git] / Source / ConsoleCmds.cpp
index 8fc1da892982abcb2889c44d0089e512c86949c6..df26f820498d05c4a28f6ff1967430ba101b248b 100644 (file)
@@ -21,6 +21,7 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 #include "ConsoleCmds.h"
 #include "Game.h"
 #include "Dialog.h"
+#include "Hotspot.h"
 #include "Utils/Folders.h"
 
 const char *cmd_names[cmd_count] = {
@@ -49,12 +50,7 @@ extern float slomospeed;
 extern float slomofreq;
 extern int tutoriallevel;
 extern int hostile;
-extern XYZ hotspot[40];
-extern int hotspottype[40];
-extern float hotspotsize[40];
-extern char hotspottext[40][256];
 extern int maptype;
-extern int numhotspots;
 extern Objects objects;
 extern int slomo;
 extern float slomodelay;
@@ -219,13 +215,13 @@ void ch_save(const char *args)
         fpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", objects.type[k], objects.yaw[k], objects.pitch[k],
                objects.position[k].x, objects.position[k].y, objects.position[k].z, objects.scale[k]);
 
-    fpackf(tfile, "Bi", numhotspots);
-    for (int i = 0; i < numhotspots; i++) {
-        fpackf(tfile, "Bi Bf Bf Bf Bf", hotspottype[i], hotspotsize[i], hotspot[i].x, hotspot[i].y, hotspot[i].z);
-        int templength = strlen(hotspottext[i]);
+    fpackf(tfile, "Bi", Hotspot::hotspots.size());
+    for (int i = 0; i < Hotspot::hotspots.size(); i++) {
+        fpackf(tfile, "Bi Bf Bf Bf Bf", Hotspot::hotspots[i].type, Hotspot::hotspots[i].size, Hotspot::hotspots[i].position.x, Hotspot::hotspots[i].position.y, Hotspot::hotspots[i].position.z);
+        int templength = strlen(Hotspot::hotspots[i].text);
         fpackf(tfile, "Bi", templength);
         for (int l = 0; l < templength; l++)
-            fpackf(tfile, "Bb", hotspottext[i][l]);
+            fpackf(tfile, "Bb", Hotspot::hotspots[i].text[l]);
     }
 
     fpackf(tfile, "Bi", Person::players.size());
@@ -442,15 +438,8 @@ void ch_cellophane(const char *args)
 
 void ch_funnybunny(const char *args)
 {
-    Person::players[0]->skeleton.id = 0;
-    Person::players[0]->skeleton.Load("Skeleton/Basic Figure", "Skeleton/Basic Figurelow",
-                            "Skeleton/Rabbitbelt", "Models/Body.solid",
-                            "Models/Body2.solid", "Models/Body3.solid",
-                            "Models/Body4.solid", "Models/Body5.solid",
-                            "Models/Body6.solid", "Models/Body7.solid",
-                            "Models/Bodylow.solid", "Models/Belt.solid", 1);
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/fur3.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
     Person::players[0]->creature = rabbittype;
+    Person::players[0]->skeletonLoad(true);
     Person::players[0]->scale = .2;
     Person::players[0]->headless = 0;
     Person::players[0]->damagetolerance = 200;
@@ -459,15 +448,8 @@ void ch_funnybunny(const char *args)
 
 void ch_wolfie(const char *args)
 {
-    Person::players[0]->skeleton.id = 0;
-    Person::players[0]->skeleton.Load("Skeleton/Basic Figure Wolf", "Skeleton/Basic Figure Wolf Low",
-                            "Skeleton/Rabbitbelt", "Models/Wolf.solid",
-                            "Models/Wolf2.solid", "Models/Wolf3.solid",
-                            "Models/Wolf4.solid", "Models/Wolf5.solid",
-                            "Models/Wolf6.solid", "Models/Wolf7.solid",
-                            "Models/Wolflow.solid", "Models/Belt.solid", 0);
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/Wolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
     Person::players[0]->creature = wolftype;
+    Person::players[0]->skeletonLoad();
     Person::players[0]->damagetolerance = 300;
     set_proportion(0, "1 1 1 1");
 }
@@ -494,22 +476,22 @@ void ch_darkwolf(const char *args)
 
 void ch_lizardwolf(const char *args)
 {
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/Lizardwolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
+    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/LizardWolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
 }
 
 void ch_white(const char *args)
 {
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/fur.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
+    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/Fur.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
 }
 
 void ch_brown(const char *args)
 {
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/fur3.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
+    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/Fur3.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
 }
 
 void ch_black(const char *args)
 {
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/fur2.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
+    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/Fur2.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
 }
 
 void ch_sizemin(const char *args)
@@ -551,19 +533,14 @@ void ch_path(const char *args)
 
 void ch_hs(const char *args)
 {
-    hotspot[numhotspots] = Person::players[0]->coords;
-
     float size;
     int type, shift;
     sscanf(args, "%f%d %n", &size, &type, &shift);
 
-    hotspotsize[numhotspots] = size;
-    hotspottype[numhotspots] = type;
-
-    strcpy(hotspottext[numhotspots], args + shift);
-    strcat(hotspottext[numhotspots], "\n");
+    Hotspot::hotspots.emplace_back(Person::players[0]->coords, type, size);
 
-    numhotspots++;
+    strcpy(Hotspot::hotspots.back().text, args + shift);
+    strcat(Hotspot::hotspots.back().text, "\n");
 }
 
 void ch_dialogue(const char *args)
@@ -607,13 +584,16 @@ void ch_fixrotation(const char *args)
 
 void ch_ddialogue(const char *args)
 {
-    Dialog::dialogs.pop_back();
+    if (!Dialog::dialogs.empty()) {
+        Dialog::dialogs.pop_back();
+    }
 }
 
 void ch_dhs(const char *args)
 {
-    if (numhotspots)
-        numhotspots--;
+    if (!Hotspot::hotspots.empty()) {
+        Hotspot::hotspots.pop_back();
+    }
 }
 
 void ch_immobile(const char *args)