From f9e9fe0141a39997ae85a9b45b6b1b0151fec5b5 Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 7 Jul 2020 15:32:27 -0700 Subject: [PATCH] dampe.c OK --- asm/cellOverwriteSet.s | 372 ++++++++++++++++++++++++ asm/code_08016DF8.s | 4 +- asm/code_08019444.s | 564 +------------------------------------ asm/code_0801C1D4.s | 196 +++++++++++++ asm/code_08055FF4.s | 4 +- asm/code_080732D0.s | 4 +- asm/dampe.s | 245 ---------------- data/data_080B2A70.s | 5 +- data/playerItemFunctions.s | 61 ++++ include/item.h | 10 +- linker.ld | 7 +- src/dampe.c | 132 +++++++++ src/item.c | 12 +- 13 files changed, 790 insertions(+), 826 deletions(-) create mode 100644 asm/cellOverwriteSet.s create mode 100644 asm/code_0801C1D4.s delete mode 100644 asm/dampe.s create mode 100644 data/playerItemFunctions.s create mode 100644 src/dampe.c diff --git a/asm/cellOverwriteSet.s b/asm/cellOverwriteSet.s new file mode 100644 index 00000000..9910455d --- /dev/null +++ b/asm/cellOverwriteSet.s @@ -0,0 +1,372 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start CellOverwriteSet +CellOverwriteSet: @ 0x0801BEF8 + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + mov r8, r0 + ldr r7, _0801BFF0 @ =gLinkEntity + ldrb r0, [r0, #0xc] + cmp r0, #0 + bne _0801BF62 + movs r1, #0x2e + ldrsh r0, [r7, r1] + ldr r5, _0801BFF4 @ =gUnk_080B7B6C + ldrb r1, [r7, #0x14] + movs r2, #0xe + ands r2, r1 + adds r1, r2, r5 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + ldr r4, _0801BFF8 @ =gRoomControls + ldrh r1, [r4, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r3, #0x3f + ands r0, r3 + movs r6, #0x32 + ldrsh r1, [r7, r6] + adds r2, #1 + adds r2, r2, r5 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + ldrh r2, [r4, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r3 + lsls r1, r1, #6 + orrs r0, r1 + mov r1, r8 + adds r1, #0x38 + ldrb r1, [r1] + bl GetTileType + mov r1, r8 + adds r1, #0x6c + strh r0, [r1] + mov r1, r8 + ldrb r0, [r1, #0xc] + adds r0, #1 + strb r0, [r1, #0xc] +_0801BF62: + ldr r2, _0801BFFC @ =gLinkState + mov sb, r2 + ldrb r1, [r2, #0x1a] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2, #0x1a] + ldr r6, _0801C000 @ =gUnk_03000FF0 + ldrh r1, [r6] + movs r3, #0x80 + lsls r3, r3, #1 + mov sl, r3 + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0801C074 + ldrh r1, [r6, #2] + mov r0, sl + ands r0, r1 + cmp r0, #0 + beq _0801BFDA + movs r4, #0x2e + ldrsh r0, [r7, r4] + ldr r5, _0801BFF4 @ =gUnk_080B7B6C + mov sb, r5 + ldrb r1, [r7, #0x14] + movs r2, #0xe + ands r2, r1 + adds r1, r2, r5 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + ldr r4, _0801BFF8 @ =gRoomControls + ldrh r1, [r4, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + movs r3, #0x3f + ands r0, r3 + movs r5, #0x32 + ldrsh r1, [r7, r5] + adds r2, #1 + add r2, sb + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + ldrh r2, [r4, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r3 + lsls r1, r1, #6 + orrs r0, r1 + mov r1, r8 + adds r1, #0x38 + ldrb r1, [r1] + bl GetTileType + mov r1, r8 + adds r1, #0x6c + strh r0, [r1] +_0801BFDA: + ldrh r3, [r6] + mov r0, sl + ands r0, r3 + adds r4, r3, #0 + cmp r0, #0 + beq _0801C004 + adds r1, r7, #0 + adds r1, #0x3d + movs r0, #2 + strb r0, [r1] + b _0801C0D4 + .align 2, 0 +_0801BFF0: .4byte gLinkEntity +_0801BFF4: .4byte gUnk_080B7B6C +_0801BFF8: .4byte gRoomControls +_0801BFFC: .4byte gLinkState +_0801C000: .4byte gUnk_03000FF0 +_0801C004: + ldrh r2, [r6, #2] + movs r6, #0x10 + adds r0, r6, #0 + ands r0, r2 + cmp r0, #0 + beq _0801C01A + mov r1, r8 + adds r1, #0x6c + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] +_0801C01A: + movs r5, #0x20 + adds r0, r5, #0 + ands r0, r2 + cmp r0, #0 + beq _0801C02E + mov r1, r8 + adds r1, #0x6c + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] +_0801C02E: + movs r0, #0x30 + ands r0, r4 + cmp r0, #0 + beq _0801C06E + mov r1, r8 + ldrb r0, [r1, #0xf] + adds r0, #1 + strb r0, [r1, #0xf] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x1e + bls _0801C0D4 + movs r0, #0x1e + strb r0, [r1, #0xf] + adds r0, r6, #0 + ands r0, r4 + cmp r0, #0 + beq _0801C05A + adds r1, #0x6c + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] +_0801C05A: + adds r0, r5, #0 + ands r0, r3 + cmp r0, #0 + beq _0801C0D4 + mov r1, r8 + adds r1, #0x6c + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + b _0801C0D4 +_0801C06E: + mov r2, r8 + strb r0, [r2, #0xf] + b _0801C0D4 +_0801C074: + mov r0, r8 + adds r0, #0x6c + ldrh r0, [r0] + movs r3, #0x2e + ldrsh r1, [r7, r3] + ldr r4, _0801C1C8 @ =gUnk_080B7B6C + mov sl, r4 + ldrb r2, [r7, #0x14] + movs r3, #0xe + ands r3, r2 + adds r2, r3, r4 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + ldr r5, _0801C1CC @ =gRoomControls + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + movs r4, #0x3f + ands r1, r4 + movs r6, #0x32 + ldrsh r2, [r7, r6] + adds r3, #1 + add r3, sl + ldrb r3, [r3] + lsls r3, r3, #0x18 + asrs r3, r3, #0x18 + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r2, r8 + adds r2, #0x38 + ldrb r2, [r2] + bl sub_0807B7D8 + mov r0, sb + ldrb r1, [r0, #0x1a] + movs r0, #0x7f + ands r0, r1 + mov r1, sb + strb r0, [r1, #0x1a] + bl DeleteThisEntity +_0801C0D4: + ldr r0, _0801C1D0 @ =gUnk_03000FF0 + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0801C1BE + movs r2, #0x6c + add r2, r8 + mov sb, r2 + ldrh r0, [r2] + movs r3, #0x2e + ldrsh r1, [r7, r3] + ldr r6, _0801C1C8 @ =gUnk_080B7B6C + movs r2, #0 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldr r5, _0801C1CC @ =gRoomControls + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + movs r4, #0x3f + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #1 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + movs r2, #0x38 + add r8, r2 + mov r3, r8 + ldrb r2, [r3] + bl sub_0807B7D8 + mov r1, sb + ldrh r0, [r1] + movs r2, #0x2e + ldrsh r1, [r7, r2] + movs r2, #2 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #3 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r3, r8 + ldrb r2, [r3] + bl sub_0807B7D8 + mov r1, sb + ldrh r0, [r1] + movs r2, #0x2e + ldrsh r1, [r7, r2] + movs r2, #4 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #5 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r3, r8 + ldrb r2, [r3] + bl sub_0807B7D8 + mov r1, sb + ldrh r0, [r1] + movs r2, #0x2e + ldrsh r1, [r7, r2] + movs r2, #6 + ldrsb r2, [r6, r2] + adds r1, r1, r2 + ldrh r2, [r5, #6] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r4 + movs r3, #0x32 + ldrsh r2, [r7, r3] + movs r3, #7 + ldrsb r3, [r6, r3] + adds r2, r2, r3 + ldrh r3, [r5, #8] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r4 + lsls r2, r2, #6 + orrs r1, r2 + mov r4, r8 + ldrb r2, [r4] + bl sub_0807B7D8 +_0801C1BE: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801C1C8: .4byte gUnk_080B7B6C +_0801C1CC: .4byte gRoomControls +_0801C1D0: .4byte gUnk_03000FF0 diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index 0258a3c9..d5b8213c 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -694,7 +694,7 @@ _08017352: bl sub_0805E3B0 cmp r0, #0 bne _08017398 - ldr r1, _08017390 @ =gUnk_080B2CE8 + ldr r1, _08017390 @ =gPlayerItemFunctions ldrb r0, [r4, #9] lsls r0, r0, #2 adds r0, r0, r1 @@ -719,7 +719,7 @@ _08017352: subs r0, #1 b _08017396 .align 2, 0 -_08017390: .4byte gUnk_080B2CE8 +_08017390: .4byte gPlayerItemFunctions _08017394: adds r0, #1 _08017396: diff --git a/asm/code_08019444.s b/asm/code_08019444.s index 9ea73655..aeba402d 100644 --- a/asm/code_08019444.s +++ b/asm/code_08019444.s @@ -39,8 +39,8 @@ sub_08019468: @ 0x08019468 _0801947E: pop {pc} - thumb_func_start sub_08019480 -sub_08019480: @ 0x08019480 + thumb_func_start SwordBeam +SwordBeam: @ 0x08019480 push {lr} ldr r2, _08019494 @ =gUnk_080B43F4 ldrb r1, [r0, #0xc] @@ -5027,8 +5027,8 @@ sub_0801B9F0: @ 0x0801B9F0 bl sub_08017744 pop {pc} - thumb_func_start sub_0801BA00 -sub_0801BA00: @ 0x0801BA00 + thumb_func_start SwordSpin +SwordSpin: @ 0x0801BA00 push {lr} ldr r2, _0801BA14 @ =gUnk_080B7870 ldrb r1, [r0, #0xc] @@ -5620,558 +5620,4 @@ _0801BEEE: pop {r4, pc} .align 2, 0 _0801BEF0: .4byte gLinkEntity -_0801BEF4: .4byte gUnk_080B7878 - - thumb_func_start sub_0801BEF8 -sub_0801BEF8: @ 0x0801BEF8 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov r8, r0 - ldr r7, _0801BFF0 @ =gLinkEntity - ldrb r0, [r0, #0xc] - cmp r0, #0 - bne _0801BF62 - movs r1, #0x2e - ldrsh r0, [r7, r1] - ldr r5, _0801BFF4 @ =gUnk_080B7B6C - ldrb r1, [r7, #0x14] - movs r2, #0xe - ands r2, r1 - adds r1, r2, r5 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, r0, r1 - ldr r4, _0801BFF8 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r6, #0x32 - ldrsh r1, [r7, r6] - adds r2, #1 - adds r2, r2, r5 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - mov r1, r8 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileType - mov r1, r8 - adds r1, #0x6c - strh r0, [r1] - mov r1, r8 - ldrb r0, [r1, #0xc] - adds r0, #1 - strb r0, [r1, #0xc] -_0801BF62: - ldr r2, _0801BFFC @ =gLinkState - mov sb, r2 - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1a] - ldr r6, _0801C000 @ =gUnk_03000FF0 - ldrh r1, [r6] - movs r3, #0x80 - lsls r3, r3, #1 - mov sl, r3 - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0801C074 - ldrh r1, [r6, #2] - mov r0, sl - ands r0, r1 - cmp r0, #0 - beq _0801BFDA - movs r4, #0x2e - ldrsh r0, [r7, r4] - ldr r5, _0801BFF4 @ =gUnk_080B7B6C - mov sb, r5 - ldrb r1, [r7, #0x14] - movs r2, #0xe - ands r2, r1 - adds r1, r2, r5 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r0, r0, r1 - ldr r4, _0801BFF8 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r7, r5] - adds r2, #1 - add r2, sb - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - mov r1, r8 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileType - mov r1, r8 - adds r1, #0x6c - strh r0, [r1] -_0801BFDA: - ldrh r3, [r6] - mov r0, sl - ands r0, r3 - adds r4, r3, #0 - cmp r0, #0 - beq _0801C004 - adds r1, r7, #0 - adds r1, #0x3d - movs r0, #2 - strb r0, [r1] - b _0801C0D4 - .align 2, 0 -_0801BFF0: .4byte gLinkEntity -_0801BFF4: .4byte gUnk_080B7B6C -_0801BFF8: .4byte gRoomControls -_0801BFFC: .4byte gLinkState -_0801C000: .4byte gUnk_03000FF0 -_0801C004: - ldrh r2, [r6, #2] - movs r6, #0x10 - adds r0, r6, #0 - ands r0, r2 - cmp r0, #0 - beq _0801C01A - mov r1, r8 - adds r1, #0x6c - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] -_0801C01A: - movs r5, #0x20 - adds r0, r5, #0 - ands r0, r2 - cmp r0, #0 - beq _0801C02E - mov r1, r8 - adds r1, #0x6c - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] -_0801C02E: - movs r0, #0x30 - ands r0, r4 - cmp r0, #0 - beq _0801C06E - mov r1, r8 - ldrb r0, [r1, #0xf] - adds r0, #1 - strb r0, [r1, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1e - bls _0801C0D4 - movs r0, #0x1e - strb r0, [r1, #0xf] - adds r0, r6, #0 - ands r0, r4 - cmp r0, #0 - beq _0801C05A - adds r1, #0x6c - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] -_0801C05A: - adds r0, r5, #0 - ands r0, r3 - cmp r0, #0 - beq _0801C0D4 - mov r1, r8 - adds r1, #0x6c - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - b _0801C0D4 -_0801C06E: - mov r2, r8 - strb r0, [r2, #0xf] - b _0801C0D4 -_0801C074: - mov r0, r8 - adds r0, #0x6c - ldrh r0, [r0] - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldr r4, _0801C1C8 @ =gUnk_080B7B6C - mov sl, r4 - ldrb r2, [r7, #0x14] - movs r3, #0xe - ands r3, r2 - adds r2, r3, r4 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - ldr r5, _0801C1CC @ =gRoomControls - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r7, r6] - adds r3, #1 - add r3, sl - ldrb r3, [r3] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r2, r8 - adds r2, #0x38 - ldrb r2, [r2] - bl sub_0807B7D8 - mov r0, sb - ldrb r1, [r0, #0x1a] - movs r0, #0x7f - ands r0, r1 - mov r1, sb - strb r0, [r1, #0x1a] - bl DeleteThisEntity -_0801C0D4: - ldr r0, _0801C1D0 @ =gUnk_03000FF0 - ldrh r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0801C1BE - movs r2, #0x6c - add r2, r8 - mov sb, r2 - ldrh r0, [r2] - movs r3, #0x2e - ldrsh r1, [r7, r3] - ldr r6, _0801C1C8 @ =gUnk_080B7B6C - movs r2, #0 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldr r5, _0801C1CC @ =gRoomControls - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #1 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - movs r2, #0x38 - add r8, r2 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - mov r1, sb - ldrh r0, [r1] - movs r2, #0x2e - ldrsh r1, [r7, r2] - movs r2, #2 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #3 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - mov r1, sb - ldrh r0, [r1] - movs r2, #0x2e - ldrsh r1, [r7, r2] - movs r2, #4 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #5 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - mov r1, sb - ldrh r0, [r1] - movs r2, #0x2e - ldrsh r1, [r7, r2] - movs r2, #6 - ldrsb r2, [r6, r2] - adds r1, r1, r2 - ldrh r2, [r5, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r4 - movs r3, #0x32 - ldrsh r2, [r7, r3] - movs r3, #7 - ldrsb r3, [r6, r3] - adds r2, r2, r3 - ldrh r3, [r5, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - mov r4, r8 - ldrb r2, [r4] - bl sub_0807B7D8 -_0801C1BE: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801C1C8: .4byte gUnk_080B7B6C -_0801C1CC: .4byte gRoomControls -_0801C1D0: .4byte gUnk_03000FF0 - - thumb_func_start sub_0801C1D4 -sub_0801C1D4: @ 0x0801C1D4 - push {r4, lr} - movs r4, #0 -_0801C1D8: - lsls r1, r4, #5 - ldr r0, _0801C200 @ =gUnk_0200AF34 - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0801C1F8 - ldrb r0, [r2, #1] - lsls r0, r0, #4 - ldr r1, _0801C204 @ =gUnk_080C8F8C - adds r0, r0, r1 - ldr r1, [r0, #8] - adds r0, r2, #0 - bl _call_via_r1 -_0801C1F8: - adds r4, #1 - cmp r4, #0x17 - bls _0801C1D8 - pop {r4, pc} - .align 2, 0 -_0801C200: .4byte gUnk_0200AF34 -_0801C204: .4byte gUnk_080C8F8C - - thumb_func_start sub_0801C208 -sub_0801C208: @ 0x0801C208 - push {r4, r5, lr} - movs r5, #0 - ldr r4, _0801C250 @ =gUnk_03001010 -_0801C20E: - lsls r1, r5, #5 - ldr r0, _0801C254 @ =gUnk_0200AF34 - adds r3, r1, r0 - ldrb r1, [r3] - movs r0, #3 - ands r0, r1 - cmp r0, #3 - bne _0801C248 - ldrh r0, [r3, #0xc] - strh r0, [r4] - ldrh r0, [r3, #0xe] - strh r0, [r4, #2] - ldrb r2, [r3, #1] - lsls r2, r2, #4 - ldr r0, _0801C258 @ =gUnk_080C8F8C - adds r2, r2, r0 - ldrh r0, [r2] - strh r0, [r4, #4] - ldrh r0, [r2, #2] - strh r0, [r4, #6] - ldrb r0, [r3, #0x18] - lsls r0, r0, #0xc - ldrh r1, [r3, #0x1a] - orrs r0, r1 - strh r0, [r4, #8] - ldrh r0, [r2, #6] - ldrb r1, [r3, #0x10] - bl sub_080ADA14 -_0801C248: - adds r5, #1 - cmp r5, #0x17 - bls _0801C20E - pop {r4, r5, pc} - .align 2, 0 -_0801C250: .4byte gUnk_03001010 -_0801C254: .4byte gUnk_0200AF34 -_0801C258: .4byte gUnk_080C8F8C - - thumb_func_start sub_0801C25C -sub_0801C25C: @ 0x0801C25C - push {r4, r5, r6, r7, lr} - movs r4, #0 - ldr r5, _0801C2E4 @ =gUnk_0200AF34 - adds r6, r5, #0 - subs r6, #0x34 - movs r7, #0xd - rsbs r7, r7, #0 - ldr r3, _0801C2E8 @ =0x040000D4 -_0801C26C: - lsls r0, r4, #5 - adds r2, r0, r5 - ldrb r1, [r2] - movs r0, #3 - ands r0, r1 - cmp r0, #3 - bne _0801C2A8 - lsls r0, r1, #0x1c - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _0801C2A8 - adds r0, r7, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r2, #0x1c] - str r0, [r3] - ldrh r0, [r2, #0x1a] - lsls r0, r0, #5 - ldr r1, _0801C2EC @ =0x06010000 - adds r0, r0, r1 - str r0, [r3, #4] - ldrb r0, [r2, #0x19] - lsls r0, r0, #3 - movs r1, #0x84 - lsls r1, r1, #0x18 - orrs r0, r1 - str r0, [r3, #8] - ldr r0, [r3, #8] -_0801C2A8: - adds r4, #1 - cmp r4, #0x17 - ble _0801C26C - adds r2, r6, #0 - ldrb r3, [r2, #0x13] - movs r0, #0x13 - ldrsb r0, [r2, r0] - cmp r0, #0 - bge _0801C2C8 - movs r1, #0x7f - ands r1, r3 - strb r1, [r2, #0x13] - movs r0, #0x8d - lsls r0, r0, #1 - bl sub_0801C2F0 -_0801C2C8: - ldrb r2, [r6, #0x14] - movs r0, #0x14 - ldrsb r0, [r6, r0] - cmp r0, #0 - bge _0801C2E0 - movs r1, #0x7f - ands r1, r2 - strb r1, [r6, #0x14] - movs r0, #0x93 - lsls r0, r0, #1 - bl sub_0801C2F0 -_0801C2E0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801C2E4: .4byte gUnk_0200AF34 -_0801C2E8: .4byte 0x040000D4 -_0801C2EC: .4byte 0x06010000 - - thumb_func_start sub_0801C2F0 -sub_0801C2F0: @ 0x0801C2F0 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, r1, #0 - lsls r5, r4, #5 - ldr r1, _0801C330 @ =0x06010000 - adds r4, r5, r1 - movs r1, #0xa - bl Div - cmp r0, #9 - bls _0801C308 - movs r0, #9 -_0801C308: - ldr r2, _0801C334 @ =0x040000D4 - lsls r0, r0, #5 - ldr r3, _0801C338 @ =gUnk_085C4620 - adds r0, r0, r3 - str r0, [r2] - str r4, [r2, #4] - ldr r4, _0801C33C @ =0x84000008 - str r4, [r2, #8] - ldr r0, [r2, #8] - adds r1, #0xa - lsls r1, r1, #5 - adds r1, r1, r3 - str r1, [r2] - ldr r1, _0801C340 @ =0x06010020 - adds r0, r5, r1 - str r0, [r2, #4] - str r4, [r2, #8] - ldr r0, [r2, #8] - pop {r4, r5, pc} - .align 2, 0 -_0801C330: .4byte 0x06010000 -_0801C334: .4byte 0x040000D4 -_0801C338: .4byte gUnk_085C4620 -_0801C33C: .4byte 0x84000008 -_0801C340: .4byte 0x06010020 +_0801BEF4: .4byte gUnk_080B7878 \ No newline at end of file diff --git a/asm/code_0801C1D4.s b/asm/code_0801C1D4.s new file mode 100644 index 00000000..4d052ca2 --- /dev/null +++ b/asm/code_0801C1D4.s @@ -0,0 +1,196 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_0801C1D4 +sub_0801C1D4: @ 0x0801C1D4 + push {r4, lr} + movs r4, #0 +_0801C1D8: + lsls r1, r4, #5 + ldr r0, _0801C200 @ =gUnk_0200AF34 + adds r2, r1, r0 + ldrb r1, [r2] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0801C1F8 + ldrb r0, [r2, #1] + lsls r0, r0, #4 + ldr r1, _0801C204 @ =gUnk_080C8F8C + adds r0, r0, r1 + ldr r1, [r0, #8] + adds r0, r2, #0 + bl _call_via_r1 +_0801C1F8: + adds r4, #1 + cmp r4, #0x17 + bls _0801C1D8 + pop {r4, pc} + .align 2, 0 +_0801C200: .4byte gUnk_0200AF34 +_0801C204: .4byte gUnk_080C8F8C + + thumb_func_start sub_0801C208 +sub_0801C208: @ 0x0801C208 + push {r4, r5, lr} + movs r5, #0 + ldr r4, _0801C250 @ =gUnk_03001010 +_0801C20E: + lsls r1, r5, #5 + ldr r0, _0801C254 @ =gUnk_0200AF34 + adds r3, r1, r0 + ldrb r1, [r3] + movs r0, #3 + ands r0, r1 + cmp r0, #3 + bne _0801C248 + ldrh r0, [r3, #0xc] + strh r0, [r4] + ldrh r0, [r3, #0xe] + strh r0, [r4, #2] + ldrb r2, [r3, #1] + lsls r2, r2, #4 + ldr r0, _0801C258 @ =gUnk_080C8F8C + adds r2, r2, r0 + ldrh r0, [r2] + strh r0, [r4, #4] + ldrh r0, [r2, #2] + strh r0, [r4, #6] + ldrb r0, [r3, #0x18] + lsls r0, r0, #0xc + ldrh r1, [r3, #0x1a] + orrs r0, r1 + strh r0, [r4, #8] + ldrh r0, [r2, #6] + ldrb r1, [r3, #0x10] + bl sub_080ADA14 +_0801C248: + adds r5, #1 + cmp r5, #0x17 + bls _0801C20E + pop {r4, r5, pc} + .align 2, 0 +_0801C250: .4byte gUnk_03001010 +_0801C254: .4byte gUnk_0200AF34 +_0801C258: .4byte gUnk_080C8F8C + + thumb_func_start sub_0801C25C +sub_0801C25C: @ 0x0801C25C + push {r4, r5, r6, r7, lr} + movs r4, #0 + ldr r5, _0801C2E4 @ =gUnk_0200AF34 + adds r6, r5, #0 + subs r6, #0x34 + movs r7, #0xd + rsbs r7, r7, #0 + ldr r3, _0801C2E8 @ =0x040000D4 +_0801C26C: + lsls r0, r4, #5 + adds r2, r0, r5 + ldrb r1, [r2] + movs r0, #3 + ands r0, r1 + cmp r0, #3 + bne _0801C2A8 + lsls r0, r1, #0x1c + lsrs r0, r0, #0x1e + cmp r0, #1 + bne _0801C2A8 + adds r0, r7, #0 + ands r0, r1 + movs r1, #8 + orrs r0, r1 + strb r0, [r2] + ldr r0, [r2, #0x1c] + str r0, [r3] + ldrh r0, [r2, #0x1a] + lsls r0, r0, #5 + ldr r1, _0801C2EC @ =0x06010000 + adds r0, r0, r1 + str r0, [r3, #4] + ldrb r0, [r2, #0x19] + lsls r0, r0, #3 + movs r1, #0x84 + lsls r1, r1, #0x18 + orrs r0, r1 + str r0, [r3, #8] + ldr r0, [r3, #8] +_0801C2A8: + adds r4, #1 + cmp r4, #0x17 + ble _0801C26C + adds r2, r6, #0 + ldrb r3, [r2, #0x13] + movs r0, #0x13 + ldrsb r0, [r2, r0] + cmp r0, #0 + bge _0801C2C8 + movs r1, #0x7f + ands r1, r3 + strb r1, [r2, #0x13] + movs r0, #0x8d + lsls r0, r0, #1 + bl sub_0801C2F0 +_0801C2C8: + ldrb r2, [r6, #0x14] + movs r0, #0x14 + ldrsb r0, [r6, r0] + cmp r0, #0 + bge _0801C2E0 + movs r1, #0x7f + ands r1, r2 + strb r1, [r6, #0x14] + movs r0, #0x93 + lsls r0, r0, #1 + bl sub_0801C2F0 +_0801C2E0: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801C2E4: .4byte gUnk_0200AF34 +_0801C2E8: .4byte 0x040000D4 +_0801C2EC: .4byte 0x06010000 + + thumb_func_start sub_0801C2F0 +sub_0801C2F0: @ 0x0801C2F0 + push {r4, r5, lr} + adds r4, r0, #0 + adds r0, r1, #0 + lsls r5, r4, #5 + ldr r1, _0801C330 @ =0x06010000 + adds r4, r5, r1 + movs r1, #0xa + bl Div + cmp r0, #9 + bls _0801C308 + movs r0, #9 +_0801C308: + ldr r2, _0801C334 @ =0x040000D4 + lsls r0, r0, #5 + ldr r3, _0801C338 @ =gUnk_085C4620 + adds r0, r0, r3 + str r0, [r2] + str r4, [r2, #4] + ldr r4, _0801C33C @ =0x84000008 + str r4, [r2, #8] + ldr r0, [r2, #8] + adds r1, #0xa + lsls r1, r1, #5 + adds r1, r1, r3 + str r1, [r2] + ldr r1, _0801C340 @ =0x06010020 + adds r0, r5, r1 + str r0, [r2, #4] + str r4, [r2, #8] + ldr r0, [r2, #8] + pop {r4, r5, pc} + .align 2, 0 +_0801C330: .4byte 0x06010000 +_0801C334: .4byte 0x040000D4 +_0801C338: .4byte gUnk_085C4620 +_0801C33C: .4byte 0x84000008 +_0801C340: .4byte 0x06010020 diff --git a/asm/code_08055FF4.s b/asm/code_08055FF4.s index 26340196..40a852d4 100644 --- a/asm/code_08055FF4.s +++ b/asm/code_08055FF4.s @@ -434,8 +434,8 @@ _08056324: pop {r4, pc} .align 2, 0 - thumb_func_start sub_08056328 -sub_08056328: @ 0x08056328 + thumb_func_start NulledItem +NulledItem: @ 0x08056328 push {lr} bl DeleteThisEntity pop {pc} diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s index 1dd3fb8b..1fe8ae46 100644 --- a/asm/code_080732D0.s +++ b/asm/code_080732D0.s @@ -4331,8 +4331,8 @@ sub_080752E8: @ 0x080752E8 .align 2, 0 _080752FC: .4byte gItemFunctions - thumb_func_start CellOverwriteSet -CellOverwriteSet: @ 0x08075300 + thumb_func_start DebugItem +DebugItem: @ 0x08075300 push {r4, r5, lr} adds r4, r0, #0 adds r5, r1, #0 diff --git a/asm/dampe.s b/asm/dampe.s deleted file mode 100644 index 697d35f8..00000000 --- a/asm/dampe.s +++ /dev/null @@ -1,245 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Dampe -Dampe: @ 0x0806BDAC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0806BDE6 - cmp r0, #1 - bgt _0806BDC0 - cmp r0, #0 - beq _0806BDC6 - b _0806BE3A -_0806BDC0: - cmp r0, #2 - beq _0806BE26 - b _0806BE3A -_0806BDC6: - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD50 - b _0806BE3A -_0806BDE6: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806BE1C - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - ldr r1, _0806BE18 @ =gLinkEntity - adds r0, r4, #0 - bl sub_080045C4 - bl sub_0806F5A4 - adds r1, r0, #0 - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 - b _0806BE3A - .align 2, 0 -_0806BE18: .4byte gLinkEntity -_0806BE1C: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - b _0806BE3A -_0806BE26: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806BE3A - movs r0, #1 - strb r0, [r4, #0xc] -_0806BE3A: - pop {r4, pc} - - thumb_func_start sub_0806BE3C -sub_0806BE3C: @ 0x0806BE3C - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start Dampe_Fusion -Dampe_Fusion: @ 0x0806BE54 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _0806BE7A - adds r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - movs r1, #2 - bl InitAnimationForceUpdate - b _0806BE80 -_0806BE7A: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_0806BE80: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0806BE84 -sub_0806BE84: @ 0x0806BE84 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r4, r1, #0 - movs r0, #0 - str r0, [r4, #0x14] - movs r5, #1 - movs r0, #0x69 - bl CheckLocalFlag - cmp r0, #0 - bne _0806BEA6 - movs r5, #0 - movs r0, #0x69 - bl SetLocalFlag - movs r0, #1 - str r0, [r4, #0x14] -_0806BEA6: - movs r0, #0x3c - bl GetInventoryValue - cmp r0, #1 - bls _0806BEB2 - movs r5, #2 -_0806BEB2: - ldr r0, _0806BEC4 @ =gUnk_08113344 - lsls r1, r5, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r6, #0 - bl TextboxNoOverlap - pop {r4, r5, r6, pc} - .align 2, 0 -_0806BEC4: .4byte gUnk_08113344 - - thumb_func_start sub_0806BEC8 -sub_0806BEC8: @ 0x0806BEC8 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - movs r4, #0 - str r4, [r5, #0x14] - movs r0, #0x3c - bl GetInventoryValue - cmp r0, #1 - bne _0806BEE2 - movs r4, #1 - str r4, [r5, #0x14] - b _0806BEE8 -_0806BEE2: - cmp r0, #1 - bls _0806BEE8 - movs r4, #2 -_0806BEE8: - ldr r0, _0806BEF8 @ =gUnk_0811334A - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r6, #0 - bl TextboxNoOverlap - pop {r4, r5, r6, pc} - .align 2, 0 -_0806BEF8: .4byte gUnk_0811334A - - thumb_func_start sub_0806BEFC -sub_0806BEFC: @ 0x0806BEFC - push {lr} - movs r0, #0xbf - lsls r0, r0, #1 - ldr r1, _0806BF2C @ =0x0000058E - movs r2, #1 - bl SetTileType - ldr r0, _0806BF30 @ =0x0000017F - ldr r1, _0806BF34 @ =0x0000058F - movs r2, #1 - bl SetTileType - movs r0, #0xc0 - lsls r0, r0, #1 - ldr r1, _0806BF38 @ =0x000005CE - movs r2, #1 - bl SetTileType - ldr r0, _0806BF3C @ =0x00000181 - ldr r1, _0806BF40 @ =0x000005CF - movs r2, #1 - bl SetTileType - pop {pc} - .align 2, 0 -_0806BF2C: .4byte 0x0000058E -_0806BF30: .4byte 0x0000017F -_0806BF34: .4byte 0x0000058F -_0806BF38: .4byte 0x000005CE -_0806BF3C: .4byte 0x00000181 -_0806BF40: .4byte 0x000005CF - - thumb_func_start sub_0806BF44 -sub_0806BF44: @ 0x0806BF44 - push {r4, r5, lr} - adds r2, r0, #0 - adds r4, r1, #0 - movs r0, #0 - str r0, [r4, #0x14] - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldr r3, _0806BF78 @ =gRoomControls - movs r5, #0xa - ldrsh r1, [r3, r5] - subs r0, r0, r1 - adds r0, #0x10 - ldr r1, _0806BF7C @ =0x0000010F - cmp r0, r1 - bhi _0806BF76 - movs r1, #0x32 - ldrsh r0, [r2, r1] - movs r2, #0xc - ldrsh r1, [r3, r2] - subs r0, r0, r1 - adds r0, #0x18 - cmp r0, #0xcf - bhi _0806BF76 - movs r0, #1 - str r0, [r4, #0x14] -_0806BF76: - pop {r4, r5, pc} - .align 2, 0 -_0806BF78: .4byte gRoomControls -_0806BF7C: .4byte 0x0000010F diff --git a/data/data_080B2A70.s b/data/data_080B2A70.s index c89057be..bee9d349 100644 --- a/data/data_080B2A70.s +++ b/data/data_080B2A70.s @@ -8,7 +8,4 @@ gUnk_080B2A70:: @ 080B2A70 .incbin "baserom.gba", 0x0B2A70, 0x0000268 gUnk_080B2CD8:: @ 080B2CD8 - .incbin "baserom.gba", 0x0B2CD8, 0x0000010 - -gUnk_080B2CE8:: @ 080B2CE8 - .incbin "baserom.gba", 0x0B2CE8, 0x0000064 + .incbin "baserom.gba", 0x0B2CD8, 0x0000010 \ No newline at end of file diff --git a/data/playerItemFunctions.s b/data/playerItemFunctions.s new file mode 100644 index 00000000..82723b78 --- /dev/null +++ b/data/playerItemFunctions.s @@ -0,0 +1,61 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + .align 2 + + gPlayerItemFunctions:: @ gPlayerItemFunctions +@ replacing .incbin "baserom.gba", 0x000b2ce8, 0x64 +/*0x00*/ .4byte DeleteEntity +/*0x01*/ .4byte sub_080A7544 +/*0x02*/ .4byte sub_0801B188 +/*0x03*/ .4byte sub_0801B45C +/*0x04*/ .4byte sub_08018FCC +/*0x05*/ .4byte sub_080A2D74 +/*0x06*/ .4byte sub_08054A40 +/*0x07*/ .4byte sub_08056330 +/*0x08*/ .4byte sub_080ADA30 +/*0x09*/ .4byte sub_080704BC +/*0x0a*/ .4byte DeleteEntity +/*0x0b*/ .4byte DeleteEntity +/*0x0c*/ .4byte sub_0801B898 +/*0x0d*/ .4byte CellOverwriteSet +/*0x0e*/ .4byte SwordSpin +/*0x0f*/ .4byte SwordBeam +/*0x10*/ .4byte sub_080ACBCC +/*0x11*/ .4byte sub_08018C88 +/*0x12*/ .4byte sub_080700E8 +/*0x13*/ .4byte sub_080ACF14 +/*0x14*/ .4byte sub_0805FBD0 +/*0x15*/ .4byte sub_080A306C +/*0x16*/ .4byte SwordBeam +/*0x17*/ .4byte NulledItem +/*0x18*/ .4byte CellOverwriteSet + +/* +.4byte DeleteEntity +.4byte sub_080A7544 +.4byte sub_0801B188 +.4byte sub_0801B45C +.4byte sub_08018FCC +.4byte sub_080A2D74 +.4byte sub_08054A40 +.4byte sub_08056330 +.4byte sub_080ADA30 +.4byte sub_080704BC +.4byte DeleteEntity +.4byte DeleteEntity +.4byte sub_0801B898 +.4byte CellOverwriteSet +.4byte SwordSpin +.4byte SwordBeam +.4byte sub_080ACBCC +.4byte sub_08018C88 +.4byte sub_080700E8 +.4byte sub_080ACF14 +.4byte sub_0805FBD0 +.4byte sub_080A306C +.4byte SwordBeam +.4byte NulledItem +.4byte CellOverwriteSet +*/ \ No newline at end of file diff --git a/include/item.h b/include/item.h index 18ba2620..86f82876 100644 --- a/include/item.h +++ b/include/item.h @@ -16,7 +16,7 @@ typedef struct { u8 unk5; } ItemBehavior; -void extern CellOverwriteSet(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); void extern Sword(ItemBehavior*, u32); void extern Sword(ItemBehavior*, u32); void extern Sword(ItemBehavior*, u32); @@ -38,11 +38,11 @@ void extern PacciCane(ItemBehavior*, u32); void extern MoleMitts(ItemBehavior*, u32); void extern RocsCape(ItemBehavior*, u32); void extern sub_08076800(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); void Ocarina(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); -void extern CellOverwriteSet(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); +void extern DebugItem(ItemBehavior*, u32); void extern TryPickupObject(ItemBehavior*, u32); void extern JarEmpty(ItemBehavior*, u32); void extern JarEmpty(ItemBehavior*, u32); diff --git a/linker.ld b/linker.ld index d4f3553c..9b77642b 100644 --- a/linker.ld +++ b/linker.ld @@ -303,6 +303,8 @@ SECTIONS { asm/bowUse.o(.text); asm/sub_08019410.o(.text); asm/code_08019444.o(.text); + asm/cellOverwriteSet.o(.text); + asm/code_0801C1D4.o(.text); asm/drawUI.o(.text); asm/code_0801C370.o(.text); asm/drawRupees.o(.text); @@ -591,7 +593,7 @@ SECTIONS { asm/librarians.o(.text); asm/farmers.o(.text); asm/carlov.o(.text); - asm/dampe.o(.text); + src/dampe.o(.text); asm/drLeft.o(.text); asm/kingGustaf.o(.text); asm/gina.o(.text); @@ -640,7 +642,7 @@ SECTIONS { src/sub_0807B930.o(.text); asm/code_0807B9B8.o(.text); src/sub_0807C998.o(.text); - src/sub_0801D754.o(.text); + src/sub_0801D754.o(.text); /* ??? */ asm/sub_0807CA18.o(.text); asm/getInventoryValue.o(.text); asm/code_0807CAA0.o(.text); @@ -886,6 +888,7 @@ SECTIONS { asm/intr.o(.text); /* data */ data/data_080B2A70.o(.rodata); + data/playerItemFunctions.o(.rodata); src/object.o(.rodata); data/data_080B3054.o(.rodata); src/npc.o(.rodata); diff --git a/src/dampe.c b/src/dampe.c new file mode 100644 index 00000000..511acd19 --- /dev/null +++ b/src/dampe.c @@ -0,0 +1,132 @@ +#include "global.h" +#include "entity.h" +#include "link.h" +#include "room.h" + +extern void sub_0805E3A0(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern void sub_080045C4(Entity*, Entity*); +extern void InitAnimationForceUpdate(Entity*, u32); +extern u32 sub_0806F5A4(void); +extern void sub_0806F118(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern void UpdateAnimationSingleFrame(Entity*); +extern u32 UpdateFuseInteraction(Entity*); +extern u32 sub_0801E99C(void); +extern void sub_08078784(Entity*, u32); +extern u32 CheckLocalFlag(u32); +extern void SetLocalFlag(u32); +extern u32 GetInventoryValue(u32); +extern void TextboxNoOverlap(u16, Entity*); +extern void SetTileType(u32, u32, u32); + +extern u16 gUnk_08113344[]; +extern u16 gUnk_0811334A[]; + +typedef struct { + u8 filler[18]; + u32 unk; +} struct_0806BE84; + +void Dampe(Entity* this) { + + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.b.ss0 = 1; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + return; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + sub_080045C4(this, &gLinkEntity); + InitAnimationForceUpdate(this, sub_0806F5A4() + 4); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } + return; + case 2: + UpdateAnimationSingleFrame(this); + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + default: + } +} + +void sub_0806BE3C(Entity *this) +{ + this->field_0x68 = sub_0801E99C(); + sub_08078784(this, this->field_0x68); +} + +void Dampe_Fusion(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->spriteSettings.b.ss0 = 1; + InitAnimationForceUpdate(this, 2); + } + else { + UpdateAnimationSingleFrame(this); + } +} + +void sub_0806BE84(Entity *this, struct_0806BE84* r1) +{ + u32 iVar3; + + r1->unk = 0; + iVar3 = 1; + if (!CheckLocalFlag(0x69)) { + iVar3 = 0; + SetLocalFlag(0x69); + r1->unk = 1; + } + // Graveyard key + if (2 <= GetInventoryValue(0x3C)) { + iVar3 = 2; + } + TextboxNoOverlap(gUnk_08113344[iVar3], this); +} + +void sub_0806BEC8(Entity *this, struct_0806BE84* r1) +{ + u32 uVar1; + u32 iVar2; + + iVar2 = 0; + r1->unk = 0; + uVar1 = GetInventoryValue(0x3C); + if (uVar1 == 1) { + iVar2 = 1; + r1->unk = 1; + } + else { + if (1 < uVar1) { + iVar2 = 2; + } + } + + TextboxNoOverlap(gUnk_0811334A[iVar2], this); +} + +void sub_0806BEFC(void) +{ + SetTileType(0x17E, 0x58E, 1); + SetTileType(0x17F, 0x58F, 1); + SetTileType(0x180, 0x5cE, 1); + SetTileType(0x181, 0x5cF, 1); +} + +void sub_0806BF44(Entity *this, struct_0806BE84 *r1) +{ + r1->unk = 0; + if (((this->x.HALF.HI - gRoomControls.roomScrollX) + 0x10U < 0x110) && + ((this->y.HALF.HI - gRoomControls.roomScrollY) + 0x18U < 0xd0)) { + r1->unk = 1; + } +} diff --git a/src/item.c b/src/item.c index 49afb9e6..b0386445 100644 --- a/src/item.c +++ b/src/item.c @@ -2,8 +2,10 @@ #include "entity.h" #include "item.h" + +// TODO - How does this relate to PlayerItemFunctions? Is this just a lookup table? void (*const gItemFunctions[])(ItemBehavior*, u32) = { - CellOverwriteSet, + DebugItem, Sword, Sword, Sword, @@ -25,11 +27,11 @@ void (*const gItemFunctions[])(ItemBehavior*, u32) = { MoleMitts, RocsCape, sub_08076800, - CellOverwriteSet, + DebugItem, Ocarina, - CellOverwriteSet, - CellOverwriteSet, - CellOverwriteSet, + DebugItem, + DebugItem, + DebugItem, TryPickupObject, JarEmpty, JarEmpty,