From 3e066964415836e0c5f228f95250801d6971c839 Mon Sep 17 00:00:00 2001 From: aMannus Date: Mon, 30 Jun 2025 23:30:32 +0200 Subject: [PATCH] Fix spoiler loading, setting more defaults, archi console crash fix + styling --- soh/soh/Enhancements/randomizer/context.cpp | 6 ++++-- soh/soh/Enhancements/randomizer/dungeon.cpp | 7 +++++++ soh/soh/Enhancements/randomizer/dungeon.h | 1 + soh/soh/Enhancements/randomizer/trial.cpp | 6 ++++++ soh/soh/Enhancements/randomizer/trial.h | 1 + .../Network/Archipelago/ArchipelagoConsoleWindow.cpp | 12 +++++++++--- .../Archipelago/ArchipelagoSettingsWindow.cpp | 1 + .../gamestates/ovl_file_choose/z_file_choose.c | 1 + 8 files changed, 30 insertions(+), 5 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index c76bb02dc..5ef4ba036 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -349,7 +349,7 @@ void Context::SetSpoilerLoaded(const bool spoilerLoaded) { void Context::AddReceivedArchipelagoItem(const RandomizerGet item) { mAPreceiveQueue.emplace(item); - std::string logMessage = "[LOG] Item Pushed: " + item; + std::string logMessage = "[LOG] Item Pushed: " + std::to_string(item); ArchipelagoConsole_SendMessage(logMessage.c_str(), true); } @@ -428,8 +428,10 @@ void Context::ParseArchipelago() { ArchipelagoClient& ap_client = ArchipelagoClient::GetInstance(); ParseArchipelagoItemsLocations(ap_client.GetScoutedItems()); ParseArchipelagoOptions(ap_client.GetSlotData()); + mEntranceShuffler->UnshuffleAllEntrances(); + mDungeons->ResetAllDungeons(); + mTrials->RemoveAllTrials(); - // lets see if counting AP_loaded as spoiler loaded does the trick mSpoilerLoaded = true; mSeedGenerated = false; } diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 1eb88ed73..928d5699a 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -259,4 +259,11 @@ void Dungeons::ParseJson(nlohmann::json spoilerFileJson) { } } } + +void Dungeons::ResetAllDungeons() { + for (auto& dungeon : dungeonList) { + dungeon.ClearMQ(); + } +} + } // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/dungeon.h b/soh/soh/Enhancements/randomizer/dungeon.h index ba81d289d..830b05a02 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.h +++ b/soh/soh/Enhancements/randomizer/dungeon.h @@ -90,6 +90,7 @@ class Dungeons { std::array GetDungeonList(); size_t GetDungeonListSize() const; void ParseJson(nlohmann::json spoilerFileJson); + void ResetAllDungeons(); private: std::array dungeonList; diff --git a/soh/soh/Enhancements/randomizer/trial.cpp b/soh/soh/Enhancements/randomizer/trial.cpp index 81ef97a97..8a2873330 100644 --- a/soh/soh/Enhancements/randomizer/trial.cpp +++ b/soh/soh/Enhancements/randomizer/trial.cpp @@ -85,6 +85,12 @@ void Trials::ParseJson(nlohmann::json spoilerFileJson) { } } +void Trials::RemoveAllTrials() { + for (auto& trial : mTrials) { + trial.SetAsSkipped(); + } +} + std::unordered_map Trials::GetAllTrialHintHeys() const { std::unordered_map output = {}; for (auto trial : mTrials) { diff --git a/soh/soh/Enhancements/randomizer/trial.h b/soh/soh/Enhancements/randomizer/trial.h index 1ca39d096..85cc6dd17 100644 --- a/soh/soh/Enhancements/randomizer/trial.h +++ b/soh/soh/Enhancements/randomizer/trial.h @@ -37,6 +37,7 @@ class Trials { std::vector GetTrialList(); size_t GetTrialListSize() const; void ParseJson(nlohmann::json spoilerFileJson); + void RemoveAllTrials(); std::unordered_map GetAllTrialHintHeys() const; private: diff --git a/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp b/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp index 325d58f13..c951ac2e4 100644 --- a/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp +++ b/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp @@ -10,7 +10,7 @@ bool autoScroll = true; using namespace UIWidgets; void ArchipelagoConsole_SendMessage(const char* fmt, bool debugMessage, ...) { - if (debugMessage && CVarGetInteger(CVAR_REMOTE_ARCHIPELAGO("DebugEnabled"), 0) == 0) { + if (debugMessage && !CVarGetInteger(CVAR_REMOTE_ARCHIPELAGO("DebugEnabled"), 0)) { return; } char buf[1024]; @@ -73,14 +73,20 @@ void ArchipelagoConsoleWindow::DrawElement() { ImGui::SetKeyboardFocusHere(); keepFocus = false; } + + PushStyleInput(THEME_COLOR); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 8.0f)); if (ImGui::InputText("##AP_MessageField", textEntryBuf, 1023, ImGuiInputTextFlags_EnterReturnsTrue)) { ArchipelagoClient::GetInstance().SendMessageToConsole(std::string(textEntryBuf)); textEntryBuf[0] = '\0'; keepFocus = true; } - // keepFocus = ImGui::IsItemActive(); + ImGui::PopStyleVar(); + PopStyleInput(); + ImGui::SameLine(); - if (ImGui::Button("Send")) { + + if (UIWidgets::Button("Send", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) { ArchipelagoClient::GetInstance().SendMessageToConsole(std::string(textEntryBuf)); textEntryBuf[0] = '\0'; keepFocus = true; diff --git a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp index ffcc02261..30a68b788 100644 --- a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp +++ b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp @@ -32,6 +32,7 @@ void ArchipelagoSettingsWindow::DrawElement() { UIWidgets::CVarInputString("##ArchipelagoPassword", CVAR_REMOTE_ARCHIPELAGO("Password"), UIWidgets::InputOptions() .Color(THEME_COLOR) + .IsSecret(true) .Size(ImVec2(ImGui::GetFontSize() * 15, 0)) .LabelPosition(UIWidgets::LabelPositions::None)); ImGui::PopStyleColor(); diff --git a/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c index 1fe86b90c..92a6356bb 100644 --- a/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c +++ b/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c @@ -1053,6 +1053,7 @@ void FileChoose_UpdateRandomizer() { } if (!SpoilerFileExists(CVarGetString(CVAR_GENERAL("SpoilerLog"), "")) && + !fileSelectArchipelagoLoaded && !CVarGetInteger(CVAR_RANDOMIZER_SETTING("DontGenerateSpoiler"), 0)) { CVarSetString(CVAR_GENERAL("SpoilerLog"), ""); Randomizer_SetSpoilerLoaded(false);