diff --git a/mm/2s2h/BenGui/UIWidgets.cpp b/mm/2s2h/BenGui/UIWidgets.cpp index 03063aa14..dbd6804b4 100644 --- a/mm/2s2h/BenGui/UIWidgets.cpp +++ b/mm/2s2h/BenGui/UIWidgets.cpp @@ -7,6 +7,7 @@ #include #include #include "2s2h/ShipUtils.h" +#include namespace UIWidgets { // Automatically adds newlines to break up text longer than a specified number of characters @@ -534,7 +535,7 @@ void DrawFlagArray32(const std::string& name, uint32_t& flags) { ImGui::PushID(flagIndex); uint32_t bitMask = 1 << flagIndex; bool flag = (flags & bitMask) != 0; - std::string label = std::to_string(flagIndex); + std::string label = fmt::format("0x{:02X} ({})", flagIndex, flagIndex); if (UIWidgets::Checkbox(label.c_str(), &flag, { .tooltip = label.c_str(), .labelPosition = LabelPosition::None })) { if (flag) { @@ -557,7 +558,7 @@ void DrawFlagArray16(const std::string& name, uint16_t& flags) { ImGui::PushID(flagIndex); uint16_t bitMask = 1 << flagIndex; bool flag = (flags & bitMask) != 0; - std::string label = std::to_string(flagIndex); + std::string label = fmt::format("0x{:02X} ({})", flagIndex, flagIndex); if (UIWidgets::Checkbox(label.c_str(), &flag, { .tooltip = label.c_str(), .labelPosition = LabelPosition::None })) { if (flag) { @@ -580,7 +581,30 @@ void DrawFlagArray8(const std::string& name, uint8_t& flags) { ImGui::PushID(flagIndex); uint8_t bitMask = 1 << flagIndex; bool flag = (flags & bitMask) != 0; - std::string label = std::to_string(flagIndex); + std::string label = fmt::format("0x{:02X} ({})", flagIndex, flagIndex); + if (UIWidgets::Checkbox(label.c_str(), &flag, + { .tooltip = label.c_str(), .labelPosition = LabelPosition::None })) { + if (flag) { + flags |= bitMask; + } else { + flags &= ~bitMask; + } + } + ImGui::PopID(); + } + ImGui::PopID(); +} + +void DrawFlagArray8Mask(const std::string& name, uint8_t& flags) { + ImGui::PushID(name.c_str()); + for (int8_t flagIndex = 0; flagIndex < 8; flagIndex++) { + if ((flagIndex % 8) != 0) { + ImGui::SameLine(); + } + ImGui::PushID(flagIndex); + uint8_t bitMask = 1 << flagIndex; + bool flag = (flags & bitMask) != 0; + std::string label = fmt::format("0x{:02X} ({})", bitMask, flagIndex); if (UIWidgets::Checkbox(label.c_str(), &flag, { .tooltip = label.c_str(), .labelPosition = LabelPosition::None })) { if (flag) { diff --git a/mm/2s2h/BenGui/UIWidgets.hpp b/mm/2s2h/BenGui/UIWidgets.hpp index 875bbecef..42687c06e 100644 --- a/mm/2s2h/BenGui/UIWidgets.hpp +++ b/mm/2s2h/BenGui/UIWidgets.hpp @@ -417,6 +417,7 @@ namespace UIWidgets { void DrawFlagArray32(const std::string& name, uint32_t& flags); void DrawFlagArray16(const std::string& name, uint16_t& flags); void DrawFlagArray8(const std::string& name, uint8_t& flags); + void DrawFlagArray8Mask(const std::string& name, uint8_t& flags); } #endif /* UIWidgets_hpp */ diff --git a/mm/2s2h/DeveloperTools/SaveEditor.cpp b/mm/2s2h/DeveloperTools/SaveEditor.cpp index acd9aa9a7..dcef87ac5 100644 --- a/mm/2s2h/DeveloperTools/SaveEditor.cpp +++ b/mm/2s2h/DeveloperTools/SaveEditor.cpp @@ -1722,7 +1722,7 @@ void DrawFlagsTab() { ImGui::PushID(i); ImGui::Text("%02d", i); ImGui::SameLine(); - UIWidgets::DrawFlagArray8("##", gSaveContext.save.saveInfo.weekEventReg[i]); + UIWidgets::DrawFlagArray8Mask("##", gSaveContext.save.saveInfo.weekEventReg[i]); ImGui::PopID(); } break;