From cc881a1c855c9cd84495c7e571a6a35f4a0385d9 Mon Sep 17 00:00:00 2001 From: obligaron Date: Sun, 29 Aug 2021 10:33:25 +0200 Subject: [PATCH] Add "seedinfo" debug command --- Source/debug.cpp | 20 ++++++++++++++++++++ Source/debug.h | 1 + Source/diablo.cpp | 25 ++++++------------------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Source/debug.cpp b/Source/debug.cpp index d4ea235f..f88d607f 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -40,6 +40,12 @@ int DebugPlayerId; int DebugQuestId; int DebugMonsterId; +// Used for debugging level generation +uint32_t glMid1Seed[NUMLEVELS]; +uint32_t glMid2Seed[NUMLEVELS]; +uint32_t glMid3Seed[NUMLEVELS]; +uint32_t glEndSeed[NUMLEVELS]; + void SetSpellLevelCheat(spell_id spl, int spllvl) { auto &myPlayer = Players[MyPlayerId]; @@ -450,6 +456,11 @@ std::string DebugCmdShowCursorCoords(const std::string_view parameter) return "Cursor will never forget that."; } +std::string DebugCmdLevelSeed(const std::string_view parameter) +{ + return fmt::format("Seedinfo for level {}\nseed: {}\nMid1: {}\nMid2: {}\nMid3: {}\nEnd: {}", currlevel, glSeedTbl[currlevel], glMid1Seed[currlevel], glMid2Seed[currlevel], glMid3Seed[currlevel], glEndSeed[currlevel]); +} + std::vector DebugCmdList = { { "help", "Prints help overview or help for a specific command.", "({command})", &DebugCmdHelp }, { "give gold", "Fills the inventory with gold.", "", &DebugCmdGiveGoldCheat }, @@ -474,6 +485,7 @@ std::vector DebugCmdList = { { "coords", "Toggles showing tile coords.", "", &DebugCmdShowCoords }, { "cursorcoords", "Toggles showing cursor coords.", "", &DebugCmdShowCursorCoords }, { "grid", "Toggles showing grid.", "", &DebugCmdShowGrid }, + { "seedinfo", "Show seed infos for current level.", "", &DebugCmdLevelSeed }, }; } // namespace @@ -556,6 +568,14 @@ void NextDebugMonster() NetSendCmdString(1 << MyPlayerId, dstr); } +void SetDebugLevelSeedInfos(uint32_t mid1Seed, uint32_t mid2Seed, uint32_t mid3Seed, uint32_t endSeed) +{ + glMid1Seed[currlevel] = mid1Seed; + glMid2Seed[currlevel] = mid2Seed; + glMid3Seed[currlevel] = mid3Seed; + glEndSeed[currlevel] = endSeed; +} + bool CheckDebugTextCommand(const std::string_view text) { auto debugCmdIterator = std::find_if(DebugCmdList.begin(), DebugCmdList.end(), [&](const DebugCmdItem &elem) { return text.find(elem.text) == 0 && (text.length() == elem.text.length() || text[elem.text.length()] == ' '); }); diff --git a/Source/debug.h b/Source/debug.h index a0d31fa9..9d31b6af 100644 --- a/Source/debug.h +++ b/Source/debug.h @@ -29,6 +29,7 @@ void PrintDebugPlayer(bool bNextPlayer); void PrintDebugQuest(); void GetDebugMonster(); void NextDebugMonster(); +void SetDebugLevelSeedInfos(uint32_t mid1Seed, uint32_t mid2Seed, uint32_t mid3Seed, uint32_t endSeed); bool CheckDebugTextCommand(const std::string_view text); } // namespace devilution diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 283657ee..6646c376 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -128,12 +128,6 @@ namespace { char gszVersionNumber[64] = "internal version unknown"; -// Used for debugging level generation -uint32_t glEndSeed[NUMLEVELS]; -uint32_t glMid1Seed[NUMLEVELS]; -uint32_t glMid2Seed[NUMLEVELS]; -uint32_t glMid3Seed[NUMLEVELS]; - bool gbGameLoopStartup; bool forceSpawn; bool forceDiablo; @@ -588,15 +582,6 @@ void PressChar(char vkey) case 'm': GetDebugMonster(); return; - case 'R': - case 'r': - sprintf(tempstr, "seed = %i", glSeedTbl[currlevel]); - NetSendCmdString(1 << MyPlayerId, tempstr); - sprintf(tempstr, "Mid1 = %i : Mid2 = %i : Mid3 = %i", glMid1Seed[currlevel], glMid2Seed[currlevel], glMid3Seed[currlevel]); - NetSendCmdString(1 << MyPlayerId, tempstr); - sprintf(tempstr, "End = %i", glEndSeed[currlevel]); - NetSendCmdString(1 << MyPlayerId, tempstr); - return; case 'T': case 't': if (debug_mode_key_inverted_v) { @@ -1893,19 +1878,21 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir) if (leveltype != DTYPE_TOWN) { if (firstflag || lvldir == ENTRY_LOAD || !myPlayer._pLvlVisited[currlevel] || gbIsMultiplayer) { HoldThemeRooms(); - glMid1Seed[currlevel] = GetLCGEngineState(); + uint32_t mid1Seed = GetLCGEngineState(); InitMonsters(); - glMid2Seed[currlevel] = GetLCGEngineState(); + uint32_t mid2Seed = GetLCGEngineState(); IncProgress(); InitObjects(); InitItems(); if (currlevel < 17) CreateThemeRooms(); IncProgress(); - glMid3Seed[currlevel] = GetLCGEngineState(); + uint32_t mid3Seed = GetLCGEngineState(); InitMissiles(); InitDead(); - glEndSeed[currlevel] = GetLCGEngineState(); +#if _DEBUG + SetDebugLevelSeedInfos(mid1Seed, mid2Seed, mid3Seed, GetLCGEngineState()); +#endif if (gbIsMultiplayer) DeltaLoadLevel();