From 4a945872d7b514ff51523a97a902e21c44c4fb9a Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 20 Jul 2022 12:27:02 +0300 Subject: [PATCH 1/3] Match sub_080878CC --- asm/non_matching/object20/sub_080878CC.inc | 104 --------------------- src/object/object20.c | 20 ++-- 2 files changed, 10 insertions(+), 114 deletions(-) delete mode 100644 asm/non_matching/object20/sub_080878CC.inc diff --git a/asm/non_matching/object20/sub_080878CC.inc b/asm/non_matching/object20/sub_080878CC.inc deleted file mode 100644 index fb452339..00000000 --- a/asm/non_matching/object20/sub_080878CC.inc +++ /dev/null @@ -1,104 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x10 - adds r7, r0, #0 - movs r1, #0x2e - ldrsh r0, [r7, r1] - str r0, [sp] - movs r0, #0x32 - ldrsh r2, [r7, r0] - str r2, [sp, #4] - adds r0, r7, #0 - adds r0, #0x38 - ldrb r0, [r0] - mov r8, r0 - movs r0, #0x10 - rsbs r0, r0, #0 - mov r1, r8 - lsls r1, r1, #0x18 - str r1, [sp, #8] -_080878F8: - movs r2, #0x10 - rsbs r2, r2, #0 - mov sb, r2 - ldr r1, [sp] - adds r1, r1, r0 - mov sl, r1 - adds r0, #0x10 - str r0, [sp, #0xc] - mov r6, sl -_0808790A: - ldr r2, _0808795C @ =gRoomControls - ldrh r0, [r2, #6] - subs r0, r6, r0 - lsrs r4, r0, #4 - movs r0, #0x3f - ands r4, r0 - ldr r5, [sp, #4] - add r5, sb - ldrh r0, [r2, #8] - subs r0, r5, r0 - lsrs r0, r0, #4 - movs r1, #0x3f - ands r0, r1 - lsls r0, r0, #6 - orrs r4, r0 - adds r0, r4, #0 - ldr r2, [sp, #8] - lsrs r1, r2, #0x18 - bl sub_080B1AE0 - cmp r0, #0x2e - bne _08087970 - adds r0, r4, #0 - mov r1, r8 - bl GetTileType - adds r1, r0, #0 - movs r0, #0xda - lsls r0, r0, #2 - cmp r1, r0 - bhi _08087960 - subs r0, #1 - cmp r1, r0 - blo _08087960 - adds r0, r7, #0 - movs r1, #3 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08008796 - b _0808797C - .align 2, 0 -_0808795C: .4byte gRoomControls -_08087960: - ldr r0, _0808796C @ =0x00004022 - adds r1, r4, #0 - mov r2, r8 - bl SetTile - b _0808797C - .align 2, 0 -_0808796C: .4byte 0x00004022 -_08087970: - adds r0, r7, #0 - movs r1, #3 - mov r2, sl - adds r3, r5, #0 - bl sub_08008796 -_0808797C: - movs r0, #0x10 - add sb, r0 - mov r1, sb - cmp r1, #0x10 - ble _0808790A - ldr r0, [sp, #0xc] - cmp r0, #0x10 - ble _080878F8 - add sp, #0x10 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/src/object/object20.c b/src/object/object20.c index cf8c1d55..41996212 100644 --- a/src/object/object20.c +++ b/src/object/object20.c @@ -59,13 +59,12 @@ void sub_08087888(Entity* this) { } } -NONMATCH("asm/non_matching/object20/sub_080878CC.inc", void sub_080878CC(Entity* this)) { +void sub_080878CC(Entity* this) { s32 x; s32 y; s32 itX; s32 itY; u32 layer; - u32 tileType; u32 pos; x = this->x.HALF.HI; @@ -74,13 +73,15 @@ NONMATCH("asm/non_matching/object20/sub_080878CC.inc", void sub_080878CC(Entity* for (itX = -0x10; itX < 0x11; itX += 0x10) { for (itY = -0x10; itY < 0x11; itY += 0x10) { pos = TILE((u32)x + itX, (u32)y + itY); - if (sub_080B1AE0(pos, layer) == 0x2e) { - tileType = GetTileType(pos, layer); - if (tileType == 0x368 || tileType == 0x367 - /*(tileType < 0x369) && (0x366 < tileType)*/) { - sub_08008796(this, 3, x + itX, y + itY); - } else { - SetTile(0x4022, pos, layer); + if (sub_080B1AE0(pos, (u8)layer) == 0x2e) { + switch (GetTileType(pos, layer)) { + case 0x368: + case 0x367: + sub_08008796(this, 3, x + itX, y + itY); + break; + default: + SetTile(0x4022, pos, layer); + break; } } else { sub_08008796(this, 3, x + itX, y + itY); @@ -88,4 +89,3 @@ NONMATCH("asm/non_matching/object20/sub_080878CC.inc", void sub_080878CC(Entity* } } } -END_NONMATCH From e03eec07b9d3e7ec1b17a7d41220436ee6a8f24e Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Thu, 21 Jul 2022 19:04:09 +0300 Subject: [PATCH 2/3] Match sub_08079C30 --- asm/non_matching/playerUtils/sub_08079C30.inc | 110 ------------------ src/playerUtils.c | 36 +++--- 2 files changed, 18 insertions(+), 128 deletions(-) delete mode 100644 asm/non_matching/playerUtils/sub_08079C30.inc diff --git a/asm/non_matching/playerUtils/sub_08079C30.inc b/asm/non_matching/playerUtils/sub_08079C30.inc deleted file mode 100644 index e1d80820..00000000 --- a/asm/non_matching/playerUtils/sub_08079C30.inc +++ /dev/null @@ -1,110 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - ldr r0, _08079C68 @ =gPlayerState - ldrb r1, [r0, #0x14] - adds r7, r0, #0 - cmp r1, #0 - beq _08079C44 - b _08079D40 -_08079C44: - ldr r1, [r7, #0x30] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08079D40 - movs r0, #0x80 - ands r1, r0 - cmp r1, #0 - bne _08079D36 - ldrb r0, [r7, #0x13] - subs r0, #0xd - cmp r0, #0x1d - bhi _08079CE8 - lsls r0, r0, #2 - ldr r1, _08079C6C @ =_08079C70 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08079C68: .4byte gPlayerState -_08079C6C: .4byte _08079C70 -_08079C70: @ jump table - .4byte _08079D36 @ case 0 - .4byte _08079D36 @ case 1 - .4byte _08079D36 @ case 2 - .4byte _08079D36 @ case 3 - .4byte _08079CE8 @ case 4 - .4byte _08079CE8 @ case 5 - .4byte _08079CE8 @ case 6 - .4byte _08079D36 @ case 7 - .4byte _08079CE8 @ case 8 - .4byte _08079CE8 @ case 9 - .4byte _08079D36 @ case 10 - .4byte _08079CE8 @ case 11 - .4byte _08079CE8 @ case 12 - .4byte _08079CE8 @ case 13 - .4byte _08079CE8 @ case 14 - .4byte _08079CE8 @ case 15 - .4byte _08079CE8 @ case 16 - .4byte _08079CE8 @ case 17 - .4byte _08079CE8 @ case 18 - .4byte _08079CE8 @ case 19 - .4byte _08079CE8 @ case 20 - .4byte _08079CE8 @ case 21 - .4byte _08079CE8 @ case 22 - .4byte _08079CE8 @ case 23 - .4byte _08079CE8 @ case 24 - .4byte _08079CE8 @ case 25 - .4byte _08079CE8 @ case 26 - .4byte _08079CE8 @ case 27 - .4byte _08079CE8 @ case 28 - .4byte _08079D36 @ case 29 -_08079CE8: - mov r8, r7 - mov r0, r8 - ldrb r4, [r0, #0x12] - movs r2, #1 - rsbs r2, r2, #0 - adds r0, r6, #0 - movs r1, #0 - bl GetRelativeCollisionTile - ldr r5, _08079D3C @ =gUnk_08007CAC - adds r1, r5, #0 - bl sub_08007DD6 - cmp r4, r0 - bne _08079D40 - mov r0, r8 - ldrb r4, [r0, #0x12] - adds r0, r6, #0 - movs r1, #2 - movs r2, #0 - bl GetRelativeCollisionTile - adds r1, r5, #0 - bl sub_08007DD6 - cmp r4, r0 - bne _08079D40 - ldrb r4, [r7, #0x12] - movs r1, #2 - rsbs r1, r1, #0 - adds r0, r6, #0 - movs r2, #0 - bl GetRelativeCollisionTile - adds r1, r5, #0 - bl sub_08007DD6 - cmp r4, r0 - bne _08079D40 -_08079D36: - movs r0, #1 - b _08079D42 - .align 2, 0 -_08079D3C: .4byte gUnk_08007CAC -_08079D40: - movs r0, #0 -_08079D42: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/src/playerUtils.c b/src/playerUtils.c index a45a7a6f..8e8388c6 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -1185,7 +1185,7 @@ void ClearPlayerState(void) { gPlayerState.field_0xe = 0; gPlayerState.field_0x11 = 0; gPlayerState.floor_type = SURFACE_NORMAL; - gPlayerState.floor_type_last = 0; + gPlayerState.floor_type_last = SURFACE_NORMAL; gPlayerState.field_0x14 = 0; gPlayerState.sword_state = 0; gPlayerState.dash_state = 0; @@ -1610,34 +1610,34 @@ void sub_08079BD8(Entity* this) { this->spritePriority.b0 = gPlayerEntity.spritePriority.b0; } -NONMATCH("asm/non_matching/playerUtils/sub_08079C30.inc", bool32 sub_08079C30(Entity* this)) { - if ((gPlayerState.field_0x14 == 0) && ((gPlayerState.flags & PL_FLAGS2) == 0)) { +bool32 sub_08079C30(Entity* param_1) { + if (gPlayerState.field_0x14 == 0 && (gPlayerState.flags & PL_FLAGS2) == 0) { if ((gPlayerState.flags & PL_MINISH) != 0) { return TRUE; } switch (gPlayerState.floor_type_last) { - case 0xd: - case 0x0e: - case 0x0f: - case 0x10: - case 0x14: - case 0x17: - case 0x2a: + case SURFACE_D: + case SURFACE_E: + case SURFACE_F: + case SURFACE_10: + case SURFACE_14: + case SURFACE_ICE: + case SURFACE_AUTO_LADDER: return TRUE; } - if (gPlayerState.floor_type == sub_08007DD6(GetRelativeCollisionTile(this, 0, -1), (u16*)gUnk_08007CAC)) { - if (gPlayerState.floor_type == sub_08007DD6(GetRelativeCollisionTile(this, 2, 0), (u16*)gUnk_08007CAC)) { - if (gPlayerState.floor_type == - sub_08007DD6(GetRelativeCollisionTile(this, -2, 0), (u16*)gUnk_08007CAC)) { - return TRUE; - } - } + if (gPlayerState.floor_type != sub_08007DD6(GetRelativeCollisionTile(param_1, 0, -1), (u16*)gUnk_08007CAC)) + return FALSE; + + if (gPlayerState.floor_type != sub_08007DD6(GetRelativeCollisionTile(param_1, 2, 0), (u16*)gUnk_08007CAC)) + return FALSE; + + if (gPlayerState.floor_type == sub_08007DD6(GetRelativeCollisionTile(param_1, -2, 0), (u16*)gUnk_08007CAC)) { + return TRUE; } } return FALSE; } -END_NONMATCH bool32 sub_08079D48(void) { if (!sub_08079C30(&gPlayerEntity)) { From b5ab963454438489b5fa462a0f19f693ca065574 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 22 Jul 2022 18:41:19 +0300 Subject: [PATCH 3/3] Match GiveItem --- asm/non_matching/game/GiveItem.inc | 314 ----------------------------- src/game.c | 149 +++++++++++++- 2 files changed, 148 insertions(+), 315 deletions(-) delete mode 100644 asm/non_matching/game/GiveItem.inc diff --git a/asm/non_matching/game/GiveItem.inc b/asm/non_matching/game/GiveItem.inc deleted file mode 100644 index 303a305f..00000000 --- a/asm/non_matching/game/GiveItem.inc +++ /dev/null @@ -1,314 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r7, r1, #0 - bl GetInventoryValue - adds r5, r0, #0 - lsls r1, r6, #3 - ldr r0, _08054010 @ =gItemMetaData - adds r4, r1, r0 - cmp r5, #0 - bne _08054014 - ldrh r0, [r4, #4] - mov r8, r0 - b _08054018 - .align 2, 0 -_08054010: .4byte gItemMetaData -_08054014: - ldrh r2, [r4, #6] - mov r8, r2 -_08054018: - adds r0, r6, #0 - bl ItemIsBottle - cmp r0, #0 - bne _08054034 - adds r0, r6, #0 - bl PutItemOnSlot - cmp r5, #0 - bne _08054034 - adds r0, r6, #0 - movs r1, #1 - bl SetInventoryValue -_08054034: - ldrb r0, [r4, #1] - cmp r0, #0x12 - bls _0805403C - b _0805427C -_0805403C: - lsls r0, r0, #2 - ldr r1, _08054048 @ =_0805404C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08054048: .4byte _0805404C -_0805404C: @ jump table - .4byte _0805427C @ case 0 - .4byte _08054098 @ case 1 - .4byte _080540A6 @ case 2 - .4byte _080540C0 @ case 3 - .4byte _08054104 @ case 4 - .4byte _0805414C @ case 5 - .4byte _08054154 @ case 6 - .4byte _08054194 @ case 7 - .4byte _080541B6 @ case 8 - .4byte _080541F0 @ case 9 - .4byte _08054212 @ case 10 - .4byte _080541F8 @ case 11 - .4byte _08054238 @ case 12 - .4byte _08054174 @ case 13 - .4byte _08054240 @ case 14 - .4byte _0805425C @ case 15 - .4byte _08054264 @ case 16 - .4byte _080541B0 @ case 17 - .4byte _0805417C @ case 18 -_08054098: - ldrb r0, [r4, #2] - bl ModHealth - movs r0, #0x71 - bl SoundReq - b _0805427C -_080540A6: - ldr r0, _080540BC @ =gUnk_080FD5A8 - ldrb r1, [r4, #2] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - bl ModRupees - movs r0, #0x6f - bl SoundReq - b _0805427C - .align 2, 0 -_080540BC: .4byte gUnk_080FD5A8 -_080540C0: - movs r5, #0 - movs r4, #0x1c - b _080540CA -_080540C6: - adds r4, r1, #1 - adds r5, #1 -_080540CA: - cmp r5, #3 - bls _080540D0 - b _0805427C -_080540D0: - adds r0, r4, #0 - bl GetInventoryValue - adds r1, r4, #0 - cmp r0, #0 - bne _080540C6 - adds r6, r4, #0 - ldr r0, _08054100 @ =gSave - adds r0, #0xb6 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, #0 - bne _080540EE - movs r0, #0x20 - strb r0, [r1] -_080540EE: - adds r0, r6, #0 - movs r1, #1 - bl SetInventoryValue - adds r0, r6, #0 - bl PutItemOnSlot - b _0805427C - .align 2, 0 -_08054100: .4byte gSave -_08054104: - movs r5, #0 - ldr r0, _08054144 @ =gSave - adds r2, r0, #0 - adds r2, #0xb6 - ldrb r1, [r2] - adds r3, r0, #0 - cmp r1, #0x20 - beq _08054126 - adds r1, r2, #0 -_08054116: - adds r5, #1 - cmp r5, #3 - bls _0805411E - b _0805427C -_0805411E: - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, #0x20 - bne _08054116 -_08054126: - cmp r5, #3 - bls _0805412C - b _0805427C -_0805412C: - adds r0, r3, #0 - adds r0, #0xb6 - adds r0, r5, r0 - strb r6, [r0] - adds r0, r6, #0 - movs r1, #1 - bl SetInventoryValue - ldr r0, _08054148 @ =0x00000109 - bl SoundReq - b _0805427C - .align 2, 0 -_08054144: .4byte gSave -_08054148: .4byte 0x00000109 -_0805414C: - movs r0, #1 - bl sub_080526F8 - b _0805424E -_08054154: - ldr r1, _08054168 @ =gSave - ldr r0, _0805416C @ =gArea - ldr r2, _08054170 @ =0x0000046C - adds r1, r1, r2 - ldrb r0, [r0, #3] - adds r1, r1, r0 - ldrb r0, [r1] - ldrb r2, [r4, #2] - orrs r0, r2 - b _0805427A - .align 2, 0 -_08054168: .4byte gSave -_0805416C: .4byte gArea -_08054170: .4byte 0x0000046C -_08054174: - movs r0, #0x72 - bl sub_0801E738 - b _0805427C -_0805417C: - cmp r6, #0xb - bne _0805418A - movs r0, #0xc - movs r1, #0 - bl SetInventoryValue - b _080541B0 -_0805418A: - movs r0, #0xb - movs r1, #0 - bl SetInventoryValue - b _080541B0 -_08054194: - cmp r6, #7 - bne _080541A2 - movs r0, #8 - movs r1, #0 - bl SetInventoryValue - b _080541AA -_080541A2: - movs r0, #7 - movs r1, #0 - bl SetInventoryValue -_080541AA: - movs r0, #0x63 - bl ModBombs -_080541B0: - bl LoadItemGfx - b _0805427C -_080541B6: - cmp r5, #0 - bne _080541CA - movs r0, #7 - movs r1, #1 - bl SetInventoryValue - movs r0, #7 - bl PutItemOnSlot - b _080541E2 -_080541CA: - ldr r0, _080541EC @ =gSave - adds r1, r0, #0 - adds r1, #0xae - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _080541E2 - movs r0, #3 - strb r0, [r1] -_080541E2: - movs r0, #0x63 - bl ModBombs - b _0805427C - .align 2, 0 -_080541EC: .4byte gSave -_080541F0: - ldrb r0, [r4, #2] - bl ModBombs - b _0805424E -_080541F8: - movs r0, #0x66 - bl GetInventoryValue - cmp r0, #0 - bne _0805420A - movs r0, #0x66 - movs r1, #1 - bl SetInventoryValue -_0805420A: - movs r0, #0x63 - bl ModArrows - b _080541B0 -_08054212: - ldr r0, _08054234 @ =gSave - adds r1, r0, #0 - adds r1, #0xaf - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _0805422A - movs r0, #3 - strb r0, [r1] -_0805422A: - movs r0, #0x63 - bl ModArrows - b _0805427C - .align 2, 0 -_08054234: .4byte gSave -_08054238: - ldrb r0, [r4, #2] - bl ModArrows - b _0805424E -_08054240: - movs r0, #0x3f - movs r1, #1 - bl SetInventoryValue - adds r0, r7, #0 - bl ModShells -_0805424E: - ldr r0, _08054258 @ =0x00000103 - bl SoundReq - b _0805427C - .align 2, 0 -_08054258: .4byte 0x00000103 -_0805425C: - adds r0, r7, #0 - bl sub_0801E738 - b _0805427C -_08054264: - ldr r0, _08054284 @ =gSave - adds r1, r0, #0 - adds r1, #0xa8 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _0805427C - movs r0, #3 -_0805427A: - strb r0, [r1] -_0805427C: - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08054284: .4byte gSave - .syntax divided diff --git a/src/game.c b/src/game.c index 94bf542c..ac8f9a62 100644 --- a/src/game.c +++ b/src/game.c @@ -82,6 +82,7 @@ extern u8 gUpdateVisibleTiles; extern u16 gUnk_020178E0[]; extern u8 gUnk_02024090[]; +extern const u16 gUnk_080FD5A8[]; extern void** gAreaTilesets[]; extern void** gAreaRoomMaps[]; @@ -157,6 +158,9 @@ static void InitAllRoomResInfo(void); static void InitRoomResInfo(RoomResInfo* info, RoomHeader* hdr, u32 area, u32 room); static void sub_080532E4(void); static void ResetTimerFlags(void); +bool32 ItemIsBottle(u32); +void ModArrows(s32); +void ModShells(s32); typedef struct { u8 dest_off[8]; @@ -2249,7 +2253,150 @@ s32 GetItemPrice(u32 item) { return ptr[0]; } -ASM_FUNC("asm/non_matching/game/GiveItem.inc", u32 GiveItem(u32 a, u32 b)) +u32 GiveItem(Item item, u32 param_2) { + u32 uVar4; + u32 result; + u32 uVar9; + const ItemMetaData* metaData; + + uVar4 = GetInventoryValue(item); + metaData = &gItemMetaData[item]; + + if (uVar4 == 0) { + result = *(u16*)&metaData->textId; + } else { + result = *(u16*)&metaData->unk6; + } + if (!ItemIsBottle(item)) { + PutItemOnSlot(item); + if (uVar4 == 0) { + SetInventoryValue(item, 1); + } + } + switch (metaData->unk1) { + case 0: + default: + break; + case 1: + ModHealth(metaData->unk2); + SoundReq(SFX_HEART_GET); + break; + case 2: + ModRupees((u32)gUnk_080FD5A8[metaData->unk2]); + SoundReq(SFX_RUPEE_GET); + break; + case 3: + uVar9 = 0; + while (TRUE) { + if (3 < uVar9) { + return result; + } + if (GetInventoryValue(ITEM_BOTTLE1 + uVar9) == 0) + break; + uVar9++; + } + item = ITEM_BOTTLE1 + uVar9; + if (gSave.stats.bottles[uVar9] == 0) { + gSave.stats.bottles[uVar9] = 0x20; + } + SetInventoryValue(item, 1); + PutItemOnSlot(item); + break; + case 4: + uVar9 = 0; + while (gSave.stats.bottles[uVar9] != 0x20) { + uVar9++; + if (3 < uVar9) { + return result; + } + } + if (3 < uVar9) { + break; + } + gSave.stats.bottles[uVar9] = (u8)item; + SetInventoryValue(item, 1); + SoundReq(SFX_ITEM_GET); + break; + case 5: + sub_080526F8(1); + SoundReq(SFX_103); + break; + case 6: + gSave.unk46C[gArea.dungeon_idx] |= metaData->unk2; + break; + case 0xd: + sub_0801E738(0x72); + break; + case 0x12: + if (item == ITEM_BOOMERANG) { + SetInventoryValue(ITEM_MAGIC_BOOMERANG, 0); + } else { + SetInventoryValue(ITEM_BOOMERANG, 0); + } + case 0x11: + LoadItemGfx(); + break; + case 7: + if (item == ITEM_BOMBS) { + SetInventoryValue(ITEM_REMOTE_BOMBS, 0); + } else { + SetInventoryValue(ITEM_BOMBS, 0); + } + ModBombs(99); + LoadItemGfx(); + break; + case 8: + if (uVar4 == 0) { + SetInventoryValue(ITEM_BOMBS, 1); + PutItemOnSlot(7); + } else { + gSave.stats.bombBagType++; + if (3 < gSave.stats.bombBagType) { + gSave.stats.bombBagType = 3; + } + } + ModBombs(99); + break; + case 9: + ModBombs(metaData->unk2); + SoundReq(SFX_103); + break; + case 0xb: + if (GetInventoryValue(ITEM_LARGE_QUIVER) == 0) { + SetInventoryValue(ITEM_LARGE_QUIVER, 1); + } + ModArrows(99); + LoadItemGfx(); + break; + case 0xa: + gSave.stats.quiverType++; + if (3 < gSave.stats.quiverType) { + gSave.stats.quiverType = 3; + } + ModArrows(99); + break; + case 0xc: + ModArrows(metaData->unk2); + SoundReq(SFX_103); + break; + case 0x0e: + SetInventoryValue(ITEM_SHELLS, 1); + ModShells(param_2); + SoundReq(SFX_103); + break; + case 0x0f: + sub_0801E738(param_2); + break; + case 0x10: + gSave.stats.walletType++; + if (gSave.stats.walletType < 4) { + break; + } + gSave.stats.walletType = 3; + break; + } + return result; +} // TODO Adapt ItemMetaData struct void sub_08054288(s32 param_1) {