diff --git a/asm/code_080043E8.s b/asm/code_080043E8.s index 45fe77b4..ab9b0456 100644 --- a/asm/code_080043E8.s +++ b/asm/code_080043E8.s @@ -280,8 +280,8 @@ GetFacingDirection: @ 0x080045C4 ldrsh r0, [r0, r5] pop {r4, r5} - thumb_func_start sub_080045D4 -sub_080045D4: @ 0x080045D4 + thumb_func_start CalculateDirectionTo +CalculateDirectionTo: @ 0x080045D4 mov ip, r3 ldr r3, _08004694 @ =gUnk_030060F0 bx r3 diff --git a/asm/code_08049D30.s b/asm/code_08049D30.s index c15be316..a68192f5 100644 --- a/asm/code_08049D30.s +++ b/asm/code_08049D30.s @@ -268,7 +268,7 @@ sub_08049EE4: @ 0x08049EE4 ldrsh r0, [r1, r4] movs r5, #0x32 ldrsh r1, [r1, r5] - bl sub_080045D4 + bl CalculateDirectionTo pop {r4, r5, pc} thumb_func_start sub_08049F1C diff --git a/asm/enemy/dust.s b/asm/enemy/dust.s index f4ed6e55..03c757ba 100644 --- a/asm/enemy/dust.s +++ b/asm/enemy/dust.s @@ -630,7 +630,7 @@ _08044570: lsls r4, r4, #0x18 asrs r4, r4, #0x18 adds r3, r3, r4 - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r6, #0x15] adds r0, r6, #0 bl LinearMoveUpdate diff --git a/asm/enemy/enemy4D.s b/asm/enemy/enemy4D.s index a44c1797..dd15a65f 100644 --- a/asm/enemy/enemy4D.s +++ b/asm/enemy/enemy4D.s @@ -166,7 +166,7 @@ _0803ECD8: ldrsh r1, [r4, r2] ldrh r2, [r5] ldrh r3, [r6] - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r4, #0x15] adds r0, r4, #0 movs r1, #0x10 diff --git a/asm/enemy/enemy64.s b/asm/enemy/enemy64.s index 4e9da8ce..5646660e 100644 --- a/asm/enemy/enemy64.s +++ b/asm/enemy/enemy64.s @@ -495,7 +495,7 @@ sub_080493E4: @ 0x080493E4 adds r2, #0xa8 ldrh r3, [r3, #8] adds r3, #0x80 - bl sub_080045D4 + bl CalculateDirectionTo adds r0, #2 movs r1, #0x1c ands r0, r1 diff --git a/asm/enemy/eyegore.s b/asm/enemy/eyegore.s index 0b05ba79..2c2afd09 100644 --- a/asm/enemy/eyegore.s +++ b/asm/enemy/eyegore.s @@ -302,7 +302,7 @@ _08030C1C: ldrsh r2, [r3, r5] movs r5, #0x32 ldrsh r3, [r3, r5] - bl sub_080045D4 + bl CalculateDirectionTo adds r0, #4 movs r1, #0x18 ands r0, r1 @@ -877,7 +877,7 @@ _0803109E: adds r3, r7, #0 adds r3, #0x76 ldrh r3, [r3] - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r7, #0x15] adds r0, #4 movs r2, #0x18 @@ -1032,7 +1032,7 @@ _080311D8: adds r3, #0x76 ldrh r3, [r3] _080311E8: - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r7, #0x15] _080311EE: ldrb r0, [r7, #0x15] diff --git a/asm/enemy/wizzrobeFire.s b/asm/enemy/wizzrobeFire.s deleted file mode 100644 index 7433c82d..00000000 --- a/asm/enemy/wizzrobeFire.s +++ /dev/null @@ -1,351 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start WizzrobeFire -WizzrobeFire: @ 0x0802FB30 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0802FB58 @ =gUnk_080CDFC4 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r5 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, r5, pc} - .align 2, 0 -_0802FB58: .4byte gUnk_080CDFC4 - - thumb_func_start sub_0802FB5C -sub_0802FB5C: @ 0x0802FB5C - push {lr} - ldr r2, _0802FB70 @ =gUnk_080CDFDC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802FB70: .4byte gUnk_080CDFDC - - thumb_func_start sub_0802FB74 -sub_0802FB74: @ 0x0802FB74 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0802FB88 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0802FB88: - ldr r1, _0802FBB4 @ =gUnk_080CDFC4 - adds r0, r4, #0 - bl sub_0804AA30 - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0802FBB0 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x84 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_0802FBB0: - pop {r4, pc} - .align 2, 0 -_0802FBB4: .4byte gUnk_080CDFC4 - - thumb_func_start sub_0802FBB8 -sub_0802FBB8: @ 0x0802FBB8 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0xff - strb r0, [r1] - subs r1, #1 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - movs r0, #0x60 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_0802F888 - adds r0, r4, #0 - movs r1, #8 - movs r2, #0 - bl CreateProjectileWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0802FBF6 - str r1, [r4, #0x54] - str r4, [r1, #0x50] - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x15] -_0802FBF6: - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802FC04 -sub_0802FC04: @ 0x0802FC04 - push {r4, r5, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x82 - ldrb r3, [r2] - cmp r3, #1 - beq _0802FC52 - cmp r3, #1 - bgt _0802FC1C - cmp r3, #0 - beq _0802FC32 - b _0802FC88 -_0802FC1C: - cmp r3, #0xff - bne _0802FC88 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _0802FC88 - strb r0, [r2] - b _0802FC88 -_0802FC32: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802FC88 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0xe - strb r0, [r5, #0xe] - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - b _0802FC88 -_0802FC52: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802FC88 - movs r0, #2 - strb r0, [r5, #0xc] - strb r1, [r2] - movs r0, #0x20 - strb r0, [r5, #0xe] - ldrb r1, [r5, #0x15] - lsrs r1, r1, #3 - ldr r2, [r5, #0x54] - movs r4, #1 - strb r3, [r2, #0xe] - ldrb r3, [r2, #0x18] - subs r0, #0x24 - ands r0, r3 - orrs r0, r4 - strb r0, [r2, #0x18] - movs r0, #4 - orrs r1, r0 - adds r0, r5, #0 - bl InitializeAnimation -_0802FC88: - adds r0, r5, #0 - bl sub_0802F9C8 - pop {r4, r5, pc} - - thumb_func_start sub_0802FC90 -sub_0802FC90: @ 0x0802FC90 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x82 - ldrb r0, [r2] - cmp r0, #1 - beq _0802FD18 - cmp r0, #1 - bgt _0802FCA8 - cmp r0, #0 - beq _0802FCB2 - b _0802FDCA -_0802FCA8: - cmp r0, #2 - beq _0802FD6A - cmp r0, #3 - beq _0802FD94 - b _0802FDCA -_0802FCB2: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0802FCC6 - cmp r1, #6 - beq _0802FCDE - b _0802FDCA -_0802FCC6: - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0x38 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - subs r0, #0x3c - ands r0, r1 - strb r0, [r2, #0x18] - b _0802FDCA -_0802FCDE: - ldr r1, _0802FD14 @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #0xa0 - movs r3, #0xa0 - bl EntityInRectRadius - cmp r0, #0 - beq _0802FDCA - adds r0, r4, #0 - bl CheckOnScreen - cmp r0, #0 - beq _0802FDCA - adds r0, r4, #0 - movs r1, #8 - movs r2, #1 - bl CreateProjectileWithParent - adds r2, r0, #0 - cmp r2, #0 - beq _0802FDCA - ldrb r1, [r4, #0x15] - movs r0, #0x18 - ands r0, r1 - strb r0, [r2, #0x15] - b _0802FDCA - .align 2, 0 -_0802FD14: .4byte gPlayerEntity -_0802FD18: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0 - bne _0802FDCA - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - strb r3, [r4, #0xf] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x84 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - movs r0, #0xab - lsls r0, r0, #1 - bl EnqueueSFX - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation - b _0802FDCA -_0802FD6A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802FDCA - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x1c - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _0802FDCA -_0802FD94: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802FDCA - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - movs r0, #0xab - lsls r0, r0, #1 - bl EnqueueSFX - adds r0, r4, #0 - bl sub_0802F8E4 - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation -_0802FDCA: - adds r0, r4, #0 - bl sub_0802F9C8 - pop {r4, pc} - .align 2, 0 diff --git a/asm/enemy/wizzrobeIce.s b/asm/enemy/wizzrobeIce.s deleted file mode 100644 index 4ac417bd..00000000 --- a/asm/enemy/wizzrobeIce.s +++ /dev/null @@ -1,378 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start WizzrobeIce -WizzrobeIce: @ 0x0802FDD4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0802FDFC @ =gUnk_080CE074 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r5 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, r5, pc} - .align 2, 0 -_0802FDFC: .4byte gUnk_080CE074 - - thumb_func_start sub_0802FE00 -sub_0802FE00: @ 0x0802FE00 - push {lr} - ldr r2, _0802FE14 @ =gUnk_080CE08C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802FE14: .4byte gUnk_080CE08C - - thumb_func_start sub_0802FE18 -sub_0802FE18: @ 0x0802FE18 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0802FE2C - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0802FE2C: - ldr r1, _0802FE8C @ =gUnk_080CE074 - adds r0, r4, #0 - bl sub_0804AA30 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x87 - bne _0802FE6A - movs r0, #0x2a - movs r1, #3 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0802FE6A - adds r3, r2, #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] - adds r1, r2, #0 - adds r1, #0x63 - movs r0, #0xfc - strb r0, [r1] - str r4, [r2, #0x50] -_0802FE6A: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0802FE8A - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x84 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_0802FE8A: - pop {r4, pc} - .align 2, 0 -_0802FE8C: .4byte gUnk_080CE074 - - thumb_func_start sub_0802FE90 -sub_0802FE90: @ 0x0802FE90 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0xff - strb r0, [r1] - subs r1, #1 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - movs r0, #0x60 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_0802F888 - adds r0, r4, #0 - movs r1, #9 - movs r2, #0 - bl CreateProjectileWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0802FECE - str r1, [r4, #0x54] - str r4, [r1, #0x50] - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x15] -_0802FECE: - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802FEDC -sub_0802FEDC: @ 0x0802FEDC - push {r4, r5, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x82 - ldrb r3, [r2] - cmp r3, #1 - beq _0802FF2A - cmp r3, #1 - bgt _0802FEF4 - cmp r3, #0 - beq _0802FF0A - b _0802FF60 -_0802FEF4: - cmp r3, #0xff - bne _0802FF60 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _0802FF60 - strb r0, [r2] - b _0802FF60 -_0802FF0A: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802FF60 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0xc - strb r0, [r5, #0xe] - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - b _0802FF60 -_0802FF2A: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802FF60 - movs r0, #2 - strb r0, [r5, #0xc] - strb r1, [r2] - movs r0, #0x20 - strb r0, [r5, #0xe] - ldrb r1, [r5, #0x15] - lsrs r1, r1, #3 - ldr r2, [r5, #0x54] - movs r4, #1 - strb r3, [r2, #0xe] - ldrb r3, [r2, #0x18] - subs r0, #0x24 - ands r0, r3 - orrs r0, r4 - strb r0, [r2, #0x18] - movs r0, #4 - orrs r1, r0 - adds r0, r5, #0 - bl InitializeAnimation -_0802FF60: - adds r0, r5, #0 - bl sub_0802F9C8 - pop {r4, r5, pc} - - thumb_func_start sub_0802FF68 -sub_0802FF68: @ 0x0802FF68 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x82 - ldrb r0, [r2] - cmp r0, #1 - beq _0802FFF0 - cmp r0, #1 - bgt _0802FF80 - cmp r0, #0 - beq _0802FF8A - b _080300A2 -_0802FF80: - cmp r0, #2 - beq _08030042 - cmp r0, #3 - beq _0803006C - b _080300A2 -_0802FF8A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0802FF9E - cmp r1, #0xa - beq _0802FFB6 - b _080300A2 -_0802FF9E: - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0x38 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - subs r0, #0x3c - ands r0, r1 - strb r0, [r2, #0x18] - b _080300A2 -_0802FFB6: - ldr r1, _0802FFEC @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #0xa0 - movs r3, #0xa0 - bl EntityInRectRadius - cmp r0, #0 - beq _080300A2 - adds r0, r4, #0 - bl CheckOnScreen - cmp r0, #0 - beq _080300A2 - adds r0, r4, #0 - movs r1, #9 - movs r2, #1 - bl CreateProjectileWithParent - adds r2, r0, #0 - cmp r2, #0 - beq _080300A2 - ldrb r1, [r4, #0x15] - movs r0, #0x18 - ands r0, r1 - strb r0, [r2, #0x15] - b _080300A2 - .align 2, 0 -_0802FFEC: .4byte gPlayerEntity -_0802FFF0: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0 - bne _080300A2 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - strb r3, [r4, #0xf] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x84 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - movs r0, #0xab - lsls r0, r0, #1 - bl EnqueueSFX - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation - b _080300A2 -_08030042: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080300A2 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x18 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _080300A2 -_0803006C: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _080300A2 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - movs r0, #0xab - lsls r0, r0, #1 - bl EnqueueSFX - adds r0, r4, #0 - bl sub_0802F8E4 - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation -_080300A2: - adds r0, r4, #0 - bl sub_0802F9C8 - pop {r4, pc} - .align 2, 0 diff --git a/asm/enemy/wizzrobeWind.s b/asm/enemy/wizzrobeWind.s deleted file mode 100644 index 271db275..00000000 --- a/asm/enemy/wizzrobeWind.s +++ /dev/null @@ -1,861 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start WizzrobeWind -WizzrobeWind: @ 0x0802F4A0 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0802F4C8 @ =gUnk_080CDF50 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r5 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, r5, pc} - .align 2, 0 -_0802F4C8: .4byte gUnk_080CDF50 - - thumb_func_start sub_0802F4CC -sub_0802F4CC: @ 0x0802F4CC - push {lr} - ldr r2, _0802F4E0 @ =gUnk_080CDF68 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802F4E0: .4byte gUnk_080CDF68 - - thumb_func_start sub_0802F4E4 -sub_0802F4E4: @ 0x0802F4E4 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0802F4F8 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0802F4F8: - ldr r1, _0802F558 @ =gUnk_080CDF50 - adds r0, r4, #0 - bl sub_0804AA30 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x87 - bne _0802F536 - movs r0, #0x2a - movs r1, #3 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0802F536 - adds r3, r2, #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] - adds r1, r2, #0 - adds r1, #0x63 - movs r0, #0xfc - strb r0, [r1] - str r4, [r2, #0x50] -_0802F536: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0802F556 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x84 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_0802F556: - pop {r4, pc} - .align 2, 0 -_0802F558: .4byte gUnk_080CDF50 - - thumb_func_start sub_0802F55C -sub_0802F55C: @ 0x0802F55C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _0802F594 - movs r0, #3 - strb r0, [r4, #0xc] - movs r2, #0 - movs r0, #0xc0 - strh r0, [r4, #0x24] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x80 - strb r2, [r0] - ldrb r0, [r4, #0xe] - bl GetCurrentRoomProperty - str r0, [r4, #0x54] - adds r0, r4, #0 - bl sub_0802FA48 - adds r0, r4, #0 - bl sub_0802FA88 - b _0802F5B8 -_0802F594: - adds r0, r4, #0 - bl sub_0804A720 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0xff - strb r0, [r1] - subs r1, #1 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - movs r0, #0x60 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_0802F888 -_0802F5B8: - adds r0, r4, #0 - movs r1, #7 - movs r2, #0 - bl CreateProjectileWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0802F5D0 - str r1, [r4, #0x50] - str r4, [r1, #0x50] - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x15] -_0802F5D0: - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_0802F5DC -sub_0802F5DC: @ 0x0802F5DC - push {r4, r5, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x82 - ldrb r3, [r2] - cmp r3, #1 - beq _0802F62A - cmp r3, #1 - bgt _0802F5F4 - cmp r3, #0 - beq _0802F60A - b _0802F660 -_0802F5F4: - cmp r3, #0xff - bne _0802F660 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _0802F660 - strb r0, [r2] - b _0802F660 -_0802F60A: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802F660 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0x10 - strb r0, [r5, #0xe] - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - b _0802F660 -_0802F62A: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802F660 - movs r0, #2 - strb r0, [r5, #0xc] - strb r1, [r2] - movs r0, #0x28 - strb r0, [r5, #0xe] - ldrb r1, [r5, #0x15] - lsrs r1, r1, #3 - ldr r2, [r5, #0x50] - movs r4, #1 - strb r3, [r2, #0xe] - ldrb r3, [r2, #0x18] - subs r0, #0x2c - ands r0, r3 - orrs r0, r4 - strb r0, [r2, #0x18] - movs r0, #4 - orrs r1, r0 - adds r0, r5, #0 - bl InitializeAnimation -_0802F660: - adds r0, r5, #0 - bl sub_0802F9C8 - pop {r4, r5, pc} - - thumb_func_start sub_0802F668 -sub_0802F668: @ 0x0802F668 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x82 - ldrb r0, [r2] - cmp r0, #1 - beq _0802F6F0 - cmp r0, #1 - bgt _0802F680 - cmp r0, #0 - beq _0802F68A - b _0802F7A2 -_0802F680: - cmp r0, #2 - beq _0802F742 - cmp r0, #3 - beq _0802F76C - b _0802F7A2 -_0802F68A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0802F69E - cmp r1, #8 - beq _0802F6B6 - b _0802F7A2 -_0802F69E: - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0x38 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - ldr r2, [r4, #0x50] - ldrb r1, [r2, #0x18] - subs r0, #0x3c - ands r0, r1 - strb r0, [r2, #0x18] - b _0802F7A2 -_0802F6B6: - ldr r1, _0802F6EC @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #0xa0 - movs r3, #0xa0 - bl EntityInRectRadius - cmp r0, #0 - beq _0802F7A2 - adds r0, r4, #0 - bl CheckOnScreen - cmp r0, #0 - beq _0802F7A2 - adds r0, r4, #0 - movs r1, #7 - movs r2, #1 - bl CreateProjectileWithParent - adds r2, r0, #0 - cmp r2, #0 - beq _0802F7A2 - ldrb r1, [r4, #0x15] - movs r0, #0x18 - ands r0, r1 - strb r0, [r2, #0x15] - b _0802F7A2 - .align 2, 0 -_0802F6EC: .4byte gPlayerEntity -_0802F6F0: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0 - bne _0802F7A2 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - strb r3, [r4, #0xf] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #0xab - lsls r0, r0, #1 - bl EnqueueSFX - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x84 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation - b _0802F7A2 -_0802F742: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802F7A2 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x20 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _0802F7A2 -_0802F76C: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802F7A2 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0x28 - strb r0, [r1] - strb r0, [r4, #0xe] - movs r0, #0xab - lsls r0, r0, #1 - bl EnqueueSFX - adds r0, r4, #0 - bl sub_0802F8E4 - ldrb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation -_0802F7A2: - adds r0, r4, #0 - bl sub_0802F9C8 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802F7AC -sub_0802F7AC: @ 0x0802F7AC - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0802FA88 - adds r0, r4, #0 - bl sub_0802F9C8 - ldr r5, [r4, #0x50] - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - bne _0802F86E - adds r2, r4, #0 - adds r2, #0x82 - ldrb r1, [r2] - cmp r1, #1 - beq _0802F7EA - cmp r1, #1 - bgt _0802F7DA - cmp r1, #0 - beq _0802F7E0 - b _0802F884 -_0802F7DA: - cmp r1, #2 - beq _0802F818 - b _0802F884 -_0802F7E0: - movs r0, #1 - strb r0, [r2] - movs r0, #0x40 - strb r0, [r4, #0xe] - b _0802F884 -_0802F7EA: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802F884 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0x28 - strb r0, [r4, #0xe] - movs r2, #1 - strb r1, [r5, #0xe] - ldrb r1, [r5, #0x18] - subs r0, #0x2c - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldrb r1, [r4, #0x14] - lsrs r1, r1, #1 - movs r0, #4 - orrs r1, r0 - b _0802F844 -_0802F818: - ldrb r0, [r4, #0xe] - subs r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0802F84C - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x30 - strb r0, [r4, #0xe] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r5, #0x18] - ldrb r1, [r4, #0x14] - lsrs r1, r1, #1 -_0802F844: - adds r0, r4, #0 - bl InitializeAnimation - b _0802F884 -_0802F84C: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #8 - bne _0802F884 - adds r0, r4, #0 - movs r1, #7 - movs r2, #1 - bl CreateProjectileWithParent - adds r5, r0, #0 - cmp r5, #0 - beq _0802F884 - ldrb r1, [r4, #0x15] - movs r0, #0x18 - ands r0, r1 - strb r0, [r5, #0x15] - b _0802F884 -_0802F86E: - adds r1, r4, #0 - adds r1, #0x82 - ldrb r0, [r1] - cmp r0, #0 - beq _0802F884 - movs r0, #0 - strb r0, [r1] - ldrb r1, [r5, #0x18] - subs r0, #4 - ands r0, r1 - strb r0, [r5, #0x18] -_0802F884: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0802F888 -sub_0802F888: @ 0x0802F888 - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r1, #3 - bl sub_08049F84 - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, _0802F8DC @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r5, #0x32 - ldrsh r0, [r4, r5] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r5, r4, #0 - adds r5, #0x84 - strh r1, [r5] - ldrh r0, [r5] - adds r6, r4, #0 - adds r6, #0x38 - ldrb r1, [r6] - bl GetTileIndex - adds r4, #0x86 - strh r0, [r4] - ldr r0, _0802F8E0 @ =0x00004071 - ldrh r1, [r5] - ldrb r2, [r6] - bl SetTile - pop {r4, r5, r6, pc} - .align 2, 0 -_0802F8DC: .4byte gRoomControls -_0802F8E0: .4byte 0x00004071 - - thumb_func_start sub_0802F8E4 -sub_0802F8E4: @ 0x0802F8E4 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x14 - adds r7, r0, #0 - ldrb r0, [r7, #0xb] - cmp r0, #0 - bne _0802F9AE - movs r0, #1 - str r0, [sp] - adds r1, r7, #0 - adds r1, #0x70 - str r1, [sp, #0xc] - adds r2, r7, #0 - adds r2, #0x6e - str r2, [sp, #4] - adds r0, r7, #0 - adds r0, #0x72 - str r0, [sp, #0x10] - subs r1, #1 - str r1, [sp, #8] - movs r2, #0x38 - adds r2, r2, r7 - mov r8, r2 - movs r0, #8 - mov sl, r0 - ldr r1, _0802F9BC @ =gRoomControls - mov sb, r1 -_0802F920: - bl Random - adds r4, r0, #0 - ldr r2, [sp, #0xc] - ldrh r5, [r2] - ldr r1, _0802F9C0 @ =0x00007FF0 - ands r0, r1 - ldr r2, [sp, #4] - ldrb r1, [r2] - lsls r1, r1, #3 - bl __modsi3 - adds r6, r5, r0 - mov r0, sl - orrs r6, r0 - lsrs r4, r4, #0x10 - ldr r1, [sp, #0x10] - ldrh r5, [r1] - ldr r2, _0802F9C0 @ =0x00007FF0 - ands r4, r2 - ldr r0, [sp, #8] - ldrb r1, [r0] - lsls r1, r1, #3 - adds r0, r4, #0 - bl __modsi3 - adds r5, r5, r0 - mov r1, sl - orrs r5, r1 - mov r2, sb - ldrh r0, [r2, #6] - subs r0, r6, r0 - lsrs r4, r0, #4 - movs r1, #0x3f - ands r4, r1 - ldrh r0, [r2, #8] - subs r0, r5, r0 - lsrs r0, r0, #4 - ands r0, r1 - lsls r0, r0, #6 - orrs r4, r0 - mov r0, r8 - ldrb r1, [r0] - adds r0, r4, #0 - bl sub_080002E0 - cmp r0, #0 - bne _0802F9A2 - mov r2, r8 - ldrb r1, [r2] - adds r0, r4, #0 - bl GetTileIndex - ldr r1, _0802F9C4 @ =0x00004071 - cmp r0, r1 - beq _0802F9A2 - strh r6, [r7, #0x2e] - strh r5, [r7, #0x32] - adds r0, r7, #0 - bl sub_08049FA0 - cmp r0, #0 - beq _0802F9A2 - movs r0, #0 - str r0, [sp] -_0802F9A2: - ldr r1, [sp] - cmp r1, #0 - bne _0802F920 - adds r0, r7, #0 - bl sub_0802F888 -_0802F9AE: - add sp, #0x14 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0802F9BC: .4byte gRoomControls -_0802F9C0: .4byte 0x00007FF0 -_0802F9C4: .4byte 0x00004071 - - thumb_func_start sub_0802F9C8 -sub_0802F9C8: @ 0x0802F9C8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _0802FA44 - adds r5, r4, #0 - adds r5, #0x81 - ldrb r0, [r5] - adds r6, r5, #0 - cmp r0, #0 - beq _0802FA20 - subs r0, #1 - strb r0, [r5] - movs r1, #0xff - ands r0, r1 - movs r2, #1 - ands r0, r2 - cmp r0, #0 - beq _0802F9F8 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - b _0802FA02 -_0802F9F8: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 -_0802FA02: - strb r0, [r4, #0x18] - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _0802FA3E - adds r0, r4, #0 - bl LinearMoveUpdate - ldrb r0, [r6] - cmp r0, #0 - bne _0802FA3E - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - b _0802FA3E -_0802FA20: - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _0802FA3E - adds r0, r4, #0 - bl ProcessMovement - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _0802FA3E - ldrb r0, [r4, #0x10] - movs r1, #0x7f - ands r1, r0 - strb r1, [r4, #0x10] - movs r0, #0x28 - strb r0, [r5] -_0802FA3E: - adds r0, r4, #0 - bl GetNextFrame -_0802FA44: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0802FA48 -sub_0802FA48: @ 0x0802FA48 - push {r4, lr} - mov ip, r0 - ldr r4, [r0, #0x54] - mov r2, ip - adds r2, #0x80 - ldrb r0, [r2] - lsls r0, r0, #2 - adds r3, r4, r0 - ldrh r1, [r3] - ldr r0, _0802FA80 @ =0x0000FFFF - cmp r1, r0 - bne _0802FA66 - movs r0, #0 - strb r0, [r2] - adds r3, r4, #0 -_0802FA66: - ldr r2, _0802FA84 @ =gRoomControls - ldrh r0, [r3] - ldrh r1, [r2, #6] - adds r0, r0, r1 - mov r1, ip - adds r1, #0x78 - strh r0, [r1] - ldrh r0, [r3, #2] - ldrh r2, [r2, #8] - adds r0, r0, r2 - adds r1, #2 - strh r0, [r1] - pop {r4, pc} - .align 2, 0 -_0802FA80: .4byte 0x0000FFFF -_0802FA84: .4byte gRoomControls - - thumb_func_start sub_0802FA88 -sub_0802FA88: @ 0x0802FA88 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - movs r7, #0 - adds r5, r4, #0 - adds r5, #0x78 - ldrh r1, [r5] - adds r6, r4, #0 - adds r6, #0x7a - ldrh r2, [r6] - movs r3, #2 - bl EntityWithinDistance - cmp r0, #0 - beq _0802FAF6 - adds r1, r4, #0 - adds r1, #0x80 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0802FA48 - movs r1, #0x2e - ldrsh r0, [r4, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r5] - ldrh r3, [r6] - bl sub_080045D4 - adds r2, r0, #0 - strb r2, [r4, #0x15] - adds r0, r2, #4 - movs r1, #0x18 - ands r0, r1 - lsrs r0, r0, #2 - strb r0, [r4, #0x14] - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - beq _0802FAEA - lsrs r1, r2, #3 - movs r0, #4 - orrs r1, r0 - adds r0, r4, #0 - bl InitializeAnimation - b _0802FAF2 -_0802FAEA: - lsrs r1, r2, #3 - adds r0, r4, #0 - bl InitializeAnimation -_0802FAF2: - movs r7, #1 - b _0802FB2A -_0802FAF6: - movs r1, #0x2e - ldrsh r0, [r4, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r5] - ldrh r3, [r6] - bl sub_080045D4 - adds r2, r0, #0 - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_08004596 - ldrb r0, [r4, #0x15] - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - asrs r2, r0, #2 - ldrb r0, [r4, #0x14] - cmp r2, r0 - beq _0802FB2A - strb r2, [r4, #0x14] - lsrs r1, r2, #1 - adds r0, r4, #0 - bl InitializeAnimation -_0802FB2A: - adds r0, r7, #0 - pop {r4, r5, r6, r7, pc} - .align 2, 0 diff --git a/asm/non_matching/lilypadLarge/sub_080855E8.inc b/asm/non_matching/lilypadLarge/sub_080855E8.inc index cfa19da8..99680726 100644 --- a/asm/non_matching/lilypadLarge/sub_080855E8.inc +++ b/asm/non_matching/lilypadLarge/sub_080855E8.inc @@ -176,7 +176,7 @@ _080856FC: movs r2, #0x32 ldrsh r1, [r7, r2] adds r2, r5, #0 - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r7, #0x15] ldr r0, _0808575C @ =gPlayerState ldrb r0, [r0, #0x1d] @@ -297,7 +297,7 @@ _0808581A: ldr r2, [r7, #0x70] adds r3, r1, r2 adds r2, r5, #0 - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r7, #0x15] ldr r0, [r7, #0x6c] lsls r0, r0, #8 diff --git a/asm/object/crenalBeanSprout.s b/asm/object/crenalBeanSprout.s index 8d5406c2..71643fa9 100644 --- a/asm/object/crenalBeanSprout.s +++ b/asm/object/crenalBeanSprout.s @@ -640,7 +640,7 @@ _08096802: ldrh r3, [r0] adds r0, r2, #0 adds r2, r5, #0 - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r4, #0x15] adds r0, r4, #0 bl LinearMoveUpdate diff --git a/asm/object/fairy.s b/asm/object/fairy.s index bde31a70..c5ddf035 100644 --- a/asm/object/fairy.s +++ b/asm/object/fairy.s @@ -312,7 +312,7 @@ _0808D8D4: adds r3, r4, #0 adds r3, #0x76 ldrh r3, [r3] - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r4, #0x15] _0808D8EE: ldrb r1, [r4, #0x15] diff --git a/asm/object/object21.s b/asm/object/object21.s index 04c5a1ea..195b7f0c 100644 --- a/asm/object/object21.s +++ b/asm/object/object21.s @@ -217,7 +217,7 @@ _08087B1E: ldr r1, [r1] ldr r2, [r4, #0x2c] ldr r3, [r4, #0x30] - bl sub_080045D4 + bl CalculateDirectionTo b _08087B44 _08087B3C: ldr r0, [r4, #0x4c] diff --git a/asm/object/objectA8.s b/asm/object/objectA8.s index d719aaf3..2ccbef65 100644 --- a/asm/object/objectA8.s +++ b/asm/object/objectA8.s @@ -254,7 +254,7 @@ _0809FC70: adds r3, r4, #0 adds r3, #0x76 ldrh r3, [r3] - bl sub_080045D4 + bl CalculateDirectionTo strb r0, [r4, #0x15] _0809FC8A: ldrb r1, [r4, #0x15] diff --git a/data/const/enemy/wizzrobeFire.s b/data/const/enemy/wizzrobeFire.s deleted file mode 100644 index a615fccd..00000000 --- a/data/const/enemy/wizzrobeFire.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CDFC4:: @ 080CDFC4 - .4byte sub_0802FB5C - .4byte sub_0802FB74 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte sub_0802FB5C - -gUnk_080CDFDC:: @ 080CDFDC - .4byte sub_0802FBB8 - .4byte sub_0802FC04 - .4byte sub_0802FC90 diff --git a/data/const/enemy/wizzrobeIce.s b/data/const/enemy/wizzrobeIce.s deleted file mode 100644 index fa933b9e..00000000 --- a/data/const/enemy/wizzrobeIce.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CE074:: @ 080CE074 - .4byte sub_0802FE00 - .4byte sub_0802FE18 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte sub_0802FE00 - -gUnk_080CE08C:: @ 080CE08C - .4byte sub_0802FE90 - .4byte sub_0802FEDC - .4byte sub_0802FF68 - diff --git a/data/const/enemy/wizzrobeWind.s b/data/const/enemy/wizzrobeWind.s deleted file mode 100644 index 5de31968..00000000 --- a/data/const/enemy/wizzrobeWind.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CDF50:: @ 080CDF50 @ - .4byte sub_0802F4CC - .4byte sub_0802F4E4 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte sub_0802F4CC - -gUnk_080CDF68:: @ 080CDF68 - .4byte sub_0802F55C - .4byte sub_0802F5DC - .4byte sub_0802F668 - .4byte sub_0802F7AC diff --git a/include/asm.h b/include/asm.h index b889ab88..ef1511d2 100644 --- a/include/asm.h +++ b/include/asm.h @@ -27,7 +27,7 @@ extern void sub_08004484(struct Entity_*, struct Entity_*); extern void ResetCollisionLayer(struct Entity_*); extern void sub_08004596(struct Entity_*, u32); extern u32 sub_080045B4(struct Entity_*, u32, u32); -extern u32 sub_080045D4(u32, u32, u32, u32); +extern u32 CalculateDirectionTo(u32, u32, u32, u32); extern u32 sub_080045DA(s32, s32); extern u32 sub_080086B4(u32, u32, u8*); extern u32 ResolveCollisionLayer(struct Entity_*); diff --git a/include/enemy.h b/include/enemy.h index 2e04b2af..4bbecfec 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -172,9 +172,9 @@ void WallMaster2(Entity*); void Gleerok(Entity*); void VaatiEyesMacro(Entity*); void Tektite(Entity*); -void WizzrobeWind(Entity*); -void WizzrobeFire(Entity*); -void WizzrobeIce(Entity*); +void WizzrobeWind(); +void WizzrobeFire(); +void WizzrobeIce(); void Armos(Entity*); void Eyegore(Entity*); void Rope(Entity*); diff --git a/include/enemy/wizzrobe.h b/include/enemy/wizzrobe.h new file mode 100644 index 00000000..0c8e0f0a --- /dev/null +++ b/include/enemy/wizzrobe.h @@ -0,0 +1,27 @@ +#ifndef ENEMY_WIZZROBE_H +#define ENEMY_WIZZROBE_H +#include "enemy.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[6]; + /*0x6e*/ u8 unk_6e; + /*0x6f*/ u8 unk_6f; + /*0x70*/ u16 unk_70; + /*0x72*/ u16 unk_72; + /*0x74*/ u8 unk_74[4]; + /*0x78*/ u16 targetX; + /*0x7a*/ u16 targetY; + /*0x7c*/ u8 unk_7c[4]; + /*0x80*/ u8 targetIndex; + /*0x81*/ u8 timer1; + /*0x82*/ u8 timer2; + /*0x83*/ u8 unk_83; + /*0x84*/ u16 tilePosition; + /*0x86*/ u16 tileIndex; +} WizzrobeEntity; + +extern void sub_0802F888(WizzrobeEntity*); +extern void sub_0802F8E4(WizzrobeEntity*); +extern void sub_0802F9C8(WizzrobeEntity*); +#endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index 8f8d92d7..c9feb9e0 100644 --- a/linker.ld +++ b/linker.ld @@ -360,9 +360,9 @@ SECTIONS { asm/enemy/gleerok.o(.text); src/enemy/vaatiEyesMacro.o(.text); src/enemy/tektite.o(.text); - asm/enemy/wizzrobeWind.o(.text); - asm/enemy/wizzrobeFire.o(.text); - asm/enemy/wizzrobeIce.o(.text); + src/enemy/wizzrobeWind.o(.text); + src/enemy/wizzrobeFire.o(.text); + src/enemy/wizzrobeIce.o(.text); src/enemy/code_080300AC.o(.text); asm/enemy/code_080300AC.o(.text); asm/enemy/armos.o(.text); @@ -1011,11 +1011,11 @@ SECTIONS { data/animations/enemy/vaatiEyesMacro.o(.rodata); data/const/enemy/tektite.o(.rodata); data/animations/enemy/tektite.o(.rodata); - data/const/enemy/wizzrobeWind.o(.rodata); + src/enemy/wizzrobeWind.o(.rodata); data/animations/enemy/wizzrobeWind.o(.rodata); - data/const/enemy/wizzrobeFire.o(.rodata); + src/enemy/wizzrobeFire.o(.rodata); data/animations/enemy/wizzrobeFire.o(.rodata); - data/const/enemy/wizzrobeIce.o(.rodata); + src/enemy/wizzrobeIce.o(.rodata); data/animations/enemy/wizzrobeIce.o(.rodata); data/const/enemy/armos.o(.rodata); data/animations/enemy/armos.o(.rodata); diff --git a/src/coord.c b/src/coord.c index cc4bdaa1..9bd4055f 100644 --- a/src/coord.c +++ b/src/coord.c @@ -163,7 +163,7 @@ u32 sub_0806F548(Entity* a, Entity* b, u32 x, u32 y) { } u32 sub_0806F564(Entity* ent, u32 b, u32 c) { - u32 tmp = sub_080045D4(ent->x.HALF.HI, ent->y.HALF.HI, b, c); + u32 tmp = CalculateDirectionTo(ent->x.HALF.HI, ent->y.HALF.HI, b, c); return ent->animationState == sub_0806F5A4(tmp); } @@ -247,7 +247,7 @@ u32 sub_0806F804(u32 x, u32 y) { } u32 sub_0806F824(Entity* a, Entity* b, s32 x, s32 y) { - return sub_080045D4(a->x.HALF.HI, a->y.HALF.HI, b->x.HALF.HI + x, b->y.HALF.HI + y); + return CalculateDirectionTo(a->x.HALF.HI, a->y.HALF.HI, b->x.HALF.HI + x, b->y.HALF.HI + y); } u32 sub_0806F854(Entity* ent, s32 x, s32 y) { diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c index 225365ff..57d2087f 100644 --- a/src/enemy/darkNut.c +++ b/src/enemy/darkNut.c @@ -518,7 +518,7 @@ void sub_08021424(Entity* this) { if (!(6 < (x - this->x.HALF.HI) + 3U) && !(4 < (y - this->y.HALF.HI) + 2U)) { sub_080212B0(this); } else { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y); if (!ProcessMovement(this)) { sub_080212B0(this); } else { diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c index f1eec3f0..c2fe9fd2 100644 --- a/src/enemy/gibdo.c +++ b/src/enemy/gibdo.c @@ -306,7 +306,7 @@ void sub_0803797C(GibdoEntity* this) { super->actionDelay = 0x18; super->field_0xf = 8; m = super->direction = - (sub_080045D4(super->x.HALF.HI, super->y.HALF.HI, this->field_0x78, this->field_0x7a) + 4) & 0x18; + (CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, this->field_0x78, this->field_0x7a) + 4) & 0x18; ; m = m / 8; if (m != super->animationState) { diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index 2978a8a0..b9d72989 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -269,7 +269,7 @@ void sub_0803CA84(Entity* this, u32 unkParameter) { void sub_0803CAD0(Entity* this) { if (EntityWithinDistance(this, this->field_0x74.HWORD, this->field_0x76.HWORD, 1) == 0) { this->direction = - sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74.HWORD, this->field_0x76.HWORD); + CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74.HWORD, this->field_0x76.HWORD); sub_080AEFE0(this); } diff --git a/src/enemy/mazaalBracelet.c b/src/enemy/mazaalBracelet.c index eea86ae3..dd687ac0 100644 --- a/src/enemy/mazaalBracelet.c +++ b/src/enemy/mazaalBracelet.c @@ -1109,7 +1109,7 @@ u32 sub_0803B4E4(Entity* this) { this->y.HALF.HI = yoff; return 1; } else { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, xoff, yoff); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, xoff, yoff); return 0; } } @@ -1177,9 +1177,9 @@ void sub_0803B63C(Entity* this) { x += gUnk_080CFD19[this->type]; y = gPlayerEntity.y.HALF.HI - 0xc; if (this->actionDelay++ >= 0xb5) { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y); } else { - sub_08004596(this, sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y)); + sub_08004596(this, CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y)); } } diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c index 7ae967fa..a2432d0d 100644 --- a/src/enemy/mazaalHead.c +++ b/src/enemy/mazaalHead.c @@ -247,7 +247,7 @@ void sub_0803414C(Entity* this) { } } } else { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y); LinearMoveUpdate(this); } } diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c index f444b65a..3353422f 100644 --- a/src/enemy/puffstool.c +++ b/src/enemy/puffstool.c @@ -178,8 +178,8 @@ void sub_08025230(Entity* this) { void sub_080252E0(Entity* this) { u32 tile; - this->direction = - sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, (u16)this->field_0x7c.HALF.LO, (u16)this->field_0x7c.HALF.HI); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, (u16)this->field_0x7c.HALF.LO, + (u16)this->field_0x7c.HALF.HI); sub_08025C44(this); GetNextFrame(this); diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c index 4840a01e..4d43d69c 100644 --- a/src/enemy/vaatiArm.c +++ b/src/enemy/vaatiArm.c @@ -642,8 +642,8 @@ void sub_08042E30(Entity* this) { this->actionDelay = (Random() & 0x38) + 0x28; this->speed = 0x200; this->direction = pVVar9->unk00.HALF.HI >> 3; - uVar6 = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gRoomControls.origin_x + 0x110, - gRoomControls.origin_y + 0x60); + uVar6 = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gRoomControls.origin_x + 0x110, + gRoomControls.origin_y + 0x60); this->field_0x78.HALF.HI = (gUnk_080D1304[Random() & 7] + uVar6) & 0x1f; } pVVar9->unk00.HWORD += pVVar9->unk08; @@ -687,7 +687,7 @@ void sub_08042EF4(Entity* this) { x = this->parent->x.HALF.HI; y = this->parent->y.HALF.HI - 0x10; if (EntityWithinDistance(this, x, y, 0x30)) { - temp = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + temp = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y); if ((this->field_0x78.HALF.HI - temp) + 4 < 9) { this->field_0x78.HALF.HI = temp ^ 0x10; } diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c index 48664ea9..e3fb790c 100644 --- a/src/enemy/vaatiTransfigured.c +++ b/src/enemy/vaatiTransfigured.c @@ -878,7 +878,7 @@ void sub_080406A0(Entity* this) { uVar4 = gRoomControls.origin_y + gUnk_080D0B58[tmp + 1]; } } - uVar3 = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, uVar6, uVar4); + uVar3 = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, uVar6, uVar4); this->direction = uVar3; if (uVar2 & 0x20) { u32 tmp = this->direction; @@ -965,7 +965,7 @@ void sub_08040770(Entity* this) { tmp6 = gRoomControls.origin_y + gUnk_080D0B64[tmp3 + 1]; } } - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, tmp5, tmp6); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, tmp5, tmp6); if (tmp & 0x20) { u32 tmp3 = this->direction; if (tmp & 0x10) { diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c index c4ac8b92..5ad9dd16 100644 --- a/src/enemy/vaatiWrath.c +++ b/src/enemy/vaatiWrath.c @@ -829,11 +829,11 @@ u32 sub_0804207C(Entity* this) { y = this->y.HALF.HI - 0x10; arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[0]; if ((arm != NULL) && (arm->action >= 5) && EntityWithinDistance(arm, x, y, 0x30)) { - return sub_080045D4(arm->x.HALF.HI, arm->y.HALF.HI, x, y); + return CalculateDirectionTo(arm->x.HALF.HI, arm->y.HALF.HI, x, y); } else { arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[1]; if (((arm != NULL) && (arm->action >= 5)) && EntityWithinDistance(arm, x, y, 0x30)) { - return sub_080045D4(arm->x.HALF.HI, arm->y.HALF.HI, x, y); + return CalculateDirectionTo(arm->x.HALF.HI, arm->y.HALF.HI, x, y); } else { if (gPlayerEntity.y.HALF.HI < 0x40) { tmp = gRoomControls.origin_y + 0x18; @@ -841,7 +841,7 @@ u32 sub_0804207C(Entity* this) { } else { tmp = gPlayerEntity.y.HALF.HI - 0x28; } - return sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, tmp); + return CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, tmp); } } } diff --git a/src/enemy/vaatiWrathEye.c b/src/enemy/vaatiWrathEye.c index b9946331..690d8ee6 100644 --- a/src/enemy/vaatiWrathEye.c +++ b/src/enemy/vaatiWrathEye.c @@ -86,7 +86,7 @@ void VaatiWrathEyeAction3(Entity* this) { ptr = &gUnk_080D1D98[this->type * 2]; x = parent->x.HALF.HI + ptr[0]; y = parent->y.HALF.HI + ptr[1]; - direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y); this->direction = direction; LinearMoveUpdate(this); this->z.HALF.HI = this->parent->z.HALF.HI; diff --git a/src/enemy/wizzrobeFire.c b/src/enemy/wizzrobeFire.c new file mode 100644 index 00000000..0da0ca09 --- /dev/null +++ b/src/enemy/wizzrobeFire.c @@ -0,0 +1,157 @@ +/** + * @file wizzrobeFire.c + * @ingroup Enemies + * + * @brief Wizzrobe Fire enemy + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "enemy.h" +#include "enemy/wizzrobe.h" +#include "functions.h" + +extern void (*const WizzrobeFire_Functions[])(WizzrobeEntity*); +extern void (*const WizzrobeFire_Actions[])(WizzrobeEntity*); + +void WizzrobeFire(WizzrobeEntity* this) { + WizzrobeFire_Functions[GetNextFunction(super)](this); + SetChildOffset(super, 0, 1, -0x10); +} + +void WizzrobeFire_OnTick(WizzrobeEntity* this) { + WizzrobeFire_Actions[super->action](this); +} + +void sub_0802FB74(WizzrobeEntity* this) { + if (super->field_0x43 != 0) { + sub_0804A9FC(super, 0x1c); + } + sub_0804AA30(super, WizzrobeFire_Functions); + if (super->health == 0) { + SetTile(this->tileIndex, this->tilePosition, super->collisionLayer); + } +} + +void WizzrobeFire_Init(WizzrobeEntity* this) { + Entity* projectile; + + sub_0804A720(super); + super->action = 1; + this->timer2 = 0xff; + this->timer1 = 0x28; + super->actionDelay = 0x28; + super->field_0xf = 0x60; + sub_0802F888(this); + projectile = CreateProjectileWithParent(super, FIRE_PROJECTILE, 0); + if (projectile != NULL) { + super->child = projectile; + projectile->parent = super; + projectile->direction = super->direction; + } + InitializeAnimation(super, super->direction >> 3); +} + +void WizzrobeFire_Action1(WizzrobeEntity* this) { + u8 tmp; + Entity* child; + + switch (this->timer2) { + case 0xff: + if (--super->field_0xf == 0) { + this->timer2 = 0; + } + break; + case 0: + if (--super->actionDelay == 0) { + this->timer2 += 1; + super->actionDelay = 0x0e; + super->flags |= 0x80; + } + break; + case 1: + if (--super->actionDelay == 0) { + super->action = 2; + this->timer2 = 0; + super->actionDelay = 0x20; + tmp = super->direction >> 3; + child = super->child; + child->actionDelay = 1; + child->spriteSettings.draw = 1; + InitializeAnimation(super, tmp | 4); + } + + break; + } + + sub_0802F9C8(this); +} + +void WizzrobeFire_Action2(WizzrobeEntity* this) { + switch (this->timer2) { + case 0: + switch (--super->actionDelay) { + case 0: + this->timer2 += 1; + super->actionDelay = 0x38; + super->field_0xf = 0; + super->child->spriteSettings.draw = 0; + break; + case 6: + if (EntityInRectRadius(super, &gPlayerEntity, 0xa0, 0xa0) && CheckOnScreen(super)) { + Entity* projectile = CreateProjectileWithParent(super, FIRE_PROJECTILE, 1); + if (projectile != NULL) { + projectile->direction = super->direction & 0x18; + } + } + break; + } + break; + case 1: + if (--super->actionDelay == 0) { + this->timer2++; + this->timer1 = 0x28; + super->actionDelay = 0x28; + super->field_0xf = 0; + super->flags &= 0x7f; + SetTile(this->tileIndex, this->tilePosition, super->collisionLayer); + EnqueueSFX(SFX_156); + InitializeAnimation(super, super->direction >> 3); + } + break; + + case 2: + if (--super->actionDelay == 0) { + this->timer2++; + super->actionDelay = (Random() & 0x3f) + 0x1c; + super->spriteSettings.draw = 0; + } + break; + case 3: + if (--super->actionDelay == 0) { + super->action = 1; + this->timer2 = 0; + this->timer1 = 0x28; + super->actionDelay = 0x28; + EnqueueSFX(SFX_156); + sub_0802F8E4(this); + InitializeAnimation(super, super->direction >> 3); + } + break; + } + sub_0802F9C8(this); +} + +void (*const WizzrobeFire_Functions[])(WizzrobeEntity*) = { + WizzrobeFire_OnTick, + sub_0802FB74, + (void (*)(WizzrobeEntity*))sub_08001324, + (void (*)(WizzrobeEntity*))sub_0804A7D4, + (void (*)(WizzrobeEntity*))sub_08001242, + WizzrobeFire_OnTick, +}; +void (*const WizzrobeFire_Actions[])(WizzrobeEntity*) = { + WizzrobeFire_Init, + WizzrobeFire_Action1, + WizzrobeFire_Action2, +}; diff --git a/src/enemy/wizzrobeIce.c b/src/enemy/wizzrobeIce.c new file mode 100644 index 00000000..9dbb5377 --- /dev/null +++ b/src/enemy/wizzrobeIce.c @@ -0,0 +1,163 @@ +/** + * @file wizzrobeIce.c + * @ingroup Enemies + * + * @brief Wizzrobe Ice enemy + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "enemy.h" +#include "enemy/wizzrobe.h" +#include "functions.h" +#include "object.h" + +extern void (*const WizzrobeIce_Functions[])(WizzrobeEntity*); +extern void (*const WizzrobeIce_Actions[])(WizzrobeEntity*); + +void WizzrobeIce(WizzrobeEntity* this) { + WizzrobeIce_Functions[GetNextFunction(super)](this); + SetChildOffset(super, 0, 1, -0x10); +} + +void WizzrobeIce_OnTick(WizzrobeEntity* this) { + WizzrobeIce_Actions[super->action](this); +} + +void sub_0802FE18(WizzrobeEntity* this) { + if (super->field_0x43 != 0) { + sub_0804A9FC(super, 0x1c); + } + sub_0804AA30(super, WizzrobeIce_Functions); + if (super->bitfield == 0x87) { + Entity* obj = CreateObject(OBJECT_2A, 3, 0); + if (obj != NULL) { + obj->spritePriority.b0 = 3; + obj->spriteOffsetY = -4; + obj->parent = super; + } + } + if (super->health == 0) { + SetTile(this->tileIndex, this->tilePosition, super->collisionLayer); + } +} + +void WizzrobeIce_Init(WizzrobeEntity* this) { + Entity* projectile; + + sub_0804A720(super); + super->action = 1; + this->timer2 = 0xff; + this->timer1 = 0x28; + super->actionDelay = 0x28; + super->field_0xf = 0x60; + sub_0802F888(this); + projectile = CreateProjectileWithParent(super, ICE_PROJECTILE, 0); + if (projectile != NULL) { + super->child = projectile; + projectile->parent = super; + projectile->direction = super->direction; + } + InitializeAnimation(super, super->direction >> 3); +} + +void WizzrobeIce_Action1(WizzrobeEntity* this) { + u8 tmp; + Entity* child; + switch (this->timer2) { + case 0xff: + if (--super->field_0xf == 0) { + this->timer2 = 0; + } + break; + case 0: + if (--super->actionDelay == 0) { + this->timer2++; + super->actionDelay = 0xc; + super->flags |= 0x80; + } + + break; + case 1: + if (--super->actionDelay == 0) { + super->action = 2; + this->timer2 = 0; + super->actionDelay = 0x20; + tmp = super->direction >> 3; + child = super->child; + child->actionDelay = 1; + child->spriteSettings.draw = 1; + InitializeAnimation(super, tmp | 4); + } + break; + } + sub_0802F9C8(this); +} + +void WizzrobeIce_Action2(WizzrobeEntity* this) { + switch (this->timer2) { + case 0: + switch (--super->actionDelay) { + case 0: + this->timer2 += 1; + super->actionDelay = 0x38; + super->field_0xf = 0; + super->child->spriteSettings.draw = 0; + break; + case 0xa: + if (EntityInRectRadius(super, &gPlayerEntity, 0xa0, 0xa0) && CheckOnScreen(super)) { + Entity* projectile = CreateProjectileWithParent(super, ICE_PROJECTILE, 1); + if (projectile != NULL) { + projectile->direction = super->direction & 0x18; + } + } + break; + } + break; + case 1: + if (--super->actionDelay == 0) { + this->timer2++; + this->timer1 = 0x28; + super->actionDelay = 0x28; + super->field_0xf = 0; + super->flags &= 0x7f; + SetTile(this->tileIndex, this->tilePosition, super->collisionLayer); + EnqueueSFX(SFX_156); + InitializeAnimation(super, super->direction >> 3); + } + break; + case 2: + if (--super->actionDelay == 0) { + this->timer2++; + super->actionDelay = (Random() & 0x3f) + 0x18; + super->spriteSettings.draw = 0; + } + break; + case 3: + if (--super->actionDelay == 0) { + super->action = 1; + this->timer2 = 0; + this->timer1 = 0x28; + super->actionDelay = 0x28; + EnqueueSFX(SFX_156); + sub_0802F8E4(this); + InitializeAnimation(super, super->direction >> 3); + } + break; + } + sub_0802F9C8(this); +} + +void (*const WizzrobeIce_Functions[])(WizzrobeEntity*) = { + WizzrobeIce_OnTick, + sub_0802FE18, + (void (*)(WizzrobeEntity*))sub_08001324, + (void (*)(WizzrobeEntity*))sub_0804A7D4, + (void (*)(WizzrobeEntity*))sub_08001242, + WizzrobeIce_OnTick, +}; +void (*const WizzrobeIce_Actions[])(WizzrobeEntity*) = { + WizzrobeIce_Init, + WizzrobeIce_Action1, + WizzrobeIce_Action2, +}; diff --git a/src/enemy/wizzrobeWind.c b/src/enemy/wizzrobeWind.c new file mode 100644 index 00000000..8815b5b5 --- /dev/null +++ b/src/enemy/wizzrobeWind.c @@ -0,0 +1,329 @@ +/** + * @file wizzrobeWind.c + * @ingroup Enemies + * + * @brief Wizzrobe Wind enemy + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "enemy.h" +#include "enemy/wizzrobe.h" +#include "functions.h" +#include "object.h" + +extern void (*const WizzrobeWind_Functions[])(WizzrobeEntity*); +extern void (*const WizzrobeWind_Actions[])(WizzrobeEntity*); + +void sub_0802F888(WizzrobeEntity*); +void sub_0802FA48(WizzrobeEntity*); +bool32 sub_0802FA88(WizzrobeEntity*); +void sub_0802F9C8(WizzrobeEntity*); +void sub_0802F8E4(WizzrobeEntity*); + +void WizzrobeWind(WizzrobeEntity* this) { + WizzrobeWind_Functions[GetNextFunction(super)](this); + SetChildOffset(super, 0, 1, -0x10); +} + +void WizzrobeWind_OnTick(WizzrobeEntity* this) { + WizzrobeWind_Actions[super->action](this); +} + +void sub_0802F4E4(WizzrobeEntity* this) { + if (super->field_0x43 != 0) { + sub_0804A9FC(super, 0x1c); + } + sub_0804AA30(super, WizzrobeWind_Functions); + if (super->bitfield == 0x87) { + Entity* obj = CreateObject(OBJECT_2A, 3, 0); + if (obj != NULL) { + obj->spritePriority.b0 = 3; + obj->spriteOffsetY = -4; + obj->parent = super; + } + } + if (super->health == 0) { + SetTile(this->tileIndex, this->tilePosition, super->collisionLayer); + } +} + +void WizzrobeWind_Init(WizzrobeEntity* this) { + Entity* projectile; + + if (super->type2 != 0) { + super->action = 3; + super->speed = 0xc0; + super->flags |= 0x80; + this->targetIndex = 0; + super->child = (Entity*)GetCurrentRoomProperty(super->actionDelay); + sub_0802FA48(this); + sub_0802FA88(this); + } else { + sub_0804A720(super); + super->action = 1; + this->timer2 = 0xff; + this->timer1 = 0x28; + super->actionDelay = 0x28; + super->field_0xf = 0x60; + sub_0802F888(this); + } + projectile = CreateProjectileWithParent(super, WIND_PROJECTILE, 0); + if (projectile != NULL) { + super->parent = projectile; + projectile->parent = super; + projectile->direction = super->direction; + } + InitializeAnimation(super, super->direction >> 3); +} + +void WizzrobeWind_Action1(WizzrobeEntity* this) { + u8 tmp; + Entity* parent; + switch (this->timer2) { + case 0xff: + if (--super->field_0xf == 0) { + this->timer2 = 0; + } + break; + case 0: + if (--super->actionDelay == 0) { + this->timer2++; + super->actionDelay = 0x10; + super->flags |= 0x80; + } + break; + case 1: + if (--super->actionDelay == 0) { + super->action = 2; + this->timer2 = 0; + super->actionDelay = 0x28; + tmp = super->direction >> 3; + parent = super->parent; + parent->actionDelay = 1; + parent->spriteSettings.draw = 1; + InitializeAnimation(super, tmp | 4); + } + break; + } + sub_0802F9C8(this); +} + +void WizzrobeWind_Action2(WizzrobeEntity* this) { + switch (this->timer2) { + case 0: + switch (--super->actionDelay) { + case 0: + this->timer2++; + super->actionDelay = 0x38; + super->field_0xf = 0; + super->parent->spriteSettings.draw = 0; + break; + case 8: + if (EntityInRectRadius(super, &gPlayerEntity, 0xa0, 0xa0) && CheckOnScreen(super)) { + Entity* projectile = CreateProjectileWithParent(super, WIND_PROJECTILE, 1); + if (projectile != NULL) { + projectile->direction = super->direction & 0x18; + } + } + break; + } + break; + case 1: + if (--super->actionDelay == 0) { + this->timer2++; + this->timer1 = 0x28; + super->actionDelay = 0x28; + super->field_0xf = 0; + super->flags &= 0x7f; + EnqueueSFX(SFX_156); + SetTile(this->tileIndex, this->tilePosition, super->collisionLayer); + InitializeAnimation(super, super->direction >> 3); + } + break; + case 2: + if (--super->actionDelay == 0) { + this->timer2++; + super->actionDelay = (Random() & 0x3f) + 0x20; + super->spriteSettings.draw = 0; + } + break; + case 3: + if (--super->actionDelay == 0) { + super->action = 1; + this->timer2 = 0; + this->timer1 = 0x28; + super->actionDelay = 0x28; + EnqueueSFX(SFX_156); + sub_0802F8E4(this); + InitializeAnimation(super, super->direction >> 3); + } + break; + } + sub_0802F9C8(this); +} + +void WizzrobeWind_Action3(WizzrobeEntity* this) { + Entity* parent; + sub_0802FA88(this); + sub_0802F9C8(this); + parent = super->parent; + if (this->timer1 == 0) { + + switch (this->timer2) { + case 0: + this->timer2 = 1; + super->actionDelay = 0x40; + break; + case 1: + if (--super->actionDelay != 0) { + return; + } + this->timer2++; + super->actionDelay = 0x28; + parent->actionDelay = 1; + parent->spriteSettings.draw = 1; + InitializeAnimation(super, super->animationState >> 1 | 4); + break; + case 2: + if (--super->actionDelay == 0) { + this->timer2++; + super->actionDelay = (Random() & 0x1f) + 0x30; + parent->spriteSettings.draw = 0; + InitializeAnimation(super, super->animationState >> 1); + } else if (super->actionDelay == 8) { + parent = CreateProjectileWithParent(super, WIND_PROJECTILE, 1); + if (parent != NULL) { + parent->direction = super->direction & 0x18; + } + } + } + } else { + if (this->timer2 != 0) { + this->timer2 = 0; + parent->spriteSettings.draw = 0; + } + } +} + +void sub_0802F888(WizzrobeEntity* this) { + super->direction = (sub_08049F84(super, 3) + 4) & 0x18; + this->tilePosition = COORD_TO_TILE(super); + this->tileIndex = GetTileIndex(this->tilePosition, super->collisionLayer); + SetTile(0x4071, this->tilePosition, super->collisionLayer); +} + +void sub_0802F8E4(WizzrobeEntity* this) { + u16 uVar1; + s32 iVar4; + u32 uVar6; + u32 uVar7; + u32 uVar8; + + bool32 loopCondition; + u32 rand; + + if (super->type2 == 0) { + loopCondition = TRUE; + do { + rand = Random(); + uVar1 = this->unk_70; + iVar4 = ((s32)rand & 0x7ff0) % (this->unk_6e << 3); + uVar8 = (uVar1 + iVar4) | 8; + rand >>= 0x10; + uVar1 = this->unk_72; + iVar4 = ((s32)(rand)&0x7ff0) % (this->unk_6f << 3); + uVar7 = (uVar1 + iVar4) | 8; + uVar6 = TILE(uVar8, uVar7); + if ((sub_080002E0(uVar6, super->collisionLayer) == 0) && + (GetTileIndex(uVar6, super->collisionLayer) != 0x4071)) { + super->x.HALF.HI = (s16)uVar8; + super->y.HALF.HI = (s16)uVar7; + if (sub_08049FA0(super) != 0) { + loopCondition = FALSE; + } + } + } while (loopCondition); + sub_0802F888(this); + } +} + +void sub_0802F9C8(WizzrobeEntity* this) { + if (super->field_0xf == 0) { + if (this->timer1 != 0) { + if ((--this->timer1 & 1) != 0) { + super->spriteSettings.draw = 0; + } else { + super->spriteSettings.draw = 1; + } + if ((super->type2 != 0) && (LinearMoveUpdate(super), this->timer1 == 0)) { + super->flags |= 0x80; + } + } else { + if (super->type2 != 0) { + ProcessMovement(super); + if (super->collisions != 0) { + super->flags &= 0x7f; + this->timer1 = 0x28; + } + } + } + GetNextFrame(super); + } +} + +void sub_0802FA48(WizzrobeEntity* this) { + u16* target; + u16* child; + + child = (u16*)super->child; + target = &child[this->targetIndex * 2]; + if (target[0] == 0xffff) { + this->targetIndex = 0; + target = child; + } + this->targetX = gRoomControls.origin_x + target[0]; + this->targetY = gRoomControls.origin_y + target[1]; +} + +bool32 sub_0802FA88(WizzrobeEntity* this) { + u32 direction; + bool32 result = FALSE; + if (EntityWithinDistance(super, this->targetX, this->targetY, 2)) { + this->targetIndex++; + sub_0802FA48(this); + direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, this->targetX, this->targetY); + super->direction = direction; + super->animationState = ((direction + 4) & 0x18) >> 2; + if (((super->parent)->spriteSettings.draw & 3) != 0) { + InitializeAnimation(super, direction >> 3 | 4); + } else { + InitializeAnimation(super, direction >> 3); + } + result = TRUE; + } else { + direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, this->targetX, this->targetY); + sub_08004596(super, direction); + direction = ((super->direction + 4) & 0x18) >> 2; + if (direction != super->animationState) { + super->animationState = direction; + InitializeAnimation(super, direction >> 1); + } + } + return result; +} + +void (*const WizzrobeWind_Functions[])(WizzrobeEntity*) = { + WizzrobeWind_OnTick, + sub_0802F4E4, + (void (*)(WizzrobeEntity*))sub_08001324, + (void (*)(WizzrobeEntity*))sub_0804A7D4, + (void (*)(WizzrobeEntity*))sub_08001242, + WizzrobeWind_OnTick, +}; +void (*const WizzrobeWind_Actions[])(WizzrobeEntity*) = { + WizzrobeWind_Init, + WizzrobeWind_Action1, + WizzrobeWind_Action2, + WizzrobeWind_Action3, +}; diff --git a/src/npc/ezlo.c b/src/npc/ezlo.c index 872a99c6..7ce78d54 100644 --- a/src/npc/ezlo.c +++ b/src/npc/ezlo.c @@ -37,7 +37,8 @@ void sub_0806D8A0(Entity* this, ScriptExecutionContext* context) { } void sub_0806D908(Entity* this) { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI); + this->direction = + CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI); this->animationState = (this->animationState & 0x80) | gUnk_08114144[this->direction >> 0x1]; } diff --git a/src/npc/npc5.c b/src/npc/npc5.c index 5b98f450..c7640746 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -384,7 +384,7 @@ void sub_08061090(Entity* this, u32 a, u32 b) { } void sub_08061120(Entity* this, u32 param_a, u32 param_b, u32 param_c) { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b); if ((param_c != this->field_0x6c.HALF.LO) || (10 < ((this->direction + this->animationState * -4 + 5) & 0x1f))) { this->animationState = DirectionRoundUp(this->direction) >> 2; sub_08060E70(this, param_c); @@ -566,7 +566,7 @@ void sub_08061464(Entity* this, u32 param_a, u32 param_b) { iVar10 = this->x.HALF.HI; iVar9 = this->y.HALF.HI; - switch (((sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b) + 2) & 0x1c) >> 2) { + switch (((CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b) + 2) & 0x1c) >> 2) { case 0: this->field_0x6e.HWORD = param_b; if (this->x.HALF.HI > (s32)param_a) { diff --git a/src/object/greatFairy.c b/src/object/greatFairy.c index 70210ffa..a0e29797 100644 --- a/src/object/greatFairy.c +++ b/src/object/greatFairy.c @@ -420,7 +420,7 @@ void sub_080871F8(Entity* this) { if ((temp->x.HALF.HI == this->x.HALF.HI) && (temp->y.HALF.HI - 32 == this->y.HALF.HI)) { this->action = 2; } else { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 32); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 32); LinearMoveUpdate(this); } } @@ -467,8 +467,8 @@ void sub_080872F8(Entity* this) { GetNextFrame(this); if (((u16)(this->field_0x68.HWORD - this->x.HALF.HI) > 0xc) || ((u16)(this->field_0x6a.HWORD - this->y.HALF.HI) > 0xc)) { - this->direction = - sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, (s16)this->field_0x68.HWORD, (s16)this->field_0x6a.HWORD); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, (s16)this->field_0x68.HWORD, + (s16)this->field_0x6a.HWORD); this->direction = (this->direction + gUnk_081207AC[Random() & 3]) & 0x1f; } temp = gSineTable[this->actionDelay + 64]; diff --git a/src/player.c b/src/player.c index 37376999..4e675a0c 100644 --- a/src/player.c +++ b/src/player.c @@ -1076,7 +1076,7 @@ static void PortalJumpOnUpdate(Entity* this) { y = gArea.curPortalY; if ((this->x.HALF.HI != x) || (this->y.HALF.HI != y)) { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY); this->speed = JUMP_SPEED_FWD; UpdatePlayerMovement(); } @@ -3184,7 +3184,7 @@ static void sub_08073F4C(Entity* this) { u32 x = gArea.curPortalX; u32 y = gArea.curPortalY; if (this->x.HALF.HI != x || this->y.HALF.HI != y) { - this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY); + this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY); this->speed = 0x100; LinearMoveUpdate(this); } else { @@ -3472,8 +3472,8 @@ void SurfaceAction_16(Entity* this) { SoundReq(SFX_PLY_VO6); this->iframes = 24; this->knockbackDuration = 4; - this->knockbackDirection = sub_080045D4((this->x.HALF.HI & 0xFFF0) | 8, (this->y.HALF.HI & 0xFFF0) | 8, - this->x.HALF.HI, this->y.HALF.HI); + this->knockbackDirection = CalculateDirectionTo( + (this->x.HALF.HI & 0xFFF0) | 8, (this->y.HALF.HI & 0xFFF0) | 8, this->x.HALF.HI, this->y.HALF.HI); } if ((gPlayerState.flags & PL_MINISH) == 0) sub_08008790(this, 7);