Skip to content

Commit

Permalink
More prepwork, begin on settings options
Browse files Browse the repository at this point in the history
  • Loading branch information
aMannus committed Jan 30, 2025
1 parent f666cf9 commit de97f88
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 140 deletions.
1 change: 0 additions & 1 deletion soh/soh/ShipUtils.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include "ShipUtils.h"
#include <libultraship/libultraship.h>
//#include "assets/2s2h_assets.h"

extern "C" {
#include "z64.h"
Expand Down
4 changes: 2 additions & 2 deletions soh/soh/SohGui/Menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -538,10 +538,10 @@ void Menu::DrawElement() {
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;
float headerWidth = style.ItemSpacing.x + 20;
bool headerSearch = !CVarGetInteger("gSettings.Menu.SidebarSearch", 0);
if (headerSearch) {
headerWidth += 220.0f + style.ItemSpacing.x + style.FramePadding.x;
headerWidth += 200.0f + style.ItemSpacing.x + style.FramePadding.x;
}
for (auto& label : menuOrder) {
ImVec2 size = ImGui::CalcTextSize(label.c_str());
Expand Down
8 changes: 0 additions & 8 deletions soh/soh/SohGui/MenuTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,12 @@
#include "UIWidgets2.hpp"

typedef enum {
DISABLE_FOR_GYRO_OFF,
DISABLE_FOR_GYRO_ON,
DISABLE_FOR_RIGHT_STICK_OFF,
DISABLE_FOR_AUTO_SAVE_OFF,
DISABLE_FOR_NULL_PLAY_STATE,
DISABLE_FOR_DEBUG_MODE_OFF,
DISABLE_FOR_NO_VSYNC,
DISABLE_FOR_NO_WINDOWED_FULLSCREEN,
DISABLE_FOR_NO_MULTI_VIEWPORT,
DISABLE_FOR_NOT_DIRECTX,
DISABLE_FOR_DIRECTX,
DISABLE_FOR_MATCH_REFRESH_RATE_ON,
DISABLE_FOR_FRAME_ADVANCE_OFF,
DISABLE_FOR_INTRO_SKIP_OFF,
DISABLE_FOR_ADVANCED_RESOLUTION_ON,
DISABLE_FOR_VERTICAL_RES_TOGGLE_ON,
DISABLE_FOR_LOW_RES_MODE_ON,
Expand Down
38 changes: 1 addition & 37 deletions soh/soh/SohGui/SohMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#include "StringHelper.h"
#include <spdlog/fmt/fmt.h>
#include <tuple>
//#include "ResolutionEditor.h"

extern "C" {
#include "z64.h"
Expand All @@ -20,12 +19,6 @@ extern void Warp();

namespace SohGui {
extern std::shared_ptr<SohMenu> mSohMenu;
void FreeLookPitchMinMax() {
f32 maxY = CVarGetFloat("gEnhancements.Camera.FreeLook.MaxPitch", 72.0f);
f32 minY = CVarGetFloat("gEnhancements.Camera.FreeLook.MinPitch", -49.0f);
CVarSetFloat("gEnhancements.Camera.FreeLook.MaxPitch", std::max(maxY, minY));
CVarSetFloat("gEnhancements.Camera.FreeLook.MinPitch", std::min(maxY, minY));
}

using namespace UIWidgets2;

Expand Down Expand Up @@ -109,29 +102,6 @@ void SohMenu::InitElement() {
}

disabledMap = {
{ DISABLE_FOR_GYRO_OFF,
{ [](disabledInfo& info) -> bool {
return !CVarGetInteger("gEnhancements.Camera.FirstPerson.GyroEnabled", 0);
},
"Gyro Aiming is Disabled" } },
{ DISABLE_FOR_GYRO_ON,
{ [](disabledInfo& info) -> bool {
return CVarGetInteger("gEnhancements.Camera.FirstPerson.GyroEnabled", 0);
},
"Gyro Aiming is Enabled" } },
{ DISABLE_FOR_RIGHT_STICK_OFF,
{ [](disabledInfo& info) -> bool {
return !CVarGetInteger("gEnhancements.Camera.FirstPerson.RightStickEnabled", 0);
},
"Right Stick Aiming is Disabled" } },
{ DISABLE_FOR_AUTO_SAVE_OFF,
{ [](disabledInfo& info) -> bool { return !CVarGetInteger("gEnhancements.Saving.Autosave", 0); },
"AutoSave is Disabled" } },
{ DISABLE_FOR_NULL_PLAY_STATE,
{ [](disabledInfo& info) -> bool { return gPlayState == NULL; }, "Save Not Loaded" } },
{ DISABLE_FOR_DEBUG_MODE_OFF,
{ [](disabledInfo& info) -> bool { return !CVarGetInteger("gDeveloperTools.DebugEnabled", 0); },
"Debug Mode is Disabled" } },
{ DISABLE_FOR_NO_VSYNC,
{ [](disabledInfo& info) -> bool {
return !Ship::Context::GetInstance()->GetWindow()->CanDisableVerticalSync();
Expand Down Expand Up @@ -160,14 +130,8 @@ void SohMenu::InitElement() {
},
"Not Available on DirectX" } },
{ DISABLE_FOR_MATCH_REFRESH_RATE_ON,
{ [](disabledInfo& info) -> bool { return CVarGetInteger("gMatchRefreshRate", 0); },
{ [](disabledInfo& info) -> bool { return CVarGetInteger(CVAR_SETTING("gMatchRefreshRate"), 0); },
"Match Refresh Rate is Enabled" } },
/*{ DISABLE_FOR_FRAME_ADVANCE_OFF,
{ [](disabledInfo& info) -> bool { return !(gPlayState != nullptr && gPlayState->frameAdvCtx.enabled); },
"Frame Advance is Disabled" } },*/
{ DISABLE_FOR_INTRO_SKIP_OFF,
{ [](disabledInfo& info) -> bool { return !CVarGetInteger("gEnhancements.Cutscenes.SkipIntroSequence", 0); },
"Intro Skip Not Selected" } },
{ DISABLE_FOR_ADVANCED_RESOLUTION_ON,
{ [](disabledInfo& info) -> bool { return CVarGetInteger(CVAR_PREFIX_ADVANCED_RESOLUTION ".Enabled", 0); },
"Advanced Resolution Enabled" } },
Expand Down
12 changes: 1 addition & 11 deletions soh/soh/SohGui/SohMenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include "UIWidgets2.hpp"
#include "Menu.h"
#include "graphic/Fast3D/gfx_rendering_api.h"
#include "soh/Notification/Notification.h"
#include "soh/cvar_prefixes.h"

namespace SohGui {

Expand All @@ -32,12 +32,6 @@ static const std::unordered_map<int32_t, const char*> textureFilteringMap = {
{ FILTER_NONE, "None" },
};

//static const std::unordered_map<int32_t, const char*> debugSaveOptions = {
// { DEBUG_SAVE_INFO_COMPLETE, "100\% save" },
// { DEBUG_SAVE_INFO_VANILLA_DEBUG, "Vanilla debug save" },
// { DEBUG_SAVE_INFO_NONE, "Empty save" },
//};

static const std::unordered_map<int32_t, const char*> logLevels = {
{ DEBUG_LOG_TRACE, "Trace" }, { DEBUG_LOG_DEBUG, "Debug" }, { DEBUG_LOG_INFO, "Info" },
{ DEBUG_LOG_WARN, "Warn" }, { DEBUG_LOG_ERROR, "Error" }, { DEBUG_LOG_CRITICAL, "Critical" },
Expand All @@ -48,10 +42,6 @@ static const std::unordered_map<int32_t, const char*> notificationPosition = {
{ 0, "Top Left" }, { 1, "Top Right" }, { 2, "Bottom Left" }, { 3, "Bottom Right" }, { 4, "Hidden" },
};

static const std::unordered_map<int32_t, const char*> damageMultiplierOptions = {
{ 0, "1x" }, { 1, "2x" }, { 2, "4x" }, { 3, "8x" }, { 4, "16x" }, { 10, "1 Hit KO" },
};

class SohMenu : public Ship::Menu {
public:
SohMenu(const std::string& consoleVariable, const std::string& name);
Expand Down
10 changes: 4 additions & 6 deletions soh/soh/SohGui/SohMenuDevTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@ void SohMenu::AddMenuDevTools() {
AddSidebarEntry("Dev Tools", "General", 3);
WidgetPath path = { "Dev Tools", "General", SECTION_COLUMN_1 };

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

// 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
// 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)
Expand Down
62 changes: 41 additions & 21 deletions soh/soh/SohGui/SohMenuEnhancements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,34 +9,54 @@ void SohMenu::AddMenuEnhancements() {
// Add Enhancements Menu
AddMenuEntry("Enhancements", "gSettings.Menu.EnhancementsSidebarSection");

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

AddWidget(path, "Menu 1 filler", WIDGET_TEXT);
// Enhancements
WidgetPath path = { "Enhancements", "Enhancements", SECTION_COLUMN_1 };
AddSidebarEntry("Enhancements", path.sidebarName, 3);

AddWidget(path, "filler", WIDGET_TEXT);


// Cheats
path.sidebarName = "Cheats";
AddSidebarEntry("Enhancements", "Cheats", 3);
AddSidebarEntry("Enhancements", path.sidebarName, 3);

AddWidget(path, "Cheats filler", WIDGET_TEXT);

// HUD Editor
// path = { "Enhancements", "HUD Editor", SECTION_COLUMN_1 };
// AddSidebarEntry("Enhancements", "HUD Editor", 1);
// AddWidget(path, "Popout HUD Editor", WIDGET_WINDOW_BUTTON)
// .CVar("gWindows.HudEditor")
// .WindowName("HUD Editor")
// .Options(ButtonOptions()
// .Tooltip("Enables the HUD Editor window, allowing you to modify your HUD")
// .Size(Sizes::Inline));

//// Item Tracker Settings
// path = { "Enhancements", "Item Tracker", SECTION_COLUMN_1 };
// AddSidebarEntry("Enhancements", "Item Tracker", 1);
// AddWidget(path, "Popout Item Tracker", WIDGET_WINDOW_BUTTON)
// .CVar("gWindows.ItemTracker")
// .WindowName("Item Tracker Settings");

// Cosmetics Editor
path.sidebarName = "Cosmetics Editor";
AddSidebarEntry("Enhancements", path.sidebarName, 3);

AddWidget(path, "Cosmetics filler", WIDGET_TEXT);


// Audio Editor
path.sidebarName = "Audio Editor";
AddSidebarEntry("Enhancements", path.sidebarName, 3);

AddWidget(path, "Audio filler", WIDGET_TEXT);


// Gameplay Stats
path.sidebarName = "Gameplay Stats";
AddSidebarEntry("Enhancements", path.sidebarName, 3);

AddWidget(path, "Gameplay Stats filler", WIDGET_TEXT);


// Time Splits
path.sidebarName = "Time Splits";
AddSidebarEntry("Enhancements", path.sidebarName, 3);

AddWidget(path, "Time Splits filler", WIDGET_TEXT);


// Timers
path.sidebarName = "Timers";
AddSidebarEntry("Enhancements", path.sidebarName, 3);

AddWidget(path, "Timers filler", WIDGET_TEXT);
}

} // namespace SohGui
116 changes: 62 additions & 54 deletions soh/soh/SohGui/SohMenuSettings.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
#include "SohMenu.h"
#include "soh/Notification/Notification.h"


extern "C" {
#include "include/z64audio.h"
#include "variables.h"
}

namespace SohGui {

extern std::shared_ptr<SohMenu> mSohMenu;
Expand All @@ -14,7 +20,7 @@ void SohMenu::AddMenuSettings() {
AddSidebarEntry("Settings", "General", 3);
WidgetPath path = { "Settings", "General", SECTION_COLUMN_1 };
AddWidget(path, "Menu Theme", WIDGET_CVAR_COMBOBOX)
.CVar("gSettings.Menu.Theme")
.CVar(CVAR_SETTING("Menu.Theme"))
.Options(ComboboxOptions()
.Tooltip("Changes the Theme of the Menu Widgets.")
.ComboMap(menuThemeOptions)
Expand All @@ -27,17 +33,17 @@ void SohMenu::AddMenuSettings() {
"This will disable game inputs while the menu is visible.\n\nD-pad to move between "
"items, A to select, B to move up in scope."));
AddWidget(path, "Cursor Always Visible", WIDGET_CVAR_CHECKBOX)
.CVar("gSettings.CursorVisibility")
.CVar(CVAR_SETTING("CursorVisibility"))
.Callback([](WidgetInfo& info) {
Ship::Context::GetInstance()->GetWindow()->SetForceCursorVisibility(
CVarGetInteger("gSettings.CursorVisibility", 0));
CVarGetInteger(CVAR_SETTING("CursorVisibility"), 0));
})
.Options(CheckboxOptions().Tooltip("Makes the cursor always visible, even in full screen."));
#endif
AddWidget(path, "Search In Sidebar", WIDGET_CVAR_CHECKBOX)
.CVar("gSettings.Menu.SidebarSearch")
.CVar(CVAR_SETTING("Menu.SidebarSearch"))
.Callback([](WidgetInfo& info) {
if (CVarGetInteger("gSettings.Menu.SidebarSearch", 0)) {
if (CVarGetInteger(CVAR_SETTING("Menu.SidebarSearch"), 0)) {
mSohMenu->InsertSidebarSearch();
} else {
mSohMenu->RemoveSidebarSearch();
Expand All @@ -46,11 +52,11 @@ void SohMenu::AddMenuSettings() {
.Options(CheckboxOptions().Tooltip(
"Displays the Search menu as a sidebar entry in Settings instead of in the header."));
AddWidget(path, "Search Input Autofocus", WIDGET_CVAR_CHECKBOX)
.CVar("gSettings.Menu.SearchAutofocus")
.CVar(CVAR_SETTING("Menu.SearchAutofocus"))
.Options(CheckboxOptions().Tooltip(
"Search input box gets autofocus when visible. Does not affect using other widgets."));
AddWidget(path, "Alt Assets Tab hotkey", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Mods.AlternateAssetsHotkey")
.CVar(CVAR_SETTING("Mods.AlternateAssetsHotkey"))
.Options(
CheckboxOptions().Tooltip("Allows pressing the Tab key to toggle alternate assets").DefaultValue(true));
AddWidget(path, "Open App Files Folder", WIDGET_BUTTON)
Expand All @@ -63,57 +69,59 @@ void SohMenu::AddMenuSettings() {
// Audio Settings
path.sidebarName = "Audio";
AddSidebarEntry("Settings", "Audio", 3);
AddWidget(path, "Master Volume: %.0f%%", WIDGET_CVAR_SLIDER_FLOAT)
.CVar("gSettings.Audio.MasterVolume")
.Options(FloatSliderOptions()
.Tooltip("Adjust the overall sound volume.")
.ShowButtons(false)
.Format("")
.IsPercentage());
/*AddWidget(path, "Main Music Volume: %.0f%%", WIDGET_CVAR_SLIDER_FLOAT)
.CVar("gSettings.Audio.MainMusicVolume")
.Callback([](WidgetInfo& info) {
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_BGM_MAIN, CVarGetFloat("gSettings.Audio.MainMusicVolume", 1.0f));
})
.Options(FloatSliderOptions()
.Tooltip("Adjust the background music volume.")
.ShowButtons(false)
.Format("")
.IsPercentage());
AddWidget(path, "Sub Music Volume: %.0f%%", WIDGET_CVAR_SLIDER_FLOAT)
.CVar("gSettings.Audio.SubMusicVolume")

AddWidget(path, "Master Volume: %d %%", WIDGET_CVAR_SLIDER_INT)
.CVar(CVAR_SETTING("Volume.Master"))
.Options(IntSliderOptions()
.Min(0)
.Max(100)
.DefaultValue(100)
.ShowButtons(true)
.Format(""));
AddWidget(path, "Main Music Volume: %d %%", WIDGET_CVAR_SLIDER_INT)
.CVar(CVAR_SETTING("Volume.MainMusic"))
.Options(IntSliderOptions()
.Min(0)
.Max(100)
.DefaultValue(100)
.ShowButtons(true)
.Format(""))
.Callback([](WidgetInfo& info) {
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_BGM_SUB, CVarGetFloat("gSettings.Audio.SubMusicVolume", 1.0f));
})
.Options(
FloatSliderOptions().Tooltip("Adjust the sub music volume.").ShowButtons(false).Format("").IsPercentage());
AddWidget(path, "Sound Effects Volume: %.0f%%", WIDGET_CVAR_SLIDER_FLOAT)
.CVar("gSettings.Audio.SoundEffectsVolume")
Audio_SetGameVolume(SEQ_PLAYER_BGM_MAIN, ((float)CVarGetInteger(CVAR_SETTING("Volume.MainMusic"), 100) / 100.0f));
});
AddWidget(path, "Sub Music Volume: %d %%", WIDGET_CVAR_SLIDER_INT)
.CVar(CVAR_SETTING("Volume.SubMusic"))
.Options(IntSliderOptions()
.Min(0)
.Max(100)
.DefaultValue(100)
.ShowButtons(true)
.Format(""))
.Callback([](WidgetInfo& info) {
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_SFX, CVarGetFloat("gSettings.Audio.SoundEffectsVolume", 1.0f));
})
.Options(FloatSliderOptions()
.Tooltip("Adjust the sound effects volume.")
.ShowButtons(false)
.Format("")
.IsPercentage());
AddWidget(path, "Fanfare Volume: %.0f%%", WIDGET_CVAR_SLIDER_FLOAT)
.CVar("gSettings.Audio.FanfareVolume")
Audio_SetGameVolume(SEQ_PLAYER_BGM_SUB, ((float)CVarGetInteger(CVAR_SETTING("Volume.SubMusic"), 100) / 100.0f));
});
AddWidget(path, "Fanfare Volume: %d %%", WIDGET_CVAR_SLIDER_INT)
.CVar(CVAR_SETTING("Volume.Fanfare"))
.Options(IntSliderOptions()
.Min(0)
.Max(100)
.DefaultValue(100)
.ShowButtons(true)
.Format(""))
.Callback([](WidgetInfo& info) {
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_FANFARE, CVarGetFloat("gSettings.Audio.FanfareVolume", 1.0f));
})
.Options(
FloatSliderOptions().Tooltip("Adjust the fanfare volume.").ShowButtons(false).Format("").IsPercentage());
AddWidget(path, "Ambience Volume: %.0f%%", WIDGET_CVAR_SLIDER_FLOAT)
.CVar("gSettings.Audio.AmbienceVolume")
Audio_SetGameVolume(SEQ_PLAYER_FANFARE, ((float)CVarGetInteger(CVAR_SETTING("Volume.Fanfare"), 100) / 100.0f));
});
AddWidget(path, "Sound Effects Volume: %d %%", WIDGET_CVAR_SLIDER_INT)
.CVar(CVAR_SETTING("Volume.SFX"))
.Options(IntSliderOptions()
.Min(0)
.Max(100)
.DefaultValue(100)
.ShowButtons(true)
.Format(""))
.Callback([](WidgetInfo& info) {
AudioSeq_SetPortVolumeScale(SEQ_PLAYER_AMBIENCE, CVarGetFloat("gSettings.Audio.AmbienceVolume", 1.0f));
})
.Options(FloatSliderOptions()
.Tooltip("Adjust the ambient sound volume.")
.ShowButtons(false)
.Format("")
.IsPercentage());*/
Audio_SetGameVolume(SEQ_PLAYER_SFX, ((float)CVarGetInteger(CVAR_SETTING("Volume.SFX"), 100) / 100.0f));
});
AddWidget(path, "Audio API", WIDGET_AUDIO_BACKEND);

// Graphics Settings
Expand Down

0 comments on commit de97f88

Please sign in to comment.