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); - } -} -#else -NAKED +/* Split slime into new ones */ void sub_080450A8(Entity* this) { - asm(".include \"asm/non_matching/slime/sub_080450A8.inc\""); + 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); +} + +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); } - this->action = 1; - InitializeAnimation(this, 0); - sub_08078778(this); - } - GetNextFrame(this); - if (this->interactType != 0) { - this->interactType = 0; - TextboxNoOverlapFollow(0); - } - sub_0806ED78(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; + } +} + +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); }