summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2022-07-09 20:36:20 -0700
committerGitHub <noreply@github.com>2022-07-09 20:36:20 -0700
commit021e77b203a930c0dae08924d4041b128ec75c82 (patch)
treeafeaaf08bb3f78b1e36fbcc2987ec6f928d550f0
parent2d389321d493d871462d6b14e7f688d42ee0c0db (diff)
parent098c0c9bf677194e08ffc6721f9fff60127c5198 (diff)
Merge pull request #526 from hatal175/various10
-rw-r--r--asm/enemy/dust.s663
-rw-r--r--asm/non_matching/dust/sub_080442BC.inc46
-rw-r--r--asm/non_matching/dust/sub_08044310.inc213
-rw-r--r--data/const/enemy/dust.s15
-rw-r--r--linker.ld3
-rw-r--r--src/enemy/dust.c327
-rw-r--r--src/object/lilypadLarge.c6
-rw-r--r--src/object/pullableMushroom.c2
8 files changed, 593 insertions, 682 deletions
diff --git a/asm/enemy/dust.s b/asm/enemy/dust.s
deleted file mode 100644
index b91ea514..00000000
--- a/asm/enemy/dust.s
+++ /dev/null
@@ -1,663 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start Dust
-Dust: @ 0x08044118
- push {r4, r5, lr}
- adds r5, r0, #0
- ldr r4, _08044130 @ =gUnk_080D1588
- bl GetNextFunction
- lsls r0, r0, #2
- adds r0, r0, r4
- ldr r1, [r0]
- adds r0, r5, #0
- bl _call_via_r1
- pop {r4, r5, pc}
- .align 2, 0
-_08044130: .4byte gUnk_080D1588
-
- thumb_func_start sub_08044134
-sub_08044134: @ 0x08044134
- push {lr}
- ldr r2, _08044148 @ =gUnk_080D15A0
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08044148: .4byte gUnk_080D15A0
-
- thumb_func_start sub_0804414C
-sub_0804414C: @ 0x0804414C
- push {lr}
- ldr r1, _08044158 @ =gUnk_080D1588
- bl EnemyFunctionHandlerAfterCollision
- pop {pc}
- .align 2, 0
-_08044158: .4byte gUnk_080D1588
-
- thumb_func_start sub_0804415C
-sub_0804415C: @ 0x0804415C
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xa]
- cmp r0, #0
- bne _0804418E
- adds r0, r4, #0
- bl sub_0806F520
- cmp r0, #0
- beq _08044188
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _080441BA
- movs r0, #8
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- bl sub_08044310
- b _080441BA
-_08044188:
- movs r0, #8
- strb r0, [r4, #0xe]
- b _080441BA
-_0804418E:
- adds r0, r4, #0
- bl sub_0806F520
- cmp r0, #0
- beq _080441B0
- ldr r0, _080441AC @ =gUnk_080D15A8
- ldrb r1, [r4, #0xd]
- lsls r1, r1, #2
- adds r1, r1, r0
- ldr r1, [r1]
- adds r0, r4, #0
- bl _call_via_r1
- b _080441BA
- .align 2, 0
-_080441AC: .4byte gUnk_080D15A8
-_080441B0:
- adds r0, r4, #0
- bl sub_080445C0
- bl DeleteThisEntity
-_080441BA:
- pop {r4, pc}
-
- thumb_func_start sub_080441BC
-sub_080441BC: @ 0x080441BC
- movs r1, #2
- strb r1, [r0, #0xd]
- bx lr
- .align 2, 0
-
- thumb_func_start sub_080441C4
-sub_080441C4: @ 0x080441C4
- push {lr}
- bl sub_0806F4E8
- pop {pc}
-
- thumb_func_start sub_080441CC
-sub_080441CC: @ 0x080441CC
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0806F3E4
- cmp r0, #0
- beq _080441DE
- adds r0, r4, #0
- bl GenericDeath
-_080441DE:
- pop {r4, pc}
-
- thumb_func_start sub_080441E0
-sub_080441E0: @ 0x080441E0
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- movs r0, #0x12
- bl CheckGlobalFlag
- cmp r0, #0
- beq _080441F2
- bl DeleteThisEntity
-_080441F2:
- ldrb r7, [r4, #0xa]
- cmp r7, #0
- bne _08044284
-.ifdef EU
- movs r0, #0xf5
- lsls r0, r0, #0x1
-.else
- ldr r0, _08044244 @ =0x000001EB
-.endif
- movs r1, #1
- bl sub_080AD8F0
- adds r6, r0, #0
- ldrb r1, [r6]
- lsls r0, r1, #2
- adds r0, r0, r1
- adds r5, r0, #1
- adds r0, r5, #0
- bl zMalloc
- adds r1, r0, #0
- str r1, [r4, #0x64]
- cmp r1, #0
- beq _0804429A
- adds r0, r6, #0
- adds r2, r5, #0
- bl MemCopy
- adds r1, r4, #0
- adds r1, #0x28
- movs r0, #0xff
- strb r0, [r1]
- ldr r0, [r4, #0x64]
- ldrb r0, [r0]
- lsls r0, r0, #3
- adds r0, #0xc
- bl zMalloc
- adds r2, r0, #0
- cmp r2, #0
- bne _08044248
- ldr r0, [r4, #0x64]
- bl zFree
- b _0804429A
- .align 2, 0
-.ifndef EU
-_08044244: .4byte 0x000001EB
-.endif
-_08044248:
- str r2, [r4, #0x48]
- ldr r0, _0804427C @ =gHitbox_4
- ldr r1, [r0, #4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, #4]
- adds r0, r4, #0
- bl sub_080442BC
- movs r0, #1
- strb r0, [r4, #0x1e]
- adds r2, r4, #0
- adds r2, #0x29
- ldrb r0, [r2]
- movs r1, #7
- orrs r0, r1
- strb r0, [r2]
- adds r0, r4, #0
- adds r0, #0x75
- strb r7, [r0]
- adds r1, r4, #0
- adds r1, #0x76
- ldr r0, _08044280 @ =0x0000FFFF
- strh r0, [r1]
- b _08044292
- .align 2, 0
-_0804427C: .4byte gHitbox_4
-_08044280: .4byte 0x0000FFFF
-_08044284:
- movs r0, #0
- strb r0, [r4, #0x1e]
- strh r0, [r4, #0x24]
- ldr r0, _0804429C @ =gHitbox_1
- str r0, [r4, #0x48]
- movs r0, #1
- strb r0, [r4, #0x1c]
-_08044292:
- movs r0, #1
- strb r0, [r4, #0xc]
- movs r0, #8
- strb r0, [r4, #0xe]
-_0804429A:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0804429C: .4byte gHitbox_1
-
- thumb_func_start sub_080442A0
-sub_080442A0: @ 0x080442A0
- push {lr}
- adds r1, r0, #0
- ldrb r0, [r1, #0xa]
- cmp r0, #0
- bne _080442B2
- adds r0, r1, #0
- bl sub_08044498
- b _080442B8
-_080442B2:
- adds r0, r1, #0
- bl sub_08044550
-_080442B8:
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_080442BC
-sub_080442BC: @ 0x080442BC
- push {r4, r5, r6, r7, lr}
- adds r3, r0, #0
- ldr r5, _0804430C @ =gUnk_080D15B4
- ldr r0, [r3, #0x64]
- ldrb r6, [r0]
- movs r4, #0
- cmp r4, r6
- bhs _08044304
- movs r7, #0
-_080442CE:
- ldr r1, [r3, #0x48]
- lsls r2, r4, #3
- adds r1, r2, r1
- ldrb r0, [r5]
- strb r0, [r1, #0xc]
- ldr r0, [r3, #0x48]
- adds r0, r2, r0
- ldrb r1, [r5, #1]
- strb r1, [r0, #0xd]
- ldr r0, [r3, #0x48]
- adds r0, r2, r0
- ldrb r1, [r5, #2]
- strb r1, [r0, #0xe]
- ldr r0, [r3, #0x48]
- adds r0, r2, r0
- ldrb r1, [r5, #3]
- strb r1, [r0, #0xf]
- ldr r0, [r3, #0x48]
- adds r0, r2, r0
- adds r0, #0xc
- strb r7, [r0, #4]
- ldr r0, [r3, #0x48]
- adds r2, r2, r0
- strb r4, [r2, #0x11]
- adds r4, #1
- cmp r4, r6
- blo _080442CE
-_08044304:
- adds r0, r3, #0
- adds r0, #0x74
- strb r6, [r0]
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0804430C: .4byte gUnk_080D15B4
-
- thumb_func_start sub_08044310
-sub_08044310: @ 0x08044310
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r5, r0, #0
- movs r4, #0xff
- movs r6, #0xff
- ldr r0, _08044334 @ =gPlayerEntity
- ldrb r0, [r0, #0x14]
- lsrs r1, r0, #1
- movs r0, #3
- ands r1, r0
- cmp r1, #1
- beq _0804436A
- cmp r1, #1
- bgt _08044338
- cmp r1, #0
- beq _08044342
- b _080443EA
- .align 2, 0
-_08044334: .4byte gPlayerEntity
-_08044338:
- cmp r1, #2
- beq _08044392
- cmp r1, #3
- beq _080443C4
- b _080443EA
-_08044342:
- movs r2, #0
- adds r0, r5, #0
- adds r0, #0x74
- ldrb r0, [r0]
- cmp r2, r0
- bhs _080443EA
- adds r3, r0, #0
- ldr r1, [r5, #0x48]
-_08044352:
- ldrb r0, [r1, #0x10]
- cmp r0, #0
- bne _08044360
- ldrb r0, [r1, #0xd]
- cmp r6, r0
- bls _08044360
- adds r4, r2, #0
-_08044360:
- adds r1, #8
- adds r2, #1
- cmp r2, r3
- blo _08044352
- b _080443EA
-_0804436A:
- movs r2, #0
- adds r0, r5, #0
- adds r0, #0x74
- ldrb r0, [r0]
- cmp r2, r0
- bhs _080443EA
- adds r3, r0, #0
- ldr r1, [r5, #0x48]
-_0804437A:
- ldrb r0, [r1, #0x10]
- cmp r0, #0
- bne _08044388
- ldrb r0, [r1, #0xe]
- cmp r6, r0
- bls _08044388
- adds r4, r2, #0
-_08044388:
- adds r1, #8
- adds r2, #1
- cmp r2, r3
- blo _0804437A
- b _080443EA
-_08044392:
- movs r2, #0
- adds r0, r5, #0
- adds r0, #0x74
- ldrb r0, [r0]
- cmp r2, r0
- bhs _080443EA
- adds r3, r0, #0
- ldr r1, [r5, #0x48]
-_080443A2:
- ldrb r0, [r1, #0x10]
- cmp r0, #0
- bne _080443B0
- ldrb r0, [r1, #0xc]
- cmp r6, r0
- bls _080443B0
- adds r4, r2, #0
-_080443B0:
- adds r1, #8
- adds r2, #1
- cmp r2, r3
- blo _080443A2
- b _080443EA
-_080443BA:
- mov r1, r8
- adds r0, r1, r4
- ldrb r0, [r0, #0x11]
- strb r0, [r3, #5]
- b _08044492
-_080443C4:
- movs r2, #0
- adds r0, r5, #0
- adds r0, #0x74
- ldrb r0, [r0]
- cmp r2, r0
- bhs _080443EA
- adds r3, r0, #0
- ldr r1, [r5, #0x48]
-_080443D4:
- ldrb r0, [r1, #0x10]
- cmp r0, #0
- bne _080443E2
- ldrb r0, [r1, #0xf]
- cmp r6, r0
- bls _080443E2
- adds r4, r2, #0
-_080443E2:
- adds r1, #8
- adds r2, #1
- cmp r2, r3
- blo _080443D4
-_080443EA:
- cmp r4, #0xff
- beq _08044492
- ldr r0, [r5, #0x48]
- lsls r4, r4, #3
- adds r0, r4, r0
- movs r1, #1
- strb r1, [r0, #0x10]
- ldr r1, [r5, #0x64]
- ldrb r0, [r1]
- subs r0, #1
- strb r0, [r1]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- lsls r0, r1, #2
- adds r0, r0, r1
- adds r0, #1
- adds r7, r2, r0
- ldr r0, [r5, #0x48]
- adds r0, r4, r0
- ldrb r1, [r0, #0x11]
- lsls r0, r1, #2
- adds r0, r0, r1
- adds r0, #1
- adds r6, r2, r0
- movs r0, #0x53
- movs r1, #1
- bl CreateEnemy
- adds r1, r0, #0
- mov r8, r4
- cmp r1, #0
- beq _08044440
- movs r2, #0
- ldrsb r2, [r6, r2]
- adds r2, #8
- lsls r2, r2, #0x10
- movs r3, #1
- ldrsb r3, [r6, r3]
- adds r3, #8
- lsls r3, r3, #0x10
- adds r0, r5, #0
- bl PositionRelative
-_08044440:
- ldr r0, [r5, #0x64]
- ldrb r0, [r0]
- cmp r0, #0
- bne _08044458
- movs r0, #0x12
- bl SetGlobalFlag
- movs r0, #0x72
- bl SoundReq
- bl DeleteThisEntity
-_08044458:
- movs r2, #0
- adds r3, r5, #0
- adds r3, #0x74
-_0804445E:
- adds r0, r6, r2
- adds r1, r7, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, #1
- cmp r2, #4
- bls _0804445E
- movs r2, #0
- ldrb r1, [r3]
- cmp r2, r1
- bhs _08044492
- ldr r4, [r5, #0x48]
- ldr r0, [r5, #0x64]
- ldrb r6, [r0]
- adds r5, r1, #0
- adds r3, r4, #0
- adds r3, #0xc
- adds r1, r4, #0
-_08044482:
- ldrb r0, [r1, #0x11]
- cmp r0, r6
- beq _080443BA
- adds r3, #8
- adds r1, #8
- adds r2, #1
- cmp r2, r5
- blo _08044482
-_08044492:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_08044498
-sub_08044498: @ 0x08044498
- push {r4, r5, r6, lr}
- mov ip, r0
- ldr r6, _08044538 @ =gPlayerEntity
- movs r1, #0x2e
- ldrsh r0, [r6, r1]
- ldr r3, _0804453C @ =gRoomControls
- ldrh r1, [r3, #6]
- subs r0, r0, r1
- asrs r4, r0, #4
- movs r2, #0x3f
- ands r4, r2
- movs r5, #0x32
- ldrsh r0, [r6, r5]
- ldrh r1, [r3, #8]
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r2
- lsls r0, r0, #6
- orrs r4, r0
- ldr r0, _08044540 @ =gPlayerState
- adds r0, #0x92
- ldrh r0, [r0]
- movs r1, #0xf0
- lsls r1, r1, #4
- ands r1, r0
- mov r2, ip
- adds r2, #0x75
- ldrb r0, [r2]
- cmp r1, r0
- bne _080444DE
- mov r0, ip
- adds r0, #0x76
- ldrh r0, [r0]
- cmp r4, r0
- beq _0804454C
-_080444DE:
- strb r1, [r2]
- mov r0, ip
- adds r0, #0x76
- strh r4, [r0]
- mov r1, ip
- ldr r0, [r1, #0x64]
- adds r2, r0, #1
- ldrb r4, [r0]
- movs r3, #0x2e
- ldrsh r1, [r6, r3]
- mov r5, ip
- movs r3, #0x2e
- ldrsh r0, [r5, r3]
- subs r5, r1, r0
- movs r0, #0x32
- ldrsh r1, [r6, r0]
- mov r3, ip
- movs r6, #0x32
- ldrsh r0, [r3, r6]
- subs r1, r1, r0
- movs r3, #0
- cmp r3, r4
- bhs _0804454C
-_0804450C:
- movs r0, #0
- ldrsb r0, [r2, r0]
- subs r0, r5, r0
- cmp r0, #0xf
- bhi _08044544
- movs r0, #1
- ldrsb r0, [r2, r0]
- subs r0, r1, r0
- cmp r0, #0xf
- bhi _08044544
- movs r0, #0xf
- movs r1, #0x11
- movs r2, #0
- bl CreateObject
- adds r1, r0, #0
- cmp r1, #0
- beq _0804454C
- ldr r0, _08044538 @ =gPlayerEntity
- bl CopyPosition
- b _0804454C
- .align 2, 0
-_08044538: .4byte gPlayerEntity
-_0804453C: .4byte gRoomControls
-_08044540: .4byte gPlayerState
-_08044544:
- adds r2, #5
- adds r3, #1
- cmp r3, r4
- blo _0804450C
-_0804454C:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_08044550
-sub_08044550: @ 0x08044550
- push {r4, r5, r6, r7, lr}
- adds r6, r0, #0
- ldr r0, _080445A8 @ =gPlayerState
- ldrb r1, [r0, #0x1c]
- movs r0, #0xf
- ands r0, r1
- cmp r0, #1
- bne _080445B4
- ldrh r1, [r6, #0x24]
- movs r2, #0x24
- ldrsh r0, [r6, r2]
- cmp r0, #0xff
- bgt _08044570
- adds r0, r1, #0
- adds r0, #0x10
- strh r0, [r6, #0x24]
-_08044570:
- ldr r5, _080445AC @ =gPlayerEntity
- ldrb r0, [r5, #0x14]
- movs r4, #0xe
- ands r4, r0
- ldr r0, _080445B0 @ =gUnk_08126EE4
- adds r4, r4, r0
- movs r3, #0x2e
- ldrsh r0, [r6, r3]
- movs r7, #0x32
- ldrsh r1, [r6, r7]
- movs r3, #0x2e
- ldrsh r2, [r5, r3]
- movs r3, #0
- ldrsb r3, [r4, r3]
- adds r2, r2, r3
- movs r7, #0x32
- ldrsh r3, [r5, r7]
- ldrb r4, [r4, #1]
- lsls r4, r4, #0x18
- asrs r4, r4, #0x18
- adds r3, r3, r4
- bl CalculateDirectionTo
- strb r0, [r6, #0x15]
- adds r0, r6, #0
- bl LinearMoveUpdate
- b _080445BE
- .align 2, 0
-_080445A8: .4byte gPlayerState
-_080445AC: .4byte gPlayerEntity
-_080445B0: .4byte gUnk_08126EE4
-_080445B4:
- adds r0, r6, #0
- bl sub_080445C0
- bl DeleteThisEntity
-_080445BE:
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_080445C0
-sub_080445C0: @ 0x080445C0
- push {r4, lr}
- adds r4, r0, #0
- movs r0, #0x21
- movs r1, #1
- movs r2, #1
- bl CreateObject
- adds r1, r0, #0
- cmp r1, #0
- beq _080445DA
- adds r0, r4, #0
- bl CopyPosition
-_080445DA:
- pop {r4, pc}
diff --git a/asm/non_matching/dust/sub_080442BC.inc b/asm/non_matching/dust/sub_080442BC.inc
new file mode 100644
index 00000000..719487b0
--- /dev/null
+++ b/asm/non_matching/dust/sub_080442BC.inc
@@ -0,0 +1,46 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ adds r3, r0, #0
+ ldr r5, _0804430C @ =gUnk_080D15B4
+ ldr r0, [r3, #0x64]
+ ldrb r6, [r0]
+ movs r4, #0
+ cmp r4, r6
+ bhs _08044304
+ movs r7, #0
+_080442CE:
+ ldr r1, [r3, #0x48]
+ lsls r2, r4, #3
+ adds r1, r2, r1
+ ldrb r0, [r5]
+ strb r0, [r1, #0xc]
+ ldr r0, [r3, #0x48]
+ adds r0, r2, r0
+ ldrb r1, [r5, #1]
+ strb r1, [r0, #0xd]
+ ldr r0, [r3, #0x48]
+ adds r0, r2, r0
+ ldrb r1, [r5, #2]
+ strb r1, [r0, #0xe]
+ ldr r0, [r3, #0x48]
+ adds r0, r2, r0
+ ldrb r1, [r5, #3]
+ strb r1, [r0, #0xf]
+ ldr r0, [r3, #0x48]
+ adds r0, r2, r0
+ adds r0, #0xc
+ strb r7, [r0, #4]
+ ldr r0, [r3, #0x48]
+ adds r2, r2, r0
+ strb r4, [r2, #0x11]
+ adds r4, #1
+ cmp r4, r6
+ blo _080442CE
+_08044304:
+ adds r0, r3, #0
+ adds r0, #0x74
+ strb r6, [r0]
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0804430C: .4byte gUnk_080D15B4
+ .syntax divided
diff --git a/asm/non_matching/dust/sub_08044310.inc b/asm/non_matching/dust/sub_08044310.inc
new file mode 100644
index 00000000..19150d22
--- /dev/null
+++ b/asm/non_matching/dust/sub_08044310.inc
@@ -0,0 +1,213 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ adds r5, r0, #0
+ movs r4, #0xff
+ movs r6, #0xff
+ ldr r0, _08044334 @ =gPlayerEntity
+ ldrb r0, [r0, #0x14]
+ lsrs r1, r0, #1
+ movs r0, #3
+ ands r1, r0
+ cmp r1, #1
+ beq _0804436A
+ cmp r1, #1
+ bgt _08044338
+ cmp r1, #0
+ beq _08044342
+ b _080443EA
+ .align 2, 0
+_08044334: .4byte gPlayerEntity
+_08044338:
+ cmp r1, #2
+ beq _08044392
+ cmp r1, #3
+ beq _080443C4
+ b _080443EA
+_08044342:
+ movs r2, #0
+ adds r0, r5, #0
+ adds r0, #0x74
+ ldrb r0, [r0]
+ cmp r2, r0
+ bhs _080443EA
+ adds r3, r0, #0
+ ldr r1, [r5, #0x48]
+_08044352:
+ ldrb r0, [r1, #0x10]
+ cmp r0, #0
+ bne _08044360
+ ldrb r0, [r1, #0xd]
+ cmp r6, r0
+ bls _08044360
+ adds r4, r2, #0
+_08044360:
+ adds r1, #8
+ adds r2, #1
+ cmp r2, r3
+ blo _08044352
+ b _080443EA
+_0804436A:
+ movs r2, #0
+ adds r0, r5, #0
+ adds r0, #0x74
+ ldrb r0, [r0]
+ cmp r2, r0
+ bhs _080443EA
+ adds r3, r0, #0
+ ldr r1, [r5, #0x48]
+_0804437A:
+ ldrb r0, [r1, #0x10]
+ cmp r0, #0
+ bne _08044388
+ ldrb r0, [r1, #0xe]
+ cmp r6, r0
+ bls _08044388
+ adds r4, r2, #0
+_08044388:
+ adds r1, #8
+ adds r2, #1
+ cmp r2, r3
+ blo _0804437A
+ b _080443EA
+_08044392:
+ movs r2, #0
+ adds r0, r5, #0
+ adds r0, #0x74
+ ldrb r0, [r0]
+ cmp r2, r0
+ bhs _080443EA
+ adds r3, r0, #0
+ ldr r1, [r5, #0x48]
+_080443A2:
+ ldrb r0, [r1, #0x10]
+ cmp r0, #0
+ bne _080443B0
+ ldrb r0, [r1, #0xc]
+ cmp r6, r0
+ bls _080443B0
+ adds r4, r2, #0
+_080443B0:
+ adds r1, #8
+ adds r2, #1
+ cmp r2, r3
+ blo _080443A2
+ b _080443EA
+_080443BA:
+ mov r1, r8
+ adds r0, r1, r4
+ ldrb r0, [r0, #0x11]
+ strb r0, [r3, #5]
+ b _08044492
+_080443C4:
+ movs r2, #0
+ adds r0, r5, #0
+ adds r0, #0x74
+ ldrb r0, [r0]
+ cmp r2, r0
+ bhs _080443EA
+ adds r3, r0, #0
+ ldr r1, [r5, #0x48]
+_080443D4:
+ ldrb r0, [r1, #0x10]
+ cmp r0, #0
+ bne _080443E2
+ ldrb r0, [r1, #0xf]
+ cmp r6, r0
+ bls _080443E2
+ adds r4, r2, #0
+_080443E2:
+ adds r1, #8
+ adds r2, #1
+ cmp r2, r3
+ blo _080443D4
+_080443EA:
+ cmp r4, #0xff
+ beq _08044492
+ ldr r0, [r5, #0x48]
+ lsls r4, r4, #3
+ adds r0, r4, r0
+ movs r1, #1
+ strb r1, [r0, #0x10]
+ ldr r1, [r5, #0x64]
+ ldrb r0, [r1]
+ subs r0, #1
+ strb r0, [r1]
+ ldr r2, [r5, #0x64]
+ ldrb r1, [r2]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ adds r0, #1
+ adds r7, r2, r0
+ ldr r0, [r5, #0x48]
+ adds r0, r4, r0
+ ldrb r1, [r0, #0x11]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ adds r0, #1
+ adds r6, r2, r0
+ movs r0, #0x53
+ movs r1, #1
+ bl CreateEnemy
+ adds r1, r0, #0
+ mov r8, r4
+ cmp r1, #0
+ beq _08044440
+ movs r2, #0
+ ldrsb r2, [r6, r2]
+ adds r2, #8
+ lsls r2, r2, #0x10
+ movs r3, #1
+ ldrsb r3, [r6, r3]
+ adds r3, #8
+ lsls r3, r3, #0x10
+ adds r0, r5, #0
+ bl PositionRelative
+_08044440:
+ ldr r0, [r5, #0x64]
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _08044458
+ movs r0, #0x12
+ bl SetGlobalFlag
+ movs r0, #0x72
+ bl SoundReq
+ bl DeleteThisEntity
+_08044458:
+ movs r2, #0
+ adds r3, r5, #0
+ adds r3, #0x74
+_0804445E:
+ adds r0, r6, r2
+ adds r1, r7, r2
+ ldrb r1, [r1]
+ strb r1, [r0]
+ adds r2, #1
+ cmp r2, #4
+ bls _0804445E
+ movs r2, #0
+ ldrb r1, [r3]
+ cmp r2, r1
+ bhs _08044492
+ ldr r4, [r5, #0x48]
+ ldr r0, [r5, #0x64]
+ ldrb r6, [r0]
+ adds r5, r1, #0
+ adds r3, r4, #0
+ adds r3, #0xc
+ adds r1, r4, #0
+_08044482:
+ ldrb r0, [r1, #0x11]
+ cmp r0, r6
+ beq _080443BA
+ adds r3, #8
+ adds r1, #8
+ adds r2, #1
+ cmp r2, r5
+ blo _08044482
+_08044492:
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .syntax divided
diff --git a/data/const/enemy/dust.s b/data/const/enemy/dust.s
index e8f1e1cb..c5f31680 100644
--- a/data/const/enemy/dust.s
+++ b/data/const/enemy/dust.s
@@ -4,22 +4,9 @@
.section .rodata
.align 2
-gUnk_080D1588:: @ 080D1588
- .4byte sub_08044134
- .4byte sub_0804414C
- .4byte GenericKnockback
- .4byte GenericDeath
- .4byte GenericConfused
- .4byte sub_0804415C
-gUnk_080D15A0:: @ 080D15A0
- .4byte sub_080441E0
- .4byte sub_080442A0
-gUnk_080D15A8:: @ 080D15A8
- .4byte sub_080441BC
- .4byte sub_080441C4
- .4byte sub_080441CC
+
gUnk_080D15B4:: @ 080D15B4
.incbin "dust/gUnk_080D15B4.bin"
diff --git a/linker.ld b/linker.ld
index 03aee1c6..476f2051 100644
--- a/linker.ld
+++ b/linker.ld
@@ -381,7 +381,7 @@ SECTIONS {
src/enemy/enemy50.o(.text);
src/enemy/vaatiWrath.o(.text);
src/enemy/vaatiArm.o(.text);
- asm/enemy/dust.o(.text);
+ src/enemy/dust.o(.text);
src/enemy/vaatiBall.o(.text);
src/enemy/slime.o(.text);
src/enemy/sub_080451CC.o(.text);
@@ -1031,6 +1031,7 @@ SECTIONS {
data/animations/enemy/vaatiWrath.o(.rodata);
src/enemy/vaatiArm.o(.rodata);
data/animations/enemy/vaatiArm.o(.rodata);
+ src/enemy/dust.o(.rodata);
data/const/enemy/dust.o(.rodata);
src/enemy/vaatiBall.o(.rodata);
data/animations/enemy/vaatiBall.o(.rodata);
diff --git a/src/enemy/dust.c b/src/enemy/dust.c
new file mode 100644
index 00000000..464cd41d
--- /dev/null
+++ b/src/enemy/dust.c
@@ -0,0 +1,327 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "enemy.h"
+#include "hitbox.h"
+#include "player.h"
+#include "physics.h"
+#include "room.h"
+#include "asm.h"
+#include "object.h"
+
+typedef struct {
+ Entity base;
+ u8 filler[0xc];
+ u8 unk_74;
+ u8 unk_75;
+ u16 unk_76;
+} DustEntity;
+
+typedef struct {
+ s8 unk_0;
+ s8 unk_1;
+ u8 unk_2;
+ u8 unk_3;
+ u8 unk_4;
+} PACKED DustHeapItem;
+
+typedef struct {
+ u8 unk_0;
+ DustHeapItem items[0];
+} PACKED DustHeap;
+
+#define HEAP ((DustHeap*)super->myHeap)
+
+#ifdef EU
+#define DUST_SPRITE_INDEX 0x1ea
+#else
+#define DUST_SPRITE_INDEX 0x1eb
+#endif
+
+void sub_08044134(DustEntity*);
+void sub_0804414C(DustEntity*);
+void sub_0804415C(DustEntity*);
+void sub_080441E0(DustEntity*);
+void sub_080442A0(DustEntity*);
+void sub_080441CC(DustEntity*);
+void sub_080441C4(DustEntity*);
+void sub_080441BC(DustEntity*);
+void sub_08044310(DustEntity*);
+void sub_080445C0(DustEntity*);
+void sub_080442BC(DustEntity*);
+void sub_08044498(DustEntity*);
+void sub_08044550(DustEntity*);
+
+extern void* sub_080AD8F0(u32, u32);
+
+extern const s8 gUnk_08126EE4[];
+
+void (*const Dust_Functions[])(Entity*) = {
+ (EntityActionPtr)sub_08044134, (EntityActionPtr)sub_0804414C, GenericKnockback, GenericDeath, GenericConfused,
+ (EntityActionPtr)sub_0804415C,
+};
+
+void Dust(Entity* this) {
+ Dust_Functions[GetNextFunction(this)](this);
+}
+
+void sub_08044134(DustEntity* this) {
+ static void (*const Dust_Actions[])(DustEntity*) = {
+ sub_080441E0,
+ sub_080442A0,
+ };
+ Dust_Actions[super->action](this);
+}
+
+void sub_0804414C(DustEntity* this) {
+ EnemyFunctionHandlerAfterCollision(super, Dust_Functions);
+}
+
+void sub_0804415C(DustEntity* this) {
+ static void (*const Dust_SubActions[])(DustEntity*) = {
+ sub_080441BC,
+ sub_080441C4,
+ sub_080441CC,
+ };
+
+ if (super->type == 0) {
+ if (sub_0806F520(super)) {
+ if (--super->timer == 0) {
+ super->timer = 8;
+ sub_08044310(this);
+ }
+ } else {
+ super->timer = 8;
+ }
+ } else {
+ if (sub_0806F520(super)) {
+ Dust_SubActions[super->subAction](this);
+ } else {
+ sub_080445C0(this);
+ DeleteThisEntity();
+ }
+ }
+}
+
+void sub_080441BC(DustEntity* this) {
+ super->subAction = 2;
+}
+
+void sub_080441C4(DustEntity* this) {
+ sub_0806F4E8(super);
+}
+
+void sub_080441CC(DustEntity* this) {
+ if (sub_0806F3E4(super)) {
+ GenericDeath(super);
+ }
+}
+
+void sub_080441E0(DustEntity* this) {
+ int iVar1;
+ u8* pbVar2;
+ u32* puVar3;
+ Hitbox* pHVar4;
+
+ if (CheckGlobalFlag(MACHI_MACHIHOKORI)) {
+ DeleteThisEntity();
+ }
+ if (super->type == 0) {
+ pbVar2 = (u8*)sub_080AD8F0(DUST_SPRITE_INDEX, 1);
+ iVar1 = (u32)*pbVar2 * sizeof(DustHeapItem) + 1;
+ puVar3 = (u32*)zMalloc(iVar1);
+ super->myHeap = puVar3;
+ if (puVar3 == NULL) {
+ return;
+ }
+ MemCopy(pbVar2, puVar3, iVar1);
+ super->spriteAnimation[2] = 0xff;
+ pHVar4 = (Hitbox*)zMalloc(HEAP->unk_0 * 8 + 0xc);
+ if (pHVar4 == NULL) {
+ zFree(super->myHeap);
+ return;
+ }
+ super->hitbox = pHVar4;
+ *pHVar4 = gHitbox_4;
+ sub_080442BC(this);
+ super->frameIndex = 1;
+ super->spritePriority.b0 = 7;
+ this->unk_75 = 0;
+ this->unk_76 = 0xffff;
+ } else {
+ super->frameIndex = 0;
+ super->speed = 0;
+ super->hitbox = (Hitbox*)&gHitbox_1;
+ super->gustJarFlags = 1;
+ }
+ super->action = 1;
+ super->timer = 8;
+}
+
+void sub_080442A0(DustEntity* this) {
+ if (super->type == 0) {
+ sub_08044498(this);
+ } else {
+ sub_08044550(this);
+ }
+}
+
+extern const u8 gUnk_080D15B4[];
+
+NONMATCH("asm/non_matching/dust/sub_080442BC.inc", void sub_080442BC(DustEntity* this)) {
+ u32 bVar1;
+ u32 i;
+ u32 tmp;
+ const u8* ptr = gUnk_080D15B4;
+ u8* ptr2;
+
+ bVar1 = HEAP->unk_0;
+
+ for (i = 0; i < bVar1; i++) {
+ tmp = 0;
+ super->hitbox[i + 1].unk2[2] = ptr[0];
+ super->hitbox[i + 1].unk2[3] = ptr[1];
+ super->hitbox[i + 1].width = ptr[2];
+ super->hitbox[i + 1].height = ptr[3];
+ // hitbox is probably misused here.
+ super->hitbox[i + 1].offset_x = tmp;
+ super->hitbox[i + 2].offset_y = (s8)i;
+ }
+ this->unk_74 = bVar1;
+}
+END_NONMATCH
+
+// heap and hitbox struct
+NONMATCH("asm/non_matching/dust/sub_08044310.inc", void sub_08044310(DustEntity* this)) {
+ Entity* iVar1;
+ u32 bVar2;
+ Hitbox* pHVar3;
+ DustHeap* puVar4;
+ u32 i;
+ u8* puVar6;
+ u32 uVar7;
+ Hitbox* pHVar8;
+ u8* pbVar9;
+ u32 tmp;
+
+ uVar7 = 0xff;
+ tmp = 0xff;
+ switch (gPlayerEntity.animationState >> 1 & 3) {
+ case 0:
+ for (i = 0; i < this->unk_74; i++) {
+ if (((u8)super->hitbox[i + 2].offset_x == 0) && (tmp > (u32)super->hitbox[i + 1].unk2[3])) {
+ uVar7 = i;
+ }
+ }
+ break;
+ case 1:
+ for (i = 0; i < this->unk_74; i++) {
+ if (((u8)super->hitbox[i + 2].offset_x == 0) && (tmp > (u8)super->hitbox[i + 1].width)) {
+ uVar7 = i;
+ }
+ }
+ break;
+ case 2:
+ for (i = 0; i < this->unk_74; i++) {
+ if ((u8)super->hitbox[i + 2].offset_x == 0 && (tmp > (u8)super->hitbox[i + 1].unk2[2])) {
+ uVar7 = i;
+ }
+ }
+ break;
+ case 3:
+ for (i = 0; i < this->unk_74; i++) {
+ if (((u8)super->hitbox[i + 2].offset_x == 0) && (tmp > super->hitbox[i + 1].height)) {
+ uVar7 = i;
+ }
+ }
+ break;
+ }
+
+ if (uVar7 != 0xff) {
+ super->hitbox[uVar7 + 2].offset_x = 1;
+ HEAP->unk_0--;
+ puVar4 = HEAP;
+ bVar2 = puVar4->unk_0;
+ pbVar9 = &puVar4->items[(u32)(u8)super->hitbox[uVar7 + 2].offset_y].unk_1;
+ iVar1 = CreateEnemy(DUST, 1);
+ if (iVar1 != 0) {
+ PositionRelative(super, iVar1, ((s8)*pbVar9 + 8) * 0x10000, ((s8)pbVar9[1] + 8) * 0x10000);
+ }
+
+ if (HEAP->unk_0 == 0) {
+ SetGlobalFlag(MACHI_MACHIHOKORI);
+ SoundReq(SFX_SECRET);
+ DeleteThisEntity();
+ }
+
+ for (i = 0; i < 5; i++) {
+ pbVar9[i] = (&puVar4->unk_0)[i];
+ }
+
+ for (i = 0; i < this->unk_74; i++) {
+ if ((u8)super->hitbox[i + 2].offset_y == HEAP->unk_0) {
+ super->hitbox[i].unk2[3] = super->hitbox[uVar7 + 2].offset_y;
+ return;
+ }
+ }
+ }
+}
+END_NONMATCH
+
+void sub_08044498(DustEntity* this) {
+ Entity* pEVar1;
+ DustHeapItem* pbVar2;
+ u32 i;
+ u32 tileIndex;
+ u32 uVar4;
+ u32 tmp;
+ u32 xdiff, ydiff;
+
+ uVar4 = COORD_TO_TILE(&gPlayerEntity);
+ tmp = (gPlayerState.field_0x92 & 0xf00);
+ if (tmp != this->unk_75 || uVar4 != this->unk_76) {
+ this->unk_75 = tmp;
+ this->unk_76 = uVar4;
+ pbVar2 = HEAP->items;
+ uVar4 = HEAP->unk_0;
+ xdiff = gPlayerEntity.x.HALF.HI - super->x.HALF.HI;
+ ydiff = gPlayerEntity.y.HALF.HI - super->y.HALF.HI;
+
+ for (i = 0; i < uVar4; i++) {
+ if (xdiff - pbVar2[i].unk_0 < 0x10 && ydiff - pbVar2[i].unk_1 < 0x10) {
+ pEVar1 = CreateObject(SPECIAL_FX, 0x11, 0);
+ if (pEVar1 == NULL) {
+ return;
+ }
+ CopyPosition(&gPlayerEntity, pEVar1);
+ return;
+ }
+ }
+ }
+}
+
+void sub_08044550(DustEntity* this) {
+ u8 uVar1;
+ const s8* ptr;
+
+ if ((gPlayerState.field_0x1c & 0xf) == 1) {
+ if (super->speed < 0x100) {
+ super->speed += 0x10;
+ }
+ ptr = &gUnk_08126EE4[gPlayerEntity.animationState & 0xe];
+ super->direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, gPlayerEntity.x.HALF.HI + ptr[0],
+ gPlayerEntity.y.HALF.HI + ptr[1]);
+ LinearMoveUpdate(super);
+ } else {
+ sub_080445C0(this);
+ DeleteThisEntity();
+ }
+}
+
+void sub_080445C0(DustEntity* this) {
+ Entity* pEVar1;
+
+ pEVar1 = CreateObject(OBJECT_21, 1, 1);
+ if (pEVar1 != NULL) {
+ CopyPosition(super, pEVar1);
+ }
+}
diff --git a/src/object/lilypadLarge.c b/src/object/lilypadLarge.c
index 81314d9b..866fa2cc 100644
--- a/src/object/lilypadLarge.c
+++ b/src/object/lilypadLarge.c
@@ -27,7 +27,7 @@ typedef struct {
u8 unk_85;
} LilypadLargeEntity;
-extern u8 gUnk_08126EE4[];
+extern s8 gUnk_08126EE4[];
void sub_080855E8(LilypadLargeEntity*);
void sub_08085CDC(LilypadLargeEntity*);
@@ -166,8 +166,8 @@ void sub_080855E8(LilypadLargeEntity* this) {
SoundReq(SFX_WATER_WALK);
}
if ((super->contactFlags & 0x7f) == 0x13) {
- sVar10 = gPlayerEntity.x.HALF.HI + (s8)gUnk_08126EE4[gPlayerEntity.animationState & 0xe];
- uVar4 = gPlayerEntity.y.HALF.HI + (s8)gUnk_08126EE4[gPlayerEntity.animationState | 1];
+ sVar10 = gPlayerEntity.x.HALF.HI + gUnk_08126EE4[gPlayerEntity.animationState & 0xe];
+ uVar4 = gPlayerEntity.y.HALF.HI + gUnk_08126EE4[gPlayerEntity.animationState | 1];
super->direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, sVar10, uVar4);
switch (gPlayerState.gustJarSpeed) {
diff --git a/src/object/pullableMushroom.c b/src/object/pullableMushroom.c
index f4b1d794..3a4bbb7b 100644
--- a/src/object/pullableMushroom.c
+++ b/src/object/pullableMushroom.c
@@ -21,7 +21,7 @@ typedef struct {
/*0x7c*/ u32 unk_7c;
} PullableMushroomEntity;
-extern const u8 gUnk_08126EE4[];
+extern const s8 gUnk_08126EE4[];
void PullableMushroom_Init(PullableMushroomEntity*);
void PullableMushroom_Action1(PullableMushroomEntity*);