summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2022-01-31 21:22:13 +0100
committeroctorock <79596758+octorock@users.noreply.github.com>2022-01-31 21:25:43 +0100
commit5ab94436796e846a40943d4e4117987a03ce2279 (patch)
tree58d5affb1fc1106fbfd7d0b12775ca73edc83f3f
parent2b8d880ffc0a4548d25dc613d53a908d36362d84 (diff)
Decompile Wizzrobes
-rw-r--r--asm/code_080043E8.s4
-rw-r--r--asm/code_08049D30.s2
-rw-r--r--asm/enemy/dust.s2
-rw-r--r--asm/enemy/enemy4D.s2
-rw-r--r--asm/enemy/enemy64.s2
-rw-r--r--asm/enemy/eyegore.s6
-rw-r--r--asm/enemy/wizzrobeFire.s351
-rw-r--r--asm/enemy/wizzrobeIce.s378
-rw-r--r--asm/enemy/wizzrobeWind.s861
-rw-r--r--asm/non_matching/lilypadLarge/sub_080855E8.inc4
-rw-r--r--asm/object/crenalBeanSprout.s2
-rw-r--r--asm/object/fairy.s2
-rw-r--r--asm/object/object21.s2
-rw-r--r--asm/object/objectA8.s2
-rw-r--r--data/const/enemy/wizzrobeFire.s18
-rw-r--r--data/const/enemy/wizzrobeIce.s19
-rw-r--r--data/const/enemy/wizzrobeWind.s19
-rw-r--r--include/asm.h2
-rw-r--r--include/enemy.h6
-rw-r--r--include/enemy/wizzrobe.h27
-rw-r--r--linker.ld12
-rw-r--r--src/coord.c4
-rw-r--r--src/enemy/darkNut.c2
-rw-r--r--src/enemy/gibdo.c2
-rw-r--r--src/enemy/lakitu.c2
-rw-r--r--src/enemy/mazaalBracelet.c6
-rw-r--r--src/enemy/mazaalHead.c2
-rw-r--r--src/enemy/puffstool.c4
-rw-r--r--src/enemy/vaatiArm.c6
-rw-r--r--src/enemy/vaatiTransfigured.c4
-rw-r--r--src/enemy/vaatiWrath.c6
-rw-r--r--src/enemy/vaatiWrathEye.c2
-rw-r--r--src/enemy/wizzrobeFire.c157
-rw-r--r--src/enemy/wizzrobeIce.c163
-rw-r--r--src/enemy/wizzrobeWind.c329
-rw-r--r--src/npc/ezlo.c3
-rw-r--r--src/npc/npc5.c4
-rw-r--r--src/object/greatFairy.c6
-rw-r--r--src/player.c8
39 files changed, 732 insertions, 1701 deletions
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 f1e96b6f..8e9a741b 100644
--- a/include/enemy.h
+++ b/include/enemy.h
@@ -171,9 +171,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 ded45e35..08e85d37 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 ef5f2c12..d320b760 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 ad692d3b..70bf6f6f 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 d201bf87..f60c2c54 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 55e4923b..527c7589 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 33dc556f..d2388e07 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 94732451..2c8e9d06 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 e8e9ebad..69a22875 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 360ba2eb..701e23d6 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 3305d1a3..ef8b1dfe 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 663a87ed..ad896731 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);