diff --git a/include/dusk/settings.h b/include/dusk/settings.h index 5fd53ce289..c48571e01b 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -234,6 +234,7 @@ struct UserSettings { ConfigVar fastSpinner; ConfigVar freeMagicArmor; ConfigVar invincibleEnemies; + ConfigVar invincibleLink; // Technical ConfigVar restoreWiiGlitches; diff --git a/src/d/actor/d_a_alink_damage.inc b/src/d/actor/d_a_alink_damage.inc index bccdbf7381..f78ac4c491 100644 --- a/src/d/actor/d_a_alink_damage.inc +++ b/src/d/actor/d_a_alink_damage.inc @@ -202,7 +202,12 @@ int daAlink_c::setDamagePoint(int i_dmgAmount, BOOL i_checkZoraMag, BOOL i_setDm if (!mpHIO->mDamage.m.mInvincible && g_debugHpMode == 0) #endif { - dComIfGp_setItemLifeCount(-i_dmgAmount, 0); +#if TARGET_PC + if (!dusk::getSettings().game.invincibleLink) +#endif + { + dComIfGp_setItemLifeCount(-i_dmgAmount, 0); + } } #if TARGET_PC @@ -490,6 +495,12 @@ BOOL daAlink_c::checkDamageAction() { return 0; } +#if TARGET_PC + if (dusk::getSettings().game.invincibleLink) { + return checkWolfBarrierHitReverse(); + } +#endif + if (mDamageTimer != 0) { return checkWolfBarrierHitReverse(); } diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index 3f189f0359..4a81641d0c 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -127,6 +127,7 @@ UserSettings g_userSettings = { .fastSpinner {"game.fastSpinner", false}, .freeMagicArmor {"game.freeMagicArmor", false}, .invincibleEnemies {"game.invincibleEnemies", false}, + .invincibleLink {"game.invincibleLink", false}, // Technical .restoreWiiGlitches {"game.restoreWiiGlitches", false}, @@ -284,6 +285,7 @@ void registerSettings() { Register(g_userSettings.game.superClawshot); Register(g_userSettings.game.alwaysGreatspin); Register(g_userSettings.game.invincibleEnemies); + Register(g_userSettings.game.invincibleLink); Register(g_userSettings.game.enableFrameInterpolation); Register(g_userSettings.game.enableGyroAim); Register(g_userSettings.game.enableGyroRollgoal); diff --git a/src/dusk/ui/settings.cpp b/src/dusk/ui/settings.cpp index 826a87c144..e58bd08bfc 100644 --- a/src/dusk/ui/settings.cpp +++ b/src/dusk/ui/settings.cpp @@ -213,6 +213,7 @@ void reset_for_speedrun_mode() { getSettings().game.fastSpinner.setSpeedrunValue(false); getSettings().game.freeMagicArmor.setSpeedrunValue(false); getSettings().game.invincibleEnemies.setSpeedrunValue(false); + getSettings().game.invincibleLink.setSpeedrunValue(false); getSettings().game.pauseOnFocusLost.setSpeedrunValue(false); aurora_set_pause_on_focus_lost(false); @@ -1269,6 +1270,8 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) { "Lets the magic armor work without consuming rupees."); addCheat("Invincible Enemies", getSettings().game.invincibleEnemies, "Prevents enemies from taking damage."); + addCheat("Invincible Link", getSettings().game.invincibleLink, + "Makes Link ignore all incoming damage."); }); add_tab("Interface", [this](Rml::Element* content) {