X-Git-Url: https://git.jsancho.org/?p=lugaru.git;a=blobdiff_plain;f=Source%2FDevtools%2FConsoleCmds.cpp;h=f3ac22c0fbeaf594f225d5191e5c43d38fdfc1a1;hp=dc4c275d58989bae4427039e53d1ac72fb8f4c72;hb=7ed95b0f483ca64a550e391f8151d7ceb30acc18;hpb=b84825978803615f45a9f128232e62431042aec0 diff --git a/Source/Devtools/ConsoleCmds.cpp b/Source/Devtools/ConsoleCmds.cpp index dc4c275..f3ac22c 100644 --- a/Source/Devtools/ConsoleCmds.cpp +++ b/Source/Devtools/ConsoleCmds.cpp @@ -18,11 +18,13 @@ You should have received a copy of the GNU General Public License along with Lugaru. If not, see . */ -#include "Game.h" -#include "Devtools/ConsoleCmds.h" -#include "Level/Dialog.h" -#include "Level/Hotspot.h" -#include "Utils/Folders.h" +#include "Devtools/ConsoleCmds.hpp" + +#include "Game.hpp" +#include "Level/Dialog.hpp" +#include "Level/Hotspot.hpp" +#include "Utils/Folders.hpp" +#include "Tutorial.hpp" const char *cmd_names[cmd_count] = { #define DECLARE_COMMAND(cmd) #cmd, @@ -48,10 +50,8 @@ extern int environment; extern float fadestart; extern float slomospeed; extern float slomofreq; -extern int tutoriallevel; extern int hostile; extern int maptype; -extern Objects objects; extern int slomo; extern float slomodelay; extern bool skyboxtexture; @@ -128,7 +128,7 @@ static void set_metal(int pnum, const char *args) Person::players[pnum]->metallow = low; } -static void set_noclothes(int pnum, const char *args) +static void set_noclothes(int pnum, const char*) { Person::players[pnum]->numclothes = 0; Person::players[pnum]->skeleton.drawmodel.textureptr.load( @@ -142,7 +142,7 @@ static void set_clothes(int pnum, const char *args) snprintf(buf, 63, "Textures/%s.png", args); int id = Person::players[pnum]->numclothes; - strcpy(Person::players[pnum]->clothes[id], buf); + strncpy(Person::players[pnum]->clothes[id], buf, 64); Person::players[pnum]->clothestintr[id] = tintr; Person::players[pnum]->clothestintg[id] = tintg; Person::players[pnum]->clothestintb[id] = tintb; @@ -156,26 +156,39 @@ static void set_clothes(int pnum, const char *args) /* Console commands themselves */ -void ch_quit(const char *args) +void ch_quit(const char *) { tryquit = 1; } void ch_map(const char *args) { - Loadlevel(args); + if (!LoadLevel(args)) { + // FIXME: Reduce code duplication with GameTick (should come from a Console class) + for (int k = 14; k >= 1; k--) { + consoletext[k] = consoletext[k - 1]; + } + consoletext[0] = std::string("Could not load the requested level '") + args + "', aborting."; + consoleselected = 0; + } whichlevel = -2; campaign = 0; } void ch_save(const char *args) { - std::string map_path = Folders::getUserDataPath() + "/Maps/" + args; + std::string map_path = Folders::getUserDataPath() + "/Maps"; + Folders::makeDirectory(map_path); + map_path = map_path + "/" + args; int mapvers = 12; FILE *tfile; tfile = fopen( map_path.c_str(), "wb" ); + if (tfile == NULL) { + perror((std::string("Couldn't open file ") + map_path + " for saving").c_str()); + return; + } fpackf(tfile, "Bi", mapvers); fpackf(tfile, "Bi", maptype); fpackf(tfile, "Bi", hostile); @@ -209,14 +222,15 @@ void ch_save(const char *args) fpackf(tfile, "Bi", environment); - fpackf(tfile, "Bi", objects.numobjects); + fpackf(tfile, "Bi", Object::objects.size()); - for (int k = 0; k < objects.numobjects; k++) - 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]); + for (unsigned int k = 0; k < Object::objects.size(); k++) { + fpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", Object::objects[k]->type, Object::objects[k]->yaw, Object::objects[k]->pitch, + Object::objects[k]->position.x, Object::objects[k]->position.y, Object::objects[k]->position.z, Object::objects[k]->scale); + } fpackf(tfile, "Bi", Hotspot::hotspots.size()); - for (int i = 0; i < Hotspot::hotspots.size(); i++) { + for (unsigned 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); @@ -261,7 +275,8 @@ void ch_save(const char *args) 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 if (Person::players[j]->creature == rabbittype) { + } 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; @@ -294,7 +309,7 @@ void ch_save(const char *args) fclose(tfile); } -void ch_cellar(const char *args) +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); } @@ -382,7 +397,7 @@ void ch_armornear(const char *args) set_armor(closest, args); } -void ch_protectionreset(const char *args) +void ch_protectionreset(const char *) { set_protection(0, "1 1 1"); set_armor(0, "1 1 1"); @@ -417,13 +432,13 @@ void ch_clothesnear(const char *args) set_clothes(closest, args); } -void ch_belt(const char *args) +void ch_belt(const char *) { Person::players[0]->skeleton.clothes = !Person::players[0]->skeleton.clothes; } -void ch_cellophane(const char *args) +void ch_cellophane(const char *) { cellophane = !cellophane; float mul = (cellophane ? 0 : 1); @@ -436,7 +451,7 @@ void ch_cellophane(const char *args) } } -void ch_funnybunny(const char *args) +void ch_funnybunny(const char *) { Person::players[0]->creature = rabbittype; Person::players[0]->skeletonLoad(true); @@ -446,7 +461,7 @@ void ch_funnybunny(const char *args) set_proportion(0, "1 1 1 1"); } -void ch_wolfie(const char *args) +void ch_wolfie(const char *) { Person::players[0]->creature = wolftype; Person::players[0]->skeletonLoad(); @@ -459,42 +474,42 @@ void ch_wolfieisgod(const char *args) ch_wolfie(args); } -void ch_wolf(const char *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 *args) +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 *args) +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 *args) +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 *args) +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 *args) +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); } -void ch_black(const char *args) +void ch_black(const char *) { 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) +void ch_sizemin(const char *) { for (unsigned i = 1; i < Person::players.size(); i++) if (Person::players[i]->scale < 0.8 * 0.2) @@ -503,7 +518,7 @@ void ch_sizemin(const char *args) void ch_tutorial(const char *args) { - tutoriallevel = atoi(args); + Tutorial::active = atoi(args); } void ch_hostile(const char *args) @@ -523,8 +538,8 @@ void ch_type(const char *args) void ch_path(const char *args) { - int n = sizeof(pathtypenames) / sizeof(pathtypenames[0]); - for (int i = 0; i < n; i++) + unsigned int n = sizeof(pathtypenames) / sizeof(pathtypenames[0]); + for (unsigned int i = 0; i < n; i++) if (stripfx(args, pathtypenames[i])) { editorpathtype = i; break; @@ -576,43 +591,43 @@ void ch_fixtype(const char *args) Dialog::dialogs[0].type = dlg; } -void ch_fixrotation(const char *args) +void ch_fixrotation(const char *) { int playerId = Dialog::currentScene().participantfocus; Dialog::currentDialog().participantyaw[playerId] = Person::players[playerId]->yaw; } -void ch_ddialogue(const char *args) +void ch_ddialogue(const char *) { if (!Dialog::dialogs.empty()) { Dialog::dialogs.pop_back(); } } -void ch_dhs(const char *args) +void ch_dhs(const char *) { if (!Hotspot::hotspots.empty()) { Hotspot::hotspots.pop_back(); } } -void ch_immobile(const char *args) +void ch_immobile(const char *) { Person::players[0]->immobile = 1; } -void ch_allimmobile(const char *args) +void ch_allimmobile(const char *) { for (unsigned i = 1; i < Person::players.size(); i++) Person::players[i]->immobile = 1; } -void ch_mobile(const char *args) +void ch_mobile(const char *) { Person::players[0]->immobile = 0; } -void ch_default(const char *args) +void ch_default(const char *) { Person::players[0]->armorhead = 1; Person::players[0]->armorhigh = 1; @@ -655,29 +670,29 @@ void ch_play(const char *args) sscanf(args, "%d", &dlg); Dialog::whichdialogue = dlg; - if (Dialog::whichdialogue >= Dialog::dialogs.size()) { + if (Dialog::whichdialogue >= int(Dialog::dialogs.size())) { return; } Dialog::currentDialog().play(); } -void ch_mapkilleveryone(const char *args) +void ch_mapkilleveryone(const char *) { maptype = mapkilleveryone; } -void ch_mapkillmost(const char *args) +void ch_mapkillmost(const char *) { maptype = mapkillmost; } -void ch_mapkillsomeone(const char *args) +void ch_mapkillsomeone(const char *) { maptype = mapkillsomeone; } -void ch_mapgosomewhere(const char *args) +void ch_mapgosomewhere(const char *) { maptype = mapgosomewhere; } @@ -715,7 +730,7 @@ void ch_skytint(const char *args) SetUpLighting(); terrain.DoShadows(); - objects.DoShadows(); + Object::DoShadows(); } void ch_skylight(const char *args) @@ -725,15 +740,15 @@ void ch_skylight(const char *args) SetUpLighting(); terrain.DoShadows(); - objects.DoShadows(); + Object::DoShadows(); } -void ch_skybox(const char *args) +void ch_skybox(const char*) { skyboxtexture = !skyboxtexture; SetUpLighting(); terrain.DoShadows(); - objects.DoShadows(); + Object::DoShadows(); }