]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Devtools/ConsoleCmds.cpp
Moved default scale and default damage tolerance to PersonType.
[lugaru.git] / Source / Devtools / ConsoleCmds.cpp
index 5183b437af97365dbaa08e260639406b8c8e7743..38e160086961755246857e07931af50f55d2363b 100644 (file)
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 2003, 2010 - Wolfire Games
-Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
+Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file)
 
 This file is part of Lugaru.
 
@@ -84,18 +84,7 @@ static void set_proportion(int pnum, const char* args)
 
     sscanf(args, "%f%f%f%f", &headprop, &bodyprop, &armprop, &legprop);
 
-    if (Person::players[pnum]->creature == wolftype) {
-        Person::players[pnum]->proportionhead = 1.1 * headprop;
-        Person::players[pnum]->proportionbody = 1.1 * bodyprop;
-        Person::players[pnum]->proportionarms = 1.1 * armprop;
-        Person::players[pnum]->proportionlegs = 1.1 * legprop;
-    } else if (Person::players[pnum]->creature == rabbittype) {
-        Person::players[pnum]->proportionhead = 1.2 * headprop;
-        Person::players[pnum]->proportionbody = 1.05 * bodyprop;
-        Person::players[pnum]->proportionarms = 1.00 * armprop;
-        Person::players[pnum]->proportionlegs = 1.1 * legprop;
-        Person::players[pnum]->proportionlegs.y = 1.05 * legprop;
-    }
+    Person::players[pnum]->setProportions(headprop, bodyprop, armprop, legprop);
 }
 
 static void set_protection(int pnum, const char* args)
@@ -132,7 +121,7 @@ static void set_noclothes(int pnum, const char*)
 {
     Person::players[pnum]->numclothes = 0;
     Person::players[pnum]->skeleton.drawmodel.textureptr.load(
-        creatureskin[Person::players[pnum]->creature][Person::players[pnum]->whichskin], 1,
+        PersonType::types[Person::players[pnum]->creature].skins[Person::players[pnum]->whichskin], 1,
         &Person::players[pnum]->skeleton.skinText[0], &Person::players[pnum]->skeleton.skinsize);
 }
 
@@ -171,6 +160,18 @@ static void set_clothes(int pnum, const char* args)
     Person::players[pnum]->DoMipmaps();
 }
 
+static void list_clothes(int pnum)
+{
+    printf("Clothes from player %d:\n", pnum);
+    for (int i = 0; i < Person::players[pnum]->numclothes; i++) {
+        printf("%s (%f %f %f)\n",
+               Person::players[pnum]->clothes[i],
+               Person::players[pnum]->clothestintr[i],
+               Person::players[pnum]->clothestintg[i],
+               Person::players[pnum]->clothestintb[i]);
+    }
+}
+
 /* Console commands themselves */
 
 void ch_quit(const char*)
@@ -291,22 +292,7 @@ void ch_save(const char* args)
         fpackf(tfile, "Bf Bf Bf", Person::players[j]->protectionhead, Person::players[j]->protectionhigh, Person::players[j]->protectionlow);
         fpackf(tfile, "Bf Bf Bf", Person::players[j]->metalhead, Person::players[j]->metalhigh, Person::players[j]->metallow);
         fpackf(tfile, "Bf Bf", Person::players[j]->power, Person::players[j]->speedmult);
-
-        float headprop, bodyprop, armprop, legprop;
-        if (Person::players[j]->creature == wolftype) {
-            headprop = Person::players[j]->proportionhead.x / 1.1;
-            bodyprop = Person::players[j]->proportionbody.x / 1.1;
-            armprop = Person::players[j]->proportionarms.x / 1.1;
-            legprop = Person::players[j]->proportionlegs.x / 1.1;
-        } else {
-            // rabbittype
-            headprop = Person::players[j]->proportionhead.x / 1.2;
-            bodyprop = Person::players[j]->proportionbody.x / 1.05;
-            armprop = Person::players[j]->proportionarms.x / 1.00;
-            legprop = Person::players[j]->proportionlegs.x / 1.1;
-        }
-
-        fpackf(tfile, "Bf Bf Bf Bf", headprop, bodyprop, armprop, legprop);
+        fpackf(tfile, "Bf Bf Bf Bf", Person::players[j]->getProportion(0), Person::players[j]->getProportion(1), Person::players[j]->getProportion(2), Person::players[j]->getProportion(3));
 
         fpackf(tfile, "Bi", Person::players[j]->numclothes);
         if (Person::players[j]->numclothes) {
@@ -335,11 +321,6 @@ void ch_save(const char* args)
     fclose(tfile);
 }
 
-void ch_cellar(const char*)
-{
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/Furdarko.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
-}
-
 void ch_tint(const char* args)
 {
     sscanf(args, "%f%f%f", &tintr, &tintg, &tintb);
@@ -464,6 +445,19 @@ void ch_clothesnear(const char* args)
     }
 }
 
+void ch_clotheslist(const char*)
+{
+    list_clothes(0);
+}
+
+void ch_clotheslistnear(const char*)
+{
+    int closest = findClosestPlayer();
+    if (closest >= 0) {
+        list_clothes(closest);
+    }
+}
+
 void ch_belt(const char*)
 {
     Person::players[0]->skeleton.clothes = !Person::players[0]->skeleton.clothes;
@@ -472,72 +466,29 @@ void ch_belt(const char*)
 void ch_cellophane(const char*)
 {
     cellophane = !cellophane;
-    float mul = (cellophane ? 0 : 1);
-
-    for (auto player : Person::players) {
-        player->proportionhead.z = player->proportionhead.x * mul;
-        player->proportionbody.z = player->proportionbody.x * mul;
-        player->proportionarms.z = player->proportionarms.x * mul;
-        player->proportionlegs.z = player->proportionlegs.x * mul;
-    }
 }
 
 void ch_funnybunny(const char*)
 {
-    Person::players[0]->creature = rabbittype;
-    Person::players[0]->skeletonLoad(true);
-    Person::players[0]->scale = .2;
+    Person::players[0]->changeCreatureType(rabbittype);
     Person::players[0]->headless = 0;
-    Person::players[0]->damagetolerance = 200;
     set_proportion(0, "1 1 1 1");
 }
 
 void ch_wolfie(const char*)
 {
-    Person::players[0]->creature = wolftype;
-    Person::players[0]->skeletonLoad();
-    Person::players[0]->damagetolerance = 300;
+    Person::players[0]->changeCreatureType(wolftype);
     set_proportion(0, "1 1 1 1");
 }
 
-void ch_wolfieisgod(const char* args)
-{
-    ch_wolfie(args);
-}
-
-void ch_wolf(const char*)
-{
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/Wolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
-}
-
-void ch_snowwolf(const char*)
-{
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/SnowWolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
-}
-
-void ch_darkwolf(const char*)
-{
-    Person::players[0]->skeleton.drawmodel.textureptr.load("Textures/DarkWolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
-}
-
 void ch_lizardwolf(const char*)
 {
-    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*)
-{
-    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*)
-{
-    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/FurWolfLizard.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
 }
 
-void ch_black(const char*)
+void ch_darko(const char*)
 {
-    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/FurDarko.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
 }
 
 void ch_sizemin(const char*)
@@ -593,7 +544,7 @@ void ch_hs(const char* args)
     strcat(Hotspot::hotspots.back().text, "\n");
 }
 
-void ch_dialogue(const char* args)
+void ch_dialog(const char* args)
 {
     int type;
     char buf1[32];
@@ -608,22 +559,23 @@ void ch_dialogue(const char* args)
     Dialog::whichdialogue = Dialog::dialogs.size();
 }
 
-void ch_fixdialogue(const char* args)
+void ch_fixdialog(const char* args)
 {
     char buf1[32];
-    int whichdi;
+    int whichdlg = 0;
 
-    sscanf(args, "%d %31s", &whichdi, buf1);
+    sscanf(args, "%d %31s", &whichdlg, buf1);
     std::string filename = std::string("Dialogues/") + buf1 + ".txt";
 
-    Dialog::dialogs[whichdi] = Dialog(Dialog::dialogs[whichdi].type, filename);
+    Dialog::dialogs[whichdlg] = Dialog(Dialog::dialogs[whichdlg].type, filename);
 }
 
 void ch_fixtype(const char* args)
 {
-    int dlg;
-    sscanf(args, "%d", &dlg);
-    Dialog::dialogs[0].type = dlg;
+    int whichdlg = 0;
+    int type = 0;
+    sscanf(args, "%d %d", &whichdlg, &type);
+    Dialog::dialogs[whichdlg].type = type;
 }
 
 void ch_fixrotation(const char*)
@@ -632,11 +584,27 @@ void ch_fixrotation(const char*)
     Dialog::currentDialog().participantyaw[playerId] = Person::players[playerId]->yaw;
 }
 
-void ch_ddialogue(const char*)
+void ch_ddialog(const char* args)
 {
-    if (!Dialog::dialogs.empty()) {
+    if (Dialog::dialogs.empty() || Dialog::inDialog()) {
+        return;
+    }
+
+    int dlg = -1;
+    sscanf(args, "%d", &dlg);
+    if (dlg == -1) {
+        // Remove last entry
         Dialog::dialogs.pop_back();
+        return;
     }
+
+    if (dlg >= int(Dialog::dialogs.size())) {
+        // Invalid index, abort
+        return;
+    }
+
+    // Erase given index, higher indexes will be decreased by 1
+    Dialog::dialogs.erase(Dialog::dialogs.begin() + dlg);
 }
 
 void ch_dhs(const char*)
@@ -676,24 +644,13 @@ void ch_default(const char*)
     Person::players[0]->metallow = 1;
     Person::players[0]->power = 1;
     Person::players[0]->speedmult = 1;
-    Person::players[0]->scale = 1;
-
-    if (Person::players[0]->creature == wolftype) {
-        Person::players[0]->proportionhead = 1.1;
-        Person::players[0]->proportionbody = 1.1;
-        Person::players[0]->proportionarms = 1.1;
-        Person::players[0]->proportionlegs = 1.1;
-    } else if (Person::players[0]->creature == rabbittype) {
-        Person::players[0]->proportionhead = 1.2;
-        Person::players[0]->proportionbody = 1.05;
-        Person::players[0]->proportionarms = 1.00;
-        Person::players[0]->proportionlegs = 1.1;
-        Person::players[0]->proportionlegs.y = 1.05;
-    }
+    Person::players[0]->scale = PersonType::types[Person::players[0]->creature].defaultScale;
+
+    Person::players[0]->setProportions(1, 1, 1, 1);
 
     Person::players[0]->numclothes = 0;
     Person::players[0]->skeleton.drawmodel.textureptr.load(
-        creatureskin[Person::players[0]->creature][Person::players[0]->whichskin], 1,
+        PersonType::types[Person::players[0]->creature].skins[Person::players[0]->whichskin], 1,
         &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize);
 
     editoractive = typeactive;