diff --git a/Source/debug.cpp b/Source/debug.cpp index 8063d2de2..f0c98dc6c 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -118,7 +118,7 @@ std::string DebugCmdWarpToLevel(const std::string_view parameter) auto &myPlayer = Players[MyPlayerId]; auto level = atoi(parameter.data()); if (level < 0 || level > (gbIsHellfire ? 24 : 16)) - return fmt::format("Level {} is not known. Do you want to write an extension mod?", level); + return fmt::format("Level {} is not known. Do you want to write a mod?", level); if (!setlevel && myPlayer.plrlevel == level) return fmt::format("I did nothing but fulfilled your wish. You are already at level {}.", level); @@ -127,6 +127,28 @@ std::string DebugCmdWarpToLevel(const std::string_view parameter) return fmt::format("Welcome to level {}.", level); } +std::string DebugCmdLoadMap(const std::string_view parameter) +{ + auto &myPlayer = Players[MyPlayerId]; + auto level = atoi(parameter.data()); + if (level < 1) + return fmt::format("Map id must be 1 or higher", level); + if (setlevel && myPlayer.plrlevel == level) + return fmt::format("I did nothing but fulfilled your wish. You are already at level {}.", level); + + for (auto &quest : Quests) { + if (level != quest._qslvl) + continue; + + setlevel = false; + setlvltype = quest._qlvltype; + StartNewLvl(MyPlayerId, WM_DIABSETLVL, level); + return fmt::format("Welcome to {}.", QuestLevelNames[level]); + } + + return fmt::format("Level {} is not known. Do you want to write a mod?", level); +} + std::string DebugCmdResetLevel(const std::string_view parameter) { auto &myPlayer = Players[MyPlayerId]; @@ -175,6 +197,7 @@ std::vector DebugCmdList = { { "give spells 10", "Set spell level to 10 for all spells.", "", &DebugCmdMaxSpellLevel }, { "take gold", "Removes all gold from inventory.", "", &DebugCmdTakeGoldCheat }, { "changelevel", "Moves to specifided {level} (use 0 for town).", "{level}", &DebugCmdWarpToLevel }, + { "map", "Load a quest level {level}.", "{level}", &DebugCmdLoadMap }, { "restart", "Resets specified {level}.", "{level}", &DebugCmdResetLevel }, { "god", "Togggles godmode.", "", &DebugCmdGodMode }, }; diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 629420871..0dffa99c5 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -97,7 +97,6 @@ Keymapper keymapper; std::array quickSpellActionIndexes; bool gbForceWindowed = false; -bool leveldebug = false; #ifdef _DEBUG bool monstdebug = false; _monster_id DebugMonsters[10]; @@ -884,11 +883,9 @@ void RunGameLoop(interface_mode uMsg) printInConsole(" %-20s %-30s\n", "-v", "Highlight visibility"); printInConsole(" %-20s %-30s\n", "-i", "Ignore network timeout"); printInConsole(" %-20s %-30s\n", "-j <##>", "Mausoleum warps to given level"); - printInConsole(" %-20s %-30s\n", "-l <##> <##>", "Start in level as type"); printInConsole(" %-20s %-30s\n", "-m <##>", "Add debug monster, up to 10 allowed"); printInConsole(" %-20s %-30s\n", "-q <#>", "Force a certain quest"); printInConsole(" %-20s %-30s\n", "-r <##########>", "Set map seed"); - printInConsole(" %-20s %-30s\n", "-t <##>", "Set current quest level"); #endif printInConsole("%s", _("\nReport bugs at https://github.com/diasurgical/devilutionX/\n")); diablo_quit(0); @@ -947,12 +944,6 @@ void DiabloParseFlags(int argc, char **argv) debug_mode_key_i = true; } else if (strcasecmp("-j", argv[i]) == 0) { debug_mode_key_j = SDL_atoi(argv[++i]); - } else if (strcasecmp("-l", argv[i]) == 0) { - setlevel = false; - leveldebug = true; - leveltype = (dungeon_type)SDL_atoi(argv[++i]); - currlevel = SDL_atoi(argv[++i]); - Players[0].plrlevel = currlevel; } else if (strcasecmp("-m", argv[i]) == 0) { monstdebug = true; DebugMonsters[debugmonsttypes++] = (_monster_id)SDL_atoi(argv[++i]); @@ -960,10 +951,6 @@ void DiabloParseFlags(int argc, char **argv) questdebug = SDL_atoi(argv[++i]); } else if (strcasecmp("-r", argv[i]) == 0) { setseed = SDL_atoi(argv[++i]); - } else if (strcasecmp("-t", argv[i]) == 0) { - leveldebug = true; - setlevel = true; - setlvlnum = (_setlevels)SDL_atoi(argv[++i]); } else if (strcasecmp("-v", argv[i]) == 0) { visiondebug = true; } else if (strcasecmp("-w", argv[i]) == 0) { diff --git a/Source/diablo.h b/Source/diablo.h index f5d11ef17..0d4ad3ab9 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -101,7 +101,6 @@ void diablo_color_cyc_logic(); extern Keymapper keymapper; extern bool gbForceWindowed; -extern bool leveldebug; #ifdef _DEBUG extern bool monstdebug; extern _monster_id DebugMonsters[10]; diff --git a/Source/gendung.cpp b/Source/gendung.cpp index f9eecb877..3b9957a4a 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -587,11 +587,6 @@ bool SkipThemeRoom(int x, int y) void InitLevels() { -#ifdef _DEBUG - if (leveldebug) - return; -#endif - currlevel = 0; leveltype = DTYPE_TOWN; setlevel = false; diff --git a/Source/multi.cpp b/Source/multi.cpp index fffecad6a..67c7af2eb 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -344,11 +344,9 @@ dungeon_type InitLevelType(int l) void SetupLocalPositions() { - if (!leveldebug || gbIsMultiplayer) { - currlevel = 0; - leveltype = DTYPE_TOWN; - setlevel = false; - } + currlevel = 0; + leveltype = DTYPE_TOWN; + setlevel = false; int x = 75; int y = 68;