Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 14 additions & 0 deletions include/dusk/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ enum class MenuScaling : u8 {
Dusklight = 2,
};

enum class ZoraArmorMode : u8 {
Normal = 0,
Cosmetic = 1,
Mask = 2,
Cosmetic_Mask = 3,
};

enum class MagicArmorMode : u8 {
NORMAL = 0,
ON_DAMAGE = 1,
Expand Down Expand Up @@ -116,6 +123,12 @@ struct ConfigEnumRange<MenuScaling> {
static constexpr auto max = MenuScaling::Dusklight;
};

template <>
struct ConfigEnumRange<ZoraArmorMode> {
static constexpr auto min = ZoraArmorMode::Normal;
static constexpr auto max = ZoraArmorMode::Cosmetic_Mask;
};

template <>
struct ConfigEnumRange<MagicArmorMode> {
static constexpr auto min = MagicArmorMode::NORMAL;
Expand Down Expand Up @@ -264,6 +277,7 @@ struct UserSettings {
ConfigVar<bool> canTransformAnywhere;
ConfigVar<bool> fastRoll;
ConfigVar<bool> fastSpinner;
ConfigVar<ZoraArmorMode> zoraArmorMode;
ConfigVar<MagicArmorMode> armorRupeeDrain;
ConfigVar<bool> invincibleEnemies;

Expand Down
6 changes: 6 additions & 0 deletions src/d/actor/d_a_alink_damage.inc
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,12 @@ f32 daAlink_c::damageMagnification(BOOL i_checkZoraMag, int param_1) {
}

if (checkZoraWearAbility() && i_checkZoraMag) {
#if TARGET_PC
if (dusk::getSettings().game.zoraArmorMode.getValue() == dusk::ZoraArmorMode::Cosmetic ||
dusk::getSettings().game.zoraArmorMode.getValue() == dusk::ZoraArmorMode::Cosmetic_Mask) {
return base_mag;
}
#endif
return 10.0f * base_mag;
}

Expand Down
6 changes: 6 additions & 0 deletions src/d/actor/d_a_alink_swim.inc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
#include "f_op/f_op_kankyo_mng.h"

BOOL daAlink_c::checkZoraWearMaskDraw() {
#if TARGET_PC
if (dusk::getSettings().game.zoraArmorMode.getValue() == dusk::ZoraArmorMode::Mask ||
dusk::getSettings().game.zoraArmorMode.getValue() == dusk::ZoraArmorMode::Cosmetic_Mask) {
return checkZoraWearAbility();
}
#endif
return checkZoraWearAbility() && !checkNoResetFlg0(FLG0_SWIM_UP);
}

Expand Down
1 change: 1 addition & 0 deletions src/dusk/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,7 @@ template class ConfigImpl<FrameInterpMode>;
template class ConfigImpl<TouchTargeting>;
template class ConfigImpl<MenuScaling>;
template class ConfigImpl<Resampler>;
template class ConfigImpl<ZoraArmorMode>;
template class ConfigImpl<MagicArmorMode>;
template class ConfigImpl<ui::ControlLayout>;

Expand Down
2 changes: 2 additions & 0 deletions src/dusk/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ UserSettings g_userSettings = {
.canTransformAnywhere {"game.canTransformAnywhere", false},
.fastRoll {"game.fastRoll", false},
.fastSpinner {"game.fastSpinner", false},
.zoraArmorMode {"game.zoraArmorMode", ZoraArmorMode::Normal},
.armorRupeeDrain {"game.armorRupeeDrain", MagicArmorMode::NORMAL},
.invincibleEnemies {"game.invincibleEnemies", false},

Expand Down Expand Up @@ -284,6 +285,7 @@ void registerSettings() {
Register(g_userSettings.game.enableFastIronBoots);
Register(g_userSettings.game.canTransformAnywhere);
Register(g_userSettings.game.fastRoll);
Register(g_userSettings.game.zoraArmorMode);
Register(g_userSettings.game.armorRupeeDrain);
Register(g_userSettings.game.restoreWiiGlitches);
Register(g_userSettings.game.enableLinkDollRotation);
Expand Down
1 change: 1 addition & 0 deletions src/dusk/speedrun.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ void resetForSpeedrunMode() {
getSettings().game.canTransformAnywhere.setSpeedrunValue(false);
getSettings().game.fastRoll.setSpeedrunValue(false);
getSettings().game.fastSpinner.setSpeedrunValue(false);
getSettings().game.zoraArmorMode.setSpeedrunValue(ZoraArmorMode::Normal);
getSettings().game.armorRupeeDrain.setSpeedrunValue(MagicArmorMode::NORMAL);
getSettings().game.invincibleEnemies.setSpeedrunValue(false);

Expand Down
41 changes: 41 additions & 0 deletions src/dusk/ui/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ constexpr std::array kMenuScalingModeLabels = {
"Dusklight",
};

constexpr std::array kZoraArmorModes = {
"Normal",
"Cosmetic",
"Mask",
"Cosmetic + Mask",
};

constexpr std::array kMagicArmorModes = {
"Normal",
"On Damage",
Expand Down Expand Up @@ -1344,6 +1351,40 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) {
"Makes Link's roll animation and movement twice as fast.");
addCheat("Fast Spinner", getSettings().game.fastSpinner,
"Speeds up Spinner movement while holding R.");

leftPane.register_control(
leftPane.add_select_button({
.key = "Zora Armor Behavior",
.getValue =
[] {
return kZoraArmorModes[static_cast<u8>(getSettings().game.zoraArmorMode.getValue())];
},
.isDisabled = [] { return getSettings().game.speedrunMode.getValue(); },
.isModified =
[] {
return getSettings().game.zoraArmorMode.getValue() !=
getSettings().game.zoraArmorMode.getDefaultValue();
},
}),
rightPane, [](Pane& pane) {
for (int i = 0; i < kZoraArmorModes.size(); i++) {
pane.add_button({
.text = kZoraArmorModes[i],
.isSelected =
[i] {
return getSettings().game.zoraArmorMode.getValue() == static_cast<ZoraArmorMode>(i);
},
})
.on_pressed([i] {
mDoAud_seStartMenu(kSoundItemChange);
getSettings().game.zoraArmorMode.setValue(static_cast<ZoraArmorMode>(i));
config::save();
});
}
pane.add_rml(
"<br/>Control the behavior of the Zora Armor.");
});

leftPane.register_control(
leftPane.add_select_button({
.key = "Magic Armor Behavior",
Expand Down
Loading