summaryrefslogtreecommitdiff
path: root/mm/src/code
diff options
context:
space:
mode:
authorGarrett Cox <garrettjcox@gmail.com>2024-08-17 10:05:45 -0500
committerGarrett Cox <garrettjcox@gmail.com>2024-09-14 08:55:15 -0500
commitb24fe23ccd877a628056b9eb0dbe083a532ee32b (patch)
treec6b5285db773e64913ad025e4751f4ce068185cd /mm/src/code
parentb430d68235c28ddafb37202e071da5d8c449b2c8 (diff)
Implement event queue for handling various events like giving custom items or transitions
Diffstat (limited to 'mm/src/code')
-rw-r--r--mm/src/code/z_draw.c4
-rw-r--r--mm/src/code/z_en_item00.c5
-rw-r--r--mm/src/code/z_parameter.c6
3 files changed, 14 insertions, 1 deletions
diff --git a/mm/src/code/z_draw.c b/mm/src/code/z_draw.c
index 1d5b967d7..bc5da705d 100644
--- a/mm/src/code/z_draw.c
+++ b/mm/src/code/z_draw.c
@@ -90,6 +90,8 @@
#include "assets/objects/object_bsmask/object_bsmask.h"
#include "assets/objects/object_st/object_st.h"
+#include "2s2h/Enhancements/GameInteractor/GameInteractor.h"
+
void GetItem_DrawBombchu(PlayState* play, s16 drawId);
void GetItem_DrawPoes(PlayState* play, s16 drawId);
void GetItem_DrawFairyBottle(PlayState* play, s16 drawId);
@@ -371,6 +373,8 @@ static DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawOpa0Xlu1, { gGiPictoBoxFrameDL, gGiPictoBoxBodyAndLensDL } },
// GID_MASK_FIERCE_DEITY, OBJECT_GI_MASK03
{ GetItem_DrawOpa01, { gGiFierceDeityMaskFaceDL, gGiFierceDeityMaskHairAndHatDL } },
+ // GID_SHIP
+ { GameInteractor_GetItemDraw, {} },
};
/**
diff --git a/mm/src/code/z_en_item00.c b/mm/src/code/z_en_item00.c
index d22576ad7..934387253 100644
--- a/mm/src/code/z_en_item00.c
+++ b/mm/src/code/z_en_item00.c
@@ -4,6 +4,7 @@
#include "objects/object_gi_hearts/object_gi_hearts.h"
#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
#include "overlays/actors/ovl_En_Elforg/z_en_elforg.h"
+#include "2s2h/Enhancements/GameInteractor/GameInteractor.h"
#define FLAGS 0x00000000
@@ -542,6 +543,10 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
}
}
+ if (!GameInteractor_Should(GI_VB_GIVE_ITEM_FROM_ITEM00, true, this)) {
+ return;
+ }
+
if (play->gameOverCtx.state != GAMEOVER_INACTIVE) {
return;
}
diff --git a/mm/src/code/z_parameter.c b/mm/src/code/z_parameter.c
index 464d0e2ed..848661ff1 100644
--- a/mm/src/code/z_parameter.c
+++ b/mm/src/code/z_parameter.c
@@ -4005,7 +4005,7 @@ u8 Item_GiveImpl(PlayState* play, u8 item) {
// #region 2S2H [Enhancements] This is our wrapper around the original Item_Give function for hooking purposes
u8 Item_Give(PlayState* play, u8 item) {
- if (!GameInteractor_ShouldItemGive(item)) {
+ if (!GameInteractor_ShouldItemGive(item) || item == ITEM_SHIP) {
return ITEM_NONE;
}
@@ -4021,6 +4021,10 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
u8 slot;
u8 bottleSlot;
+ if (item == ITEM_SHIP) {
+ return ITEM_NONE;
+ }
+
slot = SLOT(item);
if (item >= ITEM_DEKU_STICKS_5) {
slot = SLOT(sExtraItemBases[item - ITEM_DEKU_STICKS_5]);