diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc b/asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc deleted file mode 100644 index 2798f507..00000000 --- a/asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc +++ /dev/null @@ -1,92 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r4, r1, #0 - cmp r5, #0 - beq _0801A978 - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - bl GetLayerByIndex - adds r6, r0, #4 - cmp r4, #0 - bne _0801A92C - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _0801A91C @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r4, r0, #4 - movs r3, #0x3f - ands r4, r3 - movs r1, #0x32 - ldrsh r0, [r5, r1] - ldrh r1, [r2, #8] - adds r1, #8 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r4, r0 - lsls r0, r4, #1 - adds r0, r0, r6 - ldrh r1, [r0] - ldr r0, _0801A920 @ =0x00004055 - cmp r1, r0 - bne _0801A924 - subs r0, r4, #1 - b _0801A97A - .align 2, 0 -_0801A91C: .4byte gRoomControls -_0801A920: .4byte 0x00004055 -_0801A924: - ldr r0, _0801A928 @ =0x00004056 - b _0801A96A - .align 2, 0 -_0801A928: .4byte 0x00004056 -_0801A92C: - movs r0, #0x2e - ldrsh r1, [r5, r0] - ldr r3, _0801A960 @ =gRoomControls - ldrh r0, [r3, #6] - adds r0, #8 - subs r1, r1, r0 - asrs r4, r1, #4 - movs r2, #0x3f - ands r4, r2 - movs r1, #0x32 - ldrsh r0, [r5, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - lsls r0, r4, #1 - adds r0, r0, r6 - ldrh r1, [r0] - ldr r0, _0801A964 @ =0x00004057 - cmp r1, r0 - bne _0801A968 - adds r0, r4, #0 - subs r0, #0x40 - b _0801A97A - .align 2, 0 -_0801A960: .4byte gRoomControls -_0801A964: .4byte 0x00004057 -_0801A968: - ldr r0, _0801A974 @ =0x00004058 -_0801A96A: - cmp r1, r0 - bne _0801A978 - adds r0, r4, #0 - b _0801A97A - .align 2, 0 -_0801A974: .4byte 0x00004058 -_0801A978: - ldr r0, _0801A97C @ =0x0000FFFF -_0801A97A: - pop {r4, r5, r6, pc} - .align 2, 0 -_0801A97C: .4byte 0x0000FFFF - .syntax divided diff --git a/asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc b/asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc deleted file mode 100644 index 70e4a2b8..00000000 --- a/asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc +++ /dev/null @@ -1,55 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r3, r0, #0 - adds r4, r2, #0 - movs r2, #0 - ldr r5, _0801AA0C @ =0xFFFFFCA0 - adds r0, r1, r5 - cmp r0, #4 - bhi _0801AA40 - lsls r0, r0, #2 - ldr r1, _0801AA10 @ =_0801AA14 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801AA0C: .4byte 0xFFFFFCA0 -_0801AA10: .4byte _0801AA14 -_0801AA14: @ jump table - .4byte _0801AA44 @ case 0 - .4byte _0801AA28 @ case 1 - .4byte _0801AA34 @ case 2 - .4byte _0801AA3A @ case 3 - .4byte _0801AA2E @ case 4 -_0801AA28: - cmp r3, #0 - bne _0801AA40 - b _0801AA44 -_0801AA2E: - cmp r3, #8 - bne _0801AA40 - b _0801AA44 -_0801AA34: - cmp r3, #0x10 - bne _0801AA40 - b _0801AA44 -_0801AA3A: - cmp r3, #0x18 - bne _0801AA40 - movs r2, #1 -_0801AA40: - cmp r2, #0 - beq _0801AA54 -_0801AA44: - ldr r0, _0801AA50 @ =gPlayerEntity - adds r1, r4, #0 - adds r2, r3, #0 - bl sub_0801AA58 - b _0801AA56 - .align 2, 0 -_0801AA50: .4byte gPlayerEntity -_0801AA54: - movs r0, #0 -_0801AA56: - pop {r4, r5, pc} - .syntax divided diff --git a/asm/non_matching/color/sub_0801D48C.inc b/asm/non_matching/color/sub_0801D48C.inc deleted file mode 100644 index 2c51c2f1..00000000 --- a/asm/non_matching/color/sub_0801D48C.inc +++ /dev/null @@ -1,71 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r6, r0, #0 - adds r3, r1, #0 - ldr r0, _0801D50C @ =gPaletteList - mov r8, r0 - lsls r0, r6, #2 - mov r1, r8 - adds r4, r0, r1 - ldrb r0, [r4] - lsrs r5, r0, #4 - subs r5, #1 - movs r0, #1 - rsbs r0, r0, #0 - cmp r5, r0 - beq _0801D4F8 - ldr r2, _0801D510 @ =gPaletteBuffer - lsls r0, r3, #5 - movs r1, #0x80 - lsls r1, r1, #2 - adds r0, r0, r1 - adds r7, r0, r2 - lsls r0, r3, #2 - add r8, r0 - lsls r0, r6, #5 - adds r0, r0, r1 - adds r6, r0, r2 - movs r3, #0 -_0801D4C8: - ldr r0, [r4] - mov r1, r8 - adds r1, #4 - mov r8, r1 - subs r1, #4 - stm r1!, {r0} - strb r3, [r4] - strb r3, [r4, #1] - strh r3, [r4, #2] - adds r0, r6, #0 - adds r1, r7, #0 - movs r2, #0x20 - str r3, [sp] - bl MemCopy - adds r6, #0x20 - adds r4, #4 - adds r7, #0x20 - subs r5, #1 - movs r0, #1 - rsbs r0, r0, #0 - ldr r3, [sp] - cmp r5, r0 - bne _0801D4C8 -_0801D4F8: - ldr r0, _0801D514 @ =gUsedPalettes - ldr r1, [r0] - ldr r2, _0801D518 @ =0xFFFF0000 - orrs r1, r2 - str r1, [r0] - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801D50C: .4byte gPaletteList -_0801D510: .4byte gPaletteBuffer -_0801D514: .4byte gUsedPalettes -_0801D518: .4byte 0xFFFF0000 - .syntax divided diff --git a/asm/non_matching/common/zFree.inc b/asm/non_matching/common/zFree.inc deleted file mode 100644 index 7ff819a2..00000000 --- a/asm/non_matching/common/zFree.inc +++ /dev/null @@ -1,58 +0,0 @@ - .syntax unified - push {r4, r5, lr} - ldr r3, _0801DA44 @ =gzHeap - subs r1, r0, r3 - ldr r0, _0801DA48 @ =0x00000FFF - cmp r1, r0 - bhi _0801DA74 - adds r4, r3, #0 - ldrh r5, [r4] - adds r4, #2 - movs r2, #0 - cmp r2, r5 - bhs _0801DA74 - ldrh r0, [r4] - cmp r0, r1 - bne _0801DA4C - lsls r0, r5, #2 - subs r1, r3, #2 - adds r0, r0, r1 - ldrh r1, [r0] - strh r1, [r4] - strh r2, [r0] - adds r0, #2 - ldrh r1, [r0] - strh r1, [r4, #2] - strh r2, [r0] - subs r0, r5, #1 - strh r0, [r3] - b _0801DA74 - .align 2, 0 -_0801DA44: .4byte gzHeap -_0801DA48: .4byte 0x00000FFF -_0801DA4C: - adds r4, #4 - adds r2, #1 - cmp r2, r5 - bhs _0801DA74 - ldrh r0, [r4] - cmp r0, r1 - bne _0801DA4C - lsls r1, r5, #2 - ldr r3, _0801DA78 @ =gUnk_0203553E - adds r1, r1, r3 - ldrh r0, [r1] - strh r0, [r4] - movs r2, #0 - strh r2, [r1] - adds r1, #2 - ldrh r0, [r1] - strh r0, [r4, #2] - strh r2, [r1] - subs r0, r5, #1 - strh r0, [r3, #2] -_0801DA74: - pop {r4, r5, pc} - .align 2, 0 -_0801DA78: .4byte gUnk_0203553E - .syntax divided diff --git a/asm/non_matching/darkNut/sub_08021274.inc b/asm/non_matching/darkNut/sub_08021274.inc deleted file mode 100644 index 16891f6b..00000000 --- a/asm/non_matching/darkNut/sub_08021274.inc +++ /dev/null @@ -1,36 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - movs r0, #7 - ands r0, r1 - subs r0, #3 - cmp r0, #2 - bhi _0802129A - movs r3, #0x18 - adds r0, r1, #0 - ands r0, r3 - lsrs r0, r0, #3 - cmp r0, r2 - beq _080212AA - adds r0, r1, #0 - adds r0, #8 - ands r0, r3 - lsrs r0, r0, #3 - cmp r0, r2 - beq _080212AA -_0802129A: - adds r0, r1, #4 - movs r1, #0x18 - ands r0, r1 - lsrs r1, r0, #3 - cmp r2, r1 - beq _080212AA - adds r0, r1, #0 - b _080212AC -_080212AA: - movs r0, #0xff -_080212AC: - pop {pc} - .align 2, 0 - - .syntax divided diff --git a/asm/non_matching/gyorgTail/sub_080AC388.inc b/asm/non_matching/gyorgTail/sub_080AC388.inc deleted file mode 100644 index 91a15698..00000000 --- a/asm/non_matching/gyorgTail/sub_080AC388.inc +++ /dev/null @@ -1,128 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - ldr r1, _080AC3E4 @ =gUnk_0812A9B8 - ldrb r0, [r5, #0xa] - adds r0, r0, r1 - ldrb r3, [r0] - ldr r0, [r5, #0x50] - mov sl, r0 - ldrb r0, [r0, #0x14] - movs r1, #0x80 - mov sb, r1 - mov r1, sb - eors r1, r0 - adds r6, r5, #0 - adds r6, #0x7c - ldrh r4, [r6] - lsrs r0, r4, #8 - subs r1, r1, r0 - adds r2, r5, #0 - adds r2, #0x7a - ldrh r7, [r2] - mov ip, r7 - movs r7, #0 - ldrsh r0, [r2, r7] - cmp r0, #0 - bge _080AC404 - subs r0, r1, r3 - movs r7, #0xff - mov r8, r7 - ands r0, r7 - cmp r0, #0x7f - bhi _080AC3E8 - movs r1, #0 - ldrsh r0, [r2, r1] - rsbs r0, r0, #0 - strh r0, [r2] - mov r2, sl - ldrb r0, [r2, #0x14] - mov r7, sb - eors r0, r7 - subs r0, r0, r3 - b _080AC422 - .align 2, 0 -_080AC3E4: .4byte gUnk_0812A9B8 -_080AC3E8: - mov r2, ip - adds r0, r4, r2 - strh r0, [r6] - adds r0, r1, r3 - mov r7, r8 - ands r0, r7 - cmp r0, #0x80 - bls _080AC45A - mov r1, sl - ldrb r0, [r1, #0x14] - mov r2, sb - eors r0, r2 - adds r0, r0, r3 - b _080AC44E -_080AC404: - adds r0, r1, r3 - movs r7, #0xff - mov r8, r7 - ands r0, r7 - cmp r0, #0x80 - bls _080AC432 - movs r1, #0 - ldrsh r0, [r2, r1] - rsbs r0, r0, #0 - strh r0, [r2] - mov r2, sl - ldrb r0, [r2, #0x14] - mov r7, sb - eors r0, r7 - adds r0, r0, r3 -_080AC422: - movs r1, #0xff - ands r0, r1 - lsls r0, r0, #8 - strh r0, [r6] - adds r0, r5, #0 - bl sub_080AC884 - b _080AC45A -_080AC432: - mov r2, ip - adds r0, r4, r2 - strh r0, [r6] - subs r0, r1, r3 - mov r7, r8 - ands r0, r7 - subs r0, #1 - cmp r0, #0x7e - bhi _080AC45A - mov r1, sl - ldrb r0, [r1, #0x14] - mov r2, sb - eors r0, r2 - subs r0, r0, r3 -_080AC44E: - movs r1, #0xff - ands r0, r1 - lsls r0, r0, #8 - movs r1, #0x80 - orrs r0, r1 - strh r0, [r6] -_080AC45A: - adds r0, r5, #0 - adds r0, #0x7c - ldrh r0, [r0] - lsrs r0, r0, #8 - strb r0, [r5, #0x15] - adds r0, r5, #0 - bl sub_080AC6F0 - adds r0, r5, #0 - bl sub_080AC760 - adds r0, r5, #0 - bl sub_080AC7C4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/asm/non_matching/gyorgTail/sub_080AC6F0.inc b/asm/non_matching/gyorgTail/sub_080AC6F0.inc deleted file mode 100644 index 74864ad8..00000000 --- a/asm/non_matching/gyorgTail/sub_080AC6F0.inc +++ /dev/null @@ -1,63 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0x15] - movs r2, #0x1f - ands r2, r0 - lsrs r0, r0, #5 - lsls r1, r0, #1 - adds r3, r1, r0 - ldr r1, _080AC724 @ =gUnk_0812A9C0 - ldrb r0, [r4, #0x14] - adds r0, r0, r1 - ldrb r0, [r0] - subs r0, r0, r3 - adds r5, r1, #0 - cmp r0, #3 - bhi _080AC73A - cmp r0, #1 - beq _080AC72E - cmp r0, #1 - blo _080AC728 - cmp r0, #2 - beq _080AC732 - cmp r2, #0x19 - bhi _080AC75C - b _080AC73A - .align 2, 0 -_080AC724: .4byte gUnk_0812A9C0 -_080AC728: - cmp r2, #6 - bls _080AC75C - b _080AC73A -_080AC72E: - subs r0, r2, #5 - b _080AC736 -_080AC732: - adds r0, r2, #0 - subs r0, #0xf -_080AC736: - cmp r0, #0xc - bls _080AC75C -_080AC73A: - adds r0, r3, #3 - cmp r2, #0x1a - bhi _080AC74E - adds r0, r3, #2 - cmp r2, #0x10 - bhi _080AC74E - adds r0, r3, #0 - cmp r2, #5 - bls _080AC74E - adds r0, #1 -_080AC74E: - movs r1, #0x18 - bl __modsi3 - strb r0, [r4, #0x14] - adds r0, r0, r5 - ldrb r0, [r0] - strb r0, [r4, #0x1e] -_080AC75C: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/gyorgTail/sub_080AC7C4.inc b/asm/non_matching/gyorgTail/sub_080AC7C4.inc deleted file mode 100644 index 5ab1b5da..00000000 --- a/asm/non_matching/gyorgTail/sub_080AC7C4.inc +++ /dev/null @@ -1,95 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - mov r8, r0 - ldr r7, [r0, #0x54] - ldr r5, [r7, #0x54] - cmp r5, #0 - beq _080AC7E4 - ldr r0, [r4, #0x50] - adds r1, r5, #0 - bl CopyPosition - b _080AC7E6 -_080AC7E4: - ldr r5, [r4, #0x50] -_080AC7E6: - adds r0, r7, #0 - adds r0, #0x79 - ldrb r2, [r0] - lsls r2, r2, #8 - ldr r3, _080AC880 @ =gSineTable - mov sb, r3 - ldrb r1, [r7, #0x15] - lsls r0, r1, #1 - add r0, sb - movs r3, #0 - ldrsh r0, [r0, r3] - adds r6, r0, #0 - muls r6, r2, r6 - adds r1, #0x40 - lsls r1, r1, #1 - add r1, sb - movs r3, #0 - ldrsh r0, [r1, r3] - muls r0, r2, r0 - rsbs r3, r0, #0 - adds r0, r5, #0 - adds r1, r7, #0 - adds r2, r6, #0 - bl PositionRelative - mov r0, r8 - adds r0, #0x79 - ldrb r2, [r0] - lsls r2, r2, #8 - mov r0, r8 - ldrb r1, [r0, #0x15] - lsls r0, r1, #1 - add r0, sb - movs r3, #0 - ldrsh r0, [r0, r3] - adds r6, r0, #0 - muls r6, r2, r6 - adds r1, #0x40 - lsls r1, r1, #1 - add r1, sb - movs r3, #0 - ldrsh r0, [r1, r3] - muls r0, r2, r0 - rsbs r3, r0, #0 - adds r0, r7, #0 - mov r1, r8 - adds r2, r6, #0 - bl PositionRelative - adds r0, r4, #0 - adds r0, #0x79 - ldrb r2, [r0] - lsls r2, r2, #8 - ldrb r1, [r4, #0x15] - lsls r0, r1, #1 - add r0, sb - movs r3, #0 - ldrsh r0, [r0, r3] - adds r6, r0, #0 - muls r6, r2, r6 - adds r1, #0x40 - lsls r1, r1, #1 - add r1, sb - movs r3, #0 - ldrsh r0, [r1, r3] - muls r0, r2, r0 - rsbs r3, r0, #0 - mov r0, r8 - adds r1, r4, #0 - adds r2, r6, #0 - bl PositionRelative - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AC880: .4byte gSineTable - .syntax divided diff --git a/asm/non_matching/itemBomb/sub_08076088.inc b/asm/non_matching/itemBomb/sub_08076088.inc deleted file mode 100644 index bd3321f2..00000000 --- a/asm/non_matching/itemBomb/sub_08076088.inc +++ /dev/null @@ -1,147 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - adds r3, r1, #0 - adds r5, r2, #0 - cmp r3, #0 - beq _080760AA - ldrb r0, [r3, #0x16] - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _080760A4 - b _080761A0 -_080760A4: - movs r0, #2 - strb r0, [r3, #0xc] - strb r1, [r3, #0xd] -_080760AA: - str r3, [r4, #0x18] - ldr r0, _080760C4 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _080760CC - ldr r1, _080760C8 @ =0x00000928 - adds r0, r4, #0 - bl sub_08077DF4 - b _080760D6 - .align 2, 0 -_080760C4: .4byte gPlayerState -_080760C8: .4byte 0x00000928 -_080760CC: - movs r1, #0xce - lsls r1, r1, #2 - adds r0, r4, #0 - bl sub_08077DF4 -_080760D6: - ldr r3, _08076130 @ =gPlayerState - movs r0, #0 - mov r8, r0 - movs r7, #3 - strb r7, [r3, #5] - adds r0, r3, #0 - adds r0, #0xa8 - movs r6, #4 - strb r6, [r0] - movs r0, #2 - strb r0, [r4, #4] - movs r0, #0xf - strb r0, [r4, #0xf] - ldr r2, _08076134 @ =gPlayerEntity - movs r1, #0x79 - adds r1, r1, r2 - mov ip, r1 - ldrb r1, [r1] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08076138 - mov r1, r8 - mov r0, ip - strb r1, [r0] - ldrb r0, [r2, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - strb r6, [r3, #5] - movs r1, #8 - asrs r1, r5 - mvns r1, r1 - ldrb r2, [r3, #0xb] - adds r0, r1, #0 - ands r0, r2 - strb r0, [r3, #0xb] - ldrb r0, [r3, #0xa] - ands r1, r0 - strb r1, [r3, #0xa] - strb r7, [r4, #4] - mov r0, r8 - strb r0, [r4, #0xf] - b _0807614A - .align 2, 0 -_08076130: .4byte gPlayerState -_08076134: .4byte gPlayerEntity -_08076138: - movs r1, #8 - asrs r1, r5 - ldrb r2, [r3, #0xa] - adds r0, r1, #0 - orrs r0, r2 - strb r0, [r3, #0xa] - ldrb r0, [r3, #0xb] - orrs r1, r0 - strb r1, [r3, #0xb] -_0807614A: - adds r0, r4, #0 - movs r1, #0x13 - bl CreatePlayerItemWithParent - adds r3, r0, #0 - cmp r3, #0 - bne _08076162 - adds r0, r4, #0 - adds r1, r5, #0 - bl PlayerCancelHoldItem - b _080761A0 -_08076162: - ldr r1, _08076194 @ =gPlayerEntity - str r3, [r1, #0x74] - movs r2, #0 - strb r2, [r1, #0xf] - ldr r0, [r4, #0x18] - str r0, [r3, #0x54] - ldrb r0, [r1, #0x16] - strb r0, [r3, #0x16] - str r4, [r3, #0x50] - str r3, [r4, #0x18] - ldrb r0, [r4, #3] - strb r0, [r3, #0xb] - ldrb r0, [r4, #7] - strb r0, [r3, #0xe] - ldrb r0, [r4, #8] - strb r0, [r3, #0xf] - ldr r0, [r4, #0x18] - ldrb r1, [r0, #0x16] - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0x10 - bne _08076198 - movs r0, #8 - strb r0, [r4, #7] - b _0807619A - .align 2, 0 -_08076194: .4byte gPlayerEntity -_08076198: - strb r2, [r4, #7] -_0807619A: - movs r0, #0x7f - bl SoundReq -_080761A0: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/object12/Object12_Action2.inc b/asm/non_matching/object12/Object12_Action2.inc deleted file mode 100644 index 77e17507..00000000 --- a/asm/non_matching/object12/Object12_Action2.inc +++ /dev/null @@ -1,70 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080850A6 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #4 - strb r0, [r1] - ldr r0, _080850A8 @ =gScreen - mov ip, r0 - ldrh r1, [r0] - movs r2, #0x80 - lsls r2, r2, #6 - adds r0, r2, #0 - orrs r0, r1 - mov r1, ip - strh r0, [r1] - adds r1, #0x60 - movs r0, #0x1f - strh r0, [r1] - adds r1, #2 - movs r0, #0xf - strh r0, [r1] - movs r2, #0x2e - ldrsh r0, [r4, r2] - ldr r3, _080850AC @ =gRoomControls - movs r2, #0xa - ldrsh r1, [r3, r2] - subs r0, r0, r1 - adds r1, r0, #0 - subs r1, #0x18 - movs r2, #0xff - ands r1, r2 - lsls r1, r1, #8 - adds r0, #0x18 - ands r0, r2 - orrs r1, r0 - mov r0, ip - adds r0, #0x58 - strh r1, [r0] - movs r1, #0x32 - ldrsh r0, [r4, r1] - movs r4, #0xc - ldrsh r1, [r3, r4] - subs r0, r0, r1 - adds r1, r0, #0 - subs r1, #0x18 - ands r1, r2 - lsls r1, r1, #8 - adds r0, #0x18 - ands r0, r2 - orrs r1, r0 - mov r0, ip - adds r0, #0x5c - strh r1, [r0] -_080850A6: - pop {r4, pc} - .align 2, 0 -_080850A8: .4byte gScreen -_080850AC: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/object1E/sub_08087528.inc b/asm/non_matching/object1E/sub_08087528.inc deleted file mode 100644 index 7f6d7cdd..00000000 --- a/asm/non_matching/object1E/sub_08087528.inc +++ /dev/null @@ -1,107 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _08087590 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x19] - movs r2, #0x3f - adds r0, r2, #0 - ands r0, r1 - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r4, #0x1b] - lsrs r0, r1, #6 - subs r0, #1 - lsls r0, r0, #6 - ands r2, r1 - orrs r2, r0 - strb r2, [r4, #0x1b] - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _08087594 - ldrb r1, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x1a] - ldrb r0, [r4, #0x14] - cmp r0, #1 - bne _08087588 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] -_08087588: - adds r0, r4, #0 - bl sub_08087640 - b _080875DC - .align 2, 0 -_08087590: .4byte gPlayerEntity -_08087594: - ldr r0, _080875B4 @ =gArea - ldrb r0, [r0, #1] - movs r1, #4 - cmp r0, #0x10 - bne _080875A2 - movs r1, #0xb5 - lsls r1, r1, #1 -_080875A2: - adds r0, r4, #0 - bl ChangeObjPalette - ldrb r0, [r4, #0x14] - cmp r0, #1 - beq _080875B8 - cmp r0, #3 - bne _080875CE - b _080875C0 - .align 2, 0 -_080875B4: .4byte gArea -_080875B8: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] -_080875C0: - ldrb r0, [r4, #0xa] - cmp r0, #0x40 - bne _080875DC - ldrh r0, [r4, #0x32] - adds r0, #4 - strh r0, [r4, #0x32] - b _080875DC -_080875CE: - ldrb r0, [r4, #0xa] - cmp r0, #0x40 - bne _080875DC - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] -_080875DC: - adds r0, r4, #0 - movs r1, #3 - bl SetDefaultPriority - ldrb r1, [r4, #0xb] - lsls r1, r1, #2 - ldrb r0, [r4, #0x14] - adds r1, r1, r0 - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/playerUtils/sub_0807A8D8.inc b/asm/non_matching/playerUtils/sub_0807A8D8.inc deleted file mode 100644 index 912a5952..00000000 --- a/asm/non_matching/playerUtils/sub_0807A8D8.inc +++ /dev/null @@ -1,209 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r5, r0, #0 - ldr r0, _0807AA5C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807A8F0 - b _0807A9F6 -_0807A8F0: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r7, _0807AA60 @ =gRoomControls - ldrh r1, [r7, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r6, #0x3f - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - adds r2, #1 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - ldr r1, _0807AA64 @ =gPlayerEntity - adds r1, #0x38 - mov sb, r1 - ldrb r1, [r1] - bl sub_080B1B84 - adds r4, r0, #0 - movs r0, #0x20 - mov r8, r0 - ands r4, r0 - cmp r4, #0 - beq _0807A94E - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldrh r0, [r7, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - adds r2, #1 - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807A94E: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldrh r1, [r7, #6] - subs r1, #2 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - mov r2, sb - ldrb r1, [r2] - bl sub_080B1B84 - adds r4, r0, #0 - mov r0, r8 - ands r4, r0 - cmp r4, #0 - beq _0807A9A2 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldrh r0, [r7, #6] - subs r0, #2 - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807A9A2: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldrh r1, [r7, #6] - adds r1, #2 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - mov r2, sb - ldrb r1, [r2] - bl sub_080B1B84 - adds r4, r0, #0 - mov r0, r8 - ands r4, r0 - cmp r4, #0 - beq _0807A9F6 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldrh r0, [r7, #6] - adds r0, #2 - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807A9F6: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r7, _0807AA60 @ =gRoomControls - ldrh r1, [r7, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r6, #0x3f - ands r0, r6 - movs r2, #0x32 - ldrsh r1, [r5, r2] - ldrh r2, [r7, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - ldr r1, _0807AA64 @ =gPlayerEntity - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080B1B84 - adds r4, r0, #0 - movs r0, #0x20 - ands r0, r4 - cmp r0, #0 - beq _0807AA4C - movs r0, #0x2e - ldrsh r1, [r5, r0] - ldrh r0, [r7, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r5, r2] - ldrh r2, [r7, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - bl sub_0807AAF8 -_0807AA4C: - movs r0, #2 - ands r0, r4 - cmp r0, #0 - beq _0807AA68 - adds r0, r5, #0 - bl sub_0807AABC - b _0807AA76 - .align 2, 0 -_0807AA5C: .4byte gPlayerState -_0807AA60: .4byte gRoomControls -_0807AA64: .4byte gPlayerEntity -_0807AA68: - movs r0, #4 - ands r0, r4 - cmp r0, #0 - beq _0807AA76 - adds r0, r5, #0 - bl sub_0807AA80 -_0807AA76: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/linker.ld b/linker.ld index b639a43c..27f3346d 100644 --- a/linker.ld +++ b/linker.ld @@ -32,15 +32,12 @@ SECTIONS { . = 0x00002AC0; gUnk_02002AC0 = .; . = 0x00002B0E; gUnk_02002B0E = .; . = 0x00002B54; gUnk_02002B54 = .; - . = 0x00002B58; gUnk_02002B58 = .; . = 0x00002B6B; gUnk_02002B6B = .; . = 0x00002C01; gUnk_02002C01 = .; . = 0x00002C81; gUnk_02002C81 = .; - . = 0x00002C8E; gUnk_02002C8E = .; . = 0x00002F00; gMapDataTopSpecial = .; . = 0x00006F00; gUnk_02006F00 = .; . = 0x0000AF00; gUnk_0200AF00 = .; - . = 0x0000AF13; gUnk_0200AF13 = .; . = 0x0000AF34; gUnk_0200AF34 = .; . = 0x0000B240; gUnk_0200B240 = .; . = 0x0000B640; gUnk_0200B640 = .; @@ -127,7 +124,6 @@ SECTIONS { . = 0x000354B0; gUnk_020354B0 = .; . = 0x000354B4; gManagerCount = .; . = 0x000354C0; gUnk_020354C0 = .; - . = 0x0003553E; gUnk_0203553E = .; . = 0x00035540; gzHeap = .; . = 0x00035542; gUnk_02035542 = .; . = 0x00036540; gUnk_02036540 = .; @@ -154,10 +150,8 @@ SECTIONS { iwram (NOLOAD) : ALIGN(4) { . = 0x00000000; gOAMControls = .; - . = 0x00000020; gUnk_03000020 = .; . = 0x00000420; gUnk_03000420 = .; . = 0x00000B80; gUnk_03000B80 = .; - . = 0x00000BD4; gUnk_03000BD4 = .; . = 0x00000BF0; gRoomControls = .; . = 0x00000C24; gUnk_03000C24 = .; . = 0x00000C30; gUnk_03000C30 = .; diff --git a/src/beanstalkSubtask.c b/src/beanstalkSubtask.c index 334a4811..b4992d01 100644 --- a/src/beanstalkSubtask.c +++ b/src/beanstalkSubtask.c @@ -280,36 +280,36 @@ bool32 sub_0801A4F8(void) { ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570()) -NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc", u32 sub_0801A8D0(Entity* this, u32 param_2)) { +u32 sub_0801A8D0(Entity* this, u32 param_2) { u16* mapData; u32 tile; u32 position; - if (this != NULL) { - mapData = GetLayerByIndex(this->collisionLayer)->mapData; - if (param_2 == 0) { - position = COORD_TO_TILE_OFFSET(this, 0, 8); - tile = mapData[position]; - if (tile == 0x4055) { - return position - 1; - } - if (tile == 0x4056) { - return position; - } - } else { - position = COORD_TO_TILE_OFFSET(this, 8, 0); - tile = mapData[position]; - if (tile == 0x4057) { - return position - 0x40; - } - if (tile == 0x4058) { - return position; - } + if (this == NULL) + return 0xffff; + + mapData = GetLayerByIndex(this->collisionLayer)->mapData; + if (param_2 == 0) { + position = COORD_TO_TILE_OFFSET(this, 0, 8); + tile = mapData[position]; + if (tile == 0x4055) { + return position - 1; + } + if (tile == 0x4056) { + return position; + } + } else { + position = COORD_TO_TILE_OFFSET(this, 8, 0); + tile = mapData[position]; + if (tile == 0x4057) { + return position - 0x40; + } + if (tile == 0x4058) { + return position; } } return 0xffff; } -END_NONMATCH bool32 sub_0801A980(void) { u16 tileType; @@ -323,46 +323,42 @@ bool32 sub_0801A980(void) { return FALSE; } -NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc", - bool32 sub_0801A9F0(u32 param_1, u32 param_2, u32 param_3)) { - +bool32 sub_0801A9F0(u32 param_1, u32 param_2, u32 param_3) { + bool32 cond = FALSE; switch (param_2) { + case 0x360: + cond = TRUE; + break; case 0x361: if (param_1 == 0) { - goto result; - } else { - return FALSE; - } - break; - case 0x362: - if (param_1 == 0x10) { - goto result; - } else { - return FALSE; - } - break; - case 0x363: - if (param_1 == 0x18) { - goto result; - } else { - return FALSE; + cond = TRUE; } break; case 0x364: if (param_1 == 8) { - goto result; - } else { - return FALSE; + cond = TRUE; + } + break; + case 0x362: + if (param_1 == 0x10) { + cond = TRUE; + } + break; + case 0x363: + if (param_1 == 0x18) { + cond = TRUE; } break; - case 0x360: - result: - return sub_0801AA58(&gPlayerEntity, param_3, param_1); default: - return FALSE; + break; } + + if (cond) { + return sub_0801AA58(&gPlayerEntity, param_3, param_1); + } + + return FALSE; } -END_NONMATCH bool32 sub_0801AA58(Entity* this, u32 param_2, u32 param_3) { LayerStruct* layer; diff --git a/src/color.c b/src/color.c index 3211e948..20c2d321 100644 --- a/src/color.c +++ b/src/color.c @@ -289,4 +289,39 @@ u32 sub_0801D458(u32 a1) { return 0; } -ASM_FUNC("asm/non_matching/color/sub_0801D48C.inc", void sub_0801D48C(u32 a1, u32 a2)); +void sub_0801D48C(u32 a1, u32 a2) { + Palette* pPVar1; + Palette* pPVar2; + s32 iVar2; + u16* iVar3; + u16* iVar4; + Palette* pPVar5; + u32 tmp; + u16* ptr; + Palette* ptr2; + + pPVar2 = gPaletteList; + pPVar1 = pPVar2 + a1; + iVar2 = (*(u8*)pPVar1) >> 4; + if (--iVar2 != -1) { + ptr = gPaletteBuffer; + iVar4 = ptr + 0x100 + a2 * 0x10; + pPVar5 = gPaletteList + a2; + iVar3 = ptr + 0x100 + a1 * 0x10; + do { + *pPVar5 = *pPVar1; + pPVar1->_0_0 = 0; + pPVar1->_0_4 = 0; + pPVar1->_1 = 0; + pPVar1->_2 = 0; + MemCopy(iVar3, iVar4, 0x20); + iVar3 += 0x10; + pPVar1++; + iVar4 += 0x10; + iVar2--; + pPVar5++; + } while (iVar2 != -1); + } + + gUsedPalettes |= 0xffff0000; +} diff --git a/src/common.c b/src/common.c index ee50370b..89220604 100644 --- a/src/common.c +++ b/src/common.c @@ -310,7 +310,31 @@ void sub_0801D898(void* dest, void* src, u32 word, u32 size) { ASM_FUNC("asm/non_matching/common/zMalloc.inc", void* zMalloc(u32 size)); -ASM_FUNC("asm/non_matching/common/zFree.inc", void zFree(void* ptr)); +void zFree(void* ptr) { + u32 uVar1; + u32 i; + u16* puVar3; + s32 uVar5; + u16* ptr2; + + uVar1 = (int)ptr - (int)gzHeap; + if (uVar1 < 0x1000) { + puVar3 = (u16*)gzHeap; + uVar5 = *puVar3++; + + for (i = 0; i < uVar5; puVar3 += 2, i++) { + if (*puVar3 == uVar1) { + ptr2 = &((u16*)(gzHeap - 2))[uVar5 * 2]; + *puVar3 = *ptr2; + *ptr2++ = 0; + *(puVar3 + 1) = *ptr2; + *ptr2 = 0; + *(u16*)(gzHeap) = uVar5 - 1; + break; + } + } + } +} void zMallocInit(void) { MemClear(gzHeap, sizeof(gzHeap)); diff --git a/src/enemy/armos.c b/src/enemy/armos.c index b6e262cc..076c278d 100644 --- a/src/enemy/armos.c +++ b/src/enemy/armos.c @@ -12,6 +12,7 @@ #include "hitbox.h" #include "common.h" #include "flags.h" +#include "collision.h" typedef struct { /*0x00*/ Entity base; @@ -27,8 +28,8 @@ typedef struct { } ArmosEntity; extern Entity* gUnk_020000B0; -extern Entity gUnk_02027EB4; -extern Entity gUnk_0200D654; +extern u8 gUnk_02027EB4[]; +extern u8 gUnk_0200D654[]; extern void (*const gUnk_080CE124[])(ArmosEntity*); extern void (*const gUnk_080CE13C[])(ArmosEntity*); @@ -361,7 +362,40 @@ bool32 sub_08030650(ArmosEntity* this) { return FALSE; } -ASM_FUNC("asm/non_matching/armos/sub_080306C4.inc", void sub_080306C4(ArmosEntity* this)) +void sub_080306C4(ArmosEntity* this) { + u32 uVar3; + u32 var; + u32 tmp; + + if (sub_08049FDC(super, 1) && this->unk_7a != 0) { + + super->timer = 0x18; + uVar3 = sub_0800132C(super, gUnk_020000B0); + if (uVar3 != 0xff) { + var = 0; + if ((((Random() & 7) != 0) || (super->animationState == 0xff)) && ((this->unk_82 & 3) != 3)) { + super->direction = (uVar3 + 4) & 0x18; + var = 1; + } + if (!var) { + super->direction = (4 + uVar3 + ((Random() & 2) - 1) * 8) & 0x18; + } + if (IsTileCollision(super->collisionLayer == 2 ? gUnk_0200D654 : gUnk_02027EB4, + super->x.HALF.HI + gUnk_080CE164[super->direction >> 2], + super->y.HALF.HI + gUnk_080CE164[(super->direction >> 2) + 1], 0)) { + super->direction = ((u8)(((uVar3 & 4) ^ 4) << 1)) | (uVar3 & 0x10); + var = 0; + } + sub_080307D4(this); + tmp = this->unk_82 << 1 | var; + this->unk_82 = tmp; + } + } else { + super->action = 4; + super->timer = 0x78; + super->speed = 0xa0; + } +} void sub_080307D4(ArmosEntity* this) { u8 tmp = super->direction >> 3; diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c index 4f948162..ae29107c 100644 --- a/src/enemy/darkNut.c +++ b/src/enemy/darkNut.c @@ -392,7 +392,17 @@ void sub_0802124C(Entity* this) { } } -ASM_FUNC("asm/non_matching/darkNut/sub_08021274.inc", u32 sub_08021274(u32 a, u32 b)) +u32 sub_08021274(u32 animationState, u32 dir) { + if (((dir & 7) - 3 < 3) && (((dir & 0x18) >> 3 == animationState || (((dir + 8) & 0x18) >> 3 == animationState)))) { + return 0xff; + } + + dir = DirectionToAnimationState(DirectionRoundUp(dir)); + if (animationState == dir) { + return 0xff; + } + return dir; +} void sub_080212B0(Entity* this) { u8 tmp; diff --git a/src/game.c b/src/game.c index 8d047356..bad05016 100644 --- a/src/game.c +++ b/src/game.c @@ -175,7 +175,6 @@ typedef struct { } CutsceneData; static const CutsceneData sCutsceneData[]; -extern u8 gUnk_0200AF13; extern u8 gUnk_0200AF14; extern u8 gUnk_080FE1C6[]; extern void (*const gUnk_080FE2AC[])(void); diff --git a/src/item/itemBomb.c b/src/item/itemBomb.c index fb7ba4fc..ce290853 100644 --- a/src/item/itemBomb.c +++ b/src/item/itemBomb.c @@ -36,7 +36,7 @@ void sub_08075FF8(ItemBehavior* this, u32 idx) { } maxBombs = this->behaviorID == 7 ? 3 : 1; if (maxBombs > bombCount) { - entity = CreatePlayerItemWithParent(this, 2); + entity = CreatePlayerItemWithParent(this, PLAYER_ITEM_BOMB); if (entity != NULL) { pos = &gUnk_0811BDAC[gPlayerEntity.animationState & 6]; PositionRelative(&gPlayerEntity, entity, Q_16_16(pos[0]), Q_16_16(pos[1])); @@ -48,4 +48,57 @@ void sub_08075FF8(ItemBehavior* this, u32 idx) { DeletePlayerItem(this, idx); } -ASM_FUNC("asm/non_matching/itemBomb/sub_08076088.inc", void sub_08076088(ItemBehavior* this, void* arg1)) +void sub_08076088(ItemBehavior* this, Entity* param_2, u32 param_3) { + if (param_2 != NULL) { + if ((param_2->carryFlags & 1) != 0) { + return; + } + param_2->action = 2; + param_2->subAction = param_2->carryFlags & 1; + } + + this->field_0x18 = param_2; + if ((gPlayerState.flags & PL_NO_CAP)) { + sub_08077DF4(this, 0x928); + } else { + sub_08077DF4(this, 0x338); + } + gPlayerState.heldObject = 3; + gPlayerState.framestate = 4; + this->stateID = 2; + this->field_0xf = 0xf; + if ((gPlayerEntity.field_0x78.HALF.HI & 0x80)) { + gPlayerEntity.field_0x78.HALF.HI = 0; + COLLISION_ON(&gPlayerEntity); + gPlayerState.heldObject = 4; + gPlayerState.keepFacing = ~(8 >> param_3) & gPlayerState.keepFacing; + gPlayerState.field_0xa = ~(8 >> param_3) & gPlayerState.field_0xa; + this->stateID = 3; + this->field_0xf = 0; + } else { + gPlayerState.field_0xa |= (8 >> param_3); + gPlayerState.keepFacing |= (8 >> param_3); + } + + param_2 = CreatePlayerItemWithParent(this, PLAYER_ITEM_13); + if (param_2 == NULL) { + PlayerCancelHoldItem(this, param_3); + } else { + Entity* playerEnt = &gPlayerEntity; + *(Entity**)&playerEnt->field_0x74 = param_2; + playerEnt->subtimer = 0; + param_2->child = this->field_0x18; + param_2->carryFlags = playerEnt->carryFlags; + param_2->parent = (Entity*)this; + this->field_0x18 = param_2; + param_2->type2 = this->field_0x2[1]; + param_2->timer = this->field_0x5[2]; + param_2->subtimer = this->field_0x5[3]; + if ((this->field_0x18->carryFlags & 0xf0) == 0x10) { + this->field_0x5[2] = 8; + } else { + this->field_0x5[2] = 0; + } + SoundReq(SFX_PLY_LIFT); + } +} diff --git a/src/item/itemPacciCane.c b/src/item/itemPacciCane.c index a09a7640..01615582 100644 --- a/src/item/itemPacciCane.c +++ b/src/item/itemPacciCane.c @@ -2,6 +2,7 @@ #include "entity.h" #include "item.h" #include "functions.h" +#include "playeritem.h" void sub_08076C98(ItemBehavior*, u32); void sub_08076CBC(ItemBehavior*, u32); @@ -26,7 +27,7 @@ void sub_08076CBC(ItemBehavior* beh, u32 idx) { DeletePlayerItem(beh, idx); } else { if ((beh->field_0x5[9] & 0x40) != 0) { - CreatePlayerItemWithParent(beh, 0x12); + CreatePlayerItemWithParent(beh, PLAYER_ITEM_12); } UpdateItemAnim(beh); } diff --git a/src/item/itemPegasusBoots.c b/src/item/itemPegasusBoots.c index 28479b75..eb2696c6 100644 --- a/src/item/itemPegasusBoots.c +++ b/src/item/itemPegasusBoots.c @@ -5,6 +5,7 @@ #include "effects.h" #include "game.h" #include "save.h" +#include "playeritem.h" void sub_08076964(ItemBehavior*, u32); void sub_080768F8(ItemBehavior*, u32); @@ -105,7 +106,7 @@ void sub_08076964(ItemBehavior* this, u32 idx) { (gPlayerState.skills & SKILL_DASH_ATTACK) != 0) { gPlayerState.field_0xab = 3; sub_08077DF4(this, 0x298); - bombEntity = CreatePlayerItemWithParent(this, 0xc); + bombEntity = CreatePlayerItemWithParent(this, PLAYER_ITEM_C); if (bombEntity != NULL) { if (ItemIsSword(gSave.stats.itemButtons[SLOT_A]) != 0) { uVar3 = gSave.stats.itemButtons[SLOT_A]; diff --git a/src/item/itemSword.c b/src/item/itemSword.c index e6171072..6e5b0d6f 100644 --- a/src/item/itemSword.c +++ b/src/item/itemSword.c @@ -114,7 +114,7 @@ void sub_080754B8(ItemBehavior* this, u32 idx) { if (gPlayerEntity.frameSpriteSettings & 1) { iVar1 = sub_0807B014(); if (iVar1 && FindEntityByID(PLAYER_ITEM, PLAYER_ITEM_SWORD_BEAM1, 2) == 0) { - CreatePlayerItemWithParent(this, 0xf); + CreatePlayerItemWithParent(this, PLAYER_ITEM_SWORD_BEAM1); if (iVar1 == 0xf) { gPlayerState.field_0xab = 5; } else { @@ -235,7 +235,7 @@ void sub_08075738(ItemBehavior* this, u32 idx) { } else { if (((((gPlayerEntity.frameSpriteSettings & 1) != 0) && ((gPlayerState.sword_state & 0x80) == 0)) && ((gPlayerState.skills & SKILL_FOURSWORD) != 0))) { - Entity* bombEnt = CreatePlayerItemWithParent(this, 0x14); + Entity* bombEnt = CreatePlayerItemWithParent(this, PLAYER_ITEM_14); if (bombEnt) { bombEnt->animationState = (gPlayerEntity.animationState & 6) | 0x80; } diff --git a/src/manager/delayedEntityLoadManager.c b/src/manager/delayedEntityLoadManager.c index 00a0bbde..a878d70e 100644 --- a/src/manager/delayedEntityLoadManager.c +++ b/src/manager/delayedEntityLoadManager.c @@ -5,8 +5,33 @@ * @brief Delayed entity loader. */ #include "manager/delayedEntityLoadManager.h" +#include "room.h" ASM_FUNC("asm/non_matching/delayedEntityLoadManager/DelayedEntityLoadManager_Main.inc", void DelayedEntityLoadManager_Main()) -ASM_FUNC("asm/non_matching/delayedEntityLoadManager/sub_0805ACC0.inc", u32 sub_0805ACC0(Entity* ent)) +u32 sub_0805ACC0(Entity* param_1) { + u16* ptr; + Entity* entity; + Entity* list; + s32 tmp; + + if (param_1->health == 0) { + return 0; + } + tmp = (param_1->health & 0x7f) - 1; + list = (Entity*)(gEntityLists + 6); + + for (entity = gEntityLists[6].first; entity != list; entity = entity->next) { + if ((entity->kind == 9 && entity->id == 0x16) && entity->type2 <= tmp && + (entity->type2 + *(u8*)((u32)&entity->zVelocity + 1)) > tmp) { + + ptr = (u16*)GetCurrentRoomProperty(entity->type); + if (ptr != NULL) { + ptr += (tmp - entity->type2) * 8; + return (((ptr[2] + gRoomControls.origin_x) * 0x10000) | ptr[3]) + gRoomControls.origin_y; + } + } + } + return 0; +} diff --git a/src/manager/lightRayManager.c b/src/manager/lightRayManager.c index a738f620..fb704702 100644 --- a/src/manager/lightRayManager.c +++ b/src/manager/lightRayManager.c @@ -79,8 +79,7 @@ void sub_08057118(LightRayManager* this) { RegisterTransitionManager(this, sub_080570B8, sub_080570F8); } -// regalloc -NONMATCH("asm/non_matching/lightRayManager/sub_08057174.inc", void sub_08057174(LightRayManager* this)) { +void sub_08057174(LightRayManager* this) { LightRayManagerProp* prop = GetCurrentRoomProperty(super->type); s32 temp; s32 x; @@ -88,23 +87,14 @@ NONMATCH("asm/non_matching/lightRayManager/sub_08057174.inc", void sub_08057174( if (prop->unk0 == 0xff) return; - temp = gPlayerEntity.x.HALF.HI; - if (temp < 0) { - temp += 0xf; - } - x = temp >> 4; - temp = gPlayerEntity.y.HALF.HI; - if (temp < 0) { - temp += 0xf; - } - - y = temp >> 4; + x = gPlayerEntity.x.HALF.HI / 16; + y = gPlayerEntity.y.HALF.HI / 16; for (; prop->unk0 != 0xff; prop++) { if (prop->unk0 != this->unk_21) { - u32 x2 = (gRoomControls.origin_x >> 4) + prop->unk1; - u32 y2 = (gRoomControls.origin_y >> 4) + prop->unk2; + u32 x2 = (gRoomControls.origin_x / 16) + prop->unk1; + u32 y2 = (gRoomControls.origin_y / 16) + prop->unk2; if (y - y2 < prop->unk4 && x - x2 < prop->unk3) { switch (prop->unk0) { @@ -158,7 +148,6 @@ NONMATCH("asm/non_matching/lightRayManager/sub_08057174.inc", void sub_08057174( } } } -END_NONMATCH void sub_0805728C(LightRayManager* this) { if (--super->subtimer == 0) { diff --git a/src/object/object12.c b/src/object/object12.c index 2b1ce0c5..d99bc2ad 100644 --- a/src/object/object12.c +++ b/src/object/object12.c @@ -51,8 +51,9 @@ void Object12_Init(Object12Entity* this) { void Object12_Action1(Object12Entity* this) { } -NONMATCH("asm/non_matching/object12/Object12_Action2.inc", void Object12_Action2(Object12Entity* this)) { +void Object12_Action2(Object12Entity* this) { u32 tmp; + u32 tmp2; if (--super->timer == 0) { super->action = 3; super->timer = 0x1e; @@ -60,13 +61,16 @@ NONMATCH("asm/non_matching/object12/Object12_Action2.inc", void Object12_Action2 gScreen.lcd.displayControl |= 0x2000; gScreen.controls.windowInsideControl = 0x1f; gScreen.controls.windowOutsideControl = 0xf; - tmp = super->x.HALF.HI - gRoomControls.scroll_x; - gScreen.controls.window0HorizontalDimensions = (((tmp - 0x18) & 0xff) << 8) | ((tmp + 0x18) & 0xff); - tmp = super->y.HALF.HI - gRoomControls.scroll_y; - gScreen.controls.window0VerticalDimensions = (((tmp - 0x18) & 0xff) << 8) | ((tmp + 0x18) & 0xff); + tmp2 = super->x.HALF.HI; + tmp = gRoomControls.scroll_x; + tmp2 = tmp2 - tmp; + gScreen.controls.window0HorizontalDimensions = (((tmp2 - 0x18) & 0xff) << 8) | ((tmp2 + 0x18) & 0xff); + tmp2 = super->y.HALF.HI; + tmp = gRoomControls.scroll_y; + tmp2 = tmp2 - tmp; + gScreen.controls.window0VerticalDimensions = (((tmp2 - 0x18) & 0xff) << 8) | ((tmp2 + 0x18) & 0xff); } } -END_NONMATCH void Object12_Action3(Object12Entity* this) { if (--super->timer == 0) { diff --git a/src/object/object1E.c b/src/object/object1E.c index 1356bdd0..05d7b271 100644 --- a/src/object/object1E.c +++ b/src/object/object1E.c @@ -25,7 +25,7 @@ void Object1E(Entity* this) { } } -NONMATCH("asm/non_matching/object1E/sub_08087528.inc", void sub_08087528(Entity* this)) { +void sub_08087528(Entity* this) { u32 palette; this->action = 1; @@ -47,13 +47,13 @@ NONMATCH("asm/non_matching/object1E/sub_08087528.inc", void sub_08087528(Entity* } ChangeObjPalette(this, palette); switch (this->animationState) { - case 1: - this->spriteSettings.flipX = 1; + case 3: if (this->type == 0x40) { this->y.HALF.HI += 4; } break; - case 3: + case 1: + this->spriteSettings.flipX = 1; if (this->type == 0x40) { this->y.HALF.HI += 4; } @@ -68,7 +68,6 @@ NONMATCH("asm/non_matching/object1E/sub_08087528.inc", void sub_08087528(Entity* SetDefaultPriority(this, 3); InitializeAnimation(this, this->type2 * 4 + this->animationState); } -END_NONMATCH void sub_080875F4(Entity* this) { GetNextFrame(this); diff --git a/src/player.c b/src/player.c index 86af3340..99ab57f3 100644 --- a/src/player.c +++ b/src/player.c @@ -22,6 +22,7 @@ #include "game.h" #include "screen.h" #include "main.h" +#include "playeritem.h" #define GRAVITY_RATE Q_8_8(32) #define SLOPE_SPEED_MODIFIER 0x50 @@ -1657,7 +1658,7 @@ static void PlayerEmptyBottleInit(Entity* this) { Entity* ent; ResetPlayerItem(); - ent = CreatePlayerItemWithParent((ItemBehavior*)this, 0xe); + ent = CreatePlayerItemWithParent((ItemBehavior*)this, PLAYER_ITEM_BOTTLE); if (ent != NULL) { ent->field_0x68.HALF.LO = gPlayerState.field_0x38; this->subAction++; diff --git a/src/playerUtils.c b/src/playerUtils.c index 59575041..f262b98b 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -1812,20 +1812,20 @@ u32 sub_0807A894(Entity* this) { void nullsub_505(void) { } -NONMATCH("asm/non_matching/playerUtils/sub_0807A8D8.inc", void sub_0807A8D8(Entity* this)) { +void sub_0807A8D8(Entity* this) { u32 tmp; if ((gPlayerState.flags & PL_MINISH) == 0) { - tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 0, 1), gPlayerEntity.collisionLayer) & 0x20; - if (tmp != 0) { + tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 0, 1), gPlayerEntity.collisionLayer); + if ((tmp & 0x20) != 0) { sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, 0, 1)); } - tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, -2, 0), gPlayerEntity.collisionLayer) & 0x20; - if (tmp != 0) { + tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, -2, 0), gPlayerEntity.collisionLayer); + if ((tmp & 0x20) != 0) { sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, -2, 0)); } - tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 2, 0), gPlayerEntity.collisionLayer) & 0x20; - if (tmp != 0) { + tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 2, 0), gPlayerEntity.collisionLayer); + if ((tmp & 0x20) != 0) { sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, 2, 0)); } } @@ -1841,7 +1841,6 @@ NONMATCH("asm/non_matching/playerUtils/sub_0807A8D8.inc", void sub_0807A8D8(Enti } } } -END_NONMATCH void sub_0807AA80(Entity* this) { if (((gPlayerState.flags & PL_HIDDEN) == 0) && (this->collisionLayer = 2, this->z.HALF.HI == 0)) { diff --git a/src/projectile/gyorgTail.c b/src/projectile/gyorgTail.c index ddd0fcb9..586c90bd 100644 --- a/src/projectile/gyorgTail.c +++ b/src/projectile/gyorgTail.c @@ -6,22 +6,22 @@ #include "projectile.h" #include "hitbox.h" -extern u8 gEntCount; - -extern void (*const gUnk_0812A994[])(Entity*); -extern void (*const GyorgTail_Actions[])(Entity*); -extern const s16 gUnk_0812A9B4[]; -extern const u8 gUnk_0812A9B8[]; -extern const u8 gUnk_0812A9BA[]; -extern const u8 gUnk_0812A9C0[]; - bool32 sub_080AC5E4(Entity*); void sub_080AC388(Entity*); void sub_080AC6F0(Entity*); void sub_080AC760(Entity*); void sub_080AC7C4(Entity*); +void sub_080AC328(Entity*); +void sub_080AC510(Entity*); +void sub_080AC560(Entity*); +void sub_080AC884(Entity*); +void sub_080AC480(Entity*); +void GyorgTail_Init(Entity*); void GyorgTail(Entity* this) { + static void (*const gUnk_0812A994[])(Entity*) = { + sub_080AC328, sub_080AC510, sub_080AC510, sub_080AC510, sub_080AC560, + }; Entity* parent; if (this->parent->next == NULL) { @@ -47,10 +47,16 @@ void GyorgTail(Entity* this) { } void sub_080AC328(Entity* this) { + static void (*const GyorgTail_Actions[])(Entity*) = { + GyorgTail_Init, + sub_080AC388, + sub_080AC480, + }; GyorgTail_Actions[this->action](this); } void GyorgTail_Init(Entity* this) { + static const s16 gUnk_0812A9B4[] = { -64, 64 }; if (sub_080AC5E4(this) != 0) { this->action = 1; this->frameIndex = 0xc; @@ -61,7 +67,46 @@ void GyorgTail_Init(Entity* this) { } } -ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC388.inc", void sub_080AC388(Entity* this)) +void sub_080AC388(Entity* this) { + static const u8 gUnk_0812A9B8[] = { 24, 20 }; + Entity* pEVar2; + int iVar3; + u32 uVar5; + + uVar5 = gUnk_0812A9B8[this->type]; + pEVar2 = this->parent; + iVar3 = (pEVar2->animationState ^ 0x80) - (this->field_0x7c.HALF_U.LO >> 8); + if ((short)this->field_0x7a.HWORD < 0) { + if (((iVar3 - uVar5) & 0xff) <= 0x7f) { + s32 tmp = -(short)this->field_0x7a.HWORD; + this->field_0x7a.HWORD = tmp; + this->field_0x7c.HALF_U.LO = (short)((((pEVar2->animationState ^ 0x80) - uVar5) & 0xff) << 8); + sub_080AC884(this); + } else { + this->field_0x7c.HALF_U.LO = this->field_0x7c.HALF_U.LO + this->field_0x7a.HWORD; + if (((iVar3 + uVar5) & 0xff) >= 0x81) { + this->field_0x7c.HALF_U.LO = ((((pEVar2->animationState ^ 0x80) + uVar5) & 0xff) << 8) | 0x80; + } + } + } else { + if (((iVar3 + uVar5) & 0xff) >= 0x81) { + s32 tmp = -(short)this->field_0x7a.HWORD; + this->field_0x7a.HWORD = tmp; + this->field_0x7c.HALF_U.LO = (short)((((pEVar2->animationState ^ 0x80) + uVar5) & 0xff) << 8); + sub_080AC884(this); + } else { + this->field_0x7c.HALF_U.LO = this->field_0x7c.HALF_U.LO + this->field_0x7a.HWORD; + if (0x7e >= ((iVar3 - uVar5) & 0xff) - 1) { + this->field_0x7c.HALF_U.LO = ((((pEVar2->animationState ^ 0x80) - uVar5) & 0xff) << 8) | 0x80; + } + } + } + + this->direction = this->field_0x7c.HALF_U.LO >> 8; + sub_080AC6F0(this); + sub_080AC760(this); + sub_080AC7C4(this); +} void sub_080AC480(Entity* this) { if (this->timer != 0) { @@ -88,6 +133,7 @@ void sub_080AC480(Entity* this) { } void sub_080AC510(Entity* this) { + static const u8 gUnk_0812A9BA[] = { 24, 25, 25, 24, 24, 24 }; if (this->action == 0) { this->action = 1; this->frameIndex = gUnk_0812A9BA[this->type * 3 + this->type2 - 1]; @@ -186,7 +232,57 @@ NONMATCH("asm/non_matching/gyorgTail/sub_080AC5E4.inc", bool32 sub_080AC5E4(Enti } END_NONMATCH -ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this)) +void sub_080AC6F0(Entity* this) { + static const u8 gUnk_0812A9C0[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + + u32 uVar1; + s32 iVar2; + s32 iVar3; + u32 uVar4; + u32 tmp; + + uVar4 = this->direction & 0x1f; + uVar1 = this->direction >> 5; + iVar3 = uVar1 * 3; + tmp = gUnk_0812A9C0[this->animationState] - uVar1 * 3; + if (tmp <= 3) { + switch (tmp) { + default: + if (uVar4 > 0x19) { + return; + } + break; + case 0: + if (uVar4 < 7) { + return; + } + break; + case 1: + if (uVar4 - 5 < 0xd) { + return; + } + break; + case 2: + if (uVar4 - 0xf < 0xd) { + return; + } + break; + } + } + iVar2 = iVar3 + 3; + if (uVar4 < 0x1b) { + iVar2 = iVar3 + 2; + if (uVar4 < 0x11) { + iVar2 = iVar3; + if (5 < uVar4) { + iVar2 = iVar3 + 1; + } + } + } + this->animationState = iVar2 % 0x18; + this->frameIndex = gUnk_0812A9C0[iVar2 % 0x18]; +} void sub_080AC760(Entity* param_1) { s32 tmp; @@ -218,14 +314,17 @@ void sub_080AC760(Entity* param_1) { } } -NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) { - // TODO regalloc +void sub_080AC7C4(Entity* this) { Entity* entity1; Entity* entity2; Entity* entity3; - s32 iVar1; - s32 iVar2; - s32 iVar3; + s32 tmp; + s32 tmp2; + s32 tmp3; + s32 tmp4; + s32 tmp5; + s32 tmp6; + s32 r6; entity1 = this->child; entity2 = entity1->child; @@ -235,14 +334,22 @@ NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity } else { entity3 = this->parent; } - PositionRelative(entity3, entity2, (entity2->field_0x78.HALF.HI << 8) * gSineTable[entity2->direction], - -((entity2->field_0x78.HALF.HI << 8) * gSineTable[entity2->direction + 0x40])); - PositionRelative(entity2, entity1, (entity1->field_0x78.HALF.HI << 8) * gSineTable[entity1->direction], - -((entity1->field_0x78.HALF.HI << 8) * gSineTable[entity1->direction + 0x40])); - PositionRelative(entity1, this, (this->field_0x78.HALF.HI << 8) * gSineTable[this->direction], - -((this->field_0x78.HALF.HI << 8) * gSineTable[this->direction + 0x40])); + tmp = entity2->field_0x78.HALF.HI << 8; + tmp2 = gSineTable[entity2->direction]; + r6 = tmp2 * tmp; + tmp2 = gSineTable[entity2->direction + 0x40] * tmp; + PositionRelative(entity3, entity2, r6, -tmp2); + tmp3 = entity1->field_0x78.HALF.HI << 8; + tmp4 = gSineTable[entity1->direction]; + r6 = tmp4 * tmp3; + tmp4 = gSineTable[entity1->direction + 0x40] * tmp3; + PositionRelative(entity2, entity1, r6, -tmp4); + tmp5 = this->field_0x78.HALF.HI << 8; + tmp6 = gSineTable[this->direction]; + r6 = tmp6 * tmp5; + tmp6 = gSineTable[this->direction + 0x40] * tmp5; + PositionRelative(entity1, this, r6, -tmp6); } -END_NONMATCH void sub_080AC884(Entity* this) { if (this->parent->field_0x70.HALF_U.HI != 0) { @@ -252,16 +359,3 @@ void sub_080AC884(Entity* this) { this->subtimer = 0x56; } } - -void (*const gUnk_0812A994[])(Entity*) = { - sub_080AC328, sub_080AC510, sub_080AC510, sub_080AC510, sub_080AC560, -}; -void (*const GyorgTail_Actions[])(Entity*) = { - GyorgTail_Init, - sub_080AC388, - sub_080AC480, -}; -const s16 gUnk_0812A9B4[] = { -64, 64 }; -const u8 gUnk_0812A9B8[] = { 24, 20 }; -const u8 gUnk_0812A9BA[] = { 24, 25, 25, 24, 24, 24 }; -const u8 gUnk_0812A9C0[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };