From 2d8bc175fef010cff5faba1c21e2dffa3643e624 Mon Sep 17 00:00:00 2001 From: Caladius Date: Sun, 2 Jun 2024 23:27:33 -0400 Subject: [PATCH] [Enhancement] Blast Mask with Powder Keg (#642) * Blast Mask adds Powder Keg explosive property. * Alphabetical Menu Listing + clang * Apply suggestions from code review --------- Co-authored-by: Garrett Cox --- mm/2s2h/BenGui/BenMenuBar.cpp | 1 + mm/2s2h/Enhancements/Enhancements.cpp | 1 + mm/2s2h/Enhancements/Enhancements.h | 1 + mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp | 31 +++++++++++++++++++++ mm/2s2h/Enhancements/Masks/BlastMaskKeg.h | 6 ++++ 5 files changed, 40 insertions(+) create mode 100644 mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp create mode 100644 mm/2s2h/Enhancements/Masks/BlastMaskKeg.h diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 266bf22ed..35d3f5778 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -536,6 +536,7 @@ void DrawEnhancementsMenu() { } if (UIWidgets::BeginMenu("Masks")) { + UIWidgets::CVarCheckbox("Blast Mask has Powder Keg Force", "gEnhancements.Masks.BlastMaskKeg"); UIWidgets::CVarCheckbox("Fast Transformation", "gEnhancements.Masks.FastTransformation"); UIWidgets::CVarCheckbox("Fierce Deity's Mask Anywhere", "gEnhancements.Masks.FierceDeitysAnywhere", { .tooltip = "Allow using Fierce Deity's mask outside of boss rooms." }); diff --git a/mm/2s2h/Enhancements/Enhancements.cpp b/mm/2s2h/Enhancements/Enhancements.cpp index 87a119155..0b2d2f794 100644 --- a/mm/2s2h/Enhancements/Enhancements.cpp +++ b/mm/2s2h/Enhancements/Enhancements.cpp @@ -32,6 +32,7 @@ void InitEnhancements() { // Masks RegisterFastTransformation(); RegisterFierceDeityAnywhere(); + RegisterBlastMaskKeg(); RegisterNoBlastMaskCooldown(); // Minigames diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 9b78c6aca..5ad8cfb4a 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -12,6 +12,7 @@ #include "Cheats/UnrestrictedItems.h" #include "Cycle/EndOfCycle.h" #include "Equipment/SkipMagicArrowEquip.h" +#include "Masks/BlastMaskKeg.h" #include "Masks/FierceDeityAnywhere.h" #include "Masks/NoBlastMaskCooldown.h" #include "Masks/FastTransformation.h" diff --git a/mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp new file mode 100644 index 000000000..b883822ec --- /dev/null +++ b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.cpp @@ -0,0 +1,31 @@ +#include +#include "Enhancements/GameInteractor/GameInteractor.h" +#include "global.h" + +static uint32_t bombType; + +extern "C" { +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" +EquipSlot func_8082FDC4(void); +} + +void RegisterBlastMaskKeg() { + GameInteractor::Instance->RegisterGameHookForID( + ACTOR_EN_BOM, [](Actor* actor, bool* should) { + Player* player = GET_PLAYER(gPlayState); + if (CVarGetInteger("gEnhancements.Masks.BlastMaskKeg", 0)) { + ItemId item; + EquipSlot i = func_8082FDC4(); + + i = ((i >= EQUIP_SLOT_A) && (player->transformation == PLAYER_FORM_FIERCE_DEITY) && + (player->heldItemAction != PLAYER_IA_SWORD_TWO_HANDED)) + ? EQUIP_SLOT_B + : i; + + item = Player_GetItemOnButton(gPlayState, player, i); + if (item == ITEM_F0) { + actor->shape.rot.x = BOMB_EXPLOSIVE_TYPE_POWDER_KEG; + } + } + }); +} diff --git a/mm/2s2h/Enhancements/Masks/BlastMaskKeg.h b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.h new file mode 100644 index 000000000..a32a4726b --- /dev/null +++ b/mm/2s2h/Enhancements/Masks/BlastMaskKeg.h @@ -0,0 +1,6 @@ +#ifndef EQUIPMENT_BLAST_MASK_KEG_H +#define EQUIPMENT_BLAST_MASK_KEG_H + +void RegisterBlastMaskKeg(); + +#endif // EQUIPMENT_BLAST_MASK_KEG_H