Merge branch 'TwilitRealm:main' into hold-to-mash

This commit is contained in:
baxlek
2026-09-03 08:52:50 -05:00
committed by GitHub
122 changed files with 5455 additions and 715 deletions
+26 -45
View File
@@ -231,7 +231,7 @@ Rml::String configured_data_path_display_name() {
return "(none)";
}
auto display = borealis::file_select::display_name(path);
auto display = borealis::io::display_name(path);
if (display.empty()) {
return path;
}
@@ -440,24 +440,15 @@ SelectButton& config_int_select(Pane& leftPane, Pane& rightPane, ConfigVar<int>&
return button;
}
template <typename T>
void graphics_tuner_control(Window& window, Pane& leftPane, Pane& rightPane, ConfigVar<T>& var,
void graphics_tuner_control(Window& window, Pane& leftPane, Pane& rightPane,
const GraphicsTunerProps& props) {
const auto setting = GraphicsSetting::of(props.option);
leftPane.register_control(
leftPane
.add_select_button({
.key = props.title,
.getValue =
[&var, option = props.option] {
if constexpr (std::is_same_v<T, float>) {
return format_graphics_setting_value(
option, float_setting_percent(var));
} else {
return format_graphics_setting_value(
option, static_cast<int>(var.getValue()));
}
},
.isModified = [&var] { return var.getValue() != var.getDefaultValue(); },
.getValue = [setting] { return setting.text(); },
.isModified = [setting] { return setting.isModified(); },
.submit = false,
})
.on_nav_command([&window, props](Rml::Event&, NavCommand cmd) {
@@ -493,7 +484,7 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) {
if (path.empty()) {
display = "(none)";
} else {
display = borealis::file_select::display_name(path);
display = borealis::io::display_name(path);
if (display.empty()) {
display = path;
}
@@ -539,6 +530,7 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) {
{
.parentWindow = aurora::window::get_sdl_window(),
.defaultLocation = defaultLocation,
.requireRealPath = true,
},
&data_folder_dialog_callback);
});
@@ -778,75 +770,50 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) {
leftPane.add_section("Resolution");
graphics_tuner_control(*this, leftPane, rightPane,
getSettings().game.internalResolutionScale,
GraphicsTunerProps{
.option = GraphicsOption::InternalResolution,
.title = "Internal Resolution",
.helpText = kInternalResolutionHelpText,
.valueMin = 0,
.valueMax = 12,
.defaultValue = 0,
});
graphics_tuner_control(*this, leftPane, rightPane,
getSettings().game.shadowResolutionMultiplier,
GraphicsTunerProps{
.option = GraphicsOption::ShadowResolution,
.title = "Shadow Resolution",
.helpText = kShadowResolutionHelpText,
.valueMin = 1,
.valueMax = 8,
.defaultValue = 1,
});
graphics_tuner_control(*this, leftPane, rightPane, getSettings().game.resampler,
graphics_tuner_control(*this, leftPane, rightPane,
GraphicsTunerProps{
.option = GraphicsOption::Resampler,
.title = "Output Resampling",
.helpText = kResamplerHelpText,
.valueMin = static_cast<int>(Resampler::Bilinear),
.valueMax = static_cast<int>(Resampler::Area),
.defaultValue = static_cast<int>(Resampler::Bilinear),
});
leftPane.add_section("Post-Processing");
graphics_tuner_control(*this, leftPane, rightPane, getSettings().game.bloomMode,
graphics_tuner_control(*this, leftPane, rightPane,
GraphicsTunerProps{
.option = GraphicsOption::BloomMode,
.title = "Bloom",
.helpText = kBloomHelpText,
.valueMin = static_cast<int>(BloomMode::Off),
.valueMax = static_cast<int>(BloomMode::Dusk),
.defaultValue = static_cast<int>(BloomMode::Classic),
});
graphics_tuner_control(*this, leftPane, rightPane, getSettings().game.bloomMultiplier,
graphics_tuner_control(*this, leftPane, rightPane,
GraphicsTunerProps{
.option = GraphicsOption::BloomMultiplier,
.title = "Bloom Brightness",
.helpText = kBloomBrightnessHelpText,
.valueMin = 0,
.valueMax = 100,
.defaultValue = 100,
.step = 10,
});
graphics_tuner_control(*this, leftPane, rightPane, getSettings().game.depthOfFieldMode,
graphics_tuner_control(*this, leftPane, rightPane,
GraphicsTunerProps{
.option = GraphicsOption::DepthOfFieldMode,
.title = "Depth of Field",
.helpText = kDepthOfFieldHelpText,
.valueMin = static_cast<int>(DepthOfFieldMode::Off),
.valueMax = static_cast<int>(DepthOfFieldMode::Dusk),
.defaultValue = static_cast<int>(DepthOfFieldMode::Classic),
});
leftPane.add_section("Rendering");
graphics_tuner_control(*this, leftPane, rightPane,
getSettings().game.enableTextureReplacements,
GraphicsTunerProps{
.option = GraphicsOption::TextureReplacements,
.title = "Enable Texture Replacements",
.helpText = kTextureReplacementHelpText,
.valueMin = static_cast<int>(false),
.valueMax = static_cast<int>(true),
.defaultValue = static_cast<int>(false),
});
leftPane.register_control(
leftPane.add_select_button({
@@ -1241,7 +1208,7 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) {
{
.key = "Speedrun Mode",
.helpText =
"Enables speedrunning options while restricting certain gameplay modifiers.",
"Enables Speedrun game mode option in the Dusklight launch menu.",
.onChange =
[this](bool enabled) {
if (enabled) {
@@ -1558,6 +1525,20 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) {
"Recording Mode",
"Disables the game HUD and all background music.<br/><br/>Useful for recording footage.");
});
add_tab("Tools", [this](Rml::Element* content) {
auto& leftPane = add_child<Pane>(content, Pane::Type::Controlled);
auto& rightPane = add_child<Pane>(content, Pane::Type::Uncontrolled);
leftPane.add_section("Link");
add_speedrun_disabled_option(leftPane, rightPane, getSettings().game.enableMoveLinkCombo,
"Move Link (L+R+Y)",
"Enables the L+R+Y button combo to toggle freely repositioning Link.");
add_speedrun_disabled_option(leftPane, rightPane, getSettings().game.enableTeleportCombo,
"Teleport (R+D-pad Up/Down)",
"R+D-pad Up stores Link's current position.<br/>"
"R+D-pad Down teleports Link back to it.");
});
}
void SettingsWindow::update() {