Skip to content

Commit

Permalink
Add dev tool windows
Browse files Browse the repository at this point in the history
  • Loading branch information
aMannus committed Feb 1, 2025
1 parent 46c15fb commit 7e13a16
Show file tree
Hide file tree
Showing 10 changed files with 166 additions and 101 deletions.
2 changes: 1 addition & 1 deletion soh/soh/Enhancements/presets.h
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ const std::vector<const char*> cheatCvars = {
CVAR_CONSOLE_WINDOW_OPEN,
CVAR_WINDOW("ActorViewer"),
CVAR_WINDOW("CollisionViewer"),
CVAR_WINDOW("DLViewer"),
CVAR_WINDOW("DisplayListViewer"),
CVAR_WINDOW("SaveEditor"),
CVAR_SETTING("WalkModifier.Enabled"),
CVAR_SETTING("WalkModifier.SpeedToggle"),
Expand Down
38 changes: 19 additions & 19 deletions soh/soh/SohGui/Menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,11 @@ Menu::Menu(const std::string& cVar, const std::string& name, uint8_t searchSideb
}

void Menu::InitElement() {
popped = CVarGetInteger("gSettings.Menu.Popout", 0);
poppedSize.x = CVarGetInteger("gSettings.Menu.PoppedWidth", 1280);
poppedSize.y = CVarGetInteger("gSettings.Menu.PoppedHeight", 800);
poppedPos.x = CVarGetInteger("gSettings.Menu.PoppedPos.x", 0);
poppedPos.y = CVarGetInteger("gSettings.Menu.PoppedPos.y", 0);
popped = CVarGetInteger(CVAR_SETTING("Menu.Popout"), 0);
poppedSize.x = CVarGetInteger(CVAR_SETTING("Menu.PoppedWidth"), 1280);
poppedSize.y = CVarGetInteger(CVAR_SETTING("Menu.PoppedHeight"), 800);
poppedPos.x = CVarGetInteger(CVAR_SETTING("Menu.PoppedPos.x"), 0);
poppedPos.y = CVarGetInteger(CVAR_SETTING("Menu.PoppedPos.y"), 0);

UpdateWindowBackendObjects();
}
Expand Down Expand Up @@ -172,7 +172,7 @@ bool ModernMenuHeaderEntry(std::string label) {
}

uint32_t Menu::DrawSearchResults(std::string& menuSearchText) {
auto menuThemeIndex = static_cast<UIWidgets2::Colors>(CVarGetInteger("gSettings.Menu.Theme", defaultThemeIndex));
auto menuThemeIndex = static_cast<UIWidgets2::Colors>(CVarGetInteger(CVAR_SETTING("Menu.Theme"), defaultThemeIndex));
ImGui::BeginChild("Search Results");
int searchCount = 0;
for (auto& menuLabel : menuOrder) {
Expand Down Expand Up @@ -432,7 +432,7 @@ void Menu::MenuDrawItem(WidgetInfo& widget, uint32_t width, UIWidgets2::Colors m
menuSearch.Clear();
}
ImGui::SameLine();
if (CVarGetInteger("gSettings.Menu.SearchAutofocus", 0) &&
if (CVarGetInteger(CVAR_SETTING("Menu.SearchAutofocus"), 0) &&
ImGui::IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows) && !ImGui::IsAnyItemActive() &&
!ImGui::IsMouseClicked(0)) {
ImGui::SetKeyboardFocusHere(0);
Expand Down Expand Up @@ -477,12 +477,12 @@ void Menu::DrawElement() {
for (auto& [reason, info] : disabledMap) {
info.active = info.evaluation(info);
}
auto menuThemeIndex = static_cast<UIWidgets2::Colors>(CVarGetInteger("gSettings.Menu.Theme", defaultThemeIndex));
auto menuThemeIndex = static_cast<UIWidgets2::Colors>(CVarGetInteger(CVAR_SETTING("Menu.Theme"), defaultThemeIndex));

windowHeight = ImGui::GetMainViewport()->WorkSize.y;
windowWidth = ImGui::GetMainViewport()->WorkSize.x;
auto windowFlags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings;
bool popout = CVarGetInteger("gSettings.Menu.Popout", 0) && allowPopout;
bool popout = CVarGetInteger(CVAR_SETTING("Menu.Popout"), 0) && allowPopout;
if (popout) {
windowFlags = ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoDocking;
}
Expand All @@ -494,8 +494,8 @@ void Menu::DrawElement() {
ImGuiCond_Always);
ImGui::SetNextWindowPos(poppedPos, ImGuiCond_Always);
} else if (popped) {
CVarSetFloat("gSettings.Menu.PoppedWidth", poppedSize.x);
CVarSetFloat("gSettings.Menu.PoppedHeight", poppedSize.y);
CVarSetFloat(CVAR_SETTING("Menu.PoppedWidth"), poppedSize.x);
CVarSetFloat(CVAR_SETTING("Menu.PoppedHeight"), poppedSize.y);
CVarSave();
}
}
Expand All @@ -517,11 +517,11 @@ void Menu::DrawElement() {
if (!popout) {
ImGui::PopStyleVar();
}
CVarSetInteger("gSettings.Menu.Popout", popped);
CVarSetFloat("gSettings.Menu.PoppedWidth", poppedSize.x);
CVarSetFloat("gSettings.Menu.PoppedHeight", poppedSize.y);
CVarSetFloat("gSettings.Menu.PoppedPos.x", poppedSize.x);
CVarSetFloat("gSettings.Menu.PoppedPos.y", poppedSize.y);
CVarSetInteger(CVAR_SETTING("Menu.Popout"), popped);
CVarSetFloat(CVAR_SETTING("Menu.PoppedWidth"), poppedSize.x);
CVarSetFloat(CVAR_SETTING("Menu.PoppedHeight"), poppedSize.y);
CVarSetFloat(CVAR_SETTING("Menu.PoppedPos.x"), poppedSize.x);
CVarSetFloat(CVAR_SETTING("Menu.PoppedPos.y"), poppedSize.y);
CVarSave();
ImGui::End();
return;
Expand All @@ -534,13 +534,13 @@ void Menu::DrawElement() {
windowWidth = window->WorkRect.GetWidth();

ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 8.0f));
const char* headerCvar = "gSettings.Menu.ActiveHeader";
const char* headerCvar = CVAR_SETTING("Menu.ActiveHeader");
std::string headerIndex = CVarGetString(headerCvar, "Settings");
ImVec2 pos = window->DC.CursorPos;
float centerX = pos.x + windowWidth / 2 - (style.ItemSpacing.x * (menuEntries.size() + 1));
std::vector<ImVec2> headerSizes;
float headerWidth = style.ItemSpacing.x + 20;
bool headerSearch = !CVarGetInteger("gSettings.Menu.SidebarSearch", 0);
bool headerSearch = !CVarGetInteger(CVAR_SETTING("Menu.SidebarSearch"), 0);
if (headerSearch) {
headerWidth += 200.0f + style.ItemSpacing.x + style.FramePadding.x;
}
Expand Down Expand Up @@ -599,7 +599,7 @@ void Menu::DrawElement() {
if (scrollbar) {
headerSelSize.y += style.ScrollbarSize;
}
bool autoFocus = CVarGetInteger("gSettings.Menu.SearchAutofocus", 0);
bool autoFocus = CVarGetInteger(CVAR_SETTING("Menu.SearchAutofocus"), 0);
ImGui::BeginChild("Header Selection", headerSelSize,
ImGuiChildFlags_AutoResizeX | ImGuiChildFlags_AutoResizeY | ImGuiChildFlags_AlwaysAutoResize,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_HorizontalScrollbar);
Expand Down
12 changes: 6 additions & 6 deletions soh/soh/SohGui/SohGui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,9 @@ namespace SohGui {
SPDLOG_ERROR("Could not find console window");
}

mGfxDebuggerWindow = gui->GetGuiWindow("GfxDebuggerWindow");
mGfxDebuggerWindow = gui->GetGuiWindow("Gfx Debugger");
if (mGfxDebuggerWindow == nullptr) {
SPDLOG_ERROR("Could not find input GfxDebuggerWindow");
SPDLOG_ERROR("Could not find Gfx Debugger window");
}

mInputEditorWindow = gui->GetGuiWindow("Controller Configuration");
Expand All @@ -191,7 +191,7 @@ namespace SohGui {
gui->AddGuiWindow(mSaveEditorWindow);
mHookDebuggerWindow = std::make_shared<HookDebuggerWindow>(CVAR_WINDOW("HookDebugger"), "Hook Debugger", ImVec2(1250, 850));
gui->AddGuiWindow(mHookDebuggerWindow);
mDLViewerWindow = std::make_shared<DLViewerWindow>(CVAR_WINDOW("DLViewer"), "Display List Viewer", ImVec2(520, 600));
mDLViewerWindow = std::make_shared<DLViewerWindow>(CVAR_WINDOW("DisplayListViewer"), "Display List Viewer", ImVec2(520, 600));
gui->AddGuiWindow(mDLViewerWindow);
mValueViewerWindow = std::make_shared<ValueViewerWindow>(CVAR_WINDOW("ValueViewer"), "Value Viewer", ImVec2(520, 600));
gui->AddGuiWindow(mValueViewerWindow);
Expand All @@ -213,9 +213,9 @@ namespace SohGui {
gui->AddGuiWindow(mItemTrackerSettingsWindow);
mRandomizerSettingsWindow = std::make_shared<RandomizerSettingsWindow>(CVAR_WINDOW("RandomizerSettings"), "Randomizer Settings", ImVec2(920, 600));
gui->AddGuiWindow(mRandomizerSettingsWindow);
mTimeSplitWindow = std::make_shared<TimeSplitWindow>(CVAR_WINDOW("TimeSplitEnabled"), "Time Splits", ImVec2(450, 660));
mTimeSplitWindow = std::make_shared<TimeSplitWindow>(CVAR_WINDOW("TimeSplits"), "Time Splits", ImVec2(450, 660));
gui->AddGuiWindow(mTimeSplitWindow);
mPlandomizerWindow = std::make_shared<PlandomizerWindow>(CVAR_WINDOW("PlandomizerWindow"), "Plandomizer Editor", ImVec2(850, 760));
mPlandomizerWindow = std::make_shared<PlandomizerWindow>(CVAR_WINDOW("PlandomizerEditor"), "Plandomizer Editor", ImVec2(850, 760));
gui->AddGuiWindow(mPlandomizerWindow);
mAdvancedResolutionSettingsWindow = std::make_shared<AdvancedResolutionSettings::AdvancedResolutionSettingsWindow>(CVAR_WINDOW("AdvancedResolutionEditor"), "Advanced Resolution Settings", ImVec2(497, 599));
gui->AddGuiWindow(mAdvancedResolutionSettingsWindow);
Expand All @@ -225,7 +225,7 @@ namespace SohGui {
mNotificationWindow = std::make_shared<Notification::Window>(CVAR_WINDOW("Notifications"), "Notifications Window");
gui->AddGuiWindow(mNotificationWindow);
mNotificationWindow->Show();
mTimeDisplayWindow = std::make_shared<TimeDisplayWindow>(CVAR_WINDOW("TimeDisplayEnabled"), "Additional Timers");
mTimeDisplayWindow = std::make_shared<TimeDisplayWindow>(CVAR_WINDOW("AdditionalTimers"), "Additional Timers");
gui->AddGuiWindow(mTimeDisplayWindow);
mAboutWindow = std::make_shared<AboutWindow>(CVAR_WINDOW("AboutWindow"), "About");
gui->AddGuiWindow(mAboutWindow);
Expand Down
2 changes: 1 addition & 1 deletion soh/soh/SohGui/SohMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ void SohMenu::InitElement() {
AddMenuNetwork();
AddMenuDevTools();

if (CVarGetInteger("gSettings.Menu.SidebarSearch", 0)) {
if (CVarGetInteger(CVAR_SETTING("Menu.SidebarSearch"), 0)) {
InsertSidebarSearch();
}

Expand Down
136 changes: 82 additions & 54 deletions soh/soh/SohGui/SohMenuDevTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,68 +7,96 @@ using namespace UIWidgets2;

void SohMenu::AddMenuDevTools() {
// Add Dev Tools Menu
AddMenuEntry("Dev Tools", "gSettings.Menu.DevToolsSidebarSection");
AddMenuEntry("Dev Tools", CVAR_SETTING("Menu.DevToolsSidebarSection"));

// Menu 1
// General
AddSidebarEntry("Dev Tools", "General", 3);
WidgetPath path = { "Dev Tools", "General", SECTION_COLUMN_1 };

AddWidget(path, "Popout Menu", WIDGET_CVAR_CHECKBOX)
.CVar("gSettings.Menu.Popout")
.Options(CheckboxOptions().Tooltip("Changes the menu display from overlay to windowed."));

// dev tools windows
// path = { "Developer Tools", "Collision Viewer", SECTION_COLUMN_1 };
// AddSidebarEntry("Developer Tools", "Collision Viewer", 1);
// AddWidget(path, "Popout Collision Viewer", WIDGET_WINDOW_BUTTON)
// .CVar("gWindows.CollisionViewer")
// .Options(ButtonOptions().Tooltip("Makes collision visible on screen").Size(Sizes::Inline))
// .WindowName("Collision Viewer");

// path = { "Developer Tools", "Stats", SECTION_COLUMN_1 };
// AddSidebarEntry("Developer Tools", "Stats", 1);
// AddWidget(path, "Popout Stats", WIDGET_WINDOW_BUTTON)
// .CVar("gOpenWindows.Stats")
// .Options(ButtonOptions().Tooltip(
// "Shows the stats window, with your FPS and frametimes, and the OS you're playing on"))
// .WindowName("Stats");

// path = { "Developer Tools", "Console", SECTION_COLUMN_1 };
// AddSidebarEntry("Developer Tools", "Console", 1);
// AddWidget(path, "Popout Console", WIDGET_WINDOW_BUTTON)
// .CVar("gOpenWindows.Console")
// .Options(ButtonOptions().Tooltip(
// "Enables the console window, allowing you to input commands. Type help for some examples"))
// .WindowName("Console");

// path = { "Developer Tools", "Gfx Debugger", SECTION_COLUMN_1 };
// AddSidebarEntry("Developer Tools", "Gfx Debugger", 1);
// AddWidget(path, "Popout Gfx Debugger", WIDGET_WINDOW_BUTTON)
// .CVar("gOpenWindows.GfxDebugger")
// .Options(ButtonOptions().Tooltip(
// "Enables the Gfx Debugger window, allowing you to input commands, type help for some examples"))
// .WindowName("GfxDebuggerWindow");

// path = { "Developer Tools", "Save Editor", SECTION_COLUMN_1 };
// AddSidebarEntry("Developer Tools", "Save Editor", 1);
// AddWidget(path, "Popout Save Editor", WIDGET_WINDOW_BUTTON)
// .CVar("gWindows.SaveEditor")
// .Options(ButtonOptions().Tooltip("Enables the Save Editor window, allowing you to edit your save file"))
// .WindowName("Save Editor");

// path = { "Developer Tools", "Actor Viewer", SECTION_COLUMN_1 };
// AddSidebarEntry("Developer Tools", "Actor Viewer", 1);
// AddWidget(path, "Popout Actor Viewer", WIDGET_WINDOW_BUTTON)
// .CVar("gWindows.ActorViewer")
// .Options(ButtonOptions().Tooltip("Enables the Actor Viewer window, allowing you to view actors in the
// world.")) .WindowName("Actor Viewer");

// path = { "Developer Tools", "Event Log", SECTION_COLUMN_1 };
// AddSidebarEntry("Developer Tools", "Event Log", 1);
// AddWidget(path, "Popout Event Log", WIDGET_WINDOW_BUTTON)
// .CVar("gWindows.EventLog")
// .Options(ButtonOptions().Tooltip("Enables the event log window"))
// .WindowName("Event Log");
// Stats
path.sidebarName = "Stats";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Stats Window", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("Stats"))
.WindowName("Stats")
.Options(ButtonOptions().Tooltip("Enables the separate Stats Window.").Size(Sizes::Inline));

// Console
path.sidebarName = "Console";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Console", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("Console"))
.WindowName("Console")
.Options(ButtonOptions().Tooltip("Enables the separate Console Window.").Size(Sizes::Inline));

// Save Editor
path.sidebarName = "Save Editor";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Save Editor", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("SaveEditor"))
.WindowName("Save Editor")
.Options(ButtonOptions().Tooltip("Enables the separate Save Editor Window.").Size(Sizes::Inline));

// Hook Debugger
path.sidebarName = "Hook Debugger";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Hook Debugger", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("HookDebugger"))
.WindowName("Hook Debugger")
.Options(ButtonOptions().Tooltip("Enables the separate Hook Debugger Window.").Size(Sizes::Inline));

// Collision Viewer
path.sidebarName = "Collision Viewer";
AddSidebarEntry("Dev Tools", path.sidebarName, 2);
AddWidget(path, "Popout Collision Viewer", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("CollisionViewer"))
.WindowName("Collision Viewer")
.Options(ButtonOptions().Tooltip("Enables the separate Collision Viewer Window.").Size(Sizes::Inline));

// Actor Viewer
path.sidebarName = "Actor Viewer";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Actor Viewer", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("ActorViewer"))
.WindowName("Actor Viewer")
.Options(ButtonOptions().Tooltip("Enables the separate Actor Viewer Window.").Size(Sizes::Inline));

// Display List Viewer
path.sidebarName = "DList Viewer";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Display List Viewer", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("DisplayListViewer"))
.WindowName("Display List Viewer")
.Options(ButtonOptions().Tooltip("Enables the separate Display List Viewer Window.").Size(Sizes::Inline));

// Value Viewer
path.sidebarName = "Value Viewer";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Value Viewer", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("ValueViewer"))
.WindowName("Value Viewer")
.Options(ButtonOptions().Tooltip("Enables the separate Value Viewer Window.").Size(Sizes::Inline));

// Message Viewer
path.sidebarName = "Message Viewer";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Message Viewer", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("MessageViewer"))
.WindowName("Message Viewer")
.Options(ButtonOptions().Tooltip("Enables the separate Message Viewer Window.").Size(Sizes::Inline));

// Gfx Debugger
path.sidebarName = "Gfx Debugger";
AddSidebarEntry("Dev Tools", path.sidebarName, 1);
AddWidget(path, "Popout Gfx Debugger", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("GfxDebugger"))
.WindowName("Gfx Debugger")
.Options(ButtonOptions().Tooltip("Enables the separate Gfx Debugger Window.").Size(Sizes::Inline));

}

} // namespace SohGui
19 changes: 7 additions & 12 deletions soh/soh/SohGui/SohMenuEnhancements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ using namespace UIWidgets2;

void SohMenu::AddMenuEnhancements() {
// Add Enhancements Menu
AddMenuEntry("Enhancements", "gSettings.Menu.EnhancementsSidebarSection");
AddMenuEntry("Enhancements", CVAR_SETTING("Menu.EnhancementsSidebarSection"));


// Enhancements
Expand All @@ -27,49 +27,44 @@ void SohMenu::AddMenuEnhancements() {
// Cosmetics Editor
path.sidebarName = "Cosmetics Editor";
AddSidebarEntry("Enhancements", path.sidebarName, 1);
AddWidget(path, "Cosmetics Editor", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Popout Cosmetics Editor Window", WIDGET_WINDOW_BUTTON)
.CVar("gWindows.CosmeticsEditor")
.CVar(CVAR_WINDOW("CosmeticsEditor"))
.WindowName("Cosmetics Editor")
.Options(ButtonOptions().Tooltip("Enables the separate Cosmetics Editor Window.").Size(Sizes::Inline));


// Audio Editor
path.sidebarName = "Audio Editor";
AddSidebarEntry("Enhancements", path.sidebarName, 1);
AddWidget(path, "Audio Editor", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Popout Audio Editor Window", WIDGET_WINDOW_BUTTON)
.CVar("gWindows.AudioEditor")
.CVar(CVAR_WINDOW("AudioEditor"))
.WindowName("Audio Editor")
.Options(ButtonOptions().Tooltip("Enables the separate Audio Editor Window.").Size(Sizes::Inline));


// Gameplay Stats
path.sidebarName = "Gameplay Stats";
AddSidebarEntry("Enhancements", path.sidebarName, 2);
AddWidget(path, "Gameplay Stats", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Popout Gameplay Stats Window", WIDGET_WINDOW_BUTTON)
.CVar("gWindows.GameplayStats")
.CVar(CVAR_WINDOW("GameplayStats"))
.WindowName("Gameplay Stats")
.Options(ButtonOptions().Tooltip("Enables the separate Gameplay Stats Window.").Size(Sizes::Inline));


// Time Splits
path.sidebarName = "Time Splits";
AddSidebarEntry("Enhancements", path.sidebarName, 1);
AddWidget(path, "Time Splits", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Popout Time Splits Window", WIDGET_WINDOW_BUTTON)
.CVar("gWindows.TimeSplits")
.CVar(CVAR_WINDOW("TimeSplits"))
.WindowName("Time Splits")
.Options(ButtonOptions().Tooltip("Enables the separate Time Splits Window.").Size(Sizes::Inline));


// Timers
path.sidebarName = "Timers";
AddSidebarEntry("Enhancements", path.sidebarName, 1);
AddWidget(path, "Timers", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Popout Timers Window", WIDGET_WINDOW_BUTTON)
.CVar("gWindows.AdditionalTimers")
AddWidget(path, "Toggle Timers Window", WIDGET_WINDOW_BUTTON)
.CVar(CVAR_WINDOW("AdditionalTimers"))
.WindowName("Additional Timers")
.Options(ButtonOptions().Tooltip("Enables the separate Additional Timers Window.").Size(Sizes::Inline));
}
Expand Down
2 changes: 1 addition & 1 deletion soh/soh/SohGui/SohMenuNetwork.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ using namespace UIWidgets2;

void SohMenu::AddMenuNetwork() {
// Add Network Menu
AddMenuEntry("Network", "gSettings.Menu.NetworkSidebarSection");
AddMenuEntry("Network", CVAR_SETTING("Menu.NetworkSidebarSection"));

// General
AddSidebarEntry("Network", "General", 3);
Expand Down
Loading

0 comments on commit 7e13a16

Please sign in to comment.