X-Git-Url: https://git.jsancho.org/?p=lugaru.git;a=blobdiff_plain;f=Source%2FDevtools%2FConsoleCmds.cpp;h=f3ac22c0fbeaf594f225d5191e5c43d38fdfc1a1;hp=baa1463893dae10c5dbab20b068de2002900c766;hb=7ed95b0f483ca64a550e391f8151d7ceb30acc18;hpb=7d2f9d40d94d14a61ecdaaa2c41f964029815bc2 diff --git a/Source/Devtools/ConsoleCmds.cpp b/Source/Devtools/ConsoleCmds.cpp index baa1463..f3ac22c 100644 --- a/Source/Devtools/ConsoleCmds.cpp +++ b/Source/Devtools/ConsoleCmds.cpp @@ -24,6 +24,7 @@ along with Lugaru. If not, see . #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, @@ -49,7 +50,6 @@ extern int environment; extern float fadestart; extern float slomospeed; extern float slomofreq; -extern int tutoriallevel; extern int hostile; extern int maptype; extern int slomo; @@ -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); @@ -211,9 +224,10 @@ void ch_save(const char *args) fpackf(tfile, "Bi", Object::objects.size()); - for (int k = 0; k < Object::objects.size(); 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 (unsigned i = 0; i < Hotspot::hotspots.size(); i++) { @@ -295,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); } @@ -383,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"); @@ -418,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); @@ -437,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); @@ -447,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(); @@ -460,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) @@ -504,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) @@ -524,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; @@ -577,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; @@ -663,22 +677,22 @@ void ch_play(const char *args) 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; } @@ -729,7 +743,7 @@ void ch_skylight(const char *args) Object::DoShadows(); } -void ch_skybox(const char *args) +void ch_skybox(const char*) { skyboxtexture = !skyboxtexture;