From eb1158855bd7d9d2147d4b900dc918ae3cc7e386 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 28 Mar 2022 17:30:56 +0200 Subject: [PATCH] Decompile some functions --- asm/non_matching/bigGoron/sub_0806D02C.inc | 74 ----- asm/non_matching/bigGoron/sub_0806D520.inc | 96 ------ asm/non_matching/bigGoron/sub_0806D67C.inc | 46 --- asm/non_matching/game/sub_08053758.inc | 72 ----- .../itemMoleMitts/sub_080772A8.inc | 201 ------------ .../itemTryPickupObject/ItemPickupCheck.inc | 127 -------- asm/non_matching/librarians/Librarians.inc | 32 -- asm/non_matching/librarians/sub_0806BA34.inc | 114 ------- .../playerItem11/sub_08018E68.inc | 133 -------- .../playerItem13/sub_080ACFCC.inc | 59 ---- .../playerItem13/sub_080AD040.inc | 290 ------------------ .../playerItem13/sub_080AD27C.inc | 89 ------ .../playerItemBomb/sub_0801B250.inc | 67 ---- .../playerItemBomb/sub_0801B2CC.inc | 42 --- .../playerItemBomb/sub_0801B3A4.inc | 65 ---- .../playerItemBow/sub_08018FE4.inc | 207 ------------- .../playerItemLantern/sub_08054AC8.inc | 158 ---------- .../playerItemSword/sub_080A7824.inc | 76 ----- .../playerItemSword/sub_080A78B8.inc | 220 ------------- .../playerUtils/FreeCarryEntity.inc | 47 --- .../playerUtils/RegisterCarryEntity.inc | 20 -- include/entity.h | 13 +- include/new_player.h | 7 +- include/player.h | 2 +- src/entity.c | 3 +- src/game.c | 29 +- src/interrupts.c | 1 - src/item/itemMoleMitts.c | 65 +++- src/item/itemTryPickupObject.c | 57 +++- src/npc/bigGoron.c | 81 ++++- src/npc/librarians.c | 64 +++- src/playerItem/playerItem11.c | 66 +++- src/playerItem/playerItem13.c | 202 +++++++++++- src/playerItem/playerItemBomb.c | 127 ++++++-- src/playerItem/playerItemBow.c | 90 +++++- src/playerItem/playerItemLantern.c | 42 ++- src/playerItem/playerItemSword.c | 130 +++++++- src/playerUtils.c | 20 +- 38 files changed, 935 insertions(+), 2299 deletions(-) delete mode 100644 asm/non_matching/bigGoron/sub_0806D02C.inc delete mode 100644 asm/non_matching/bigGoron/sub_0806D520.inc delete mode 100644 asm/non_matching/bigGoron/sub_0806D67C.inc delete mode 100644 asm/non_matching/game/sub_08053758.inc delete mode 100644 asm/non_matching/itemMoleMitts/sub_080772A8.inc delete mode 100644 asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc delete mode 100644 asm/non_matching/librarians/Librarians.inc delete mode 100644 asm/non_matching/librarians/sub_0806BA34.inc delete mode 100644 asm/non_matching/playerItem11/sub_08018E68.inc delete mode 100644 asm/non_matching/playerItem13/sub_080ACFCC.inc delete mode 100644 asm/non_matching/playerItem13/sub_080AD040.inc delete mode 100644 asm/non_matching/playerItem13/sub_080AD27C.inc delete mode 100644 asm/non_matching/playerItemBomb/sub_0801B250.inc delete mode 100644 asm/non_matching/playerItemBomb/sub_0801B2CC.inc delete mode 100644 asm/non_matching/playerItemBomb/sub_0801B3A4.inc delete mode 100644 asm/non_matching/playerItemBow/sub_08018FE4.inc delete mode 100644 asm/non_matching/playerItemLantern/sub_08054AC8.inc delete mode 100644 asm/non_matching/playerItemSword/sub_080A7824.inc delete mode 100644 asm/non_matching/playerItemSword/sub_080A78B8.inc delete mode 100644 asm/non_matching/playerUtils/FreeCarryEntity.inc delete mode 100644 asm/non_matching/playerUtils/RegisterCarryEntity.inc diff --git a/asm/non_matching/bigGoron/sub_0806D02C.inc b/asm/non_matching/bigGoron/sub_0806D02C.inc deleted file mode 100644 index 61ecbbf4..00000000 --- a/asm/non_matching/bigGoron/sub_0806D02C.inc +++ /dev/null @@ -1,74 +0,0 @@ - .syntax unified - push {lr} - bl sub_0806D164 - ldr r2, _0806D0A8 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #7 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x60 - ldr r0, _0806D0AC @ =0x00003F3F - strh r0, [r1] - adds r1, #2 - movs r0, #0x3d - strh r0, [r1] - movs r1, #0x16 - ldrsh r0, [r2, r1] - rsbs r0, r0, #0 - movs r3, #0x80 - lsls r3, r3, #1 - adds r1, r0, r3 - cmp r0, #0 - bge _0806D060 - movs r0, #0 -_0806D060: - cmp r0, #0xf0 - ble _0806D066 - movs r0, #0xf0 -_0806D066: - cmp r1, #0 - bge _0806D06C - movs r1, #0 -_0806D06C: - cmp r1, #0xf0 - ble _0806D072 - movs r1, #0xf0 -_0806D072: - lsls r0, r0, #8 - orrs r0, r1 - adds r1, r2, #0 - adds r1, #0x5a - strh r0, [r1] - movs r1, #0x18 - ldrsh r0, [r2, r1] - rsbs r0, r0, #0 - adds r1, r0, r3 - cmp r0, #0 - bge _0806D08A - movs r0, #0 -_0806D08A: - cmp r0, #0xa0 - ble _0806D090 - movs r0, #0xa0 -_0806D090: - cmp r1, #0 - bge _0806D096 - movs r1, #0 -_0806D096: - cmp r1, #0xa0 - ble _0806D09C - movs r1, #0xa0 -_0806D09C: - lsls r0, r0, #8 - orrs r0, r1 - adds r1, r2, #0 - adds r1, #0x5e - strh r0, [r1] - pop {pc} - .align 2, 0 -_0806D0A8: .4byte gScreen -_0806D0AC: .4byte 0x00003F3F - .syntax divided diff --git a/asm/non_matching/bigGoron/sub_0806D520.inc b/asm/non_matching/bigGoron/sub_0806D520.inc deleted file mode 100644 index f02c64da..00000000 --- a/asm/non_matching/bigGoron/sub_0806D520.inc +++ /dev/null @@ -1,96 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - adds r3, r1, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806D540 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0806D5B0 @ =gUnk_08114100 - adds r0, r3, r0 - ldrb r0, [r0] - adds r0, #6 - strb r0, [r4, #0xf] - strb r0, [r4, #0x1e] - movs r0, #8 - strb r0, [r4, #0xe] -_0806D540: - ldr r0, [r4, #0x50] - ldrh r1, [r0, #0x2e] - strh r1, [r4, #0x2e] - ldrh r1, [r0, #0x32] - strh r1, [r4, #0x32] - adds r0, #0x62 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x62 - strb r0, [r1] - ldr r0, [r4, #0x50] - adds r0, #0x63 - ldrb r0, [r0] - adds r1, #1 - strb r0, [r1] - ldr r0, [r4, #0x50] - ldrb r1, [r0, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x1b] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _0806D590 - movs r1, #0x2e - ldrsh r0, [r4, r1] - lsls r1, r3, #4 - subs r0, r0, r1 - adds r0, #0xc - movs r2, #0x32 - ldrsh r1, [r4, r2] - movs r2, #0x18 - movs r3, #0x40 - bl CheckPlayerProximity - cmp r0, #0 - beq _0806D5B4 -_0806D590: - ldrb r1, [r4, #0x1e] - ldrb r0, [r4, #0xf] - adds r0, #2 - cmp r1, r0 - bge _0806D5D0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0806D5D0 - movs r0, #8 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0x1e] - adds r0, #1 - b _0806D5CE - .align 2, 0 -_0806D5B0: .4byte gUnk_08114100 -_0806D5B4: - ldrb r1, [r4, #0x1e] - ldrb r0, [r4, #0xf] - cmp r1, r0 - bls _0806D5D0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0806D5D0 - movs r0, #8 - strb r0, [r4, #0xe] - subs r0, r1, #1 -_0806D5CE: - strb r0, [r4, #0x1e] -_0806D5D0: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/bigGoron/sub_0806D67C.inc b/asm/non_matching/bigGoron/sub_0806D67C.inc deleted file mode 100644 index 0f5a1113..00000000 --- a/asm/non_matching/bigGoron/sub_0806D67C.inc +++ /dev/null @@ -1,46 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r4, _0806D6CC @ =gUnk_08114104 - movs r0, #0 - ldrsb r0, [r4, r0] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - beq _0806D6CA - adds r6, r1, #0 -_0806D690: - movs r1, #0 - ldrsb r1, [r4, r1] - adds r0, r5, #0 - movs r2, #0x40 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0806D6C0 - movs r0, #1 - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0x2e] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - movs r0, #2 - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0x32] - adds r0, r0, r2 - strh r0, [r1, #0x32] - ldrb r0, [r4, #3] - strb r0, [r1, #0x15] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1, #0x24] -_0806D6C0: - adds r4, #4 - movs r0, #0 - ldrsb r0, [r4, r0] - cmp r0, r6 - bne _0806D690 -_0806D6CA: - pop {r4, r5, r6, pc} - .align 2, 0 -_0806D6CC: .4byte gUnk_08114104 - .syntax divided diff --git a/asm/non_matching/game/sub_08053758.inc b/asm/non_matching/game/sub_08053758.inc deleted file mode 100644 index 3150f7ae..00000000 --- a/asm/non_matching/game/sub_08053758.inc +++ /dev/null @@ -1,72 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r1, _080537DC @ =gMenu - movs r2, #0 - movs r3, #1 - strb r3, [r1, #6] - movs r4, #0 - movs r0, #0x78 - strh r0, [r1, #8] - movs r0, #0x1e - strh r0, [r1, #0xa] - strb r4, [r1, #0x10] - ldr r0, _080537E0 @ =gUI - strb r3, [r0, #6] - ldr r0, _080537E4 @ =gMapBottom - str r2, [r0] - ldr r0, _080537E8 @ =gMapTop - str r2, [r0] - ldr r0, _080537EC @ =gRoomControls - str r2, [r0, #0x30] - strh r2, [r0, #0xc] - strh r2, [r0, #0xa] - bl sub_0801B170 - movs r0, #0 - bl DispReset - ldr r2, _080537F0 @ =gScreen - movs r0, #0x99 - lsls r0, r0, #6 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _080537F4 @ =0x00002244 - strh r0, [r1] - adds r1, #2 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - subs r1, #8 - movs r0, #0x1f - strh r0, [r1] - adds r1, #2 - movs r0, #0x3f - strh r0, [r1] - subs r1, #0xa - movs r0, #0xf0 - strh r0, [r1] - adds r1, #4 - movs r0, #0x60 - strh r0, [r1] - ldr r0, _080537F8 @ =0x00001C4E - strh r0, [r2, #0x14] - ldr r0, _080537FC @ =0x00001DC1 - strh r0, [r2, #0x20] - movs r0, #0xf - bl SoundReq - bl ResetSystemPriority - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080537DC: .4byte gMenu -_080537E0: .4byte gUI -_080537E4: .4byte gMapBottom -_080537E8: .4byte gMapTop -_080537EC: .4byte gRoomControls -_080537F0: .4byte gScreen -_080537F4: .4byte 0x00002244 -_080537F8: .4byte 0x00001C4E -_080537FC: .4byte 0x00001DC1 - .syntax divided diff --git a/asm/non_matching/itemMoleMitts/sub_080772A8.inc b/asm/non_matching/itemMoleMitts/sub_080772A8.inc deleted file mode 100644 index 11be37fb..00000000 --- a/asm/non_matching/itemMoleMitts/sub_080772A8.inc +++ /dev/null @@ -1,201 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - ldrb r1, [r4, #0xe] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080772C6 - adds r0, r4, #0 - bl sub_08077F10 - cmp r0, #0 - beq _080772C6 - movs r0, #1 - strb r0, [r4, #7] -_080772C6: - movs r0, #0x71 - bl GetInventoryValue - cmp r0, #1 - bne _08077318 - ldrb r1, [r4, #0xe] - movs r5, #7 - adds r0, r5, #0 - ands r0, r1 - cmp r0, #3 - beq _08077300 - adds r0, r4, #0 - movs r1, #2 - bl sub_08077E3C - ldr r3, _080772F8 @ =gPlayerEntity - ldr r2, _080772FC @ =gUnk_0811BE16 - ldrb r1, [r4, #0xe] - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - lsls r0, r0, #1 - b _0807732E - .align 2, 0 -_080772F8: .4byte gPlayerEntity -_080772FC: .4byte gUnk_0811BE16 -_08077300: - adds r0, r4, #0 - bl UpdateItemAnim - ldr r3, _08077310 @ =gPlayerEntity - ldr r2, _08077314 @ =gUnk_0811BE16 - ldrb r1, [r4, #0xe] - adds r0, r5, #0 - b _08077326 - .align 2, 0 -_08077310: .4byte gPlayerEntity -_08077314: .4byte gUnk_0811BE16 -_08077318: - adds r0, r4, #0 - bl UpdateItemAnim - ldr r3, _0807736C @ =gPlayerEntity - ldr r2, _08077370 @ =gUnk_0811BE16 - ldrb r1, [r4, #0xe] - movs r0, #7 -_08077326: - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] -_0807732E: - strh r0, [r3, #0x24] - ldr r5, _0807736C @ =gPlayerEntity - ldrb r0, [r5, #0x14] - lsls r0, r0, #2 - strb r0, [r5, #0x15] - movs r1, #0x24 - ldrsh r0, [r5, r1] - cmp r0, #0 - beq _08077344 - bl UpdatePlayerMovement -_08077344: - ldrb r1, [r4, #0xe] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0807738C - ldrb r0, [r4, #7] - cmp r0, #0 - beq _08077374 - adds r0, r5, #0 - adds r0, #0x59 - movs r1, #1 - strb r1, [r0] - bl sub_080774A0 - cmp r0, #0 - beq _08077374 - movs r0, #0 - strb r0, [r4, #7] - b _0807743E - .align 2, 0 -_0807736C: .4byte gPlayerEntity -_08077370: .4byte gUnk_0811BE16 -_08077374: - adds r0, r4, #0 - adds r1, r6, #0 - bl DeletePlayerItem - ldr r0, _08077388 @ =gPlayerState - adds r0, #0x3d - movs r1, #0 - strb r1, [r0] - b _0807743E - .align 2, 0 -_08077388: .4byte gPlayerState -_0807738C: - movs r0, #0x60 - ands r0, r1 - cmp r0, #0 - beq _0807743E - adds r0, r5, #0 - adds r0, #0x59 - movs r6, #1 - strb r6, [r0] - adds r0, r5, #0 - bl sub_0807B5B0 - cmp r0, #0 - beq _080773BC - movs r0, #0x84 - lsls r0, r0, #1 - bl SoundReq - ldrb r2, [r4, #0xe] - adds r0, r5, #0 - movs r1, #0x1e - movs r3, #0 - bl CreateObjectWithParent - b _0807743E -_080773BC: - ldr r1, _08077440 @ =0x0000051C - adds r0, r4, #0 - bl sub_08077DF4 - adds r0, r5, #0 - movs r1, #0x1d - movs r2, #0 - bl CreateFx - adds r3, r0, #0 - cmp r3, #0 - beq _080773F6 - ldrb r0, [r4, #0xa] - strb r0, [r3, #0x14] - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080773F6: - adds r0, r5, #0 - movs r1, #0x1d - movs r2, #0 - bl CreateFx - adds r3, r0, #0 - cmp r3, #0 - beq _08077432 - ldrb r0, [r4, #0xa] - strb r0, [r3, #0x14] - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - movs r0, #0x29 - adds r0, r0, r3 - mov ip, r0 - movs r0, #7 - ands r1, r0 - mov r0, ip - ldrb r2, [r0] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - mov r1, ip - strb r0, [r1] - strb r6, [r3, #0xf] -_08077432: - movs r0, #3 - strb r0, [r4, #4] - strb r6, [r4, #5] - ldr r0, _08077444 @ =0x00000119 - bl SoundReq -_0807743E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08077440: .4byte 0x0000051C -_08077444: .4byte 0x00000119 - .syntax divided diff --git a/asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc b/asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc deleted file mode 100644 index 8b0b2e23..00000000 --- a/asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc +++ /dev/null @@ -1,127 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - ldr r5, _08076220 @ =gPlayerState - ldrb r0, [r5, #4] - cmp r0, #0 - bne _080762B8 - ldrb r0, [r5, #2] - cmp r0, #0 - beq _080761DE - ldr r0, [r5, #0x30] - ldr r1, _08076224 @ =0x00001201 - ands r0, r1 - cmp r0, #0 - beq _080762B8 -_080761DE: - ldr r1, _08076228 @ =gPlayerEntity - ldrb r2, [r1, #0x14] - movs r0, #0x80 - orrs r0, r2 - strb r0, [r5, #1] - adds r1, #0x3d - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #8 - bgt _080762B8 - bl sub_080789A8 - adds r3, r0, #0 - cmp r3, #1 - beq _08076258 - cmp r3, #1 - blo _0807626E - cmp r3, #2 - bne _080762C0 - ldr r0, _0807622C @ =gCarriedEntity - ldr r2, [r0, #8] - ldrb r1, [r2, #0x16] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - bne _08076230 - adds r0, r4, #0 - adds r1, r2, #0 - adds r2, r6, #0 - bl sub_08076088 - b _080762C0 - .align 2, 0 -_08076220: .4byte gPlayerState -_08076224: .4byte 0x00001201 -_08076228: .4byte gPlayerEntity -_0807622C: .4byte gCarriedEntity -_08076230: - str r2, [r4, #0x18] - strb r3, [r2, #0xc] - movs r1, #5 - strb r1, [r2, #0xd] - adds r0, r5, #0 - adds r0, #0xa8 - strb r1, [r0] - adds r0, r4, #0 - adds r1, r2, #0 - movs r2, #2 - adds r3, r6, #0 - bl sub_080762C4 - ldr r0, _08076254 @ =gUnk_0200AF00 - adds r0, #0x2e - movs r1, #8 - strb r1, [r0] - b _08076264 - .align 2, 0 -_08076254: .4byte gUnk_0200AF00 -_08076258: - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - adds r3, r6, #0 - bl sub_080762C4 -_08076264: - movs r0, #0x81 - lsls r0, r0, #1 - bl SoundReq - b _080762C0 -_0807626E: - movs r0, #5 - strb r0, [r4, #4] - movs r0, #0xf - strb r0, [r4, #7] - movs r0, #6 - strb r0, [r4, #0xf] - movs r3, #8 - adds r1, r3, #0 - asrs r1, r6 - ldrb r2, [r5, #0xa] - adds r0, r1, #0 - orrs r0, r2 - strb r0, [r5, #0xa] - ldrb r0, [r5, #0xb] - orrs r1, r0 - strb r1, [r5, #0xb] - ldr r0, [r5, #0x30] - ands r0, r3 - cmp r0, #0 - bne _080762A2 - movs r1, #0xde - lsls r1, r1, #2 - adds r0, r4, #0 - bl sub_08077DF4 - b _080762AA -_080762A2: - ldr r1, _080762B4 @ =0x00000948 - adds r0, r4, #0 - bl sub_08077DF4 -_080762AA: - movs r0, #0x88 - bl SoundReq - b _080762C0 - .align 2, 0 -_080762B4: .4byte 0x00000948 -_080762B8: - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_08077F50 -_080762C0: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/librarians/Librarians.inc b/asm/non_matching/librarians/Librarians.inc deleted file mode 100644 index 80ec2181..00000000 --- a/asm/non_matching/librarians/Librarians.inc +++ /dev/null @@ -1,32 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806BA18 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD50 - ldr r1, _0806BA30 @ =gUnk_08114F30 - ldrb r2, [r4, #0x19] - lsrs r0, r2, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] -_0806BA18: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 -_0806BA30: .4byte gUnk_08114F30 - .syntax divided diff --git a/asm/non_matching/librarians/sub_0806BA34.inc b/asm/non_matching/librarians/sub_0806BA34.inc deleted file mode 100644 index 3d50153e..00000000 --- a/asm/non_matching/librarians/sub_0806BA34.inc +++ /dev/null @@ -1,114 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov sb, r0 - adds r4, r1, #0 - ldr r0, _0806BA58 @ =0x00004912 - mov r8, r0 - movs r0, #0 - str r0, [r4, #0x14] - movs r0, #0x73 - bl CheckLocalFlag - cmp r0, #0 - beq _0806BA60 - ldr r0, _0806BA5C @ =0x00004913 - mov r8, r0 - b _0806BB06 - .align 2, 0 -_0806BA58: .4byte 0x00004912 -_0806BA5C: .4byte 0x00004913 -_0806BA60: - movs r0, #0x39 - bl GetInventoryValue - adds r7, r0, #0 - movs r0, #0x3a - bl GetInventoryValue - adds r6, r0, #0 - movs r0, #0x3b - bl GetInventoryValue - adds r5, r0, #0 - cmp r7, #1 - bne _0806BA88 - ldr r0, _0806BA84 @ =0x00004906 - mov r8, r0 - str r7, [r4, #0x14] - b _0806BAA2 - .align 2, 0 -_0806BA84: .4byte 0x00004906 -_0806BA88: - cmp r6, #1 - bne _0806BA98 - ldr r0, _0806BA94 @ =0x00004907 - mov r8, r0 - str r6, [r4, #0x14] - b _0806BAA2 - .align 2, 0 -_0806BA94: .4byte 0x00004907 -_0806BA98: - cmp r5, #1 - bne _0806BAB4 - ldr r0, _0806BAB0 @ =0x00004908 - mov r8, r0 - str r5, [r4, #0x14] -_0806BAA2: - movs r0, #0x6b - bl SetLocalFlag - movs r0, #0x6a - bl SetLocalFlag - b _0806BB06 - .align 2, 0 -_0806BAB0: .4byte 0x00004908 -_0806BAB4: - movs r0, #0x6a - bl CheckLocalFlag - cmp r0, #0 - beq _0806BB06 - movs r0, #0x6b - bl CheckLocalFlag - cmp r0, #0 - bne _0806BAD0 - ldr r0, _0806BACC @ =0x00004901 - b _0806BAD6 - .align 2, 0 -_0806BACC: .4byte 0x00004901 -_0806BAD0: - cmp r7, #0 - bne _0806BAE4 - ldr r0, _0806BAE0 @ =0x00004902 -_0806BAD6: - mov r8, r0 - movs r0, #0x6b - bl SetLocalFlag - b _0806BB06 - .align 2, 0 -_0806BAE0: .4byte 0x00004902 -_0806BAE4: - cmp r6, #0 - bne _0806BAF8 - ldr r0, _0806BAF4 @ =0x00004903 - mov r8, r0 - movs r0, #0x6d - bl SetLocalFlag - b _0806BB06 - .align 2, 0 -_0806BAF4: .4byte 0x00004903 -_0806BAF8: - cmp r5, #0 - bne _0806BB06 - ldr r0, _0806BB18 @ =0x00004904 - mov r8, r0 - movs r0, #0x70 - bl SetLocalFlag -_0806BB06: - mov r0, r8 - mov r1, sb - bl MessageNoOverlap - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0806BB18: .4byte 0x00004904 - .syntax divided diff --git a/asm/non_matching/playerItem11/sub_08018E68.inc b/asm/non_matching/playerItem11/sub_08018E68.inc deleted file mode 100644 index 2eff7284..00000000 --- a/asm/non_matching/playerItem11/sub_08018E68.inc +++ /dev/null @@ -1,133 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - cmp r0, #0 - bne _08018E82 - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - movs r1, #5 - bl sub_08008790 - b _08018EA8 -_08018E82: - adds r0, #0x3a - ldrb r1, [r0] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _08018E92 - bl DeleteThisEntity -_08018E92: - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08018EA8 - adds r0, r4, #0 - bl sub_08018F6C - b _08018F62 -_08018EA8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _08018F46 - adds r0, r4, #0 - bl LinearMoveUpdate - ldrb r0, [r4, #0x15] - cmp r0, #8 - beq _08018EEA - cmp r0, #8 - bgt _08018ECC - cmp r0, #0 - beq _08018ED6 - b _08018EEE -_08018ECC: - cmp r0, #0x10 - beq _08018EDE - cmp r0, #0x18 - beq _08018EE4 - b _08018EEE -_08018ED6: - movs r6, #0 - movs r5, #4 - rsbs r5, r5, #0 - b _08018EEE -_08018EDE: - movs r6, #0 - movs r5, #4 - b _08018EEE -_08018EE4: - movs r6, #4 - rsbs r6, r6, #0 - b _08018EEC -_08018EEA: - movs r6, #4 -_08018EEC: - movs r5, #0 -_08018EEE: - ldr r1, [r4, #0x54] - cmp r1, #0 - beq _08018F00 - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x15] - ldr r1, [r4, #0x54] - adds r0, r4, #0 - bl CopyPosition -_08018F00: - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _08018F0C - adds r0, r4, #0 - bl sub_0800451C -_08018F0C: - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r5, #0 - bl sub_080B1A0C - ldr r1, _08018F64 @ =gUnk_080B3DF4 - bl sub_08007DD6 - cmp r0, #0 - bne _08018F62 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r5, #0 - bl GetRelativeCollisionTile - cmp r0, #0x74 - beq _08018F62 - ldr r1, _08018F68 @ =gUnk_08003E44 - movs r0, #0x2e - ldrsh r2, [r4, r0] - adds r2, r2, r6 - movs r0, #0x32 - ldrsh r3, [r4, r0] - adds r3, r3, r5 - adds r0, r4, #0 - bl sub_080040D8 - cmp r0, #0 - beq _08018F62 -_08018F46: - ldr r0, [r4, #0x54] - cmp r0, #0 - bne _08018F56 - ldrb r1, [r4, #0xa] - adds r1, #0xd - adds r0, r4, #0 - bl InitializeAnimation -_08018F56: - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_08018F6C -_08018F62: - pop {r4, r5, r6, pc} - .align 2, 0 -_08018F64: .4byte gUnk_080B3DF4 -_08018F68: .4byte gUnk_08003E44 - .syntax divided diff --git a/asm/non_matching/playerItem13/sub_080ACFCC.inc b/asm/non_matching/playerItem13/sub_080ACFCC.inc deleted file mode 100644 index 4334f0a5..00000000 --- a/asm/non_matching/playerItem13/sub_080ACFCC.inc +++ /dev/null @@ -1,59 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldr r1, [r4, #0x54] - adds r0, #0x6c - ldrh r0, [r0] - ldrb r2, [r1, #8] - cmp r0, r2 - beq _080ACFE8 - adds r0, r4, #0 - adds r0, #0x6e - ldrh r0, [r0] - ldrb r2, [r1, #9] - cmp r0, r2 - bne _080AD034 -_080ACFE8: - ldrb r0, [r1, #0xc] - cmp r0, #2 - beq _080ACFF8 - bl sub_08079184 - bl DeleteThisEntity - b _080AD03C -_080ACFF8: - ldr r0, _080AD02C @ =gPlayerState - ldrb r0, [r0, #5] - cmp r0, #0 - beq _080AD00E - ldr r0, _080AD030 @ =gPlayerEntity - adds r0, #0x79 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - beq _080AD03C -_080AD00E: - adds r0, r4, #0 - bl sub_080AD27C - ldrb r0, [r4, #0xd] - adds r0, #1 - movs r2, #0 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #0xff - strb r0, [r4, #0x15] - str r2, [r4, #0x20] - b _080AD03C - .align 2, 0 -_080AD02C: .4byte gPlayerState -_080AD030: .4byte gPlayerEntity -_080AD034: - bl sub_08079184 - bl DeleteThisEntity -_080AD03C: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerItem13/sub_080AD040.inc b/asm/non_matching/playerItem13/sub_080AD040.inc deleted file mode 100644 index 2d6f510c..00000000 --- a/asm/non_matching/playerItem13/sub_080AD040.inc +++ /dev/null @@ -1,290 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x54] - ldrb r0, [r5, #0xc] - cmp r0, #2 - beq _080AD050 - bl DeleteThisEntity -_080AD050: - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r3, #0x80 - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - beq _080AD064 - movs r0, #0 - str r0, [r4, #0x34] -_080AD064: - movs r1, #0x24 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _080AD06E - b _080AD220 -_080AD06E: - adds r2, r4, #0 - adds r2, #0x42 - ldrb r1, [r2] - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - beq _080AD088 - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - movs r1, #0 - strb r0, [r4, #0x15] - strb r1, [r2] -_080AD088: - ldr r2, _080AD0B0 @ =gUnk_081320C4 - ldrb r0, [r4, #0x15] - lsrs r0, r0, #2 - adds r1, r0, r2 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, #1 - adds r0, r0, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - adds r0, r4, #0 - bl GetRelativeCollisionTile - cmp r0, #0x74 - bne _080AD0B4 - adds r0, r4, #0 - bl LinearMoveUpdate - b _080AD0C8 - .align 2, 0 -_080AD0B0: .4byte gUnk_081320C4 -_080AD0B4: - adds r0, r4, #0 - bl sub_080B1B0C - cmp r0, #0x24 - beq _080AD0C8 - cmp r0, #0x26 - beq _080AD0C8 - adds r0, r4, #0 - bl ProcessMovement10 -_080AD0C8: - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - beq _080AD0D8 - b _080AD202 -_080AD0D8: - ldr r0, [r4, #0x20] - str r0, [r5, #0x20] - ldr r0, [r4, #0x2c] - str r0, [r5, #0x2c] - ldr r0, [r4, #0x30] - str r0, [r5, #0x30] - ldr r0, [r4, #0x34] - str r0, [r5, #0x34] - adds r0, r4, #0 - bl GetTileUnderEntity - cmp r0, #0x11 - bhi _080AD0FC - cmp r0, #0x10 - bhs _080AD104 - cmp r0, #0xd - beq _080AD104 - b _080AD14E -_080AD0FC: - cmp r0, #0x13 - beq _080AD104 - cmp r0, #0x5a - bne _080AD14E -_080AD104: - cmp r5, r4 - bne _080AD146 - cmp r0, #0x11 - bhi _080AD116 - cmp r0, #0x10 - bhs _080AD12C - cmp r0, #0xd - beq _080AD120 - b _080AD142 -_080AD116: - cmp r0, #0x13 - beq _080AD138 - cmp r0, #0x5a - beq _080AD126 - b _080AD142 -_080AD120: - adds r0, r4, #0 - movs r1, #0 - b _080AD130 -_080AD126: - adds r0, r4, #0 - movs r1, #0xc - b _080AD130 -_080AD12C: - adds r0, r4, #0 - movs r1, #0xb -_080AD130: - movs r2, #0 - bl CreateFx - b _080AD142 -_080AD138: - adds r0, r4, #0 - movs r1, #0x52 - movs r2, #0 - bl CreateFx -_080AD142: - movs r0, #4 - b _080AD148 -_080AD146: - movs r0, #3 -_080AD148: - strb r0, [r5, #0xd] - bl DeleteThisEntity -_080AD14E: - ldr r0, [r4, #0x54] - cmp r0, r4 - bne _080AD178 - ldrb r0, [r4, #0xb] - cmp r0, #0xff - beq _080AD1DA - cmp r0, #0xf - bne _080AD16A - ldrb r1, [r4, #0xe] - adds r0, r4, #0 - movs r2, #0x80 - bl CreateFx - b _080AD1DA -_080AD16A: - ldrb r1, [r4, #0xb] - ldrb r2, [r4, #0xe] - adds r0, r4, #0 - movs r3, #0 - bl CreateObjectWithParent - b _080AD1DA -_080AD178: - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _080AD188 - adds r0, r5, #0 - bl sub_080AD32C - cmp r0, #0 - beq _080AD1E0 -_080AD188: - ldrb r0, [r4, #0xe] - cmp r0, #1 - bne _080AD196 - movs r0, #0x82 - lsls r0, r0, #1 - bl SoundReq -_080AD196: - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - movs r0, #3 - strb r0, [r5, #0xd] - ldrb r2, [r4, #0x19] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r5, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r5, #0x19] - ldrb r0, [r4, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r5, #0x1b] - ands r1, r2 - orrs r1, r0 - strb r1, [r5, #0x1b] - adds r0, r4, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - adds r3, r5, #0 - adds r3, #0x29 - lsrs r1, r1, #0x1d - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080AD1DA: - bl DeleteThisEntity - b _080AD26E -_080AD1E0: - movs r0, #0x82 - lsls r0, r0, #1 - bl SoundReq - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - movs r0, #0x80 - lsls r0, r0, #9 - str r0, [r4, #0x20] - movs r1, #0x24 - ldrsh r0, [r4, r1] - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - strh r0, [r4, #0x24] - b _080AD26E -_080AD202: - adds r0, r4, #0 - bl sub_0800451C - adds r0, r4, #0 - bl sub_0806F8DC - adds r0, r4, #0 - adds r1, r5, #0 - bl CopyPosition - ldr r0, [r4, #0x20] - str r0, [r5, #0x20] - ldrb r0, [r4, #0x15] - strb r0, [r5, #0x15] - b _080AD26E -_080AD220: - ldr r1, _080AD240 @ =gPlayerEntity - adds r0, r1, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r5, #1 - ands r5, r0 - cmp r5, #0 - beq _080AD244 - movs r0, #0x79 - bl SoundReq - adds r0, r4, #0 - bl sub_080AD27C - b _080AD26E - .align 2, 0 -_080AD240: .4byte gPlayerEntity -_080AD244: - ldr r0, _080AD270 @ =gPlayerState - ldrb r0, [r0, #5] - cmp r0, #0 - beq _080AD25A - adds r0, r1, #0 - adds r0, #0x79 - ldrb r1, [r0] - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - beq _080AD26E -_080AD25A: - adds r0, r4, #0 - bl sub_080AD27C - ldrb r0, [r4, #0x10] - movs r1, #0x7f - ands r1, r0 - strb r1, [r4, #0x10] - movs r0, #0xff - strb r0, [r4, #0x15] - str r5, [r4, #0x20] -_080AD26E: - pop {r4, r5, pc} - .align 2, 0 -_080AD270: .4byte gPlayerState - .syntax divided diff --git a/asm/non_matching/playerItem13/sub_080AD27C.inc b/asm/non_matching/playerItem13/sub_080AD27C.inc deleted file mode 100644 index 1c31dc1d..00000000 --- a/asm/non_matching/playerItem13/sub_080AD27C.inc +++ /dev/null @@ -1,89 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r3, r0, #0 - ldr r4, [r3, #0x54] - ldr r1, _080AD2AC @ =gPlayerEntity - movs r0, #0 - str r0, [r1, #0x74] - adds r0, r3, #0 - adds r0, #0x6c - ldrh r0, [r0] - adds r5, r1, #0 - ldrb r1, [r4, #8] - cmp r0, r1 - bne _080AD320 - adds r0, r3, #0 - adds r0, #0x6e - ldrh r0, [r0] - ldrb r1, [r4, #9] - cmp r0, r1 - bne _080AD320 - cmp r4, r3 - beq _080AD2B0 - movs r0, #2 - strb r0, [r4, #0xd] - b _080AD2C2 - .align 2, 0 -_080AD2AC: .4byte gPlayerEntity -_080AD2B0: - adds r2, r3, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #0x18 - orrs r1, r0 - strb r1, [r2] -_080AD2C2: - ldr r0, [r4, #0x48] - str r0, [r3, #0x48] - ldrb r1, [r3, #0x16] - lsrs r1, r1, #4 - ldr r2, _080AD318 @ =gUnk_081320CC - lsls r0, r1, #1 - adds r0, r0, r2 - ldrh r0, [r0] - strh r0, [r3, #0x24] - ldr r0, _080AD31C @ =gUnk_081320D4 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - str r0, [r3, #0x20] - ldrh r0, [r4, #0x36] - adds r0, #8 - strh r0, [r4, #0x36] - strh r0, [r3, #0x36] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r3, #0 - adds r0, #0x38 - strb r1, [r0] - ldrh r0, [r5, #0x32] - strh r0, [r3, #0x32] - ldrh r0, [r5, #0x2e] - strh r0, [r3, #0x2e] - adds r0, r5, #0 - adds r0, #0x3c - ldrb r1, [r0] - adds r0, r3, #0 - adds r0, #0x3c - strb r1, [r0] - ldrb r1, [r3, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r3, #0x10] - adds r0, r3, #0 - bl sub_0801766C - b _080AD328 - .align 2, 0 -_080AD318: .4byte gUnk_081320CC -_080AD31C: .4byte gUnk_081320D4 -_080AD320: - bl sub_08079184 - bl DeleteThisEntity -_080AD328: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerItemBomb/sub_0801B250.inc b/asm/non_matching/playerItemBomb/sub_0801B250.inc deleted file mode 100644 index 09cae23b..00000000 --- a/asm/non_matching/playerItemBomb/sub_0801B250.inc +++ /dev/null @@ -1,67 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - movs r0, #1 - strb r0, [r2, #0xc] - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - subs r0, #0x3a - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0xa] - adds r0, r1, #0 - cmp r0, #0xff - bne _0801B28A - movs r0, #0x3c - b _0801B29C -_0801B28A: - cmp r0, #0xfe - bne _0801B29A - movs r0, #0xf - strb r0, [r2, #0xe] - movs r0, #0xff - orrs r0, r1 - strb r0, [r2, #0xa] - b _0801B29E -_0801B29A: - movs r0, #0x96 -_0801B29C: - strb r0, [r2, #0xe] -_0801B29E: - ldr r0, _0801B2BC @ =gUnk_080B77F4 - str r0, [r2, #0x48] - movs r0, #0 - strb r0, [r2, #0x16] - adds r0, r2, #0 - adds r0, #0x68 - ldrb r0, [r0] - cmp r0, #7 - bne _0801B2C0 - adds r0, r2, #0 - movs r1, #5 - bl InitializeAnimation - b _0801B2C8 - .align 2, 0 -_0801B2BC: .4byte gUnk_080B77F4 -_0801B2C0: - adds r0, r2, #0 - movs r1, #0x15 - bl InitializeAnimation -_0801B2C8: - pop {pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerItemBomb/sub_0801B2CC.inc b/asm/non_matching/playerItemBomb/sub_0801B2CC.inc deleted file mode 100644 index f10caa01..00000000 --- a/asm/non_matching/playerItemBomb/sub_0801B2CC.inc +++ /dev/null @@ -1,42 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0800442E - cmp r0, #0 - bne _0801B2DE - adds r0, r4, #0 - bl RegisterCarryEntity -_0801B2DE: - movs r0, #8 - bl IsItemEquipped - cmp r0, #1 - beq _0801B2F6 - cmp r0, #1 - blo _0801B2F2 - cmp r0, #2 - beq _0801B2FA - b _0801B2FC -_0801B2F2: - movs r5, #1 - b _0801B2FC -_0801B2F6: - movs r5, #2 - b _0801B2FC -_0801B2FA: - movs r5, #0 -_0801B2FC: - ldr r0, _0801B314 @ =gPlayerState - adds r0, #0x92 - ldrh r0, [r0] - ands r5, r0 - cmp r5, #0 - beq _0801B310 - movs r0, #0 - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r4, #0xf] -_0801B310: - pop {r4, r5, pc} - .align 2, 0 -_0801B314: .4byte gPlayerState - .syntax divided diff --git a/asm/non_matching/playerItemBomb/sub_0801B3A4.inc b/asm/non_matching/playerItemBomb/sub_0801B3A4.inc deleted file mode 100644 index 7c4a5b73..00000000 --- a/asm/non_matching/playerItemBomb/sub_0801B3A4.inc +++ /dev/null @@ -1,65 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - movs r5, #8 - cmp r0, #0x28 - bhi _0801B3F4 - movs r5, #4 - ldr r1, [r4, #0x68] - movs r0, #0x80 - lsls r0, r0, #8 - ands r0, r1 - cmp r0, #0 - beq _0801B3C4 - adds r0, r1, #0 - subs r0, #0x10 - b _0801B3C8 -_0801B3C4: - adds r0, r1, #0 - adds r0, #0x10 -_0801B3C8: - str r0, [r4, #0x68] - ldr r1, [r4, #0x68] - movs r2, #0xf0 - adds r0, r1, #0 - ands r0, r2 - subs r0, #1 - cmp r0, #0x7f - bls _0801B3E0 - movs r0, #0x80 - lsls r0, r0, #8 - eors r1, r0 - str r1, [r4, #0x68] -_0801B3E0: - ldr r0, [r4, #0x68] - ands r0, r2 - movs r2, #0x98 - lsls r2, r2, #1 - subs r2, r2, r0 - adds r0, r4, #0 - adds r1, r2, #0 - movs r3, #0 - bl SetAffineInfo -_0801B3F4: - ldrb r0, [r4, #0xf] - ands r0, r5 - cmp r0, #0 - bne _0801B408 - ldrb r1, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x1a] - b _0801B416 -_0801B408: - ldrb r0, [r4, #0x1a] - lsrs r2, r0, #4 - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x1a] -_0801B416: - pop {r4, r5, pc} - .syntax divided diff --git a/asm/non_matching/playerItemBow/sub_08018FE4.inc b/asm/non_matching/playerItemBow/sub_08018FE4.inc deleted file mode 100644 index bf9ff1e9..00000000 --- a/asm/non_matching/playerItemBow/sub_08018FE4.inc +++ /dev/null @@ -1,207 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r3, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r5, [r4, #0xa] - cmp r5, #0 - bne _08018FF6 - b _080190FC -_08018FF6: - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r3 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - movs r0, #0x6a - str r0, [r4, #0x74] - ldrb r0, [r4, #0xb] - adds r1, r4, #0 - adds r1, #0x40 - strb r0, [r1] - movs r0, #0xa6 - strh r0, [r4, #0x12] - ldrb r0, [r1] - adds r6, r1, #0 - cmp r0, #0xe - bne _08019026 - movs r0, #0x80 - lsls r0, r0, #3 - b _0801902A -_08019026: - movs r0, #0xc0 - lsls r0, r0, #2 -_0801902A: - strh r0, [r4, #0x24] - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] - ldr r2, _0801905C @ =gPlayerEntity - adds r0, r2, #0 - adds r0, #0x3c - ldrb r0, [r0] - adds r0, #1 - adds r1, r4, #0 - adds r1, #0x3c - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3b - ldrb r0, [r0] - subs r1, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - adds r5, r2, #0 - cmp r0, #2 - bne _08019060 - movs r0, #1 - b _08019062 - .align 2, 0 -_0801905C: .4byte gPlayerEntity -_08019060: - movs r0, #0 -_08019062: - strb r0, [r4, #0xb] - ldrb r1, [r5, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r4, #0x1b] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - lsls r3, r0, #1 - adds r3, r3, r0 - lsls r3, r3, #2 - ldr r0, _080190F8 @ =gUnk_080B3E40 - adds r3, r3, r0 - movs r0, #0 - ldrsb r0, [r3, r0] - ldrh r1, [r5, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - movs r0, #1 - ldrsb r0, [r3, r0] - ldrh r5, [r5, #0x32] - adds r0, r0, r5 - strh r0, [r4, #0x32] - ldrb r1, [r3, #2] - movs r0, #1 - ands r1, r0 - lsls r1, r1, #6 - ldrb r2, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r3, #3] - lsls r1, r1, #7 - movs r2, #0x7f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r0, [r3, #6] - adds r5, r4, #0 - adds r5, #0x58 - strb r0, [r5] - movs r0, #4 - ldrsb r0, [r3, r0] - str r0, [r4, #0x6c] - movs r0, #5 - ldrsb r0, [r3, r0] - str r0, [r4, #0x70] - ldr r0, [r3, #8] - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_0801766C - ldrb r0, [r6] - cmp r0, #0xe - bne _080190E8 - ldrb r0, [r5] - adds r0, #6 - strb r0, [r5] - adds r1, r4, #0 - adds r1, #0x60 - movs r0, #0 - strh r0, [r1] -_080190E8: - ldrb r1, [r5] - adds r0, r4, #0 - bl InitializeAnimation - movs r0, #0xfc - bl SoundReq - b _08019178 - .align 2, 0 -_080190F8: .4byte gUnk_080B3E40 -_080190FC: - ldrb r1, [r4, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r4, #0x11] - movs r0, #0xff - strb r0, [r4, #0x1e] - ldr r2, _08019168 @ =gUnk_080B3E40 - ldrb r1, [r4, #0x14] - lsrs r1, r1, #1 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, r0, r2 - ldrb r1, [r0, #2] - ands r1, r3 - lsls r1, r1, #6 - ldrb r2, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r0, _0801916C @ =gPlayerState - str r4, [r0, #0x2c] - adds r0, r4, #0 - movs r1, #1 - movs r2, #3 - bl LoadSwapGFX - adds r0, r4, #0 - bl sub_08079BD8 - adds r0, r4, #0 - adds r0, #0x68 - ldrb r0, [r0] - cmp r0, #0xa - bne _08019170 - movs r0, #0x3c - str r0, [r4, #0x78] - ldrb r1, [r4, #0xa] - movs r0, #0x43 - movs r2, #1 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08019172 - adds r0, r4, #0 - bl CopyPosition - b _08019172 - .align 2, 0 -_08019168: .4byte gUnk_080B3E40 -_0801916C: .4byte gPlayerState -_08019170: - str r5, [r4, #0x78] -_08019172: - adds r0, r4, #0 - bl sub_0801917C -_08019178: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerItemLantern/sub_08054AC8.inc b/asm/non_matching/playerItemLantern/sub_08054AC8.inc deleted file mode 100644 index c8da9d4f..00000000 --- a/asm/non_matching/playerItemLantern/sub_08054AC8.inc +++ /dev/null @@ -1,158 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r5, _08054B14 @ =gPlayerEntity - ldrb r1, [r5, #0x14] - movs r0, #0xe - ands r0, r1 - strb r0, [r4, #0x14] - ldr r1, [r4, #0x48] - ldr r2, _08054B18 @ =gUnk_080FEEB0 - ldrb r0, [r4, #0x14] - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r1] - ldr r1, [r4, #0x48] - ldrb r0, [r4, #0x14] - adds r0, #1 - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r1, #1] - ldr r0, [r4, #0x48] - movs r1, #4 - strb r1, [r0, #6] - ldr r0, [r4, #0x48] - strb r1, [r0, #7] - ldrb r7, [r5, #0x1e] - adds r6, r7, #0 - cmp r6, #0x36 - bhi _08054B06 - ldrh r0, [r5, #0x12] - cmp r0, #6 - beq _08054B1C -_08054B06: - movs r0, #0xff - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - b _08054B68 - .align 2, 0 -_08054B14: .4byte gPlayerEntity -_08054B18: .4byte gUnk_080FEEB0 -_08054B1C: - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r2, [r5, #0x18] - movs r1, #0x40 - ands r1, r2 - ldrb r3, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r3 - orrs r0, r1 - lsrs r2, r2, #7 - lsls r2, r2, #7 - movs r1, #0x7f - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0x1e] - cmp r6, r0 - beq _08054B52 - strb r7, [r4, #0x1e] - ldrb r1, [r4, #0x1e] - ldrh r2, [r4, #0x12] - adds r0, r4, #0 - bl sub_080042D0 -_08054B52: - adds r0, r5, #0 - adds r0, #0x5a - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x5a - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x5b - ldrb r0, [r0] - adds r1, #1 - strb r0, [r1] -_08054B68: - movs r0, #0x10 - bl IsItemEquipped - cmp r0, #1 - bhi _08054BFC - ldrb r0, [r4, #0x1e] - cmp r0, #0xff - beq _08054BE8 - ldr r0, _08054BF4 @ =gPlayerEntity - ldrb r0, [r0, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - beq _08054BE8 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08054BE8 - movs r0, #4 - strb r0, [r4, #0xe] - movs r0, #0x45 - movs r1, #0 - movs r2, #0x10 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - beq _08054BE8 - movs r3, #0x80 - lsls r3, r3, #0xa - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - adds r3, r5, #0 - adds r3, #0x29 - lsrs r1, r1, #0x1d - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldr r1, _08054BF8 @ =gUnk_080FEEB0 - ldrb r0, [r4, #0x14] - adds r0, r0, r1 - ldrb r0, [r0] - adds r2, r5, #0 - adds r2, #0x62 - strb r0, [r2] - ldrb r0, [r4, #0x14] - adds r0, #1 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x63 - strb r1, [r0] -_08054BE8: - ldr r1, _08054BF4 @ =gPlayerEntity - adds r0, r4, #0 - bl sub_08078E84 - b _08054C00 - .align 2, 0 -_08054BF4: .4byte gPlayerEntity -_08054BF8: .4byte gUnk_080FEEB0 -_08054BFC: - bl DeleteThisEntity -_08054C00: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerItemSword/sub_080A7824.inc b/asm/non_matching/playerItemSword/sub_080A7824.inc deleted file mode 100644 index de271c21..00000000 --- a/asm/non_matching/playerItemSword/sub_080A7824.inc +++ /dev/null @@ -1,76 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r5, _080A7860 @ =gPlayerState - ldr r0, [r5, #0x2c] - cmp r0, r4 - beq _080A7834 - bl DeleteThisEntity -_080A7834: - ldrb r0, [r5, #4] - cmp r0, #0 - beq _080A78AE - ldrb r0, [r5, #2] - cmp r0, #0 - bne _080A7846 - str r0, [r5, #0x2c] - bl DeleteThisEntity -_080A7846: - ldr r2, _080A7864 @ =gPlayerEntity - adds r6, r2, #0 - adds r6, #0x5a - ldrb r1, [r6] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080A7868 - movs r0, #0 - str r0, [r5, #0x2c] - bl DeleteThisEntity - b _080A78B4 - .align 2, 0 -_080A7860: .4byte gPlayerState -_080A7864: .4byte gPlayerEntity -_080A7868: - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_080A78B8 - ldrb r1, [r6] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _080A7880 - movs r0, #0x77 - bl SoundReq -_080A7880: - ldrb r0, [r4, #0x1e] - cmp r0, #0x8a - bls _080A788A - movs r0, #0xff - strb r0, [r4, #0x1e] -_080A788A: - ldrb r1, [r6] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080A78A4 - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - bl sub_080A7B98 - b _080A78B4 -_080A78A4: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - b _080A78B4 -_080A78AE: - str r0, [r5, #0x2c] - bl DeleteThisEntity -_080A78B4: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerItemSword/sub_080A78B8.inc b/asm/non_matching/playerItemSword/sub_080A78B8.inc deleted file mode 100644 index e2ea0ab8..00000000 --- a/asm/non_matching/playerItemSword/sub_080A78B8.inc +++ /dev/null @@ -1,220 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - adds r6, r1, #0 - ldr r0, _080A78E8 @ =gPlayerState - ldrb r1, [r0, #0x1b] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _080A78FC - ldrb r0, [r6, #0x1e] - subs r0, #0x6a - strb r0, [r4, #0x1e] - ldr r0, _080A78EC @ =gRoomTransition - ldr r0, [r0] - movs r1, #4 - ands r0, r1 - cmp r0, #0 - beq _080A78F0 - ldrb r1, [r4, #0x14] - lsrs r1, r1, #1 - adds r1, #0xb1 - b _080A78F2 - .align 2, 0 -_080A78E8: .4byte gPlayerState -_080A78EC: .4byte gRoomTransition -_080A78F0: - ldrb r1, [r4, #0x1e] -_080A78F2: - ldrh r2, [r4, #0x12] - adds r0, r4, #0 - bl sub_080042D0 - b _080A7912 -_080A78FC: - ldrb r0, [r6, #0x1e] - subs r0, #0x6a - ldrb r1, [r4, #0x1e] - cmp r0, r1 - beq _080A7912 - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x1e] - ldrh r2, [r4, #0x12] - adds r0, r4, #0 - bl sub_080042D0 -_080A7912: - ldr r2, _080A792C @ =gPlayerState - ldrb r1, [r2, #0x1b] - movs r0, #0x40 - ands r0, r1 - adds r7, r2, #0 - cmp r0, #0 - beq _080A7930 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - b _080A7958 - .align 2, 0 -_080A792C: .4byte gPlayerState -_080A7930: - ldrb r1, [r6, #0x14] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080A7946 - ldrb r0, [r6, #0x18] - lsls r0, r0, #0x19 - lsrs r2, r0, #0x1f - movs r0, #1 - eors r2, r0 - b _080A794C -_080A7946: - ldrb r0, [r6, #0x18] - lsls r0, r0, #0x19 - lsrs r2, r0, #0x1f -_080A794C: - lsls r2, r2, #6 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 -_080A7958: - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - mov r8, r2 - adds r5, r4, #0 - adds r5, #0x3d - cmp r0, #0 - beq _080A7A1C - adds r3, r6, #0 - adds r3, #0x3d - ldrb r0, [r3] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _080A7980 - lsrs r0, r0, #0x18 - cmp r0, #0x81 - bne _080A79AE -_080A7980: - adds r2, r4, #0 - adds r2, #0x3d - ldrb r0, [r2] - movs r1, #0 - strb r0, [r3] - adds r5, r4, #0 - adds r5, #0x3e - ldrb r0, [r5] - adds r3, r6, #0 - adds r3, #0x3e - strb r0, [r3] - movs r3, #0x42 - adds r3, r3, r4 - mov ip, r3 - ldrb r0, [r3] - adds r3, r6, #0 - adds r3, #0x42 - strb r0, [r3] - mov r0, ip - strb r1, [r0] - strb r1, [r5] - strb r1, [r2] - adds r5, r2, #0 -_080A79AE: - ldr r0, [r7, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x14 - ands r0, r1 - cmp r0, #0 - beq _080A79C4 - ldrb r1, [r7, #0x1b] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r7, #0x1b] - b _080A7A1C -_080A79C4: - ldrb r0, [r7, #0x1b] - cmp r0, #0 - beq _080A7A1C - mov r1, r8 - ldrb r0, [r1] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0x43 - beq _080A79E6 - cmp r1, #0x43 - bgt _080A79E0 - cmp r1, #0xd - beq _080A79E6 - b _080A7A08 -_080A79E0: - cmp r1, #0x44 - bne _080A7A08 - b _080A7A1C -_080A79E6: - ldrb r1, [r7, #0x1b] - movs r0, #8 - orrs r0, r1 - strb r0, [r7, #0x1b] - adds r1, r6, #0 - adds r1, #0x42 - movs r0, #2 - strb r0, [r1] - ldrb r1, [r7, #0x1b] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - bne _080A7A1C - movs r0, #0xfe - ands r0, r1 - strb r0, [r7, #0x1b] - b _080A7A1C -_080A7A08: - ldrb r0, [r7, #0x1b] - movs r1, #0xc0 - ands r1, r0 - cmp r1, #0 - bne _080A7A1C - strb r1, [r7, #0x1b] - strb r1, [r7, #4] - str r1, [r7, #0x2c] - bl DeleteThisEntity -_080A7A1C: - adds r1, r5, #0 - ldrb r0, [r1] - movs r2, #0 - ldrsb r2, [r1, r2] - cmp r2, #0 - beq _080A7A36 - cmp r2, #0 - ble _080A7A32 - subs r0, #1 - strb r0, [r1] - b _080A7A36 -_080A7A32: - adds r0, #1 - strb r0, [r5] -_080A7A36: - adds r0, r4, #0 - bl sub_080A7A54 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x19 - cmp r0, #0 - bge _080A7A4C - ldr r1, [r4, #0x48] - ldrb r0, [r1] - rsbs r0, r0, #0 - strb r0, [r1] -_080A7A4C: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerUtils/FreeCarryEntity.inc b/asm/non_matching/playerUtils/FreeCarryEntity.inc deleted file mode 100644 index adfdf51d..00000000 --- a/asm/non_matching/playerUtils/FreeCarryEntity.inc +++ /dev/null @@ -1,47 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - ldr r0, _08078970 @ =gCarriedEntity - ldrb r1, [r0, #2] - adds r2, r0, #0 - cmp r4, r1 - bhs _080789A6 - ldr r0, [r2, #0xc] - cmp r0, r5 - bne _08078974 - subs r0, r1, #1 - b _0807898C - .align 2, 0 -_08078970: .4byte gCarriedEntity -_08078974: - adds r4, #1 - ldrb r3, [r2, #2] - cmp r4, r3 - bhs _080789A6 - lsls r0, r4, #2 - adds r1, r2, #0 - adds r1, #0xc - adds r0, r0, r1 - ldr r0, [r0] - cmp r0, r5 - bne _08078974 - subs r0, r3, #1 -_0807898C: - strb r0, [r2, #2] - ldrb r0, [r2, #2] - cmp r4, r0 - bhs _080789A6 - lsls r0, r4, #2 - adds r0, #0xc - adds r1, r0, r2 -_0807899A: - ldr r0, [r1, #4] - stm r1!, {r0} - adds r4, #1 - ldrb r0, [r2, #2] - cmp r4, r0 - blo _0807899A -_080789A6: - pop {r4, r5, pc} - .syntax divided diff --git a/asm/non_matching/playerUtils/RegisterCarryEntity.inc b/asm/non_matching/playerUtils/RegisterCarryEntity.inc deleted file mode 100644 index f007784a..00000000 --- a/asm/non_matching/playerUtils/RegisterCarryEntity.inc +++ /dev/null @@ -1,20 +0,0 @@ - .syntax unified - push {lr} - adds r3, r0, #0 - ldr r2, _08078950 @ =gCarriedEntity - ldrb r0, [r2, #2] - cmp r0, #0x1f - bhi _0807894C - lsls r0, r0, #2 - adds r1, r2, #0 - adds r1, #0xc - adds r0, r0, r1 - str r3, [r0] - ldrb r0, [r2, #2] - adds r0, #1 - strb r0, [r2, #2] -_0807894C: - pop {pc} - .align 2, 0 -_08078950: .4byte gCarriedEntity - .syntax divided diff --git a/include/entity.h b/include/entity.h index 3fbdb43d..99f2b11d 100644 --- a/include/entity.h +++ b/include/entity.h @@ -491,7 +491,18 @@ void ResetSystemPriority(void); */ extern LinkedList gEntityLists[9]; extern Entity gItemGetEntities[7]; -extern Entity gCarriedEntity; + +typedef struct { + u8 unk_0; + u8 unk_1; + u8 count; + u8 unk_3; + u16 unk_4; + u8 unk_6[2]; + Entity* unk_8; + Entity* unk_c[0x20]; +} CarriedEntity; +extern CarriedEntity gCarriedEntity; /** * Current number of entities. diff --git a/include/new_player.h b/include/new_player.h index 2d5ba1b1..a70122ca 100644 --- a/include/new_player.h +++ b/include/new_player.h @@ -1,3 +1,6 @@ +#ifndef NEW_PLAYER_H +#define NEW_PLAYER_H + #include "entity.h" // TODO Use new player entity struct everywhere once it is fully discovered. @@ -18,4 +21,6 @@ typedef struct { /*0x80*/ u8 unk_80[8]; } PlayerEntity; -#define gNewPlayerEntity (*(PlayerEntity*)&gPlayerEntity) \ No newline at end of file +#define gNewPlayerEntity (*(PlayerEntity*)&gPlayerEntity) + +#endif \ No newline at end of file diff --git a/include/player.h b/include/player.h index fdb3d2d8..3e8256f9 100644 --- a/include/player.h +++ b/include/player.h @@ -303,7 +303,7 @@ typedef struct { /*0xf*/ u8 field_0xf; /*0x10*/ u16 field_0x10; /*0x12*/ u8 field_0x12[6]; - /*0x18*/ u32 field_0x18; + /*0x18*/ Entity* field_0x18; } ItemBehavior; extern void (*const gPlayerItemFunctions[])(Entity*); diff --git a/src/entity.c b/src/entity.c index 90d3afc2..64b6b720 100644 --- a/src/entity.c +++ b/src/entity.c @@ -231,7 +231,6 @@ void EraseAllEntities(void) { } extern Entity gUnk_030015A0[0x48]; -extern Entity gCarriedEntity; NONMATCH("asm/non_matching/GetEmptyEntity.inc", Entity* GetEmptyEntity()) { u8 flags_ip; @@ -262,7 +261,7 @@ NONMATCH("asm/non_matching/GetEmptyEntity.inc", Entity* GetEmptyEntity()) { ClearDeletedEntity(ptr); return ptr; } - } while (++ptr < &gCarriedEntity); + } while (++ptr < (Entity*)&gCarriedEntity); flags_ip = 0; rv = NULL; diff --git a/src/game.c b/src/game.c index 8b5ac8ac..afd6ea10 100644 --- a/src/game.c +++ b/src/game.c @@ -246,6 +246,8 @@ extern void (*const gUnk_080FD138[])(void); extern const u16 gUnk_080FD964[]; +extern void sub_0801B170(void); + void GameTask(void) { static GameState* const sStates[] = { GameTask_Transition, @@ -1865,7 +1867,32 @@ void sub_0805373C(void) { gUnk_080FCD40[gMenu.overlayType](); } -ASM_FUNC("asm/non_matching/game/sub_08053758.inc", void sub_08053758()) +void sub_08053758(void) { + gMenu.overlayType = 1; + gMenu.transitionTimer = 0x78; + gMenu.field_0xa = 0x1e; + *((u8*)&gMenu + 0x10) = 0; // TODO + gUI.field_0x6 = 1; + gMapBottom.bgControlPtr = NULL; + gMapTop.bgControlPtr = NULL; + gRoomControls.camera_target = NULL; + gRoomControls.scroll_y = 0; + gRoomControls.scroll_x = 0; + sub_0801B170(); + DispReset(0); + gScreen.lcd.displayControl = 0x2640; + gScreen.controls.layerFXControl = 0x2244; + gScreen.controls.alphaBlend = 0x1000; + gScreen.controls.windowInsideControl = 0x1f; + gScreen.controls.windowOutsideControl = 0x3f; + gScreen.controls.window0HorizontalDimensions = 0xf0; + gScreen.controls.window0VerticalDimensions = 0x60; + gScreen.bg1.control = 0x1c4e; + gScreen.bg2.control = 0x1dc1; + SoundReq(BGM_STORY); + ResetSystemPriority(); + SetFade(5, 0x100); +} ASM_FUNC("asm/non_matching/game/sub_08053800.inc", void sub_08053800()) diff --git a/src/interrupts.c b/src/interrupts.c index a21d6c5f..44dd53be 100644 --- a/src/interrupts.c +++ b/src/interrupts.c @@ -14,7 +14,6 @@ extern u8 gUnk_03003DE0; extern u8 gUnk_03000C30; extern u8 gUpdateVisibleTiles; -extern Entity gCarriedEntity; extern Entity* gPlayerClones[3]; extern u16 gUnk_080B2CD8[]; diff --git a/src/item/itemMoleMitts.c b/src/item/itemMoleMitts.c index 610c718f..3dd4bc59 100644 --- a/src/item/itemMoleMitts.c +++ b/src/item/itemMoleMitts.c @@ -2,6 +2,8 @@ #include "item.h" #include "functions.h" #include "sound.h" +#include "effects.h" +#include "object.h" extern void (*const gUnk_0811BE04[])(ItemBehavior*, u32); @@ -12,6 +14,10 @@ extern s32 sub_0800875A(Entity*, u32, ItemBehavior*); extern void UpdatePlayerMovement(void); +extern bool32 sub_0807B5B0(Entity*); + +extern const s16 gUnk_0811BE16[]; + void ItemMoleMitts(ItemBehavior* this, u32 arg1) { gUnk_0811BE04[this->stateID](this, arg1); } @@ -83,7 +89,64 @@ void sub_080771C8(ItemBehavior* this, u32 arg1) { } } -ASM_FUNC("asm/non_matching/itemMoleMitts/sub_080772A8.inc", void sub_080772A8(ItemBehavior* this, u32 arg1)) +void sub_080772A8(ItemBehavior* this, u32 param_2) { + Entity* effect; + + if (((this->field_0x5[9] & 8) != 0) && sub_08077F10(this)) { + this->field_0x5[2] = 1; + } + if (GetInventoryValue(ITEM_DIG_BUTTERFLY) == 1) { + if ((this->field_0x5[9] & 7) != 3) { + sub_08077E3C(this, 2); + gPlayerEntity.speed = gUnk_0811BE16[this->field_0x5[9] & 7] << 1; + } else { + UpdateItemAnim(this); + gPlayerEntity.speed = gUnk_0811BE16[this->field_0x5[9] & 7]; + } + } else { + UpdateItemAnim(this); + gPlayerEntity.speed = gUnk_0811BE16[this->field_0x5[9] & 7]; + } + gPlayerEntity.direction = gPlayerEntity.animationState << 2; + if (gPlayerEntity.speed != 0) { + UpdatePlayerMovement(); + } + if ((this->field_0x5[9] & 0x10) != 0) { + if (this->field_0x5[2] != 0) { + gPlayerEntity.frameDuration = 1; + if (sub_080774A0()) { + this->field_0x5[2] = 0; + return; + } + } + DeletePlayerItem(this, param_2); + gPlayerState.field_0x3c[1] = 0; + } else { + if ((this->field_0x5[9] & 0x60) != 0) { + gPlayerEntity.frameDuration = 1; + if (sub_0807B5B0(&gPlayerEntity)) { + SoundReq(SFX_108); + CreateObjectWithParent(&gPlayerEntity, OBJECT_1E, this->field_0x5[9], 0); + } else { + sub_08077DF4(this, 0x51c); + effect = CreateFx(&gPlayerEntity, FX_STARS_STRIKE, 0); + if (effect != NULL) { + effect->animationState = this->field_0x5[5]; + effect->spritePriority.b0 = gPlayerEntity.spritePriority.b0 - 1; + } + effect = CreateFx(&gPlayerEntity, FX_STARS_STRIKE, 0); + if (effect != NULL) { + effect->animationState = this->field_0x5[5]; + effect->spritePriority.b0 = gPlayerEntity.spritePriority.b0 - 1; + effect->field_0xf = 1; + } + this->stateID = 3; + this->field_0x5[0] = 1; + SoundReq(SFX_ITEM_GLOVES_KNOCKBACK); + } + } + } +} void sub_08077448(ItemBehavior* this, u32 arg1) { gPlayerEntity.direction = gPlayerEntity.animationState << 2 ^ 0x10; diff --git a/src/item/itemTryPickupObject.c b/src/item/itemTryPickupObject.c index 2e4c9fd3..9962dbf6 100644 --- a/src/item/itemTryPickupObject.c +++ b/src/item/itemTryPickupObject.c @@ -1,17 +1,68 @@ #include "item.h" #include "functions.h" +#include "sound.h" extern void (*const gUnk_0811BDB4[])(ItemBehavior*, u32); u32 sub_08077F64(ItemBehavior* arg0, u32 unk); +u32 sub_080789A8(void); +void sub_080762C4(ItemBehavior*, void*, u8, u32); +void sub_08076088(ItemBehavior*, void*, u32); + void ItemTryPickupObject(ItemBehavior* this, u32 arg1) { gUnk_0811BDB4[this->stateID](this, arg1); } -ASM_FUNC("asm/non_matching/itemTryPickupObject/ItemPickupCheck.inc", void ItemPickupCheck(ItemBehavior* this, u32 arg1)) +void ItemPickupCheck(ItemBehavior* this, u32 param_2) { + Entity* entity; -void sub_080762C4(ItemBehavior* this, u32 arg1, u8 arg2, u32 arg3) { + if (!(((gPlayerState.field_0x3[1] != 0) || + (((gPlayerState.jump_status != 0 && ((gPlayerState.flags & (PL_BUSY | PL_FALLING | PL_IN_MINECART)) == 0)) || + (gPlayerState.field_0x0[1] = gPlayerEntity.animationState | 0x80, 8 < gPlayerEntity.iframes)))))) { + + switch (sub_080789A8()) { + case 2: + if (((gCarriedEntity.unk_8)->field_0x16 & 0xf) == 0) { + sub_08076088(this, gCarriedEntity.unk_8, param_2); + return; + } + entity = gCarriedEntity.unk_8; + this->field_0x18 = entity; + entity->action = 2; + entity->subAction = 5; + gPlayerState.framestate = 5; + sub_080762C4(this, entity, 2, param_2); + gUnk_0200AF00.unk_2e = 8; + SoundReq(SFX_102); + break; + case 1: + sub_080762C4(this, 0, 1, param_2); + SoundReq(SFX_102); + break; + case 0: + this->stateID = 5; + this->field_0x5[2] = 0x0f; + this->field_0xf = 6; + gPlayerState.field_0xa = (8 >> param_2) | gPlayerState.field_0xa; + gPlayerState.keepFacing = (8 >> param_2) | gPlayerState.keepFacing; + if ((gPlayerState.flags & PL_NO_CAP) == 0) { + sub_08077DF4(this, 0x378); + } else { + sub_08077DF4(this, 0x948); + } + SoundReq(SFX_88); + break; + default: + break; + } + + } else { + sub_08077F50(this, param_2); + } +} + +void sub_080762C4(ItemBehavior* this, void* arg1, u8 arg2, u32 arg3) { this->field_0x18 = arg1; gPlayerState.heldObject = arg2; sub_08077D38(this, arg3); @@ -25,7 +76,7 @@ void sub_08076488(ItemBehavior* this, u32 arg1) { if (this->field_0x5[2] == 0) { if (sub_08077F64(this, arg1) != 0) { - if (((*(u8*)((this->field_0x18) + 0x16) & 0xf0) == 0x10) && ((gRoomTransition.frameCount & 1U) != 0)) { + if ((((this->field_0x18->field_0x16) & 0xf0) == 0x10) && ((gRoomTransition.frameCount & 1U) != 0)) { return; } UpdateItemAnim(this); diff --git a/src/npc/bigGoron.c b/src/npc/bigGoron.c index b98646b3..ed22522f 100644 --- a/src/npc/bigGoron.c +++ b/src/npc/bigGoron.c @@ -34,6 +34,17 @@ Entity* sub_0806D00C(Entity* this); void sub_0806D4C0(Entity*, u32); +extern const u8 gUnk_08114100[]; + +typedef struct { + s8 type; + s8 x; + s8 y; + u8 direction; +} struct_08114104; + +extern const struct_08114104 gUnk_08114104[]; + void BigGoron(Entity* this) { gUnk_081140D4[this->type](this); } @@ -85,7 +96,27 @@ Entity* sub_0806D00C(Entity* this) { return entity; } -ASM_FUNC("asm/non_matching/bigGoron/sub_0806D02C.inc", void sub_0806D02C(Entity* this)) +void sub_0806D02C(Entity* this) { + s32 tmp1; + s32 tmp2; + sub_0806D164(this); + + gScreen.lcd.displayControl |= 0x4000; + gScreen.controls.windowInsideControl = 0x3f3f; + gScreen.controls.windowOutsideControl = 0x3d; + + tmp1 = -(s16)gScreen.bg1.xOffset; + tmp2 = tmp1 + 0x100; + tmp1 = min(max(0, tmp1), 0xf0); + tmp2 = min(max(0, tmp2), 0xf0); + gScreen.controls.window1HorizontalDimensions = (tmp1 << 8) | tmp2; + + tmp1 = -(s16)gScreen.bg1.yOffset; + tmp2 = tmp1 + 0x100; + tmp1 = min(max(0, tmp1), 0xa0); + tmp2 = min(max(0, tmp2), 0xa0); + gScreen.controls.window1VerticalDimensions = (tmp1 << 8) | tmp2; +} void sub_0806D0B0(Entity* this) { gMapTop.bgControlPtr = 0; @@ -310,7 +341,39 @@ void sub_0806D514(Entity* this) { sub_0806D520(this, 3); } -ASM_FUNC("asm/non_matching/bigGoron/sub_0806D520.inc", void sub_0806D520(Entity* this, u32 param)) +void sub_0806D520(Entity* this, u32 param_2) { + if (this->action == 0) { + this->action = 1; + this->field_0xf = gUnk_08114100[param_2] + 6; + this->frameIndex = this->field_0xf; + this->actionDelay = 8; + } + this->x.HALF.HI = this->parent->x.HALF.HI; + this->y.HALF.HI = this->parent->y.HALF.HI; + this->spriteOffsetX = this->parent->spriteOffsetX; + this->spriteOffsetY = this->parent->spriteOffsetY; + this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY; + if (this->subAction != 0 || + CheckPlayerProximity(this->x.HALF.HI + param_2 * -0x10 + 0xc, this->y.HALF.HI, 0x18, 0x40)) { + if (this->frameIndex >= this->field_0xf + 2) { + return; + } + if (--this->actionDelay != 0) { + return; + } + this->actionDelay = 8; + this->frameIndex++; + } else { + if (this->frameIndex <= this->field_0xf) { + return; + } + if (--this->actionDelay != 0) { + return; + } + this->actionDelay = 8; + this->frameIndex--; + } +} void sub_0806D5D4(void) { u32 itemSlot; @@ -357,7 +420,19 @@ void sub_0806D66C(Entity* this) { this->spriteOrientation.flipY = 2; } -ASM_FUNC("asm/non_matching/bigGoron/sub_0806D67C.inc", void sub_0806D67C(Entity* this)) +void sub_0806D67C(Entity* this) { + const struct_08114104* ptr = gUnk_08114104; + while (ptr->type != -1) { + Entity* effect = CreateFx(this, ptr->type, 0x40); + if (effect != NULL) { + effect->x.HALF.HI = ptr->x + effect->x.HALF.HI; + effect->y.HALF.HI = ptr->y + effect->y.HALF.HI; + effect->direction = ptr->direction; + effect->speed = 0x100; + } + ptr++; + } +} void sub_0806D6D0(void) { Entity* entity = FindEntity(NPC, BIG_GORON, 7, 2, 0); diff --git a/src/npc/librarians.c b/src/npc/librarians.c index 9ff8ab14..c2e3ddc9 100644 --- a/src/npc/librarians.c +++ b/src/npc/librarians.c @@ -10,10 +10,68 @@ extern u16 gUnk_08113078[]; extern void sub_08095BE0(Entity*, u32); -ASM_FUNC("asm/non_matching/librarians/Librarians.inc", void Librarians(Entity* this)) +extern const u8 gUnk_08114F30[]; -ASM_FUNC("asm/non_matching/librarians/sub_0806BA34.inc", - void sub_0806BA34(Entity* this, ScriptExecutionContext* context)) +void Librarians(Entity* this) { + if (this->action == 0) { + this->action = 1; + sub_0807DD50(this); + this->spriteRendering.b3 = gUnk_08114F30[this->spriteRendering.b3]; + } + ExecuteScriptForEntity(this, NULL); + HandleEntity0x82Actions(this); + GetNextFrame(this); +} + +void sub_0806BA34(Entity* this, ScriptExecutionContext* context) { + u32 gotBook1; + u32 gotBook2; + u32 gotBook3; + u32 message = 0x4912; + context->condition = 0; + if (CheckLocalFlag(0x73)) { + message = 0x4913; + } else { + gotBook1 = GetInventoryValue(ITEM_QST_BOOK1); + gotBook2 = GetInventoryValue(ITEM_QST_BOOK2); + gotBook3 = GetInventoryValue(ITEM_QST_BOOK3); + if (gotBook1 == 1) { + message = 0x4906; + context->condition = 1; + SetLocalFlag(0x6b); + SetLocalFlag(0x6a); + } else if (gotBook2 == 1) { + message = 0x4907; + context->condition = 1; + SetLocalFlag(0x6b); + SetLocalFlag(0x6a); + } else if (gotBook3 == 1) { + message = 0x4908; + context->condition = 1; + SetLocalFlag(0x6b); + SetLocalFlag(0x6a); + } else { + if (CheckLocalFlag(0x6a)) { + if (!CheckLocalFlag(0x6b)) { + message = 0x4901; + SetLocalFlag(0x6b); + } else { + if (gotBook1 == 0) { + message = 0x4902; + SetLocalFlag(0x6b); + } else if (gotBook2 == 0) { + message = 0x4903; + SetLocalFlag(0x6d); + } else if (gotBook3 == 0) { + message = 0x4904; + SetLocalFlag(0x70); + } + } + } + } + } + MessageNoOverlap(message, this); +} void sub_0806BB1C(Entity* this, ScriptExecutionContext* context) { s32 item = 0xffffffff; diff --git a/src/playerItem/playerItem11.c b/src/playerItem/playerItem11.c index 72b5a702..1ae35f07 100644 --- a/src/playerItem/playerItem11.c +++ b/src/playerItem/playerItem11.c @@ -14,6 +14,11 @@ extern Hitbox gUnk_080B3E18; extern u8 gUnk_080B3DE0[]; extern Hitbox* gUnk_080B3DE8[]; +extern u32 sub_08007DD6(u32, const u16*); + +extern const u16 gUnk_080B3DF4[]; +extern const u8 gUnk_08003E44[]; + void PlayerItem11(Entity* this) { if (this->health) { this->iframes = 0; @@ -93,7 +98,66 @@ void sub_08018DE8(Entity* this) { sub_08078CD0(&gPlayerEntity); } -ASM_FUNC("asm/non_matching/playerItem11/sub_08018E68.inc", void sub_08018E68(Entity* this)) +void sub_08018E68(Entity* this) { + s32 y; + s32 x; + if (this->child == NULL) { + GetNextFrame(this); + sub_08008790(this, 5); + } else { + if ((this->child->field_0x3a & 4) == 0) { + DeleteThisEntity(); + } + if ((this->bitfield & 0x80) != 0) { + sub_08018F6C(this); + return; + } + } + if (this->actionDelay-- != 0) { + LinearMoveUpdate(this); + + switch (this->direction) { + case DirectionNorth: + x = 0; + y = -4; + break; + case DirectionSouth: + x = 0; + y = 4; + break; + case DirectionWest: + x = -4; + y = 0; + break; + case DirectionEast: + x = 4; + y = 0; + break; + } + if (this->child != NULL) { + this->child->direction = this->direction; + CopyPosition(this, this->child); + } + if (this->type2 == 0) { + sub_0800451C(this); + } + if (sub_08007DD6(sub_080B1A0C(this, x, y), gUnk_080B3DF4) != 0) { + return; + } + if (GetRelativeCollisionTile(this, x, y) == 0x74) { + return; + } + if (sub_080040D8(this, (u8*)gUnk_08003E44, this->x.HALF.HI + x, this->y.HALF.HI + y) == 0) { + return; + } + } + + if (this->child == NULL) { + InitializeAnimation(this, this->type + 0xd); + } + this->action++; + sub_08018F6C(this); +} void sub_08018F6C(Entity* this) { if (this->child != NULL) { diff --git a/src/playerItem/playerItem13.c b/src/playerItem/playerItem13.c index 80cfc982..e4b03d8b 100644 --- a/src/playerItem/playerItem13.c +++ b/src/playerItem/playerItem13.c @@ -1,26 +1,218 @@ +#define NENT_DEPRECATED #include "entity.h" +#include "functions.h" +#include "player.h" +#include "new_player.h" +#include "asm.h" +#include "effects.h" +#include "functions.h" +#include "player.h" +#include "new_player.h" +#include "sound.h" +#include "functions.h" +#include "new_player.h" +#include "player.h" extern void (*const gUnk_081320A8[])(Entity*); +typedef struct { + Entity base; + u8 unk_68[4]; + u16 unk_6c; + u16 unk_6e; +} PlayerItem13Entity; +extern bool32 ProcessMovement10(Entity*); + +extern const s8 gUnk_081320C4[]; + +bool32 sub_080AD32C(PlayerItem13Entity*); +void sub_080AD27C(PlayerItem13Entity*); +u32 sub_0806F8DC(Entity*); + +extern const u16 gUnk_081320CC[]; +extern const u32 gUnk_081320D4[]; + void PlayerItem13(Entity* this) { gUnk_081320A8[this->subAction](this); } ASM_FUNC("asm/non_matching/playerItem13/sub_080ACF2C.inc", void sub_080ACF2C(Entity* this)) -ASM_FUNC("asm/non_matching/playerItem13/sub_080ACFCC.inc", void sub_080ACFCC(Entity* this)) +void sub_080ACFCC(PlayerItem13Entity* this) { + Entity* child = super->child; + if ((this->unk_6c == child->kind) || (this->unk_6e == child->id)) { + if (child->action != 2) { + sub_08079184(); + DeleteThisEntity(); + } else { + if ((gPlayerState.heldObject == 0) || ((gNewPlayerEntity.unk_79 & 0x7f) != 0)) { + sub_080AD27C(this); + super->subAction++; + super->flags &= 0x7f; + super->direction = 0xff; + super->zVelocity = 0; + } + } + } else { + sub_08079184(); + DeleteThisEntity(); + } +} -ASM_FUNC("asm/non_matching/playerItem13/sub_080AD040.inc", void sub_080AD040(Entity* this)) +void sub_080AD040(PlayerItem13Entity* this) { + PlayerItem13Entity* child; + u32 tile; + u32 tmp; + + child = (PlayerItem13Entity*)super->child; + if ((child->base).action != 2) { + DeleteThisEntity(); + } + if ((super->bitfield & 0x80) != 0) { + super->z.WORD = 0; + } + if (super->speed != 0) { + + if ((super->knockbackDuration & 0x80) != 0) { + super->direction = super->knockbackDirection; + super->knockbackDuration = 0; + } + if (GetRelativeCollisionTile(super, gUnk_081320C4[super->direction >> 2], + gUnk_081320C4[(super->direction >> 2) + 1]) == 0x74) { + LinearMoveUpdate(super); + } else { + tile = sub_080B1B0C(super); + if ((tile != 0x24) && (tile != 0x26)) { + ProcessMovement10(super); + } + } + if (GravityUpdate(super, 0x2000) == 0) { + (child->base).zVelocity = super->zVelocity; + (child->base).x = super->x; + (child->base).y = super->y; + (child->base).z = super->z; + tile = GetTileUnderEntity(super); + switch (tile) { + case 0xd: + case 0x10: + case 0x11: + case 0x13: + case 0x5a: + if (child == this) { + + switch (tile) { + case 0xd: + CreateFx(super, FX_FALL_DOWN, 0); + break; + case 0x5a: + CreateFx(super, FX_LAVA_SPLASH, 0); + break; + case 0x10: + case 0x11: + CreateFx(super, FX_WATER_SPLASH, 0); + break; + case 0x13: + CreateFx(super, FX_GREEN_SPLASH, 0); + break; + } + (child->base).subAction = 4; + } else { + (child->base).subAction = 3; + } + DeleteThisEntity(); + break; + } + if (super->child == super) { + if (super->type2 != 0xff) { + if (super->type2 == 0x0f) { + CreateFx(super, super->actionDelay, 0x80); + } else { + CreateObjectWithParent(super, super->type2, super->actionDelay, 0); + } + } + DeleteThisEntity(); + } else { + if (super->actionDelay != 0 || sub_080AD32C(child)) { + if (super->actionDelay == 1) { + SoundReq(SFX_104); + } + UpdateSpriteForCollisionLayer(super); + child->base.subAction = 3; + child->base.spriteRendering.b3 = super->spriteRendering.b3; + child->base.spriteOrientation.flipY = super->spriteOrientation.flipY; + child->base.spritePriority.b0 = super->spritePriority.b0; + DeleteThisEntity(); + } else { + SoundReq(SFX_104); + super->actionDelay++; + super->zVelocity = 0x10000; + super->speed /= 2; + return; + } + } + } else { + sub_0800451C(super); + sub_0806F8DC(super); + CopyPosition(super, (Entity*)child); + (child->base).zVelocity = super->zVelocity; + (child->base).direction = super->direction; + return; + } + + } else { + tmp = gPlayerEntity.frame & 1; + if (tmp != 0) { + SoundReq(SFX_PLY_VO5); + sub_080AD27C(this); + return; + } + if ((gPlayerState.heldObject != 0) && ((gNewPlayerEntity.unk_79 & 0x80) == 0)) { + return; + } + sub_080AD27C(this); + super->flags &= 0x7f; + super->direction = 0xff; + super->zVelocity = tmp & 1; + return; + } +} void sub_080AD274(Entity* this) { DeleteThisEntity(); } -ASM_FUNC("asm/non_matching/playerItem13/sub_080AD27C.inc", void sub_080AD27C(Entity* this)) +void sub_080AD27C(PlayerItem13Entity* this) { + u32 tmp; + PlayerItem13Entity* child = (PlayerItem13Entity*)super->child; + gNewPlayerEntity.unk_74 = NULL; + if ((this->unk_6c == (u16)(child->base).kind) && (this->unk_6e == (u16)(child->base).id)) { + if (child != this) { + (child->base).subAction = 2; + } else { + super->spritePriority.b1 = 3; + } + super->hitbox = (child->base).hitbox; + tmp = super->field_0x16 >> 4; + super->speed = gUnk_081320CC[tmp]; + super->zVelocity = gUnk_081320D4[tmp]; + (child->base).z.HALF.HI += 8; + super->z.HALF.HI = (child->base).z.HALF.HI; + super->collisionLayer = (child->base).collisionLayer; + super->y.HALF.HI = gPlayerEntity.y.HALF.HI; + super->x.HALF.HI = gPlayerEntity.x.HALF.HI; + super->field_0x3c = gPlayerEntity.field_0x3c; + super->flags |= 0x80; + sub_0801766C(super); + } else { + sub_08079184(); + DeleteThisEntity(); + } +} -bool32 sub_080AD32C(Entity* this) { +bool32 sub_080AD32C(PlayerItem13Entity* this) { bool32 result = FALSE; - if (((this->field_0x16 & 0xf0) == 0x10) || ((this->kind == OBJECT && ((this->id == 5 || (this->id == 0x7d)))))) { + if (((super->field_0x16 & 0xf0) == 0x10) || + ((super->kind == OBJECT && ((super->id == 5 || (super->id == 0x7d)))))) { result = TRUE; } return result; diff --git a/src/playerItem/playerItemBomb.c b/src/playerItem/playerItemBomb.c index 93ae9547..8d3e83e4 100644 --- a/src/playerItem/playerItemBomb.c +++ b/src/playerItem/playerItemBomb.c @@ -1,45 +1,54 @@ +#define NENT_DEPRECATED #include "entity.h" #include "player.h" #include "functions.h" +#include "asm.h" +#include "item.h" + +typedef struct { + Entity base; + u32 unk_68; +} PlayerItemBombEntity; extern void (*const gUnk_080B77C8[])(Entity*); void sub_0801B418(Entity*); -void sub_0801B3A4(Entity*); +void sub_0801B3A4(PlayerItemBombEntity*); extern void (*const gUnk_080B77D8[])(Entity*); -void PlayerItemBomb(Entity* this) { +extern const Hitbox gUnk_080B77F4; + +void PlayerItemBomb(PlayerItemBombEntity* this) { u8 uVar1, uVar2; - gUnk_080B77C8[this->action](this); - GetNextFrame(this); - // TODO regalloc - uVar2 = uVar1 = this->action; + gUnk_080B77C8[super->action](super); + GetNextFrame(super); + uVar2 = uVar1 = super->action; if (uVar1 != 0x03) { - if (this->actionDelay != 0) { - if (this->field_0x68.HALF.LO == 7) { - this->actionDelay -= 1; + if (super->actionDelay != 0) { + if (*(u8*)&this->unk_68 == 7) { + super->actionDelay -= 1; } - if (this->actionDelay == 0) { - this->field_0xf = 0x50; - *(u32*)&this->field_0x68 = 0; - this->spriteRendering.b0 = 3; - SetAffineInfo(this, 0x100, 0x100, 0); + if (super->actionDelay == 0) { + super->field_0xf = 0x50; + this->unk_68 = 0; + super->spriteRendering.b0 = 3; + SetAffineInfo(super, 0x100, 0x100, 0); } } else { - if (this->field_0xf != 0) { - if (this->field_0xf-- == 0x01) { - if ((uVar1 == 0x02) && (this->subAction == 1)) { + if (super->field_0xf != 0) { + if (super->field_0xf-- == 0x01) { + if ((uVar1 == 0x02) && (super->subAction == 1)) { gPlayerState.heldObject = 0; } - this->action = 0x03; - this->spritePriority.b1 = 2; - this->actionDelay = 0x0f; - this->spriteSettings.draw = 0; - sub_0805EC60(this); - FreeCarryEntity(this); - CreateObjectWithParent(this, 0x20, 0, 0); - sub_0801B418(this); + super->action = 0x03; + super->spritePriority.b1 = 2; + super->actionDelay = 0x0f; + super->spriteSettings.draw = 0; + sub_0805EC60(super); + FreeCarryEntity(super); + CreateObjectWithParent(super, 0x20, 0, 0); + sub_0801B418(super); } else { sub_0801B3A4(this); } @@ -48,9 +57,50 @@ void PlayerItemBomb(Entity* this) { } } -ASM_FUNC("asm/non_matching/playerItemBomb/sub_0801B250.inc", void sub_0801B250(Entity* this)) +void sub_0801B250(PlayerItemBombEntity* this) { + super->spriteSettings.draw = 1; + super->action = 1; + super->spritePriority.b1 = 3; + super->flags &= 0x7f; + if (super->type == 0xff) { + super->actionDelay = 0x3c; + } else if (super->type == 0xfe) { + super->actionDelay = 0x0f; + super->type = 0xff; + } else { + super->actionDelay = 0x96; + } + super->hitbox = (Hitbox*)&gUnk_080B77F4; + super->field_0x16 = 0; + if (*(u8*)&this->unk_68 == 7) { + InitializeAnimation(super, 5); + } else { + InitializeAnimation(super, 0x15); + } +} -ASM_FUNC("asm/non_matching/playerItemBomb/sub_0801B2CC.inc", void sub_0801B2CC(Entity* this)) +void sub_0801B2CC(PlayerItemBombEntity* this) { + u16 unaff_r5; + + if (!sub_0800442E(super)) { + RegisterCarryEntity(super); + } + switch (IsItemEquipped(ITEM_REMOTE_BOMBS)) { + case 0: + unaff_r5 = 1; + break; + case 1: + unaff_r5 = 2; + break; + case 2: + unaff_r5 = 0; + break; + } + if ((unaff_r5 & gPlayerState.field_0x92) != 0) { + super->actionDelay = 0; + super->field_0xf = 1; + } +} void sub_0801B318(Entity* this) { gUnk_080B77D8[this->subAction](this); @@ -87,7 +137,28 @@ void sub_0801B38C(Entity* this) { } } -ASM_FUNC("asm/non_matching/playerItemBomb/sub_0801B3A4.inc", void sub_0801B3A4(Entity* this)) +void sub_0801B3A4(PlayerItemBombEntity* this) { + u32 tmp; + if (super->field_0xf >= 0x29) { + tmp = 8; + } else { + tmp = 4; + if ((this->unk_68 & 0x8000) != 0) { + this->unk_68 -= 0x10; + } else { + this->unk_68 += 0x10; + } + if (0x7f < (this->unk_68 & 0xf0) - 1) { + this->unk_68 ^= 0x8000; + } + SetAffineInfo(super, 0x130 - (this->unk_68 & 0xf0), 0x130 - (this->unk_68 & 0xf0), 0); + } + if ((super->field_0xf & tmp) == 0) { + super->palette.b.b0 = 0; + } else { + super->palette.b.b0 = super->palette.b.b4; + } +} void sub_0801B418(Entity* this) { s32 x; diff --git a/src/playerItem/playerItemBow.c b/src/playerItem/playerItemBow.c index 1365afaf..32d72ea8 100644 --- a/src/playerItem/playerItemBow.c +++ b/src/playerItem/playerItemBow.c @@ -1,18 +1,104 @@ +#define NENT_DEPRECATED #include "global.h" #include "asm.h" #include "entity.h" #include "functions.h" #include "effects.h" +#include "object.h" extern void (*const gUnk_080B3E30[])(Entity*); +typedef struct { + Entity base; + u8 unk_68; + u8 unk_69[3]; + u32 unk_6c; + u32 unk_70; + u32 unk_74; + u32 unk_78; +} PlayerItemBowEntity; + +typedef struct { + s8 x; + s8 y; + u8 spriteSettings; + u8 unk_3; + s8 unk_4; + s8 unk_5; + u8 animIndex; + u8 unk_7; + Hitbox* hitbox; +} struct_080B3E40; + +extern const struct_080B3E40 gUnk_080B3E40[]; + +void sub_0801917C(PlayerItemBowEntity*); + void PlayerItemBow(Entity* this) { gUnk_080B3E30[(this->action)](this); } -ASM_FUNC("asm/non_matching/playerItemBow/sub_08018FE4.inc", void sub_08018FE4(Entity* this)) +void sub_08018FE4(PlayerItemBowEntity* this) { + Entity* object; + const struct_080B3E40* ptr; + super->action = 1; + if (super->type != 0) { + super->spriteSettings.draw = 1; + super->flags |= 0x80; + this->unk_74 = 0x6a; + super->hurtType = super->type2; + super->spriteIndex = 0xa6; + if (super->hurtType == 0x0e) { + super->speed = 0x400; + } else { + super->speed = 0x300; + } + super->direction = super->animationState << 2; + super->field_0x3c = gPlayerEntity.field_0x3c + 1; + super->flags2 = gPlayerEntity.flags2; + if (super->collisionLayer == 2) { + super->type2 = 1; + } else { + super->type2 = 0; + } + super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY; + ptr = &gUnk_080B3E40[super->animationState >> 1]; + super->x.HALF.HI = gPlayerEntity.x.HALF.HI + ptr->x; + super->y.HALF.HI = gPlayerEntity.y.HALF.HI + ptr->y; + super->spriteSettings.flipX = ptr->spriteSettings; + super->spriteSettings.flipY = ptr->unk_3; + super->animIndex = ptr->animIndex; + this->unk_6c = ptr->unk_4; + this->unk_70 = ptr->unk_5; + super->hitbox = ptr->hitbox; + sub_0801766C(super); + if (super->hurtType == 0x0e) { + super->animIndex += 6; + super->spriteVramOffset = 0; + } + InitializeAnimation(super, super->animIndex); + SoundReq(SFX_FC); + } else { + super->updatePriority = 6; + super->frameIndex = 0xff; + super->spriteSettings.flipX = gUnk_080B3E40[super->animationState >> 1].spriteSettings; + gPlayerState.item = super; + LoadSwapGFX(super, 1, 3); + sub_08079BD8(super); + if (this->unk_68 == 0xa) { + this->unk_78 = 0x3c; + object = CreateObject(OBJECT_43, super->type, 1); + if (object != NULL) { + CopyPosition(super, object); + } + } else { + this->unk_78 = 0; + } + sub_0801917C(this); + } +} -ASM_FUNC("asm/non_matching/playerItemBow/sub_0801917C.inc", void sub_0801917C(Entity* this)) +ASM_FUNC("asm/non_matching/playerItemBow/sub_0801917C.inc", void sub_0801917C(PlayerItemBowEntity* this)) void sub_08019410(Entity* this) { if (this->actionDelay < 0xf) { diff --git a/src/playerItem/playerItemLantern.c b/src/playerItem/playerItemLantern.c index 077fa405..2d7c01d4 100644 --- a/src/playerItem/playerItemLantern.c +++ b/src/playerItem/playerItemLantern.c @@ -1,11 +1,15 @@ #include "entity.h" #include "player.h" #include "functions.h" +#include "item.h" +#include "object.h" extern void (*const gUnk_080FEEA8[])(Entity*); void sub_08054AC8(Entity*); +extern const s8 gUnk_080FEEB0[]; + void PlayerItemLantern(Entity* this) { gUnk_080FEEA8[this->action](this); this->bitfield = 0; @@ -29,4 +33,40 @@ void sub_08054A60(Entity* this) { sub_08054AC8(this); } -ASM_FUNC("asm/non_matching/playerItemLantern/sub_08054AC8.inc", void sub_08054AC8(Entity* this)) +void sub_08054AC8(Entity* this) { + Entity* object; + this->animationState = gPlayerEntity.animationState & 0xe; + this->hitbox->offset_x = gUnk_080FEEB0[this->animationState]; + this->hitbox->offset_y = gUnk_080FEEB0[this->animationState + 1]; + this->hitbox->width = 4; + this->hitbox->height = 4; + if (!((gPlayerEntity.frameIndex < 0x37) && ((u32)gPlayerEntity.spriteIndex == 6))) { + this->frameIndex = 0xff; + this->flags &= ~ENT_COLLIDE; + } else { + this->flags |= ENT_COLLIDE; + this->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX; + this->spriteSettings.flipY = gPlayerEntity.spriteSettings.flipY; + if (gPlayerEntity.frameIndex != this->frameIndex) { + this->frameIndex = gPlayerEntity.frameIndex; + sub_080042D0(this, this->frameIndex, this->spriteIndex); + } + this->frame = gPlayerEntity.frame; + this->frameSpriteSettings = gPlayerEntity.frameSpriteSettings; + } + if (IsItemEquipped(ITEM_LANTERN_ON) < 2) { + if (((this->frameIndex != 0xff) && (gPlayerEntity.spriteSettings.draw != 0)) && (this->actionDelay-- == 0)) { + this->actionDelay = 4; + object = CreateObject(OBJECT_45, 0, 0x10); + if (object != NULL) { + PositionRelative(this, object, 0, 0x20000); + object->spritePriority.b0 = this->spritePriority.b0; + object->spriteOffsetX = gUnk_080FEEB0[this->animationState]; + object->spriteOffsetY = gUnk_080FEEB0[this->animationState + 1]; + } + } + sub_08078E84(this, &gPlayerEntity); + } else { + DeleteThisEntity(); + } +} diff --git a/src/playerItem/playerItemSword.c b/src/playerItem/playerItemSword.c index 8ff01c17..7bfded63 100644 --- a/src/playerItem/playerItemSword.c +++ b/src/playerItem/playerItemSword.c @@ -1,10 +1,22 @@ +#define NENT_DEPRECATED #include "entity.h" #include "functions.h" +#include "sound.h" extern void (*const gUnk_0812905C[])(Entity*); extern u8 gUnk_08129096[]; +typedef struct { + Entity base; + u8 unk_68; +} PlayerItemSwordEntity; + +void sub_080A78B8(PlayerItemSwordEntity*, Entity*); +void sub_080A7B98(PlayerItemSwordEntity*); + +void sub_080A7A54(PlayerItemSwordEntity*); + void PlayerItemSword(Entity* this) { gUnk_0812905C[this->action](this); if (this->type == 0) { @@ -18,20 +30,122 @@ ASM_FUNC("asm/non_matching/playerItemSword/sub_080A758C.inc", void sub_080A758C( ASM_FUNC("asm/non_matching/playerItemSword/sub_080A76CC.inc", void sub_080A76CC(Entity* this)) -ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7824.inc", void sub_080A7824(Entity* this)) +void sub_080A7824(PlayerItemSwordEntity* this) { + if (gPlayerState.item != super) { + DeleteThisEntity(); + } + if (gPlayerState.field_0x3[1] != 0) { + if (gPlayerState.jump_status == 0) { + gPlayerState.item = NULL; + DeleteThisEntity(); + } + if ((gPlayerEntity.frame & 0x80) != 0) { + gPlayerState.item = NULL; + DeleteThisEntity(); + } else { + sub_080A78B8(this, &gPlayerEntity); + if ((gPlayerEntity.frame & 0x20) != 0) { + SoundReq(SFX_PLY_VO3); + } + if (super->frameIndex > 0x8a) { + super->frameIndex = 0xff; + } + if ((gPlayerEntity.frame & 8) != 0) { + super->flags |= ENT_COLLIDE; + sub_080A7B98(this); + } else { + super->flags &= ~ENT_COLLIDE; + } + } + } else { + gPlayerState.item = NULL; + DeleteThisEntity(); + } +} -ASM_FUNC("asm/non_matching/playerItemSword/sub_080A78B8.inc", void sub_080A78B8(Entity* this)) +void sub_080A78B8(PlayerItemSwordEntity* this, Entity* param_2) { + u32 flipX; -void sub_080A7A54(Entity* this) { + if ((gPlayerState.sword_state & 0x20) != 0) { + super->frameIndex = param_2->frameIndex - 0x6a; + if ((gRoomTransition.frameCount & 4) != 0) { + sub_080042D0(super, (super->animationState >> 1) + 0xb1, super->spriteIndex); + } else { + sub_080042D0(super, super->frameIndex, super->spriteIndex); + } + } else { + if (param_2->frameIndex - 0x6a != super->frameIndex) { + super->frameIndex = param_2->frameIndex - 0x6a; + sub_080042D0(super, (u32)super->frameIndex, super->spriteIndex); + } + } + if ((gPlayerState.sword_state & 0x40) != 0) { + super->spriteSettings.flipX = 0; + } else { + if ((param_2->animationState & 2) != 0) { + flipX = param_2->spriteSettings.flipX ^ 1; + } else { + flipX = param_2->spriteSettings.flipX; + } + super->spriteSettings.flipX = flipX; + } + if ((super->bitfield & 0x80) != 0) { + if ((param_2->iframes == 0) || ((u8)param_2->iframes == 0x81)) { + param_2->iframes = super->iframes; + param_2->knockbackDirection = super->knockbackDirection; + param_2->knockbackDuration = super->knockbackDuration; + super->knockbackDuration = 0; + super->knockbackDirection = 0; + super->iframes = 0; + } + if ((gPlayerState.flags & 0x8000000) != 0) { + gPlayerState.sword_state |= 0x80; + } else if (gPlayerState.sword_state != 0) { + switch (super->bitfield & 0x7f) { + case 0x44: + break; + case 0x43: + case 0xd: + gPlayerState.sword_state |= 8; + param_2->knockbackDuration = 2; + if ((gPlayerState.sword_state & 0x20) == 0) { + gPlayerState.sword_state &= 0xfe; + } + break; + default: + if ((gPlayerState.sword_state & 0xc0) == 0) { + gPlayerState.sword_state = 0; + gPlayerState.field_0x3[1] = 0; + gPlayerState.item = NULL; + DeleteThisEntity(); + } + break; + } + } + } + if (super->iframes != 0) { + if (super->iframes >= 1) { + super->iframes--; + } else { + super->iframes++; + } + } + sub_080A7A54(this); + if ((*(u8*)&super->spriteSettings * 0x2000000) < 0) { // TODO + super->hitbox->offset_x = -super->hitbox->offset_x; + } +} + +void sub_080A7A54(PlayerItemSwordEntity* this) { u8* tmp; tmp = &gUnk_08129096[(gPlayerEntity.frameIndex - 0x6a) * 4]; - this->hitbox->offset_x = tmp[0]; - this->hitbox->offset_y = tmp[1]; - this->hitbox->width = tmp[2]; - this->hitbox->height = tmp[3]; + super->hitbox->offset_x = tmp[0]; + super->hitbox->offset_y = tmp[1]; + super->hitbox->width = tmp[2]; + super->hitbox->height = tmp[3]; } ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7A84.inc", void sub_080A7A84(Entity* this)) -ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7B98.inc", void sub_080A7B98(Entity* this)) +ASM_FUNC("asm/non_matching/playerItemSword/sub_080A7B98.inc", void sub_080A7B98(PlayerItemSwordEntity* this)) diff --git a/src/playerUtils.c b/src/playerUtils.c index d879ff6f..27c1e363 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -819,9 +819,25 @@ s32 sub_08078904(Entity* entity) { return -1; } -ASM_FUNC("asm/non_matching/playerUtils/RegisterCarryEntity.inc", void RegisterCarryEntity(Entity* a)) +void RegisterCarryEntity(Entity* this) { + if (gCarriedEntity.count < 0x20) { + gCarriedEntity.unk_c[gCarriedEntity.count] = this; + gCarriedEntity.count++; + } +} -ASM_FUNC("asm/non_matching/playerUtils/FreeCarryEntity.inc", void FreeCarryEntity(Entity* a)) +void FreeCarryEntity(Entity* this) { + u32 index; + for (index = 0; index < gCarriedEntity.count; index++) { + if (gCarriedEntity.unk_c[index] == this) { + gCarriedEntity.count--; + break; + } + } + for (; index < gCarriedEntity.count; index++) { + gCarriedEntity.unk_c[index] = gCarriedEntity.unk_c[index + 1]; + } +} ASM_FUNC("asm/non_matching/playerUtils/sub_080789A8.inc", u32 sub_080789A8())