summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-08-24 13:26:13 -0700
committerGitHub <noreply@github.com>2020-08-24 13:26:13 -0700
commitae5ecd017ab2da1291cbbd4380a6e78fe4fe6d41 (patch)
tree2b1f36aa1ef2fd7111057ad2e676ab9459d5bc76
parent30137c802fd95afe8807a2d9ef120ecb3d78d03a (diff)
parent73497fd8c26f5c5f19dc0f7769d0cd8be6f3027c (diff)
Merge pull request #73 from HookedBehemoth:slime-fireguy
decompile slime and fireball guy
-rw-r--r--asm/fireballGuy.s283
-rw-r--r--asm/miniSlime.s221
-rw-r--r--asm/non_matching/slime/sub_080450A8.inc109
-rw-r--r--asm/percy.s146
-rw-r--r--asm/slime.s81
-rw-r--r--asm/sub_080451CC.s36
-rw-r--r--include/entity.h5
-rw-r--r--include/room.h6
-rw-r--r--linker.ld6
-rw-r--r--src/createObjectWithParent.c3
-rw-r--r--src/enemy/fireballGuy.c121
-rw-r--r--src/enemy/miniSlime.c95
-rw-r--r--src/enemy/slime.c169
-rw-r--r--src/npc/librari.c28
-rw-r--r--src/npc/percy.c103
-rw-r--r--src/object/backgroundCloud.c2
-rw-r--r--src/object/object1A.c2
-rw-r--r--src/object/object86.c1
-rw-r--r--src/object/object9E.c1
-rw-r--r--src/object/objectAF.c2
-rw-r--r--src/object/smoke.c2
-rw-r--r--src/room.c2
22 files changed, 437 insertions, 987 deletions
diff --git a/asm/fireballGuy.s b/asm/fireballGuy.s
deleted file mode 100644
index af3e9ad0..00000000
--- a/asm/fireballGuy.s
+++ /dev/null
@@ -1,283 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start FireballGuy
-FireballGuy: @ 0x08045394
- push {lr}
- ldr r1, _080453A0 @ =gUnk_080D17E8
- bl EnemyFunctionHandler
- pop {pc}
- .align 2, 0
-_080453A0: .4byte gUnk_080D17E8
-
- thumb_func_start sub_080453A4
-sub_080453A4: @ 0x080453A4
- push {lr}
- ldr r2, _080453B8 @ =gUnk_080D1800
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_080453B8: .4byte gUnk_080D1800
-
- thumb_func_start sub_080453BC
-sub_080453BC: @ 0x080453BC
- push {lr}
- adds r2, r0, #0
- adds r0, #0x45
- ldrb r1, [r0]
- cmp r1, #0
- beq _080453D6
- adds r0, #0x3f
- ldrb r0, [r0]
- cmp r0, r1
- beq _080453D6
- movs r0, #2
- strb r0, [r2, #0xc]
- b _080453DE
-_080453D6:
- ldr r1, _080453E0 @ =gUnk_080D17E8
- adds r0, r2, #0
- bl sub_0804AA30
-_080453DE:
- pop {pc}
- .align 2, 0
-_080453E0: .4byte gUnk_080D17E8
-
- thumb_func_start nullsub_172
-nullsub_172: @ 0x080453E4
- bx lr
- .align 2, 0
-
- thumb_func_start sub_080453E8
-sub_080453E8: @ 0x080453E8
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0
- movs r2, #1
- movs r0, #1
- strb r0, [r4, #0xc]
- strb r1, [r4, #0xe]
- ldrb r1, [r4, #0x18]
- subs r0, #5
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, #0x18]
- movs r0, #0x80
- strh r0, [r4, #0x24]
- adds r0, r4, #0
- adds r0, #0x45
- ldrb r1, [r0]
- adds r0, #0x3f
- strb r1, [r0]
- adds r2, r4, #0
- adds r2, #0x3c
- ldrb r1, [r2]
- movs r0, #0x10
- orrs r0, r1
- strb r0, [r2]
- adds r0, r4, #0
- bl sub_0804A720
- adds r0, r4, #0
- movs r1, #0
- bl InitializeAnimation
- adds r0, r4, #0
- bl sub_08045524
- pop {r4, pc}
-
- thumb_func_start sub_08045430
-sub_08045430: @ 0x08045430
- push {r4, lr}
- adds r4, r0, #0
- bl sub_080AEFE0
- adds r0, r4, #0
- bl GetNextFrame
- movs r1, #0xc0
- lsls r1, r1, #5
- adds r0, r4, #0
- bl sub_08003FC4
- cmp r0, #0
- bne _08045452
- adds r0, r4, #0
- bl sub_08045524
-_08045452:
- pop {r4, pc}
-
- thumb_func_start sub_08045454
-sub_08045454: @ 0x08045454
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- sub sp, #0x10
- mov r8, r0
- ldr r1, _08045518 @ =gUnk_080D180C
- ldrb r0, [r0, #0xa]
- adds r0, r0, r1
- ldrb r7, [r0]
- movs r0, #0x48
- subs r0, r0, r7
- ldr r1, _0804551C @ =gEntCount
- ldrb r1, [r1]
- cmp r0, r1
- ble _0804550C
- cmp r7, #0
- beq _0804548E
- mov r4, sp
- adds r5, r7, #0
-_0804547C:
- mov r0, r8
- ldrb r1, [r0, #0xa]
- movs r0, #0x59
- bl CreateEnemy
- stm r4!, {r0}
- subs r5, #1
- cmp r5, #0
- bne _0804547C
-_0804548E:
- ldr r2, _08045520 @ =gUnk_080D1810
- mov sb, r2
- movs r5, #0
- cmp r5, r7
- bge _080454EE
-_08045498:
- lsls r0, r5, #2
- add r0, sp
- ldr r6, [r0]
- adds r4, r5, #1
- adds r0, r4, #0
- adds r1, r7, #0
- bl __modsi3
- lsls r0, r0, #2
- add r0, sp
- ldr r0, [r0]
- str r0, [r6, #0x54]
- adds r0, r5, r7
- subs r0, #1
- adds r1, r7, #0
- bl __modsi3
- lsls r0, r0, #2
- add r0, sp
- ldr r0, [r0]
- str r0, [r6, #0x50]
- movs r1, #0
- movs r0, #1
- strb r0, [r6, #0xb]
- strh r1, [r6, #0x36]
- adds r1, r6, #0
- adds r1, #0x3d
- movs r0, #0xf0
- strb r0, [r1]
- mov r0, sb
- movs r2, #0
- ldrsb r2, [r0, r2]
- movs r3, #1
- ldrsb r3, [r0, r3]
- mov r0, r8
- adds r1, r6, #0
- bl sub_08045178
- movs r2, #2
- add sb, r2
- adds r5, r4, #0
- cmp r5, r7
- blt _08045498
-_080454EE:
- mov r0, r8
- movs r1, #2
- movs r2, #0
- bl CreateFx
- adds r6, r0, #0
- cmp r6, #0
- beq _08045506
- mov r0, r8
- adds r1, r6, #0
- bl CopyPosition
-_08045506:
- mov r0, r8
- bl DeleteEntity
-_0804550C:
- add sp, #0x10
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08045518: .4byte gUnk_080D180C
-_0804551C: .4byte gEntCount
-_08045520: .4byte gUnk_080D1810
-
- thumb_func_start sub_08045524
-sub_08045524: @ 0x08045524
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r0, #0xe0
- lsls r0, r0, #9
- str r0, [r5, #0x20]
- adds r0, r5, #0
- movs r1, #1
- movs r2, #8
- bl sub_0804A024
- adds r4, r0, #0
- cmp r4, #0xff
- beq _08045556
- bl Random
- movs r1, #3
- ands r1, r0
- cmp r1, #0
- bne _08045556
- bl Random
- movs r1, #3
- ands r0, r1
- strb r0, [r5, #0xe]
- b _08045596
-_08045556:
- ldrb r0, [r5, #0xe]
- cmp r0, #0
- beq _08045562
- subs r0, #1
- strb r0, [r5, #0xe]
- b _080455A8
-_08045562:
- bl Random
- movs r1, #3
- ands r0, r1
- strb r0, [r5, #0xe]
- adds r0, r5, #0
- bl sub_08049FA0
- cmp r0, #0
- bne _0804559E
- bl Random
- movs r1, #3
- ands r1, r0
- cmp r1, #0
- beq _0804559E
- adds r0, r5, #0
- bl sub_08049EE4
- adds r4, r0, #0
- bl Random
- movs r1, #8
- ands r0, r1
- adds r0, #0xfc
- adds r4, r4, r0
-_08045596:
- movs r0, #0x18
- ands r4, r0
- strb r4, [r5, #0x15]
- b _080455A8
-_0804559E:
- bl Random
- movs r1, #0x18
- ands r0, r1
- strb r0, [r5, #0x15]
-_080455A8:
- pop {r4, r5, pc}
- .align 2, 0
diff --git a/asm/miniSlime.s b/asm/miniSlime.s
deleted file mode 100644
index 90b0cee2..00000000
--- a/asm/miniSlime.s
+++ /dev/null
@@ -1,221 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start MiniSlime
-MiniSlime: @ 0x08045200
- push {r4, lr}
- adds r4, r0, #0
- ldr r1, _0804521C @ =gUnk_080D17C0
- bl EnemyFunctionHandler
- movs r3, #8
- rsbs r3, r3, #0
- adds r0, r4, #0
- movs r1, #0
- movs r2, #1
- bl SetChildOffset
- pop {r4, pc}
- .align 2, 0
-_0804521C: .4byte gUnk_080D17C0
-
- thumb_func_start sub_08045220
-sub_08045220: @ 0x08045220
- push {lr}
- ldr r2, _08045234 @ =gUnk_080D17D8
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_08045234: .4byte gUnk_080D17D8
-
- thumb_func_start sub_08045238
-sub_08045238: @ 0x08045238
- push {r4, lr}
- adds r4, r0, #0
- adds r0, #0x43
- ldrb r0, [r0]
- cmp r0, #0
- beq _0804524C
- adds r0, r4, #0
- movs r1, #0x1c
- bl sub_0804A9FC
-_0804524C:
- ldr r1, _08045258 @ =gUnk_080D17C0
- adds r0, r4, #0
- bl sub_0804AA30
- pop {r4, pc}
- .align 2, 0
-_08045258: .4byte gUnk_080D17C0
-
- thumb_func_start sub_0804525C
-sub_0804525C: @ 0x0804525C
- push {r4, lr}
- adds r4, r0, #0
- ldr r3, [r4, #0x50]
- cmp r4, r3
- beq _08045298
- cmp r3, #0
- beq _08045298
- adds r2, r4, #0
- adds r2, #0x6c
- ldrb r1, [r2]
- movs r0, #0x7f
- ands r0, r1
- strb r0, [r2]
- ldr r1, [r4, #0x50]
- ldr r0, [r4, #0x54]
- str r0, [r1, #0x54]
- ldr r1, [r4, #0x54]
- ldr r0, [r4, #0x50]
- str r0, [r1, #0x50]
- adds r0, r4, #0
- adds r0, #0x6d
- ldrb r1, [r0]
- movs r0, #0x40
- ands r0, r1
- cmp r0, #0
- beq _08045298
- adds r0, r4, #0
- adds r1, r3, #0
- bl ReplaceMonitoredEntity
-_08045298:
- adds r0, r4, #0
- bl sub_0804A7D4
- pop {r4, pc}
-
- thumb_func_start nullsub_22
-nullsub_22: @ 0x080452A0
- bx lr
- .align 2, 0
-
- thumb_func_start sub_080452A4
-sub_080452A4: @ 0x080452A4
- push {r4, r5, lr}
- adds r4, r0, #0
- movs r2, #1
- movs r5, #1
- strb r5, [r4, #0xc]
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, #0x18]
- movs r0, #0x80
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- adds r0, r4, #0
- bl sub_0804A720
- adds r0, r4, #0
- movs r1, #6
- bl InitializeAnimation
- ldrb r0, [r4, #0xb]
- cmp r0, #0
- beq _080452DC
- movs r0, #2
- strb r0, [r4, #0xc]
- strb r5, [r4, #0xe]
- b _080452E2
-_080452DC:
- adds r0, r4, #0
- bl sub_080452E4
-_080452E2:
- pop {r4, r5, pc}
-
- thumb_func_start sub_080452E4
-sub_080452E4: @ 0x080452E4
- push {r4, lr}
- adds r4, r0, #0
- movs r0, #2
- strb r0, [r4, #0xc]
- bl Random
- movs r1, #0x1f
- ands r0, r1
- adds r0, #1
- strb r0, [r4, #0xe]
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_080452FC
-sub_080452FC: @ 0x080452FC
- push {r4, r5, lr}
- adds r5, r0, #0
- bl GetNextFrame
- ldrb r0, [r5, #0xe]
- subs r0, #1
- strb r0, [r5, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _08045370
- movs r4, #3
- strb r4, [r5, #0xc]
- movs r0, #1
- strb r0, [r5, #0xe]
- movs r1, #0x24
- ldrsh r0, [r5, r1]
- cmp r0, #0
- ble _08045330
- movs r0, #0x80
- lsls r0, r0, #5
- movs r2, #0x24
- ldrsh r1, [r5, r2]
- bl sub_0806FA04
- lsrs r0, r0, #8
- strb r0, [r5, #0xe]
-_08045330:
- adds r0, r5, #0
- bl sub_08049FA0
- cmp r0, #0
- bne _08045360
- bl Random
- ands r0, r4
- cmp r0, #0
- beq _08045360
- adds r0, r5, #0
- bl sub_08049EE4
- adds r4, r0, #0
- bl Random
- movs r1, #8
- ands r0, r1
- adds r0, #0xfc
- adds r4, r4, r0
- movs r0, #0x18
- ands r4, r0
- strb r4, [r5, #0x15]
- b _08045370
-_08045360:
- bl Random
- movs r1, #0x18
- ands r0, r1
- strb r0, [r5, #0x15]
- adds r0, r5, #0
- bl sub_08045374
-_08045370:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_08045374
-sub_08045374: @ 0x08045374
- push {r4, lr}
- adds r4, r0, #0
- bl sub_080AEF88
- adds r0, r4, #0
- bl GetNextFrame
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _08045392
- movs r0, #1
- strb r0, [r4, #0xc]
-_08045392:
- pop {r4, pc}
diff --git a/asm/non_matching/slime/sub_080450A8.inc b/asm/non_matching/slime/sub_080450A8.inc
deleted file mode 100644
index 2190a864..00000000
--- a/asm/non_matching/slime/sub_080450A8.inc
+++ /dev/null
@@ -1,109 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- sub sp, #0x10
- mov r8, r0
- ldr r1, _0804516C @ =gUnk_080D16D0
- ldrb r0, [r0, #0xa]
- adds r0, r0, r1
- ldrb r7, [r0]
- movs r0, #0x48
- subs r0, r0, r7
- ldr r1, _08045170 @ =gEntCount
- ldrb r1, [r1]
- cmp r0, r1
- ble _08045160
- cmp r7, #0
- beq _080450E2
- mov r4, sp
- adds r5, r7, #0
-_080450D0:
- mov r0, r8
- ldrb r1, [r0, #0xa]
- movs r0, #0x57
- bl CreateEnemy
- stm r4!, {r0}
- subs r5, #1
- cmp r5, #0
- bne _080450D0
-_080450E2:
- ldr r2, _08045174 @ =gUnk_080D16D4
- mov sb, r2
- movs r5, #0
- cmp r5, r7
- bge _08045142
-_080450EC:
- lsls r0, r5, #2
- add r0, sp
- ldr r6, [r0]
- adds r4, r5, #1
- adds r0, r4, #0
- adds r1, r7, #0
- bl __modsi3
- lsls r0, r0, #2
- add r0, sp
- ldr r0, [r0]
- str r0, [r6, #0x54]
- adds r0, r5, r7
- subs r0, #1
- adds r1, r7, #0
- bl __modsi3
- lsls r0, r0, #2
- add r0, sp
- ldr r0, [r0]
- str r0, [r6, #0x50]
- movs r1, #0
- movs r0, #1
- strb r0, [r6, #0xb]
- strh r1, [r6, #0x36]
- adds r1, r6, #0
- adds r1, #0x3d
- movs r0, #0xf0
- strb r0, [r1]
- mov r0, sb
- movs r2, #0
- ldrsb r2, [r0, r2]
- movs r3, #1
- ldrsb r3, [r0, r3]
- mov r0, r8
- adds r1, r6, #0
- bl sub_08045178
- movs r2, #2
- add sb, r2
- adds r5, r4, #0
- cmp r5, r7
- blt _080450EC
-_08045142:
- mov r0, r8
- movs r1, #2
- movs r2, #0
- bl CreateFx
- adds r6, r0, #0
- cmp r6, #0
- beq _0804515A
- mov r0, r8
- adds r1, r6, #0
- bl CopyPosition
-_0804515A:
- mov r0, r8
- bl DeleteEntity
-_08045160:
- add sp, #0x10
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0804516C: .4byte gUnk_080D16D0
-_08045170: .4byte gEntCount
-_08045174: .4byte gUnk_080D16D4
- .syntax divided \ No newline at end of file
diff --git a/asm/percy.s b/asm/percy.s
index 521a10ae..2817449f 100644
--- a/asm/percy.s
+++ b/asm/percy.s
@@ -6,152 +6,6 @@
.text
- thumb_func_start sub_0806B41C
-sub_0806B41C: @ 0x0806B41C
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- cmp r0, #1
- beq _0806B470
- cmp r0, #1
- bgt _0806B430
- cmp r0, #0
- beq _0806B436
- b _0806B4EC
-_0806B430:
- cmp r0, #2
- beq _0806B4DE
- b _0806B4EC
-_0806B436:
- ldr r1, _0806B46C @ =gUnk_08112E1C
- adds r0, r4, #0
- bl LoadExtraSpriteData
- cmp r0, #0
- beq _0806B4EC
- movs r2, #1
- movs r0, #1
- strb r0, [r4, #0xc]
- ldrb r1, [r4, #0x18]
- subs r0, #5
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, #0x18]
- ldrb r0, [r4, #0xb]
- cmp r0, #2
- bne _0806B462
- adds r0, r4, #0
- movs r1, #0x25
- movs r2, #0
- bl CreateFx
-_0806B462:
- adds r0, r4, #0
- bl sub_0807DD50
- b _0806B4EC
- .align 2, 0
-_0806B46C: .4byte gUnk_08112E1C
-_0806B470:
- adds r2, r4, #0
- adds r2, #0x39
- movs r1, #0
- ldrsb r1, [r2, r1]
- cmp r1, #2
- bne _0806B4D4
- movs r0, #0
- strb r1, [r4, #0xc]
- strb r0, [r2]
- ldr r1, _0806B4C8 @ =gPlayerEntity
- adds r0, r4, #0
- bl GetFacingDirection
- bl sub_0806F5A4
- adds r1, r0, #0
- adds r1, #4
- adds r0, r4, #0
- bl InitializeAnimation
- adds r0, r4, #0
- bl sub_08002632
- ldr r1, _0806B4CC @ =gUnk_08001A7C
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r3, [r0]
- adds r0, r4, #0
- adds r0, #0x68
- ldrb r0, [r0]
- cmp r0, #0x21
- bne _0806B4B2
- adds r3, #6
-_0806B4B2:
- ldrh r1, [r3]
- ldrh r2, [r3, #2]
- ldrh r3, [r3, #4]
- adds r0, r4, #0
- bl sub_0801DFB4
- ldr r0, _0806B4D0 @ =gPlayerState
- adds r0, #0x8b
- movs r1, #3
- strb r1, [r0]
- b _0806B4EC
- .align 2, 0
-_0806B4C8: .4byte gPlayerEntity
-_0806B4CC: .4byte gUnk_08001A7C
-_0806B4D0: .4byte gPlayerState
-_0806B4D4:
- adds r0, r4, #0
- movs r1, #0
- bl sub_0807DD94
- b _0806B4EC
-_0806B4DE:
- adds r0, r4, #0
- bl UpdateFuseInteraction
- cmp r0, #0
- beq _0806B4EC
- movs r0, #1
- strb r0, [r4, #0xc]
-_0806B4EC:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_0806B4F0
-sub_0806B4F0: @ 0x0806B4F0
- push {lr}
- ldrb r1, [r0, #0xb]
- lsls r1, r1, #3
- ldr r2, _0806B500 @ =gUnk_08112E2C
- adds r1, r1, r2
- bl ShowNPCDialogue
- pop {pc}
- .align 2, 0
-_0806B500: .4byte gUnk_08112E2C
-
- thumb_func_start sub_0806B504
-sub_0806B504: @ 0x0806B504
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r4, #1
- movs r0, #0x21
- bl CheckKinstoneFused
- cmp r0, #0
- beq _0806B518
- movs r4, #3
- b _0806B52A
-_0806B518:
- movs r0, #0x86
- bl CheckLocalFlag
- cmp r0, #0
- bne _0806B52A
- movs r4, #0
- movs r0, #0x86
- bl SetLocalFlag
-_0806B52A:
- ldr r0, _0806B53C @ =gUnk_08112E54
- lsls r1, r4, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- adds r1, r5, #0
- bl TextboxNoOverlap
- pop {r4, r5, pc}
- .align 2, 0
-_0806B53C: .4byte gUnk_08112E54
-
thumb_func_start sub_0806B540
sub_0806B540: @ 0x0806B540
push {r4, lr}
diff --git a/asm/slime.s b/asm/slime.s
deleted file mode 100644
index 472b54d6..00000000
--- a/asm/slime.s
+++ /dev/null
@@ -1,81 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_08045178
-sub_08045178: @ 0x08045178
- push {r4, r5, r6, lr}
- adds r4, r1, #0
- adds r5, r2, #0
- adds r6, r3, #0
- cmp r4, #0
- beq _080451C6
- bl sub_0804A4E4
- adds r0, r4, #0
- adds r1, r5, #0
- adds r2, r6, #0
- bl sub_080002CC
- cmp r0, #0
- bne _080451C6
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- adds r2, r0, r5
- cmp r2, #0
- blt _080451AE
- ldr r0, _080451C8 @ =gRoomControls
- ldrh r1, [r0, #6]
- ldrh r0, [r0, #0x1e]
- adds r1, r1, r0
- cmp r2, r1
- bge _080451AE
- strh r2, [r4, #0x2e]
-_080451AE:
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- adds r2, r0, r6
- cmp r2, #0
- blt _080451C6
- ldr r0, _080451C8 @ =gRoomControls
- ldrh r1, [r0, #8]
- ldrh r0, [r0, #0x20]
- adds r1, r1, r0
- cmp r2, r1
- bge _080451C6
- strh r2, [r4, #0x32]
-_080451C6:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_080451C8: .4byte gRoomControls
-
- thumb_func_start sub_080451CC
-sub_080451CC: @ 0x080451CC
- ldrb r3, [r0, #0x10]
- movs r2, #0xfe
- ands r2, r3
- strb r2, [r1, #0x10]
- ldr r2, [r0, #0x2c]
- str r2, [r1, #0x2c]
- ldr r2, [r0, #0x30]
- str r2, [r1, #0x30]
- ldr r2, [r0, #0x34]
- str r2, [r1, #0x34]
- adds r0, #0x68
- adds r1, #0x68
- ldrb r2, [r0, #4]
- strb r2, [r1, #4]
- ldrb r2, [r0, #5]
- strb r2, [r1, #5]
- ldrb r2, [r0, #6]
- strb r2, [r1, #6]
- ldrb r2, [r0, #7]
- strb r2, [r1, #7]
- ldrh r2, [r0, #8]
- strh r2, [r1, #8]
- ldrh r0, [r0, #0xa]
- strh r0, [r1, #0xa]
- bx lr
- .align 2, 0
diff --git a/asm/sub_080451CC.s b/asm/sub_080451CC.s
new file mode 100644
index 00000000..5d874b46
--- /dev/null
+++ b/asm/sub_080451CC.s
@@ -0,0 +1,36 @@
+ .include "asm/macros.inc"
+
+ .include "constants/constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_080451CC
+sub_080451CC: @ 0x080451CC
+ ldrb r3, [r0, #0x10]
+ movs r2, #0xfe
+ ands r2, r3
+ strb r2, [r1, #0x10]
+ ldr r2, [r0, #0x2c]
+ str r2, [r1, #0x2c]
+ ldr r2, [r0, #0x30]
+ str r2, [r1, #0x30]
+ ldr r2, [r0, #0x34]
+ str r2, [r1, #0x34]
+ adds r0, #0x68
+ adds r1, #0x68
+ ldrb r2, [r0, #4]
+ strb r2, [r1, #4]
+ ldrb r2, [r0, #5]
+ strb r2, [r1, #5]
+ ldrb r2, [r0, #6]
+ strb r2, [r1, #6]
+ ldrb r2, [r0, #7]
+ strb r2, [r1, #7]
+ ldrh r2, [r0, #8]
+ strh r2, [r1, #8]
+ ldrh r0, [r0, #0xa]
+ strh r0, [r1, #0xa]
+ bx lr
+ .align 2, 0
diff --git a/include/entity.h b/include/entity.h
index 36b02000..069f2073 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -167,7 +167,10 @@ extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
extern u32 GetFacingDirection(Entity*, Entity*);
-extern void DeleteThisEntity();
+extern void DeleteThisEntity(void);
+extern void CopyPosition(Entity*, Entity*);
+extern void DeleteEntity(Entity*);
+extern void PositionRelative(Entity*, Entity*, s32, s32);
extern Entity gUnk_03003DA0;
diff --git a/include/room.h b/include/room.h
index 6245d225..9e0bacbd 100644
--- a/include/room.h
+++ b/include/room.h
@@ -27,8 +27,10 @@ typedef struct {
u8 screenShakeMagnitude;
u8 unk7;
u16 screenShakeTime;
- u16 filler2[6];
- u8 filler3[4];
+ u16 filler2[3];
+ u16 width;
+ u16 height;
+ u8 filler3[6];
union SplitWord bg3OffsetX;
union SplitWord bg3OffsetY;
Entity* cameraTarget;
diff --git a/linker.ld b/linker.ld
index d7405c75..b77adca9 100644
--- a/linker.ld
+++ b/linker.ld
@@ -418,9 +418,9 @@ SECTIONS {
asm/dust.o(.text);
asm/vaatiBall.o(.text);
src/enemy/slime.o(.text);
- asm/slime.o(.text);
- asm/miniSlime.o(.text);
- asm/fireballGuy.o(.text);
+ asm/sub_080451CC.o(.text);
+ src/enemy/miniSlime.o(.text);
+ src/enemy/fireballGuy.o(.text);
src/enemy/miniFireballGuy.o(.text);
asm/enemy5A.o(.text);
asm/businessScrubPrologue.o(.text);
diff --git a/src/createObjectWithParent.c b/src/createObjectWithParent.c
index bee2c86c..8aca834d 100644
--- a/src/createObjectWithParent.c
+++ b/src/createObjectWithParent.c
@@ -1,9 +1,6 @@
#include "global.h"
#include "entity.h"
-extern Entity* CreateObject();
-extern void CopyPosition();
-
Entity* CreateObjectWithParent(Entity* parentEnt, u32 subtype, u32 param1, u32 param2) {
Entity* ent;
diff --git a/src/enemy/fireballGuy.c b/src/enemy/fireballGuy.c
new file mode 100644
index 00000000..b194ed07
--- /dev/null
+++ b/src/enemy/fireballGuy.c
@@ -0,0 +1,121 @@
+#include "global.h"
+#include "entity.h"
+#include "functions.h"
+
+typedef struct {
+ s8 h, v;
+} PACKED PosOffset;
+
+extern void sub_08045524(Entity*);
+void sub_08045178(Entity*, Entity*, int, int);
+
+extern void (*const gUnk_080D17E8[])(Entity*);
+extern void (*const gUnk_080D1800[])(Entity*);
+extern u8 gUnk_080D180C[4]; // Entity count per form
+extern PosOffset gUnk_080D1810[4];
+
+extern u8 gEntCount;
+
+void FireballGuy(Entity* this) {
+ EnemyFunctionHandler(this, gUnk_080D17E8);
+}
+
+void sub_080453A4(Entity* this) {
+ gUnk_080D1800[this->action](this);
+}
+
+void sub_080453BC(Entity* this) {
+ if (this->currentHealth && this->cutsceneBeh.HALF.LO != this->currentHealth) {
+ this->action = 2;
+ } else {
+ sub_0804AA30(this, gUnk_080D17E8);
+ }
+}
+
+void nullsub_172(void) {
+}
+
+void sub_080453E8(Entity* this) {
+ this->action = 1;
+ this->actionDelay = 0;
+ this->spriteSettings.b.draw = 1;
+ this->nonPlanarMovement = 0x80;
+ this->cutsceneBeh.HALF.LO = this->currentHealth;
+ this->field_0x3c |= 0x10;
+ sub_0804A720(this);
+ InitializeAnimation(this, 0);
+ sub_08045524(this);
+}
+
+void sub_08045430(Entity* this) {
+ sub_080AEFE0(this);
+ GetNextFrame(this);
+ if (sub_08003FC4(this, 0x1800) == 0)
+ sub_08045524(this);
+}
+
+/* Split FireballGuy into new ones */
+void sub_08045454(Entity* this) {
+ Entity* entities[4];
+ Entity* ent;
+ s32 count, i;
+ PosOffset* off;
+ u32 tmp;
+
+ /* Can we create enough new entities? */
+ count = gUnk_080D180C[this->entityType.form];
+ if (72 - count <= gEntCount)
+ return;
+
+ /* Create 2-5 new MiniFireballGuy */
+ for (i = 0; i < count; i++)
+ entities[i] = CreateEnemy(0x59, this->entityType.form);
+
+ off = gUnk_080D1810;
+ for (i = 0; i < count; i++) {
+ ent = entities[i];
+ ent->attachedEntity = entities[(i + 1) % count];
+ ent->parent = entities[(i + count - 1) % count];
+ tmp = 0;
+ ent->entityType.parameter = 1;
+ ent->height.HALF.HI = tmp;
+ ent->hurtBlinkTime = -0x10;
+
+ /* Set MiniFireballGuy offset relative to killed slime. */
+ sub_08045178(this, ent, off->h, off->v);
+ off++;
+ }
+
+ ent = CreateFx(this, 2, 0);
+ if (ent)
+ CopyPosition(this, ent);
+
+ DeleteEntity(this);
+}
+
+u32 sub_0804A024(Entity*, u32, u32);
+
+void sub_08045524(Entity *this) {
+ u32 tmp, tmp1, tmp2;
+
+ this->field_0x20 = 0x1c000;
+ tmp = sub_0804A024(this,1,8);
+ if (tmp != 0xff && (Random() & 3) == 0) {
+ this->actionDelay = Random() & 3;
+ this->direction = tmp & 0x18;
+ } else {
+ if (this->actionDelay) {
+ this->actionDelay--;
+ return;
+ }
+ this->actionDelay = Random() & 3;
+ if (sub_08049FA0(this) == 0 && (Random() & 3)) {
+ tmp1 = sub_08049EE4(this);
+ tmp2 = Random() & 8;
+ tmp2 += 0xfc;
+ this->direction = (tmp1 + tmp2) & 0x18;
+ } else {
+ this->direction = Random() & 0x18;
+ }
+ }
+}
diff --git a/src/enemy/miniSlime.c b/src/enemy/miniSlime.c
new file mode 100644
index 00000000..eac2e020
--- /dev/null
+++ b/src/enemy/miniSlime.c
@@ -0,0 +1,95 @@
+#include "global.h"
+#include "entity.h"
+#include "room.h"
+#include "functions.h"
+
+void sub_08045374(Entity*);
+
+extern u32 sub_0806FA04(u32, u32);
+extern void sub_0804A720();
+extern void sub_080452E4();
+extern void sub_0804A9FC();
+extern void sub_0804AA30();
+extern void ReplaceMonitoredEntity(Entity*, Entity*);
+extern void sub_0804A7D4(Entity*);
+
+extern void (*const gUnk_080D17C0[])(Entity*);
+extern void (*const gUnk_080D17D8[])(Entity*);
+
+void MiniSlime(Entity* this) {
+ EnemyFunctionHandler(this, gUnk_080D17C0);
+ SetChildOffset(this, 0, 1, -8);
+}
+
+void sub_08045220(Entity* this) {
+ gUnk_080D17D8[this->action](this);
+}
+
+void sub_08045238(Entity* this) {
+ if (this->field_0x43)
+ sub_0804A9FC(this, 0x1c);
+
+ sub_0804AA30(this, gUnk_080D17C0);
+}
+
+void sub_0804525C(Entity* this) {
+ Entity* parent = this->parent;
+ if (this != parent && parent) {
+ this->field_0x6c.HALF.LO &= 0x7f;
+ this->parent->attachedEntity = this->attachedEntity;
+ this->attachedEntity->parent = this->parent;
+ if (this->field_0x6c.HALF.HI & 0x40)
+ ReplaceMonitoredEntity(this, parent);
+ }
+ sub_0804A7D4(this);
+}
+
+void nullsub_22(void) {
+}
+
+void sub_080452A4(Entity* this) {
+ this->action = 1;
+ this->spriteSettings.b.draw = 1;
+ this->nonPlanarMovement = 0x100;
+ sub_0804A720(this);
+ InitializeAnimation(this, 6);
+ if (this->entityType.parameter) {
+ this->action = 2;
+ this->actionDelay = 1;
+ } else {
+ sub_080452E4(this);
+ }
+}
+
+void sub_080452E4(Entity* this) {
+ this->action = 2;
+ this->actionDelay = (Random() & 0x1f) + 1;
+}
+
+void sub_080452FC(Entity *this) {
+ u32 cVar2, bVar3;
+ GetNextFrame(this);
+ if (--this->actionDelay == 0) {
+ this->action = 3;
+ this->actionDelay = 1;
+ if (0 < this->nonPlanarMovement)
+ this->actionDelay = sub_0806FA04(0x1000, this->nonPlanarMovement) >> 0x8;
+
+ if (sub_08049FA0(this) == 0 && (Random() & 3)) {
+ cVar2 = sub_08049EE4(this);
+ bVar3 = Random() & 8;
+ bVar3 += 0xfc;
+ this->direction = (cVar2 + bVar3) & 0x18;
+ } else {
+ this->direction = Random() & 0x18;
+ sub_08045374(this);
+ }
+ }
+}
+
+void sub_08045374(Entity* this) {
+ sub_080AEF88(this);
+ GetNextFrame(this);
+ if (--this->actionDelay == 0)
+ this->action = 1;
+}
diff --git a/src/enemy/slime.c b/src/enemy/slime.c
index 42a5d952..74343df7 100644
--- a/src/enemy/slime.c
+++ b/src/enemy/slime.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "entity.h"
+#include "room.h"
+#include "functions.h"
typedef struct {
void* field_0x0;
@@ -7,28 +9,31 @@ typedef struct {
u8 freezeTime;
} EntityHandler;
-extern void EnemyFunctionHandler(Entity*, void*);
-extern void SetChildOffset(Entity*, u32, u32, u32);
-extern void sub_0804AA30(Entity*, void*);
+typedef struct {
+ s8 h, v;
+} PACKED PosOffset;
+
+void sub_08044FF8(Entity*);
+void sub_08045178(Entity*, Entity*, int, int);
+
extern void sub_0804A9FC(Entity*, u32);
extern void sub_0804A720(Entity*);
-extern void sub_08044FF8(Entity*);
-extern u32 Random(void);
extern u32 sub_0806FA04(u32, u32);
extern u32 sub_08049FA0(Entity*);
extern u32 sub_08049EE4(Entity*);
-extern u32 sub_080AEF88(void);
+extern void sub_0804A4E4(Entity*, Entity*);
+extern u32 sub_080002CC(Entity*, s32, s32);
-extern void (*gUnk_080D16BC[])(Entity*);
-extern void (*gUnk_080D16A4[])(Entity*);
+extern void (*const gUnk_080D16BC[])(Entity*);
+extern void (*const gUnk_080D16A4[])(Entity*);
+extern u8 gUnk_080D16D0[4]; // Entity count per form
+extern PosOffset gUnk_080D16D4[4];
-extern u8 gUnk_080D16D0;
+extern u8 gEntCount;
extern EntityHandler gUnk_03003DB8;
-void Slime(Entity* this)
-
-{
- EnemyFunctionHandler(this, &gUnk_080D16A4);
+void Slime(Entity* this) {
+ EnemyFunctionHandler(this, gUnk_080D16A4);
SetChildOffset(this, 0, 1, -12);
}
@@ -40,7 +45,7 @@ void sub_08044F88(Entity* this) {
if ((this->currentHealth != 0) && (this->cutsceneBeh.HALF.LO != this->currentHealth)) {
this->action = 4;
} else {
- sub_0804AA30(this, &gUnk_080D16A4);
+ sub_0804AA30(this, gUnk_080D16A4);
}
if (this->field_0x43 != 0) {
@@ -61,32 +66,21 @@ void sub_08044FC8(Entity* this) {
}
void sub_08044FF8(Entity* this) {
- u32 bVar1;
-
this->action = 2;
- bVar1 = Random();
- this->actionDelay = (bVar1 & 31) + 30;
+ this->actionDelay = (Random() & 31) + 30;
this->cutsceneBeh.HALF.LO = this->currentHealth;
}
void sub_08045018(Entity* this) {
- u32 cVar1;
- u32 param3;
- u32 iVar3;
- u32 randValue;
-
GetNextFrame(this);
- param3 = this->actionDelay -= 1;
- if (param3 == 0) {
+ if (--this->actionDelay == 0) {
this->action = 3;
this->actionDelay = 1;
if (0 < this->nonPlanarMovement) {
this->actionDelay = sub_0806FA04(4096, this->nonPlanarMovement) >> 8;
}
- iVar3 = sub_08049FA0(this);
- if ((iVar3 == 0) && (randValue = Random(), (randValue & 3) != 0)) {
- cVar1 = sub_08049EE4(this);
- this->direction = (cVar1 + 0xfc + (Random() & 8)) & 24;
+ if (sub_08049FA0(this) == 0 && (Random() & 3)) {
+ this->direction = (sub_08049EE4(this) + 0xfc + (Random() & 8)) & 24;
return;
}
this->direction = Random() & 24;
@@ -94,74 +88,65 @@ void sub_08045018(Entity* this) {
}
void sub_08045088(Entity* this) {
- u8 bVar1;
-
- sub_080AEF88();
+ sub_080AEF88(this);
GetNextFrame(this);
- bVar1 = this->actionDelay -= 1;
- if (bVar1 == 0) {
+ if (--this->actionDelay == 0) {
this->action = 1;
}
}
-#ifdef NON_MATCHING
-void sub_080450A8(Entity* this)
-
-{
- u8 bVar1;
- u32 uVar2;
- s32 iVar3;
- s32 iVar4;
- Entity* pEVar5;
- Entity** ppEVar6;
- s32 dividend;
- u32 uVar7;
- Entity* local_r6_72;
- u32 divisor;
- u8* pcVar8;
- Entity* local_2c[4];
-
- ppEVar6 = local_2c;
- bVar1 = (&gUnk_080D16D0)[(this->entityType).form];
- divisor = (u32)bVar1;
- if ((int)gUnk_03003DB8.entityCount < (int)(72 - divisor)) {
- uVar7 = divisor;
- if (bVar1 != 0) {
- do {
- uVar2 = CreateEnemy(87, this->entityType.form);
- *ppEVar6 = uVar2;
- ppEVar6 = ppEVar6 + 1;
- uVar7 = uVar7 - 1;
- } while (uVar7 != 0);
- }
- pcVar8 = "\x06";
- iVar4 = 0;
- if (bVar1 != 0) {
- do {
- local_r6_72 = local_2c[iVar4];
- dividend = iVar4 + 1;
- iVar3 = Div(dividend, divisor);
- local_r6_72->attachedEntity = local_2c[iVar3];
- iVar4 = Div(iVar4 + divisor + -1, divisor);
- local_r6_72->parent = local_2c[iVar4];
- (local_r6_72->entityType).parameter = 1;
- local_r6_72->height.WORD = 0;
- local_r6_72->hurtBlinkTime = 240;
- sub_08045178(this, local_r6_72, *pcVar8, pcVar8[1]);
- pcVar8 = pcVar8 + 2;
- iVar4 = dividend;
- } while (dividend < divisor);
- }
- pEVar5 = CreateFx(this, 2, 0);
- if (pEVar5 != NULL) {
- CopyPosition(this, pEVar5);
- }
- DeleteEnemy(this);
+/* Split slime into new ones */
+void sub_080450A8(Entity* this) {
+ Entity* entities[4];
+ Entity* ent;
+ s32 count, i;
+ PosOffset* off;
+
+ /* Can we create enough new entities? */
+ count = gUnk_080D16D0[this->entityType.form];
+ if (72 - count <= gEntCount)
+ return;
+
+ /* Create 2-4 new MiniSlime */
+ for (i = 0; i < count; i++)
+ entities[i] = CreateEnemy(0x57, this->entityType.form);
+
+ off = gUnk_080D16D4;
+ for (i = 0; i < count; i++) {
+ ent = entities[i];
+ ent->attachedEntity = entities[(i + 1) % count];
+ ent->parent = entities[(i + count - 1) % count];
+ ent->entityType.parameter = 1;
+ ent->height.HALF.HI = 0;
+ ent->hurtBlinkTime = -0x10;
+
+ /* Set MiniSlime offset relative to killed slime. */
+ sub_08045178(this, ent, off->h, off->v);
+ off++;
}
+
+ ent = CreateFx(this, 2, 0);
+ if (ent)
+ CopyPosition(this, ent);
+
+ DeleteEntity(this);
}
-#else
-NAKED
-void sub_080450A8(Entity* this) {
- asm(".include \"asm/non_matching/slime/sub_080450A8.inc\"");
+
+void sub_08045178(Entity* this, Entity* child, int h, int v) {
+ int x, y;
+
+ if (child == NULL)
+ return;
+
+ sub_0804A4E4(this, child);
+ if (sub_080002CC(child, h, v))
+ return;
+
+ x = child->x.HALF.HI + h;
+ if (0 <= x && x < (gRoomControls.roomOriginX + gRoomControls.width))
+ child->x.HALF.HI = x;
+
+ y = child->y.HALF.HI + v;
+ if (0 <= y && y < (gRoomControls.roomOriginY + gRoomControls.height))
+ child->y.HALF.HI = y;
}
-#endif
diff --git a/src/npc/librari.c b/src/npc/librari.c
index 5725f1ea..27b20ad8 100644
--- a/src/npc/librari.c
+++ b/src/npc/librari.c
@@ -84,24 +84,12 @@ void sub_0806b2b4(Entity* this) {
TextboxNoOverlap(gUnk_08112D50[index], this);
}
-void Librari_Fusion(Entity *this)
-{
- if (this->action == 0) {
- this->action++;
- this->spriteSettings.b.draw = TRUE;
- InitAnimationForceUpdate(this, 9);
- }
- else {
- UpdateAnimationSingleFrame(this);
- }
+void Librari_Fusion(Entity* this) {
+ if (this->action == 0) {
+ this->action++;
+ this->spriteSettings.b.draw = TRUE;
+ InitAnimationForceUpdate(this, 9);
+ } else {
+ UpdateAnimationSingleFrame(this);
+ }
}
-
-void Percy_Head(Entity *this) // ???
-{
- SetExtraSpriteFrame(this, 0, (this->frameSpriteSettings & 0x3f) + 0x13);
- SetExtraSpriteFrame(this, 1, (this->frames.all & 0x7f) + 0xb);
- SetExtraSpriteFrame(this, 2, this->frameIndex);
- SetSpriteSubEntryOffsetData1(this, 2, 1);
- SetSpriteSubEntryOffsetData2(this, 2, 0);
- sub_0807000C(this);
-} \ No newline at end of file
diff --git a/src/npc/percy.c b/src/npc/percy.c
index 759b94d3..47a9fa43 100644
--- a/src/npc/percy.c
+++ b/src/npc/percy.c
@@ -3,12 +3,28 @@
#include "npc.h"
#include "textbox.h"
#include "functions.h"
+#include "flags.h"
extern void sub_0806B41C(Entity*);
-void sub_0806B3CC(Entity*);
+extern void sub_0806B3CC(Entity*);
+extern u32 sub_08002632(Entity*);
+extern void sub_0801DFB4(Entity*, u32, u32, u32);
+
+extern u16* gUnk_08001A7C[40];
+extern u16 gUnk_08112E54[4];
+extern Dialog gUnk_08112E2C[5];
extern SpriteLoadData gUnk_08112E1C;
+void Percy_Head(Entity* this) {
+ SetExtraSpriteFrame(this, 0, (this->frameSpriteSettings & 0x3f) + 0x13);
+ SetExtraSpriteFrame(this, 1, (this->frames.all & 0x7f) + 0xb);
+ SetExtraSpriteFrame(this, 2, this->frameIndex);
+ SetSpriteSubEntryOffsetData1(this, 2, 1);
+ SetSpriteSubEntryOffsetData2(this, 2, 0);
+ sub_0807000C(this);
+}
+
void Percy(Entity* this) {
if ((this->flags & 2) != 0) {
sub_0806B41C(this);
@@ -17,20 +33,75 @@ void Percy(Entity* this) {
}
}
-void sub_0806B3CC(Entity *this)
-{
- if (this->action == 0) {
- if (!LoadExtraSpriteData(this, &gUnk_08112E1C)) {
- return;
+void sub_0806B3CC(Entity* this) {
+ if (this->action == 0) {
+ if (!LoadExtraSpriteData(this, &gUnk_08112E1C)) {
+ return;
+ }
+ this->action = 1;
+ InitializeAnimation(this, 0);
+ sub_08078778(this);
+ }
+ GetNextFrame(this);
+ if (this->interactType != 0) {
+ this->interactType = 0;
+ TextboxNoOverlapFollow(0);
+ }
+ sub_0806ED78(this);
+}
+
+void sub_0806B41C(Entity* this) {
+ u16* tmp;
+ u32 idx;
+
+ switch (this->action) {
+ case 0:
+ if (LoadExtraSpriteData(this, &gUnk_08112E1C)) {
+ this->action = 1;
+ this->spriteSettings.b.draw = 1;
+ if (this->entityType.parameter == 2) {
+ CreateFx(this, 0x25, 0);
+ }
+ sub_0807DD50(this);
+ }
+ break;
+ case 1:
+ if (this->interactType == 2) {
+ this->action = 2;
+ this->interactType = 0;
+ InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)) + 4);
+ idx = sub_08002632(this);
+ tmp = gUnk_08001A7C[idx];
+ if (this->field_0x68.HALF.LO == 33)
+ tmp += 3;
+ sub_0801DFB4(this, tmp[0], tmp[1], tmp[2]);
+ gPlayerState.field_0x8b = 3;
+ } else {
+ sub_0807DD94(this, 0);
+ }
+ break;
+ case 2:
+ if (UpdateFuseInteraction(this)) {
+ this->action = 1;
+ }
+ break;
}
- this->action = 1;
- InitializeAnimation(this, 0);
- sub_08078778(this);
- }
- GetNextFrame(this);
- if (this->interactType != 0) {
- this->interactType = 0;
- TextboxNoOverlapFollow(0);
- }
- sub_0806ED78(this);
+}
+
+void sub_0806B4F0(Entity* this) {
+ ShowNPCDialogue(this, &gUnk_08112E2C[this->entityType.parameter]);
+}
+
+void sub_0806B504(Entity* this) {
+ int idx;
+
+ idx = 1;
+ if (CheckKinstoneFused(0x21)) {
+ idx = 3;
+ } else if (!CheckLocalFlag(0x86)) {
+ idx = 0;
+ SetLocalFlag(0x86);
+ }
+
+ TextboxNoOverlap(gUnk_08112E54[idx], this);
}
diff --git a/src/object/backgroundCloud.c b/src/object/backgroundCloud.c
index a6106ca7..6be23764 100644
--- a/src/object/backgroundCloud.c
+++ b/src/object/backgroundCloud.c
@@ -20,7 +20,7 @@ void sub_0808F658(Entity* this) {
this->direction = 8;
this->nonPlanarMovement = gUnk_08121EB0[(this->entityType).form];
this->field_0x78.HWORD = gRoomControls.roomOriginX - 0x60;
- this->field_0x7a.HWORD = gRoomControls.roomOriginX + gRoomControls.filler2[3] + 0x60;
+ this->field_0x7a.HWORD = gRoomControls.roomOriginX + gRoomControls.width + 0x60;
this->animationState = 0;
this->x.HALF.HI += (Random() & 0xf) << 4;
this->actionDelay = 0;
diff --git a/src/object/object1A.c b/src/object/object1A.c
index 91129a16..e903d21b 100644
--- a/src/object/object1A.c
+++ b/src/object/object1A.c
@@ -1,11 +1,9 @@
#include "global.h"
#include "entity.h"
-extern void CopyPosition();
extern void sub_08086A6C();
extern s32 sub_080044EC();
extern void sub_080AEF88();
-extern void DeleteThisEntity();
extern u32 Random(void);
extern void (*gUnk_081206C4[99])(Entity*);
diff --git a/src/object/object86.c b/src/object/object86.c
index 0520cb55..e6a1b683 100644
--- a/src/object/object86.c
+++ b/src/object/object86.c
@@ -7,7 +7,6 @@ extern u32 sub_080041A0(Entity*, Entity*, u32, u32);
void sub_08099ECC(Entity*);
extern void sub_0805E4E0(Entity*, u32);
extern void sub_0805B390(u32);
-extern void CopyPosition(Entity*, Entity*);
extern void (*const gUnk_081237F8[])(Entity*);
diff --git a/src/object/object9E.c b/src/object/object9E.c
index 4c770e82..21467eae 100644
--- a/src/object/object9E.c
+++ b/src/object/object9E.c
@@ -5,7 +5,6 @@
extern BoundingBox gUnk_080FD168;
extern void SetTile(u32, u32, u32);
-extern void CopyPosition(Entity*, Entity*);
void Object9E(Entity *this)
{
diff --git a/src/object/objectAF.c b/src/object/objectAF.c
index 382e32a3..83f93935 100644
--- a/src/object/objectAF.c
+++ b/src/object/objectAF.c
@@ -2,8 +2,6 @@
#include "entity.h"
extern void sub_080A0640(Entity*);
-extern void PositionRelative(Entity*, Entity*, s32, s32);
-extern void CopyPosition(Entity*, Entity*);
extern void (*const gUnk_081248C4[])(Entity*);
diff --git a/src/object/smoke.c b/src/object/smoke.c
index b4c83115..98aa2e6b 100644
--- a/src/object/smoke.c
+++ b/src/object/smoke.c
@@ -2,9 +2,7 @@
#include "entity.h"
extern u32 Random(void);
-extern void CopyPosition(Entity*, Entity*);
extern void sub_0806F69C(Entity*);
-extern void DeleteEntity(Entity*);
extern void (*const gUnk_08121060[])(Entity*);
extern void (*const gUnk_08121070[])(Entity*);
diff --git a/src/room.c b/src/room.c
index 69d8ef95..b8cdbcda 100644
--- a/src/room.c
+++ b/src/room.c
@@ -2057,7 +2057,7 @@ extern EntityData gUnk_080DE4C8;
void sub_0804CBB0(void) {
- if ((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) < (gRoomControls.filler2[4] >> 1)) {
+ if ((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) < (gRoomControls.height >> 1)) {
if (!CheckLocalFlag(0x17)) {
LoadRoomEntityList(&gUnk_080DE4C8);
}