summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2022-02-12 20:00:08 +0100
committeroctorock <79596758+octorock@users.noreply.github.com>2022-02-12 20:03:27 +0100
commitb69a6d223c72bc4b88fef1527225d06854219f34 (patch)
treec6c018bb7e10d4e8a326f057283a91661ecaccf8
parentd6c79aa26346afc85bcfa724d3c086fb06c888dc (diff)
Rename movement functions
-rw-r--r--asm/beanstalkSubtask.s4
-rw-r--r--asm/code_080043E8.s4
-rw-r--r--asm/enemy/chuchuBoss.s8
-rw-r--r--asm/enemy/cloudPiranha.s2
-rw-r--r--asm/enemy/enemy4D.s2
-rw-r--r--asm/enemy/flyingPot.s2
-rw-r--r--asm/movement.s2059
-rw-r--r--asm/non_matching/armos/sub_080305BC.inc4
-rw-r--r--asm/non_matching/armos/sub_080306C4.inc2
-rw-r--r--asm/non_matching/fallingBoulder/sub_0802C334.inc2
-rw-r--r--asm/non_matching/guardWithSpear/sub_0806407C.inc2
-rw-r--r--asm/non_matching/guardWithSpear/sub_08064198.inc2
-rw-r--r--asm/non_matching/guardWithSpear/sub_080642B8.inc2
-rw-r--r--asm/non_matching/kid/sub_08062948.inc2
-rw-r--r--asm/non_matching/lilypadLarge/sub_080855E8.inc2
-rw-r--r--asm/non_matching/movement/CalculateEntityTileCollisions.inc (renamed from asm/non_matching/movement/sub_080AE58C.inc)44
-rw-r--r--asm/non_matching/movement/MoveNorthEast.inc (renamed from asm/non_matching/movement/sub_080AE8D8.inc)4
-rw-r--r--asm/non_matching/movement/MoveNorthWest.inc (renamed from asm/non_matching/movement/sub_080AEE94.inc)4
-rw-r--r--asm/non_matching/movement/MoveSouthEast.inc (renamed from asm/non_matching/movement/sub_080AEAC0.inc)4
-rw-r--r--asm/non_matching/movement/MoveSouthWest.inc (renamed from asm/non_matching/movement/sub_080AECAC.inc)4
-rw-r--r--asm/non_matching/npc5/sub_08060FD0.inc2
-rw-r--r--asm/non_matching/npc5/sub_08061170.inc2
-rw-r--r--asm/non_matching/playerItem10/sub_080ACDB0.inc2
-rw-r--r--asm/non_matching/playerItem13/sub_080AD040.inc2
-rw-r--r--asm/non_matching/ropeGolden/sub_08038304.inc2
-rw-r--r--asm/object/fairy.s2
-rw-r--r--asm/object/fan.s2
-rw-r--r--asm/object/object1F.s2
-rw-r--r--asm/object/objectA8.s2
-rw-r--r--data/const/movement.s79
-rw-r--r--include/entity.h8
-rw-r--r--include/functions.h310
-rw-r--r--linker.ld1
-rw-r--r--src/collision.c82
-rw-r--r--src/coord.c12
-rw-r--r--src/enemy/acroBandits.c4
-rw-r--r--src/enemy/armos.c2
-rw-r--r--src/enemy/ballChainSoldier.c19
-rw-r--r--src/enemy/beetle.c10
-rw-r--r--src/enemy/bladeTrap.c4
-rw-r--r--src/enemy/bobomb.c5
-rw-r--r--src/enemy/bombarossa.c2
-rw-r--r--src/enemy/bowMoblin.c2
-rw-r--r--src/enemy/businessScrub.c16
-rw-r--r--src/enemy/businessScrubPrologue.c4
-rw-r--r--src/enemy/chaser.c7
-rw-r--r--src/enemy/chuchu.c26
-rw-r--r--src/enemy/chuchuBoss.c3
-rw-r--r--src/enemy/cuccoAggr.c26
-rw-r--r--src/enemy/cuccoChickAggr.c4
-rw-r--r--src/enemy/curtain.c2
-rw-r--r--src/enemy/darkNut.c33
-rw-r--r--src/enemy/doorMimic.c1
-rw-r--r--src/enemy/enemy50.c4
-rw-r--r--src/enemy/eyegore.c4
-rw-r--r--src/enemy/fallingBoulder.c4
-rw-r--r--src/enemy/fireballGuy.c2
-rw-r--r--src/enemy/flyingSkull.c2
-rw-r--r--src/enemy/ghini.c6
-rw-r--r--src/enemy/gibdo.c10
-rw-r--r--src/enemy/helmasaur.c12
-rw-r--r--src/enemy/keaton.c4
-rw-r--r--src/enemy/keese.c3
-rw-r--r--src/enemy/lakitu.c2
-rw-r--r--src/enemy/lakituCloud.c9
-rw-r--r--src/enemy/leever.c2
-rw-r--r--src/enemy/likeLike.c2
-rw-r--r--src/enemy/madderpillar.c2
-rw-r--r--src/enemy/miniFireballGuy.c2
-rw-r--r--src/enemy/miniSlime.c2
-rw-r--r--src/enemy/moldorm.c2
-rw-r--r--src/enemy/moldworm.c2
-rw-r--r--src/enemy/mulldozer.c6
-rw-r--r--src/enemy/octorok.c2
-rw-r--r--src/enemy/octorokBoss.c14
-rw-r--r--src/enemy/octorokGolden.c4
-rw-r--r--src/enemy/peahat.c12
-rw-r--r--src/enemy/pesto.c2
-rw-r--r--src/enemy/puffstool.c2
-rw-r--r--src/enemy/rockChuchu.c2
-rw-r--r--src/enemy/rollobite.c9
-rw-r--r--src/enemy/rope.c2
-rw-r--r--src/enemy/ropeGolden.c2
-rw-r--r--src/enemy/rupeeLike.c2
-rw-r--r--src/enemy/scissorsBeetle.c4
-rw-r--r--src/enemy/sensorBladeTrap.c7
-rw-r--r--src/enemy/slime.c2
-rw-r--r--src/enemy/sluggula.c2
-rw-r--r--src/enemy/spark.c2
-rw-r--r--src/enemy/spearMoblin.c6
-rw-r--r--src/enemy/spikedBeetle.c6
-rw-r--r--src/enemy/spinyBeetle.c2
-rw-r--r--src/enemy/spinyChuchu.c4
-rw-r--r--src/enemy/stalfos.c10
-rw-r--r--src/enemy/tektite.c2
-rw-r--r--src/enemy/tektiteGolden.c2
-rw-r--r--src/enemy/vaatiArm.c2
-rw-r--r--src/enemy/vaatiEyesMacro.c2
-rw-r--r--src/enemy/vaatiRebornEnemy.c6
-rw-r--r--src/enemy/vaatiTransfigured.c2
-rw-r--r--src/enemy/vaatiWrath.c2
-rw-r--r--src/enemy/wisp.c2
-rw-r--r--src/enemy/wizzrobeWind.c2
-rw-r--r--src/movement.c2039
-rw-r--r--src/npc/castleMaid.c2
-rw-r--r--src/npc/cow.c2
-rw-r--r--src/npc/dog.c2
-rw-r--r--src/npc/kid.c2
-rw-r--r--src/npc/npc23.c2
-rw-r--r--src/npc/npc5.c27
-rw-r--r--src/npc/townsperson.c2
-rw-r--r--src/npcUtils.c14
-rw-r--r--src/object/bakerOven.c2
-rw-r--r--src/object/itemOnGround.c4
-rw-r--r--src/object/lightableSwitch.c5
-rw-r--r--src/object/lilypadLarge.c2
-rw-r--r--src/object/objectB2.c2
-rw-r--r--src/object/rupee.c2
-rw-r--r--src/object/smallIceBlock.c2
-rw-r--r--src/projectile/arrowProjectile.c4
-rw-r--r--src/projectile/boneProjectile.c10
-rw-r--r--src/projectile/cannonballProjectile.c11
-rw-r--r--src/projectile/dekuSeedProjectile.c19
-rw-r--r--src/projectile/dirtBallProjectile.c2
-rw-r--r--src/projectile/fireProjectile.c8
-rw-r--r--src/projectile/guardLineOfSight.c2
-rw-r--r--src/projectile/gyorgMaleEnergyProjectile.c10
-rw-r--r--src/projectile/iceProjectile.c8
-rw-r--r--src/projectile/lakituLightning.c8
-rw-r--r--src/projectile/mandiblesProjectile.c2
-rw-r--r--src/projectile/moblinSpear.c4
-rw-r--r--src/projectile/octorokBossProjectile.c6
-rw-r--r--src/projectile/rockProjectile.c10
-rw-r--r--src/projectile/spikedRollers.c5
-rw-r--r--src/projectile/torchTrapProjectile.c9
-rw-r--r--src/projectile/v2Projectile.c7
-rw-r--r--src/projectile/v3ElectricProjectile.c7
-rw-r--r--src/projectile/v3HandProjectile.c8
-rw-r--r--src/projectile/v3TennisBallProjectile.c12
-rw-r--r--src/projectile/windProjectile.c8
-rw-r--r--src/projectile/winder.c2
141 files changed, 2328 insertions, 2986 deletions
diff --git a/asm/beanstalkSubtask.s b/asm/beanstalkSubtask.s
index 7c0b8427..f58e52af 100644
--- a/asm/beanstalkSubtask.s
+++ b/asm/beanstalkSubtask.s
@@ -1705,7 +1705,7 @@ _0801A32C:
asrs r2, r2, #0x10
adds r0, r3, #0
adds r3, r6, #0
- bl sub_080AE4CC
+ bl IsTileCollision
cmp r0, #0
bne _0801A36C
movs r0, #1
@@ -1901,7 +1901,7 @@ _0801A4B0:
adds r2, r2, r0
adds r0, r3, #0
mov r3, r8
- bl sub_080AE4CC
+ bl IsTileCollision
cmp r0, #0
bne _0801A4F0
ldrb r0, [r5]
diff --git a/asm/code_080043E8.s b/asm/code_080043E8.s
index ab9b0456..61b1d53c 100644
--- a/asm/code_080043E8.s
+++ b/asm/code_080043E8.s
@@ -119,10 +119,10 @@ sub_080044AE: @ 0x080044AE
push {r0, r1, r2}
adds r1, r2, #0
movs r2, #2
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
pop {r0, r1, r2}
movs r3, #2
- bl sub_080AE7E8
+ bl ProcessMovementInternal
_080044C8:
pop {r3}
bx r3
diff --git a/asm/enemy/chuchuBoss.s b/asm/enemy/chuchuBoss.s
index f6f30960..c14282fe 100644
--- a/asm/enemy/chuchuBoss.s
+++ b/asm/enemy/chuchuBoss.s
@@ -1374,7 +1374,7 @@ _0802670A:
bl SoundReq
_08026726:
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
_0802672C:
adds r0, r4, #0
adds r0, #0x76
@@ -1556,7 +1556,7 @@ sub_0802686C: @ 0x0802686C
cmp r5, #0
beq _08026888
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
b _080268BE
_08026888:
movs r0, #0x10
@@ -2929,7 +2929,7 @@ _080270D4:
ldrb r0, [r0, #0xc]
strb r0, [r5, #0x15]
adds r0, r5, #0
- bl ProcessMovement
+ bl ProcessMovement0
_080270E0:
adds r0, r6, #0
adds r0, #0x85
@@ -2989,7 +2989,7 @@ _08027110:
b _080271FE
_0802714A:
adds r0, r5, #0
- bl ProcessMovement
+ bl ProcessMovement0
b _080271FE
_08027152:
adds r0, r6, #0
diff --git a/asm/enemy/cloudPiranha.s b/asm/enemy/cloudPiranha.s
index ee2f5690..b3d9f0d2 100644
--- a/asm/enemy/cloudPiranha.s
+++ b/asm/enemy/cloudPiranha.s
@@ -601,7 +601,7 @@ _08038890:
cmp r0, #0
bne _080388A8
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
b _080388B2
_080388A8:
subs r0, #1
diff --git a/asm/enemy/enemy4D.s b/asm/enemy/enemy4D.s
index dd15a65f..233850b2 100644
--- a/asm/enemy/enemy4D.s
+++ b/asm/enemy/enemy4D.s
@@ -172,7 +172,7 @@ _0803ECD8:
movs r1, #0x10
bl sub_0803E94C
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
_0803ED02:
pop {r4, r5, r6, pc}
diff --git a/asm/enemy/flyingPot.s b/asm/enemy/flyingPot.s
index 09794584..5650403a 100644
--- a/asm/enemy/flyingPot.s
+++ b/asm/enemy/flyingPot.s
@@ -476,7 +476,7 @@ _080373C4:
sub_080373C8: @ 0x080373C8
push {r4, lr}
adds r4, r0, #0
- bl sub_080AEFE0
+ bl ProcessMovement2
ldrh r0, [r4, #0x2a]
cmp r0, #0
beq _080373DC
diff --git a/asm/movement.s b/asm/movement.s
deleted file mode 100644
index 395f78e1..00000000
--- a/asm/movement.s
+++ /dev/null
@@ -1,2059 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_080AE3E4
-sub_080AE3E4: @ 0x080AE3E4
- movs r0, #0
- bx lr
-
- thumb_func_start sub_080AE3E8
-sub_080AE3E8: @ 0x080AE3E8
- movs r0, #1
- bx lr
-
- thumb_func_start sub_080AE3EC
-sub_080AE3EC: @ 0x080AE3EC
- adds r2, r0, #0
- ldr r0, _080AE404 @ =gUnk_08133918
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE404: .4byte gUnk_08133918
-
- thumb_func_start sub_080AE408
-sub_080AE408: @ 0x080AE408
- adds r2, r0, #0
- ldr r0, _080AE420 @ =gUnk_08133938
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE420: .4byte gUnk_08133938
-
- thumb_func_start sub_080AE424
-sub_080AE424: @ 0x080AE424
- adds r2, r0, #0
- ldr r0, _080AE43C @ =gUnk_08133958
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE43C: .4byte gUnk_08133958
-
- thumb_func_start sub_080AE440
-sub_080AE440: @ 0x080AE440
- adds r2, r0, #0
- ldr r0, _080AE458 @ =gUnk_08133978
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE458: .4byte gUnk_08133978
-
- thumb_func_start sub_080AE45C
-sub_080AE45C: @ 0x080AE45C
- adds r2, r0, #0
- ldr r0, _080AE474 @ =gUnk_08133998
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE474: .4byte gUnk_08133998
-
- thumb_func_start sub_080AE478
-sub_080AE478: @ 0x080AE478
- adds r2, r0, #0
- ldr r0, _080AE490 @ =gUnk_081339B8
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE490: .4byte gUnk_081339B8
-
- thumb_func_start sub_080AE494
-sub_080AE494: @ 0x080AE494
- adds r2, r0, #0
- ldr r0, _080AE4AC @ =gUnk_081339D8
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE4AC: .4byte gUnk_081339D8
-
- thumb_func_start sub_080AE4B0
-sub_080AE4B0: @ 0x080AE4B0
- adds r2, r0, #0
- ldr r0, _080AE4C8 @ =gUnk_081339F8
- movs r3, #0xf
- ands r1, r3
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- ands r2, r3
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-_080AE4C8: .4byte gUnk_081339F8
-
- thumb_func_start sub_080AE4CC
-sub_080AE4CC: @ 0x080AE4CC
- push {r4, r5, r6, lr}
- adds r6, r1, #0
- adds r5, r2, #0
- adds r4, r3, #0
- ldr r1, _080AE4FC @ =gRoomControls
- ldrh r2, [r1, #6]
- subs r2, r6, r2
- asrs r2, r2, #4
- movs r3, #0x3f
- ands r2, r3
- ldrh r1, [r1, #8]
- subs r1, r5, r1
- asrs r1, r1, #4
- ands r1, r3
- lsls r1, r1, #6
- orrs r2, r1
- adds r0, r0, r2
- ldrb r3, [r0]
- cmp r3, #0
- bne _080AE500
- cmp r4, #4
- beq _080AE588
- b _080AE516
- .align 2, 0
-_080AE4FC: .4byte gRoomControls
-_080AE500:
- cmp r3, #0xf
- bhi _080AE53E
- ldr r2, _080AE51C @ =gUnk_08133A40
- lsls r1, r4, #1
- adds r0, r3, #1
- lsrs r0, r0, #4
- adds r1, r1, r0
- adds r1, r1, r2
- ldrb r0, [r1]
- cmp r0, #0
- bne _080AE520
-_080AE516:
- movs r0, #0
- b _080AE58A
- .align 2, 0
-_080AE51C: .4byte gUnk_08133A40
-_080AE520:
- cmp r0, #1
- beq _080AE588
- movs r0, #8
- ands r5, r0
- cmp r5, #0
- bne _080AE52E
- lsrs r3, r3, #2
-_080AE52E:
- ands r6, r0
- cmp r6, #0
- bne _080AE536
- lsrs r3, r3, #1
-_080AE536:
- movs r0, #1
- ands r3, r0
- adds r0, r3, #0
- b _080AE58A
-_080AE53E:
- cmp r3, #0xff
- bne _080AE558
- ldr r1, _080AE550 @ =gUnk_08133A18
- ldr r0, _080AE554 @ =gUnk_08133A5A
- adds r0, r4, r0
- ldrb r0, [r0]
- lsls r0, r0, #2
- adds r0, r0, r1
- b _080AE572
- .align 2, 0
-_080AE550: .4byte gUnk_08133A18
-_080AE554: .4byte gUnk_08133A5A
-_080AE558:
- cmp r3, #0x6f
- bhi _080AE588
- ldr r2, _080AE580 @ =gUnk_08133A18
- ldr r1, _080AE584 @ =gUnk_08133A67
- lsls r0, r4, #1
- adds r0, r0, r4
- lsls r0, r0, #5
- adds r0, r0, r3
- subs r0, #0x10
- adds r0, r0, r1
- ldrb r0, [r0]
- lsls r0, r0, #2
- adds r0, r0, r2
-_080AE572:
- ldr r2, [r0]
- adds r0, r6, #0
- adds r1, r5, #0
- bl _call_via_r2
- b _080AE58A
- .align 2, 0
-_080AE580: .4byte gUnk_08133A18
-_080AE584: .4byte gUnk_08133A67
-_080AE588:
- movs r0, #1
-_080AE58A:
- pop {r4, r5, r6, pc}
-
- thumb_func_start sub_080AE58C
-sub_080AE58C: @ 0x080AE58C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #0x18
- str r0, [sp]
- str r1, [sp, #4]
- adds r4, r2, #0
- adds r0, #0x38
- ldrb r0, [r0]
- bl GetLayerByIndex
- ldr r1, _080AE624 @ =0x00002004
- adds r5, r0, r1
- ldr r2, [sp]
- ldr r2, [r2, #0x48]
- str r2, [sp, #8]
- ldr r0, [sp]
- movs r2, #0x2e
- ldrsh r1, [r0, r2]
- ldr r2, [sp, #8]
- movs r0, #0
- ldrsb r0, [r2, r0]
- adds r1, r1, r0
- str r1, [sp, #0xc]
- ldr r0, [sp]
- movs r2, #0x32
- ldrsh r1, [r0, r2]
- ldr r2, [sp, #8]
- movs r0, #1
- ldrsb r0, [r2, r0]
- adds r1, r1, r0
- mov sl, r1
- ldrb r0, [r2, #2]
- mov sb, r0
- ldrb r1, [r2, #3]
- mov r8, r1
- movs r0, #0xf
- ldr r2, [sp, #4]
- ands r0, r2
- cmp r0, #0
- beq _080AE65C
- cmp r2, #0xf
- bhi _080AE628
- ldr r7, [sp, #0xc]
- add r7, sb
- adds r0, r5, #0
- adds r1, r7, #0
- mov r2, sl
- adds r3, r4, #0
- bl sub_080AE4CC
- adds r6, r0, #0
- lsls r6, r6, #1
- mov r2, sl
- add r2, r8
- adds r0, r5, #0
- adds r1, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- mov r0, sl
- mov r1, r8
- subs r2, r0, r1
- adds r0, r5, #0
- adds r1, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #6
- b _080AE6D2
- .align 2, 0
-_080AE624: .4byte 0x00002004
-_080AE628:
- ldr r2, [sp, #0xc]
- mov r0, sb
- subs r7, r2, r0
- adds r0, r5, #0
- adds r1, r7, #0
- mov r2, sl
- adds r3, r4, #0
- bl sub_080AE4CC
- adds r6, r0, #0
- lsls r6, r6, #1
- mov r2, sl
- add r2, r8
- adds r0, r5, #0
- adds r1, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- mov r1, sl
- mov r0, r8
- subs r2, r1, r0
- adds r0, r5, #0
- adds r1, r7, #0
- b _080AE6C8
-_080AE65C:
- ldr r7, [sp, #0xc]
- add r7, sb
- adds r0, r5, #0
- adds r1, r7, #0
- mov r2, sl
- adds r3, r4, #0
- bl sub_080AE4CC
- adds r6, r0, #0
- lsls r6, r6, #1
- mov r1, sl
- add r1, r8
- str r1, [sp, #0x10]
- adds r0, r5, #0
- adds r1, r7, #0
- ldr r2, [sp, #0x10]
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- mov r2, sl
- mov r0, r8
- subs r2, r2, r0
- mov r8, r2
- adds r0, r5, #0
- adds r1, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #2
- ldr r1, [sp, #0xc]
- mov r2, sb
- subs r7, r1, r2
- adds r0, r5, #0
- adds r1, r7, #0
- mov r2, sl
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- adds r0, r5, #0
- adds r1, r7, #0
- ldr r2, [sp, #0x10]
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- adds r0, r5, #0
- adds r1, r7, #0
- mov r2, r8
-_080AE6C8:
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #2
-_080AE6D2:
- ldr r0, [sp, #8]
- ldrb r0, [r0, #4]
- mov sb, r0
- ldr r1, [sp, #8]
- ldrb r1, [r1, #5]
- mov r8, r1
- ldr r2, [sp, #4]
- subs r2, #8
- str r2, [sp, #4]
- movs r0, #0xf
- ands r0, r2
- cmp r0, #0
- beq _080AE760
- cmp r2, #0xf
- bhi _080AE72C
- mov r7, sl
- add r7, r8
- adds r0, r5, #0
- ldr r1, [sp, #0xc]
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- ldr r1, [sp, #0xc]
- add r1, sb
- adds r0, r5, #0
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- ldr r0, [sp, #0xc]
- mov r2, sb
- subs r1, r0, r2
- adds r0, r5, #0
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #5
- b _080AE7D6
-_080AE72C:
- mov r0, sl
- mov r1, r8
- subs r7, r0, r1
- lsls r6, r6, #4
- adds r0, r5, #0
- ldr r1, [sp, #0xc]
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- ldr r1, [sp, #0xc]
- add r1, sb
- adds r0, r5, #0
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- ldr r2, [sp, #0xc]
- mov r0, sb
- subs r1, r2, r0
- adds r0, r5, #0
- b _080AE7CA
-_080AE760:
- mov r7, sl
- add r7, r8
- adds r0, r5, #0
- ldr r1, [sp, #0xc]
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- ldr r1, [sp, #0xc]
- add r1, sb
- str r1, [sp, #0x14]
- adds r0, r5, #0
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- ldr r2, [sp, #0xc]
- mov r0, sb
- subs r2, r2, r0
- mov sb, r2
- adds r0, r5, #0
- mov r1, sb
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #2
- mov r1, sl
- mov r2, r8
- subs r7, r1, r2
- adds r0, r5, #0
- ldr r1, [sp, #0xc]
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- adds r0, r5, #0
- ldr r1, [sp, #0x14]
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
- adds r0, r5, #0
- mov r1, sb
-_080AE7CA:
- adds r2, r7, #0
- adds r3, r4, #0
- bl sub_080AE4CC
- orrs r6, r0
- lsls r6, r6, #1
-_080AE7D6:
- ldr r0, [sp]
- strh r6, [r0, #0x2a]
- add sp, #0x18
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080AE7E8
-sub_080AE7E8: @ 0x080AE7E8
- push {r4, r5, lr}
- ldr r5, _080AE7FC @ =gUnk_08133F48
- lsls r4, r2, #2
- adds r4, r4, r5
- lsls r2, r2, #3
- ldr r4, [r4]
- bl _call_via_r4
- pop {r4, r5, pc}
- .align 2, 0
-_080AE7FC: .4byte gUnk_08133F48
-
- thumb_func_start sub_080AE800
-sub_080AE800: @ 0x080AE800
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r4, r0, #0
- adds r5, r1, #0
- adds r2, r3, #0
- movs r6, #0
- mov r8, r6
- ldrh r1, [r4, #0x2a]
- movs r7, #0xe
- adds r0, r7, #0
- ands r0, r1
- cmp r0, #0
- beq _080AE89C
- cmp r0, #2
- bne _080AE85C
- movs r0, #0xe0
- lsls r0, r0, #8
- ands r0, r1
- cmp r0, #0
- bne _080AE8AE
- lsls r6, r5, #8
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #4
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- adds r0, r7, #0
- ands r0, r1
- cmp r0, #0
- bne _080AE8AE
- ldr r0, _080AE858 @ =gSineTable
- adds r0, #0x80
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov r8, r1
- ldr r0, [r4, #0x30]
- subs r0, r0, r1
- b _080AE8AC
- .align 2, 0
-_080AE858: .4byte gSineTable
-_080AE85C:
- cmp r0, #4
- bne _080AE8AE
- movs r0, #0xe0
- lsls r0, r0, #4
- ands r0, r1
- cmp r0, #0
- bne _080AE8AE
- lsls r6, r5, #8
- ldr r0, [r4, #0x2c]
- subs r0, r0, r6
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #0x1c
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- adds r0, r7, #0
- ands r0, r1
- cmp r0, #0
- bne _080AE8AE
- ldr r0, _080AE898 @ =gSineTable
- adds r0, #0x80
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov r8, r1
- ldr r0, [r4, #0x30]
- subs r0, r0, r1
- b _080AE8AC
- .align 2, 0
-_080AE898: .4byte gSineTable
-_080AE89C:
- ldr r0, _080AE8C4 @ =gSineTable
- adds r0, #0x80
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
-_080AE8AC:
- str r0, [r4, #0x30]
-_080AE8AE:
- ldr r1, _080AE8C8 @ =0x00003333
- adds r0, r6, r1
- ldr r1, _080AE8CC @ =0x00006665
- cmp r0, r1
- bhi _080AE8D0
- ldr r0, _080AE8C8 @ =0x00003333
- add r0, r8
- cmp r0, r1
- bhi _080AE8D0
- movs r0, #0
- b _080AE8D2
- .align 2, 0
-_080AE8C4: .4byte gSineTable
-_080AE8C8: .4byte 0x00003333
-_080AE8CC: .4byte 0x00006665
-_080AE8D0:
- movs r0, #1
-_080AE8D2:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_080AE8D8
-sub_080AE8D8: @ 0x080AE8D8
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- adds r5, r1, #0
- mov r8, r2
- mov sb, r3
- movs r7, #0
- movs r6, #0
- ldrh r0, [r4, #0x2a]
- movs r1, #0xe
- ands r1, r0
- mov ip, r1
- movs r2, #0xe0
- lsls r2, r2, #8
- ands r2, r0
- adds r3, r2, #0
- cmp r1, #0
- beq _080AE904
- cmp r2, #0
- bne _080AE99E
-_080AE904:
- orrs r1, r2
- cmp r1, #0
- bne _080AE928
- ldr r1, _080AE924 @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r2, #0
- ldrsh r0, [r0, r2]
- adds r7, r0, #0
- muls r7, r5, r7
- ldr r0, [r4, #0x30]
- subs r0, r0, r7
- str r0, [r4, #0x30]
- b _080AE98A
- .align 2, 0
-_080AE924: .4byte gSineTable
-_080AE928:
- mov r2, ip
- cmp r2, #2
- bne _080AE942
- lsls r7, r5, #8
- ldr r0, [r4, #0x2c]
- adds r0, r0, r7
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #4
- mov r2, sb
- bl sub_080AE58C
- b _080AE95C
-_080AE942:
- movs r0, #0x80
- lsls r0, r0, #7
- cmp r3, r0
- bne _080AE95C
- lsls r7, r5, #8
- ldr r0, [r4, #0x30]
- subs r0, r0, r7
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #4
- mov r2, sb
- bl sub_080AE58C
-_080AE95C:
- ldrh r2, [r4, #0x2a]
- movs r0, #0xe
- ands r0, r2
- cmp r0, #0
- bne _080AE97E
- ldr r1, _080AE9B4 @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
- str r0, [r4, #0x30]
-_080AE97E:
- movs r0, #0xe0
- lsls r0, r0, #8
- ands r0, r2
- cmp r0, #0
- bne _080AE99E
- ldr r1, _080AE9B4 @ =gSineTable
-_080AE98A:
- mov r2, r8
- lsls r0, r2, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
- str r0, [r4, #0x2c]
-_080AE99E:
- ldr r2, _080AE9B8 @ =0x00003333
- adds r0, r7, r2
- ldr r1, _080AE9BC @ =0x00006665
- cmp r0, r1
- bhi _080AE9C0
- ldr r2, _080AE9B8 @ =0x00003333
- adds r0, r6, r2
- cmp r0, r1
- bhi _080AE9C0
- movs r0, #0
- b _080AE9C2
- .align 2, 0
-_080AE9B4: .4byte gSineTable
-_080AE9B8: .4byte 0x00003333
-_080AE9BC: .4byte 0x00006665
-_080AE9C0:
- movs r0, #1
-_080AE9C2:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080AE9CC
-sub_080AE9CC: @ 0x080AE9CC
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- adds r5, r1, #0
- adds r7, r2, #0
- movs r6, #0
- mov sb, r6
- ldrh r2, [r4, #0x2a]
- movs r0, #0xe0
- lsls r0, r0, #8
- mov r8, r0
- mov r1, r8
- ands r1, r2
- cmp r1, #0
- beq _080AEA7C
- movs r0, #0x80
- lsls r0, r0, #6
- cmp r1, r0
- bne _080AEA34
- movs r0, #0xe0
- ands r0, r2
- cmp r0, #0
- bne _080AEA90
- lsls r6, r5, #8
- ldr r0, [r4, #0x30]
- adds r0, r0, r6
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #0xc
- adds r2, r3, #0
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- mov r0, r8
- ands r0, r1
- cmp r0, #0
- bne _080AEA90
- ldr r1, _080AEA30 @ =gSineTable
- lsls r0, r7, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov sb, r1
- ldr r0, [r4, #0x2c]
- add r0, sb
- b _080AEA8E
- .align 2, 0
-_080AEA30: .4byte gSineTable
-_080AEA34:
- movs r0, #0x80
- lsls r0, r0, #7
- cmp r1, r0
- bne _080AEA90
- movs r0, #0xe
- ands r0, r2
- cmp r0, #0
- bne _080AEA90
- lsls r6, r5, #8
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #4
- adds r2, r3, #0
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- mov r0, r8
- ands r0, r1
- cmp r0, #0
- bne _080AEA90
- ldr r1, _080AEA78 @ =gSineTable
- lsls r0, r7, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov sb, r1
- ldr r0, [r4, #0x2c]
- add r0, sb
- b _080AEA8E
- .align 2, 0
-_080AEA78: .4byte gSineTable
-_080AEA7C:
- ldr r1, _080AEAA8 @ =gSineTable
- lsls r0, r7, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
-_080AEA8E:
- str r0, [r4, #0x2c]
-_080AEA90:
- ldr r1, _080AEAAC @ =0x00003333
- adds r0, r6, r1
- ldr r1, _080AEAB0 @ =0x00006665
- cmp r0, r1
- bhi _080AEAB4
- ldr r0, _080AEAAC @ =0x00003333
- add r0, sb
- cmp r0, r1
- bhi _080AEAB4
- movs r0, #0
- b _080AEAB6
- .align 2, 0
-_080AEAA8: .4byte gSineTable
-_080AEAAC: .4byte 0x00003333
-_080AEAB0: .4byte 0x00006665
-_080AEAB4:
- movs r0, #1
-_080AEAB6:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080AEAC0
-sub_080AEAC0: @ 0x080AEAC0
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- adds r5, r1, #0
- mov r8, r2
- mov sb, r3
- movs r7, #0
- movs r6, #0
- ldrh r0, [r4, #0x2a]
- movs r1, #0xe0
- ands r1, r0
- mov ip, r1
- movs r2, #0xe0
- lsls r2, r2, #8
- ands r2, r0
- adds r3, r2, #0
- cmp r1, #0
- beq _080AEAEC
- cmp r2, #0
- bne _080AEB86
-_080AEAEC:
- orrs r1, r2
- cmp r1, #0
- bne _080AEB10
- ldr r1, _080AEB0C @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r2, #0
- ldrsh r0, [r0, r2]
- adds r7, r0, #0
- muls r7, r5, r7
- ldr r0, [r4, #0x30]
- subs r0, r0, r7
- str r0, [r4, #0x30]
- b _080AEB72
- .align 2, 0
-_080AEB0C: .4byte gSineTable
-_080AEB10:
- mov r2, ip
- cmp r2, #0x20
- bne _080AEB2A
- lsls r7, r5, #8
- ldr r0, [r4, #0x2c]
- adds r0, r0, r7
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #0xc
- mov r2, sb
- bl sub_080AE58C
- b _080AEB44
-_080AEB2A:
- movs r0, #0x80
- lsls r0, r0, #6
- cmp r3, r0
- bne _080AEB44
- lsls r7, r5, #8
- ldr r0, [r4, #0x30]
- adds r0, r0, r7
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #0xc
- mov r2, sb
- bl sub_080AE58C
-_080AEB44:
- ldrh r2, [r4, #0x2a]
- movs r0, #0xe0
- ands r0, r2
- cmp r0, #0
- bne _080AEB66
- ldr r1, _080AEB9C @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
- str r0, [r4, #0x30]
-_080AEB66:
- movs r0, #0xe0
- lsls r0, r0, #8
- ands r0, r2
- cmp r0, #0
- bne _080AEB86
- ldr r1, _080AEB9C @ =gSineTable
-_080AEB72:
- mov r2, r8
- lsls r0, r2, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
- str r0, [r4, #0x2c]
-_080AEB86:
- ldr r2, _080AEBA0 @ =0x00003333
- adds r0, r7, r2
- ldr r1, _080AEBA4 @ =0x00006665
- cmp r0, r1
- bhi _080AEBA8
- ldr r2, _080AEBA0 @ =0x00003333
- adds r0, r6, r2
- cmp r0, r1
- bhi _080AEBA8
- movs r0, #0
- b _080AEBAA
- .align 2, 0
-_080AEB9C: .4byte gSineTable
-_080AEBA0: .4byte 0x00003333
-_080AEBA4: .4byte 0x00006665
-_080AEBA8:
- movs r0, #1
-_080AEBAA:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080AEBB4
-sub_080AEBB4: @ 0x080AEBB4
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- adds r5, r1, #0
- adds r7, r2, #0
- adds r2, r3, #0
- movs r6, #0
- mov sb, r6
- ldrh r1, [r4, #0x2a]
- movs r0, #0xe0
- mov r8, r0
- ands r0, r1
- cmp r0, #0
- beq _080AEC64
- cmp r0, #0x20
- bne _080AEC1C
- movs r0, #0xe0
- lsls r0, r0, #8
- ands r0, r1
- cmp r0, #0
- bne _080AEC7C
- lsls r6, r5, #8
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #0xc
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- mov r0, r8
- ands r0, r1
- cmp r0, #0
- bne _080AEC7C
- ldr r1, _080AEC18 @ =gSineTable
- adds r0, r7, #0
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov sb, r1
- ldr r0, [r4, #0x30]
- subs r0, r0, r1
- b _080AEC7A
- .align 2, 0
-_080AEC18: .4byte gSineTable
-_080AEC1C:
- cmp r0, #0x40
- bne _080AEC7C
- movs r0, #0xe0
- lsls r0, r0, #4
- ands r0, r1
- cmp r0, #0
- bne _080AEC7C
- lsls r6, r5, #8
- ldr r0, [r4, #0x2c]
- subs r0, r0, r6
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #0x14
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- mov r0, r8
- ands r0, r1
- cmp r0, #0
- bne _080AEC7C
- ldr r1, _080AEC60 @ =gSineTable
- adds r0, r7, #0
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov sb, r1
- ldr r0, [r4, #0x30]
- subs r0, r0, r1
- b _080AEC7A
- .align 2, 0
-_080AEC60: .4byte gSineTable
-_080AEC64:
- ldr r1, _080AEC94 @ =gSineTable
- adds r0, r7, #0
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
-_080AEC7A:
- str r0, [r4, #0x30]
-_080AEC7C:
- ldr r1, _080AEC98 @ =0x00003333
- adds r0, r6, r1
- ldr r1, _080AEC9C @ =0x00006665
- cmp r0, r1
- bhi _080AECA0
- ldr r0, _080AEC98 @ =0x00003333
- add r0, sb
- cmp r0, r1
- bhi _080AECA0
- movs r0, #0
- b _080AECA2
- .align 2, 0
-_080AEC94: .4byte gSineTable
-_080AEC98: .4byte 0x00003333
-_080AEC9C: .4byte 0x00006665
-_080AECA0:
- movs r0, #1
-_080AECA2:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080AECAC
-sub_080AECAC: @ 0x080AECAC
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- adds r5, r1, #0
- mov r8, r2
- mov sb, r3
- movs r7, #0
- movs r6, #0
- ldrh r0, [r4, #0x2a]
- movs r1, #0xe0
- ands r1, r0
- mov ip, r1
- movs r2, #0xe0
- lsls r2, r2, #4
- ands r2, r0
- adds r3, r2, #0
- cmp r1, #0
- beq _080AECD8
- cmp r2, #0
- bne _080AED72
-_080AECD8:
- orrs r1, r2
- cmp r1, #0
- bne _080AECFC
- ldr r1, _080AECF8 @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r2, #0
- ldrsh r0, [r0, r2]
- adds r7, r0, #0
- muls r7, r5, r7
- ldr r0, [r4, #0x30]
- subs r0, r0, r7
- str r0, [r4, #0x30]
- b _080AED5E
- .align 2, 0
-_080AECF8: .4byte gSineTable
-_080AECFC:
- mov r2, ip
- cmp r2, #0x40
- bne _080AED16
- lsls r7, r5, #8
- ldr r0, [r4, #0x2c]
- subs r0, r0, r7
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #0x14
- mov r2, sb
- bl sub_080AE58C
- b _080AED30
-_080AED16:
- movs r0, #0x80
- lsls r0, r0, #2
- cmp r3, r0
- bne _080AED30
- lsls r7, r5, #8
- ldr r0, [r4, #0x30]
- adds r0, r0, r7
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #0x14
- mov r2, sb
- bl sub_080AE58C
-_080AED30:
- ldrh r2, [r4, #0x2a]
- movs r0, #0xe0
- ands r0, r2
- cmp r0, #0
- bne _080AED52
- ldr r1, _080AED88 @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
- str r0, [r4, #0x30]
-_080AED52:
- movs r0, #0xe0
- lsls r0, r0, #4
- ands r0, r2
- cmp r0, #0
- bne _080AED72
- ldr r1, _080AED88 @ =gSineTable
-_080AED5E:
- mov r2, r8
- lsls r0, r2, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
- str r0, [r4, #0x2c]
-_080AED72:
- ldr r2, _080AED8C @ =0x00003333
- adds r0, r7, r2
- ldr r1, _080AED90 @ =0x00006665
- cmp r0, r1
- bhi _080AED94
- ldr r2, _080AED8C @ =0x00003333
- adds r0, r6, r2
- cmp r0, r1
- bhi _080AED94
- movs r0, #0
- b _080AED96
- .align 2, 0
-_080AED88: .4byte gSineTable
-_080AED8C: .4byte 0x00003333
-_080AED90: .4byte 0x00006665
-_080AED94:
- movs r0, #1
-_080AED96:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080AEDA0
-sub_080AEDA0: @ 0x080AEDA0
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- adds r5, r1, #0
- adds r7, r2, #0
- movs r6, #0
- mov sb, r6
- ldrh r2, [r4, #0x2a]
- movs r0, #0xe0
- lsls r0, r0, #4
- mov r8, r0
- mov r1, r8
- ands r1, r2
- cmp r1, #0
- beq _080AEE50
- movs r0, #0x80
- lsls r0, r0, #2
- cmp r1, r0
- bne _080AEE08
- movs r0, #0xe0
- ands r0, r2
- cmp r0, #0
- bne _080AEE64
- lsls r6, r5, #8
- ldr r0, [r4, #0x30]
- adds r0, r0, r6
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #0x1c
- adds r2, r3, #0
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- mov r0, r8
- ands r0, r1
- cmp r0, #0
- bne _080AEE64
- ldr r1, _080AEE04 @ =gSineTable
- lsls r0, r7, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov sb, r1
- ldr r0, [r4, #0x2c]
- add r0, sb
- b _080AEE62
- .align 2, 0
-_080AEE04: .4byte gSineTable
-_080AEE08:
- movs r0, #0x80
- lsls r0, r0, #3
- cmp r1, r0
- bne _080AEE64
- movs r0, #0xe
- ands r0, r2
- cmp r0, #0
- bne _080AEE64
- lsls r6, r5, #8
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #0x1c
- adds r2, r3, #0
- bl sub_080AE58C
- ldrh r1, [r4, #0x2a]
- mov r0, r8
- ands r0, r1
- cmp r0, #0
- bne _080AEE64
- ldr r1, _080AEE4C @ =gSineTable
- lsls r0, r7, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- muls r1, r5, r1
- mov sb, r1
- ldr r0, [r4, #0x2c]
- add r0, sb
- b _080AEE62
- .align 2, 0
-_080AEE4C: .4byte gSineTable
-_080AEE50:
- ldr r1, _080AEE7C @ =gSineTable
- lsls r0, r7, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
-_080AEE62:
- str r0, [r4, #0x2c]
-_080AEE64:
- ldr r1, _080AEE80 @ =0x00003333
- adds r0, r6, r1
- ldr r1, _080AEE84 @ =0x00006665
- cmp r0, r1
- bhi _080AEE88
- ldr r0, _080AEE80 @ =0x00003333
- add r0, sb
- cmp r0, r1
- bhi _080AEE88
- movs r0, #0
- b _080AEE8A
- .align 2, 0
-_080AEE7C: .4byte gSineTable
-_080AEE80: .4byte 0x00003333
-_080AEE84: .4byte 0x00006665
-_080AEE88:
- movs r0, #1
-_080AEE8A:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080AEE94
-sub_080AEE94: @ 0x080AEE94
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- adds r5, r1, #0
- mov r8, r2
- mov sb, r3
- movs r7, #0
- movs r6, #0
- ldrh r0, [r4, #0x2a]
- movs r1, #0xe
- ands r1, r0
- mov ip, r1
- movs r2, #0xe0
- lsls r2, r2, #4
- ands r2, r0
- adds r3, r2, #0
- cmp r1, #0
- beq _080AEEC0
- cmp r2, #0
- bne _080AEF5A
-_080AEEC0:
- orrs r1, r2
- cmp r1, #0
- bne _080AEEE4
- ldr r1, _080AEEE0 @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r2, #0
- ldrsh r0, [r0, r2]
- adds r7, r0, #0
- muls r7, r5, r7
- ldr r0, [r4, #0x30]
- subs r0, r0, r7
- str r0, [r4, #0x30]
- b _080AEF46
- .align 2, 0
-_080AEEE0: .4byte gSineTable
-_080AEEE4:
- mov r2, ip
- cmp r2, #4
- bne _080AEEFE
- lsls r7, r5, #8
- ldr r0, [r4, #0x2c]
- subs r0, r0, r7
- str r0, [r4, #0x2c]
- adds r0, r4, #0
- movs r1, #0x1c
- mov r2, sb
- bl sub_080AE58C
- b _080AEF18
-_080AEEFE:
- movs r0, #0x80
- lsls r0, r0, #3
- cmp r3, r0
- bne _080AEF18
- lsls r7, r5, #8
- ldr r0, [r4, #0x30]
- subs r0, r0, r7
- str r0, [r4, #0x30]
- adds r0, r4, #0
- movs r1, #0x1c
- mov r2, sb
- bl sub_080AE58C
-_080AEF18:
- ldrh r2, [r4, #0x2a]
- movs r0, #0xe
- ands r0, r2
- cmp r0, #0
- bne _080AEF3A
- ldr r1, _080AEF70 @ =gSineTable
- mov r0, r8
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x30]
- subs r0, r0, r6
- str r0, [r4, #0x30]
-_080AEF3A:
- movs r0, #0xe0
- lsls r0, r0, #4
- ands r0, r2
- cmp r0, #0
- bne _080AEF5A
- ldr r1, _080AEF70 @ =gSineTable
-_080AEF46:
- mov r2, r8
- lsls r0, r2, #1
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r6, r0, #0
- muls r6, r5, r6
- ldr r0, [r4, #0x2c]
- adds r0, r0, r6
- str r0, [r4, #0x2c]
-_080AEF5A:
- ldr r2, _080AEF74 @ =0x00003333
- adds r0, r7, r2
- ldr r1, _080AEF78 @ =0x00006665
- cmp r0, r1
- bhi _080AEF7C
- ldr r2, _080AEF74 @ =0x00003333
- adds r0, r6, r2
- cmp r0, r1
- bhi _080AEF7C
- movs r0, #0
- b _080AEF7E
- .align 2, 0
-_080AEF70: .4byte gSineTable
-_080AEF74: .4byte 0x00003333
-_080AEF78: .4byte 0x00006665
-_080AEF7C:
- movs r0, #1
-_080AEF7E:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start ProcessMovement
-ProcessMovement: @ 0x080AEF88
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AEFB0
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #0
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #0
- bl sub_080AE7E8
- b _080AEFB2
-_080AEFB0:
- movs r0, #0
-_080AEFB2:
- pop {r4, pc}
-
- thumb_func_start sub_080AEFB4
-sub_080AEFB4: @ 0x080AEFB4
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AEFDC
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #1
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #1
- bl sub_080AE7E8
- b _080AEFDE
-_080AEFDC:
- movs r0, #0
-_080AEFDE:
- pop {r4, pc}
-
- thumb_func_start sub_080AEFE0
-sub_080AEFE0: @ 0x080AEFE0
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AF008
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #2
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #2
- bl sub_080AE7E8
- b _080AF00A
-_080AF008:
- movs r0, #0
-_080AF00A:
- pop {r4, pc}
-
- thumb_func_start sub_080AF00C
-sub_080AF00C: @ 0x080AF00C
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AF034
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #0xa
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #0xa
- bl sub_080AE7E8
- b _080AF036
-_080AF034:
- movs r0, #0
-_080AF036:
- pop {r4, pc}
-
- thumb_func_start sub_080AF038
-sub_080AF038: @ 0x080AF038
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AF060
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #0xc
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #0xc
- bl sub_080AE7E8
- b _080AF062
-_080AF060:
- movs r0, #0
-_080AF062:
- pop {r4, pc}
-
- thumb_func_start sub_080AF064
-sub_080AF064: @ 0x080AF064
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- movs r0, #0x80
- ands r0, r4
- cmp r0, #0
- bne _080AF08A
- adds r0, r5, #0
- movs r2, #0
- bl sub_080AE58C
- adds r0, r5, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #0
- bl sub_080AE7E8
- b _080AF08C
-_080AF08A:
- movs r0, #0
-_080AF08C:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_080AF090
-sub_080AF090: @ 0x080AF090
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AF0C2
- adds r0, r4, #0
- bl sub_080AF0C8
- cmp r0, #0
- bne _080AF0C2
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #3
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #3
- bl sub_080AE7E8
- b _080AF0C4
-_080AF0C2:
- movs r0, #0
-_080AF0C4:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_080AF0C8
-sub_080AF0C8: @ 0x080AF0C8
- push {r4, lr}
- adds r4, r0, #0
- bl GetTileTypeByEntity
- cmp r0, #0x88
- beq _080AF10A
- cmp r0, #0x88
- bhi _080AF0DE
- cmp r0, #0x87
- beq _080AF0E8
- b _080AF130
-_080AF0DE:
- cmp r0, #0x89
- beq _080AF11A
- cmp r0, #0x8a
- beq _080AF0F8
- b _080AF130
-_080AF0E8:
- ldrb r0, [r4, #0x15]
- adds r0, #7
- movs r1, #0x1f
- ands r0, r1
- cmp r0, #0xf
- bgt _080AF130
- movs r0, #0xe
- b _080AF12A
-_080AF0F8:
- ldrb r0, [r4, #0x15]
- subs r0, #1
- movs r1, #0x1f
- ands r0, r1
- cmp r0, #0xf
- bgt _080AF130
- movs r0, #0xe0
- lsls r0, r0, #8
- b _080AF12A
-_080AF10A:
- ldrb r0, [r4, #0x15]
- subs r0, #9
- movs r1, #0x1f
- ands r0, r1
- cmp r0, #0xf
- bgt _080AF130
- movs r0, #0xe0
- b _080AF12A
-_080AF11A:
- ldrb r0, [r4, #0x15]
- subs r0, #0x11
- movs r1, #0x1f
- ands r0, r1
- cmp r0, #0xf
- bgt _080AF130
- movs r0, #0xe0
- lsls r0, r0, #4
-_080AF12A:
- strh r0, [r4, #0x2a]
- movs r0, #1
- b _080AF132
-_080AF130:
- movs r0, #0
-_080AF132:
- pop {r4, pc}
-
- thumb_func_start sub_080AF134
-sub_080AF134: @ 0x080AF134
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AF15C
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #4
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #4
- bl sub_080AE7E8
- b _080AF15E
-_080AF15C:
- movs r0, #0
-_080AF15E:
- pop {r4, pc}
-
- thumb_func_start sub_080AF160
-sub_080AF160: @ 0x080AF160
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AF188
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #5
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #5
- bl sub_080AE7E8
- b _080AF18A
-_080AF188:
- movs r0, #0
-_080AF18A:
- pop {r4, pc}
-
- thumb_func_start Knockback1
-Knockback1: @ 0x080AF18C
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r1, r4, #0
- adds r1, #0x42
- ldrb r0, [r1]
- subs r0, #1
- strb r0, [r1]
- adds r5, r4, #0
- adds r5, #0x3e
- ldrb r1, [r5]
- adds r0, r4, #0
- movs r2, #2
- bl sub_080AE58C
- adds r0, r4, #0
- adds r0, #0x46
- ldrh r1, [r0]
- ldrb r2, [r5]
- adds r0, r4, #0
- movs r3, #2
- bl sub_080AE7E8
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start Knockback2
-Knockback2: @ 0x080AF1BC
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r1, r4, #0
- adds r1, #0x42
- ldrb r0, [r1]
- subs r0, #1
- strb r0, [r1]
- adds r5, r4, #0
- adds r5, #0x3e
- ldrb r1, [r5]
- adds r0, r4, #0
- movs r2, #1
- bl sub_080AE58C
- adds r0, r4, #0
- adds r0, #0x46
- ldrh r1, [r0]
- ldrb r2, [r5]
- adds r0, r4, #0
- movs r3, #1
- bl sub_080AE7E8
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_080AF1EC
-sub_080AF1EC: @ 0x080AF1EC
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x15]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _080AF214
- ldrb r1, [r4, #0x15]
- adds r0, r4, #0
- movs r2, #6
- bl sub_080AE58C
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- movs r3, #6
- bl sub_080AE7E8
- b _080AF216
-_080AF214:
- movs r0, #0
-_080AF216:
- pop {r4, pc}
-
- thumb_func_start sub_080AF218
-sub_080AF218: @ 0x080AF218
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- movs r0, #0x80
- ands r0, r4
- cmp r0, #0
- bne _080AF23E
- adds r0, r5, #0
- movs r2, #6
- bl sub_080AE58C
- adds r0, r5, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE7E8
- b _080AF240
-_080AF23E:
- movs r0, #0
-_080AF240:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_080AF244
-sub_080AF244: @ 0x080AF244
- push {lr}
- movs r3, #2
- bl sub_080AE7E8
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_080AF250
-sub_080AF250: @ 0x080AF250
- push {r4, lr}
- adds r4, r0, #0
- bl GetCurrentRoomInfo
- adds r1, r0, #0
- ldr r0, _080AF26C @ =gArea
- ldr r2, _080AF270 @ =0x0000085C
- adds r0, r0, r2
- str r1, [r0]
- cmp r4, #0
- beq _080AF278
- ldr r0, _080AF274 @ =gUnk_08135190
- b _080AF27A
- .align 2, 0
-_080AF26C: .4byte gArea
-_080AF270: .4byte 0x0000085C
-_080AF274: .4byte gUnk_08135190
-_080AF278:
- ldr r0, _080AF280 @ =gExitList_RoyalValley_ForestMaze
-_080AF27A:
- str r0, [r1, #0x18]
- pop {r4, pc}
- .align 2, 0
-_080AF280: .4byte gExitList_RoyalValley_ForestMaze
-
- thumb_func_start sub_080AF284
-sub_080AF284: @ 0x080AF284
- push {lr}
- ldr r0, _080AF2AC @ =gRoomControls
- ldrh r1, [r0, #0x20]
- subs r1, #0x50
- movs r0, #0x78
- movs r2, #0x78
- movs r3, #0x50
- bl CheckPlayerInRegion
- cmp r0, #0
- beq _080AF2BC
- bl GetCurrentRoomInfo
- ldr r1, _080AF2B0 @ =gArea
- ldr r2, _080AF2B4 @ =0x0000085C
- adds r1, r1, r2
- str r0, [r1]
- ldr r1, _080AF2B8 @ =gUnk_08135048
- b _080AF2D4
- .align 2, 0
-_080AF2AC: .4byte gRoomControls
-_080AF2B0: .4byte gArea
-_080AF2B4: .4byte 0x0000085C
-_080AF2B8: .4byte gUnk_08135048
-_080AF2BC:
- movs r0, #6
- bl GetInventoryValue
- cmp r0, #0
- beq _080AF2D6
- bl GetCurrentRoomInfo
- ldr r1, _080AF2D8 @ =gArea
- ldr r2, _080AF2DC @ =0x0000085C
- adds r1, r1, r2
- str r0, [r1]
- ldr r1, _080AF2E0 @ =gUnk_08134FBC
-_080AF2D4:
- str r1, [r0, #0x18]
-_080AF2D6:
- pop {pc}
- .align 2, 0
-_080AF2D8: .4byte gArea
-_080AF2DC: .4byte 0x0000085C
-_080AF2E0: .4byte gUnk_08134FBC
-
- thumb_func_start sub_080AF2E4
-sub_080AF2E4: @ 0x080AF2E4
- push {lr}
- movs r0, #6
- bl GetInventoryValue
- cmp r0, #0
- beq _080AF300
- bl GetCurrentRoomInfo
- ldr r1, _080AF304 @ =gArea
- ldr r2, _080AF308 @ =0x0000085C
- adds r1, r1, r2
- str r0, [r1]
- ldr r1, _080AF30C @ =gUnk_0813A76C
- str r1, [r0, #0x18]
-_080AF300:
- pop {pc}
- .align 2, 0
-_080AF304: .4byte gArea
-_080AF308: .4byte 0x0000085C
-_080AF30C: .4byte gUnk_0813A76C
diff --git a/asm/non_matching/armos/sub_080305BC.inc b/asm/non_matching/armos/sub_080305BC.inc
index 1267ed9d..f1259e5b 100644
--- a/asm/non_matching/armos/sub_080305BC.inc
+++ b/asm/non_matching/armos/sub_080305BC.inc
@@ -32,7 +32,7 @@ _080305E4:
cmp r0, #0
bne _08030608
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
cmp r0, #0
bne _0803064A
ldrb r0, [r4, #0x15]
@@ -59,7 +59,7 @@ _0803061E:
cmp r3, #0
bne _08030638
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
cmp r0, #0
bne _0803064A
ldrb r0, [r4, #0x15]
diff --git a/asm/non_matching/armos/sub_080306C4.inc b/asm/non_matching/armos/sub_080306C4.inc
index a57b4080..f5a094d8 100644
--- a/asm/non_matching/armos/sub_080306C4.inc
+++ b/asm/non_matching/armos/sub_080306C4.inc
@@ -93,7 +93,7 @@ _08030758:
adds r2, r2, r0
mov r0, ip
movs r3, #0
- bl sub_080AE4CC
+ bl IsTileCollision
cmp r0, #0
beq _0803079E
movs r0, #4
diff --git a/asm/non_matching/fallingBoulder/sub_0802C334.inc b/asm/non_matching/fallingBoulder/sub_0802C334.inc
index 50161c05..3c67cf6b 100644
--- a/asm/non_matching/fallingBoulder/sub_0802C334.inc
+++ b/asm/non_matching/fallingBoulder/sub_0802C334.inc
@@ -148,7 +148,7 @@ _0802C442:
cmp r5, #4
ble _0802C460
adds r0, r4, #0
- bl sub_080AEFB4
+ bl ProcessMovement1
b _0802C48C
.align 2, 0
_0802C45C: .4byte gRoomControls
diff --git a/asm/non_matching/guardWithSpear/sub_0806407C.inc b/asm/non_matching/guardWithSpear/sub_0806407C.inc
index 21843fdf..97ecad24 100644
--- a/asm/non_matching/guardWithSpear/sub_0806407C.inc
+++ b/asm/non_matching/guardWithSpear/sub_0806407C.inc
@@ -75,7 +75,7 @@ _080640E8:
bl InitializeAnimation
_0806410A:
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
movs r0, #0x2e
ldrsh r1, [r4, r0]
adds r2, r4, #0
diff --git a/asm/non_matching/guardWithSpear/sub_08064198.inc b/asm/non_matching/guardWithSpear/sub_08064198.inc
index 89fc6a7f..62c0c2e0 100644
--- a/asm/non_matching/guardWithSpear/sub_08064198.inc
+++ b/asm/non_matching/guardWithSpear/sub_08064198.inc
@@ -49,7 +49,7 @@ _080641E6:
movs r0, #0x32
ldrsh r4, [r5, r0]
adds r0, r5, #0
- bl ProcessMovement
+ bl ProcessMovement0
movs r1, #0x32
ldrsh r0, [r5, r1]
adds r6, r5, #0
diff --git a/asm/non_matching/guardWithSpear/sub_080642B8.inc b/asm/non_matching/guardWithSpear/sub_080642B8.inc
index cf29a63e..3d4a9531 100644
--- a/asm/non_matching/guardWithSpear/sub_080642B8.inc
+++ b/asm/non_matching/guardWithSpear/sub_080642B8.inc
@@ -49,7 +49,7 @@ _08064306:
movs r0, #0x2e
ldrsh r4, [r5, r0]
adds r0, r5, #0
- bl ProcessMovement
+ bl ProcessMovement0
movs r1, #0x2e
ldrsh r0, [r5, r1]
adds r6, r5, #0
diff --git a/asm/non_matching/kid/sub_08062948.inc b/asm/non_matching/kid/sub_08062948.inc
index 6e77f2ee..e751a7c0 100644
--- a/asm/non_matching/kid/sub_08062948.inc
+++ b/asm/non_matching/kid/sub_08062948.inc
@@ -75,7 +75,7 @@ _080629B4:
strh r1, [r0]
_080629D2:
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
movs r3, #0x2e
ldrsh r1, [r4, r3]
adds r2, r4, #0
diff --git a/asm/non_matching/lilypadLarge/sub_080855E8.inc b/asm/non_matching/lilypadLarge/sub_080855E8.inc
index 99680726..36a3e7e8 100644
--- a/asm/non_matching/lilypadLarge/sub_080855E8.inc
+++ b/asm/non_matching/lilypadLarge/sub_080855E8.inc
@@ -389,7 +389,7 @@ _080858E0:
adds r0, r7, #0
bl sub_08085EFC
adds r0, r7, #0
- bl sub_080AF134
+ bl ProcessMovement4
ldr r1, [r7, #0x54]
ldr r0, [r7, #0x2c]
cmp r1, r0
diff --git a/asm/non_matching/movement/sub_080AE58C.inc b/asm/non_matching/movement/CalculateEntityTileCollisions.inc
index 473e2121..4c7223d6 100644
--- a/asm/non_matching/movement/sub_080AE58C.inc
+++ b/asm/non_matching/movement/CalculateEntityTileCollisions.inc
@@ -49,7 +49,7 @@
adds r1, r7, #0
mov r2, sl
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
adds r6, r0, #0
lsls r6, r6, #1
mov r2, sl
@@ -57,7 +57,7 @@
adds r0, r5, #0
adds r1, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
mov r0, sl
@@ -66,7 +66,7 @@
adds r0, r5, #0
adds r1, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #6
b _080AE6D2
@@ -80,7 +80,7 @@ _080AE628:
adds r1, r7, #0
mov r2, sl
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
adds r6, r0, #0
lsls r6, r6, #1
mov r2, sl
@@ -88,7 +88,7 @@ _080AE628:
adds r0, r5, #0
adds r1, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
mov r1, sl
@@ -104,7 +104,7 @@ _080AE65C:
adds r1, r7, #0
mov r2, sl
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
adds r6, r0, #0
lsls r6, r6, #1
mov r1, sl
@@ -114,7 +114,7 @@ _080AE65C:
adds r1, r7, #0
ldr r2, [sp, #0x10]
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
mov r2, sl
@@ -124,7 +124,7 @@ _080AE65C:
adds r0, r5, #0
adds r1, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #2
ldr r1, [sp, #0xc]
@@ -134,14 +134,14 @@ _080AE65C:
adds r1, r7, #0
mov r2, sl
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
adds r0, r5, #0
adds r1, r7, #0
ldr r2, [sp, #0x10]
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
adds r0, r5, #0
@@ -149,7 +149,7 @@ _080AE65C:
mov r2, r8
_080AE6C8:
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #2
_080AE6D2:
@@ -174,7 +174,7 @@ _080AE6D2:
ldr r1, [sp, #0xc]
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
ldr r1, [sp, #0xc]
@@ -182,7 +182,7 @@ _080AE6D2:
adds r0, r5, #0
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
ldr r0, [sp, #0xc]
@@ -191,7 +191,7 @@ _080AE6D2:
adds r0, r5, #0
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #5
b _080AE7D6
@@ -204,7 +204,7 @@ _080AE72C:
ldr r1, [sp, #0xc]
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
ldr r1, [sp, #0xc]
@@ -212,7 +212,7 @@ _080AE72C:
adds r0, r5, #0
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
ldr r2, [sp, #0xc]
@@ -227,7 +227,7 @@ _080AE760:
ldr r1, [sp, #0xc]
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
ldr r1, [sp, #0xc]
@@ -236,7 +236,7 @@ _080AE760:
adds r0, r5, #0
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
ldr r2, [sp, #0xc]
@@ -247,7 +247,7 @@ _080AE760:
mov r1, sb
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #2
mov r1, sl
@@ -257,14 +257,14 @@ _080AE760:
ldr r1, [sp, #0xc]
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
adds r0, r5, #0
ldr r1, [sp, #0x14]
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
adds r0, r5, #0
@@ -272,7 +272,7 @@ _080AE760:
_080AE7CA:
adds r2, r7, #0
adds r3, r4, #0
- bl sub_080AE4CC
+ bl IsTileCollision
orrs r6, r0
lsls r6, r6, #1
_080AE7D6:
diff --git a/asm/non_matching/movement/sub_080AE8D8.inc b/asm/non_matching/movement/MoveNorthEast.inc
index b64862cb..65a3ffcc 100644
--- a/asm/non_matching/movement/sub_080AE8D8.inc
+++ b/asm/non_matching/movement/MoveNorthEast.inc
@@ -51,7 +51,7 @@ _080AE928:
adds r0, r4, #0
movs r1, #4
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
b _080AE95C
_080AE942:
movs r0, #0x80
@@ -65,7 +65,7 @@ _080AE942:
adds r0, r4, #0
movs r1, #4
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
_080AE95C:
ldrh r2, [r4, #0x2a]
movs r0, #0xe
diff --git a/asm/non_matching/movement/sub_080AEE94.inc b/asm/non_matching/movement/MoveNorthWest.inc
index e89cd5df..b6ab895b 100644
--- a/asm/non_matching/movement/sub_080AEE94.inc
+++ b/asm/non_matching/movement/MoveNorthWest.inc
@@ -51,7 +51,7 @@ _080AEEE4:
adds r0, r4, #0
movs r1, #0x1c
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
b _080AEF18
_080AEEFE:
movs r0, #0x80
@@ -65,7 +65,7 @@ _080AEEFE:
adds r0, r4, #0
movs r1, #0x1c
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
_080AEF18:
ldrh r2, [r4, #0x2a]
movs r0, #0xe
diff --git a/asm/non_matching/movement/sub_080AEAC0.inc b/asm/non_matching/movement/MoveSouthEast.inc
index 84078299..d497d4e9 100644
--- a/asm/non_matching/movement/sub_080AEAC0.inc
+++ b/asm/non_matching/movement/MoveSouthEast.inc
@@ -51,7 +51,7 @@ _080AEB10:
adds r0, r4, #0
movs r1, #0xc
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
b _080AEB44
_080AEB2A:
movs r0, #0x80
@@ -65,7 +65,7 @@ _080AEB2A:
adds r0, r4, #0
movs r1, #0xc
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
_080AEB44:
ldrh r2, [r4, #0x2a]
movs r0, #0xe0
diff --git a/asm/non_matching/movement/sub_080AECAC.inc b/asm/non_matching/movement/MoveSouthWest.inc
index edc8ed93..563fe38c 100644
--- a/asm/non_matching/movement/sub_080AECAC.inc
+++ b/asm/non_matching/movement/MoveSouthWest.inc
@@ -51,7 +51,7 @@ _080AECFC:
adds r0, r4, #0
movs r1, #0x14
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
b _080AED30
_080AED16:
movs r0, #0x80
@@ -65,7 +65,7 @@ _080AED16:
adds r0, r4, #0
movs r1, #0x14
mov r2, sb
- bl sub_080AE58C
+ bl CalculateEntityTileCollisions
_080AED30:
ldrh r2, [r4, #0x2a]
movs r0, #0xe0
diff --git a/asm/non_matching/npc5/sub_08060FD0.inc b/asm/non_matching/npc5/sub_08060FD0.inc
index 4e81f326..a86ce611 100644
--- a/asm/non_matching/npc5/sub_08060FD0.inc
+++ b/asm/non_matching/npc5/sub_08060FD0.inc
@@ -64,7 +64,7 @@ _08061040:
adds r1, r5, #0
adds r2, r4, #0
movs r3, #6
- bl sub_080AE4CC
+ bl IsTileCollision
cmp r0, #0
beq _08061064
movs r0, #0
diff --git a/asm/non_matching/npc5/sub_08061170.inc b/asm/non_matching/npc5/sub_08061170.inc
index fe9d7f84..566b0b23 100644
--- a/asm/non_matching/npc5/sub_08061170.inc
+++ b/asm/non_matching/npc5/sub_08061170.inc
@@ -5,7 +5,7 @@
adds r4, r0, #0
bl UpdateAnimationSingleFrame
adds r0, r4, #0
- bl sub_080AF1EC
+ bl ProcessMovement6
cmp r0, #0
bne _080611CA
adds r0, r4, #0
diff --git a/asm/non_matching/playerItem10/sub_080ACDB0.inc b/asm/non_matching/playerItem10/sub_080ACDB0.inc
index 663ffea1..cf9b7271 100644
--- a/asm/non_matching/playerItem10/sub_080ACDB0.inc
+++ b/asm/non_matching/playerItem10/sub_080ACDB0.inc
@@ -127,7 +127,7 @@ _080ACE90:
strh r1, [r4, #0x24]
_080ACEA4:
adds r0, r4, #0
- bl sub_080AEFB4
+ bl ProcessMovement1
b _080ACEB6
.align 2, 0
_080ACEAC: .4byte gUnk_0812AAE8
diff --git a/asm/non_matching/playerItem13/sub_080AD040.inc b/asm/non_matching/playerItem13/sub_080AD040.inc
index 21e62945..9a53727b 100644
--- a/asm/non_matching/playerItem13/sub_080AD040.inc
+++ b/asm/non_matching/playerItem13/sub_080AD040.inc
@@ -66,7 +66,7 @@ _080AD0B4:
cmp r0, #0x26
beq _080AD0C8
adds r0, r4, #0
- bl sub_080AF00C
+ bl ProcessMovement10
_080AD0C8:
movs r1, #0x80
lsls r1, r1, #6
diff --git a/asm/non_matching/ropeGolden/sub_08038304.inc b/asm/non_matching/ropeGolden/sub_08038304.inc
index 46f0703e..c0743c49 100644
--- a/asm/non_matching/ropeGolden/sub_08038304.inc
+++ b/asm/non_matching/ropeGolden/sub_08038304.inc
@@ -9,7 +9,7 @@
movs r1, #2
bl UpdateAnimationVariableFrames
adds r0, r4, #0
- bl ProcessMovement
+ bl ProcessMovement0
cmp r0, #0
bne _08038334
adds r0, r4, #0
diff --git a/asm/object/fairy.s b/asm/object/fairy.s
index c5ddf035..9ef7cce9 100644
--- a/asm/object/fairy.s
+++ b/asm/object/fairy.s
@@ -334,7 +334,7 @@ _0808D8EE:
strb r0, [r4, #0x18]
_0808D910:
adds r0, r4, #0
- bl sub_080AEFB4
+ bl ProcessMovement1
bl AnyPrioritySet
cmp r0, #0
bne _0808D954
diff --git a/asm/object/fan.s b/asm/object/fan.s
index 42657bff..83e95e44 100644
--- a/asm/object/fan.s
+++ b/asm/object/fan.s
@@ -212,7 +212,7 @@ _0809EFE6:
adds r1, r6, #0
adds r2, r5, #0
movs r3, #9
- bl sub_080AE4CC
+ bl IsTileCollision
cmp r0, #0
beq _0809EFE6
subs r0, r7, #1
diff --git a/asm/object/object1F.s b/asm/object/object1F.s
index 9f65249f..6147f3bb 100644
--- a/asm/object/object1F.s
+++ b/asm/object/object1F.s
@@ -135,7 +135,7 @@ sub_0808776C: @ 0x0808776C
_08087784: .4byte gPlayerState
_08087788:
adds r0, r4, #0
- bl sub_080AEFE0
+ bl ProcessMovement2
movs r1, #0xa0
lsls r1, r1, #6
adds r0, r4, #0
diff --git a/asm/object/objectA8.s b/asm/object/objectA8.s
index 2ccbef65..69bbbe08 100644
--- a/asm/object/objectA8.s
+++ b/asm/object/objectA8.s
@@ -276,7 +276,7 @@ _0809FC8A:
strb r0, [r4, #0x18]
_0809FCAC:
adds r0, r4, #0
- bl sub_080AEFB4
+ bl ProcessMovement1
bl AnyPrioritySet
cmp r0, #0
bne _0809FCF8
diff --git a/data/const/movement.s b/data/const/movement.s
index 837ad6a0..e85c3236 100644
--- a/data/const/movement.s
+++ b/data/const/movement.s
@@ -12,82 +12,3 @@ gUnk_08133368:: @ 08133368
.else
.incbin "data_08132B30/gUnk_08133368_1_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
-
-gUnk_08133918:: @ 08133918
- .incbin "data_08132B30/gUnk_08133918.bin"
-
-gUnk_08133938:: @ 08133938
- .incbin "data_08132B30/gUnk_08133938.bin"
-
-gUnk_08133958:: @ 08133958
- .incbin "data_08132B30/gUnk_08133958.bin"
-
-gUnk_08133978:: @ 08133978
- .incbin "data_08132B30/gUnk_08133978.bin"
-
-gUnk_08133998:: @ 08133998
- .incbin "data_08132B30/gUnk_08133998.bin"
-
-gUnk_081339B8:: @ 081339B8
- .incbin "data_08132B30/gUnk_081339B8.bin"
-
-gUnk_081339D8:: @ 081339D8
- .incbin "data_08132B30/gUnk_081339D8.bin"
-
-gUnk_081339F8:: @ 081339F8
- .incbin "data_08132B30/gUnk_081339F8.bin"
-
-gUnk_08133A18:: @ 08133A18
- .4byte sub_080AE3E4
- .4byte sub_080AE3E8
- .4byte sub_080AE3EC
- .4byte sub_080AE408
- .4byte sub_080AE424
- .4byte sub_080AE440
- .4byte sub_080AE45C
- .4byte sub_080AE478
- .4byte sub_080AE494
- .4byte sub_080AE4B0
-
-gUnk_08133A40:: @ 08133A40
- .incbin "data_08132B30/gUnk_08133A40.bin"
-
-gUnk_08133A5A:: @ 08133A5A
- .incbin "data_08132B30/gUnk_08133A5A.bin"
-
-gUnk_08133A67:: @ 08133A67
- .incbin "data_08132B30/gUnk_08133A67.bin"
-
-gUnk_08133F48:: @ 08133F48
- .4byte sub_080AE800
- .4byte sub_080AE8D8
- .4byte sub_080AE8D8
- .4byte sub_080AE8D8
- .4byte sub_080AE8D8
- .4byte sub_080AE8D8
- .4byte sub_080AE8D8
- .4byte sub_080AE8D8
- .4byte sub_080AE9CC
- .4byte sub_080AEAC0
- .4byte sub_080AEAC0
- .4byte sub_080AEAC0
- .4byte sub_080AEAC0
- .4byte sub_080AEAC0
- .4byte sub_080AEAC0
- .4byte sub_080AEAC0
- .4byte sub_080AEBB4
- .4byte sub_080AECAC
- .4byte sub_080AECAC
- .4byte sub_080AECAC
- .4byte sub_080AECAC
- .4byte sub_080AECAC
- .4byte sub_080AECAC
- .4byte sub_080AECAC
- .4byte sub_080AEDA0
- .4byte sub_080AEE94
- .4byte sub_080AEE94
- .4byte sub_080AEE94
- .4byte sub_080AEE94
- .4byte sub_080AEE94
- .4byte sub_080AEE94
- .4byte sub_080AEE94
diff --git a/include/entity.h b/include/entity.h
index 5250e464..fa28adf4 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -66,9 +66,13 @@ typedef enum {
/** Direction. */
typedef enum {
DirectionNorth = 0x00, /**< North. */
+ DirectionNorthEast = 0x04, /**< North East. */
DirectionEast = 0x08, /**< East. */
+ DirectionSouthEast = 0x0c, /**< South East. */
DirectionSouth = 0x10, /**< South. */
+ DirectionSouthWest = 0x14, /**< South West. */
DirectionWest = 0x18, /**< West. */
+ DirectionNorthWest = 0x1c, /**< North West. */
} Direction;
typedef struct {
@@ -182,7 +186,7 @@ typedef struct Entity_ {
/*0x43*/ u8 confusedTime; /**< Frames that this Entity is confused. */
/*0x44*/ u8 damage; /**< Damage this Entity inflicts. */
/*0x45*/ u8 health; /**< Health of this Entity. */
- /*0x46*/ u16 field_0x46;
+ /*0x46*/ u16 knockbackSpeed; /**< How fast this Entity is knocked back. */
/*0x48*/ Hitbox* hitbox; /**< Hitbox associated with this Entity. */
/*0x4c*/ struct Entity_* field_0x4c;
/*0x50*/ struct Entity_* parent; /**< Parent Entity. Sometimes points to associated data. */
@@ -271,7 +275,7 @@ u8* GetSpriteSubEntryOffsetDataPointer(u32, u32);
*/
u32 GetFacingDirection(Entity* origin, Entity* target);
-u32 ProcessMovement(Entity*);
+bool32 ProcessMovement0(Entity*);
/// @{
/**
diff --git a/include/functions.h b/include/functions.h
index d2ac1878..44b14c4d 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -13,169 +13,201 @@
#include "map.h"
// Identified - to be sorted into header files
-extern void SetDirtTile(u32);
+extern void CalculateEntityTileCollisions(Entity*, u32, u32);
+extern void CopyOAM(void);
+extern void CreateChestSpawner(Entity*);
+extern void CreateItemOnGround(Entity*);
+extern void CreateRandomItemDrop(Entity*, s32);
+extern void DrawDirect(u32, u32); // trampoline to sub_080B27F4
+extern void DrawEntities(void);
+extern void DrawOAMCmd(void);
+extern void EnemyFunctionHandlerAfterCollision(Entity*, void (*const[])());
+extern u32 EntityWithinDistance(Entity*, s32, s32, s32);
+extern void FlushSprites(void);
+extern void GenericKnockback2(Entity*);
+extern LayerStruct* GetLayerByIndex(u32);
+extern u32 GetTileIndex(u32, u32);
+extern u32 IsColliding(Entity*, Entity*);
+extern u32 IsColliding(Entity*, Entity*);
+extern u32 IsCollidingPlayer(Entity*);
+extern bool32 IsProjectileOffScreen(Entity*);
+extern bool32 IsTileCollision(u8*, s32, s32, u32);
+extern void LinearMoveAngle(Entity*, u32, u32);
+extern void LinearMoveDirection(Entity*, u32, u32);
extern bool32 LoadFixedGFX(Entity*, u32);
+extern bool32 LoadSwapGFX(Entity*, u16, u32);
extern void MenuFadeIn(u32, u32);
+extern u32 PlayerInRange(Entity*, u32, u32);
+extern u32 PlayerInRange(Entity*, u32, u32);
+extern bool32 ProcessMovement1(Entity*);
+extern bool32 ProcessMovement12(Entity*);
+extern bool32 ProcessMovement2(Entity*);
+extern bool32 ProcessMovement3(Entity*);
+extern bool32 ProcessMovement4(Entity*);
+extern bool32 ProcessMovement5(Entity*);
+extern bool32 ProcessMovement6(Entity*);
+extern bool32 ProcessMovementInternal(Entity*, s32, s32, u32);
+extern void SetDirtTile(u32);
+extern void SoundReqClipped(Entity*, u32);
+extern void SoundReqClipped(Entity*, u32);
+extern void SoundReqClipped(Entity*, u32);
extern void TryLoadPrologueHyruleTown(void);
-extern void FlushSprites(void);
+extern void UnloadOBJPalette(Entity*);
+extern void UpdateItemAnim(ItemBehavior*);
// Unidentified
-extern void sub_0805EC9C(Entity*, u32, u32, u32);
-extern void sub_0805EC60(Entity*);
-extern void sub_0806D0B0(Entity*);
-extern void sub_0806D02C(Entity*);
-extern void sub_0806FD3C(Entity*);
-extern void sub_0805ED14(u32*);
-extern void sub_080A7C18(u32, u32, u32);
-extern void EnemyFunctionHandlerAfterCollision(Entity*, void (*const[])());
-extern void sub_0804A720(Entity*);
-extern u32 sub_080AEFE0(Entity*);
-extern u32 sub_08049FA0(Entity*);
-extern u32 sub_08049FDC(Entity*, u32);
-extern u32 sub_08049EE4(Entity*);
-extern void sub_08077E54(ItemBehavior*);
+extern void sub_08000148(u32, u32, u32);
+extern u32 sub_080002A8(u32, u32, u32);
+extern u32 sub_080002B4(Entity*, u32, u32);
+extern u32 sub_080002B8(Entity*);
+extern u32 sub_080002C8(u16, u8);
+extern u32 sub_080002CC(Entity*, s32, s32);
+extern u32 sub_080002D4(s32, s32, u32);
+extern u32 sub_080002E0(u32, u32);
+extern s32 sub_080012DC(Entity*);
+extern u32 sub_0800132C(Entity*, Entity*);
+extern u32 sub_080040A2(Entity*);
+extern u32 sub_080040D8(Entity*, u8*, s32, s32);
+extern void sub_08004168(Entity*);
+extern u32 sub_0800419C(Entity*, Entity*, u32, u32);
+extern u32 sub_080041DC(Entity*, u32, u32);
extern void sub_080042BA(Entity*, u32);
-extern bool32 sub_08077F24(ItemBehavior*, u32);
-extern void sub_08079184();
-extern void sub_08077F50(ItemBehavior* beh, u32 arg1);
-extern void sub_0807AA80(Entity*);
-extern s32 sub_0807887C(Entity*, u32, u32);
-extern s32 sub_08078904();
-extern void DrawEntities(void);
-extern void CopyOAM(void);
+extern void sub_080042D0(Entity*, u32, u16);
+extern void sub_080043A8(Entity*);
+extern u32 sub_0800445C(Entity*);
+extern void sub_080044AE(Entity*, u32, u32);
+extern u32 sub_080044EC(Entity*, u32);
+extern void sub_0800451C(Entity*);
+extern void sub_08004542(Entity*);
+extern void sub_080085B0(Entity*);
+extern void sub_08008796(Entity*, u32, u32, u32);
+extern void sub_08016AD2(Entity*);
+extern u32 sub_0801766C(Entity*);
+extern void sub_0801AF18(u8*, u32, u32);
+extern void sub_0801AFE4(void);
+extern void sub_0801C1D4(void);
extern void sub_0801E104(void);
-extern void sub_080A57F4(void);
extern void sub_08030118(u32);
+extern u32 sub_08031E04(Entity*);
+extern void sub_08031E48(Entity*, Entity*);
+extern void sub_08032290(Entity*);
+extern u32 sub_080322A4(Entity*);
+extern void sub_080322E8(Entity*);
+extern void sub_08032338(Entity*);
+extern void sub_0803C0AC(Entity*);
+extern Entity* sub_08049DF4(u32);
+extern u32 sub_08049EE4(Entity*);
+extern u32 sub_08049F1C(Entity*, Entity*, u32);
+extern u32 sub_08049F84(Entity*, u32);
+extern u32 sub_08049FA0(Entity*);
+extern u32 sub_08049FDC(Entity*, u32);
+extern u32 sub_0804A044(Entity*, Entity*, u32);
+extern void sub_0804A720(Entity*);
+extern void sub_0804AA1C(Entity*);
+extern void sub_0804C128();
+extern u32 sub_080542AC(u32);
+extern void sub_08054564();
+extern void sub_08054570(void);
+extern s32 sub_08056338(void);
extern void sub_080575C8(u32);
extern void sub_08057688(void);
extern void sub_080580B0(u32);
-extern void sub_080751E8(u32, u32, void*);
-extern void sub_0808091C(const ScreenTransitionData*, u32);
-extern void sub_0805BC4C(void);
-extern void sub_0807BB68(u32*, u32, u32);
-extern void sub_08054570(void);
-extern void sub_08059278(void);
-extern void sub_0804C128();
extern void sub_08058324(u32);
-extern void sub_0801AFE4(void);
-extern void sub_0807AABC(Entity*);
+extern void sub_08059278(void);
extern void sub_0805B4D0(u32);
-extern void sub_0807BA8C(u32, u32);
-extern void sub_080AF284(void);
-extern void sub_080A71C4(u32, u32, u32, u32);
-extern void sub_08054564();
-extern void DrawDirect(u32, u32); // trampoline to sub_080B27F4
-extern void sub_0801C1D4(void);
-extern void DrawOAMCmd(void);
-extern u32 sub_0807953C(void);
-extern void sub_080AE068(Entity*);
-extern u32 sub_0800445C(Entity*);
-extern u32 sub_0801766C(Entity*);
-extern void sub_08004168(Entity*);
-extern u32 sub_0806F520();
-extern void sub_0806F4E8(Entity*);
-extern void sub_080784C8();
-extern u32 sub_0808288C(Entity*, u32, u32, u32);
-extern bool32 sub_0806FDA0(Entity*);
-extern bool32 LoadSwapGFX(Entity*, u16, u32);
-extern void sub_0807921C();
-extern void sub_0807ACCC(Entity*);
-extern u32 sub_08079F8C(void);
-extern void sub_080787CC(Entity*);
-extern u32 sub_080044EC(Entity*, u32);
-extern u32 sub_080002B8(Entity*);
-extern u32 sub_08049F84(Entity*, u32);
-extern u32 sub_0800419C(Entity*, Entity*, u32, u32);
-extern void sub_08004542(Entity*);
-extern u32 IsCollidingPlayer(Entity*);
-extern void sub_080809D4(void);
-extern void sub_08080CB4(Entity*);
-extern void sub_0807B7D8(u32, u32, u32);
-extern void sub_0800451C(Entity*);
-extern u32 sub_080040D8(Entity*, u8*, s32, s32);
-extern u32 sub_0805F8F8(u32);
-extern u32 sub_0805F7A0(u32);
+extern void sub_0805BC4C(void);
+extern void sub_0805EC60(Entity*);
+extern void sub_0805EC9C(Entity*, u32, u32, u32);
+extern void sub_0805ED14(u32*);
extern u32* sub_0805F25C(u32);
-u32 EntityWithinDistance(Entity*, s32, s32, s32);
-extern void LinearMoveAngle(Entity*, u32, u32);
-extern void sub_080A1ED0(u32, u32, u32);
+extern u32 sub_0805F7A0(u32);
+extern void sub_0805F8E4(u32 r0, WStruct* r1);
+extern u32 sub_0805F8F8(u32);
+extern void sub_0806D02C(Entity*);
+extern void sub_0806D0B0(Entity*);
+extern void sub_0806F4E8(Entity*);
+extern u32 sub_0806F520();
extern u32 sub_0806F5B0(u32);
+extern u32 sub_0806F824(Entity*, Entity*, s32, s32);
+extern u32 sub_0806F948(Entity*);
+extern void sub_0806FBB4(Entity*);
+extern bool32 sub_0806FC80(Entity*, Entity*, s32);
+extern void sub_0806FCF4(Entity*, s32, s32, s32);
+extern void sub_0806FD3C(Entity*);
+extern bool32 sub_0806FDA0(Entity*);
+extern void sub_080751E8(u32, u32, void*);
+extern void sub_08077BB8(ItemBehavior*);
+extern Entity* sub_08077C0C(ItemBehavior*, u32);
+extern Entity* sub_08077C94(ItemBehavior*, u32);
+extern void sub_08077D38(ItemBehavior*, u32);
+extern void sub_08077DF4(ItemBehavior*, u32);
+extern void sub_08077E54(ItemBehavior*);
+extern void sub_08077E78(ItemBehavior*, u32);
+extern bool32 sub_08077EFC(ItemBehavior*);
+extern bool32 sub_08077F24(ItemBehavior*, u32);
+extern void sub_08077F50(ItemBehavior* beh, u32 arg1);
+extern void sub_080784C8();
extern void sub_08078790(Entity*, u32);
+extern void sub_080787CC(Entity*);
+extern s32 sub_0807887C(Entity*, u32, u32);
extern void sub_080788E0(Entity*);
+extern s32 sub_08078904();
+extern void sub_08078930(Entity*);
+extern void sub_08078930(Entity*);
+extern void sub_08078954(Entity*);
extern void sub_08078B48(void);
+extern void sub_08078E84(Entity*, Entity*);
+extern void sub_08079184();
extern void sub_0807919C();
-extern void sub_0807CAA0(u32, u32);
-extern void sub_080085B0(Entity*);
+extern void sub_0807921C();
+extern u32 sub_0807953C(void);
+extern void sub_08079BD8(Entity*);
extern u32 sub_08079D48();
-extern u32 sub_080542AC(u32);
+extern void sub_08079D84(void);
+extern u32 sub_08079F8C(void);
extern u32 sub_08079FC4(u32);
-extern void sub_0805F8E4(u32 r0, WStruct* r1);
-extern Entity* sub_08077C94(ItemBehavior*, u32);
-extern Entity* sub_08077C0C(ItemBehavior*, u32);
-extern void sub_08077D38(ItemBehavior*, u32);
-extern void sub_08077E78(ItemBehavior*, u32);
-extern void UpdateItemAnim(ItemBehavior*);
-extern u32 sub_0806F948(Entity*);
-extern void sub_08077DF4(ItemBehavior*, u32);
-extern void sub_08077BB8(ItemBehavior*);
-extern bool32 sub_08077EFC(ItemBehavior*);
-extern void sub_08078E84(Entity*, Entity*);
-extern void sub_080042D0(Entity*, u32, u16);
-extern u32 sub_080002A8(u32, u32, u32);
-extern bool32 sub_080806BC(u32, u32, u32, u32);
-extern bool32 sub_0806FC80(Entity*, Entity*, s32);
-extern u32 sub_080002B4(Entity*, u32, u32);
-extern u32 sub_080AF134(Entity*);
-extern void LinearMoveDirection(Entity*, u32, u32);
-extern void sub_080A2AF4(Entity*, u32, u32);
-extern u32 sub_080002CC(Entity*, s32, s32);
-extern bool32 sub_0807BD14(Entity*, u32);
extern void sub_0807A5B8(u32);
+extern void sub_0807AA80(Entity*);
+extern void sub_0807AABC(Entity*);
+extern void sub_0807ACCC(Entity*);
+extern void sub_0807B7D8(u32, u32, u32);
+extern void sub_0807B9B8(s32, s32, s32);
+extern void sub_0807BA8C(u32, u32);
+extern void sub_0807BB68(u32*, u32, u32);
+extern bool32 sub_0807BD14(Entity*, u32);
+extern void sub_0807CAA0(u32, u32);
+extern bool32 sub_080806BC(u32, u32, u32, u32);
+extern void sub_0808091C(const ScreenTransitionData*, u32);
+extern void sub_080809D4(void);
+extern void sub_08080CB4(Entity*);
+extern u32 sub_0808288C(Entity*, u32, u32, u32);
+extern void sub_080A1ED0(u32, u32, u32);
+extern Entity* sub_080A2A3C(Entity*, u32, u32, u32);
extern Entity* sub_080A2AD4(Entity*);
-extern u32 sub_080040A2(Entity*);
-
-extern Entity* sub_08049DF4(u32);
+extern void sub_080A2AF4(Entity*, u32, u32);
+extern void sub_080A57F4(void);
+extern void sub_080A71C4(u32, u32, u32, u32);
+extern void sub_080A7C18(u32, u32, u32);
+extern void sub_080AE068(Entity*);
+extern void sub_080AF284(void);
+extern void sub_08078930(Entity*);
+extern void sub_08078954(Entity*);
+extern void sub_0809EB30(Entity*);
+extern void sub_0809EAD8(Entity*);
+extern void sub_0809EABC(Entity*);
+extern void sub_08079D84(void);
+extern void sub_080A2CC0(Entity*, Entity**, u16*);
+// extern void sub_080A2CC0(Entity*, void*, void*);
+extern void sub_08095C48(Entity*);
extern s32 sub_080012DC(Entity*);
-extern s32 sub_08056338(void);
-extern s32 sub_080AF090(Entity*);
-extern u32 PlayerInRange(Entity*, u32, u32);
-extern u32 sub_080002C8(u16, u8);
-extern u32 sub_080002D4(s32, s32, u32);
-extern u32 sub_080002E0(u32, u32);
-extern u32 sub_08031E04(Entity*);
-extern u32 sub_080322A4(Entity*);
-extern u32 sub_08049F1C(Entity*, Entity*, u32);
+extern u32 sub_0804A024(Entity*, u32, u32);
+extern s32 sub_080012DC(Entity*);
+extern void sub_08001318(Entity*);
+extern void sub_080043A8(Entity*);
extern u32 sub_08049F1C(Entity*, Entity*, u32);
-extern void SoundReqClipped(Entity*, u32);
-extern void SoundReqClipped(Entity*, u32);
-extern void GenericKnockback2(Entity*);
-extern void sub_08031E48(Entity*, Entity*);
-extern void sub_08032290(Entity*);
-extern void sub_08032338(Entity*);
-extern void sub_0803C0AC(Entity*);
extern void sub_0804AA1C(Entity*);
-extern u32 sub_0806F824(Entity*, Entity*, s32, s32);
-extern void sub_08078930(Entity*);
-extern void sub_08078954(Entity*);
-extern void sub_08079BD8(Entity*);
-extern void sub_080AEFB4(Entity*);
-extern void UnloadOBJPalette(Entity*);
-void sub_080322E8(Entity*);
-extern u32 GetTileIndex(u32, u32);
-extern void sub_0806FBB4(Entity*);
-extern u32 sub_080002D4(s32, s32, u32);
-extern void sub_08078930(Entity*);
-extern void sub_080044AE(Entity*, u32, u32);
-extern void sub_0801AF18(u8*, u32, u32);
-extern void sub_0807B9B8(s32, s32, s32);
-extern void sub_08000148(u32, u32, u32);
-extern void CreateRandomItemDrop(Entity*, s32);
-extern Entity* sub_080A2A3C(Entity*, u32, u32, u32);
-extern void sub_0806FCF4(Entity*, s32, s32, s32);
-extern u32 sub_080041DC(Entity*, u32, u32);
-extern void sub_080AE58C(Entity*, u32, u32);
-extern u32 sub_0800132C(Entity*, Entity*);
-extern void sub_08008796(Entity*, u32, u32, u32);
-extern bool32 sub_080AE4CC(u8*, s32, s32, s32);
-extern LayerStruct* GetLayerByIndex(u32);
+extern void sub_08027870(Entity*);
+extern u32 sub_0804A044(Entity*, Entity*, u32);
+extern void sub_0804AA1C(Entity*);
+extern void sub_08049CF4(Entity*);
#endif
diff --git a/linker.ld b/linker.ld
index a2a0f751..5a4d6218 100644
--- a/linker.ld
+++ b/linker.ld
@@ -1681,6 +1681,7 @@ SECTIONS {
data/const/playerItem/playerItemGustJar.o(.rodata);
data/gfx/fixed_type_gfx.o(.rodata);
data/const/movement.o(.rodata);
+ src/movement.o(.rodata);
data/map/exit_lists.o(.rodata);
data/gfx_0813AA54.o(.rodata);
data/gfx/sprite_gfx.o(.rodata);
diff --git a/src/collision.c b/src/collision.c
index bb8c3551..649055cf 100644
--- a/src/collision.c
+++ b/src/collision.c
@@ -13,18 +13,18 @@ extern u8 gCollidableCount;
extern u8 gUnk_080B3740[];
typedef struct {
- u8 _0;
- u8 _1;
- u8 _2;
- u8 _3;
- u8 _4;
- u8 _5;
- s8 _6;
- u8 _7;
- u8 _8;
- u8 _9;
- u8 _a;
- u8 _b;
+ /*0x00*/ u8 orgKnockbackSpeed;
+ /*0x01*/ u8 orgIframes;
+ /*0x02*/ u8 orgKnockbackDuration;
+ /*0x03*/ u8 tgtDamage;
+ /*0x04*/ u8 orgConfusedTime;
+ /*0x05*/ u8 tgtKnockbackSpeed;
+ /*0x06*/ s8 tgtIframes;
+ /*0x07*/ u8 tgtKnockbackDuration;
+ /*0x08*/ u8 orgDamage;
+ /*0x09*/ u8 tgtConfusedTime;
+ /*0x0a*/ u8 _a;
+ /*0x0b*/ u8 _b;
} ColSettings;
extern ColSettings gCollisionMtx[173 * 34];
@@ -362,7 +362,7 @@ s32 sub_08017B1C(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
} else {
org->knockbackDuration = 0x10;
org->iframes = -20;
- org->field_0x46 = 640;
+ org->knockbackSpeed = 640;
}
return 1;
}
@@ -374,7 +374,7 @@ s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
if (x << 24 <= 0) {
tgt->field_0x1d = 0;
tgt->subAction = 2;
- tgt->field_0x46 = 0;
+ tgt->knockbackSpeed = 0;
}
}
} else {
@@ -399,7 +399,7 @@ s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
org->health = sub_08017874(org, tgt);
org->knockbackDuration = 12;
org->iframes = 30;
- org->field_0x46 = 384;
+ org->knockbackSpeed = 384;
if (tgt->iframes == 0)
tgt->iframes = -1;
return 1;
@@ -416,7 +416,7 @@ s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
}
org->knockbackDuration = 12;
org->iframes = 16;
- org->field_0x46 = 640;
+ org->knockbackSpeed = 640;
if (tgt->iframes == 0)
tgt->iframes = -1;
return 1;
@@ -432,7 +432,7 @@ s32 sub_08017CBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
tgt->knockbackDuration = 12;
tgt->iframes = 16;
tgt->confusedTime = -16;
- tgt->field_0x46 = 768;
+ tgt->knockbackSpeed = 768;
if (org->iframes == 0)
org->iframes = -1;
}
@@ -444,7 +444,7 @@ s32 sub_08017D28(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
org->field_0x7a.HWORD = 600;
org->knockbackDuration = 12;
org->iframes = 16;
- org->field_0x46 = 640;
+ org->knockbackSpeed = 640;
if (tgt->iframes == 0)
tgt->iframes = -1;
return 1;
@@ -484,7 +484,7 @@ int sub_08017DD4(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
gPlayerEntity.iframes = 12;
gPlayerEntity.knockbackDuration = 16;
gPlayerEntity.knockbackDirection = DirectionTurnAround(direction);
- gPlayerEntity.field_0x46 = 640;
+ gPlayerEntity.knockbackSpeed = 640;
}
if (tgt->iframes == 0)
tgt->iframes = -1;
@@ -493,7 +493,7 @@ int sub_08017DD4(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
s32 sub_08017E88(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) {
org->knockbackDuration = 2;
- org->field_0x46 = 640;
+ org->knockbackSpeed = 640;
if (tgt->iframes == 0)
tgt->iframes = -1;
return 1;
@@ -509,11 +509,11 @@ s32 sub_08017EB0(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
tgt->damage = temp;
gPlayerEntity.knockbackDuration = 12;
gPlayerEntity.iframes = 16;
- gPlayerEntity.field_0x46 = 384;
+ gPlayerEntity.knockbackSpeed = 384;
} else if (org->kind == PLAYER_ITEM && org->id == 5) {
org->knockbackDuration = 8;
org->iframes = -6;
- org->field_0x46 = 384;
+ org->knockbackSpeed = 384;
gPlayerEntity.iframes = 0x80;
}
if (tgt->iframes == 0)
@@ -608,10 +608,10 @@ s32 sub_080180E8(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
if (DirectionNormalize(tgt->direction - v3) <= 0x18) {
org->knockbackDuration = 12;
org->iframes = -16;
- org->field_0x46 = 640;
+ org->knockbackSpeed = 640;
tgt->knockbackDuration = 12;
tgt->iframes = -16;
- tgt->field_0x46 = 768;
+ tgt->knockbackSpeed = 768;
sub_08017940(org, tgt);
return 1;
}
@@ -700,27 +700,27 @@ s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
}
if (!temp) {
u32 tmp2;
- org->field_0x46 = 16 * settings->_0;
- org->iframes = settings->_1;
+ org->knockbackSpeed = 16 * settings->orgKnockbackSpeed;
+ org->iframes = settings->orgIframes;
if (org->iframes == 0)
org->iframes = -1;
- org->knockbackDuration = settings->_2;
- tgt->damage = settings->_3;
+ org->knockbackDuration = settings->orgKnockbackDuration;
+ tgt->damage = settings->tgtDamage;
tmp2 = 0xFF;
- if (settings->_3 != 0)
+ if (settings->tgtDamage != 0)
org->health = sub_08017874(org, tgt);
- if (settings->_4 > org->confusedTime)
- org->confusedTime = settings->_4;
- tgt->field_0x46 = 16 * settings->_5;
- tgt->iframes = settings->_6;
- if (settings->_6 == 0)
+ if (settings->orgConfusedTime > org->confusedTime)
+ org->confusedTime = settings->orgConfusedTime;
+ tgt->knockbackSpeed = 16 * settings->tgtKnockbackSpeed;
+ tgt->iframes = settings->tgtIframes;
+ if (settings->tgtIframes == 0)
tgt->iframes = -1;
- tgt->knockbackDuration = settings->_7;
- tmp2 &= org->damage = settings->_8;
+ tgt->knockbackDuration = settings->tgtKnockbackDuration;
+ tmp2 &= org->damage = settings->orgDamage;
if (tmp2 != 0)
tgt->health = sub_08017874(tgt, org);
- if (settings->_9 > tgt->confusedTime)
- tgt->confusedTime = settings->_9;
+ if (settings->tgtConfusedTime > tgt->confusedTime)
+ tgt->confusedTime = settings->tgtConfusedTime;
}
if (settings->_a & 1)
sub_08017940(org, tgt);
@@ -735,13 +735,13 @@ s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
parent->knockbackDuration = tgt->knockbackDuration;
if (parent->confusedTime == 0)
parent->confusedTime = tgt->confusedTime;
- parent->field_0x46 = tgt->field_0x46;
+ parent->knockbackSpeed = tgt->knockbackSpeed;
parent->field_0x4c = org;
}
}
if (org->kind == PLAYER_ITEM) {
if (org->id == 1) {
- if (settings->_8) {
+ if (settings->orgDamage) {
sub_080179EC(org, tgt);
}
} else if (org->id == 4) {
@@ -749,7 +749,7 @@ s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings)
sub_08017A90(org, tgt);
}
} else if (org->id == 3) {
- if (settings->_9) {
+ if (settings->tgtConfusedTime) {
SoundReqClipped(tgt, SFX_HIT);
}
} else if (org->id == 5) {
diff --git a/src/coord.c b/src/coord.c
index 14f4684a..30b6aa81 100644
--- a/src/coord.c
+++ b/src/coord.c
@@ -86,21 +86,21 @@ u32 sub_0806F3E4(Entity* ent) {
return 0;
switch (gPlayerState.field_0x1d) {
case 1:
- ent->field_0x46 += 64;
+ ent->knockbackSpeed += 64;
break;
case 2:
- ent->field_0x46 += 128;
+ ent->knockbackSpeed += 128;
break;
case 3:
- ent->field_0x46 += 192;
+ ent->knockbackSpeed += 192;
break;
}
- if (ent->field_0x46 > 0x500)
- ent->field_0x46 = 0x500;
+ if (ent->knockbackSpeed > 0x500)
+ ent->knockbackSpeed = 0x500;
p = &gUnk_08126EE4[gPlayerEntity.animationState & 0xE];
tmp_ent.x.HALF.HI = p[0] + gPlayerEntity.x.HALF.HI;
tmp_ent.y.HALF.HI = p[1] + gPlayerEntity.y.HALF.HI;
- LinearMoveDirection(ent, ent->field_0x46, GetFacingDirection(ent, &tmp_ent));
+ LinearMoveDirection(ent, ent->knockbackSpeed, GetFacingDirection(ent, &tmp_ent));
if (sub_0800419C(&tmp_ent, ent, 4, 4)) {
u32 state = ent->field_0x1c & 0xF;
if (state == 2) {
diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c
index 685effd6..7b92aec0 100644
--- a/src/enemy/acroBandits.c
+++ b/src/enemy/acroBandits.c
@@ -400,7 +400,7 @@ void sub_08032008(Entity* this) {
if (this->direction & 0xf)
this->spriteSettings.flipX = (this->direction >> 4 ^ 1);
- ProcessMovement(this);
+ ProcessMovement0(this);
} else {
if (this->field_0x76.HALF.HI == 0) {
if (EntityWithinDistance(this, parent->x.HALF.HI, parent->y.HALF.HI, 1) == 0) {
@@ -457,7 +457,7 @@ void sub_08032160(Entity* this) {
}
void sub_080321E8(Entity* this) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (sub_080044EC(this, 0x2000) == 0)
this->action = 8;
diff --git a/src/enemy/armos.c b/src/enemy/armos.c
index 4ba4c511..df7a0705 100644
--- a/src/enemy/armos.c
+++ b/src/enemy/armos.c
@@ -331,7 +331,7 @@ void sub_080309E8(ArmosEntity* this) {
}
void sub_08030A04(ArmosEntity* this) {
- ProcessMovement(super);
+ ProcessMovement0(super);
if ((super->frame & 1) != 0) {
super->frame = super->frame & 0xfe;
EnqueueSFX(SFX_101);
diff --git a/src/enemy/ballChainSoldier.c b/src/enemy/ballChainSoldier.c
index 99a0ac81..f29df68c 100644
--- a/src/enemy/ballChainSoldier.c
+++ b/src/enemy/ballChainSoldier.c
@@ -23,15 +23,14 @@ const u8 gUnk_080D0724[];
const u16 gUnk_080D0728[];
const u16 gUnk_080D0730[];
-extern u32 sub_0804A044(Entity*, Entity*, u32);
-extern void sub_0803E86C(BallChainSoldierEntity*);
-extern void sub_0803E9A4(BallChainSoldierEntity*);
-extern bool32 sub_0803E9D4(BallChainSoldierEntity*);
-extern void sub_0803E8CC(BallChainSoldierEntity*);
-extern void sub_0803E92C(BallChainSoldierEntity*);
-extern bool32 sub_0803EA64(BallChainSoldierEntity*);
-extern void sub_0803E94C(BallChainSoldierEntity*, u32);
-extern bool32 sub_0803EAD0(BallChainSoldierEntity*, u32);
+void sub_0803E86C(BallChainSoldierEntity*);
+void sub_0803E9A4(BallChainSoldierEntity*);
+bool32 sub_0803E9D4(BallChainSoldierEntity*);
+void sub_0803E8CC(BallChainSoldierEntity*);
+void sub_0803E92C(BallChainSoldierEntity*);
+bool32 sub_0803EA64(BallChainSoldierEntity*);
+void sub_0803E94C(BallChainSoldierEntity*, u32);
+bool32 sub_0803EAD0(BallChainSoldierEntity*, u32);
void BallChainSoldier(Entity* this) {
EnemyFunctionHandler(this, (EntityActionArray)BallChainSoldier_Functions);
@@ -92,7 +91,7 @@ void sub_0803E61C(BallChainSoldierEntity* this) {
sub_0803E9A4(this);
if (sub_0803E9D4(this) == 0) {
if (super->knockbackDuration == 0) {
- if (ProcessMovement(super) == 0) {
+ if (ProcessMovement0(super) == 0) {
sub_0803E86C(this);
return;
}
diff --git a/src/enemy/beetle.c b/src/enemy/beetle.c
index abe8f8a8..207cf1c7 100644
--- a/src/enemy/beetle.c
+++ b/src/enemy/beetle.c
@@ -8,8 +8,6 @@
#include "enemy.h"
#include "functions.h"
-extern u32 PlayerInRange(Entity*, u32, u32);
-
u32 sub_08021D00(Entity*);
void sub_08021D44(Entity* this, u32 direction);
@@ -114,7 +112,7 @@ void sub_080218CC(Entity* this) {
GetNextFrame(this);
if (this->frame & 1) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (sub_080044EC(this, 0x1c00) == 0)
this->frameDuration = 1;
}
@@ -184,7 +182,7 @@ void sub_08021A64(Entity* this) {
}
sub_08021D44(this, tmp);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
}
}
@@ -206,7 +204,7 @@ void sub_08021AD8(Entity* this) {
this->direction = (u8)tmp;
EnqueueSFX(SFX_PLY_JUMP);
}
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (!GravityUpdate(this, 0x1800))
this->frameDuration = 1;
}
@@ -265,7 +263,7 @@ void sub_08021B64(Entity* this) {
void sub_08021C58(Entity* this) {
GetNextFrame(this);
if (this->frame & 1) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (GravityUpdate(this, 0x1800) == 0)
this->frameDuration = 1;
}
diff --git a/src/enemy/bladeTrap.c b/src/enemy/bladeTrap.c
index 3af99a33..f5531def 100644
--- a/src/enemy/bladeTrap.c
+++ b/src/enemy/bladeTrap.c
@@ -10,13 +10,11 @@
#include "room.h"
#include "functions.h"
-extern void sub_080A2CC0(Entity*, void*, void*);
-
void BladeTrap(Entity* this) {
if (this->action == 0) {
this->action = 1;
this->child = GetCurrentRoomProperty(this->type);
- sub_080A2CC0(this, &this->child, &this->field_0x74);
+ sub_080A2CC0(this, &this->child, &this->field_0x74.HWORD);
}
if (!(this->direction & 0x80)) {
LinearMoveUpdate(this);
diff --git a/src/enemy/bobomb.c b/src/enemy/bobomb.c
index 03c072a4..42c3d2b1 100644
--- a/src/enemy/bobomb.c
+++ b/src/enemy/bobomb.c
@@ -11,9 +11,6 @@
#include "object.h"
#include "functions.h"
-extern void sub_08078930(Entity*);
-extern void sub_08078954(Entity*);
-
void sub_0802CB68(Entity*);
void sub_0802CBC4(Entity*);
void sub_0802CC18(Entity*);
@@ -161,7 +158,7 @@ void sub_0802C8D8(Entity* this) {
void sub_0802C91C(Entity* this) {
GetNextFrame(this);
- ProcessMovement(this);
+ ProcessMovement0(this);
if (this->field_0x82.HALF.LO) {
if (this->collisions) {
sub_0800417E(this, this->collisions);
diff --git a/src/enemy/bombarossa.c b/src/enemy/bombarossa.c
index 05784a06..f3455a21 100644
--- a/src/enemy/bombarossa.c
+++ b/src/enemy/bombarossa.c
@@ -14,8 +14,6 @@ typedef struct {
void (*const Bombarossa_Functions[])(Entity*);
const s8 gUnk_080CEB50[];
-extern void sub_080A2CC0(Entity*, void*, void*);
-
void sub_0803350C(BombarossaEntity* this);
void Bombarossa(Entity* this) {
diff --git a/src/enemy/bowMoblin.c b/src/enemy/bowMoblin.c
index e6ace018..b65f1ea3 100644
--- a/src/enemy/bowMoblin.c
+++ b/src/enemy/bowMoblin.c
@@ -365,7 +365,7 @@ void sub_0803C6DC(BowMoblinEntity* this) {
super->speed = tmp;
}
- ProcessMovement(super);
+ ProcessMovement0(super);
GetNextFrame(super);
}
diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c
index 01422aff..b473854c 100644
--- a/src/enemy/businessScrub.c
+++ b/src/enemy/businessScrub.c
@@ -14,18 +14,18 @@
#include "game.h"
#include "item.h"
-bool32 sub_0802915C(Entity*);
-bool32 sub_080291DC(Entity*);
-void sub_0802922C(Entity*);
void sub_08028E9C(Entity*);
-void sub_08028FFC(Entity*);
-void sub_0802925C(Entity*);
-void sub_080290E0(Entity*, u32);
+void sub_08028EDC(Entity*);
bool32 sub_08028F98(Entity*, u32);
-void sub_08029078(Entity*);
bool32 sub_08028FDC(Entity*);
+void sub_08028FFC(Entity*);
+void sub_08029078(Entity*);
+void sub_080290E0(Entity*, u32);
void sub_080290FC(Entity*);
-void sub_08028EDC(Entity*);
+bool32 sub_0802915C(Entity*);
+bool32 sub_080291DC(Entity*);
+void sub_0802922C(Entity*);
+void sub_0802925C(Entity*);
extern const struct SalesOffering gUnk_080CC954[];
extern const u8 gUnk_080CC9C0[];
diff --git a/src/enemy/businessScrubPrologue.c b/src/enemy/businessScrubPrologue.c
index a523a27c..036c4e19 100644
--- a/src/enemy/businessScrubPrologue.c
+++ b/src/enemy/businessScrubPrologue.c
@@ -12,6 +12,7 @@ typedef struct {
u32 unk_84;
} BusinessScrubPrologueEntity;
+extern void sub_080954AC(Entity*, u32);
extern u16 script_BusinessScrubIntro[];
void (*const BusinessScrubPrologue_Functions[])(Entity*);
@@ -20,9 +21,6 @@ const u8 gUnk_080D1A38[];
const s8 gUnk_080D1A3E[];
const u16 gUnk_080D1A4E[];
-extern void sub_08095C48(Entity* this);
-extern void sub_080954AC(Entity*, u32);
-
void sub_08046030(BusinessScrubPrologueEntity*, u32);
bool32 sub_08045F54(BusinessScrubPrologueEntity*, u32);
void sub_08045FF0(BusinessScrubPrologueEntity*);
diff --git a/src/enemy/chaser.c b/src/enemy/chaser.c
index dbbf7a77..16a61b2a 100644
--- a/src/enemy/chaser.c
+++ b/src/enemy/chaser.c
@@ -8,12 +8,7 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080012DC(Entity*);
-extern u32 sub_0804A024(Entity*, u32, u32);
-extern bool32 sub_080AF038(Entity*);
-
extern void (*const gUnk_080012C8[])(Entity*);
-
extern void (*const Chaser_Functions[])(Entity*);
extern void (*const gUnk_080CD298[])(Entity*);
@@ -54,7 +49,7 @@ void sub_0802B56C(Entity* this) {
this->speed = 0x40;
}
- if (sub_080AF038(this)) {
+ if (ProcessMovement12(this)) {
if (this->animIndex != 1) {
InitializeAnimation(this, 1);
}
diff --git a/src/enemy/chuchu.c b/src/enemy/chuchu.c
index bba9b073..6b01d0a9 100644
--- a/src/enemy/chuchu.c
+++ b/src/enemy/chuchu.c
@@ -9,14 +9,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080012DC(Entity*);
-extern void sub_08001318(Entity*);
-extern void sub_080043A8(Entity*);
-extern u32 sub_08049F1C(Entity*, Entity*, u32);
-extern u32 PlayerInRange(Entity*, u32, u32);
-extern void sub_0804AA1C(Entity*);
-extern void sub_080AF160(Entity*);
-
extern Entity* gUnk_020000B0;
void sub_0801F328(Entity*);
@@ -200,7 +192,7 @@ void sub_0801F12C(Entity* this) {
if ((this->field_0xf++ & 7) == 0) {
this->direction = sub_08049F84(this, 1);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
if (--this->actionDelay == 0) {
if (PlayerInRange(this, 1, 0x38)) {
@@ -222,7 +214,7 @@ void sub_0801F1B0(Entity* this) {
this->hitType = 90;
EnqueueSFX(SFX_12B);
}
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (GravityUpdate(this, 0x4000) == 0)
GetNextFrame(this);
} else {
@@ -257,7 +249,7 @@ void sub_0801F270(Entity* this) {
this->direction = sub_08049F84(this, 1);
}
- sub_080AF160(this);
+ ProcessMovement5(this);
GetNextFrame(this);
if (sub_0801FBD0(this))
return;
@@ -405,7 +397,7 @@ void sub_0801F508(Entity* this) {
if (tmp == 4) {
this->direction = sub_08049F84(this, 1);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
}
}
@@ -418,7 +410,7 @@ void sub_0801F584(Entity* this) {
this->hitType = 91;
EnqueueSFX(SFX_12B);
}
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (GravityUpdate(this, 0x4000) == 0)
GetNextFrame(this);
@@ -464,7 +456,7 @@ void sub_0801F688(Entity* this) {
if (sub_0801FBD0(this) || this->field_0x82.HALF.HI) {
this->direction = sub_08049F84(this, 1);
- sub_080AF160(this);
+ ProcessMovement5(this);
GetNextFrame(this);
} else {
sub_0801F748(this);
@@ -583,7 +575,7 @@ void sub_0801F8C0(Entity* this) {
if (tmp == 4) {
this->direction = GetFacingDirection(this, gUnk_020000B0);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
}
}
@@ -595,7 +587,7 @@ void sub_0801F940(Entity* this) {
this->frame ^= 1;
EnqueueSFX(SFX_12B);
}
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (GravityUpdate(this, 0x4000) == 0)
GetNextFrame(this);
} else {
@@ -635,7 +627,7 @@ void sub_0801F9E0(Entity* this) {
void sub_0801FA30(Entity* this) {
if (sub_0801FBD0(this)) {
this->direction = sub_08049F84(this, 1);
- sub_080AF160(this);
+ ProcessMovement5(this);
GetNextFrame(this);
} else if (sub_08049FDC(this, 1) == 0) {
this->action = 9;
diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c
index ce00dd10..c910f882 100644
--- a/src/enemy/chuchuBoss.c
+++ b/src/enemy/chuchuBoss.c
@@ -6,8 +6,7 @@
*/
#include "enemy.h"
-
-void sub_08027870(Entity*);
+#include "functions.h"
extern void (*const ChuchuBoss_Functions[])(Entity*);
extern void (*const gUnk_080CC1B0[])(Entity*);
diff --git a/src/enemy/cuccoAggr.c b/src/enemy/cuccoAggr.c
index 3678b7a6..24c8555a 100644
--- a/src/enemy/cuccoAggr.c
+++ b/src/enemy/cuccoAggr.c
@@ -30,16 +30,16 @@ const u16 gUnk_080CF828[];
const s8 gCuccoAggrFxHorizontalOffsets[];
const u8 gCuccoAggrFx[];
-extern void sub_080391B4(CuccoAggrEntity* this);
-extern void sub_08039218(CuccoAggrEntity* this);
-extern void CuccoAggr_CreateFx(CuccoAggrEntity* this);
-extern void sub_08039120(CuccoAggrEntity* this);
-extern void sub_08039140(CuccoAggrEntity* this);
-extern void sub_0803901C(CuccoAggrEntity* this);
-extern void sub_08039298(CuccoAggrEntity* this);
-extern void sub_080390F8(CuccoAggrEntity* this);
-extern void sub_080390C0(CuccoAggrEntity* this);
-extern bool32 CuccoAggr_IsOutsideScroll(CuccoAggrEntity* this);
+void sub_080391B4(CuccoAggrEntity* this);
+void sub_08039218(CuccoAggrEntity* this);
+void CuccoAggr_CreateFx(CuccoAggrEntity* this);
+void sub_08039120(CuccoAggrEntity* this);
+void sub_08039140(CuccoAggrEntity* this);
+void sub_0803901C(CuccoAggrEntity* this);
+void sub_08039298(CuccoAggrEntity* this);
+void sub_080390F8(CuccoAggrEntity* this);
+void sub_080390C0(CuccoAggrEntity* this);
+bool32 CuccoAggr_IsOutsideScroll(CuccoAggrEntity* this);
void CuccoAggr(Entity* this) {
u32 index = sub_080012DC(this);
@@ -122,7 +122,7 @@ void sub_08038E18(CuccoAggrEntity* this) {
super->spritePriority.b1 = 1;
super->spritePriority.b0 = 4;
super->direction = Random() & 0x1f;
- ProcessMovement(super);
+ ProcessMovement0(super);
UpdateSpriteForCollisionLayer(super);
}
}
@@ -148,7 +148,7 @@ void sub_08038ED0(CuccoAggrEntity* this) {
}
void sub_08038EE0(CuccoAggrEntity* this) {
- ProcessMovement(super);
+ ProcessMovement0(super);
GetNextFrame(super);
sub_08039298(this);
if (GravityUpdate(super, 0x1C00) == 0) {
@@ -172,7 +172,7 @@ void sub_08038F20(CuccoAggrEntity* this) {
void sub_08038F44(CuccoAggrEntity* this) {
super->direction = GetFacingDirection(&gPlayerEntity, super);
sub_080390F8(this);
- ProcessMovement(super);
+ ProcessMovement0(super);
sub_080044EC(super, 0x1800);
GetNextFrame(super);
sub_08039298(this);
diff --git a/src/enemy/cuccoChickAggr.c b/src/enemy/cuccoChickAggr.c
index 4ecbee1e..2099cd13 100644
--- a/src/enemy/cuccoChickAggr.c
+++ b/src/enemy/cuccoChickAggr.c
@@ -56,7 +56,7 @@ void sub_08022988(Entity* this) {
EnqueueSFX(SFX_VO_CHEEP);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
if (GravityUpdate(this, 0x2000) == 0) {
if (--this->actionDelay == 0) {
sub_08022A88(this);
@@ -92,7 +92,7 @@ void sub_08022A40(Entity* this) {
this->frameIndex = 1;
}
- ProcessMovement(this);
+ ProcessMovement0(this);
if (GravityUpdate(this, 0x2000) == 0) {
if (--this->actionDelay == 0) {
sub_08022A88(this);
diff --git a/src/enemy/curtain.c b/src/enemy/curtain.c
index 4f35dc2a..af8c22d0 100644
--- a/src/enemy/curtain.c
+++ b/src/enemy/curtain.c
@@ -13,7 +13,7 @@ void Curtain_OnTick(Entity* this) {
}
void Curtain_OnCollision(Entity* this) {
- if (this->field_0x46) {
+ if (this->knockbackSpeed != 0) {
this->action = 2;
this->flags &= ~ENT_COLLIDE;
this->spritePriority.b0 = 7;
diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c
index db9e4983..6c1b0238 100644
--- a/src/enemy/darkNut.c
+++ b/src/enemy/darkNut.c
@@ -14,26 +14,23 @@ typedef struct {
} PACKED stuct_080CAB14;
void sub_08021218(Entity*, u32, u32);
-void sub_08021588(Entity*);
-void sub_080213D0(Entity*, u32);
+void sub_0802124C(Entity*);
+u32 sub_08021274(u32, u32);
void sub_08021390(Entity*);
-void sub_0802159C(Entity*);
-void sub_0804AA1C(Entity*);
+void sub_080213B0(Entity*);
+void sub_080213D0(Entity*, u32);
void sub_080213F0(Entity*);
+void sub_08021400(Entity*);
+void sub_08021414(Entity*);
+void sub_08021424(Entity*);
u32 sub_080214FC(Entity*);
void sub_08021540(Entity*);
+void sub_08021588(Entity*);
+void sub_0802159C(Entity*);
void sub_08021600(Entity*);
-void sub_080213B0(Entity*);
-u32 PlayerInRange(Entity*, u32, u32);
-u32 sub_0802169C(Entity*, Entity*);
-void sub_0802124C(Entity*);
void sub_08021644(Entity*);
-void sub_08021414(Entity*);
-void sub_08021400(Entity*);
-u32 sub_08021274(u32, u32);
u32 sub_08021664(Entity*, Entity*);
-u32 sub_0804A044(Entity*, Entity*, u32);
-void sub_08021424(Entity*);
+u32 sub_0802169C(Entity*, Entity*);
extern Entity* gUnk_020000B0;
@@ -157,7 +154,7 @@ void sub_08020DD4(Entity* this) {
} else {
if (--this->actionDelay == 0)
sub_08021540(this);
- ProcessMovement(this);
+ ProcessMovement0(this);
UpdateAnimationSingleFrame(this);
}
}
@@ -191,7 +188,7 @@ void sub_08020E98(Entity* this) {
sub_08021218(this, 7, this->animationState);
} else {
this->direction = GetFacingDirection(gUnk_020000B0, this);
- if (ProcessMovement(this) == 0) {
+ if (ProcessMovement0(this) == 0) {
this->action = 8;
sub_08021218(this, 7, this->animationState);
} else {
@@ -205,7 +202,7 @@ void sub_08020E98(Entity* this) {
sub_08021414(this);
} else {
this->direction = GetFacingDirection(this, gUnk_020000B0);
- ProcessMovement(this);
+ ProcessMovement0(this);
sub_0802124C(this);
sub_08021644(this);
}
@@ -324,7 +321,7 @@ void sub_080210E4(Entity* this) {
}
sub_08021644(this);
- if ((this->frame & 0x10) && (!ProcessMovement(this) || (this->child && (this->child->bitfield & 0x80)))) {
+ if ((this->frame & 0x10) && (!ProcessMovement0(this) || (this->child && (this->child->bitfield & 0x80)))) {
sub_080213D0(this, 0);
} else {
if (--this->field_0x76.HWORD == 0)
@@ -519,7 +516,7 @@ void sub_08021424(Entity* this) {
sub_080212B0(this);
} else {
this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y);
- if (!ProcessMovement(this)) {
+ if (!ProcessMovement0(this)) {
sub_080212B0(this);
} else {
UpdateAnimationSingleFrame(this);
diff --git a/src/enemy/doorMimic.c b/src/enemy/doorMimic.c
index 6b84ef18..f340affa 100644
--- a/src/enemy/doorMimic.c
+++ b/src/enemy/doorMimic.c
@@ -9,7 +9,6 @@
#include "enemy.h"
#include "functions.h"
-extern void sub_08049CF4(Entity*);
void sub_080221C0(Entity*);
typedef struct {
diff --git a/src/enemy/enemy50.c b/src/enemy/enemy50.c
index 284ba85a..98f80480 100644
--- a/src/enemy/enemy50.c
+++ b/src/enemy/enemy50.c
@@ -273,7 +273,7 @@ void Enemy50_Action6(Enemy50Entity* this) {
sub_08004596(super, GetFacingDirection(super, gUnk_020000B0));
}
sub_0803F66C(this);
- sub_080AEFB4(super);
+ ProcessMovement1(super);
} else {
super->action = 7;
super->actionDelay = 0x1e;
@@ -316,7 +316,7 @@ void Enemy50_Action9(Enemy50Entity* this) {
super->animationState = 0xff;
super->iframes = -0xc;
super->knockbackDuration = 0x14;
- super->field_0x46 = 0x180;
+ super->knockbackSpeed = 0x180;
super->knockbackDirection = gPlayerEntity.animationState << 2 ^ 0x10;
sub_08041128(this);
sub_0803F6EC(this);
diff --git a/src/enemy/eyegore.c b/src/enemy/eyegore.c
index 79c31cbc..5869b6f8 100644
--- a/src/enemy/eyegore.c
+++ b/src/enemy/eyegore.c
@@ -451,7 +451,7 @@ void sub_08031250(EyegoreEntity* this) {
super->y.HALF.HI = this->unk_76;
this->unk_79 = tmp2 | this->unk_79;
}
- if (((this->unk_79 & 0x80) == 0) && (ProcessMovement(super) == 0)) {
+ if (((this->unk_79 & 0x80) == 0) && (ProcessMovement0(super) == 0)) {
if ((this->unk_78 & 0x80) != 0) {
this->unk_78 = 0x82;
} else {
@@ -459,7 +459,7 @@ void sub_08031250(EyegoreEntity* this) {
}
}
} else {
- ProcessMovement(super);
+ ProcessMovement0(super);
}
}
diff --git a/src/enemy/fallingBoulder.c b/src/enemy/fallingBoulder.c
index 5c483e4b..4928bf84 100644
--- a/src/enemy/fallingBoulder.c
+++ b/src/enemy/fallingBoulder.c
@@ -17,8 +17,6 @@ extern const u16 gUnk_080CD568[];
extern const u8 gUnk_080CD580[];
extern const s16 gUnk_080CD58C[];
-extern void sub_080AEFB4(Entity*);
-
void FallingBoulder(Entity* this) {
EnemyFunctionHandler(this, FallingBoulder_Functions);
}
@@ -115,7 +113,7 @@ NONMATCH("asm/non_matching/fallingBoulder/sub_0802C334.inc", void sub_0802C334(E
y = gRoomControls.origin_y + gRoomControls.height - this->y.HALF.HI;
if (y >= 5) {
- sub_080AEFB4(this);
+ ProcessMovement1(this);
} else {
LinearMoveUpdate(this);
if (this->z.HALF.HI - y > 0x38) {
diff --git a/src/enemy/fireballGuy.c b/src/enemy/fireballGuy.c
index df3f3686..43ceb90c 100644
--- a/src/enemy/fireballGuy.c
+++ b/src/enemy/fireballGuy.c
@@ -52,7 +52,7 @@ void sub_080453E8(Entity* this) {
}
void sub_08045430(Entity* this) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
GetNextFrame(this);
if (GravityUpdate(this, 0x1800) == 0)
sub_08045524(this);
diff --git a/src/enemy/flyingSkull.c b/src/enemy/flyingSkull.c
index b9529a51..0a76c266 100644
--- a/src/enemy/flyingSkull.c
+++ b/src/enemy/flyingSkull.c
@@ -221,7 +221,7 @@ void sub_0803A080(FlyingSkullEntity* this) {
void sub_0803A09C(FlyingSkullEntity* this) {
GetNextFrame(super);
- sub_080AEFE0(super);
+ ProcessMovement2(super);
if (super->collisions) {
sub_0803A0E0(this);
diff --git a/src/enemy/ghini.c b/src/enemy/ghini.c
index 4baf2fdf..a7870e07 100644
--- a/src/enemy/ghini.c
+++ b/src/enemy/ghini.c
@@ -231,7 +231,7 @@ void Ghini_Action6(GhiniEntity* this) {
sub_08004596(super, GetFacingDirection(super, gUnk_020000B0));
}
sub_0803F66C(this);
- sub_080AEFB4(super);
+ ProcessMovement1(super);
GetNextFrame(super);
} else {
super->action = 7;
@@ -274,7 +274,7 @@ void Ghini_Action9(GhiniEntity* this) {
super->animationState = 0xff;
super->iframes = -0xc;
super->knockbackDuration = 0x14;
- super->field_0x46 = 0x180;
+ super->knockbackSpeed = 0x180;
super->knockbackDirection = gPlayerEntity.animationState << 2 ^ 0x10;
sub_0803F51C(this);
sub_0803F6EC(this);
@@ -311,7 +311,7 @@ void sub_0803F58C(GhiniEntity* this) {
s32 yBefore;
yBefore = super->y.WORD;
- sub_080AEFB4(super);
+ ProcessMovement1(super);
yAfter = super->y.WORD;
super->y.WORD = yAfter - (yAfter - yBefore) / 2;
}
diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c
index b05ca9de..9c29dd4e 100644
--- a/src/enemy/gibdo.c
+++ b/src/enemy/gibdo.c
@@ -120,7 +120,7 @@ void sub_080375A4(GibdoEntity* this) {
sub_08037794(this);
} else {
UpdateAnimationSingleFrame(super);
- if (ProcessMovement(super) == 0) {
+ if (ProcessMovement0(super) == 0) {
if (!(--super->field_0xf)) {
sub_080379BC(this);
}
@@ -148,7 +148,7 @@ void sub_08037624(GibdoEntity* this) {
} else {
UpdateAnimationSingleFrame(super);
UpdateAnimationSingleFrame(super);
- if (ProcessMovement(super) == 0) {
+ if (ProcessMovement0(super) == 0) {
if (!(--super->field_0xf)) {
sub_080379BC(this);
}
@@ -170,7 +170,7 @@ void sub_08037690(GibdoEntity* this) {
} else {
if ((super->frame & 1) != 0) {
super->hitType = 0x27;
- ProcessMovement(super);
+ ProcessMovement0(super);
}
}
}
@@ -359,7 +359,7 @@ void sub_08037A58(GibdoEntity* this) {
super->iframes = 0xf4;
super->knockbackDirection = DirectionFromAnimationState(super->animationState) ^ 0x10;
super->knockbackDuration = 8;
- super->field_0x46 = 0x180;
+ super->knockbackSpeed = 0x180;
this->field_0x76 = 0x3c;
InitAnimationForceUpdate(super, super->animationState + 0x10);
}
@@ -370,7 +370,7 @@ void sub_08037ACC(GibdoEntity* this) {
gPlayerEntity.iframes = 0x1e;
gPlayerEntity.knockbackDirection = DirectionFromAnimationState(super->animationState);
gPlayerEntity.knockbackDuration = 4;
- gPlayerEntity.field_0x46 = 0x180;
+ gPlayerEntity.knockbackSpeed = 0x180;
}
// Damage player maybe?
diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c
index 8abdbdb3..2c593691 100644
--- a/src/enemy/helmasaur.c
+++ b/src/enemy/helmasaur.c
@@ -189,7 +189,7 @@ void sub_0802BE18(Entity* this) {
}
void sub_0802BE48(Entity* this) {
- if (!sub_080AEFE0(this)) {
+ if (!ProcessMovement2(this)) {
sub_0802C218(this);
InitScreenShake(8, 0);
} else {
@@ -208,7 +208,7 @@ void sub_0802BE80(Entity* this) {
}
if (this->speed > 0) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
sub_0802C18C(this);
} else {
sub_0802C1C0(this);
@@ -218,7 +218,7 @@ void sub_0802BE80(Entity* this) {
void sub_0802BEBC(Entity* this) {
this->direction ^= 0x10;
- sub_080AEFE0(this);
+ ProcessMovement2(this);
this->direction ^= 0x10;
if (!sub_080044EC(this, Q_16_16(0.125))) {
sub_0802C1C0(this);
@@ -240,7 +240,7 @@ void sub_0802BEEC(Entity* this) {
}
void sub_0802BF3C(Entity* this) {
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
if (--this->actionDelay == 0) {
u32 sprite;
@@ -322,7 +322,7 @@ bool32 sub_0802C06C(Entity* this) {
for (i = 0; i < 8; i++) {
x += xdiff;
y += ydiff;
- if (sub_080AE4CC(layer, x, y, 0))
+ if (IsTileCollision(layer, x, y, 0))
return FALSE;
}
@@ -342,7 +342,7 @@ bool32 sub_0802C0E8(Entity* this) {
u8* layer = this->collisionLayer == 2 ? gUnk_0200D654 : gUnk_02027EB4;
u32 ret = FALSE;
if (!sub_0806FC24(TILE(x, y), 9)) {
- if (sub_080AE4CC(layer, x, y, 0)) {
+ if (IsTileCollision(layer, x, y, 0)) {
ret = 1;
} else {
ret = 0;
diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c
index 2e13814b..340a9be5 100644
--- a/src/enemy/keaton.c
+++ b/src/enemy/keaton.c
@@ -74,7 +74,7 @@ void sub_0803248C(Entity* this) {
if (this->actionDelay == 0) {
sub_08032650(this);
}
- if (ProcessMovement(this) == 0) {
+ if (ProcessMovement0(this) == 0) {
this->actionDelay = 1;
}
UpdateAnimationSingleFrame(this);
@@ -126,7 +126,7 @@ void sub_08032574(Entity* this) {
return;
}
- if (--this->field_0x76.HWORD == 0 || !sub_080AEFE0(this)) {
+ if (--this->field_0x76.HWORD == 0 || !ProcessMovement2(this)) {
sub_0803275C(this);
return;
}
diff --git a/src/enemy/keese.c b/src/enemy/keese.c
index f555faa7..63b5b78d 100644
--- a/src/enemy/keese.c
+++ b/src/enemy/keese.c
@@ -10,7 +10,6 @@
extern void GenericKnockback2(Entity*);
extern void Keese_StartFly(Entity*);
-extern void sub_080AEFB4(Entity*);
extern void sub_08021F24(Entity*);
extern void (*const Keese_Functions[])(Entity*);
@@ -83,7 +82,7 @@ void Keese_Fly(Entity* this) {
if (this->frame & 0x80) {
sub_08021F24(this);
} else {
- sub_080AEFB4(this);
+ ProcessMovement1(this);
}
this->spriteOffsetY = gKeeseSpriteOffsets[this->frame];
}
diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c
index 837dcd39..70145906 100644
--- a/src/enemy/lakitu.c
+++ b/src/enemy/lakitu.c
@@ -271,7 +271,7 @@ void sub_0803CAD0(Entity* this) {
this->direction =
CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74.HWORD, this->field_0x76.HWORD);
- sub_080AEFE0(this);
+ ProcessMovement2(this);
}
}
diff --git a/src/enemy/lakituCloud.c b/src/enemy/lakituCloud.c
index 48605900..dda0a902 100644
--- a/src/enemy/lakituCloud.c
+++ b/src/enemy/lakituCloud.c
@@ -13,17 +13,12 @@
#include "effects.h"
#include "enemy.h"
-extern u32 GetNextFunction(Entity*);
-
extern void (*const LakituCloud_Functions[6])(Entity*);
extern void (*const gUnk_080D0430[3])(Entity*);
extern void (*const gUnk_080D043C[3])(Entity*);
-extern void SoundReqClipped(Entity*, u32);
-extern void sub_0803CE14(Entity*);
-extern void sub_0803CE3C(Entity*);
-extern void sub_08079D84(void);
-extern void sub_080A2CC0(Entity*, Entity**, u16*);
+void sub_0803CE14(Entity*);
+void sub_0803CE3C(Entity*);
void LakituCloud(Entity* this) {
LakituCloud_Functions[GetNextFunction(this)](this);
diff --git a/src/enemy/leever.c b/src/enemy/leever.c
index 405cf0dc..776ec72b 100644
--- a/src/enemy/leever.c
+++ b/src/enemy/leever.c
@@ -180,7 +180,7 @@ void Leever_Move(Entity* this) {
}
}
- ProcessMovement(this);
+ ProcessMovement0(this);
}
// clang-format off
diff --git a/src/enemy/likeLike.c b/src/enemy/likeLike.c
index 97fbdb3d..4ddac95d 100644
--- a/src/enemy/likeLike.c
+++ b/src/enemy/likeLike.c
@@ -122,7 +122,7 @@ void sub_08027EFC(Entity* this) {
this->field_0x82.HALF.LO = this->direction;
this->actionDelay = 8;
}
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
} else {
this->action = 6;
diff --git a/src/enemy/madderpillar.c b/src/enemy/madderpillar.c
index 0ce445ff..37708cc4 100644
--- a/src/enemy/madderpillar.c
+++ b/src/enemy/madderpillar.c
@@ -450,7 +450,7 @@ void sub_0802A098(Entity* this) {
}
uVar1 = this->x.HALF.HI;
uVar2 = this->y.HALF.HI;
- ProcessMovement(this);
+ ProcessMovement0(this);
if (sub_08029F48(this)) {
sub_08029E0C(this);
sub_08029EEC(this);
diff --git a/src/enemy/miniFireballGuy.c b/src/enemy/miniFireballGuy.c
index ab5ee505..0f847151 100644
--- a/src/enemy/miniFireballGuy.c
+++ b/src/enemy/miniFireballGuy.c
@@ -48,7 +48,7 @@ void sub_08045618(Entity* this) {
}
void sub_08045654(Entity* this) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
GetNextFrame(this);
if (GravityUpdate(this, 0x1800) == 0) {
sub_08045678(this);
diff --git a/src/enemy/miniSlime.c b/src/enemy/miniSlime.c
index 7b00fe62..7c82d1d6 100644
--- a/src/enemy/miniSlime.c
+++ b/src/enemy/miniSlime.c
@@ -88,7 +88,7 @@ void sub_080452FC(Entity* this) {
}
void sub_08045374(Entity* this) {
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
if (--this->actionDelay == 0)
this->action = 1;
diff --git a/src/enemy/moldorm.c b/src/enemy/moldorm.c
index a2513c45..7a5ab69c 100644
--- a/src/enemy/moldorm.c
+++ b/src/enemy/moldorm.c
@@ -101,7 +101,7 @@ void sub_08022D40(Entity* this) {
}
} else {
sub_08022F14(this);
- ProcessMovement(this);
+ ProcessMovement0(this);
if (this->collisions) {
sub_0800417E(this, this->collisions);
diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c
index d97af3f2..b6099372 100644
--- a/src/enemy/moldworm.c
+++ b/src/enemy/moldworm.c
@@ -219,7 +219,7 @@ void sub_08023398(Entity* this) {
} else {
int prevX = this->x.WORD;
int prevY = this->y.WORD;
- ProcessMovement(this);
+ ProcessMovement0(this);
if (this->x.WORD == prevX && this->y.WORD == prevY) {
this->field_0x7c.BYTES.byte0--;
}
diff --git a/src/enemy/mulldozer.c b/src/enemy/mulldozer.c
index 5c7595db..6a6a79de 100644
--- a/src/enemy/mulldozer.c
+++ b/src/enemy/mulldozer.c
@@ -159,11 +159,11 @@ void Mulldozer_Action5(MulldozerEntity* this) {
sub_080332A8(this);
}
sub_080331E8(this);
- ProcessMovement(super);
+ ProcessMovement0(super);
}
void Mulldozer_Action6(MulldozerEntity* this) {
- ProcessMovement(super);
+ ProcessMovement0(super);
sub_08032F48(this);
if (--super->field_0xf == 0) {
super->field_0xf = 2;
@@ -206,7 +206,7 @@ void sub_08032F64(MulldozerEntity* this) {
sub_08032F24(this);
}
sub_08032F48(this);
- ProcessMovement(super);
+ ProcessMovement0(super);
}
void sub_08032F90(MulldozerEntity* this) {
diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c
index f90c0fac..5ee3c12a 100644
--- a/src/enemy/octorok.c
+++ b/src/enemy/octorok.c
@@ -113,7 +113,7 @@ void Octorok_Idle(Entity* this) {
}
void Octorok_Move(Entity* this) {
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
if (--this->actionDelay == 0) {
if (Octorok_FacesPlayer(this) && gOctorokSpitChanceModifier[this->type] <= (Random() & 3)) {
diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c
index 11f58d13..9198342b 100644
--- a/src/enemy/octorokBoss.c
+++ b/src/enemy/octorokBoss.c
@@ -239,7 +239,7 @@ void OctorokBoss_Hit_SubAction1(Entity* this) {
3;
#endif
this->speed = 0x100;
- ProcessMovement(this);
+ ProcessMovement0(this);
} else {
// Freeze
if (this->type2 == 0) {
@@ -784,7 +784,7 @@ void OctorokBoss_Action1_WaitForTurn(Entity* this) {
GET_ATTACK_WAIT_TURNS(this)--;
OctorokBoss_ResetToSubAction0(this);
} else {
- if (ProcessMovement(this) == 0) {
+ if (ProcessMovement0(this) == 0) {
GET_TIMER(this) = 0;
}
}
@@ -802,7 +802,7 @@ void OctorokBoss_Action1_ChargeAttack(Entity* this) {
bool32 knockbackCondition;
if (GET_TIMER(this) == 0) {
- ProcessMovement(this);
+ ProcessMovement0(this);
knockbackCondition = 0;
if ((this->direction != 0) && (this->direction != 0x10)) {
knockbackCondition = ((u32)this->collisions & 0xee00) != 0;
@@ -812,7 +812,7 @@ void OctorokBoss_Action1_ChargeAttack(Entity* this) {
}
if (knockbackCondition != 0) {
this->knockbackDuration = 0x20;
- this->field_0x46 = 0x200;
+ this->knockbackSpeed = 0x200;
this->knockbackDirection = this->direction ^ 0x10;
GET_HELPER(this)->fallingStonesTimer += 0x3c;
OctorokBoss_SetAttackTimer(this);
@@ -1068,7 +1068,7 @@ void OctorokBoss_Burning_SubAction0(Entity* this) {
}
void OctorokBoss_Burning_SubAction1(Entity* this) {
- ProcessMovement(this);
+ ProcessMovement0(this);
if (this->collisions != 0) {
this->subAction = 2;
GET_HELPER(this)->targetAngle = GET_ANGLE_HI(this);
@@ -1079,7 +1079,7 @@ void OctorokBoss_Burning_SubAction1(Entity* this) {
GET_HELPER(this)->targetAngle = -GET_HELPER(this)->targetAngle ^ 0x80;
}
this->knockbackDuration = 0x18;
- this->field_0x46 = 0x200;
+ this->knockbackSpeed = 0x200;
this->knockbackDirection = this->direction ^ 0x10;
GET_HELPER(this)->fallingStonesTimer += 0x1e;
InitScreenShake(0x1e, 0);
@@ -1099,7 +1099,7 @@ void OctorokBoss_Burning_SubAction2(Entity* this) {
this->subAction = 1;
this->direction = ((u8)-GET_ANGLE_HI(this) ^ 0x80) >> 3;
this->collisions = 0;
- ProcessMovement(this);
+ ProcessMovement0(this);
} else {
if ((u8)(GET_HELPER(this)->targetAngle - GET_ANGLE_HI(this)) >= 0x81) {
GET_ANGLE(this) -= GET_ANGULAR_VEL(this);
diff --git a/src/enemy/octorokGolden.c b/src/enemy/octorokGolden.c
index ab16e2fb..8f72e7a7 100644
--- a/src/enemy/octorokGolden.c
+++ b/src/enemy/octorokGolden.c
@@ -64,7 +64,7 @@ void sub_08037D0C(Entity* this) {
}
UpdateAnimationVariableFrames(this, 2);
- if (ProcessMovement(this) == 0) {
+ if (ProcessMovement0(this) == 0) {
sub_08037E14(this);
} else if (--this->actionDelay == 0) {
sub_08037E14(this);
@@ -116,7 +116,7 @@ void sub_08037E14(Entity* this) {
ptr = gUnk_080CF498 + (dir >> 2);
x = this->x.HALF.HI + *ptr;
y = this->y.HALF.HI + *(ptr + 1);
- if (sub_080AE4CC(layer, x, y, 0)) {
+ if (IsTileCollision(layer, x, y, 0)) {
this->direction = Random() & 0x18;
} else {
this->direction = dir;
diff --git a/src/enemy/peahat.c b/src/enemy/peahat.c
index b3d20e85..3f85d704 100644
--- a/src/enemy/peahat.c
+++ b/src/enemy/peahat.c
@@ -171,7 +171,7 @@ void Peahat_Fly(Entity* this) {
}
}
- sub_080AEFE0(this);
+ ProcessMovement2(this);
GetNextFrame(this);
}
@@ -205,7 +205,7 @@ void Peahat_ChargeTarget(Entity* this) {
if ((gRoomTransition.frameCount & 3) == 0)
sub_08004596(this, GetFacingDirection(this, gUnk_020000B0));
}
- sub_080AEFE0(this);
+ ProcessMovement2(this);
} else {
sub_080205F8(this);
}
@@ -223,7 +223,7 @@ void Peahat_ChargeEnd(Entity* this) {
if (this->actionDelay & 1)
this->speed -= 8;
- sub_080AEFE0(this);
+ ProcessMovement2(this);
UpdateAnimationVariableFrames(this, 4);
}
}
@@ -241,7 +241,7 @@ void Peahat_Stunned(Entity* this) {
if (this->direction == 0xff)
this->direction = this->knockbackDirection;
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
break;
case PeahatAnimation_SlicedPropeller:
@@ -307,7 +307,7 @@ void Peahat_Hop(Entity* this) {
if (this->frame & 1) {
sub_0800442E(this);
} else {
- ProcessMovement(this);
+ ProcessMovement0(this);
}
}
@@ -324,7 +324,7 @@ void Peahat_Takeoff(Entity* this) {
sub_0800442E(this);
} else {
GravityUpdate(this, 0x1c00);
- ProcessMovement(this);
+ ProcessMovement0(this);
}
}
diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c
index 26439e36..9fa20418 100644
--- a/src/enemy/pesto.c
+++ b/src/enemy/pesto.c
@@ -548,7 +548,7 @@ void sub_08024940(Entity* this) {
}
}
- sub_080AEFB4(this);
+ ProcessMovement1(this);
GetNextFrame(this);
}
diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c
index f5b8b158..54e0f92d 100644
--- a/src/enemy/puffstool.c
+++ b/src/enemy/puffstool.c
@@ -582,7 +582,7 @@ void sub_08025C2C(Entity* this) {
bool32 sub_08025C44(Entity* this) {
if ((this->frame & 1) == 0) {
- return ProcessMovement(this);
+ return ProcessMovement0(this);
} else {
return FALSE;
}
diff --git a/src/enemy/rockChuchu.c b/src/enemy/rockChuchu.c
index a1508d95..d8707764 100644
--- a/src/enemy/rockChuchu.c
+++ b/src/enemy/rockChuchu.c
@@ -87,7 +87,7 @@ void sub_08022390(Entity* this) {
}
if (this->field_0xf == 0) {
- ProcessMovement(this);
+ ProcessMovement0(this);
} else {
this->field_0xf = this->field_0xf - 1;
}
diff --git a/src/enemy/rollobite.c b/src/enemy/rollobite.c
index 4db8a577..d0d22bc9 100644
--- a/src/enemy/rollobite.c
+++ b/src/enemy/rollobite.c
@@ -21,7 +21,6 @@ void sub_08020A7C(Entity*);
bool32 Rollobite_TryToHoleUp(Entity*);
bool32 Rollobite_IsRolledUp(Entity*);
-extern void sub_080AE7E8(Entity*, u32, u32, u32);
extern void sub_08078930(Entity*);
void Rollobite(Entity* this) {
@@ -61,8 +60,8 @@ void Rollobite_OnKnockback(Entity* this) {
this->knockbackDuration = 0;
} else if (Rollobite_IsRolledUp(this)) {
this->knockbackDuration--;
- sub_080AE58C(this, this->knockbackDirection, 10);
- sub_080AE7E8(this, this->field_0x46, this->knockbackDirection, 10);
+ CalculateEntityTileCollisions(this, this->knockbackDirection, 10);
+ ProcessMovementInternal(this, this->knockbackSpeed, this->knockbackDirection, 10);
} else {
GenericKnockback(this);
}
@@ -124,7 +123,7 @@ void Rollobite_Walk(Entity* this) {
GetNextFrame(this);
if (this->frame & 0x1) {
this->frame &= ~0x1;
- if (!ProcessMovement(this))
+ if (!ProcessMovement0(this))
this->actionDelay = 1;
}
@@ -192,7 +191,7 @@ void Rollobite_RolledUp(Entity* this) {
EnqueueSFX(SFX_104);
if ((this->direction & 0x80) == 0)
- sub_080AEFE0(this);
+ ProcessMovement2(this);
}
}
diff --git a/src/enemy/rope.c b/src/enemy/rope.c
index c5caac37..a26c1088 100644
--- a/src/enemy/rope.c
+++ b/src/enemy/rope.c
@@ -180,5 +180,5 @@ u32 sub_0803163C(Entity* this) {
h = this->field_0x7a.HWORD;
}
this->speed = h;
- return ProcessMovement(this);
+ return ProcessMovement0(this);
}
diff --git a/src/enemy/ropeGolden.c b/src/enemy/ropeGolden.c
index 881d1e36..ca3a57c7 100644
--- a/src/enemy/ropeGolden.c
+++ b/src/enemy/ropeGolden.c
@@ -69,7 +69,7 @@ void sub_0803827C(Entity* this) {
}
}
UpdateAnimationVariableFrames(this, 0x2);
- if (ProcessMovement(this) == 0) {
+ if (ProcessMovement0(this) == 0) {
sub_080383AC(this);
} else {
if (!(--this->actionDelay)) {
diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c
index c285f0c0..2ae953e7 100644
--- a/src/enemy/rupeeLike.c
+++ b/src/enemy/rupeeLike.c
@@ -145,7 +145,7 @@ void sub_080294D4(Entity* this) {
sub_08004596(this, GetFacingDirection(this, &gPlayerEntity));
sub_0802969C(this);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
sub_080296C8(this);
} else {
this->action = 6;
diff --git a/src/enemy/scissorsBeetle.c b/src/enemy/scissorsBeetle.c
index 9c78d925..41f84df0 100644
--- a/src/enemy/scissorsBeetle.c
+++ b/src/enemy/scissorsBeetle.c
@@ -155,7 +155,7 @@ void sub_08038B08(ScissorsBeetleEntity* this) {
}
void sub_08038B64(ScissorsBeetleEntity* this) {
- ProcessMovement(super);
+ ProcessMovement0(super);
UpdateAnimationSingleFrame(super);
if (--super->field_0xf == 0) {
super->field_0xf = 2;
@@ -165,7 +165,7 @@ void sub_08038B64(ScissorsBeetleEntity* this) {
void sub_08038B90(ScissorsBeetleEntity* this) {
UpdateAnimationSingleFrame(super);
- ProcessMovement(super);
+ ProcessMovement0(super);
sub_0800445C(super);
}
diff --git a/src/enemy/sensorBladeTrap.c b/src/enemy/sensorBladeTrap.c
index d3e28c2f..7ca53a62 100644
--- a/src/enemy/sensorBladeTrap.c
+++ b/src/enemy/sensorBladeTrap.c
@@ -9,7 +9,6 @@
#include "functions.h"
extern u32 sub_0804A024(Entity*, u32, u32);
-extern bool32 sub_080AF038(Entity*);
extern u8 gUnk_02027EB4[];
extern u8 gUnk_0200D654[];
@@ -61,7 +60,7 @@ void sub_0802BA18(Entity* this) {
}
void sub_0802BA8C(Entity* this) {
- if (!sub_080AF038(this)) {
+ if (!ProcessMovement12(this)) {
sub_0802BB10(this);
} else {
switch (this->direction >> 3) {
@@ -86,7 +85,7 @@ void sub_0802BA8C(Entity* this) {
}
void sub_0802BAFC(Entity* this) {
- if (!sub_080AF038(this)) {
+ if (!ProcessMovement12(this)) {
this->action = 1;
}
}
@@ -101,7 +100,7 @@ void sub_0802BB10(Entity* this) {
bool32 sub_0802BB2C(Entity* this, u32 param_2) {
u8* layer = this->collisionLayer == 2 ? gUnk_0200D654 : gUnk_02027EB4;
const s8* ptr = &gUnk_080CD3DC[param_2 >> 2];
- return sub_080AE4CC(layer, this->x.HALF.HI + ptr[0], this->y.HALF.HI + ptr[1], 0);
+ return IsTileCollision(layer, this->x.HALF.HI + ptr[0], this->y.HALF.HI + ptr[1], 0);
}
// clang-format off
diff --git a/src/enemy/slime.c b/src/enemy/slime.c
index b496288d..7857c3d6 100644
--- a/src/enemy/slime.c
+++ b/src/enemy/slime.c
@@ -78,7 +78,7 @@ void sub_08045018(Entity* this) {
}
void sub_08045088(Entity* this) {
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
if (--this->actionDelay == 0) {
this->action = 1;
diff --git a/src/enemy/sluggula.c b/src/enemy/sluggula.c
index 460da1b8..e6b5eb87 100644
--- a/src/enemy/sluggula.c
+++ b/src/enemy/sluggula.c
@@ -76,7 +76,7 @@ void sub_08023C5C(Entity* this) {
}
void sub_08023C8C(Entity* this) {
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
sub_08023E54(this);
if (--this->actionDelay == 0) {
diff --git a/src/enemy/spark.c b/src/enemy/spark.c
index 7f467944..f6f9325d 100644
--- a/src/enemy/spark.c
+++ b/src/enemy/spark.c
@@ -55,7 +55,7 @@ void sub_0802B35C(Entity* this) {
bool32 is_head;
GetNextFrame(this);
- ProcessMovement(this);
+ ProcessMovement0(this);
is_head = this->type == 0;
if (this->collisions == 0) {
if (--this->field_0xf == 0) {
diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c
index 6c3110cb..a402319a 100644
--- a/src/enemy/spearMoblin.c
+++ b/src/enemy/spearMoblin.c
@@ -235,7 +235,7 @@ void sub_08028528(Entity* this) {
}
if (0x20 < this->field_0x7a.HALF.HI) {
- ProcessMovement(this);
+ ProcessMovement0(this);
}
GetNextFrame(this);
@@ -370,7 +370,7 @@ void sub_08028858(Entity* this) {
this->speed = 0;
}
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
}
@@ -383,7 +383,7 @@ void sub_080288C0(Entity* this) {
if (ent && (ent->bitfield & 0x80)) {
this->knockbackDirection = ent->knockbackDirection;
this->iframes = -ent->iframes;
- this->field_0x46 = ent->field_0x46;
+ this->knockbackSpeed = ent->knockbackSpeed;
this->knockbackDuration = ent->knockbackDuration;
ent->knockbackDuration = 0;
}
diff --git a/src/enemy/spikedBeetle.c b/src/enemy/spikedBeetle.c
index 8b10fb17..e0dedef5 100644
--- a/src/enemy/spikedBeetle.c
+++ b/src/enemy/spikedBeetle.c
@@ -94,7 +94,7 @@ void sub_0802B744(Entity* this) {
this->action = 2;
this->actionDelay = 0x1e;
} else {
- if (!ProcessMovement(this)) {
+ if (!ProcessMovement0(this)) {
this->actionDelay = 1;
}
}
@@ -127,7 +127,7 @@ void sub_0802B7FC(Entity* this) {
}
void sub_0802B820(Entity* this) {
- if (!sub_080AEFE0(this)) {
+ if (!ProcessMovement2(this)) {
this->actionDelay = 1;
}
GetNextFrame(this);
@@ -152,7 +152,7 @@ void sub_0802B880(Entity* this) {
}
void sub_0802B8B0(Entity* this) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
switch (sub_080044EC(this, 0x1800)) {
case 0:
this->action = 7;
diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c
index 3c5fcbcc..1049ffa4 100644
--- a/src/enemy/spinyBeetle.c
+++ b/src/enemy/spinyBeetle.c
@@ -325,7 +325,7 @@ void sub_08033D78(SpinyBeetleEntity* this) {
break;
default:
if (sub_080002E0(tile, super->collisionLayer) - 1 > 0x3e)
- ProcessMovement(super);
+ ProcessMovement0(super);
break;
}
}
diff --git a/src/enemy/spinyChuchu.c b/src/enemy/spinyChuchu.c
index 27a07827..5fad3258 100644
--- a/src/enemy/spinyChuchu.c
+++ b/src/enemy/spinyChuchu.c
@@ -175,7 +175,7 @@ void sub_080226EC(Entity* this) {
this->direction = sub_08049F84(this, 1);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
}
GetNextFrame(this);
@@ -224,7 +224,7 @@ void sub_0802281C(Entity* this) {
void sub_08022854(Entity* this) {
GetNextFrame(this);
if (this->frame & 1) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
if (GravityUpdate(this, Q_8_8(24.0)) == 0) {
this->action = 7;
this->hitType = 0x5c;
diff --git a/src/enemy/stalfos.c b/src/enemy/stalfos.c
index 2e6205d8..2751cd5b 100644
--- a/src/enemy/stalfos.c
+++ b/src/enemy/stalfos.c
@@ -188,7 +188,7 @@ void Stalfos_Action2(StalfosEntity* this) {
void Stalfos_Action3(StalfosEntity* this) {
if (sub_08039758(this) == 0) {
- if (ProcessMovement(super)) {
+ if (ProcessMovement0(super)) {
UpdateAnimationSingleFrame(super);
if (--this->unk_78 == 0) {
sub_0803998C(this);
@@ -201,7 +201,7 @@ void Stalfos_Action3(StalfosEntity* this) {
}
void Stalfos_Action4(StalfosEntity* this) {
- sub_080AEFE0(super);
+ ProcessMovement2(super);
if (GravityUpdate(super, 0x1800) == 0) {
sub_0803998C(this);
this->unk_7c = 0x5a;
@@ -210,7 +210,7 @@ void Stalfos_Action4(StalfosEntity* this) {
}
void Stalfos_Action5(StalfosEntity* this) {
- sub_080AEFE0(super);
+ ProcessMovement2(super);
GravityUpdate(super, 0x1800);
if (super->zVelocity < 0) {
super->action = 6;
@@ -260,7 +260,7 @@ void Stalfos_Action9(StalfosEntity* this) {
}
void Stalfos_Action11(StalfosEntity* this) {
- sub_080AEFE0(super);
+ ProcessMovement2(super);
UpdateAnimationSingleFrame(super);
if (--this->unk_78 == 0) {
sub_08039AD4(this);
@@ -365,7 +365,7 @@ void sub_0803992C(StalfosEntity* this) {
super->speed = 0xe0;
super->direction = super->animationState << 3;
this->unk_78 = (u16)gUnk_080CF900[Random() & 0xf];
- sub_080AE58C(super, super->direction, 0);
+ CalculateEntityTileCollisions(super, super->direction, 0);
if ((gUnk_080CF910[super->animationState] & super->collisions) != 0) {
InitAnimationForceUpdate(super, super->animationState);
} else {
diff --git a/src/enemy/tektite.c b/src/enemy/tektite.c
index c833daa1..67fb91a6 100644
--- a/src/enemy/tektite.c
+++ b/src/enemy/tektite.c
@@ -116,7 +116,7 @@ void sub_0802F300(Entity* this) {
u32 rand;
GetNextFrame(this);
- ProcessMovement(this);
+ ProcessMovement0(this);
temp = this->z.HALF.HI;
rand = Random() & 0xf;
diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c
index 2fd5458f..22d7c260 100644
--- a/src/enemy/tektiteGolden.c
+++ b/src/enemy/tektiteGolden.c
@@ -104,7 +104,7 @@ void sub_08038048(Entity* this) {
u32 rand;
UpdateAnimationVariableFrames(this, 2);
- ProcessMovement(this);
+ ProcessMovement0(this);
temp = this->z.HALF.HI;
rand = Random() & 0xf;
diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c
index 4ced8ccc..d58da091 100644
--- a/src/enemy/vaatiArm.c
+++ b/src/enemy/vaatiArm.c
@@ -698,7 +698,7 @@ void sub_08042EF4(Entity* this) {
}
entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3];
entity->direction = this->direction;
- ProcessMovement(entity);
+ ProcessMovement0(entity);
}
}
diff --git a/src/enemy/vaatiEyesMacro.c b/src/enemy/vaatiEyesMacro.c
index 8a6a8c31..7d84c1a5 100644
--- a/src/enemy/vaatiEyesMacro.c
+++ b/src/enemy/vaatiEyesMacro.c
@@ -246,7 +246,7 @@ void sub_0802F04C(Entity* this) {
oldX = this->x.HALF.HI;
oldY = this->y.HALF.HI;
- if (ProcessMovement(this) == 0) {
+ if (ProcessMovement0(this) == 0) {
sub_0802EFB8(this);
return;
}
diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c
index d810aa25..a84dfcbc 100644
--- a/src/enemy/vaatiRebornEnemy.c
+++ b/src/enemy/vaatiRebornEnemy.c
@@ -9,8 +9,6 @@
#include "area.h"
#include "functions.h"
-extern void sub_080AEFB4(Entity*);
-
void VaatiRebornEnemyType0PreAction(Entity*);
void VaatiRebornEnemyType1PreAction(Entity*);
void VaatiRebornEnemyType0Action0(Entity*);
@@ -218,7 +216,7 @@ void VaatiRebornEnemyType0Action1(Entity* this) {
this->y.HALF.HI--;
}
}
- sub_080AEFB4(this);
+ ProcessMovement1(this);
}
}
UpdateAnimationSingleFrame(this);
@@ -416,7 +414,7 @@ void VaatiRebornEnemyType0Action5(Entity* this) {
}
if (this->field_0x86.HALF.HI != 0) {
- sub_080AEFB4(this);
+ ProcessMovement1(this);
}
UpdateAnimationSingleFrame(this);
}
diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c
index a9abc3d9..6de1a8ae 100644
--- a/src/enemy/vaatiTransfigured.c
+++ b/src/enemy/vaatiTransfigured.c
@@ -249,7 +249,7 @@ void VaatiTransfiguredType0Action1(Entity* this) {
}
}
if (this->field_0x80.HALF.LO != 0xff) {
- ProcessMovement(this);
+ ProcessMovement0(this);
}
UpdateAnimationSingleFrame(this);
}
diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c
index 5ad9dd16..38115022 100644
--- a/src/enemy/vaatiWrath.c
+++ b/src/enemy/vaatiWrath.c
@@ -248,7 +248,7 @@ void VaatiWrathType0Action3(Entity* this) {
sub_08042004(this);
UpdateAnimationSingleFrame(this);
- ProcessMovement(this);
+ ProcessMovement0(this);
roomY = gRoomControls.origin_y;
bound = roomY + 0x90;
diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c
index 540ad1f9..94943d52 100644
--- a/src/enemy/wisp.c
+++ b/src/enemy/wisp.c
@@ -105,7 +105,7 @@ void sub_080336A8(Entity* this) {
} else if (this->collisions != 0) {
sub_0800417E(this, this->collisions);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
GetNextFrame(this);
}
diff --git a/src/enemy/wizzrobeWind.c b/src/enemy/wizzrobeWind.c
index 68c883d9..adb291e6 100644
--- a/src/enemy/wizzrobeWind.c
+++ b/src/enemy/wizzrobeWind.c
@@ -261,7 +261,7 @@ void sub_0802F9C8(WizzrobeEntity* this) {
}
} else {
if (super->type2 != 0) {
- ProcessMovement(super);
+ ProcessMovement0(super);
if (super->collisions != 0) {
super->flags &= 0x7f;
this->timer1 = 0x28;
diff --git a/src/movement.c b/src/movement.c
index 36d2fd2a..afe81525 100644
--- a/src/movement.c
+++ b/src/movement.c
@@ -6,7 +6,7 @@
#include "asm.h"
#include "item.h"
#include "coord.h"
-#include "coord.h"
+#include "functions.h"
/** Collisions. */
typedef enum {
@@ -29,245 +29,1781 @@ typedef enum {
COL_EAST_ANY = 0xe000,
} Collisions;
-extern u8* GetLayerByIndex(u32);
-
extern u8 gExitList_RoyalValley_ForestMaze[];
extern u8 gUnk_08135190[];
extern u8 gUnk_08134FBC[];
extern u8 gUnk_08135048[];
extern u8 gUnk_0813A76C[];
-extern const u16 gUnk_08133918[];
-extern const u16 gUnk_08133938[];
-extern const u16 gUnk_08133958[];
-extern const u16 gUnk_08133978[];
-extern const u16 gUnk_08133998[];
-extern const u16 gUnk_081339B8[];
-extern const u16 gUnk_081339D8[];
-extern const u16 gUnk_081339F8[];
-extern u32 (*const gUnk_08133A18[])(u32, u32);
-extern const u8 gUnk_08133A40[];
-extern const u8 gUnk_08133A5A[];
-extern const u8 gUnk_08133A67[];
-extern u32 (*const gUnk_08133F48[])(Entity*, u32, u32, u32);
-
-u32 sub_080AE4CC(u8*, s32, s32, s32);
-void sub_080AE58C(Entity*, u32, u32);
-u32 sub_080AE7E8(Entity*, u32, s32, s32);
+bool32 IsTileCollision(u8*, s32, s32, u32);
+void CalculateEntityTileCollisions(Entity*, u32, u32);
+bool32 ProcessMovementInternal(Entity*, s32, s32, u32);
bool32 sub_080AF0C8(Entity*);
-u32 sub_080AE3E4(void) {
- return 0;
+/** The type of the movement/collision? that is done. */
+typedef enum {
+ CollisionType0, // Normal/common? Used by most enemies and NPCs.
+ CollisionType1, // chaser, enemy50, fallingBoulder, ghini, keese, pesto, sensorBladeTrap, vaatiRebornEnemy,
+ // playerItem10, playerItem13
+ CollisionType2, // acroBandits, beetle, chuchu, fireballGuy, flyingSkull, helmasaur, keaton, lakitu,
+ // miniFireballGuy, peahat, rollobite, spikedBeetle, spinyChuchu, stalfos, itemOnGround,
+ // smallIceBlock, flyingPot, object1F
+ CollisionType3, // arrowProjectile, boneProjectile, cannonballProjectile, deekuSeedProjectile, fireProjectile,
+ // gyorgMaleEnergyProjectile, iceProjectile, lakituLightning, mandiblesProjectile, rockProjectile,
+ // spikedRollers, torchTrapProjectile, v2Projectile, v3ElectricProjectile, v3HandProjectile,
+ // v3TennisBallProjectile, windProjectile
+ CollisionType4, // lilypadLarge
+ CollisionType5, // chuchu
+ CollisionType6, // npc5
+ CollisionType7, // not used?
+ CollisionType8, // not used?
+ CollisionType9, // not used?
+ CollisionType10, // playerItem13, rollobite
+ CollisionType11, // not used?
+ CollisionType12, // chaser, sensorBladeTrap
+} CollisionType;
+
+/** The collision function that is evaluated for a tile depending on the x/y position of the entity in the tile. */
+typedef enum {
+ FilledNone = 0,
+ FilledAll = 1,
+ FilledNorthWest = 2,
+ FilledNorthEast = 3,
+ FilledSouthWest = 4,
+ FilledSouthEast = 5,
+ FilledSouth = 6,
+ FilledNorth = 7,
+ FilledWest = 8,
+ FilledEast = 9
+} TileFilled;
+
+bool32 MoveNorth(Entity*, s32, s32, u32);
+bool32 MoveNorthEast(Entity*, s32, s32, u32);
+bool32 MoveEast(Entity*, s32, s32, u32);
+bool32 MoveSouthEast(Entity*, s32, s32, u32);
+bool32 MoveSouth(Entity*, s32, s32, u32);
+bool32 MoveSouthWest(Entity*, s32, s32, u32);
+bool32 MoveWest(Entity*, s32, s32, u32);
+bool32 MoveNorthWest(Entity*, s32, s32, u32);
+
+/** Empty */
+bool32 TileCollisionFunction0(s32 x, s32 y) {
+ return FALSE;
}
-u32 sub_080AE3E8(void) {
- return 1;
+/** Fully filled */
+bool32 TileCollisionFunction1(s32 x, s32 y) {
+ return TRUE;
}
-u32 sub_080AE3EC(u32 param_1, u32 param_2) {
- return gUnk_08133918[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** Diagonal North West filled*/
+bool32 TileCollisionFunction2(s32 x, s32 y) {
+ static const u16 gUnk_08133918[] = {
+ /*
+ 0b1000000000000000,
+ 0b1100000000000000,
+ 0b1110000000000000,
+ 0b1111000000000000,
+ 0b1111100000000000,
+ 0b1111110000000000,
+ 0b1111111000000000,
+ 0b1111111100000000,
+ 0b1111111110000000,
+ 0b1111111111000000,
+ 0b1111111111100000,
+ 0b1111111111110000,
+ 0b1111111111111000,
+ 0b1111111111111100,
+ 0b1111111111111110,
+ 0b1111111111111111,
+ */
+ 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535,
+ };
+
+ return gUnk_08133918[y & 0xf] >> (x & 0xf) & 1;
}
-u32 sub_080AE408(u32 param_1, u32 param_2) {
- return gUnk_08133938[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** Diagonal North East filled*/
+bool32 TileCollisionFunction3(s32 x, s32 y) {
+ static const u16 gUnk_08133938[] = {
+ /*
+ 0b1,
+ 0b11,
+ 0b111,
+ 0b1111,
+ 0b11111,
+ 0b111111,
+ 0b1111111,
+ 0b11111111,
+ 0b111111111,
+ 0b1111111111,
+ 0b11111111111,
+ 0b111111111111,
+ 0b1111111111111,
+ 0b11111111111111,
+ 0b111111111111111,
+ 0b1111111111111111,
+ */
+ 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535,
+ };
+ return gUnk_08133938[y & 0xf] >> (x & 0xf) & 1;
}
-u32 sub_080AE424(u32 param_1, u32 param_2) {
- return gUnk_08133958[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** Diagonal South West filled*/
+bool32 TileCollisionFunction4(s32 x, s32 y) {
+ static const u16 gUnk_08133958[] = {
+ /*
+ 0b1111111111111111,
+ 0b1111111111111110,
+ 0b1111111111111100,
+ 0b1111111111111000,
+ 0b1111111111110000,
+ 0b1111111111100000,
+ 0b1111111111000000,
+ 0b1111111110000000,
+ 0b1111111100000000,
+ 0b1111111000000000,
+ 0b1111110000000000,
+ 0b1111100000000000,
+ 0b1111000000000000,
+ 0b1110000000000000,
+ 0b1100000000000000,
+ 0b1000000000000000,
+ */
+ 65535, 65534, 65532, 65528, 65520, 65504, 65472, 65408, 65280, 65024, 64512, 63488, 61440, 57344, 49152, 32768,
+ };
+ return gUnk_08133958[y & 0xf] >> (x & 0xf) & 1;
}
-u32 sub_080AE440(u32 param_1, u32 param_2) {
- return gUnk_08133978[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** Diagonal South East filled*/
+bool32 TileCollisionFunction5(s32 x, s32 y) {
+ static const u16 gUnk_08133978[] = {
+ /*
+ 0b1111111111111111,
+ 0b111111111111111,
+ 0b11111111111111,
+ 0b1111111111111,
+ 0b111111111111,
+ 0b11111111111,
+ 0b1111111111,
+ 0b111111111,
+ 0b11111111,
+ 0b1111111,
+ 0b111111,
+ 0b11111,
+ 0b1111,
+ 0b111,
+ 0b11,
+ 0b1,
+ */
+ 65535, 32767, 16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1,
+ };
+ return gUnk_08133978[y & 0xf] >> (x & 0xf) & 1;
}
-u32 sub_080AE45C(u32 param_1, u32 param_2) {
- return gUnk_08133998[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** 3/8 South filled */
+bool32 TileCollisionFunction6(s32 x, s32 y) {
+ static const u16 gUnk_08133998[] = {
+ /*
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b0,
+ 0b0,
+ 0b0,
+ 0b0,
+ 0b0,
+ 0b0,
+ */
+ 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 0, 0, 0, 0, 0, 0,
+ };
+
+ return gUnk_08133998[y & 0xf] >> (x & 0xf) & 1;
}
-u32 sub_080AE478(u32 param_1, u32 param_2) {
- return gUnk_081339B8[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** 3/8 North filled */
+bool32 TileCollisionFunction7(s32 x, s32 y) {
+ static const u16 gUnk_081339B8[] = {
+ /*
+ 0b0,
+ 0b0,
+ 0b0,
+ 0b0,
+ 0b0,
+ 0b0,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ */
+ 0, 0, 0, 0, 0, 0, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535,
+ };
+ return gUnk_081339B8[y & 0xf] >> (x & 0xf) & 1;
}
-u32 sub_080AE494(u32 param_1, u32 param_2) {
- return gUnk_081339D8[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** 3/8 West filled */
+bool32 TileCollisionFunction8(s32 x, s32 y) {
+ static const u16 gUnk_081339D8[] = {
+ /*
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ 0b1111111111000000,
+ */
+ 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472,
+ };
+ return gUnk_081339D8[y & 0xf] >> (x & 0xf) & 1;
}
-u32 sub_080AE4B0(u32 param_1, u32 param_2) {
- return gUnk_081339F8[param_2 & 0xf] >> (param_1 & 0xf) & 1;
+/** 3/8 East filled */
+bool32 TileCollisionFunction9(s32 x, s32 y) {
+ static const u16 gUnk_081339F8[] = {
+ /*
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ 0b1111111111,
+ */
+ 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ };
+ return gUnk_081339F8[y & 0xf] >> (x & 0xf) & 1;
}
-bool32 sub_080AE4CC(u8* layer, s32 param_2, s32 param_3, s32 param_4) {
- u32 tmp = layer[TILE(param_2, param_3)];
- if (tmp == 0) {
- if (param_4 == 4) {
+bool32 IsTileCollision(u8* layer, s32 x, s32 y, u32 collisionType) {
+ static bool32 (*const tileCollisionFunctions[])(s32, s32) = {
+ TileCollisionFunction0, TileCollisionFunction1, TileCollisionFunction2, TileCollisionFunction3,
+ TileCollisionFunction4, TileCollisionFunction5, TileCollisionFunction6, TileCollisionFunction7,
+ TileCollisionFunction8, TileCollisionFunction9,
+ };
+
+ u32 tileType = layer[TILE(x, y)];
+ if (tileType == 0) {
+ if (collisionType == 4) {
return TRUE;
} else {
return FALSE;
}
} else {
- if (tmp <= 0xf) {
+ if (tileType < 0x10) {
+ static const u8 collisionLookup[] = {
+ 0xff, FilledAll, FilledNone, FilledNone, 0xff, FilledAll, FilledNone, FilledAll, FilledAll,
+ FilledAll, 0xff, FilledAll, 0xff, FilledAll, FilledAll, FilledAll, FilledAll, FilledAll,
+ FilledNone, FilledAll, 0xff, FilledAll, FilledAll, FilledAll, 0xff, FilledAll,
+ };
- if (gUnk_08133A40[param_4 * 2 + ((tmp + 1) >> 4)] == 0) {
+ if (collisionLookup[collisionType * 2 + ((tileType + 1) >> 4)] == FilledNone) {
return FALSE;
}
- if (gUnk_08133A40[param_4 * 2 + ((tmp + 1) >> 4)] == 1) {
+ if (collisionLookup[collisionType * 2 + ((tileType + 1) >> 4)] == FilledAll) {
return TRUE;
}
- if ((param_3 & 8) == 0) {
- tmp = (u32)(layer[TILE(param_2, param_3)]);
- tmp >>= 2;
+ // Calculation for 0xff in previous lookup.
+ if ((y & 8) == 0) {
+ tileType = layer[TILE(x, y)];
+ tileType >>= 2;
}
- if ((param_2 & 8) == 0) {
- tmp >>= 1;
+ if ((x & 8) == 0) {
+ tileType >>= 1;
}
- return tmp & 1;
-
+ return tileType & 1;
} else {
- if (tmp == 0xff) {
- return gUnk_08133A18[gUnk_08133A5A[param_4]](param_2, param_3);
+ if (tileType == 0xff) {
+ static const u8 collisionFunctionLookup[] = {
+ FilledAll, FilledAll, FilledAll, FilledNone, FilledAll, FilledAll, FilledAll,
+ FilledAll, FilledAll, FilledAll, FilledAll, FilledAll, FilledAll,
+ };
+ return tileCollisionFunctions[collisionFunctionLookup[collisionType]](x, y);
} else {
- if (tmp > 0x6f) {
+ static const u8 collisionFunctionLookup[] = {
+ /* collisionType: 0 */
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 1 */
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 2 */
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 3 */
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 4 */
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 5 */
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 6 */
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledSouth,
+ FilledNorth,
+ FilledWest,
+ FilledEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 7 */
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 8 */
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 9 */
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 10 */
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 11 */
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /* collisionType: 12 */
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNorthWest,
+ FilledNorthEast,
+ FilledSouthWest,
+ FilledSouthEast,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledNone,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ FilledAll,
+ /**/
+ FilledNone,
+ };
+ if (tileType > 0x6f) {
return TRUE;
}
- return gUnk_08133A18[gUnk_08133A67[param_4 * 0x60 + tmp - 0x10]](param_2, param_3);
+
+ return tileCollisionFunctions[collisionFunctionLookup[collisionType * 0x60 + tileType - 0x10]](x, y);
+ // return tileCollisionFunctions[collisionFunctionLookup[collisionType][tileType - 0x10]](x, y);
}
}
}
return FALSE;
}
-NONMATCH("asm/non_matching/movement/sub_080AE58C.inc", void sub_080AE58C(Entity* this, u32 param_2, u32 param_3)) {
+ASM_FUNC("asm/non_matching/movement/CalculateEntityTileCollisions.inc",
+ void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionType))
+/*NONMATCH("asm/non_matching/movement/CalculateEntityTileCollisions.inc",
+ void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionType)) {
u8* layer;
- u32 uVar2;
- s32 iVar3;
- u32 uVar4;
- u32 uVar5;
- u32 uVar6;
- u32 uVar7;
- s32 iVar8;
- s32 iVar9;
- u32 uVar10;
- u32 uVar11;
- Hitbox* pHVar12;
- s32 iVar13;
- u16 uVar14;
- s32 iVar15;
-
- layer = GetLayerByIndex(this->collisionLayer);
- layer += 0x2004;
- iVar8 = this->hitbox->offset_x + this->x.HALF.HI;
- iVar9 = this->hitbox->offset_y + this->y.HALF.HI;
- uVar2 = this->hitbox->unk2[0];
- uVar10 = this->hitbox->unk2[1];
- if ((param_2 & 0xf) != 0) {
- if (0xf >= param_2) {
- iVar15 = iVar8 + uVar2;
- iVar3 = sub_080AE4CC(layer, iVar15, iVar9, param_3);
- uVar2 = sub_080AE4CC(layer, iVar15, iVar9 + uVar10, param_3);
- uVar10 = sub_080AE4CC(layer, iVar15, iVar9 - uVar10, param_3);
- uVar2 = ((iVar3 << 1 | uVar2) << 1 | uVar10) << 6;
+
+ u32 colResult;
+
+ s32 xMin;
+ s32 xVar1;
+ s32 xVar2;
+
+ s32 yMin;
+ s32 yVar1;
+ s32 yVar2;
+
+ bool32 col1;
+ bool32 col2;
+ bool32 col3;
+ bool32 col4;
+ bool32 col5;
+ bool32 col6;
+
+ u32 hitboxUnkX;
+ u32 hitboxUnkY;
+
+ layer = GetLayerByIndex(this->collisionLayer)->_2004;
+ xMin = this->x.HALF.HI + this->hitbox->offset_x;
+ yMin = this->y.HALF.HI + this->hitbox->offset_y;
+ hitboxUnkX = this->hitbox->unk2[0];
+ hitboxUnkY = this->hitbox->unk2[1];
+ if ((direction & 0xf) != 0) {
+ if (0xf >= direction) {
+ col1 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
+ col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin + hitboxUnkY, collisionType);
+ col3 = IsTileCollision(layer, xMin + hitboxUnkX, yMin - hitboxUnkY, collisionType);
+ colResult = ((col1 << 1 | col2) << 1 | col3) << 6;
} else {
- iVar15 = iVar8 - uVar2;
- iVar3 = sub_080AE4CC(layer, iVar15, iVar9, param_3);
- uVar2 = sub_080AE4CC(layer, iVar15, iVar9 + uVar10, param_3);
- uVar2 = iVar3 << 1 | uVar2;
- iVar13 = iVar9 - uVar10;
- uVar10 = sub_080AE4CC(layer, iVar15, iVar13, param_3);
- uVar2 = (uVar2 << 1 | uVar10) << 2;
+ col1 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
+ col2 = IsTileCollision(layer, xMin - hitboxUnkX, yMin + hitboxUnkY, collisionType);
+ colResult = col1 << 1 | col2;
+ col3 = IsTileCollision(layer, xMin - hitboxUnkX, yMin - hitboxUnkY, collisionType);
+ colResult = (colResult << 1 | col3) << 2;
}
} else {
- iVar15 = iVar8 + uVar2;
- iVar3 = sub_080AE4CC(layer, iVar15, iVar9, param_3);
- uVar11 = sub_080AE4CC(layer, iVar15, iVar9 + uVar10, param_3);
- iVar13 = iVar9 - uVar10;
- uVar4 = sub_080AE4CC(layer, iVar15, iVar13, param_3);
- iVar15 = iVar8 - uVar2;
- uVar5 = sub_080AE4CC(layer, iVar15, iVar9, param_3);
- uVar2 = sub_080AE4CC(layer, iVar15, iVar9 + uVar10, param_3);
- uVar2 = (((iVar3 << 1 | uVar11) << 1 | uVar4) << 2 | uVar5) << 1 | uVar2;
- uVar10 = sub_080AE4CC(layer, iVar15, iVar13, param_3);
- uVar2 = (uVar2 << 1 | uVar10) << 2;
- }
- uVar10 = this->hitbox->unk2[2];
- uVar11 = this->hitbox->unk2[3];
- if (((param_2 - 8) & 0xf) == 0) {
- iVar15 = iVar9 + uVar11;
- uVar4 = sub_080AE4CC(layer, iVar8, iVar15, param_3);
- uVar5 = sub_080AE4CC(layer, iVar8 + uVar10, iVar15, param_3);
- iVar3 = iVar8 - uVar10;
- uVar6 = sub_080AE4CC(layer, iVar3, iVar15, param_3);
- iVar9 -= uVar11;
- uVar7 = sub_080AE4CC(layer, iVar8, iVar9, param_3);
- uVar11 = sub_080AE4CC(layer, iVar8 + uVar10, iVar9, param_3);
- uVar11 = ((((uVar2 | uVar4) << 1 | uVar5) << 1 | uVar6) << 2 | uVar7) << 1 | uVar11;
- uVar2 = sub_080AE4CC(layer, iVar3, iVar9, param_3);
- this->collisions = ((uVar11 << 1 | uVar2) << 1);
+ col1 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
+ col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin + hitboxUnkY, collisionType);
+ col3 = IsTileCollision(layer, xMin + hitboxUnkX, yMin - hitboxUnkY, collisionType);
+ col4 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
+ col5 = IsTileCollision(layer, xMin - hitboxUnkX, yMin + hitboxUnkY, collisionType);
+ colResult = (((col1 << 1 | col2) << 1 | col3) << 2 | col4) << 1 | col5;
+ col6 = IsTileCollision(layer, xMin - hitboxUnkX, yMin - hitboxUnkY, collisionType);
+ colResult = (colResult << 1 | col6) << 2;
+ }
+
+ hitboxUnkX = this->hitbox->unk2[2];
+ hitboxUnkY = this->hitbox->unk2[3];
+
+ if (((direction - 8) & 0xf) == 0) {
+ col1 = IsTileCollision(layer, xMin, yMin + hitboxUnkY, collisionType);
+ col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin + hitboxUnkY, collisionType);
+ col3 = IsTileCollision(layer, xMin - hitboxUnkX, yMin + hitboxUnkY, collisionType);
+ yMin -= hitboxUnkY;
+ col4 = IsTileCollision(layer, xMin, yMin, collisionType);
+ col5 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
+ colResult = ((((colResult | col1) << 1 | col2) << 1 | col3) << 2 | col4) << 1 | col5;
+ col6 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
+ this->collisions = ((colResult << 1 | col6) << 1);
} else {
- if (param_2 - 8 < 0x10) {
- iVar9 += uVar11;
- uVar11 = sub_080AE4CC(layer, iVar8, iVar9, param_3);
- uVar4 = sub_080AE4CC(layer, iVar8 + uVar10, iVar9, param_3);
- uVar10 = sub_080AE4CC(layer, iVar8 - uVar10, iVar9, param_3);
- this->collisions = ((((uVar2 | uVar11) << 1 | uVar4) << 1 | uVar10) << 5);
+ if (direction - 8 < 0x10) {
+ yMin += hitboxUnkY;
+ col1 = IsTileCollision(layer, xMin, yMin, collisionType);
+ col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
+ col3 = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
+ this->collisions = ((((colResult | col1) << 1 | col2) << 1 | col3) << 5);
} else {
- iVar9 -= uVar11;
- uVar4 = sub_080AE4CC(layer, iVar8, iVar9, param_3);
- uVar11 = sub_080AE4CC(layer, iVar8 + uVar10, iVar9, param_3);
- uVar11 = (uVar2 << 4 | uVar4) << 1 | uVar11;
- iVar3 = iVar8 - uVar10;
- uVar2 = sub_080AE4CC(layer, iVar3, iVar9, param_3);
- this->collisions = ((uVar11 << 1 | uVar2) << 1);
+ yMin -= hitboxUnkY;
+ col1 = IsTileCollision(layer, xMin, yMin, collisionType);
+ col2 = IsTileCollision(layer, xMin + hitboxUnkX, yMin, collisionType);
+ col6 = (colResult << 4 | col1) << 1 | col2;
+ colResult = IsTileCollision(layer, xMin - hitboxUnkX, yMin, collisionType);
+ this->collisions = ((col6 << 1 | colResult) << 1);
}
}
}
-END_NONMATCH
+END_NONMATCH*/
-u32 sub_080AE7E8(Entity* param_1, u32 param_2, s32 param_3, s32 param_4) {
- return gUnk_08133F48[param_3](param_1, param_2, param_3 << 3, param_4);
+bool32 ProcessMovementInternal(Entity* this, s32 radius, s32 direction, u32 collisionType) {
+ static bool32 (*const gDirectionalMovementFunctions[])(Entity*, s32, s32, u32) = {
+ MoveNorth,
+ /**/
+ MoveNorthEast,
+ MoveNorthEast,
+ MoveNorthEast,
+ MoveNorthEast,
+ MoveNorthEast,
+ MoveNorthEast,
+ MoveNorthEast,
+ /**/
+ MoveEast,
+ /**/
+ MoveSouthEast,
+ MoveSouthEast,
+ MoveSouthEast,
+ MoveSouthEast,
+ MoveSouthEast,
+ MoveSouthEast,
+ MoveSouthEast,
+ /**/
+ MoveSouth,
+ /**/
+ MoveSouthWest,
+ MoveSouthWest,
+ MoveSouthWest,
+ MoveSouthWest,
+ MoveSouthWest,
+ MoveSouthWest,
+ MoveSouthWest,
+ /**/
+ MoveWest,
+ /**/
+ MoveNorthWest,
+ MoveNorthWest,
+ MoveNorthWest,
+ MoveNorthWest,
+ MoveNorthWest,
+ MoveNorthWest,
+ MoveNorthWest,
+ };
+ return gDirectionalMovementFunctions[direction](this, radius, direction << 3, collisionType);
}
-bool32 sub_080AE800(Entity* this, s32 radius, s32 angle, u32 param_4) {
- s32 tmpX = 0;
- s32 tmpY = 0;
+bool32 MoveNorth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
+ s32 moveA = 0;
+ s32 moveB = 0;
if ((this->collisions & COL_NORTH_ANY) != COL_NONE) {
if ((this->collisions & COL_NORTH_ANY) == COL_NORTH_WEST) {
if ((this->collisions & COL_EAST_ANY) == COL_NONE) {
- tmpX = radius * 0x100;
- this->x.WORD += tmpX;
- sub_080AE58C(this, 4, param_4);
+ moveA = radius * 0x100;
+ this->x.WORD += moveA;
+ CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
if ((this->collisions & COL_NORTH_ANY) == COL_NONE) {
- tmpY = gSineTable[0x40] * radius;
- tmpX = radius * 0x100;
- this->y.WORD -= tmpY;
+ moveB = gSineTable[0x40] * radius;
+ moveA = radius * 0x100;
+ this->y.WORD -= moveB;
}
}
} else {
if ((this->collisions & COL_NORTH_ANY) == COL_NORTH_EAST) {
if ((this->collisions & COL_WEST_ANY) == COL_NONE) {
- tmpX = radius * 0x100;
- this->x.WORD += radius * -0x100;
- sub_080AE58C(this, 0x1c, param_4);
+ moveA = radius * 0x100;
+ this->x.WORD -= moveA;
+ CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
if ((this->collisions & COL_NORTH_ANY) == COL_NONE) {
- tmpY = gSineTable[0x40] * radius;
- tmpX = radius * 0x100;
- this->y.WORD -= tmpY;
+ moveB = gSineTable[0x40] * radius;
+ moveA = radius * 0x100;
+ this->y.WORD -= moveB;
}
}
}
}
} else {
- tmpX = gSineTable[0x40] * radius;
- this->y.WORD -= tmpX;
+ moveA = gSineTable[0x40] * radius;
+ this->y.WORD -= moveA;
}
- if ((tmpX + 0x3333U < 0x6666) && (tmpY + 0x3333U < 0x6666)) {
+ if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
return FALSE;
} else {
return TRUE;
}
}
-NONMATCH("asm/non_matching/movement/sub_080AE8D8.inc",
- bool32 sub_080AE8D8(Entity* this, s32 radius, s32 angle, u32 param_4)) {
+ASM_FUNC("asm/non_matching/movement/MoveNorthEast.inc",
+ bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType))
+/*NONMATCH("asm/non_matching/movement/MoveNorthEast.inc",
+ bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
s32 moveA = 0;
s32 moveB = 0;
if (((this->collisions & COL_NORTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) {
@@ -280,12 +1816,12 @@ NONMATCH("asm/non_matching/movement/sub_080AE8D8.inc",
if ((this->collisions & COL_NORTH_ANY) == COL_NORTH_WEST) {
moveA = radius * 0x100;
this->x.WORD += moveA;
- sub_080AE58C(this, 4, param_4);
+ CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
} else {
if ((this->collisions & COL_EAST_ANY) == COL_EAST_NORTH) {
moveA = radius * 0x100;
this->y.WORD -= moveA;
- sub_080AE58C(this, 4, param_4);
+ CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
}
}
if ((this->collisions & COL_NORTH_ANY) == COL_NONE) {
@@ -304,9 +1840,9 @@ NONMATCH("asm/non_matching/movement/sub_080AE8D8.inc",
return TRUE;
}
}
-END_NONMATCH
+END_NONMATCH*/
-bool32 sub_080AE9CC(Entity* this, s32 radius, s32 angle, u32 param_4) {
+bool32 MoveEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
s32 moveB = 0;
if ((this->collisions & COL_EAST_ANY) != COL_NONE) {
@@ -314,7 +1850,7 @@ bool32 sub_080AE9CC(Entity* this, s32 radius, s32 angle, u32 param_4) {
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
moveA = radius * 0x100;
this->y.WORD += moveA;
- sub_080AE58C(this, 0xc, param_4);
+ CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
if ((this->collisions & COL_EAST_ANY) == COL_NONE) {
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
@@ -324,8 +1860,8 @@ bool32 sub_080AE9CC(Entity* this, s32 radius, s32 angle, u32 param_4) {
if ((this->collisions & COL_EAST_ANY) == COL_EAST_NORTH) {
if ((this->collisions & COL_NORTH_ANY) == COL_NONE) {
moveA = radius * 0x100;
- this->y.WORD = this->y.WORD -= moveA;
- sub_080AE58C(this, 4, param_4);
+ this->y.WORD -= moveA;
+ CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
if ((this->collisions & COL_EAST_ANY) == COL_NONE) {
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
@@ -344,8 +1880,10 @@ bool32 sub_080AE9CC(Entity* this, s32 radius, s32 angle, u32 param_4) {
}
}
-NONMATCH("asm/non_matching/movement/sub_080AEAC0.inc",
- bool32 sub_080AEAC0(Entity* this, s32 radius, s32 angle, u32 param_4)) {
+ASM_FUNC("asm/non_matching/movement/MoveSouthEast.inc",
+ bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType))
+/*NONMATCH("asm/non_matching/movement/MoveSouthEast.inc",
+ bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
s32 moveA = 0;
s32 moveB = 0;
if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) {
@@ -358,11 +1896,11 @@ NONMATCH("asm/non_matching/movement/sub_080AEAC0.inc",
if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_WEST) {
moveA = radius * 0x100;
this->x.WORD += moveA;
- sub_080AE58C(this, 0xc, param_4);
+ CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
} else if ((this->collisions & COL_EAST_ANY) == COL_EAST_SOUTH) {
moveA = radius * 0x100;
this->y.WORD += moveA;
- sub_080AE58C(this, 0xc, param_4);
+ CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
}
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
moveB = gSineTable[angle + 0x40] * radius;
@@ -380,9 +1918,9 @@ NONMATCH("asm/non_matching/movement/sub_080AEAC0.inc",
return TRUE;
}
}
-END_NONMATCH
+END_NONMATCH*/
-bool32 sub_080AEBB4(Entity* this, s32 radius, s32 angle, u32 param_4) {
+bool32 MoveSouth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
s32 moveB = 0;
@@ -391,7 +1929,7 @@ bool32 sub_080AEBB4(Entity* this, s32 radius, s32 angle, u32 param_4) {
if ((this->collisions & COL_EAST_ANY) == COL_NONE) {
moveA = radius * 0x100;
this->x.WORD += moveA;
- sub_080AE58C(this, 0xc, param_4);
+ CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
moveB = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveB;
@@ -402,7 +1940,7 @@ bool32 sub_080AEBB4(Entity* this, s32 radius, s32 angle, u32 param_4) {
if ((this->collisions & COL_WEST_ANY) == COL_NONE) {
moveA = radius * 0x100;
this->x.WORD -= moveA;
- sub_080AE58C(this, 0x14, param_4);
+ CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
moveB = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveB;
@@ -421,8 +1959,10 @@ bool32 sub_080AEBB4(Entity* this, s32 radius, s32 angle, u32 param_4) {
}
}
-NONMATCH("asm/non_matching/movement/sub_080AECAC.inc",
- bool32 sub_080AECAC(Entity* this, s32 radius, s32 angle, u32 param_4)) {
+ASM_FUNC("asm/non_matching/movement/MoveSouthWest.inc",
+ bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType))
+/*NONMATCH("asm/non_matching/movement/MoveSouthWest.inc",
+ bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
s32 moveA = 0;
s32 moveB = 0;
if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_WEST_ANY) == COL_NONE)) {
@@ -435,12 +1975,12 @@ NONMATCH("asm/non_matching/movement/sub_080AECAC.inc",
if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_EAST) {
moveB = radius * 0x100;
this->x.WORD -= moveB;
- sub_080AE58C(this, 0x14, param_4);
+ CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
} else {
if ((this->collisions & COL_WEST_ANY) == COL_WEST_SOUTH) {
moveB = radius * 0x100;
this->y.WORD += moveB;
- sub_080AE58C(this, 0x14, param_4);
+ CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
}
}
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
@@ -459,9 +1999,9 @@ NONMATCH("asm/non_matching/movement/sub_080AECAC.inc",
return TRUE;
}
}
-END_NONMATCH
+END_NONMATCH*/
-bool32 sub_080AEDA0(Entity* this, s32 radius, s32 angle, u32 param_4) {
+bool32 MoveWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
s32 moveB = 0;
@@ -471,7 +2011,8 @@ bool32 sub_080AEDA0(Entity* this, s32 radius, s32 angle, u32 param_4) {
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
moveA = radius * 0x100;
this->y.WORD += moveA;
- sub_080AE58C(this, 0x1c, param_4);
+ CalculateEntityTileCollisions(this, DirectionNorthWest,
+ collisionType); // @bug? Should this calculate for DirectionSouthWest?
if ((this->collisions & COL_WEST_ANY) == COL_NONE) {
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
@@ -481,8 +2022,8 @@ bool32 sub_080AEDA0(Entity* this, s32 radius, s32 angle, u32 param_4) {
if ((this->collisions & COL_WEST_ANY) == COL_WEST_NORTH) {
if ((this->collisions & COL_NORTH_ANY) == COL_NONE) {
moveA = radius * 0x100;
- this->y.WORD = this->y.WORD + radius * -0x100;
- sub_080AE58C(this, 0x1c, param_4);
+ this->y.WORD -= moveA;
+ CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
if ((this->collisions & COL_WEST_ANY) == COL_NONE) {
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
@@ -502,8 +2043,10 @@ bool32 sub_080AEDA0(Entity* this, s32 radius, s32 angle, u32 param_4) {
}
}
-NONMATCH("asm/non_matching/movement/sub_080AEE94.inc",
- bool32 sub_080AEE94(Entity* this, s32 radius, s32 angle, u32 param_4)) {
+ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc",
+ bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType))
+/*NONMATCH("asm/non_matching/movement/MoveNorthWest.inc",
+ bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
s32 moveA = 0;
s32 moveB = 0;
u32 colNorthAny = (this->collisions & COL_NORTH_ANY);
@@ -518,12 +2061,12 @@ NONMATCH("asm/non_matching/movement/sub_080AEE94.inc",
if (colNorthAny == COL_NORTH_EAST) {
moveA = radius * 0x100;
this->x.WORD -= moveA;
- sub_080AE58C(this, 0x1c, param_4);
+ CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
} else {
if (colWestAny == COL_WEST_NORTH) {
moveA = radius * 0x100;
this->y.WORD -= moveA;
- sub_080AE58C(this, 0x1c, param_4);
+ CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
}
}
if ((this->collisions & COL_NORTH_ANY) == COL_NONE) {
@@ -542,88 +2085,88 @@ NONMATCH("asm/non_matching/movement/sub_080AEE94.inc",
return TRUE;
}
}
-END_NONMATCH
+END_NONMATCH*/
-u32 ProcessMovement(Entity* this) {
- u32 result;
+bool32 ProcessMovement0(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, this->direction, 0);
- result = sub_080AE7E8(this, this->speed, this->direction, 0);
+ CalculateEntityTileCollisions(this, this->direction, 0);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 0);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AEFB4(Entity* this) {
- u32 result;
+bool32 ProcessMovement1(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, this->direction, 1);
- result = sub_080AE7E8(this, this->speed, this->direction, 1);
+ CalculateEntityTileCollisions(this, this->direction, 1);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 1);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AEFE0(Entity* this) {
- u32 result;
+bool32 ProcessMovement2(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, this->direction, 2);
- result = sub_080AE7E8(this, this->speed, this->direction, 2);
+ CalculateEntityTileCollisions(this, this->direction, 2);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 2);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AF00C(Entity* this) {
- u32 result;
+bool32 ProcessMovement10(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, this->direction, 10);
- result = sub_080AE7E8(this, this->speed, this->direction, 10);
+ CalculateEntityTileCollisions(this, this->direction, 10);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 10);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AF038(Entity* this) {
- u32 result;
+bool32 ProcessMovement12(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, (u32)this->direction, 0xc);
- result = sub_080AE7E8(this, (s32)this->speed, this->direction, 0xc);
+ CalculateEntityTileCollisions(this, this->direction, 12);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 12);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AF064(Entity* this, u32 param_2, u32 param_3) {
- u32 result;
+bool32 ProcessMovement0_custom(Entity* this, u32 direction, u32 speed) {
+ bool32 result;
- if ((param_2 & 0x80) == 0) {
- sub_080AE58C(this, param_2, 0);
- result = sub_080AE7E8(this, param_3, param_2, 0);
+ if ((direction & 0x80) == 0) {
+ CalculateEntityTileCollisions(this, direction, 0);
+ result = ProcessMovementInternal(this, speed, direction, 0);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AF090(Entity* this) {
- u32 result;
+bool32 ProcessMovement3(Entity* this) {
+ bool32 result;
if (((this->direction & 0x80) == 0) && (sub_080AF0C8(this) == 0)) {
- sub_080AE58C(this, (u32)this->direction, 3);
- result = sub_080AE7E8(this, (s32)this->speed, this->direction, 3);
+ CalculateEntityTileCollisions(this, this->direction, 3);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 3);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
@@ -659,68 +2202,68 @@ bool32 sub_080AF0C8(Entity* this) {
return FALSE;
}
-u32 sub_080AF134(Entity* this) {
- u32 result;
+bool32 ProcessMovement4(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, this->direction, 4);
- result = sub_080AE7E8(this, this->speed, this->direction, 4);
+ CalculateEntityTileCollisions(this, this->direction, 4);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 4);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AF160(Entity* this) {
- u32 result;
+bool32 ProcessMovement5(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, this->direction, 5);
- result = sub_080AE7E8(this, this->speed, this->direction, 5);
+ CalculateEntityTileCollisions(this, this->direction, 5);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 5);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
void Knockback1(Entity* this) {
this->knockbackDuration--;
- sub_080AE58C(this, this->knockbackDirection, 2);
- sub_080AE7E8(this, this->field_0x46, this->knockbackDirection, 2);
+ CalculateEntityTileCollisions(this, this->knockbackDirection, 2);
+ ProcessMovementInternal(this, this->knockbackSpeed, this->knockbackDirection, 2);
}
void Knockback2(Entity* this) {
this->knockbackDuration--;
- sub_080AE58C(this, this->knockbackDirection, 1);
- sub_080AE7E8(this, this->field_0x46, this->knockbackDirection, 1);
+ CalculateEntityTileCollisions(this, this->knockbackDirection, 1);
+ ProcessMovementInternal(this, this->knockbackSpeed, this->knockbackDirection, 1);
}
-u32 sub_080AF1EC(Entity* this) {
- u32 result;
+bool32 ProcessMovement6(Entity* this) {
+ bool32 result;
if ((this->direction & 0x80) == 0) {
- sub_080AE58C(this, this->direction, 6);
- result = sub_080AE7E8(this, this->speed, this->direction, 6);
+ CalculateEntityTileCollisions(this, this->direction, 6);
+ result = ProcessMovementInternal(this, this->speed, this->direction, 6);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-u32 sub_080AF218(Entity* this, u32 param_2, u32 param_3) {
- u32 result;
+bool32 ProcessMovement6_custom(Entity* this, u32 direction, u32 speed) {
+ bool32 result;
- if ((param_2 & 0x80) == 0) {
- sub_080AE58C(this, param_2, 6);
- result = sub_080AE7E8(this, param_3, param_2, 6);
+ if ((direction & 0x80) == 0) {
+ CalculateEntityTileCollisions(this, direction, 6);
+ result = ProcessMovementInternal(this, speed, direction, 6);
} else {
- result = 0;
+ result = FALSE;
}
return result;
}
-void sub_080AF244(Entity* param_1, u32 param_2, u32 param_3) {
- sub_080AE7E8(param_1, param_2, param_3, 2);
+void ProcessMovementInternal2(Entity* this, u32 direction, u32 speed) {
+ ProcessMovementInternal(this, direction, speed, 2);
}
void sub_080AF250(s32 param_1) {
diff --git a/src/npc/castleMaid.c b/src/npc/castleMaid.c
index 81483829..b846a04a 100644
--- a/src/npc/castleMaid.c
+++ b/src/npc/castleMaid.c
@@ -155,7 +155,7 @@ void sub_080646A4(Entity* this, ScriptExecutionContext* context) {
}
context->postScriptActions |= 0x2;
- ProcessMovement(this);
+ ProcessMovement0(this);
x = this->x.HALF.HI;
diff = x - (s16)this->field_0x6c.HWORD;
if (diff > 0x10) {
diff --git a/src/npc/cow.c b/src/npc/cow.c
index 5f0bcc0a..481877ab 100644
--- a/src/npc/cow.c
+++ b/src/npc/cow.c
@@ -87,7 +87,7 @@ void sub_08069068(Entity* ent) {
InitAnimationForceUpdate(ent, ent->animationState + 4);
}
- ProcessMovement(ent);
+ ProcessMovement0(ent);
UpdateAnimationSingleFrame(ent);
{
diff --git a/src/npc/dog.c b/src/npc/dog.c
index 111b27e0..525a0539 100644
--- a/src/npc/dog.c
+++ b/src/npc/dog.c
@@ -136,7 +136,7 @@ void sub_08069D54(Entity* this) {
this->actionDelay -= 1;
if (this->actionDelay != 0) {
UpdateAnimationSingleFrame(this);
- ProcessMovement(this);
+ ProcessMovement0(this);
collisions = this->collisions;
if (this->x.HALF.HI < this->field_0x6e.HWORD) {
diff --git a/src/npc/kid.c b/src/npc/kid.c
index 011327db..0375b162 100644
--- a/src/npc/kid.c
+++ b/src/npc/kid.c
@@ -364,7 +364,7 @@ NONMATCH("asm/non_matching/kid/sub_08062948.inc", void sub_08062948(Entity* this
InitializeAnimation(this, uVar3);
this->field_0x80.HALF.LO = (u16)this->animIndex;
}
- ProcessMovement(this);
+ ProcessMovement0(this);
iVar4 = this->x.HALF.HI - this->field_0x6c.HALF.LO;
if (0x10 < iVar4) {
this->x.HALF.HI = this->field_0x6c.HALF.LO + 0x10;
diff --git a/src/npc/npc23.c b/src/npc/npc23.c
index 9630e18a..9f64b7bb 100644
--- a/src/npc/npc23.c
+++ b/src/npc/npc23.c
@@ -76,7 +76,7 @@ void sub_080663D4(Entity* this) {
InitializeAnimation(this, (this->direction >> 3) + 4);
this->subAction = this->subAction + 1;
}
- ProcessMovement(this);
+ ProcessMovement0(this);
}
sub_08078B48();
GetNextFrame(this);
diff --git a/src/npc/npc5.c b/src/npc/npc5.c
index 08eaa441..7a72f32e 100644
--- a/src/npc/npc5.c
+++ b/src/npc/npc5.c
@@ -42,7 +42,6 @@ u32 PointInsideRadius(s32, s32, s32);
extern u8 gUnk_0200D654[];
extern u8 gUnk_02027EB4[];
-extern u32 sub_080AF1EC(Entity*);
u32 sub_080611D4(Entity*);
extern u32 sub_08079FD4(Entity*, u32);
extern void sub_08016AD2(Entity*);
@@ -395,7 +394,7 @@ NONMATCH("asm/non_matching/npc5/sub_08061170.inc", bool32 sub_08061170(Entity* t
u32 tmp;
UpdateAnimationSingleFrame(this);
- if (sub_080AF1EC(this) == 0) {
+ if (ProcessMovement6(this) == 0) {
direction = sub_080611D4(this);
if (direction != 0xff) {
this->action = 6;
@@ -636,7 +635,7 @@ void sub_08061464(Entity* this, u32 param_a, u32 param_b) {
bool32 sub_08061630(Entity* this, s32 x, s32 y, s32 param) {
u32 param_y = y;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_08061A74(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = x;
((UnkHeap*)this->myHeap)->unk_8 = param_y;
@@ -653,7 +652,7 @@ bool32 sub_08061630(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_080616A8(Entity* this, s32 x, s32 y, s32 param) {
u32 param_y = y;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_08061A1C(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = x;
((UnkHeap*)this->myHeap)->unk_8 = param_y;
@@ -670,7 +669,7 @@ bool32 sub_080616A8(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_08061720(Entity* this, s32 x, s32 y, s32 param) {
u32 param_x = x;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_080619F0(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = param_x;
((UnkHeap*)this->myHeap)->unk_8 = y;
@@ -687,7 +686,7 @@ bool32 sub_08061720(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_08061798(Entity* this, s32 x, s32 y, s32 param) {
u32 param_x = x;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_08061A48(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = param_x;
((UnkHeap*)this->myHeap)->unk_8 = y;
@@ -704,7 +703,7 @@ bool32 sub_08061798(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_08061810(Entity* this, s32 x, s32 y, s32 param) {
u32 param_y = y;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_08061A74(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = x;
((UnkHeap*)this->myHeap)->unk_8 = param_y;
@@ -721,7 +720,7 @@ bool32 sub_08061810(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_08061888(Entity* this, s32 x, s32 y, s32 param) {
u32 param_y = y;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_08061A1C(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = x;
((UnkHeap*)this->myHeap)->unk_8 = param_y;
@@ -738,7 +737,7 @@ bool32 sub_08061888(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_08061900(Entity* this, s32 x, s32 y, s32 param) {
u32 param_x = x;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_080619F0(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = param_x;
((UnkHeap*)this->myHeap)->unk_8 = y;
@@ -755,7 +754,7 @@ bool32 sub_08061900(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_08061978(Entity* this, s32 x, s32 y, s32 param) {
u32 param_x = x;
u8* layer = (this->collisionLayer == 2) ? gUnk_0200D654 : gUnk_02027EB4;
- while (!sub_080AE4CC(layer, x, y, 6)) {
+ while (!IsTileCollision(layer, x, y, 6)) {
if (sub_08061A48(layer, x, y, param)) {
((UnkHeap*)this->myHeap)->unk_7 = param_x;
((UnkHeap*)this->myHeap)->unk_8 = y;
@@ -771,7 +770,7 @@ bool32 sub_08061978(Entity* this, s32 x, s32 y, s32 param) {
bool32 sub_080619F0(u8* layer, s32 x, s32 y, s32 param) {
while (param <= y) {
- if (sub_080AE4CC(layer, x, y, 6) != 0) {
+ if (IsTileCollision(layer, x, y, 6) != 0) {
return FALSE;
}
y -= 8;
@@ -781,7 +780,7 @@ bool32 sub_080619F0(u8* layer, s32 x, s32 y, s32 param) {
bool32 sub_08061A1C(u8* layer, s32 x, s32 y, s32 param) {
while (param >= x) {
- if (sub_080AE4CC(layer, x, y, 6) != 0) {
+ if (IsTileCollision(layer, x, y, 6) != 0) {
return FALSE;
}
x += 8;
@@ -791,7 +790,7 @@ bool32 sub_08061A1C(u8* layer, s32 x, s32 y, s32 param) {
bool32 sub_08061A48(u8* layer, s32 x, s32 y, s32 param) {
while (param >= y) {
- if (sub_080AE4CC(layer, x, y, 6) != 0) {
+ if (IsTileCollision(layer, x, y, 6) != 0) {
return FALSE;
}
y += 8;
@@ -801,7 +800,7 @@ bool32 sub_08061A48(u8* layer, s32 x, s32 y, s32 param) {
bool32 sub_08061A74(u8* layer, s32 x, s32 y, s32 param) {
while (param <= x) {
- if (sub_080AE4CC(layer, x, y, 6) != 0) {
+ if (IsTileCollision(layer, x, y, 6) != 0) {
return FALSE;
}
x -= 8;
diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c
index 8cfd33c1..f888ea21 100644
--- a/src/npc/townsperson.c
+++ b/src/npc/townsperson.c
@@ -190,7 +190,7 @@ void sub_08061E90(Entity* this, ScriptExecutionContext* context) {
if (animIndex != this->animIndex) {
InitializeAnimation(this, animIndex);
}
- ProcessMovement(this);
+ ProcessMovement0(this);
iVar4 = this->x.HALF.HI - *(s16*)&this->field_0x6a.HWORD;
if (0x10 < iVar4) {
this->x.HALF.HI = this->field_0x6a.HWORD + 0x10;
diff --git a/src/npcUtils.c b/src/npcUtils.c
index a430d135..bf609c86 100644
--- a/src/npcUtils.c
+++ b/src/npcUtils.c
@@ -130,7 +130,7 @@ void sub_0806EE04(Entity* ent, void* a2, u32 a3) {
ent->child = a2;
ent->field_0x3c = a3;
ent->hitType = 0;
- ent->field_0x46 = 0;
+ ent->knockbackSpeed = 0;
ent->field_0x16 = 0;
}
@@ -141,7 +141,7 @@ u32 sub_0806EE20(Entity* ent) {
if (ent->child)
return gUnk_08114EFC[ent->field_0x16](ent);
} else {
- ent->field_0x46 = 8;
+ ent->knockbackSpeed = 8;
v3 = GetFacingDirection(ent, &gPlayerEntity);
ent->knockbackDirection = sub_0806F5A4(v3);
}
@@ -154,8 +154,8 @@ u32 sub_0806EE70(Entity* ent) {
u32 result;
u16 xy[2];
- if (++ent->field_0x46 > 8) {
- ent->field_0x46 = 0;
+ if (++ent->knockbackSpeed > 8) {
+ ent->knockbackSpeed = 0;
sub_0806EF14(ent);
}
LinearMoveUpdate(ent);
@@ -172,7 +172,7 @@ u32 sub_0806EE70(Entity* ent) {
}
u32 sub_0806EED0(Entity* ent) {
- if (!--ent->field_0x46)
+ if (!--ent->knockbackSpeed)
return sub_0806EF74(ent, 2);
return 0;
}
@@ -214,13 +214,13 @@ u32 sub_0806EFAC(Entity* ent, u16* a2) {
u32 sub_0806EFBC(Entity* ent, u16* a2) {
ent->field_0x16 = 1;
- ent->field_0x46 = 8;
+ ent->knockbackSpeed = 8;
return 0;
}
u32 sub_0806EFCC(Entity* ent, u16* a2) {
ent->field_0x16 = 2;
- ent->field_0x46 = a2[1];
+ ent->knockbackSpeed = a2[1];
return 0;
}
diff --git a/src/object/bakerOven.c b/src/object/bakerOven.c
index cdc65c3a..fd2b80aa 100644
--- a/src/object/bakerOven.c
+++ b/src/object/bakerOven.c
@@ -65,7 +65,7 @@ void sub_0809CD0C(Entity* this) {
gPlayerEntity.iframes = 16;
gPlayerEntity.knockbackDirection = 16;
gPlayerEntity.knockbackDuration = 12;
- gPlayerEntity.field_0x46 = 16;
+ gPlayerEntity.knockbackSpeed = 16;
}
}
}
diff --git a/src/object/itemOnGround.c b/src/object/itemOnGround.c
index 054f7411..49503916 100644
--- a/src/object/itemOnGround.c
+++ b/src/object/itemOnGround.c
@@ -203,7 +203,7 @@ void sub_080811D8(Entity* this) {
void sub_080811EC(Entity* this) {
if (this->field_0x68.HALF.HI != 6) {
- sub_080AEFE0(this);
+ ProcessMovement2(this);
} else {
LinearMoveUpdate(this);
}
@@ -389,7 +389,7 @@ void sub_08081500(Entity* this) {
UpdateSpriteForCollisionLayer(this);
}
- sub_080AEFE0(this);
+ ProcessMovement2(this);
}
}
}
diff --git a/src/object/lightableSwitch.c b/src/object/lightableSwitch.c
index 13dae7bc..aac89cb2 100644
--- a/src/object/lightableSwitch.c
+++ b/src/object/lightableSwitch.c
@@ -6,11 +6,6 @@
#include "flags.h"
#include "functions.h"
-extern void sub_0809EB30(Entity*);
-extern void sub_0809EAD8(Entity*);
-extern void sub_0809EABC(Entity*);
-extern void sub_080A2CC0(Entity*, Entity**, u16*);
-
extern void (*const gUnk_081243B4[])(Entity*);
extern void (*const gUnk_081243BC[])(Entity*);
extern void (*const gUnk_081243C4[])(Entity*);
diff --git a/src/object/lilypadLarge.c b/src/object/lilypadLarge.c
index 5f5a426c..6d326946 100644
--- a/src/object/lilypadLarge.c
+++ b/src/object/lilypadLarge.c
@@ -114,7 +114,7 @@ void sub_08085A44(LilypadLargeEntity* this) {
}
}
sub_08085EFC(this);
- sub_080AF134(super);
+ ProcessMovement4(super);
sub_08085F1C(this);
}
diff --git a/src/object/objectB2.c b/src/object/objectB2.c
index fc5b4a85..bd2c58b5 100644
--- a/src/object/objectB2.c
+++ b/src/object/objectB2.c
@@ -22,7 +22,7 @@ void ObjectB2(Entity* this) {
}
this->speed = this->parent->speed;
LinearMoveUpdate(this);
- if (sub_080AE4CC((u8*)this->child, this->x.HALF.HI, this->y.HALF.HI, 9) != 0) {
+ if (IsTileCollision((u8*)this->child, this->x.HALF.HI, this->y.HALF.HI, 9) != 0) {
DeleteThisEntity();
}
if (this->speed < 0x41) {
diff --git a/src/object/rupee.c b/src/object/rupee.c
index f4119600..583cf0f0 100644
--- a/src/object/rupee.c
+++ b/src/object/rupee.c
@@ -37,7 +37,7 @@ void sub_08086A28(Entity* ent) {
if (iVar1 == 0) {
ent->action = 2;
}
- ProcessMovement(ent);
+ ProcessMovement0(ent);
CopyPosition(ent, ent->child);
}
}
diff --git a/src/object/smallIceBlock.c b/src/object/smallIceBlock.c
index 63542a02..c491a16b 100644
--- a/src/object/smallIceBlock.c
+++ b/src/object/smallIceBlock.c
@@ -205,7 +205,7 @@ bool32 sub_0809953C(SmallIceBlockEntity* this) {
if (uVar3 != 0) {
return 0;
}
- sub_080AEFE0(super);
+ ProcessMovement2(super);
sub_0800445C(super);
if (super->actionDelay != 0) {
super->speed += 0x10;
diff --git a/src/projectile/arrowProjectile.c b/src/projectile/arrowProjectile.c
index 7f6079f7..91567d8b 100644
--- a/src/projectile/arrowProjectile.c
+++ b/src/projectile/arrowProjectile.c
@@ -3,8 +3,6 @@
#include "functions.h"
#include "object.h"
-extern s32 sub_080AF090(Entity*);
-
extern void (*const gArrowProjectile[])(Entity*);
extern void (*const gArrowProjectileActions[])(Entity*);
@@ -78,7 +76,7 @@ void ArrowProjectile_Action2(Entity* this) {
} else if (--this->actionDelay == 0) {
DeleteThisEntity();
}
- sub_080AF090(this);
+ ProcessMovement3(this);
}
void ArrowProjectile_Action3(Entity* this) {
diff --git a/src/projectile/boneProjectile.c b/src/projectile/boneProjectile.c
index 33677de2..3f9858a9 100644
--- a/src/projectile/boneProjectile.c
+++ b/src/projectile/boneProjectile.c
@@ -2,10 +2,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-extern void sub_08016AD2(Entity*);
-
extern void (*const BoneProjectile_Functions[])(Entity*);
extern void (*const BoneProjectile_Actions[])(Entity*);
@@ -36,9 +32,9 @@ void BoneProjectile_Init(Entity* this) {
void BoneProjectile_Action1(Entity* this) {
GetNextFrame(this);
- sub_080AF090(this);
+ ProcessMovement3(this);
if (this->collisions == 0) {
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteEntity(this);
} else {
sub_08016AD2(this);
@@ -54,7 +50,7 @@ void BoneProjectile_Action1(Entity* this) {
void BoneProjectile_Action2(Entity* this) {
GetNextFrame(this);
- sub_080AF090(this);
+ ProcessMovement3(this);
if (GravityUpdate(this, 0x1800) == 0) {
this->action = 3;
COLLISION_OFF(this);
diff --git a/src/projectile/cannonballProjectile.c b/src/projectile/cannonballProjectile.c
index 5e07dfc4..acf5ccd7 100644
--- a/src/projectile/cannonballProjectile.c
+++ b/src/projectile/cannonballProjectile.c
@@ -1,11 +1,6 @@
#include "entity.h"
#include "enemy.h"
-
-extern void CreateItemOnGround(Entity*);
-extern s32 sub_080AF090(Entity*);
-extern void sub_080043A8(Entity*);
-extern void CreateChestSpawner(Entity*);
-extern u32 IsColliding(Entity*, Entity*);
+#include "functions.h"
extern void (*const CannonballProjectile_Functions[])(Entity*);
extern void (*const CannonballProjectile_Actions[])(Entity*);
@@ -44,7 +39,7 @@ void CannonballProjectile_Init(Entity* this) {
void CannonballProjectile_Action1(Entity* this) {
GetNextFrame(this);
- if (sub_080AF090(this) == 0) {
+ if (ProcessMovement3(this) == 0) {
CreateFx(this, FX_DEATH, 0);
DeleteThisEntity();
}
@@ -53,7 +48,7 @@ void CannonballProjectile_Action1(Entity* this) {
void CannonballProjectile_Action2(Entity* this) {
GetNextFrame(this);
- sub_080AF090(this);
+ ProcessMovement3(this);
if ((sub_080AB634(this) == 0) && (this->collisions != 0)) {
CreateFx(this, FX_DEATH, 0);
DeleteThisEntity();
diff --git a/src/projectile/dekuSeedProjectile.c b/src/projectile/dekuSeedProjectile.c
index 3afad118..785504ed 100644
--- a/src/projectile/dekuSeedProjectile.c
+++ b/src/projectile/dekuSeedProjectile.c
@@ -2,11 +2,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-extern void sub_08016AD2(Entity*);
-extern u32 IsColliding(Entity*, Entity*);
-
extern void (*const DekuSeedProjectile_Functions[])(Entity*);
extern void (*const DekuSeedProjectile_Actions[])(Entity*);
@@ -54,8 +49,8 @@ void DekuSeedProjectile_Action1(Entity* this) {
Entity* parent;
GetNextFrame(this);
- if (sub_080AF090(this) != 0) {
- if (IsProjectileOffScreen(this) != 0) {
+ if (ProcessMovement3(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
sub_08016AD2(this);
@@ -75,20 +70,20 @@ void DekuSeedProjectile_Action1(Entity* this) {
this->knockbackDirection = -this->direction;
this->bitfield = 0x80;
this->knockbackDuration = 0xc;
- this->field_0x46 = 0;
+ this->knockbackSpeed = 0;
parent->iframes = 0x10;
parent->knockbackDirection = this->direction;
parent->bitfield = 0xc2;
parent->knockbackDuration = 0xc;
- parent->field_0x46 = 0;
+ parent->knockbackSpeed = 0;
}
}
}
void DekuSeedProjectile_Action2(Entity* this) {
GetNextFrame(this);
- if (sub_080AF090(this) != 0) {
- if (IsProjectileOffScreen(this) != 0) {
+ if (ProcessMovement3(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
if (--this->actionDelay == 0) {
@@ -112,7 +107,7 @@ void DekuSeedProjectile_Action3(Entity* this) {
void DekuSeedProjectile_Action4(Entity* this) {
GetNextFrame(this);
- sub_080AF090(this);
+ ProcessMovement3(this);
switch (sub_080044EC(this, 0x2800)) {
case 0:
DeleteThisEntity();
diff --git a/src/projectile/dirtBallProjectile.c b/src/projectile/dirtBallProjectile.c
index 03769bb0..bda5e1a2 100644
--- a/src/projectile/dirtBallProjectile.c
+++ b/src/projectile/dirtBallProjectile.c
@@ -28,7 +28,7 @@ void DirtBallProjectile_OnTick(Entity* this) {
}
void sub_080A881C(Entity* this) {
- this->field_0x46 = 0;
+ this->knockbackSpeed = 0;
if (this->type == 0) {
this->parent->child = NULL;
if (this->bitfield == 0x80) {
diff --git a/src/projectile/fireProjectile.c b/src/projectile/fireProjectile.c
index c44a9b89..80fed65b 100644
--- a/src/projectile/fireProjectile.c
+++ b/src/projectile/fireProjectile.c
@@ -3,10 +3,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-extern void sub_08016AD2(Entity*);
-
extern void (*const FireProjectile_Actions[])(Entity*);
void FireProjectile(Entity* this) {
@@ -52,8 +48,8 @@ void FireProjectile_Action1(Entity* this) {
void FireProjectile_Action2(Entity* this) {
GetNextFrame(this);
- if (sub_080AF090(this) != 0) {
- if (IsProjectileOffScreen(this) != 0) {
+ if (ProcessMovement3(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteEntity(this);
} else {
sub_08016AD2(this);
diff --git a/src/projectile/guardLineOfSight.c b/src/projectile/guardLineOfSight.c
index e38ace8c..1dcdcaaf 100644
--- a/src/projectile/guardLineOfSight.c
+++ b/src/projectile/guardLineOfSight.c
@@ -62,7 +62,7 @@ void GuardLineOfSight(Entity* this) {
DeleteThisEntity();
}
LinearMoveUpdate(this);
- if (sub_080AE4CC(gUnk_02027EB4, this->x.HALF.HI, this->y.HALF.HI, 2) != 0) {
+ if (IsTileCollision(gUnk_02027EB4, this->x.HALF.HI, this->y.HALF.HI, 2)) {
DeleteThisEntity();
}
}
diff --git a/src/projectile/gyorgMaleEnergyProjectile.c b/src/projectile/gyorgMaleEnergyProjectile.c
index f654133e..6a98e185 100644
--- a/src/projectile/gyorgMaleEnergyProjectile.c
+++ b/src/projectile/gyorgMaleEnergyProjectile.c
@@ -2,9 +2,7 @@
#include "enemy.h"
#include "coord.h"
#include "player.h"
-
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
+#include "functions.h"
extern void (*const GyorgMaleEnergyProjectile_Functions[])(Entity*);
extern void (*const GyorgMaleEnergyProjectile_Actions[])(Entity*);
@@ -72,9 +70,9 @@ void GyorgMaleEnergyProjectile_Action1(Entity* this) {
}
void GyorgMaleEnergyProjectile_Action2(Entity* this) {
- sub_080AF090(this);
+ ProcessMovement3(this);
GetNextFrame(this);
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
if (--this->actionDelay == 0) {
@@ -86,7 +84,7 @@ void GyorgMaleEnergyProjectile_Action2(Entity* this) {
}
void GyorgMaleEnergyProjectile_Action3(Entity* this) {
- sub_080AF090(this);
+ ProcessMovement3(this);
GetNextFrame(this);
if ((this->frame & 0x80) != 0) {
DeleteThisEntity();
diff --git a/src/projectile/iceProjectile.c b/src/projectile/iceProjectile.c
index 52364a53..0f845d8e 100644
--- a/src/projectile/iceProjectile.c
+++ b/src/projectile/iceProjectile.c
@@ -3,10 +3,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-extern void sub_08016AD2(Entity*);
-
extern void (*const IceProjectile_Actions[])(Entity*);
void IceProjectile(Entity* this) {
@@ -54,8 +50,8 @@ void IceProjectile_Action1(Entity* this) {
void IceProjectile_Action2(Entity* this) {
GetNextFrame(this);
- if (sub_080AF090(this) != 0) {
- if (IsProjectileOffScreen(this) != 0) {
+ if (ProcessMovement3(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteEntity(this);
} else {
sub_08016AD2(this);
diff --git a/src/projectile/lakituLightning.c b/src/projectile/lakituLightning.c
index e6bb2cef..1f366e0f 100644
--- a/src/projectile/lakituLightning.c
+++ b/src/projectile/lakituLightning.c
@@ -1,8 +1,6 @@
#include "entity.h"
#include "enemy.h"
-
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
+#include "functions.h"
extern void (*const LakituLightning_Functions[])(Entity*);
extern void (*const LakituLightning_Actions[])(Entity*);
@@ -33,12 +31,12 @@ void LakituLightning_Init(Entity* this) {
void LakituLightning_Action1(Entity* this) {
GetNextFrame(this);
- sub_080AF090(this);
+ ProcessMovement3(this);
if ((this->collisions != 0) || (--this->actionDelay == 0)) {
CreateFx(this, FX_BLUE_EFC, 0);
DeleteThisEntity();
}
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
}
diff --git a/src/projectile/mandiblesProjectile.c b/src/projectile/mandiblesProjectile.c
index 9d44a724..3dd794c3 100644
--- a/src/projectile/mandiblesProjectile.c
+++ b/src/projectile/mandiblesProjectile.c
@@ -46,7 +46,7 @@ void sub_080A9EBC(Entity* this) {
case 4:
this->field_0xf = 0;
ModHealth(-2);
- sub_080AF090(this);
+ ProcessMovement3(this);
UpdateAnimationSingleFrame(this);
break;
case 3:
diff --git a/src/projectile/moblinSpear.c b/src/projectile/moblinSpear.c
index a9c806e4..d2816076 100644
--- a/src/projectile/moblinSpear.c
+++ b/src/projectile/moblinSpear.c
@@ -28,7 +28,7 @@ void sub_080A832C(Entity* this) {
if (this->bitfield == 0x80) {
this->iframes = 0x10;
this->knockbackDuration = 0xc;
- this->field_0x46 = 0x180;
+ this->knockbackSpeed = 0x180;
this->parent->bitfield = this->bitfield;
}
tmp = this->iframes;
@@ -38,7 +38,7 @@ void sub_080A832C(Entity* this) {
this->parent->iframes = -tmp;
}
this->parent->knockbackDuration = this->knockbackDuration;
- this->parent->field_0x46 = this->field_0x46;
+ this->parent->knockbackSpeed = this->knockbackSpeed;
this->parent->knockbackDirection = this->knockbackDirection;
this->knockbackDuration = 0;
}
diff --git a/src/projectile/octorokBossProjectile.c b/src/projectile/octorokBossProjectile.c
index 49d4b40f..659f748c 100644
--- a/src/projectile/octorokBossProjectile.c
+++ b/src/projectile/octorokBossProjectile.c
@@ -103,7 +103,7 @@ void OctorokBossProjectile_Action1(Entity* this) {
this->parent->iframes = 0x1e;
if (this->parent->field_0x7c.BYTES.byte0 != 0) {
this->parent->knockbackDuration = 0x18;
- this->parent->field_0x46 = 0x200;
+ this->parent->knockbackSpeed = 0x200;
this->parent->knockbackDirection = this->direction >> 3;
}
SoundReq(SFX_BOSS_HIT);
@@ -113,7 +113,7 @@ void OctorokBossProjectile_Action1(Entity* this) {
UpdateAnimationSingleFrame(this);
this->field_0x78.HWORD--;
LinearMoveAngle(this, this->speed, this->direction);
- sub_080AE58C(this, this->direction >> 3, 0);
+ CalculateEntityTileCollisions(this, this->direction >> 3, 0);
if ((this->collisions & 0xee00) != 0) {
this->direction = -this->direction;
}
@@ -150,7 +150,7 @@ void OctorokBossProjectile_Action1(Entity* this) {
}
GetNextFrame(this);
if (GravityUpdate(this, 0x1800) != 0) {
- sub_080AE58C(this, this->direction >> 3, 0);
+ CalculateEntityTileCollisions(this, this->direction >> 3, 0);
if (this->collisions == 0) {
LinearMoveAngle(this, (s32)this->speed, (u32)this->direction);
} else {
diff --git a/src/projectile/rockProjectile.c b/src/projectile/rockProjectile.c
index 66e8388f..53266767 100644
--- a/src/projectile/rockProjectile.c
+++ b/src/projectile/rockProjectile.c
@@ -2,10 +2,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-extern void sub_08016AD2(Entity*);
-
extern void (*const RockProjectile_Functions[])(Entity*);
extern void (*const RockProjectile_Actions[])(Entity*);
@@ -37,8 +33,8 @@ void RockProjectile_Init(Entity* this) {
void RockProjectile_Action1(Entity* this) {
GetNextFrame(this);
- if (sub_080AF090(this) != 0) {
- if (IsProjectileOffScreen(this) != 0) {
+ if (ProcessMovement3(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteEntity(this);
} else {
sub_08016AD2(this);
@@ -63,7 +59,7 @@ void RockProjectile_Action2(Entity* this) {
void RockProjectile_Action3(Entity* this) {
GetNextFrame(this);
- sub_080AF090(this);
+ ProcessMovement3(this);
switch (sub_080044EC(this, 0x2800)) {
case 0:
DeleteEntity(this);
diff --git a/src/projectile/spikedRollers.c b/src/projectile/spikedRollers.c
index 6c68133b..5a9c63bb 100644
--- a/src/projectile/spikedRollers.c
+++ b/src/projectile/spikedRollers.c
@@ -1,5 +1,6 @@
#define NENT_DEPRECATED
#include "entity.h"
+#include "functions.h"
typedef struct {
Entity base;
@@ -11,8 +12,6 @@ typedef struct {
u16 speed2;
} SpikedRollersEntity;
-extern s32 sub_080AF090(Entity*);
-
static void (*const SpikedRollers_Actions[])(SpikedRollersEntity*);
static const u8 gSpikedRollersOffsets[];
@@ -49,7 +48,7 @@ void sub_080ABA74(SpikedRollersEntity* this) {
void sub_080ABAE0(SpikedRollersEntity* this) {
s32 diff, unk_0x6c;
- sub_080AF090(super);
+ ProcessMovement3(super);
if (super->type2 == 0) {
diff = super->x.HALF.HI - this->x2;
diff --git a/src/projectile/torchTrapProjectile.c b/src/projectile/torchTrapProjectile.c
index 046d8062..5ff167c0 100644
--- a/src/projectile/torchTrapProjectile.c
+++ b/src/projectile/torchTrapProjectile.c
@@ -2,9 +2,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-
extern void (*const TorchTrapProjectile_Functions[])(Entity*);
extern void (*const TorchTrapProjectile_Actions[])(Entity*);
@@ -31,7 +28,7 @@ void TorchTrapProjectile_Action1(Entity* this) {
if (this->actionDelay != 0) {
this->actionDelay -= 1;
} else {
- if (sub_080AF090(this) == 0) {
+ if (ProcessMovement3(this) == 0) {
LinearMoveUpdate(this);
} else {
this->action = 2;
@@ -41,11 +38,11 @@ void TorchTrapProjectile_Action1(Entity* this) {
void TorchTrapProjectile_Action2(Entity* this) {
GetNextFrame(this);
- sub_080AF090(this);
+ ProcessMovement3(this);
if (this->collisions != 0) {
DeleteThisEntity();
}
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
}
diff --git a/src/projectile/v2Projectile.c b/src/projectile/v2Projectile.c
index fc863d53..e329945c 100644
--- a/src/projectile/v2Projectile.c
+++ b/src/projectile/v2Projectile.c
@@ -10,11 +10,6 @@ extern void (*const gUnk_0812A7F8[])(Entity*);
extern void (*const gUnk_0812A800[])(Entity*);
extern void (*const gUnk_0812A808[])(Entity*);
-extern void SoundReqClipped(Entity*, u32);
-extern void sub_08079D84(void);
-
-extern s32 sub_080AF090(Entity*);
-
void V2Projectile(Entity* this) {
V2Projectile_Functions[GetNextFunction(this)](this);
}
@@ -108,7 +103,7 @@ void sub_080ABD44(Entity* this) {
this->action = 2;
InitializeAnimation(this, 1);
}
- sub_080AF090(this);
+ ProcessMovement3(this);
GetNextFrame(this);
}
diff --git a/src/projectile/v3ElectricProjectile.c b/src/projectile/v3ElectricProjectile.c
index e83e68f7..c52258cd 100644
--- a/src/projectile/v3ElectricProjectile.c
+++ b/src/projectile/v3ElectricProjectile.c
@@ -4,9 +4,6 @@
#include "coord.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-
extern void (*const V3ElectricProjectile_Functions[])(Entity*);
extern void (*const V3ElectricProjectile_Actions[])(Entity*);
static const u16 projectileSpeeds[];
@@ -98,12 +95,12 @@ void V3ElectricProjectile_Action2(Entity* this) {
if (this->z.HALF.HI < -6) {
this->z.HALF.HI += 3;
}
- sub_080AF090(this);
+ ProcessMovement3(this);
if (this->collisions != 0) {
DeleteThisEntity();
}
GetNextFrame(this);
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
if (this->actionDelay < 0x1e) {
diff --git a/src/projectile/v3HandProjectile.c b/src/projectile/v3HandProjectile.c
index d308b7d9..4d4c55bf 100644
--- a/src/projectile/v3HandProjectile.c
+++ b/src/projectile/v3HandProjectile.c
@@ -1,9 +1,7 @@
#include "entity.h"
#include "enemy.h"
#include "player.h"
-
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
+#include "functions.h"
extern void (*const V3HandProjectile_Functions[])(Entity*);
@@ -21,12 +19,12 @@ void V3HandProjectile_OnTick(Entity* this) {
if (this->z.HALF.HI < -6) {
this->z.HALF.HI += 2;
}
- sub_080AF090(this);
+ ProcessMovement3(this);
if (this->collisions != 0) {
DeleteThisEntity();
}
GetNextFrame(this);
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
}
diff --git a/src/projectile/v3TennisBallProjectile.c b/src/projectile/v3TennisBallProjectile.c
index b25cbf48..455f67af 100644
--- a/src/projectile/v3TennisBallProjectile.c
+++ b/src/projectile/v3TennisBallProjectile.c
@@ -1,8 +1,6 @@
#include "entity.h"
#include "enemy.h"
-
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
+#include "functions.h"
extern void (*const V3TennisBallProjectile_Functions[])(Entity*);
extern void (*const V3TennisBallProjectile_Actions[])(Entity*);
@@ -55,21 +53,21 @@ void V3TennisBallProjectile_Init(Entity* this) {
}
void V3TennisBallProjectile_Action1(Entity* this) {
- sub_080AF090(this);
+ ProcessMovement3(this);
GetNextFrame(this);
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
}
void V3TennisBallProjectile_Action2(Entity* this) {
- sub_080AF090(this);
+ ProcessMovement3(this);
if (this->collisions != 0) {
DeleteThisEntity();
}
GetNextFrame(this);
sub_080ACB90(this);
- if (IsProjectileOffScreen(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteThisEntity();
}
}
diff --git a/src/projectile/windProjectile.c b/src/projectile/windProjectile.c
index b5b1133b..96211f1b 100644
--- a/src/projectile/windProjectile.c
+++ b/src/projectile/windProjectile.c
@@ -2,10 +2,6 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080AF090(Entity*);
-extern s32 IsProjectileOffScreen(Entity*);
-extern void sub_08016AD2(Entity*);
-
extern void (*const WindProjectile_Actions[])(Entity*);
void WindProjectile(Entity* this) {
@@ -58,8 +54,8 @@ void WindProjectile_Action1(Entity* this) {
void WindProjectile_Action2(Entity* this) {
GetNextFrame(this);
- if (sub_080AF090(this) != 0) {
- if (IsProjectileOffScreen(this) != 0) {
+ if (ProcessMovement3(this) != 0) {
+ if (IsProjectileOffScreen(this)) {
DeleteEntity(this);
} else {
sub_08016AD2(this);
diff --git a/src/projectile/winder.c b/src/projectile/winder.c
index 56962f4e..bbc49d0d 100644
--- a/src/projectile/winder.c
+++ b/src/projectile/winder.c
@@ -50,7 +50,7 @@ void Winder_Init(Entity* this) {
void sub_080AB950(Entity* this) {
if (this->type == 0) {
u8 dir;
- ProcessMovement(this);
+ ProcessMovement0(this);
dir = this->direction >> 3;
if (((gUnk_0812A6C4)[dir] & this->collisions) || sub_080AB9FC(this, this->direction)) {
this->direction = gUnk_0812A6BC[(Random() & 0x1) + (dir << 1)];