diff --git a/soh/soh/Enhancements/randomizer/3drando/menu.cpp b/soh/soh/Enhancements/randomizer/3drando/menu.cpp index de6c20be0..c2fd5061d 100644 --- a/soh/soh/Enhancements/randomizer/3drando/menu.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/menu.cpp @@ -518,7 +518,7 @@ std::string GenerateRandomizer(std::unordered_map srand(time(NULL)); // if a blank seed was entered, make a random one if (seedString.empty()) { - Settings::seed = rand() & 0xFFFFFFFF; + seedString = std::to_string(rand() % 0xFFFFFFFF); } else if (seedString.rfind("seed_testing_count", 0) == 0 && seedString.length() > 18) { int count; try { @@ -530,17 +530,12 @@ std::string GenerateRandomizer(std::unordered_map } Playthrough::Playthrough_Repeat(cvarSettings, excludedLocations, count); return ""; - } else { - try { - uint32_t seedHash = boost::hash_32{}(seedString); - int seed = seedHash & 0xFFFFFFFF; - Settings::seed = seed; - Settings::seedString = seedString; - } catch (...) { - return ""; - } } + Settings::seedString = seedString; + uint32_t seedHash = boost::hash_32{}(Settings::seedString); + Settings::seed = seedHash & 0xFFFFFFFF; + int ret = Playthrough::Playthrough_Init(Settings::seed, cvarSettings, excludedLocations); if (ret < 0) { if (ret == -1) { // Failed to generate after 5 tries diff --git a/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp b/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp index 67ccb5276..dbcb93e42 100644 --- a/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp @@ -87,8 +87,9 @@ int Playthrough_Repeat(std::unordered_map cvarSet printf("\x1b[0;0HGENERATING %d SEEDS", count); uint32_t repeatedSeed = 0; for (int i = 0; i < count; i++) { - repeatedSeed = rand() % 0xFFFFFFFF; - Settings::seed = repeatedSeed; + Settings::seedString = std::to_string(rand() % 0xFFFFFFFF); + repeatedSeed = boost::hash_32{}(Settings::seedString); + Settings::seed = repeatedSeed % 0xFFFFFFFF; CitraPrint("testing seed: " + std::to_string(Settings::seed)); ClearProgress(); Playthrough_Init(Settings::seed, cvarSettings, excludedLocations); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 6fd58e908..203dd8cfd 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -3191,8 +3191,8 @@ void DrawRandoEditor(bool& open) { } UIWidgets::Spacer(0); - if (ImGui::Button("Generate Randomizer")) { - GenerateRandomizer(CVarGetInteger("gRandoManualSeedEntry", 0) ? seedString : std::to_string(rand() & 0xFFFFFFFF).c_str()); + if (ImGui::Button("Generate Randomizer")) { + GenerateRandomizer(CVarGetInteger("gRandoManualSeedEntry", 0) ? seedString : ""); } UIWidgets::Spacer(0); diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 2757e1b03..b0a207dfd 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -782,6 +782,8 @@ extern "C" void InitOTR() { } else { CVarClear("gLetItSnow"); } + + srand(now); #ifdef ENABLE_CROWD_CONTROL CrowdControl::Instance = new CrowdControl(); CrowdControl::Instance->Init();