diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 1d7adf8fa..a72780496 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -387,6 +387,7 @@ void DrawCheatsMenu() { UIWidgets::CVarCheckbox("Infinite Magic", "gCheats.InfiniteMagic"); UIWidgets::CVarCheckbox("Infinite Rupees", "gCheats.InfiniteRupees"); UIWidgets::CVarCheckbox("Infinite Consumables", "gCheats.InfiniteConsumables"); + UIWidgets::CVarCheckbox("Unbreakable Razor Sword", "gCheats.UnbreakableRazorSword"); if (UIWidgets::CVarCheckbox("Moon Jump on L", "gCheats.MoonJumpOnL", { .tooltip = "Holding L makes you float into the air" })) { diff --git a/mm/2s2h/Enhancements/Cheats/UnbreakableRazorSword.cpp b/mm/2s2h/Enhancements/Cheats/UnbreakableRazorSword.cpp new file mode 100644 index 000000000..f1407f25f --- /dev/null +++ b/mm/2s2h/Enhancements/Cheats/UnbreakableRazorSword.cpp @@ -0,0 +1,10 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" + +void RegisterUnbreakableRazorSword() { + REGISTER_VB_SHOULD(GI_VB_LOWER_RAZOR_SWORD_DURABILITY, { + if (CVarGetInteger("gEnhancements.Cheats.UnbreakableRazorSword", 0)) { + *should = false; + } + }); +} diff --git a/mm/2s2h/Enhancements/Cheats/UnbreakableRazorSword.h b/mm/2s2h/Enhancements/Cheats/UnbreakableRazorSword.h new file mode 100644 index 000000000..84c9f18aa --- /dev/null +++ b/mm/2s2h/Enhancements/Cheats/UnbreakableRazorSword.h @@ -0,0 +1,6 @@ +#ifndef CHEATS_UNBREAKABLE_RAZOR_SWORD_H +#define CHEATS_UNBREAKABLE_RAZOR_SWORD_H + +void RegisterUnbreakableRazorSword(); + +#endif // CHEATS_UNBREAKABLE_RAZOR_SWORD_H diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 724836023..499d7d21f 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -3,6 +3,7 @@ #include "Cheats/MoonJump.h" #include "Cheats/Infinite.h" +#include "Cheats/UnbreakableRazorSword.h" #include "Cycle/EndOfCycle.h" #include "Masks/FierceDeityAnywhere.h" #include "Masks/NoBlastMaskCooldown.h" diff --git a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h index 3535b8802..736b1e31d 100644 --- a/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h +++ b/mm/2s2h/Enhancements/GameInteractor/GameInteractor.h @@ -32,6 +32,7 @@ typedef enum { GI_VB_SHOW_TITLE_CARD, GI_VB_PLAY_ENTRANCE_CS, GI_VB_DISABLE_FD_MASK, + GI_VB_LOWER_RAZOR_SWORD_DURABILITY, GI_VB_SET_BLAST_MASK_COOLDOWN_TIMER, GI_VB_PATCH_SIDEROLL, GI_VB_PREVENT_MASK_TRANSFORMATION_CS, diff --git a/mm/src/overlays/actors/ovl_player_actor/z_player.c b/mm/src/overlays/actors/ovl_player_actor/z_player.c index b402dc7ce..5559e8654 100644 --- a/mm/src/overlays/actors/ovl_player_actor/z_player.c +++ b/mm/src/overlays/actors/ovl_player_actor/z_player.c @@ -10033,7 +10033,9 @@ s32 func_8083FF30(PlayState* play, Player* this) { s32 func_8083FFEC(PlayState* play, Player* this) { if (this->heldItemAction == PLAYER_IA_SWORD_RAZOR) { if (gSaveContext.save.saveInfo.playerData.swordHealth > 0) { - gSaveContext.save.saveInfo.playerData.swordHealth--; + if (GameInteractor_Should(GI_VB_LOWER_RAZOR_SWORD_DURABILITY, true, NULL)) { + gSaveContext.save.saveInfo.playerData.swordHealth--; + } if (gSaveContext.save.saveInfo.playerData.swordHealth <= 0) { Item_Give(play, ITEM_SWORD_KOKIRI); Player_UseItem(play, this, ITEM_SWORD_KOKIRI);