Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
b42f3f3
Implement Dinolfos, Boss03 reset funcs (#1371)
Eblo Nov 30, 2025
b250261
Map chest grotto grass actorListIndex to RC (#1374)
Eblo Dec 10, 2025
24f47c2
Skip Woodfall Clear cutscene on repeats (#1377)
Eblo Dec 10, 2025
7197247
Fixed issue where the Input Viewer window on first use would be a lar…
Glought Dec 11, 2025
5c7b8a1
Add option to skip the soaring cutscene when warping (#1383)
JordanLongstaff Dec 11, 2025
16ad734
Skip Hungry Goron's forced dialogue (#1384)
JordanLongstaff Dec 11, 2025
3431c00
Add accessibility menu and options to disable screen flashes on enemy…
JordanLongstaff Dec 11, 2025
1fc285e
Bugfix: Don't skip Dotour's entry into Bomber's Notebook (#1387)
JordanLongstaff Dec 11, 2025
30a16e4
[Enhancement] Difficulty options to tweak Swamp Boat Archery minigame…
JordanLongstaff Dec 11, 2025
d3c5929
Organize `GIVanillaBehavior` enum (#1390)
JordanLongstaff Dec 11, 2025
a6815e3
[Rando] Enemy Drops V2 (#1373)
Eblo Dec 13, 2025
d80c046
Add build folder to `.gitignore` (#1393)
JordanLongstaff Dec 13, 2025
4e22b5c
Swordsman pots need human sword (#1394)
Eblo Dec 13, 2025
a2e8b62
Fix cow softlock when cows are not shuffled (#1396)
Eblo Dec 18, 2025
cfbfdc5
Fix OOB in AudioSeq_ResetReverb (#1397)
Eblo Dec 18, 2025
6a52fc0
[Enhancement] Persist entrance and respawn information in saves (#890)
Eblo Dec 18, 2025
e56fe24
[Controls] Port Modifier Buttons and Speed Modifiers from SoH. (#1365)
Glought Dec 18, 2025
7111443
Prevent notification for junk items, and remove queue delay (#1395)
garrettjoecox Dec 18, 2025
bc2b3b6
Add hook file for Pause Save (#1399)
JordanLongstaff Dec 18, 2025
53b70bf
Fix Combobox Search Filter (#1402)
mckinlee Dec 18, 2025
a46f7b3
[Rando] first pass of masks required to fight majora (#1279)
ErawanJohnson Dec 30, 2025
e7f1fc0
fix crash (#1410)
mckinlee Dec 30, 2025
ffe0a17
Snowhead corrections attempt 2 (#1415)
sitton76 Dec 30, 2025
f117e73
[Difficulty Option] Skip Younger Beaver Brother Races (#1409)
Caladius Dec 30, 2025
14902f0
[Enhancement] Ammo Buyback (#1407)
mckinlee Dec 30, 2025
2df1144
Only apply fast push to skateblock, not pull (#1418)
Eblo Dec 30, 2025
bbc2ed1
Fix mismatched Deku Search Balls labels (#1416)
Eblo Dec 30, 2025
6e0bc1b
Merge remote-tracking branch 'upstream/develop-mion' into merge-devel…
Eblo Dec 30, 2025
6dc7822
Merge pull request #1423 from Eblo/merge-develop-mion-into-develop
Eblo Dec 30, 2025
dd5c0f1
Fix softlock from repeating Kafei's Mask check (#1432)
Eblo Jan 4, 2026
722306e
Exclude Triforce from plentiful items, add error handling (#1433)
Eblo Jan 4, 2026
9db0b45
Random things I've been meaning to do (#1435)
garrettjoecox Jan 5, 2026
4a4d46e
Separate pool generation and pool metrics to UI (#1431)
garrettjoecox Jan 5, 2026
ce0966e
Add missing swim grant when not shuffled (#1436)
garrettjoecox Jan 5, 2026
090bfc0
Bump for Mion Charlie (#1434)
Eblo Jan 5, 2026
cd4e94a
Merge remote-tracking branch 'upstream/develop-mion' into merge-mion-…
Eblo Jan 5, 2026
b3f359a
Merge develop-mion->develop, once more (#1438)
Eblo Jan 5, 2026
5120937
Merge pull request #1439 from Eblo/merge-mion-into-develop-again
Eblo Jan 5, 2026
2b139c2
[Rando] Clock Shuffle + Logic (#1275)
mckinlee Jan 6, 2026
890ae91
Fierce Deity Flipbook Support (#1412)
Jameriquiah Jan 6, 2026
74890e1
[Enhancement] Auto Bank Deposit (#1419)
mckinlee Jan 6, 2026
8eab6b6
[Enhancement] GFS Attack With B (#1420)
mckinlee Jan 6, 2026
b2fb5b2
just be a regular maze (#1421)
mckinlee Jan 6, 2026
de61cd8
[Rando] Enemy Soul Shuffle (#1284)
Caladius Jan 6, 2026
ad2a7ec
Merge remote-tracking branch 'upstream/develop' into finish-ocarina-b…
Eblo Jan 6, 2026
7829d8b
Cleanup
Eblo Jan 6, 2026
b8c4c67
Clean up
Eblo Jan 7, 2026
0785430
[Enhancement] Masks equippable in water (#1430)
JordanLongstaff Jan 7, 2026
4b1b702
Grant starting enemy souls if not shuffled (#1443)
Eblo Jan 7, 2026
b6ef8ee
Merge remote-tracking branch 'upstream/develop' into finish-ocarina-b…
Eblo Jan 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ shipofharkinian.json
imgui.ini
saves/*
randomizer/*
2S2HTimeSplitData.json

mm/libultraship/extern/Debug/ImGui.lib

Expand Down Expand Up @@ -68,3 +69,5 @@ _packages/
/mm/src/boot/build.c
/mm/windows/properties.h
/clang-format.exe

build/
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")

set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
set(GAME_STR "MM")
project(2s2h VERSION 3.0.1 LANGUAGES C CXX)
project(2s2h VERSION 3.0.2 LANGUAGES C CXX)
include(CMake/2ship-cvars.cmake)
include(CMake/lus-cvars.cmake)
set(SPDLOG_LEVEL_TRACE 0)
set(SPDLOG_LEVEL_OFF 6)
set(SPDLOG_MIN_CUTOFF SPDLOG_LEVEL_TRACE CACHE STRING "cutoff at trace")
set(PROJECT_BUILD_NAME "Mion Bravo" CACHE STRING "" FORCE)
set(PROJECT_BUILD_NAME "Mion Charlie" CACHE STRING "" FORCE)
set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "" FORCE)

execute_process(
Expand Down
68 changes: 68 additions & 0 deletions mm/2s2h/BenGui/BenInputEditorWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@
#include <ship/controller/controldevice/controller/mapping/ControllerRumbleMapping.h>
#include <ship/controller/controldeck/ControlDeck.h>
#include <ship/utils/StringHelper.h>
#include "2s2h/BenPort.h"
#include "2s2h/BenGui/UIWidgets.hpp"
#include "2s2h/BenGui/BenGui.hpp"
#ifndef __WIIU__
#include <ship/controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToButtonMapping.h>
#endif

#define SCALE_IMGUI_SIZE(value) ((value / 13.0f) * ImGui::GetFontSize())

using namespace UIWidgets;

BenInputEditorWindow::~BenInputEditorWindow() {
}

Expand Down Expand Up @@ -1196,6 +1201,65 @@ void BenInputEditorWindow::DrawGyroSection(uint8_t port) {
}
}

void BenInputEditorWindow::DrawModifierButtonsSection(uint8_t port) {
DrawButtonLine("M1", port, BTN_CUSTOM_MODIFIER1);
DrawButtonLine("M2", port, BTN_CUSTOM_MODIFIER2);

ImGui::BeginDisabled(CVarGetInteger("gSettings.DisableChanges", 0));
CVarCheckbox("Enable Speed Modifiers", "gSettings.SpeedModifier.Enable",
CheckboxOptions()
.Color(THEME_COLOR)
.Tooltip("Hold the assigned button to change the maximum walking or swimming speed."));
if (CVarGetInteger("gSettings.SpeedModifier.Enable", 0)) {
UIWidgets::Spacer(5);
Ship::GuiWindow::BeginGroupPanel("Speed Modifier", ImGui::GetContentRegionAvail());
CVarCheckbox("Toggle modifier instead of holding", "gSettings.SpeedModifier.Toggle",
CheckboxOptions().Color(THEME_COLOR));
Ship::GuiWindow::BeginGroupPanel("Walk Modifier", ImGui::GetContentRegionAvail());
CVarCheckbox("Enable Walk Speed Modifier", "gSettings.SpeedModifier.WalkEnable",
CheckboxOptions().Color(THEME_COLOR));
CVarSliderFloat("Walk Modifier 1: %.0f %%", "gSettings.SpeedModifier.WalkMapping1",
FloatSliderOptions()
.Color(THEME_COLOR)
.IsPercentage()
.Min(0.0f)
.Max(15.0f)
.DefaultValue(1.0f)
.ShowAdjustmentButtons(true));
CVarSliderFloat("Walk Modifier 2: %.0f %%", "gSettings.SpeedModifier.WalkMapping2",
FloatSliderOptions()
.Color(THEME_COLOR)
.IsPercentage()
.Min(0.0f)
.Max(15.0f)
.DefaultValue(1.0f)
.ShowAdjustmentButtons(true));
Ship::GuiWindow::EndGroupPanel(0);
Ship::GuiWindow::BeginGroupPanel("Swim Modifier", ImGui::GetContentRegionAvail());
CVarCheckbox("Enable Swim Speed Modifier", "gSettings.SpeedModifier.SwimEnable",
CheckboxOptions().Color(THEME_COLOR));
CVarSliderFloat("Swim Modifier 1: %.0f %%", "gSettings.SpeedModifier.SwimMapping1",
FloatSliderOptions()
.Color(THEME_COLOR)
.IsPercentage()
.Min(0.0f)
.Max(8.75f)
.DefaultValue(1.0f)
.ShowAdjustmentButtons(true));
CVarSliderFloat("Swim Modifier 2: %.0f %%", "gSettings.SpeedModifier.SwimMapping2",
FloatSliderOptions()
.Color(THEME_COLOR)
.IsPercentage()
.Min(0.0f)
.Max(8.75f)
.DefaultValue(1.0f)
.ShowAdjustmentButtons(true));
Ship::GuiWindow::EndGroupPanel(0);
Ship::GuiWindow::EndGroupPanel(0);
}
ImGui::EndDisabled();
}

const ImGuiTableFlags PANEL_TABLE_FLAGS = ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV;
const ImGuiTableColumnFlags PANEL_TABLE_COLUMN_FLAGS =
ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_NoSort;
Expand Down Expand Up @@ -1396,6 +1460,10 @@ void BenInputEditorWindow::DrawPortTabContents(uint8_t portIndex) {
DrawLEDSection(portIndex);
}

if (ImGui::CollapsingHeader("Modifier Buttons")) {
DrawModifierButtonsSection(portIndex);
}

ImGui::PopStyleColor();
ImGui::PopStyleColor();
ImGui::PopStyleColor();
Expand Down
2 changes: 2 additions & 0 deletions mm/2s2h/BenGui/BenInputEditorWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ class BenInputEditorWindow : public Ship::GuiWindow {
void DrawRemoveGyroMappingButton(uint8_t port, std::string id);
void DrawAddGyroMappingButton(uint8_t port);

void DrawModifierButtonsSection(uint8_t port);

// Used together for an incomplete linked hash map implementation in order to
// map button masks to their names and original mapping on N64
std::list<std::pair<N64ButtonMask, const char*>> buttons;
Expand Down
97 changes: 87 additions & 10 deletions mm/2s2h/BenGui/BenMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ static const std::vector<const char*> cremiaRewardOptions = {
"Rupee", // CREMIA_REWARD_ALWAYS_RUPEE
};

static const std::vector<const char*> ammoBuybackOptions = {
"Vanilla", // AMMO_BUYBACK_VANILLA
"Full Price", // AMMO_BUYBACK_FULL_PRICE
"Half Price", // AMMO_BUYBACK_HALF_PRICE
};

static const std::vector<const char*> gibdoTradeSequenceOptions = {
"Vanilla", // GIBDO_TRADE_SEQUENCE_VANILLA
"MM3D", // GIBDO_TRADE_SEQUENCE_MM3D
Expand Down Expand Up @@ -113,8 +119,8 @@ static const std::vector<const char*> notificationPosition = {
};

static const std::vector<const char*> dekuGuardSearchBallsOptions = {
"Never", // DEKU_GUARD_SEARCH_BALLS_NEVER
"Night Only", // DEKU_GUARD_SEARCH_BALLS_NIGHT_ONLY
"Never", // DEKU_GUARD_SEARCH_BALLS_NEVER
"Always", // DEKU_GUARD_SEARCH_BALLS_ALWAYS
};

Expand Down Expand Up @@ -551,6 +557,7 @@ void BenMenu::AddSettings() {
.Options(ButtonOptions().Tooltip("Enables the separate Bindings Window.").Size(Sizes::Inline));

path.sidebarName = "Overlay";
path.column = SECTION_COLUMN_1;
AddSidebarEntry("Settings", "Overlay", 2);
AddWidget(path, "Notifications", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Position", WIDGET_CVAR_COMBOBOX)
Expand Down Expand Up @@ -987,6 +994,11 @@ void BenMenu::AddEnhancements() {
.CVar("gEnhancements.Equipment.InvertShieldY")
.Options(CheckboxOptions().Tooltip(
"Invert the Y axis while holding the shield so that it moves up with the left stick."));
AddWidget(path, "Great Fairy Sword B-Button Attack", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Equipment.GreatFairySwordBButton")
.Options(CheckboxOptions().Tooltip(
"When the Great Fairy's Sword is held, pressing B attacks with it instead of drawing "
"your equipped sword. The sword can still be put away with A as normal."));

path.column = SECTION_COLUMN_2;
AddWidget(path, "Modes", WIDGET_SEPARATOR_TEXT);
Expand Down Expand Up @@ -1020,6 +1032,27 @@ void BenMenu::AddEnhancements() {
"-Hug: Get the hugging cutscene\n"
"-Rupee: Get the rupee reward")
.ComboVec(&cremiaRewardOptions));
AddWidget(path, "Ammo Buyback Options", WIDGET_CVAR_COMBOBOX)
.CVar("gEnhancements.Items.AmmoBuyback")
.Options(ComboboxOptions()
.Tooltip("Choose whether to allow selling ammo items (Arrows, Bombs, Bombchus, Deku Sticks, Deku "
"Nuts, Magic Beans, Powder Keg) "
"to the Curiosity Shop owner for Rupees.\n"
"-Vanilla: Ammo items cannot be sold\n"
"-Full Price: Sell at full value\n"
"-Half Price: Sell at half value (rounded up)")
.ComboVec(&ammoBuybackOptions));
AddWidget(path, "Accessibility", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Disable Screen Flash for Enemy Kills", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.A11y.NoScreenFlashForEnemyKill")
.Options(CheckboxOptions().Tooltip("Disables the white screen flash on enemy kill."));
AddWidget(path, "Bow Reticle", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Graphics.BowReticle")
.Options(CheckboxOptions().Tooltip("Gives the bow a reticle when you draw an arrow."));
AddWidget(path, "Mark Shooting Gallery Octoroks", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Minigames.MarkShootingGalleryOctoroks")
.Options(CheckboxOptions().Tooltip("Places markers on the Town Shooting Gallery Octoroks, indicating whether "
"they should be hit."));
path.column = SECTION_COLUMN_3;
AddWidget(path, "Saving", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "3rd Save File Slot", WIDGET_CVAR_CHECKBOX)
Expand All @@ -1036,14 +1069,17 @@ void BenMenu::AddEnhancements() {
"Re-introduce the pause menu save system. Pressing B in the pause menu will give you the "
"option to create a persistent Owl Save from your current location.\n\nWhen loading back "
"into the game, you will be placed either at the entrance of the dungeon you saved in, or "
"in South Clock Town."));
"in South Clock Town, unless Remember Save Location is enabled."));
AddWidget(path, "Remember Save Location", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Saving.RememberSaveLocation")
.Options(CheckboxOptions().Tooltip("When loading a save, places Link at the last entrance he went through."));
AddWidget(path, "Autosave", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Saving.Autosave")
.Callback([](WidgetInfo& info) { RegisterAutosave(); })
.Options(CheckboxOptions().Tooltip(
"Automatically create a persistent Owl Save on the chosen interval.\n\nWhen loading "
"back into the game, you will be placed either at the entrance of the dungeon you "
"saved in, or in South Clock Town."));
"saved in, or in South Clock Town, unless Remember Save Location is enabled."));
AddWidget(path, "Autosave Interval: %d minutes", WIDGET_CVAR_SLIDER_INT)
.CVar("gEnhancements.Saving.AutosaveInterval")
.PreFunc([](WidgetInfo& info) {
Expand Down Expand Up @@ -1153,9 +1189,6 @@ void BenMenu::AddEnhancements() {
.CVar("gEnhancements.Graphics.AuthenticLogo")
.Options(CheckboxOptions().Tooltip("Hide the game version and build details and display the authentic "
"model and texture on the boot logo start screen."));
AddWidget(path, "Bow Reticle", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Graphics.BowReticle")
.Options(CheckboxOptions().Tooltip("Gives the bow a reticle when you draw an arrow."));
AddWidget(path, "Disable Black Bar Letterboxes", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Graphics.DisableBlackBars")
.Options(CheckboxOptions().Tooltip(
Expand Down Expand Up @@ -1194,6 +1227,9 @@ void BenMenu::AddEnhancements() {
AddSidebarEntry("Enhancements", "Items/Songs", 3);
// Mask Enhancements
AddWidget(path, "Masks", WIDGET_SEPARATOR_TEXT);
AddWidget(path, "Equippable While Swimming", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Masks.EquipWhileSwimming")
.Options(CheckboxOptions().Tooltip("Human Link can equip any non-transformation mask while swimming."));
AddWidget(path, "Blast Mask has Powder Keg Force", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Masks.BlastMaskKeg")
.Options(CheckboxOptions().Tooltip("Blast Mask can also destroy objects only the Powder Keg can."));
Expand Down Expand Up @@ -1265,6 +1301,9 @@ void BenMenu::AddEnhancements() {
AddWidget(path, "Skip Song of Time cutscenes", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Songs.SkipSoTCutscenes")
.Options(CheckboxOptions().Tooltip("Skips the cutscenes when playing any of the Song of Time songs."));
AddWidget(path, "Skip Soaring cutscene", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Songs.SkipSoaringCutscene")
.Options(CheckboxOptions().Tooltip("Skips the cutscene when using the Song of Soaring to warp."));

// Time Savers
path = { "Enhancements", "Time Savers", SECTION_COLUMN_1 };
Expand Down Expand Up @@ -1360,6 +1399,12 @@ void BenMenu::AddEnhancements() {
.CVar("gEnhancements.Timesavers.SkipBalladOfWindfish")
.Options(CheckboxOptions().Tooltip(
"Play the complete Ballad after playing in one form if you have all three transformation masks."));
AddWidget(path, "Auto Bank Deposit", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Timesavers.AutoBankDeposit")
.Options(CheckboxOptions().Tooltip(
"Automatically deposits excess Rupees into your bank account when your wallet is full. "
"Deposits stop when the bank reaches maximum capacity. "
"Bank rewards are granted automatically. Notifications display deposit amount and new balance."));

// Fixes
path = { "Enhancements", "Fixes", SECTION_COLUMN_1 };
Expand Down Expand Up @@ -1575,10 +1620,9 @@ void BenMenu::AddEnhancements() {
.Min(1)
.Max(20)
.DefaultValue(20));
AddWidget(path, "Mark Shooting Gallery Octoroks", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Minigames.MarkShootingGalleryOctoroks")
.Options(CheckboxOptions().Tooltip("Places markers on the Town Shooting Gallery Octoroks, indicating whether "
"they should be hit."));
AddWidget(path, "Skip Little Beaver Brother Races", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Minigames.SkipLittleBeaver")
.Options(CheckboxOptions().Tooltip("Only Race the Older Beaver."));
AddWidget(path, "Goron Race", WIDGET_CVAR_COMBOBOX)
.CVar("gEnhancements.DifficultyOptions.GoronRace")
.Options(ComboboxOptions()
Expand All @@ -1588,6 +1632,34 @@ void BenMenu::AddEnhancements() {
"- Skip: Instantly win the race.\n")
.DefaultIndex(GoronRaceDifficultyOptions::GORON_RACE_DIFFICULTY_VANILLA)
.ComboVec(&goronRaceDifficultyOptions));
AddWidget(path, "Swamp Boat Archery Target Score", WIDGET_CVAR_SLIDER_INT)
.CVar("gEnhancements.Minigames.BoatArcheryScore")
.Options(IntSliderOptions()
.Tooltip("Sets the initial target score of the Swamp Boat Archery minigame. The target score "
"gets set the first time you play the minigame in each cycle.")
.Min(1)
.Max(50)
.DefaultValue(20));
AddWidget(path, "Koume's Health", WIDGET_CVAR_SLIDER_INT)
.CVar("gEnhancements.Minigames.BoatArcheryHealth")
.PreFunc([](WidgetInfo& info) {
if (mBenMenu->disabledMap.at(DISABLE_FOR_KOUME_INVINCIBLE).active) {
info.activeDisables.push_back(DISABLE_FOR_KOUME_INVINCIBLE);
}
})
.Options(IntSliderOptions()
.Tooltip("Sets Koume's health in the Swamp Boat Archery minigame. If Koume is hit this many "
"times, the minigame will end.")
.Min(1)
.Max(30)
.DefaultValue(10));
AddWidget(path, "Invincible", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Minigames.BoatArcheryInvincible")
.Options(CheckboxOptions().Tooltip("Koume's health does not decrease when hit."));
AddWidget(path, "Treasure Chest Shop Show Full Maze", WIDGET_CVAR_CHECKBOX)
.CVar("gEnhancements.Minigames.TreasureChestShopShowFullMaze")
.Options(CheckboxOptions().Tooltip("Shows the entire maze layout in the Treasure Chest Shop minigame "
"instead of only revealing tiles near Link."));

path.column = SECTION_COLUMN_3;
AddWidget(path, "Other", WIDGET_SEPARATOR_TEXT);
Expand Down Expand Up @@ -1978,6 +2050,11 @@ void BenMenu::InitElement() {
return !CVarGetInteger("gAudioEditor.LinkVoiceFreqMultiplier.Enable", 0);
},
"Enable Link's Voice Pitch Multiplier is Disabled" } },
{ DISABLE_FOR_KOUME_INVINCIBLE,
{ [](disabledInfo& info) -> bool {
return CVarGetInteger("gEnhancements.Minigames.BoatArcheryInvincible", 0);
},
"Koume is Invincible" } },
};
}

Expand Down
9 changes: 6 additions & 3 deletions mm/2s2h/BenGui/InputViewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,12 +177,15 @@ void InputViewer::DrawElement() {
ImVec2(scaledBGSize.x,
scaledBGSize.y + (showLeftAnalogAngles || showRightAnalogAngles ? 15 * scale * maxScale : 0)));
} else {

ImGui::SetNextWindowSize(ImVec2(scaledBGSize.x + 20, scaledBGSize.y + 20));

ImGui::SetNextWindowContentSize(
ImVec2(mainPos.x + size.x - scaledBGSize.x - 30, mainPos.y + size.y - scaledBGSize.y - 30));
}

ImGui::SetNextWindowPos(
ImVec2(mainPos.x + size.x - scaledBGSize.x - 30, mainPos.y + size.y - scaledBGSize.y - 30),
ImVec2(mainPos.x + size.x - scaledBGSize.x - 30, mainPos.y + size.y - scaledBGSize.y - 50),
ImGuiCond_FirstUseEver);

ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0, 0, 0, 0));
Expand Down Expand Up @@ -403,7 +406,7 @@ void InputViewer::DrawElement() {
if (showLeftAnalogAngles) {
ImGui::SetCursorPos(ImVec2(
aPos.x + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("LeftAnalogAngles.HortizontalOffset"), 0) * scale,
aPos.y + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("LeftAnalogAngles.VerticalOffset"), 0) * scale));
aPos.y + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("LeftAnalogAngles.VerticalOffset"), 173) * scale));
// Scale font with input viewer scale
float oldFontScale = ImGui::GetFont()->Scale;
ImGui::GetFont()->Scale *= scale * CVarGetFloat(CVAR_INPUT_VIEWER("LeftAnalogAngles.Scale"), 1.0f);
Expand Down Expand Up @@ -449,7 +452,7 @@ void InputViewer::DrawElement() {
if (showRightAnalogAngles) {
ImGui::SetCursorPos(ImVec2(
aPos.x + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("RightAnalogAngles.HortizontalOffset"), 170) * scale,
aPos.y + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("RightAnalogAngles.VerticalOffset"), 0) * scale));
aPos.y + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("RightAnalogAngles.VerticalOffset"), 173) * scale));
// Scale font with input viewer scale
float oldFontScale = ImGui::GetFont()->Scale;
ImGui::GetFont()->Scale *= scale * CVarGetFloat(CVAR_INPUT_VIEWER("RightAnalogAngles.Scale"), 1.0f);
Expand Down
1 change: 1 addition & 0 deletions mm/2s2h/BenGui/MenuTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ typedef enum {
DISABLE_FOR_ADVANCED_RESOLUTION_OFF,
DISABLE_FOR_VERTICAL_RESOLUTION_OFF,
DISABLE_FOR_LINKS_VOICE_PITCH_MULTIPLIER_OFF,
DISABLE_FOR_KOUME_INVINCIBLE,
} DisableOption;

struct WidgetInfo;
Expand Down
Loading
Loading