summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2022-02-02 12:34:37 -0800
committerGitHub <noreply@github.com>2022-02-02 12:34:37 -0800
commitdb8dfd44b2bacd521204de7e8a45efa4f1a182e8 (patch)
tree062710fa135d63250a00f89db767b167e02b82ad
parentc0f68e9056b24d1413984346da71aafafde9f332 (diff)
parent99076969de26f2fb32ffd10254e42c070f84a0ae (diff)
Merge pull request #345 from octorock/object97
-rw-r--r--asm/object/object97.s1269
-rw-r--r--assets/assets.json30
-rw-r--r--data/const/object/object97.s65
-rw-r--r--include/functions.h1
-rw-r--r--include/object.h4
-rw-r--r--linker.ld4
-rw-r--r--src/coord.c1
-rw-r--r--src/npcUtils.c1
-rw-r--r--src/object.c2
-rw-r--r--src/object/keyStealingTakkuri.c584
-rw-r--r--src/projectile/gleerokProjectile.c2
-rw-r--r--src/projectile/v1FireProjectile.c2
12 files changed, 590 insertions, 1375 deletions
diff --git a/asm/object/object97.s b/asm/object/object97.s
deleted file mode 100644
index d49bbd58..00000000
--- a/asm/object/object97.s
+++ /dev/null
@@ -1,1269 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start Object97
-Object97: @ 0x0809D9A8
- push {lr}
- ldr r2, _0809D9BC @ =gUnk_081240C0
- ldrb r1, [r0, #0xa]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809D9BC: .4byte gUnk_081240C0
-
- thumb_func_start sub_0809D9C0
-sub_0809D9C0: @ 0x0809D9C0
- push {lr}
- ldr r2, _0809D9D4 @ =gUnk_081240D8
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809D9D4: .4byte gUnk_081240D8
-
- thumb_func_start sub_0809D9D8
-sub_0809D9D8: @ 0x0809D9D8
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- adds r0, #1
- movs r2, #0
- strb r0, [r4, #0xc]
- adds r1, r4, #0
- adds r1, #0x38
- movs r0, #1
- strb r0, [r1]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- strb r2, [r4, #0xf]
- ldrb r1, [r4, #0x19]
- movs r0, #0x3f
- ands r0, r1
- movs r1, #0x40
- orrs r0, r1
- strb r0, [r4, #0x19]
- strh r2, [r4, #0x24]
- movs r0, #0x18
- strb r0, [r4, #0x15]
- adds r0, r4, #0
- movs r1, #1
- bl InitAnimationForceUpdate
- adds r0, r4, #0
- movs r1, #6
- bl FindNextDuplicateID
- cmp r0, #0
- beq _0809DA1E
- str r4, [r0, #0x50]
- str r0, [r4, #0x54]
- b _0809DA28
-_0809DA1E:
- movs r0, #0x20
- bl SetGlobalFlag
- bl DeleteThisEntity
-_0809DA28:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_0809DA2C
-sub_0809DA2C: @ 0x0809DA2C
- push {lr}
- adds r1, r0, #0
- ldrb r0, [r1, #0xe]
- subs r0, #1
- strb r0, [r1, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0809DA5C
- ldrb r0, [r1, #0xc]
- adds r0, #1
- strb r0, [r1, #0xc]
- ldr r0, [r1, #0x30]
- movs r2, #0x80
- lsls r2, r2, #0xd
- adds r0, r0, r2
- str r0, [r1, #0x30]
- ldr r0, [r1, #0x34]
- ldr r2, _0809DA60 @ =0xFFF00000
- adds r0, r0, r2
- str r0, [r1, #0x34]
- adds r0, r1, #0
- movs r1, #3
- bl InitAnimationForceUpdate
-_0809DA5C:
- pop {pc}
- .align 2, 0
-_0809DA60: .4byte 0xFFF00000
-
- thumb_func_start sub_0809DA64
-sub_0809DA64: @ 0x0809DA64
- push {r4, r5, lr}
- adds r5, r0, #0
- ldr r4, [r5, #0x54]
- adds r1, r4, #0
- bl GetFacingDirection
- adds r1, r0, #0
- adds r0, r5, #0
- bl sub_0809E1C8
- adds r0, r5, #0
- bl sub_0809E1F0
- movs r0, #0x2e
- ldrsh r1, [r4, r0]
- movs r0, #0x32
- ldrsh r2, [r4, r0]
- adds r0, r5, #0
- bl sub_080041DC
- lsls r0, r0, #4
- movs r2, #0x24
- ldrsh r1, [r5, r2]
- cmp r0, r1
- bge _0809DAAC
- ldrb r0, [r5, #0xc]
- adds r0, #1
- strb r0, [r5, #0xc]
- movs r0, #0x10
- strb r0, [r5, #0xe]
- movs r0, #1
- strb r0, [r5, #0xf]
- adds r0, r5, #0
- movs r1, #2
- bl InitAnimationForceUpdate
-_0809DAAC:
- adds r0, r5, #0
- bl UpdateAnimationSingleFrame
- pop {r4, r5, pc}
-
- thumb_func_start sub_0809DAB4
-sub_0809DAB4: @ 0x0809DAB4
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r5, _0809DB10 @ =gRoomControls
- ldrh r1, [r5, #6]
- adds r1, #0x78
- ldrh r2, [r5, #8]
- adds r2, #0xa8
- bl sub_080045B4
- adds r1, r0, #0
- adds r0, r4, #0
- bl sub_0809E1C8
- ldrb r0, [r4, #0xe]
- cmp r0, #0
- beq _0809DADE
- subs r0, #1
- strb r0, [r4, #0xe]
- ldrh r0, [r4, #0x24]
- subs r0, #0x80
- strh r0, [r4, #0x24]
-_0809DADE:
- adds r0, r4, #0
- bl sub_0809E1F0
- ldrh r1, [r5, #6]
- adds r1, #0x78
- ldrh r2, [r5, #8]
- adds r2, #0xa8
- adds r0, r4, #0
- bl sub_080041DC
- lsls r0, r0, #4
- movs r2, #0x24
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bge _0809DB02
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
-_0809DB02:
- adds r0, r4, #0
- bl sub_0809E210
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, r5, pc}
- .align 2, 0
-_0809DB10: .4byte gRoomControls
-
- thumb_func_start sub_0809DB14
-sub_0809DB14: @ 0x0809DB14
- push {r4, r5, lr}
- adds r4, r0, #0
- bl sub_0809E1F0
- adds r0, r4, #0
- bl CheckOnScreen
- adds r5, r0, #0
- cmp r5, #0
- bne _0809DB36
- movs r0, #0x20
- bl SetGlobalFlag
- ldr r0, [r4, #0x54]
- str r5, [r0, #0x50]
- bl DeleteThisEntity
-_0809DB36:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0809DB40
-sub_0809DB40: @ 0x0809DB40
- push {lr}
- ldr r2, _0809DB54 @ =gUnk_081240EC
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809DB54: .4byte gUnk_081240EC
-
- thumb_func_start sub_0809DB58
-sub_0809DB58: @ 0x0809DB58
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- adds r1, r4, #0
- adds r1, #0x38
- movs r0, #2
- strb r0, [r1]
- ldrb r1, [r4, #0x19]
- movs r0, #0x3f
- ands r0, r1
- movs r1, #0x80
- orrs r0, r1
- strb r0, [r4, #0x19]
- adds r0, r4, #0
- bl UpdateSpriteForCollisionLayer
- adds r0, r4, #0
- movs r1, #0x3c
- bl InitAnimationForceUpdate
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_0809DB88
-sub_0809DB88: @ 0x0809DB88
- push {r4, r5, lr}
- adds r5, r0, #0
- ldr r4, [r5, #0x50]
- cmp r4, #0
- beq _0809DBC4
- ldr r0, [r4, #4]
- cmp r0, #0
- bne _0809DB9C
- bl DeleteThisEntity
-_0809DB9C:
- ldrb r0, [r4, #0xf]
- cmp r0, #0
- beq _0809DBB0
- movs r3, #0x80
- lsls r3, r3, #0xc
- adds r0, r4, #0
- adds r1, r5, #0
- movs r2, #0
- bl PositionRelative
-_0809DBB0:
- ldrb r0, [r4, #0x18]
- lsls r0, r0, #0x1e
- lsrs r0, r0, #0x1e
- ldrb r2, [r5, #0x18]
- movs r1, #4
- rsbs r1, r1, #0
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, #0x18]
- b _0809DBC8
-_0809DBC4:
- bl DeleteThisEntity
-_0809DBC8:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0809DBCC
-sub_0809DBCC: @ 0x0809DBCC
- push {lr}
- ldr r2, _0809DBE0 @ =gUnk_081240F4
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809DBE0: .4byte gUnk_081240F4
-
- thumb_func_start sub_0809DBE4
-sub_0809DBE4: @ 0x0809DBE4
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0809DB58
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #1
- orrs r0, r1
- strb r0, [r4, #0x18]
- movs r0, #0x18
- strb r0, [r4, #0x15]
- adds r0, #0xe8
- strh r0, [r4, #0x24]
- movs r0, #0x80
- lsls r0, r0, #0xa
- str r0, [r4, #0x20]
- movs r0, #1
- strb r0, [r4, #0xe]
- movs r0, #0x6e
- bl SoundReq
- pop {r4, pc}
-
- thumb_func_start sub_0809DC14
-sub_0809DC14: @ 0x0809DC14
- push {r4, lr}
- adds r4, r0, #0
- bl LinearMoveUpdate
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_080044EC
- cmp r0, #1
- bhi _0809DC5A
- ldrb r0, [r4, #0xe]
- cmp r0, #0
- beq _0809DC3C
- subs r0, #1
- strb r0, [r4, #0xe]
- movs r0, #0x80
- lsls r0, r0, #9
- str r0, [r4, #0x20]
- b _0809DC54
-_0809DC3C:
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- ldr r0, _0809DC64 @ =gPlayerEntity
- adds r0, #0x38
- ldrb r1, [r0]
- adds r0, r4, #0
- adds r0, #0x38
- strb r1, [r0]
- adds r0, r4, #0
- bl UpdateSpriteForCollisionLayer
-_0809DC54:
- movs r0, #0x6e
- bl SoundReq
-_0809DC5A:
- adds r0, r4, #0
- bl sub_0809DB88
- pop {r4, pc}
- .align 2, 0
-_0809DC64: .4byte gPlayerEntity
-
- thumb_func_start sub_0809DC68
-sub_0809DC68: @ 0x0809DC68
- push {lr}
- ldr r2, _0809DC7C @ =gUnk_08124100
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809DC7C: .4byte gUnk_08124100
-
- thumb_func_start sub_0809DC80
-sub_0809DC80: @ 0x0809DC80
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- adds r0, #1
- movs r3, #0
- strb r0, [r4, #0xc]
- adds r1, r4, #0
- adds r1, #0x38
- movs r0, #2
- strb r0, [r1]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- movs r0, #1
- strb r0, [r4, #0xf]
- ldrb r1, [r4, #0x19]
- movs r0, #0x3f
- ands r0, r1
- movs r1, #0x40
- orrs r0, r1
- strb r0, [r4, #0x19]
- movs r2, #0
- strh r3, [r4, #0x24]
- movs r0, #0x18
- strb r0, [r4, #0x15]
- ldr r0, [r4, #0x30]
- movs r1, #0x80
- lsls r1, r1, #0xd
- adds r0, r0, r1
- str r0, [r4, #0x30]
- ldr r0, [r4, #0x34]
- ldr r1, _0809DCFC @ =0xFFF00000
- adds r0, r0, r1
- str r0, [r4, #0x34]
- ldrh r1, [r4, #0x2e]
- adds r0, r4, #0
- adds r0, #0x68
- strh r1, [r0]
- ldrh r0, [r4, #0x32]
- adds r1, r4, #0
- adds r1, #0x6a
- strh r0, [r1]
- adds r0, r4, #0
- adds r0, #0x6c
- strh r3, [r0]
- adds r0, #2
- strb r2, [r0]
- adds r0, r4, #0
- bl UpdateSpriteForCollisionLayer
- adds r0, r4, #0
- movs r1, #3
- bl InitAnimationForceUpdate
- adds r0, r4, #0
- movs r1, #6
- bl FindNextDuplicateID
- cmp r0, #0
- beq _0809DD00
- str r4, [r0, #0x50]
- str r0, [r4, #0x54]
- b _0809DD0A
- .align 2, 0
-_0809DCFC: .4byte 0xFFF00000
-_0809DD00:
- movs r0, #0x20
- bl SetGlobalFlag
- bl DeleteThisEntity
-_0809DD0A:
- pop {r4, pc}
-
- thumb_func_start sub_0809DD0C
-sub_0809DD0C: @ 0x0809DD0C
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0809DD2A
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0xa3
- lsls r0, r0, #1
- bl SoundReq
-_0809DD2A:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_0809DD34
-sub_0809DD34: @ 0x0809DD34
- push {r4, lr}
- adds r4, r0, #0
- adds r1, r4, #0
- adds r1, #0x6e
- ldrb r0, [r1]
- adds r0, #8
- strb r0, [r1]
- subs r1, #2
- ldrh r0, [r1]
- adds r0, #1
- strh r0, [r1]
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- cmp r0, #0x20
- bls _0809DD64
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0x20
- strh r0, [r1]
- movs r0, #0xa3
- lsls r0, r0, #1
- bl SoundReq
-_0809DD64:
- adds r0, r4, #0
- bl sub_0809E238
- adds r0, r4, #0
- bl sub_0809E29C
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, pc}
-
- thumb_func_start sub_0809DD78
-sub_0809DD78: @ 0x0809DD78
- push {r4, lr}
- adds r4, r0, #0
- adds r1, r4, #0
- adds r1, #0x6e
- ldrb r0, [r1]
- adds r0, #8
- strb r0, [r1]
- subs r1, #2
- ldrh r0, [r1]
- subs r0, #1
- strh r0, [r1]
- lsls r0, r0, #0x10
- cmp r0, #0
- bne _0809DDA8
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0x1e
- strb r0, [r4, #0xe]
- ldrb r1, [r4, #0x18]
- subs r0, #0x5f
- ands r0, r1
- strb r0, [r4, #0x18]
- b _0809DDB4
-_0809DDA8:
- adds r0, r4, #0
- bl sub_0809E238
- adds r0, r4, #0
- bl sub_0809E29C
-_0809DDB4:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, pc}
-
- thumb_func_start sub_0809DDBC
-sub_0809DDBC: @ 0x0809DDBC
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0809DDD8
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- ldr r0, _0809DDE0 @ =0x0000015B
- bl SoundReq
-_0809DDD8:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, pc}
- .align 2, 0
-_0809DDE0: .4byte 0x0000015B
-
- thumb_func_start sub_0809DDE4
-sub_0809DDE4: @ 0x0809DDE4
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r0, _0809DE34 @ =gRoomControls
- ldrh r1, [r0, #6]
- adds r1, #0x40
- ldrh r2, [r0, #8]
- movs r0, #0xbc
- lsls r0, r0, #1
- adds r2, r2, r0
- adds r0, r4, #0
- bl sub_080045B4
- adds r1, r0, #0
- adds r0, r4, #0
- bl sub_0809E1C8
- adds r0, r4, #0
- bl sub_0809E1F0
- adds r0, r4, #0
- bl sub_0809E210
- adds r0, r4, #0
- bl CheckOnScreen
- adds r5, r0, #0
- cmp r5, #0
- bne _0809DE2A
- movs r0, #0x20
- bl SetGlobalFlag
- ldr r0, [r4, #0x54]
- str r5, [r0, #0x50]
- bl DeleteThisEntity
-_0809DE2A:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, r5, pc}
- .align 2, 0
-_0809DE34: .4byte gRoomControls
-
- thumb_func_start sub_0809DE38
-sub_0809DE38: @ 0x0809DE38
- push {lr}
- ldr r2, _0809DE4C @ =gUnk_08124118
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809DE4C: .4byte gUnk_08124118
-
- thumb_func_start sub_0809DE50
-sub_0809DE50: @ 0x0809DE50
- push {r4, r5, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- adds r0, #1
- movs r2, #0
- strb r0, [r4, #0xc]
- adds r1, r4, #0
- adds r1, #0x38
- movs r0, #2
- strb r0, [r1]
- movs r0, #0xa
- strb r0, [r4, #0xe]
- strb r2, [r4, #0xf]
- ldrb r1, [r4, #0x19]
- movs r0, #0x3f
- ands r0, r1
- movs r1, #0x40
- orrs r0, r1
- strb r0, [r4, #0x19]
- strh r2, [r4, #0x24]
- ldr r1, _0809DEEC @ =gUnk_0812412D
- ldrb r0, [r4, #0xb]
- adds r0, r0, r1
- ldrb r0, [r0]
- strb r0, [r4, #0x15]
- ldrb r1, [r4, #0xb]
- lsls r1, r1, #2
- ldr r0, _0809DEF0 @ =gUnk_08124132
- adds r1, r1, r0
- ldr r2, _0809DEF4 @ =gRoomControls
- ldrh r0, [r1]
- ldrh r3, [r2, #6]
- adds r0, r0, r3
- strh r0, [r4, #0x2e]
- ldrh r0, [r1, #2]
- ldrh r2, [r2, #8]
- adds r0, r0, r2
- adds r0, #0x40
- strh r0, [r4, #0x32]
- ldr r0, _0809DEF8 @ =0x0000FFC0
- strh r0, [r4, #0x36]
- adds r0, r4, #0
- bl UpdateSpriteForCollisionLayer
- ldr r1, _0809DEFC @ =gUnk_08124128
- ldrb r0, [r4, #0xb]
- adds r0, r0, r1
- ldrb r1, [r0]
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- movs r0, #0x97
- movs r1, #1
- movs r2, #0
- bl CreateObject
- adds r5, r0, #0
- cmp r5, #0
- beq _0809DEE8
- str r4, [r5, #0x50]
- str r5, [r4, #0x54]
- movs r3, #0x80
- lsls r3, r3, #0xc
- adds r0, r4, #0
- adds r1, r5, #0
- movs r2, #0
- bl PositionRelative
- movs r1, #0x10
- ldrb r0, [r4, #0x15]
- cmp r0, #0x18
- bne _0809DEE2
- rsbs r1, r1, #0
-_0809DEE2:
- ldrh r0, [r5, #0x2e]
- adds r0, r0, r1
- strh r0, [r5, #0x2e]
-_0809DEE8:
- pop {r4, r5, pc}
- .align 2, 0
-_0809DEEC: .4byte gUnk_0812412D
-_0809DEF0: .4byte gUnk_08124132
-_0809DEF4: .4byte gRoomControls
-_0809DEF8: .4byte 0x0000FFC0
-_0809DEFC: .4byte gUnk_08124128
-
- thumb_func_start sub_0809DF00
-sub_0809DF00: @ 0x0809DF00
- push {r4, r5, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0xb]
- bl sub_0809E2C4
- cmp r0, #1
- beq _0809DF16
- cmp r0, #2
- beq _0809DF64
- movs r0, #0xa
- b _0809DF96
-_0809DF16:
- ldrb r0, [r4, #0xc]
- adds r0, #2
- strb r0, [r4, #0xc]
- movs r0, #0xff
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r1, [r0]
- adds r1, #2
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- ldr r0, _0809DF60 @ =0x00000123
- bl SoundReq
- ldr r5, [r4, #0x54]
- cmp r5, #0
- beq _0809DF98
- ldrb r1, [r4, #0xb]
- adds r1, #2
- movs r0, #0x96
- movs r2, #0
- bl CreateObject
- adds r1, r0, #0
- cmp r1, #0
- beq _0809DF52
- adds r0, r5, #0
- bl CopyPosition
-_0809DF52:
- adds r0, r5, #0
- bl DeleteEntityAny
- movs r0, #0
- str r0, [r4, #0x54]
- b _0809DF98
- .align 2, 0
-_0809DF60: .4byte 0x00000123
-_0809DF64:
- ldrb r0, [r4, #0xe]
- cmp r0, #0
- bne _0809DF94
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r1, [r0]
- adds r1, #2
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- ldr r0, _0809DF8C @ =0x00000123
- bl SoundReq
- ldr r0, _0809DF90 @ =0x000001F3
- bl SoundReq
- b _0809DF98
- .align 2, 0
-_0809DF8C: .4byte 0x00000123
-_0809DF90: .4byte 0x000001F3
-_0809DF94:
- subs r0, #1
-_0809DF96:
- strb r0, [r4, #0xe]
-_0809DF98:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, r5, pc}
-
- thumb_func_start sub_0809DFA0
-sub_0809DFA0: @ 0x0809DFA0
- push {r4, lr}
- adds r4, r0, #0
- ldr r0, [r4, #0x54]
- cmp r0, #0
- beq _0809DFD6
- movs r2, #0x2e
- ldrsh r1, [r0, r2]
- movs r2, #0x2e
- ldrsh r0, [r4, r2]
- subs r1, r1, r0
- ldrb r0, [r4, #0x15]
- lsls r0, r0, #0xb
- eors r1, r0
- movs r0, #0x80
- lsls r0, r0, #8
- ands r1, r0
- cmp r1, #0
- beq _0809DFD6
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- movs r0, #1
- strb r0, [r4, #0xf]
- movs r0, #0x81
- lsls r0, r0, #1
- bl SoundReq
-_0809DFD6:
- adds r0, r4, #0
- bl sub_0809DFE0
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_0809DFE0
-sub_0809DFE0: @ 0x0809DFE0
- push {r4, lr}
- adds r4, r0, #0
- bl CheckOnScreen
- cmp r0, #0
- bne _0809E028
- ldr r1, [r4, #0x54]
- cmp r1, #0
- beq _0809DFF4
- str r0, [r1, #0x50]
-_0809DFF4:
- ldrb r1, [r4, #0xe]
- movs r0, #0x80
- ands r0, r1
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0
- beq _0809E008
- bl DeleteThisEntity
- b _0809E034
-_0809E008:
- strb r0, [r4, #0xc]
- bl Random
- ldr r2, _0809E024 @ =gUnk_08124146
- movs r1, #1
- ands r1, r0
- ldrb r0, [r4, #0xb]
- lsls r0, r0, #1
- adds r1, r1, r0
- adds r1, r1, r2
- ldrb r0, [r1]
- strb r0, [r4, #0xb]
- b _0809E034
- .align 2, 0
-_0809E024: .4byte gUnk_08124146
-_0809E028:
- adds r0, r4, #0
- bl sub_0809E1F0
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
-_0809E034:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_0809E038
-sub_0809E038: @ 0x0809E038
- push {lr}
- ldr r2, _0809E04C @ =gUnk_08124150
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0809E04C: .4byte gUnk_08124150
-
- thumb_func_start sub_0809E050
-sub_0809E050: @ 0x0809E050
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- adds r1, r4, #0
- adds r1, #0x38
- movs r0, #1
- strb r0, [r1]
- ldrb r1, [r4, #0x19]
- movs r0, #0x3f
- ands r0, r1
- movs r1, #0x40
- orrs r0, r1
- strb r0, [r4, #0x19]
- ldr r0, _0809E084 @ =0x0000FFF0
- strh r0, [r4, #0x36]
- adds r0, r4, #0
- bl sub_0807DD64
- adds r0, r4, #0
- movs r1, #1
- bl InitAnimationForceUpdate
- pop {r4, pc}
- .align 2, 0
-_0809E084: .4byte 0x0000FFF0
-
- thumb_func_start sub_0809E088
-sub_0809E088: @ 0x0809E088
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0
- bl ExecuteScriptForEntity
- adds r0, r4, #0
- bl HandleEntity0x82Actions
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- pop {r4, pc}
-
- thumb_func_start sub_0809E0A0
-sub_0809E0A0: @ 0x0809E0A0
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r0, #0x97
- movs r1, #5
- movs r2, #0
- bl CreateObject
- adds r4, r0, #0
- cmp r4, #0
- beq _0809E0C8
- str r5, [r4, #0x50]
- str r4, [r5, #0x54]
- movs r0, #0
- strb r0, [r5, #0xf]
- ldr r0, _0809E0CC @ =gPlayerEntity
- adds r1, r4, #0
- bl CopyPosition
- ldr r0, _0809E0D0 @ =0x0000FFF8
- strh r0, [r4, #0x36]
-_0809E0C8:
- pop {r4, r5, pc}
- .align 2, 0
-_0809E0CC: .4byte gPlayerEntity
-_0809E0D0: .4byte 0x0000FFF8
-
- thumb_func_start sub_0809E0D4
-sub_0809E0D4: @ 0x0809E0D4
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r5, r0, #0
- adds r6, r1, #0
- ldrb r2, [r6, #0x18]
- cmp r2, #0
- bne _0809E130
- ldr r1, [r5, #0x54]
- cmp r1, #0
- beq _0809E0FC
- ldrb r0, [r1, #0xc]
- cmp r0, #1
- bhi _0809E0FE
- ldr r0, _0809E0F8 @ =gActiveScriptInfo
- strb r2, [r0, #6]
- b _0809E1BC
- .align 2, 0
-_0809E0F8: .4byte gActiveScriptInfo
-_0809E0FC:
- ldr r1, _0809E124 @ =gPlayerEntity
-_0809E0FE:
- ldrb r0, [r6, #0x18]
- adds r0, #1
- movs r4, #0
- strb r0, [r6, #0x18]
- movs r0, #0x2e
- ldrsh r2, [r1, r0]
- movs r0, #0x32
- ldrsh r3, [r1, r0]
- adds r0, r5, #0
- adds r1, r6, #0
- bl sub_0807DEDC
- ldr r0, _0809E128 @ =0x00000123
- bl SoundReq
- ldr r0, _0809E12C @ =gActiveScriptInfo
- strb r4, [r0, #6]
- b _0809E1BC
- .align 2, 0
-_0809E124: .4byte gPlayerEntity
-_0809E128: .4byte 0x00000123
-_0809E12C: .4byte gActiveScriptInfo
-_0809E130:
- ldr r1, [r5, #0x54]
- cmp r1, #0
- beq _0809E142
- movs r0, #0x2e
- ldrsh r2, [r1, r0]
- mov r8, r2
- movs r2, #0x32
- ldrsh r7, [r1, r2]
- b _0809E14C
-_0809E142:
- movs r1, #0x1e
- ldrsh r0, [r6, r1]
- mov r8, r0
- movs r2, #0x22
- ldrsh r7, [r6, r2]
-_0809E14C:
- ldrb r0, [r6, #0x19]
- subs r0, #1
- strb r0, [r6, #0x19]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0809E170
- movs r0, #8
- strb r0, [r6, #0x19]
- movs r1, #0x2e
- ldrsh r0, [r5, r1]
- mov r2, r8
- subs r0, r2, r0
- movs r2, #0x32
- ldrsh r1, [r5, r2]
- subs r1, r7, r1
- bl sub_080045DA
- strb r0, [r5, #0x15]
-_0809E170:
- movs r0, #0x2e
- ldrsh r4, [r5, r0]
- mov r1, r8
- subs r4, r4, r1
- movs r2, #0x32
- ldrsh r0, [r5, r2]
- subs r6, r0, r7
- movs r0, #0x24
- ldrsh r1, [r5, r0]
- ldrb r2, [r5, #0x15]
- adds r0, r5, #0
- bl LinearMoveAngle
- movs r1, #0x2e
- ldrsh r0, [r5, r1]
- mov r2, r8
- subs r0, r0, r2
- muls r4, r0, r4
- movs r1, #0x32
- ldrsh r0, [r5, r1]
- subs r0, r0, r7
- muls r6, r0, r6
- cmp r4, #0
- bgt _0809E1B6
- cmp r6, #0
- bgt _0809E1B6
- strh r2, [r5, #0x2e]
- strh r7, [r5, #0x32]
- movs r0, #1
- strb r0, [r5, #0xf]
- movs r0, #0x81
- lsls r0, r0, #1
- bl SoundReq
- b _0809E1BC
-_0809E1B6:
- ldr r1, _0809E1C4 @ =gActiveScriptInfo
- movs r0, #0
- strb r0, [r1, #6]
-_0809E1BC:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0809E1C4: .4byte gActiveScriptInfo
-
- thumb_func_start sub_0809E1C8
-sub_0809E1C8: @ 0x0809E1C8
- push {lr}
- adds r3, r0, #0
- adds r1, #0x20
- ldrb r2, [r3, #0x15]
- subs r1, r1, r2
- movs r0, #0x1f
- ands r1, r0
- cmp r1, #0
- beq _0809E1E6
- cmp r1, #0xf
- bhi _0809E1E2
- adds r0, r2, #1
- b _0809E1E4
-_0809E1E2:
- subs r0, r2, #1
-_0809E1E4:
- strb r0, [r3, #0x15]
-_0809E1E6:
- ldrb r1, [r3, #0x15]
- movs r0, #0x1f
- ands r0, r1
- strb r0, [r3, #0x15]
- pop {pc}
-
- thumb_func_start sub_0809E1F0
-sub_0809E1F0: @ 0x0809E1F0
- push {lr}
- adds r1, r0, #0
- ldrh r0, [r1, #0x24]
- adds r0, #0x40
- strh r0, [r1, #0x24]
- lsls r0, r0, #0x10
- asrs r0, r0, #0x10
- movs r2, #0x80
- lsls r2, r2, #3
- cmp r0, r2
- ble _0809E208
- strh r2, [r1, #0x24]
-_0809E208:
- adds r0, r1, #0
- bl LinearMoveUpdate
- pop {pc}
-
- thumb_func_start sub_0809E210
-sub_0809E210: @ 0x0809E210
- push {r4, lr}
- adds r1, r0, #0
- ldr r4, _0809E230 @ =gPlayerEntity
- adds r0, r4, #0
- bl GetFacingDirection
- bl sub_0806F5B0
- movs r1, #0xfe
- ands r0, r1
- strb r0, [r4, #0x14]
- ldr r1, _0809E234 @ =gPlayerState
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r1, #8]
- pop {r4, pc}
- .align 2, 0
-_0809E230: .4byte gPlayerEntity
-_0809E234: .4byte gPlayerState
-
- thumb_func_start sub_0809E238
-sub_0809E238: @ 0x0809E238
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r7, r0, #0
- ldr r6, _0809E298 @ =gSineTable
- movs r0, #0x6e
- adds r0, r0, r7
- mov r8, r0
- ldrb r0, [r0]
- lsls r0, r0, #1
- adds r0, r0, r6
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r5, r7, #0
- adds r5, #0x6c
- movs r2, #0
- ldrsh r1, [r5, r2]
- bl FixedMul
- adds r4, r0, #0
- lsls r4, r4, #0x10
- asrs r4, r4, #0x10
- mov r1, r8
- ldrb r0, [r1]
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r6
- movs r2, #0
- ldrsh r0, [r0, r2]
- movs r2, #0
- ldrsh r1, [r5, r2]
- bl FixedMul
- lsls r0, r0, #0x10
- asrs r0, r0, #0x10
- adds r1, r7, #0
- adds r1, #0x68
- ldrh r1, [r1]
- adds r1, r1, r4
- strh r1, [r7, #0x2e]
- adds r1, r7, #0
- adds r1, #0x6a
- ldrh r1, [r1]
- subs r1, r1, r0
- strh r1, [r7, #0x32]
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0809E298: .4byte gSineTable
-
- thumb_func_start sub_0809E29C
-sub_0809E29C: @ 0x0809E29C
- push {lr}
- adds r2, r0, #0
- adds r0, #0x6e
- ldrb r0, [r0]
- adds r0, #0x40
- movs r1, #0x80
- ands r0, r1
- cmp r0, #0
- beq _0809E2B8
- ldrb r1, [r2, #0x18]
- movs r0, #0x41
- rsbs r0, r0, #0
- ands r0, r1
- b _0809E2BE
-_0809E2B8:
- ldrb r0, [r2, #0x18]
- movs r1, #0x40
- orrs r0, r1
-_0809E2BE:
- strb r0, [r2, #0x18]
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_0809E2C4
-sub_0809E2C4: @ 0x0809E2C4
- push {r4, r5, r6, r7, lr}
- lsls r1, r1, #2
- ldr r0, _0809E328 @ =gUnk_08124178
- adds r1, r1, r0
- ldr r3, _0809E32C @ =gPlayerEntity
- movs r0, #0x2e
- ldrsh r5, [r3, r0]
- ldr r4, _0809E330 @ =gRoomControls
- ldrh r0, [r4, #6]
- ldrh r2, [r1]
- adds r0, r0, r2
- subs r6, r5, r0
- movs r0, #0x32
- ldrsh r2, [r3, r0]
- ldrh r0, [r4, #8]
- ldrh r1, [r1, #2]
- adds r0, r0, r1
- subs r5, r2, r0
- ldr r4, _0809E334 @ =gUnk_08124158
- movs r2, #0
- adds r7, r3, #0
-_0809E2EE:
- movs r1, #0
- ldrsh r0, [r4, r1]
- subs r0, r6, r0
- ldrb r1, [r4, #4]
- adds r0, r0, r1
- lsls r1, r1, #1
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- cmp r1, r0
- ble _0809E33C
- movs r1, #2
- ldrsh r0, [r4, r1]
- subs r0, r5, r0
- ldrb r1, [r4, #5]
- adds r0, r0, r1
- lsls r1, r1, #1
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- cmp r1, r0
- ble _0809E33C
- ldrb r0, [r4, #6]
- ldrb r7, [r7, #0x14]
- cmp r0, r7
- bne _0809E338
- ldrb r0, [r3, #0xc]
- cmp r0, #6
- bne _0809E338
- movs r0, #1
- b _0809E346
- .align 2, 0
-_0809E328: .4byte gUnk_08124178
-_0809E32C: .4byte gPlayerEntity
-_0809E330: .4byte gRoomControls
-_0809E334: .4byte gUnk_08124158
-_0809E338:
- movs r0, #2
- b _0809E346
-_0809E33C:
- adds r2, #1
- adds r4, #8
- cmp r2, #3
- ble _0809E2EE
- movs r0, #0
-_0809E346:
- pop {r4, r5, r6, r7, pc}
diff --git a/assets/assets.json b/assets/assets.json
index 91b54ac7..84d3d877 100644
--- a/assets/assets.json
+++ b/assets/assets.json
@@ -45777,36 +45777,6 @@
"size": 36
},
{
- "path": "object97/gUnk_08124128.bin",
- "start": 1196328,
- "size": 5
- },
- {
- "path": "object97/gUnk_0812412D.bin",
- "start": 1196333,
- "size": 5
- },
- {
- "path": "object97/gUnk_08124132.bin",
- "start": 1196338,
- "size": 20
- },
- {
- "path": "object97/gUnk_08124146.bin",
- "start": 1196358,
- "size": 10
- },
- {
- "path": "object97/gUnk_08124158.bin",
- "start": 1196376,
- "size": 32
- },
- {
- "path": "object97/gUnk_08124178.bin",
- "start": 1196408,
- "size": 20
- },
- {
"path": "animations/gSpriteAnimations_Object98_0.bin",
"start": 1196436,
"size": 72,
diff --git a/data/const/object/object97.s b/data/const/object/object97.s
deleted file mode 100644
index f46b89ff..00000000
--- a/data/const/object/object97.s
+++ /dev/null
@@ -1,65 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnk_081240C0:: @ 081240C0
- .4byte sub_0809D9C0
- .4byte sub_0809DB40
- .4byte sub_0809DC68
- .4byte sub_0809DE38
- .4byte sub_0809E038
- .4byte sub_0809DBCC
-
-gUnk_081240D8:: @ 081240D8
- .4byte sub_0809D9D8
- .4byte sub_0809DA2C
- .4byte sub_0809DA64
- .4byte sub_0809DAB4
- .4byte sub_0809DB14
-
-gUnk_081240EC:: @ 081240EC
- .4byte sub_0809DB58
- .4byte sub_0809DB88
-
-gUnk_081240F4:: @ 081240F4
- .4byte sub_0809DBE4
- .4byte sub_0809DC14
- .4byte sub_0809DB88
-
-gUnk_08124100:: @ 08124100
- .4byte sub_0809DC80
- .4byte sub_0809DD0C
- .4byte sub_0809DD34
- .4byte sub_0809DD78
- .4byte sub_0809DDBC
- .4byte sub_0809DDE4
-
-gUnk_08124118:: @ 08124118
- .4byte sub_0809DE50
- .4byte sub_0809DF00
- .4byte sub_0809DFA0
- .4byte sub_0809DFE0
-
-gUnk_08124128:: @ 08124128
- .incbin "object97/gUnk_08124128.bin"
-
-gUnk_0812412D:: @ 0812412D
- .incbin "object97/gUnk_0812412D.bin"
-
-gUnk_08124132:: @ 08124132
- .incbin "object97/gUnk_08124132.bin"
-
-gUnk_08124146:: @ 08124146
- .incbin "object97/gUnk_08124146.bin"
-
-gUnk_08124150:: @ 08124150
- .4byte sub_0809E050
- .4byte sub_0809E088
-
-gUnk_08124158:: @ 08124158
- .incbin "object97/gUnk_08124158.bin"
-
-gUnk_08124178:: @ 08124178
- .incbin "object97/gUnk_08124178.bin"
diff --git a/include/functions.h b/include/functions.h
index 769b053f..b0dfbee0 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -171,4 +171,5 @@ extern void sub_08000148(u32, u32, u32);
extern void sub_0805457C(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);
#endif
diff --git a/include/object.h b/include/object.h
index da910632..d6fe25f1 100644
--- a/include/object.h
+++ b/include/object.h
@@ -181,7 +181,7 @@ typedef enum {
WIND_TRIBE_FLAG,
BIRD,
OBJECT_96,
- OBJECT_97,
+ KEY_STEALING_TAKKURI,
OBJECT_98,
OBJECT_99,
HUGE_ACORN,
@@ -377,7 +377,7 @@ void Lamp(Entity*);
void WindTribeFlag(Entity*);
void Bird(Entity*);
void Object96(Entity*);
-void Object97(Entity*);
+void KeyStealingTakkuri();
void Object98(Entity*);
void Object99(Entity*);
void MacroAcorn(Entity*);
diff --git a/linker.ld b/linker.ld
index 1e4f0db8..e2071a6c 100644
--- a/linker.ld
+++ b/linker.ld
@@ -798,7 +798,7 @@ SECTIONS {
src/object/bird.o(.text);
asm/object/bird.o(.text);
asm/object/object96.o(.text);
- asm/object/object97.o(.text);
+ src/object/keyStealingTakkuri.o(.text);
asm/object/object98.o(.text);
asm/object/object99.o(.text);
asm/object/macroAcorn.o(.text);
@@ -1549,7 +1549,7 @@ SECTIONS {
data/const/object/bird.o(.rodata);
data/animations/object/bird.o(.rodata);
data/const/object/object96.o(.rodata);
- data/const/object/object97.o(.rodata);
+ src/object/keyStealingTakkuri.o(.rodata);
data/const/object/object98.o(.rodata);
data/animations/object/object98.o(.rodata);
data/const/object/macroAcorn.o(.rodata);
diff --git a/src/coord.c b/src/coord.c
index 9bd4055f..31aebcc1 100644
--- a/src/coord.c
+++ b/src/coord.c
@@ -52,7 +52,6 @@ u32 sub_0806F58C(Entity*, Entity*);
u32 sub_0806FCA0(Entity*, Entity*);
void UnloadHitbox(Entity*);
extern u32 sub_08007DD6(u32, const u16*);
-extern u32 sub_080041DC(Entity*, u32, u32);
u32 PointInsideRadius(s32 x, s32 y, s32 radius);
extern void sub_0806FEE8(struct_gUnk_020000C0_1*, u32, u32, u32);
void sub_0806FEFC(struct_gUnk_020000C0_1*, Entity*);
diff --git a/src/npcUtils.c b/src/npcUtils.c
index 910926bd..a430d135 100644
--- a/src/npcUtils.c
+++ b/src/npcUtils.c
@@ -20,7 +20,6 @@ typedef struct {
} NPCData;
extern NPCData* gUnk_08001A7C[];
-u32 sub_080041DC(Entity*, u32, u32);
u32 sub_0806EF88(Entity*);
static void sub_0806EF14(Entity*);
diff --git a/src/object.c b/src/object.c
index 9d609afd..420783e2 100644
--- a/src/object.c
+++ b/src/object.c
@@ -153,7 +153,7 @@ void (*const gObjectFunctions[])(Entity*) = {
[WIND_TRIBE_FLAG] = WindTribeFlag,
[BIRD] = Bird,
[OBJECT_96] = Object96,
- [OBJECT_97] = Object97,
+ [KEY_STEALING_TAKKURI] = KeyStealingTakkuri,
[OBJECT_98] = Object98,
[OBJECT_99] = Object99,
[HUGE_ACORN] = MacroAcorn,
diff --git a/src/object/keyStealingTakkuri.c b/src/object/keyStealingTakkuri.c
new file mode 100644
index 00000000..76fd3480
--- /dev/null
+++ b/src/object/keyStealingTakkuri.c
@@ -0,0 +1,584 @@
+/**
+ * @file keyStealingTakkuri.c
+ * @ingroup Objects
+ *
+ * @brief Key Stealing Takkuri object
+ */
+
+#define NENT_DEPRECATED
+#include "global.h"
+#include "object.h"
+#include "functions.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u16 unk_68;
+ /*0x6a*/ u16 unk_6a;
+ /*0x6c*/ u16 unk_6c;
+ /*0x6e*/ u8 unk_6e;
+} KeyStealingTakkuriEntity;
+
+extern void (*const KeyStealingTakkuri_Types[])(KeyStealingTakkuriEntity*);
+extern void (*const KeyStealingTakkuri_Type0_Actions[])(KeyStealingTakkuriEntity*);
+extern void (*const KeyStealingTakkuri_Type1_Actions[])(KeyStealingTakkuriEntity*);
+extern void (*const KeyStealingTakkuri_Type5_Actions[])(KeyStealingTakkuriEntity*);
+extern void (*const KeyStealingTakkuri_Type2_Actions[])(KeyStealingTakkuriEntity*);
+extern void (*const KeyStealingTakkuri_Type3_Actions[])(KeyStealingTakkuriEntity*);
+extern const u8 gUnk_08124128[];
+extern const u8 gUnk_0812412D[];
+extern const u16 gUnk_08124132[];
+extern const u8 gUnk_08124146[];
+extern void (*const KeyStealingTakkuri_Type4_Actions[])(KeyStealingTakkuriEntity*);
+typedef struct {
+ s16 unk_0;
+ s16 unk_2;
+ u8 unk_4;
+ u8 unk_5;
+ u8 unk_6;
+} TmpStruct;
+extern const TmpStruct gUnk_08124158[];
+extern const u16 gUnk_08124178[];
+
+void sub_0809E1C8(KeyStealingTakkuriEntity*, u32);
+void sub_0809E1F0(KeyStealingTakkuriEntity*);
+void sub_0809E210(KeyStealingTakkuriEntity*);
+void KeyStealingTakkuri_Type1_Init(KeyStealingTakkuriEntity*);
+void KeyStealingTakkuri_Type1_Action1(KeyStealingTakkuriEntity*);
+void sub_0809E238(KeyStealingTakkuriEntity*);
+void sub_0809E29C(KeyStealingTakkuriEntity*);
+u32 sub_0809E2C4(KeyStealingTakkuriEntity*, u32);
+void KeyStealingTakkuri_Type3_Action3(KeyStealingTakkuriEntity*);
+
+void KeyStealingTakkuri(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Types[super->type](this);
+}
+
+void KeyStealingTakkuri_Type0(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Type0_Actions[super->action](this);
+}
+
+void KeyStealingTakkuri_Type0_Init(KeyStealingTakkuriEntity* this) {
+ Entity* entity;
+ super->action++;
+ super->collisionLayer = 1;
+ super->actionDelay = 0x1e;
+ super->field_0xf = 0;
+ super->spriteRendering.b3 = 1;
+ super->speed = 0;
+ super->direction = 0x18;
+ InitAnimationForceUpdate(super, 1);
+ entity = FindNextDuplicateID(super, 6);
+ if (entity != NULL) {
+ entity->parent = super;
+ super->child = entity;
+ } else {
+ SetGlobalFlag(HAKA_KEY_LOST);
+ DeleteThisEntity();
+ }
+}
+
+void KeyStealingTakkuri_Type0_Action1(KeyStealingTakkuriEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->action++;
+ super->y.WORD += 0x100000;
+ super->z.WORD -= 0x100000;
+ InitAnimationForceUpdate(super, 3);
+ }
+}
+
+void KeyStealingTakkuri_Type0_Action2(KeyStealingTakkuriEntity* this) {
+ Entity* child = super->child;
+ sub_0809E1C8(this, GetFacingDirection(super, child));
+ sub_0809E1F0(this);
+ if ((s32)sub_080041DC(super, child->x.HALF.HI, child->y.HALF.HI) * 0x10 < super->speed) {
+ super->action++;
+ super->actionDelay = 0x10;
+ super->field_0xf = 1;
+ InitAnimationForceUpdate(super, 2);
+ }
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type0_Action3(KeyStealingTakkuriEntity* this) {
+ sub_0809E1C8(this, sub_080045B4(super, gRoomControls.origin_x + 0x78, gRoomControls.origin_y + 0xa8));
+ if (super->actionDelay != 0) {
+ super->actionDelay--;
+ super->speed -= 0x80;
+ }
+ sub_0809E1F0(this);
+ if ((s32)sub_080041DC(super, gRoomControls.origin_x + 0x78, gRoomControls.origin_y + 0xa8) * 0x10 < super->speed) {
+ super->action++;
+ }
+ sub_0809E210(this);
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type0_Action4(KeyStealingTakkuriEntity* this) {
+ sub_0809E1F0(this);
+ if (!CheckOnScreen(super)) {
+ SetGlobalFlag(HAKA_KEY_LOST);
+ (super->child)->parent = NULL;
+ DeleteThisEntity();
+ }
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type1(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Type1_Actions[super->action](this);
+}
+
+void KeyStealingTakkuri_Type1_Init(KeyStealingTakkuriEntity* this) {
+ super->action++;
+ super->collisionLayer = 2;
+ super->spriteRendering.b3 = 2;
+ UpdateSpriteForCollisionLayer(super);
+ InitAnimationForceUpdate(super, 0x3c);
+}
+
+void KeyStealingTakkuri_Type1_Action1(KeyStealingTakkuriEntity* this) {
+ Entity* parent = super->parent;
+ if (parent != NULL) {
+ if (parent->next == NULL) {
+ DeleteThisEntity();
+ }
+ if (parent->field_0xf != 0) {
+ PositionRelative(parent, super, 0, 0x80000);
+ }
+ super->spriteSettings.draw = parent->spriteSettings.draw;
+ } else {
+ DeleteThisEntity();
+ }
+}
+
+void KeyStealingTakkuri_Type5(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Type5_Actions[super->action](this);
+}
+
+void KeyStealingTakkuri_Type5_Init(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Type1_Init(this);
+ super->spriteSettings.draw = 1;
+ super->direction = 0x18;
+ super->speed = 0x100;
+ super->zVelocity = 0x20000;
+ super->actionDelay = 1;
+ SoundReq(SFX_RUPEE_BOUNCE);
+}
+
+void KeyStealingTakkuri_Type5_Action1(KeyStealingTakkuriEntity* this) {
+ LinearMoveUpdate(super);
+ if (sub_080044EC(super, 0x2000) < 2) {
+ if (super->actionDelay != 0) {
+ super->actionDelay--;
+ super->zVelocity = 0x10000;
+ } else {
+ super->action++;
+ super->collisionLayer = gPlayerEntity.collisionLayer;
+ UpdateSpriteForCollisionLayer(super);
+ }
+ SoundReq(SFX_RUPEE_BOUNCE);
+ }
+ KeyStealingTakkuri_Type1_Action1(this);
+}
+
+void KeyStealingTakkuri_Type2(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Type2_Actions[super->action](this);
+}
+
+void KeyStealingTakkuri_Type2_Init(KeyStealingTakkuriEntity* this) {
+ Entity* entity;
+
+ super->action++;
+ super->collisionLayer = 2;
+ super->actionDelay = 0x1e;
+ super->field_0xf = 1;
+ super->spriteRendering.b3 = 1;
+ super->speed = 0;
+ super->direction = 0x18;
+ super->y.WORD += 0x100000;
+ super->z.WORD -= 0x100000;
+ this->unk_68 = super->x.HALF.HI;
+ this->unk_6a = super->y.HALF.HI;
+ this->unk_6c = 0;
+ this->unk_6e = 0;
+ UpdateSpriteForCollisionLayer(super);
+ InitAnimationForceUpdate(super, 3);
+ entity = FindNextDuplicateID(super, 6);
+ if (entity != NULL) {
+ entity->parent = super;
+ super->child = entity;
+ } else {
+ SetGlobalFlag(HAKA_KEY_LOST);
+ DeleteThisEntity();
+ }
+}
+
+void KeyStealingTakkuri_Type2_Action1(KeyStealingTakkuriEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->action++;
+ SoundReq(SFX_146);
+ }
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type2_Action2(KeyStealingTakkuriEntity* this) {
+ this->unk_6e += 8;
+ if (0x20 < ++this->unk_6c) {
+ super->action++;
+ this->unk_6c = 0x20;
+ SoundReq(SFX_146);
+ }
+ sub_0809E238(this);
+ sub_0809E29C(this);
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type2_Action3(KeyStealingTakkuriEntity* this) {
+ this->unk_6e += 8;
+ if (--this->unk_6c == 0) {
+ super->action++;
+ super->actionDelay = 0x1e;
+ super->spriteSettings.flipX = 0;
+ } else {
+ sub_0809E238(this);
+ sub_0809E29C(this);
+ }
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type2_Action4(KeyStealingTakkuriEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->action++;
+ SoundReq(SFX_15B);
+ }
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type2_Action5(KeyStealingTakkuriEntity* this) {
+ sub_0809E1C8(this, sub_080045B4(super, gRoomControls.origin_x + 0x40, gRoomControls.origin_y + 0x178));
+ sub_0809E1F0(this);
+ sub_0809E210(this);
+ if (!CheckOnScreen(super)) {
+ SetGlobalFlag(HAKA_KEY_LOST);
+ (super->child)->parent = NULL;
+ DeleteThisEntity();
+ }
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type3(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Type3_Actions[super->action](this);
+}
+
+void KeyStealingTakkuri_Type3_Init(KeyStealingTakkuriEntity* this) {
+ Entity* obj;
+ s32 tmp;
+ const u16* ptr;
+
+ super->action++;
+ super->collisionLayer = 2;
+ super->actionDelay = 0xa;
+ super->field_0xf = 0;
+ super->spriteRendering.b3 = 1;
+ super->speed = 0;
+ super->direction = gUnk_0812412D[super->type2];
+ ptr = &gUnk_08124132[super->type2 * 2];
+ super->x.HALF.HI = gRoomControls.origin_x + ptr[0];
+ super->y.HALF.HI = gRoomControls.origin_y + ptr[1] + 0x40;
+ super->z.HALF.HI = 0xffc0;
+ UpdateSpriteForCollisionLayer(super);
+ InitAnimationForceUpdate(super, gUnk_08124128[super->type2]);
+ obj = CreateObject(KEY_STEALING_TAKKURI, 1, 0);
+ if (obj != NULL) {
+ obj->parent = super;
+ super->child = obj;
+ PositionRelative(super, obj, 0, 0x80000);
+ tmp = 0x10;
+ if (super->direction == 0x18) {
+ tmp = -tmp;
+ }
+ obj->x.HALF.HI += tmp;
+ }
+}
+
+void KeyStealingTakkuri_Type3_Action1(KeyStealingTakkuriEntity* this) {
+ Entity* child;
+
+ switch (sub_0809E2C4(this, super->type2)) {
+ case 1:
+ super->action += 2;
+ super->actionDelay = 0xff;
+ InitAnimationForceUpdate(super, super->animIndex + 2);
+ SoundReq(SFX_123);
+ child = super->child;
+ if (child != NULL) {
+ Entity* obj = CreateObject(OBJECT_96, super->type2 + 2, 0);
+ if (obj != NULL) {
+ CopyPosition(child, obj);
+ }
+ DeleteEntityAny(child);
+ super->child = NULL;
+ }
+ break;
+ case 2:
+ if (super->actionDelay == 0) {
+ super->action++;
+ InitAnimationForceUpdate(super, super->animIndex + 2);
+ SoundReq(SFX_123);
+ SoundReq(SFX_1F3);
+ } else {
+ super->actionDelay--;
+ }
+ break;
+ default:
+ super->actionDelay = 0xa;
+ break;
+ }
+ UpdateAnimationSingleFrame(super);
+}
+
+void KeyStealingTakkuri_Type3_Action2(KeyStealingTakkuriEntity* this) {
+ Entity* child;
+
+ child = super->child;
+ if ((child != NULL) && ((((child->x.HALF.HI - super->x.HALF.HI) ^ super->direction << 0xb) & 0x8000) != 0)) {
+ super->action++;
+ super->field_0xf = 1;
+ SoundReq(SFX_102);
+ }
+ KeyStealingTakkuri_Type3_Action3(this);
+}
+
+void KeyStealingTakkuri_Type3_Action3(KeyStealingTakkuriEntity* this) {
+ u32 tmp;
+ Entity* child;
+
+ if (CheckOnScreen(super) == 0) {
+ child = super->child;
+ if (child != NULL) {
+ child->parent = NULL;
+ }
+ tmp = super->actionDelay & 0x80;
+ if (tmp != 0) {
+ DeleteThisEntity();
+ } else {
+ super->action = tmp;
+ super->type2 = gUnk_08124146[(Random() & 1) + (u32)super->type2 * 2];
+ }
+ } else {
+ sub_0809E1F0(this);
+ UpdateAnimationSingleFrame(super);
+ }
+}
+
+void KeyStealingTakkuri_Type4(KeyStealingTakkuriEntity* this) {
+ KeyStealingTakkuri_Type4_Actions[super->action](this);
+}
+
+void KeyStealingTakkuri_Type4_Init(KeyStealingTakkuriEntity* this) {
+ super->action++;
+ super->collisionLayer = 1;
+ super->spriteRendering.b3 = 1;
+ super->z.HALF.HI = 0xfff0;
+ sub_0807DD64(super);
+ InitAnimationForceUpdate(super, 1);
+}
+
+void KeyStealingTakkuri_Type4_Action1(KeyStealingTakkuriEntity* this) {
+ ExecuteScriptForEntity(super, NULL);
+ HandleEntity0x82Actions(super);
+ UpdateAnimationSingleFrame(super);
+}
+
+void sub_0809E0A0(KeyStealingTakkuriEntity* this) {
+ Entity* obj = CreateObject(KEY_STEALING_TAKKURI, 5, 0);
+ if (obj != NULL) {
+ obj->parent = super;
+ super->child = obj;
+ super->field_0xf = 0;
+ CopyPosition(&gPlayerEntity, obj);
+ obj->z.HALF.HI = 0xfff8;
+ }
+}
+
+void sub_0809E0D4(KeyStealingTakkuriEntity* this, ScriptExecutionContext* context) {
+ Entity* entity;
+ s32 varX;
+ s32 varY;
+ s32 varX2;
+ s32 varY2;
+ s32 varX3;
+ s32 varY3;
+
+ if (context->unk_18 == 0) {
+ entity = super->child;
+ if (entity != NULL) {
+ if (entity->action < 2) {
+ gActiveScriptInfo.commandSize = context->unk_18;
+ return;
+ }
+ } else {
+ entity = &gPlayerEntity;
+ }
+ context->unk_18++;
+ sub_0807DEDC(super, context, entity->x.HALF.HI, entity->y.HALF.HI);
+ SoundReq(SFX_123);
+ gActiveScriptInfo.commandSize = 0;
+ } else {
+ entity = super->child;
+ if (entity != NULL) {
+ varX = entity->x.HALF.HI;
+ varY = entity->y.HALF.HI;
+ } else {
+ varX = context->x.HALF.HI;
+ varY = context->y.HALF.HI;
+ }
+ varX2 = varX;
+ varY2 = varY;
+ if (--context->unk_19 == 0) {
+ context->unk_19 = 8;
+ super->direction = sub_080045DA(varX2 - super->x.HALF.HI, varY2 - super->y.HALF.HI);
+ }
+ varX3 = super->x.HALF.HI - varX2;
+ varY3 = super->y.HALF.HI - varY2;
+ LinearMoveAngle(super, (s32)super->speed, (u32)super->direction);
+ varX3 = (super->x.HALF.HI - varX2) * (varX3);
+ varY3 = (super->y.HALF.HI - varY2) * (varY3);
+ if ((varX3 < 1) && (varY3 < 1)) {
+ super->x.HALF.HI = varX;
+ super->y.HALF.HI = varY;
+ super->field_0xf = 1;
+ SoundReq(SFX_102);
+ } else {
+ gActiveScriptInfo.commandSize = 0;
+ }
+ }
+}
+
+void sub_0809E1C8(KeyStealingTakkuriEntity* this, u32 param_2) {
+ u32 tmp;
+ tmp = (param_2 + 0x20);
+ tmp -= super->direction;
+ tmp &= 0x1f;
+ if (tmp != 0) {
+ if (tmp < 0x10) {
+ super->direction++;
+ } else {
+ super->direction--;
+ }
+ }
+ super->direction &= 0x1f;
+}
+
+void sub_0809E1F0(KeyStealingTakkuriEntity* this) {
+ super->speed += 0x40;
+ if (super->speed > 0x400) {
+ super->speed = 0x400;
+ }
+ LinearMoveUpdate(super);
+}
+
+void sub_0809E210(KeyStealingTakkuriEntity* this) {
+ gPlayerEntity.animationState = sub_0806F5B0(GetFacingDirection(&gPlayerEntity, super)) & 0xfe;
+ gPlayerState.animation = 0x100;
+}
+
+void sub_0809E238(KeyStealingTakkuriEntity* this) {
+ s32 x = FixedMul(gSineTable[this->unk_6e], this->unk_6c);
+ s32 y = FixedMul(gSineTable[this->unk_6e + 0x40], this->unk_6c);
+ super->x.HALF.HI = this->unk_68 + x;
+ super->y.HALF.HI = this->unk_6a - y;
+}
+
+void sub_0809E29C(KeyStealingTakkuriEntity* this) {
+ if ((this->unk_6e + 0x40) & 0x80) {
+ super->spriteSettings.flipX = 0;
+ } else {
+ super->spriteSettings.flipX = 1;
+ }
+}
+
+u32 sub_0809E2C4(KeyStealingTakkuriEntity* this, u32 param_2) {
+ s32 uVar1;
+ s32 uVar2;
+ const TmpStruct* tmp;
+ s32 counter;
+ const u16* ptr;
+ s32 roomX;
+ s32 roomY;
+
+ ptr = &gUnk_08124178[param_2 * 2];
+ roomX = gPlayerEntity.x.HALF.HI - (gRoomControls.origin_x + ptr[0]);
+ roomY = gPlayerEntity.y.HALF.HI - (gRoomControls.origin_y + ptr[1]);
+ tmp = gUnk_08124158;
+ counter = 0;
+ while (counter < 4) {
+ uVar1 = roomX - tmp->unk_0 + tmp->unk_4;
+ uVar2 = tmp->unk_4 * 2;
+ if (uVar2 > (u16)uVar1) {
+ uVar1 = roomY - tmp->unk_2 + tmp->unk_5;
+ uVar2 = tmp->unk_5 * 2;
+ if (uVar2 > (u16)uVar1) {
+ if (tmp->unk_6 == gPlayerEntity.animationState && gPlayerEntity.action == 6) {
+ return 1;
+ }
+ return 2;
+ }
+ }
+ counter++;
+ tmp++;
+ }
+ return 0;
+}
+
+void (*const KeyStealingTakkuri_Types[])(KeyStealingTakkuriEntity*) = {
+ KeyStealingTakkuri_Type0, KeyStealingTakkuri_Type1, KeyStealingTakkuri_Type2,
+ KeyStealingTakkuri_Type3, KeyStealingTakkuri_Type4, KeyStealingTakkuri_Type5,
+};
+void (*const KeyStealingTakkuri_Type0_Actions[])(KeyStealingTakkuriEntity*) = {
+ KeyStealingTakkuri_Type0_Init, KeyStealingTakkuri_Type0_Action1, KeyStealingTakkuri_Type0_Action2,
+ KeyStealingTakkuri_Type0_Action3, KeyStealingTakkuri_Type0_Action4,
+};
+void (*const KeyStealingTakkuri_Type1_Actions[])(KeyStealingTakkuriEntity*) = {
+ KeyStealingTakkuri_Type1_Init,
+ KeyStealingTakkuri_Type1_Action1,
+};
+void (*const KeyStealingTakkuri_Type5_Actions[])(KeyStealingTakkuriEntity*) = {
+ KeyStealingTakkuri_Type5_Init,
+ KeyStealingTakkuri_Type5_Action1,
+ KeyStealingTakkuri_Type1_Action1,
+};
+void (*const KeyStealingTakkuri_Type2_Actions[])(KeyStealingTakkuriEntity*) = {
+ KeyStealingTakkuri_Type2_Init, KeyStealingTakkuri_Type2_Action1, KeyStealingTakkuri_Type2_Action2,
+ KeyStealingTakkuri_Type2_Action3, KeyStealingTakkuri_Type2_Action4, KeyStealingTakkuri_Type2_Action5,
+};
+void (*const KeyStealingTakkuri_Type3_Actions[])(KeyStealingTakkuriEntity*) = {
+ KeyStealingTakkuri_Type3_Init,
+ KeyStealingTakkuri_Type3_Action1,
+ KeyStealingTakkuri_Type3_Action2,
+ KeyStealingTakkuri_Type3_Action3,
+};
+const u8 gUnk_08124128[] = {
+ 0, 0, 1, 1, 1,
+};
+const u8 gUnk_0812412D[] = {
+ 8, 8, 24, 24, 24,
+};
+const u16 gUnk_08124132[] = {
+ 56, 312, 56, 584, 216, 488, 424, 472, 392, 328,
+};
+const u8 gUnk_08124146[] = {
+ 3, 4, 3, 4, 0, 4, 0, 1, 1, 2,
+};
+void (*const KeyStealingTakkuri_Type4_Actions[])(KeyStealingTakkuriEntity*) = {
+ KeyStealingTakkuri_Type4_Init,
+ KeyStealingTakkuri_Type4_Action1,
+};
+const TmpStruct gUnk_08124158[] = {
+ { 0, 32, 32, 8, 0 },
+ { -40, 0, 8, 32, 2 },
+ { 0, -24, 32, 8, 4 },
+ { 40, 0, 8, 32, 6 },
+};
+const u16 gUnk_08124178[] = {
+ 64, 336, 64, 608, 208, 512, 416, 496, 384, 352,
+};
diff --git a/src/projectile/gleerokProjectile.c b/src/projectile/gleerokProjectile.c
index 128e32f7..43cf8ae4 100644
--- a/src/projectile/gleerokProjectile.c
+++ b/src/projectile/gleerokProjectile.c
@@ -4,8 +4,6 @@
#include "player.h"
#include "functions.h"
-extern u32 sub_080041DC(Entity*, u32, u32);
-
extern void (*const GleerokProjectile_Functions[])(Entity*);
extern void (*const GleerokProjectile_Actions[])(Entity*);
extern const s8 gUnk_08129978[];
diff --git a/src/projectile/v1FireProjectile.c b/src/projectile/v1FireProjectile.c
index 2823d563..a441e225 100644
--- a/src/projectile/v1FireProjectile.c
+++ b/src/projectile/v1FireProjectile.c
@@ -3,8 +3,6 @@
#include "player.h"
#include "functions.h"
-extern u32 sub_080041DC(Entity*, u32, u32);
-
extern void (*const V1FireProjectile_Functions[])(Entity*);
extern void (*const V1FireProjectile_Actions[])(Entity*);
extern const s8 gUnk_0812A4EC[];