From f72a0510691a38fb78aa8cf576ae4c10513759b0 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 29 Apr 2021 20:37:55 +0200 Subject: [PATCH] mazaal bracelet decomp --- asm/mazaalBracelet.s | 3486 ---------------------- asm/non_matching/mazaal/sub_0803A188.inc | 105 + asm/non_matching/mazaal/sub_0803AA98.inc | 60 + asm/non_matching/mazaal/sub_0803BA8C.inc | 129 + data/const/enemy/mazaalBracelet.s | 109 - linker.ld | 4 +- src/enemy/mazaalBracelet.c | 1401 +++++++++ src/enemy/mazaalHand.c | 1 + src/enemy/mazaalHead.c | 1 + src/enemy/mazaalMacro.c | 1 + 10 files changed, 1700 insertions(+), 3597 deletions(-) delete mode 100644 asm/mazaalBracelet.s create mode 100644 asm/non_matching/mazaal/sub_0803A188.inc create mode 100644 asm/non_matching/mazaal/sub_0803AA98.inc create mode 100644 asm/non_matching/mazaal/sub_0803BA8C.inc delete mode 100644 data/const/enemy/mazaalBracelet.s create mode 100644 src/enemy/mazaalBracelet.c create mode 100644 src/enemy/mazaalHand.c create mode 100644 src/enemy/mazaalHead.c create mode 100644 src/enemy/mazaalMacro.c diff --git a/asm/mazaalBracelet.s b/asm/mazaalBracelet.s deleted file mode 100644 index c3fa21a1..00000000 --- a/asm/mazaalBracelet.s +++ /dev/null @@ -1,3486 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MazaalBracelet -MazaalBracelet: @ 0x0803A154 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0803A16C @ =gUnk_080CFC14 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_0803A16C: .4byte gUnk_080CFC14 - - thumb_func_start sub_0803A170 -sub_0803A170: @ 0x0803A170 - push {lr} - ldr r2, _0803A184 @ =gUnk_080CFC2C - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0803A184: .4byte gUnk_080CFC2C - - thumb_func_start sub_0803A188 -sub_0803A188: @ 0x0803A188 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r3, [r4, #0xa] - cmp r3, #1 - bhi _0803A23E - ldrb r0, [r4, #0xc] - cmp r0, #0x2b - beq _0803A210 - adds r0, r4, #0 - adds r0, #0x3d - movs r1, #0 - ldrsb r1, [r0, r1] - adds r5, r0, #0 - cmp r1, #0 - ble _0803A23E - adds r0, #4 - ldrb r0, [r0] - cmp r0, #0x95 - beq _0803A1B2 - cmp r0, #0x8e - bne _0803A23E -_0803A1B2: - movs r0, #0x28 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldr r2, [r4, #0x50] - adds r0, r2, #0 - adds r0, #0x7d - ldrb r1, [r0] - cmp r3, #0 - bne _0803A1CE - movs r0, #1 - b _0803A1D0 -_0803A1CE: - movs r0, #2 -_0803A1D0: - orrs r1, r0 - adds r0, r2, #0 - adds r0, #0x7d - strb r1, [r0] - adds r0, #3 - ldrb r2, [r0] - ldrb r1, [r4, #0xa] - adds r3, r0, #0 - cmp r1, #0 - bne _0803A1E8 - movs r0, #1 - b _0803A1EA -_0803A1E8: - movs r0, #2 -_0803A1EA: - orrs r0, r2 - strb r0, [r3] - ldr r2, [r4, #0x54] - ldrb r1, [r5] - adds r0, r2, #0 - adds r0, #0x3d - strb r1, [r0] - ldr r2, [r4, #0x74] - ldrb r1, [r5] - adds r0, r2, #0 - adds r0, #0x3d - strb r1, [r0] - ldr r0, _0803A20C @ =0x00000127 - bl SoundReq - b _0803A23E - .align 2, 0 -_0803A20C: .4byte 0x00000127 -_0803A210: - ldr r2, [r4, #0x54] - adds r3, r4, #0 - adds r3, #0x3d - ldrb r1, [r3] - adds r0, r2, #0 - adds r0, #0x3d - strb r1, [r0] - ldr r2, [r4, #0x74] - ldrb r1, [r3] - adds r0, r2, #0 - adds r0, #0x3d - strb r1, [r0] - adds r0, r4, #0 - movs r1, #0x18 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #9 - bl InitAnimationForceUpdate - ldr r0, _0803A248 @ =0x00000127 - bl SoundReq -_0803A23E: - ldr r1, _0803A24C @ =gUnk_080CFC14 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_0803A248: .4byte 0x00000127 -_0803A24C: .4byte gUnk_080CFC14 - - thumb_func_start nullsub_167 -nullsub_167: @ 0x0803A250 - bx lr - .align 2, 0 - - thumb_func_start sub_0803A254 -sub_0803A254: @ 0x0803A254 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0803A270 @ =gUnk_080CFC3C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0803B538 - pop {r4, pc} - .align 2, 0 -_0803A270: .4byte gUnk_080CFC3C - - thumb_func_start sub_0803A274 -sub_0803A274: @ 0x0803A274 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0803A2C8 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x44 - bhi _0803A360 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0803A2CC - movs r0, #0x38 - movs r1, #0 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - str r1, [r4, #0x54] - movs r0, #0x44 - movs r1, #2 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - str r1, [r4, #0x74] - movs r0, #0x7e - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - str r4, [r1, #0x50] - ldr r0, [r4, #0x54] - str r0, [r1, #0x54] - ldr r0, [r4, #0x50] - movs r2, #0x80 - lsls r2, r2, #0xd - movs r3, #0x80 - lsls r3, r3, #0xe - adds r1, r4, #0 - bl PositionRelative - b _0803A310 - .align 2, 0 -_0803A2C8: .4byte gEntCount -_0803A2CC: - movs r0, #0x38 - movs r1, #1 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - str r1, [r4, #0x54] - movs r0, #0x44 - movs r1, #3 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - str r1, [r4, #0x74] - movs r0, #0x7e - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - str r4, [r1, #0x50] - ldr r0, [r4, #0x54] - str r0, [r1, #0x54] - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x50] - ldr r2, _0803A34C @ =0xFFF00000 - movs r3, #0x80 - lsls r3, r3, #0xe - adds r1, r4, #0 - bl PositionRelative -_0803A310: - ldr r0, _0803A350 @ =gScreenTransition - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #0 - beq _0803A354 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r2, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - adds r0, r1, #0 - ands r0, r2 - movs r3, #1 - orrs r0, r3 - strb r0, [r4, #0x18] - ldr r2, [r4, #0x54] - ldrb r0, [r2, #0x18] - ands r1, r0 - orrs r1, r3 - strb r1, [r2, #0x18] - adds r0, r4, #0 - movs r1, #0x10 - bl InitializeAnimation - b _0803A360 - .align 2, 0 -_0803A34C: .4byte 0xFFF00000 -_0803A350: .4byte gScreenTransition -_0803A354: - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation -_0803A360: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803A364 -sub_0803A364: @ 0x0803A364 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A3A0 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - ldrb r0, [r4, #0xd] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0xb - bls _0803A394 - b _0803A52C -_0803A394: - lsls r0, r1, #2 - ldr r1, _0803A3A4 @ =_0803A3A8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803A3A0: .4byte gUnk_080CED6C -_0803A3A4: .4byte _0803A3A8 -_0803A3A8: @ jump table - .4byte _0803A546 @ case 0 - .4byte _0803A3D8 @ case 1 - .4byte _0803A546 @ case 2 - .4byte _0803A3FA @ case 3 - .4byte _0803A418 @ case 4 - .4byte _0803A434 @ case 5 - .4byte _0803A44E @ case 6 - .4byte _0803A468 @ case 7 - .4byte _0803A49A @ case 8 - .4byte _0803A4B2 @ case 9 - .4byte _0803A4CC @ case 10 - .4byte _0803A4FA @ case 11 -_0803A3D8: - movs r0, #2 - strb r0, [r4, #0xd] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - ldrb r1, [r2, #0x19] - movs r0, #0xd - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2, #0x19] - b _0803A546 -_0803A3FA: - movs r0, #4 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #8 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x19] - movs r0, #0xd - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x19] - b _0803A546 -_0803A418: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803A42E - b _0803A546 -_0803A42E: - movs r0, #5 - strb r0, [r4, #0xd] - b _0803A546 -_0803A434: - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - bne _0803A446 - adds r0, r4, #0 - bl sub_0806F69C - b _0803A546 -_0803A446: - movs r0, #0 - strb r0, [r4, #0xb] - movs r0, #6 - b _0803A516 -_0803A44E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803A546 - movs r0, #7 - strb r0, [r4, #0xd] - adds r0, r4, #0 - movs r1, #5 - bl InitializeAnimation - b _0803A546 -_0803A468: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803A546 - movs r0, #8 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #0xc - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x54] - movs r1, #8 - bl InitAnimationForceUpdate - movs r0, #0xb7 - lsls r0, r0, #1 - bl SoundReq - b _0803A546 -_0803A49A: - adds r0, r4, #0 - bl sub_0803B55C - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803A546 - movs r0, #9 - b _0803A516 -_0803A4B2: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803A546 - movs r0, #0xa - strb r0, [r4, #0xd] - ldr r0, [r4, #0x54] - movs r1, #6 - bl InitAnimationForceUpdate - b _0803A546 -_0803A4CC: - adds r0, r4, #0 - bl sub_0803B55C - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803A546 - movs r0, #0xb - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #0xf - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - b _0803A546 -_0803A4FA: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803A546 - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _0803A51E - movs r0, #0xc -_0803A516: - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] - b _0803A546 -_0803A51E: - movs r0, #1 - strb r0, [r4, #0xb] - movs r0, #6 - strb r0, [r4, #0xd] - movs r0, #0xa - strb r0, [r4, #0xe] - b _0803A546 -_0803A52C: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803A546 - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - bl sub_0803B4D4 -_0803A546: - pop {r4, pc} - - thumb_func_start sub_0803A548 -sub_0803A548: @ 0x0803A548 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803B5C0 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r2, _0803A588 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - bne _0803A586 - adds r0, r4, #0 - bl sub_0806F69C -_0803A586: - pop {r4, pc} - .align 2, 0 -_0803A588: .4byte gUnk_080CED6C - - thumb_func_start sub_0803A58C -sub_0803A58C: @ 0x0803A58C - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A5C4 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - beq _0803A5C8 - adds r0, r4, #0 - bl sub_0803B59C - b _0803A5CE - .align 2, 0 -_0803A5C4: .4byte gUnk_080CED6C -_0803A5C8: - adds r0, r4, #0 - bl sub_0806F69C -_0803A5CE: - pop {r4, pc} - - thumb_func_start sub_0803A5D0 -sub_0803A5D0: @ 0x0803A5D0 - push {lr} - movs r1, #5 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - ldr r3, _0803A608 @ =gUnk_080CED6C - ldr r1, [r0, #0x50] - ldrb r1, [r1, #0xf] - lsrs r1, r1, #4 - adds r1, #3 - ldrb r2, [r0, #0xa] - lsls r2, r2, #1 - adds r1, r1, r2 - movs r2, #7 - ands r1, r2 - adds r1, r1, r3 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r1, #4 - strh r1, [r0, #0x36] - movs r1, #5 - bl InitializeAnimation - pop {pc} - .align 2, 0 -_0803A608: .4byte gUnk_080CED6C - - thumb_func_start sub_0803A60C -sub_0803A60C: @ 0x0803A60C - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A65C @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803A658 - movs r0, #6 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0xa - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x54] - movs r1, #8 - bl InitAnimationForceUpdate -_0803A658: - pop {r4, pc} - .align 2, 0 -_0803A65C: .4byte gUnk_080CED6C - - thumb_func_start sub_0803A660 -sub_0803A660: @ 0x0803A660 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - adds r5, r0, #0 - adds r5, #0x5a - ldrb r1, [r5] - movs r6, #0x80 - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - beq _0803A6A8 - ldrh r2, [r4, #0x36] - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #0x50 - rsbs r0, r0, #0 - cmp r1, r0 - ble _0803A688 - subs r0, r2, #2 - b _0803A6DC -_0803A688: - movs r1, #0 - movs r0, #7 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - ldr r1, _0803A6A4 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - movs r0, #0xa0 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - b _0803A6DE - .align 2, 0 -_0803A6A4: .4byte gPlayerEntity -_0803A6A8: - adds r0, r4, #0 - bl sub_0803B55C - ldrb r1, [r5] - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - beq _0803A6BE - ldr r0, _0803A6E0 @ =0x00000157 - bl SoundReq -_0803A6BE: - ldr r2, _0803A6E4 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 -_0803A6DC: - strh r0, [r4, #0x36] -_0803A6DE: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803A6E0: .4byte 0x00000157 -_0803A6E4: .4byte gUnk_080CED6C - - thumb_func_start sub_0803A6E8 -sub_0803A6E8: @ 0x0803A6E8 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803B610 - cmp r0, #0 - beq _0803A6FE - movs r0, #8 - strb r0, [r4, #0xc] - movs r0, #0xa - strb r0, [r4, #0xe] - b _0803A71E -_0803A6FE: - adds r0, r4, #0 - bl sub_0803B63C - adds r0, r4, #0 - bl sub_0806F69C - ldr r0, [r4, #0x50] - movs r1, #0x32 - ldrsh r0, [r0, r1] - adds r1, r0, #0 - adds r1, #8 - movs r2, #0x32 - ldrsh r0, [r4, r2] - cmp r1, r0 - ble _0803A71E - strh r1, [r4, #0x32] -_0803A71E: - pop {r4, pc} - - thumb_func_start sub_0803A720 -sub_0803A720: @ 0x0803A720 - 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 _0803A73C - movs r0, #9 - strb r0, [r1, #0xc] - adds r0, r1, #0 - movs r1, #0x16 - bl sub_0803B8E8 -_0803A73C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803A740 -sub_0803A740: @ 0x0803A740 - push {lr} - adds r3, r0, #0 - ldrh r0, [r3, #0x36] - adds r0, #4 - strh r0, [r3, #0x36] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _0803A77E - movs r0, #0 - strh r0, [r3, #0x36] - movs r0, #0xa - strb r0, [r3, #0xc] - strb r0, [r3, #0xe] - ldr r1, [r3, #0x50] - adds r1, #0x7d - ldrb r2, [r1] - movs r0, #0x40 - orrs r0, r2 - strb r0, [r1] - adds r0, r3, #0 - movs r1, #0x13 - bl sub_0803B8E8 - movs r0, #0xa - movs r1, #0 - bl sub_08080964 - movs r0, #0xac - lsls r0, r0, #1 - bl SoundReq -_0803A77E: - pop {pc} - - thumb_func_start sub_0803A780 -sub_0803A780: @ 0x0803A780 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803A7AA - adds r1, r2, #0 - adds r1, #0x7c - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - ands r0, r3 - cmp r0, #0 - beq _0803A7A6 - movs r0, #6 - b _0803A7A8 -_0803A7A6: - movs r0, #0xb -_0803A7A8: - strb r0, [r2, #0xc] -_0803A7AA: - pop {pc} - - thumb_func_start sub_0803A7AC -sub_0803A7AC: @ 0x0803A7AC - push {lr} - adds r2, r0, #0 - ldrh r3, [r2, #0x36] - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #6 - rsbs r0, r0, #0 - cmp r1, r0 - ble _0803A7C4 - subs r0, r3, #1 - strh r0, [r2, #0x36] - b _0803A7C8 -_0803A7C4: - movs r0, #0xc - strb r0, [r2, #0xc] -_0803A7C8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803A7CC -sub_0803A7CC: @ 0x0803A7CC - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A808 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - beq _0803A80C - movs r0, #0xd - strb r0, [r4, #0xc] - ldr r0, [r4, #0x54] - movs r1, #6 - bl InitAnimationForceUpdate - b _0803A812 - .align 2, 0 -_0803A808: .4byte gUnk_080CED6C -_0803A80C: - adds r0, r4, #0 - bl sub_0806F69C -_0803A812: - pop {r4, pc} - - thumb_func_start sub_0803A814 -sub_0803A814: @ 0x0803A814 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A868 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B55C - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803A864 - movs r0, #0xe - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x12 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation -_0803A864: - pop {r4, pc} - .align 2, 0 -_0803A868: .4byte gUnk_080CED6C - - thumb_func_start sub_0803A86C -sub_0803A86C: @ 0x0803A86C - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A8B4 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803A8B2 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - bl sub_0803B59C -_0803A8B2: - pop {r4, pc} - .align 2, 0 -_0803A8B4: .4byte gUnk_080CED6C - - thumb_func_start sub_0803A8B8 -sub_0803A8B8: @ 0x0803A8B8 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #0x10 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - strb r1, [r4, #0x15] - movs r0, #0x80 - strh r0, [r4, #0x24] - ldr r2, _0803A904 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - movs r1, #6 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #1 - bl InitAnimationForceUpdate - ldr r0, _0803A908 @ =0x00000153 - bl SoundReq - pop {r4, pc} - .align 2, 0 -_0803A904: .4byte gUnk_080CED6C -_0803A908: .4byte 0x00000153 - - thumb_func_start sub_0803A90C -sub_0803A90C: @ 0x0803A90C - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A974 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0803B55C - adds r0, r4, #0 - bl sub_0806F69C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803A970 - movs r0, #0x11 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - lsls r0, r0, #4 - adds r0, #8 - strb r0, [r4, #0x15] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - adds r0, r4, #0 - movs r1, #7 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #2 - bl InitAnimationForceUpdate -_0803A970: - pop {r4, pc} - .align 2, 0 -_0803A974: .4byte gUnk_080CED6C - - thumb_func_start sub_0803A978 -sub_0803A978: @ 0x0803A978 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803A9FC @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0803B55C - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - ands r0, r1 - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0803A9C2 - adds r0, r4, #0 - movs r1, #0x10 - bl sub_08004596 -_0803A9C2: - adds r0, r4, #0 - bl sub_0806F69C - ldrb r0, [r4, #0x15] - cmp r0, #0x10 - bne _0803A9F8 - movs r0, #0x12 - strb r0, [r4, #0xc] - movs r0, #3 - strb r0, [r4, #0xe] - ldrb r2, [r4, #0x10] - movs r1, #0x7f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r4, #0x10] - ldr r2, [r4, #0x74] - ldrb r0, [r2, #0x10] - ands r1, r0 - strb r1, [r2, #0x10] - adds r0, r4, #0 - movs r1, #8 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #3 - bl InitAnimationForceUpdate -_0803A9F8: - pop {r4, pc} - .align 2, 0 -_0803A9FC: .4byte gUnk_080CED6C - - thumb_func_start sub_0803AA00 -sub_0803AA00: @ 0x0803AA00 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _0803AA90 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B870 - cmp r0, #0 - bne _0803AA8E - ldrb r1, [r4, #0xa] - movs r0, #1 - eors r0, r1 - lsls r0, r0, #4 - adds r5, r0, #0 - adds r5, #8 - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - ands r0, r1 - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0803AA54 - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08004596 -_0803AA54: - adds r0, r4, #0 - bl sub_0806F69C - ldrb r0, [r4, #0x15] - cmp r0, r5 - beq _0803AA6E - ldr r0, _0803AA94 @ =gPlayerEntity - movs r2, #0x32 - ldrsh r1, [r4, r2] - movs r2, #0x32 - ldrsh r0, [r0, r2] - cmp r1, r0 - blt _0803AA8E -_0803AA6E: - movs r0, #0x13 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x17 - ands r0, r1 - strb r0, [r4, #0x18] - strb r5, [r4, #0x15] - ldr r0, _0803AA94 @ =gPlayerEntity - ldrh r1, [r0, #0x2e] - adds r0, r4, #0 - adds r0, #0x80 - strh r1, [r0] - ldr r0, [r4, #0x54] - movs r1, #4 - bl InitAnimationForceUpdate -_0803AA8E: - pop {r4, r5, pc} - .align 2, 0 -_0803AA90: .4byte gUnk_080CED6C -_0803AA94: .4byte gPlayerEntity - - thumb_func_start sub_0803AA98 -sub_0803AA98: @ 0x0803AA98 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803AB0C @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B870 - cmp r0, #0 - bne _0803AB0A - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - bl sub_0803B6F4 - cmp r0, #0 - beq _0803AB0A - movs r0, #0x14 - strb r0, [r4, #0xc] - movs r0, #0x40 - strh r0, [r4, #0x24] - adds r0, r4, #0 - movs r1, #0xa - bl InitializeAnimation - ldr r2, [r4, #0x74] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - ldr r2, [r4, #0x54] - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x13 - strb r0, [r1] - adds r0, r2, #0 - movs r1, #5 - bl InitAnimationForceUpdate - movs r0, #0xb7 - lsls r0, r0, #1 - bl SoundReq -_0803AB0A: - pop {r4, pc} - .align 2, 0 -_0803AB0C: .4byte gUnk_080CED6C - - thumb_func_start sub_0803AB10 -sub_0803AB10: @ 0x0803AB10 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803AB58 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - bl sub_0803B55C - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803AB56 - movs r0, #0x15 - strb r0, [r4, #0xc] - movs r0, #0xf - strb r0, [r4, #0xe] -_0803AB56: - pop {r4, pc} - .align 2, 0 -_0803AB58: .4byte gUnk_080CED6C - - thumb_func_start sub_0803AB5C -sub_0803AB5C: @ 0x0803AB5C - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803ABB0 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803ABAC - movs r0, #0x16 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x1a - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0xb - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #6 - bl InitAnimationForceUpdate -_0803ABAC: - pop {r4, pc} - .align 2, 0 -_0803ABB0: .4byte gUnk_080CED6C - - thumb_func_start sub_0803ABB4 -sub_0803ABB4: @ 0x0803ABB4 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803AC18 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0803B55C - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803AC14 - movs r0, #0x17 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - adds r0, r4, #0 - movs r1, #0x10 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #0 - bl InitAnimationForceUpdate -_0803AC14: - pop {r4, pc} - .align 2, 0 -_0803AC18: .4byte gUnk_080CED6C - - thumb_func_start sub_0803AC1C -sub_0803AC1C: @ 0x0803AC1C - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803AC54 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - beq _0803AC58 - adds r0, r4, #0 - bl sub_0803B59C - b _0803AC5E - .align 2, 0 -_0803AC54: .4byte gUnk_080CED6C -_0803AC58: - adds r0, r4, #0 - bl sub_0806F69C -_0803AC5E: - pop {r4, pc} - - thumb_func_start sub_0803AC60 -sub_0803AC60: @ 0x0803AC60 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803ACA8 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0803ACB4 - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - beq _0803ACAC - movs r0, #0x19 - strb r0, [r4, #0xc] - movs r0, #0 - strb r0, [r4, #0xd] - movs r0, #0x1e - b _0803ACB6 - .align 2, 0 -_0803ACA8: .4byte gUnk_080CED6C -_0803ACAC: - adds r0, r4, #0 - bl sub_0806F69C - b _0803ACB8 -_0803ACB4: - subs r0, #1 -_0803ACB6: - strb r0, [r4, #0xe] -_0803ACB8: - adds r0, r4, #0 - bl sub_0803B824 - pop {r4, pc} - - thumb_func_start sub_0803ACC0 -sub_0803ACC0: @ 0x0803ACC0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xd] - subs r0, #1 - cmp r0, #4 - bhi _0803ACF0 - lsls r0, r0, #2 - ldr r1, _0803ACD8 @ =_0803ACDC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803ACD8: .4byte _0803ACDC -_0803ACDC: @ jump table - .4byte _0803AD02 @ case 0 - .4byte _0803AD1A @ case 1 - .4byte _0803AD4A @ case 2 - .4byte _0803AD5C @ case 3 - .4byte _0803AD74 @ case 4 -_0803ACF0: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803ADA4 - movs r0, #1 - strb r0, [r4, #0xd] - b _0803ADA4 -_0803AD02: - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x20 - rsbs r1, r1, #0 - cmp r0, r1 - bge _0803ADA4 - movs r0, #2 - strb r0, [r4, #0xd] - b _0803ADA4 -_0803AD1A: - ldrh r0, [r4, #0x36] - adds r0, #4 - strh r0, [r4, #0x36] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _0803ADA4 - movs r0, #0 - strh r0, [r4, #0x36] - movs r0, #0xc - strb r0, [r4, #0xe] - movs r0, #3 - strb r0, [r4, #0xd] - movs r0, #8 - movs r1, #0 - bl sub_08080964 - movs r0, #0xac - lsls r0, r0, #1 - bl SoundReq - adds r0, r4, #0 - bl sub_0803B804 - b _0803ADA4 -_0803AD4A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803ADA4 - movs r0, #4 - strb r0, [r4, #0xd] - b _0803ADA4 -_0803AD5C: - ldrh r0, [r4, #0x36] - subs r0, #2 - strh r0, [r4, #0x36] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x28 - rsbs r1, r1, #0 - cmp r0, r1 - bge _0803ADA4 - movs r0, #5 - strb r0, [r4, #0xd] - b _0803ADA4 -_0803AD74: - ldrh r0, [r4, #0x36] - adds r0, #4 - strh r0, [r4, #0x36] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _0803ADA4 - movs r0, #0 - strh r0, [r4, #0x36] - movs r0, #0x1a - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - movs r0, #0x1e - movs r1, #0 - bl sub_08080964 - movs r0, #0xac - lsls r0, r0, #1 - bl SoundReq - adds r0, r4, #0 - bl sub_0803B804 - b _0803ADAA -_0803ADA4: - adds r0, r4, #0 - bl sub_0803B824 -_0803ADAA: - pop {r4, pc} - - thumb_func_start sub_0803ADAC -sub_0803ADAC: @ 0x0803ADAC - 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 _0803ADEC - movs r0, #0x16 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x1a - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r2, [r4, #0x74] - ldrb r0, [r2, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r0, r4, #0 - movs r1, #0xb - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #6 - bl InitAnimationForceUpdate - bl sub_0803B798 - b _0803ADF2 -_0803ADEC: - adds r0, r4, #0 - bl sub_0803B824 -_0803ADF2: - pop {r4, pc} - - thumb_func_start sub_0803ADF4 -sub_0803ADF4: @ 0x0803ADF4 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803AE44 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803AE42 - movs r0, #0x1c - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #0x22 - ands r0, r1 - strb r0, [r4, #0x18] -_0803AE42: - pop {r4, pc} - .align 2, 0 -_0803AE44: .4byte gUnk_080CED6C - - thumb_func_start sub_0803AE48 -sub_0803AE48: @ 0x0803AE48 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803AEAC @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0803AE82 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803AEB0 -_0803AE82: - ldr r0, [r4, #0x50] - adds r0, #0x7d - ldrb r1, [r0] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - beq _0803AEB0 - movs r0, #0x1d - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x21 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - b _0803AEC0 - .align 2, 0 -_0803AEAC: .4byte gUnk_080CED6C -_0803AEB0: - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - bne _0803AEC0 - adds r0, r4, #0 - bl sub_0806F69C -_0803AEC0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803AEC4 -sub_0803AEC4: @ 0x0803AEC4 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803AF14 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803AF10 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - bl sub_0803B59C -_0803AF10: - pop {r4, pc} - .align 2, 0 -_0803AF14: .4byte gUnk_080CED6C - - thumb_func_start sub_0803AF18 -sub_0803AF18: @ 0x0803AF18 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x1f - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #5 - bl InitializeAnimation - ldr r2, _0803AF4C @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - pop {r4, pc} - .align 2, 0 -_0803AF4C: .4byte gUnk_080CED6C - - thumb_func_start sub_0803AF50 -sub_0803AF50: @ 0x0803AF50 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803AF7A - movs r0, #0x20 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x24 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x54] - movs r1, #8 - bl InitAnimationForceUpdate -_0803AF7A: - pop {r4, pc} - - thumb_func_start sub_0803AF7C -sub_0803AF7C: @ 0x0803AF7C - push {r4, lr} - adds r4, r0, #0 - bl sub_0803B55C - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803AF9A - movs r0, #0x21 - strb r0, [r4, #0xc] - movs r0, #0xf - strb r0, [r4, #0xe] -_0803AF9A: - pop {r4, pc} - - thumb_func_start sub_0803AF9C -sub_0803AF9C: @ 0x0803AF9C - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - cmp r0, #0 - beq _0803AFAA - subs r0, #1 - b _0803AFC4 -_0803AFAA: - ldrh r3, [r2, #0x36] - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #0x20 - rsbs r0, r0, #0 - cmp r1, r0 - ble _0803AFBE - subs r0, r3, #2 - strh r0, [r2, #0x36] - b _0803AFC6 -_0803AFBE: - movs r0, #0x22 - strb r0, [r2, #0xc] - movs r0, #0xa -_0803AFC4: - strb r0, [r2, #0xe] -_0803AFC6: - pop {pc} - - thumb_func_start sub_0803AFC8 -sub_0803AFC8: @ 0x0803AFC8 - 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 _0803AFDC - movs r0, #0x23 - strb r0, [r1, #0xc] -_0803AFDC: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803AFE0 -sub_0803AFE0: @ 0x0803AFE0 - push {lr} - adds r3, r0, #0 - ldrh r1, [r3, #0x36] - movs r2, #0x36 - ldrsh r0, [r3, r2] - cmp r0, #0 - bge _0803AFF4 - adds r0, r1, #4 - strh r0, [r3, #0x36] - b _0803B018 -_0803AFF4: - movs r2, #0 - movs r0, #0x24 - strb r0, [r3, #0xc] - movs r0, #0xf0 - strb r0, [r3, #0xe] - adds r1, r3, #0 - adds r1, #0x84 - movs r0, #3 - strb r0, [r1] - strh r2, [r3, #0x36] - movs r0, #0xa0 - movs r1, #0 - bl sub_08080964 - movs r0, #0xac - lsls r0, r0, #1 - bl SoundReq -_0803B018: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803B01C -sub_0803B01C: @ 0x0803B01C - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r1, r0, #1 - strb r1, [r2, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803B032 - movs r0, #0x25 - strb r0, [r2, #0xc] - b _0803B048 -_0803B032: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x46 - bls _0803B048 - movs r0, #0xf - ands r1, r0 - cmp r1, #0 - bne _0803B048 - adds r0, r2, #0 - bl sub_0803B724 -_0803B048: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803B04C -sub_0803B04C: @ 0x0803B04C - push {lr} - adds r2, r0, #0 - ldrh r3, [r2, #0x36] - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #6 - rsbs r0, r0, #0 - cmp r1, r0 - ble _0803B064 - subs r0, r3, #1 - strh r0, [r2, #0x36] - b _0803B070 -_0803B064: - movs r0, #0x26 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x54] - movs r1, #6 - bl InitAnimationForceUpdate -_0803B070: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803B074 -sub_0803B074: @ 0x0803B074 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803B0D0 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B55C - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803B0CC - movs r0, #0x27 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x2b - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #0 - bl InitAnimationForceUpdate -_0803B0CC: - pop {r4, pc} - .align 2, 0 -_0803B0D0: .4byte gUnk_080CED6C - - thumb_func_start sub_0803B0D4 -sub_0803B0D4: @ 0x0803B0D4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803B0FE - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - bl sub_0803B59C -_0803B0FE: - pop {r4, pc} - - thumb_func_start sub_0803B100 -sub_0803B100: @ 0x0803B100 - push {lr} - adds r2, r0, #0 - movs r0, #0x29 - strb r0, [r2, #0xc] - movs r0, #0xa0 - lsls r0, r0, #9 - str r0, [r2, #0x20] - ldrb r0, [r2, #0xa] - cmp r0, #0 - bne _0803B11C - ldr r0, _0803B118 @ =gUnk_080FD364 - b _0803B11E - .align 2, 0 -_0803B118: .4byte gUnk_080FD364 -_0803B11C: - ldr r0, _0803B13C @ =gUnk_080FD374 -_0803B11E: - str r0, [r2, #0x48] - ldr r0, [r2, #0x74] - movs r1, #3 - strb r1, [r0, #0xc] - adds r0, #0x74 - movs r1, #0x20 - strb r1, [r0] - ldr r0, [r2, #0x54] - movs r1, #9 - bl InitAnimationForceUpdate - ldr r0, _0803B140 @ =0x0000014F - bl SoundReq - pop {pc} - .align 2, 0 -_0803B13C: .4byte gUnk_080FD374 -_0803B140: .4byte 0x0000014F - - thumb_func_start sub_0803B144 -sub_0803B144: @ 0x0803B144 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - bl UpdateAnimationSingleFrame - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _0803B178 - movs r0, #0x2a - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0x16 - bl InitializeAnimation - adds r0, r4, #0 - movs r1, #0x14 - bl sub_0803B8E8 - movs r0, #8 - movs r1, #0 - bl sub_08080964 -_0803B178: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803B17C -sub_0803B17C: @ 0x0803B17C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803B1B4 - movs r0, #0x2b - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x18 - strb r0, [r1] - adds r1, #6 - movs r0, #0xff - strb r0, [r1] - adds r1, #0x39 - movs r0, #0x96 - lsls r0, r0, #2 - strh r0, [r1] -_0803B1B4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803B1B8 -sub_0803B1B8: @ 0x0803B1B8 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803B1D4 - adds r0, r5, #0 - bl GetNextFrame - ldr r0, [r5, #0x54] - bl UpdateAnimationSingleFrame -_0803B1D4: - adds r0, r5, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0xf4 - bhi _0803B2B8 - movs r0, #0x32 - strb r0, [r5, #0xc] - adds r1, r5, #0 - adds r1, #0x7e - ldr r0, _0803B284 @ =0x000005DC - strh r0, [r1] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r5, #0x18] - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x14 - strb r0, [r1] - adds r0, r5, #0 - movs r1, #0x51 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _0803B23A - ldr r0, [r5, #0x48] - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r4, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - ldr r0, [r5, #0x48] - ldrb r0, [r0, #1] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] -_0803B23A: - movs r0, #0 - movs r1, #0x5e - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0803B268 - movs r0, #0 - strb r0, [r4, #0xe] - movs r0, #0x90 - strb r0, [r4, #0x15] - ldr r0, [r5, #0x48] - movs r2, #0 - ldrsb r2, [r0, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r0, r3] - lsls r3, r3, #0x10 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionRelative -_0803B268: - ldr r4, [r5, #0x74] - adds r1, r4, #0 - adds r1, #0x74 - movs r0, #0x40 - strb r0, [r1] - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x80 - ldrb r1, [r0] - ldrb r0, [r5, #0xa] - cmp r0, #0 - bne _0803B288 - movs r0, #4 - b _0803B28A - .align 2, 0 -_0803B284: .4byte 0x000005DC -_0803B288: - movs r0, #8 -_0803B28A: - orrs r1, r0 - adds r0, r4, #0 - adds r0, #0x80 - strb r1, [r0] - movs r0, #0xc - ands r0, r1 - cmp r0, #0xc - bne _0803B2CE - movs r0, #0xb - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - movs r0, #0 - str r0, [r4, #0x20] - ldr r0, [r4, #0x74] - adds r0, #0x7e - movs r1, #0xe1 - lsls r1, r1, #3 - strh r1, [r0] - ldr r0, [r4, #0x78] - adds r0, #0x7e - strh r1, [r0] - b _0803B2CE -_0803B2B8: - adds r1, r5, #0 - adds r1, #0x7e - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803B2CE - adds r0, r5, #0 - bl sub_0803B6A4 -_0803B2CE: - pop {r4, r5, pc} - - thumb_func_start sub_0803B2D0 -sub_0803B2D0: @ 0x0803B2D0 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803B30A - movs r2, #0 - movs r0, #0x2d - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x31 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x74] - movs r1, #2 - strb r1, [r0, #0xc] - adds r1, r0, #0 - adds r1, #0x74 - strb r2, [r1] - adds r1, #4 - strh r2, [r1] - movs r1, #3 - bl InitializeAnimation -_0803B30A: - pop {r4, pc} - - thumb_func_start sub_0803B30C -sub_0803B30C: @ 0x0803B30C - push {r4, lr} - adds r2, r0, #0 - ldr r4, [r2, #0x74] - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803B334 - movs r0, #0x2e - strb r0, [r2, #0xc] - adds r0, r2, #0 - movs r1, #0x13 - bl sub_0803B8E8 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_0803B334: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803B338 -sub_0803B338: @ 0x0803B338 - push {lr} - adds r2, r0, #0 - ldrh r3, [r2, #0x36] - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #0xa - rsbs r0, r0, #0 - cmp r1, r0 - ble _0803B350 - subs r0, r3, #1 - strh r0, [r2, #0x36] - b _0803B358 -_0803B350: - movs r0, #0x2f - strb r0, [r2, #0xc] - movs r0, #0xf - strb r0, [r2, #0xe] -_0803B358: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803B35C -sub_0803B35C: @ 0x0803B35C - push {lr} - adds r3, r0, #0 - ldr r2, _0803B394 @ =gUnk_080CED6C - ldr r0, [r3, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r3, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r3, #0x36] - ldrb r0, [r3, #0xe] - subs r0, #1 - strb r0, [r3, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803B390 - movs r0, #0x30 - strb r0, [r3, #0xc] -_0803B390: - pop {pc} - .align 2, 0 -_0803B394: .4byte gUnk_080CED6C - - thumb_func_start sub_0803B398 -sub_0803B398: @ 0x0803B398 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _0803B3E8 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl sub_0803B4E4 - cmp r0, #0 - beq _0803B3EC - movs r0, #0x31 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0x35 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #0 - bl InitAnimationForceUpdate - b _0803B3F2 - .align 2, 0 -_0803B3E8: .4byte gUnk_080CED6C -_0803B3EC: - adds r0, r4, #0 - bl sub_0806F69C -_0803B3F2: - pop {r4, pc} - - thumb_func_start sub_0803B3F4 -sub_0803B3F4: @ 0x0803B3F4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _0803B440 @ =gUnk_080CED6C - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xf] - lsrs r0, r0, #4 - adds r0, #3 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - adds r0, r0, r1 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #4 - strh r0, [r4, #0x36] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803B47C - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x17 - strb r0, [r1] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0803B448 - ldr r0, _0803B444 @ =gUnk_080FD35C - b _0803B44A - .align 2, 0 -_0803B440: .4byte gUnk_080CED6C -_0803B444: .4byte gUnk_080FD35C -_0803B448: - ldr r0, _0803B468 @ =gUnk_080FD36C -_0803B44A: - str r0, [r4, #0x48] - ldr r0, [r4, #0x50] - ldrb r2, [r4, #0xa] - movs r1, #2 - cmp r2, #0 - bne _0803B458 - movs r1, #1 -_0803B458: - adds r0, #0x80 - ldrb r3, [r0] - adds r5, r0, #0 - cmp r2, #0 - bne _0803B46C - movs r0, #0x10 - b _0803B46E - .align 2, 0 -_0803B468: .4byte gUnk_080FD36C -_0803B46C: - movs r0, #0x20 -_0803B46E: - orrs r1, r0 - adds r0, r3, #0 - bics r0, r1 - strb r0, [r5] - adds r0, r4, #0 - bl sub_0803B59C -_0803B47C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803B480 -sub_0803B480: @ 0x0803B480 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7e - ldrh r1, [r0] - movs r0, #0x1f - ands r0, r1 - cmp r0, #0 - bne _0803B4B6 - movs r0, #0x2d - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0803B4B6 - ldr r0, _0803B4D0 @ =gUnk_080CFD08 - ldrb r1, [r4, #0xa] - adds r1, r1, r0 - movs r2, #0 - ldrsb r2, [r1, r2] - lsls r2, r2, #0x10 - adds r0, r4, #0 - adds r1, r3, #0 - movs r3, #0 - bl PositionRelative -_0803B4B6: - adds r1, r4, #0 - adds r1, #0x7e - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803B4CC - adds r0, r4, #0 - bl sub_0803B6A4 -_0803B4CC: - pop {r4, pc} - .align 2, 0 -_0803B4D0: .4byte gUnk_080CFD08 - - thumb_func_start sub_0803B4D4 -sub_0803B4D4: @ 0x0803B4D4 - push {lr} - movs r1, #3 - strb r1, [r0, #0xc] - movs r1, #0x10 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803B4E4 -sub_0803B4E4: @ 0x0803B4E4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r2, [r4, #0x50] - movs r0, #0x2e - ldrsh r3, [r2, r0] - ldr r1, _0803B52C @ =gUnk_080CFD0A - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r5, r3, r0 - movs r1, #0x32 - ldrsh r0, [r2, r1] - adds r6, r0, #0 - adds r6, #0x10 - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r6, #0 - movs r3, #2 - bl sub_0806FCB8 - cmp r0, #0 - bne _0803B530 - movs r2, #0x2e - ldrsh r0, [r4, r2] - movs r2, #0x32 - ldrsh r1, [r4, r2] - adds r2, r5, #0 - adds r3, r6, #0 - bl sub_080045D4 - strb r0, [r4, #0x15] - movs r0, #0 - b _0803B536 - .align 2, 0 -_0803B52C: .4byte gUnk_080CFD0A -_0803B530: - strh r5, [r4, #0x2e] - strh r6, [r4, #0x32] - movs r0, #1 -_0803B536: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0803B538 -sub_0803B538: @ 0x0803B538 - push {r4, lr} - adds r4, r0, #0 - ldr r1, [r4, #0x54] - ldr r3, _0803B554 @ =0xFFFF0000 - movs r2, #0 - bl PositionRelative - ldr r1, [r4, #0x74] - ldr r3, _0803B558 @ =0xFFFE0000 - adds r0, r4, #0 - movs r2, #0 - bl PositionRelative - pop {r4, pc} - .align 2, 0 -_0803B554: .4byte 0xFFFF0000 -_0803B558: .4byte 0xFFFE0000 - - thumb_func_start sub_0803B55C -sub_0803B55C: @ 0x0803B55C - push {r4, r5, lr} - ldr r5, [r0, #0x74] - ldr r4, [r0, #0x54] - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r4, #0x5a - ldrb r1, [r4] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0803B588 - adds r0, r5, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #1 - beq _0803B59A - adds r0, r5, #0 - movs r1, #1 - bl InitializeAnimation - b _0803B59A -_0803B588: - adds r0, r5, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0 - beq _0803B59A - adds r0, r5, #0 - movs r1, #0 - bl InitializeAnimation -_0803B59A: - pop {r4, r5, pc} - - thumb_func_start sub_0803B59C -sub_0803B59C: @ 0x0803B59C - push {lr} - movs r3, #2 - strb r3, [r0, #0xc] - ldr r2, [r0, #0x50] - adds r1, r2, #0 - adds r1, #0x7d - ldrb r1, [r1] - ldrb r0, [r0, #0xa] - cmp r0, #0 - bne _0803B5B6 - movs r0, #1 - orrs r1, r0 - b _0803B5B8 -_0803B5B6: - orrs r1, r3 -_0803B5B8: - adds r0, r2, #0 - adds r0, #0x7d - strb r1, [r0] - pop {pc} - - thumb_func_start sub_0803B5C0 -sub_0803B5C0: @ 0x0803B5C0 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0803B5E8 @ =gPlayerEntity - bl GetFacingDirection - adds r2, r0, #0 - cmp r2, #9 - bhi _0803B5D2 - movs r2, #0xa -_0803B5D2: - cmp r2, #0x16 - bls _0803B5D8 - movs r2, #0x16 -_0803B5D8: - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0803B5F0 - ldr r1, _0803B5EC @ =gUnk_080CFD0C - adds r0, r2, #0 - subs r0, #0xa - b _0803B5F6 - .align 2, 0 -_0803B5E8: .4byte gPlayerEntity -_0803B5EC: .4byte gUnk_080CFD0C -_0803B5F0: - ldr r1, _0803B60C @ =gUnk_080CFD0C - movs r0, #0x16 - subs r0, r0, r2 -_0803B5F6: - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, r1 - beq _0803B60A - adds r0, r4, #0 - bl InitializeAnimation -_0803B60A: - pop {r4, pc} - .align 2, 0 -_0803B60C: .4byte gUnk_080CFD0C - - thumb_func_start sub_0803B610 -sub_0803B610: @ 0x0803B610 - push {r4, lr} - ldr r4, _0803B634 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r4, r2] - ldr r3, _0803B638 @ =gUnk_080CFD19 - ldrb r2, [r0, #0xa] - adds r2, r2, r3 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - movs r3, #0x32 - ldrsh r2, [r4, r3] - subs r2, #0xc - movs r3, #8 - bl sub_0806FCB8 - pop {r4, pc} - .align 2, 0 -_0803B634: .4byte gPlayerEntity -_0803B638: .4byte gUnk_080CFD19 - - thumb_func_start sub_0803B63C -sub_0803B63C: @ 0x0803B63C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _0803B680 @ =gPlayerEntity - movs r0, #0x2e - ldrsh r3, [r2, r0] - ldr r1, _0803B684 @ =gUnk_080CFD19 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r3, r3, r0 - movs r1, #0x32 - ldrsh r0, [r2, r1] - adds r5, r0, #0 - subs r5, #0xc - ldrb r0, [r4, #0xe] - adds r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xb4 - bls _0803B688 - movs r2, #0x2e - ldrsh r0, [r4, r2] - movs r2, #0x32 - ldrsh r1, [r4, r2] - adds r2, r3, #0 - adds r3, r5, #0 - bl sub_080045D4 - strb r0, [r4, #0x15] - b _0803B6A0 - .align 2, 0 -_0803B680: .4byte gPlayerEntity -_0803B684: .4byte gUnk_080CFD19 -_0803B688: - movs r1, #0x2e - ldrsh r0, [r4, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - adds r2, r3, #0 - adds r3, r5, #0 - bl sub_080045D4 - - thumb_func_start sub_0803B698 -sub_0803B698: @ 0x0803B698 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 -_0803B6A0: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803B6A4 -sub_0803B6A4: @ 0x0803B6A4 - push {r4, lr} - adds r2, r0, #0 - movs r0, #0x2c - strb r0, [r2, #0xc] - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x14 - strb r0, [r1] - ldr r3, [r2, #0x50] - adds r0, r3, #0 - adds r0, #0x80 - ldrb r1, [r0] - ldrb r0, [r2, #0xa] - cmp r0, #0 - bne _0803B6C6 - movs r0, #0x10 - b _0803B6C8 -_0803B6C6: - movs r0, #0x20 -_0803B6C8: - orrs r1, r0 - adds r0, r3, #0 - adds r0, #0x80 - strb r1, [r0] - ldrb r3, [r0] - ldrb r1, [r2, #0xa] - adds r4, r0, #0 - cmp r1, #0 - bne _0803B6E0 - movs r0, #5 - rsbs r0, r0, #0 - b _0803B6E4 -_0803B6E0: - movs r0, #9 - rsbs r0, r0, #0 -_0803B6E4: - ands r0, r3 - strb r0, [r4] - adds r0, r2, #0 - movs r1, #0x17 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803B6F4 -sub_0803B6F4: @ 0x0803B6F4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xa] - cmp r0, #0 - bne _0803B710 - adds r0, r2, #0 - adds r0, #0x80 - ldrh r1, [r0] - movs r3, #0x2e - ldrsh r0, [r2, r3] - cmp r1, r0 - ble _0803B71E -_0803B70C: - movs r0, #1 - b _0803B720 -_0803B710: - adds r0, r2, #0 - adds r0, #0x80 - ldrh r1, [r0] - movs r3, #0x2e - ldrsh r0, [r2, r3] - cmp r1, r0 - blt _0803B70C -_0803B71E: - movs r0, #0 -_0803B720: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803B724 -sub_0803B724: @ 0x0803B724 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xf] - cmp r0, #2 - bhi _0803B78E - adds r6, r5, #0 - adds r6, #0x84 - ldrb r0, [r6] - cmp r0, #0 - beq _0803B78E - movs r0, #7 - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _0803B78E - movs r0, #1 - strb r0, [r4, #0xb] - bl Random - ldr r2, _0803B790 @ =gUnk_080CFD1B - ldrb r1, [r5, #0xa] - adds r1, r1, r2 - movs r3, #0x70 - adds r2, r0, #0 - ands r2, r3 - ldrb r1, [r1] - adds r2, r2, r1 - ldr r3, _0803B794 @ =gRoomControls - ldrh r1, [r3, #6] - adds r1, r1, r2 - strh r1, [r4, #0x2e] - lsrs r0, r0, #0x10 - movs r1, #7 - ands r0, r1 - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #1 - adds r1, #0x5c - ldrh r3, [r3, #8] - adds r1, r1, r3 - strh r1, [r4, #0x32] - str r5, [r4, #0x50] - adds r0, r4, #0 - bl sub_08016A30 - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] - ldrb r0, [r6] - subs r0, #1 - strb r0, [r6] -_0803B78E: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803B790: .4byte gUnk_080CFD1B -_0803B794: .4byte gRoomControls - - thumb_func_start sub_0803B798 -sub_0803B798: @ 0x0803B798 - ldr r2, _0803B7F4 @ =gPlayerState - movs r1, #0 - movs r0, #0x41 - strb r0, [r2, #2] - strb r1, [r2, #0xa] - ldr r0, [r2, #0x30] - ldr r1, _0803B7F8 @ =0x0000FFEF - ands r0, r1 - str r0, [r2, #0x30] - ldr r3, _0803B7FC @ =gPlayerEntity - ldrb r1, [r3, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r3, #0x10] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r3, #0x20] - movs r2, #0 - ldr r0, _0803B800 @ =0x0000FFF6 - strh r0, [r3, #0x36] - movs r0, #0x10 - strb r0, [r3, #0x15] - movs r0, #4 - strb r0, [r3, #0x14] - movs r0, #0x29 - adds r0, r0, r3 - mov ip, r0 - ldrb r1, [r0] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - mov r1, ip - strb r0, [r1] - adds r0, r3, #0 - adds r0, #0x63 - strb r2, [r0] - movs r0, #0xa0 - lsls r0, r0, #1 - strh r0, [r3, #0x24] - adds r1, r3, #0 - adds r1, #0x3d - movs r0, #0xe2 - strb r0, [r1] - bx lr - .align 2, 0 -_0803B7F4: .4byte gPlayerState -_0803B7F8: .4byte 0x0000FFEF -_0803B7FC: .4byte gPlayerEntity -_0803B800: .4byte 0x0000FFF6 - - thumb_func_start sub_0803B804 -sub_0803B804: @ 0x0803B804 - push {r4, lr} - ldr r4, _0803B820 @ =gPlayerEntity - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0x1e - strb r0, [r1] - subs r0, #0x22 - bl ModHealth - adds r0, r4, #0 - movs r1, #0x7a - bl sub_0800449C - pop {r4, pc} - .align 2, 0 -_0803B820: .4byte gPlayerEntity - - thumb_func_start sub_0803B824 -sub_0803B824: @ 0x0803B824 - push {r4, r5, lr} - adds r5, r0, #0 - bl ResetPlayer - ldr r2, _0803B864 @ =gPlayerState - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1a] - ldr r4, _0803B868 @ =gPlayerEntity - ldr r1, _0803B86C @ =gUnk_080CFD1D - ldrb r0, [r5, #0xa] - adds r0, r0, r1 - movs r2, #0 - ldrsb r2, [r0, r2] - adds r0, r5, #0 - adds r1, r4, #0 - movs r3, #1 - bl sub_0806FA90 - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xfa - strb r0, [r1] - adds r4, #0x29 - ldrb r1, [r4] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4] - pop {r4, r5, pc} - .align 2, 0 -_0803B864: .4byte gPlayerState -_0803B868: .4byte gPlayerEntity -_0803B86C: .4byte gUnk_080CFD1D - - thumb_func_start sub_0803B870 -sub_0803B870: @ 0x0803B870 - push {r4, lr} - adds r3, r0, #0 - ldr r4, [r3, #0x54] - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803B8DC - ldr r0, _0803B8D4 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0803B8DC - movs r0, #0x18 - strb r0, [r3, #0xc] - movs r0, #0x44 - strb r0, [r3, #0xe] - ldrb r1, [r3, #0x18] - subs r0, #0x48 - ands r0, r1 - strb r0, [r3, #0x18] - ldr r1, _0803B8D8 @ =gPlayerEntity - ldrb r2, [r1, #0x10] - movs r0, #0x7f - ands r0, r2 - strb r0, [r1, #0x10] - adds r1, #0x3d - movs r0, #0xf0 - strb r0, [r1] - adds r0, r3, #0 - bl sub_0803B824 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x13 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - movs r0, #0xb7 - lsls r0, r0, #1 - bl SoundReq - movs r0, #1 - b _0803B8E6 - .align 2, 0 -_0803B8D4: .4byte gPlayerState -_0803B8D8: .4byte gPlayerEntity -_0803B8DC: - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x15 - strb r0, [r1] - movs r0, #0 -_0803B8E6: - pop {r4, pc} - - thumb_func_start sub_0803B8E8 -sub_0803B8E8: @ 0x0803B8E8 - ldr r2, [r0, #0x54] - adds r2, #0x3f - strb r1, [r2] - ldr r2, [r0, #0x74] - adds r0, r2, #0 - adds r0, #0x3f - strb r1, [r0] - bx lr - - thumb_func_start sub_0803B8F8 -sub_0803B8F8: @ 0x0803B8F8 - push {lr} - ldr r2, _0803B90C @ =gUnk_080CFD20 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0803B90C: .4byte gUnk_080CFD20 - - thumb_func_start sub_0803B910 -sub_0803B910: @ 0x0803B910 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0803B940 @ =gScreenTransition - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #0 - beq _0803B944 - movs r2, #0 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - adds r0, #0x74 - strb r2, [r0] - adds r0, r4, #0 - movs r1, #0xa - bl sub_0803BA8C - b _0803B950 - .align 2, 0 -_0803B940: .4byte gScreenTransition -_0803B944: - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x74 - movs r0, #0x80 - strb r0, [r1] -_0803B950: - ldrb r1, [r4, #0xa] - subs r1, #2 - movs r0, #1 - ands r1, r0 - lsls r1, r1, #6 - ldrb r2, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset - pop {r4, pc} - - thumb_func_start sub_0803B978 -sub_0803B978: @ 0x0803B978 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xd] - cmp r0, #5 - bhi _0803BA34 - lsls r0, r0, #2 - ldr r1, _0803B98C @ =_0803B990 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803B98C: .4byte _0803B990 -_0803B990: @ jump table - .4byte _0803BA66 @ case 0 - .4byte _0803B9A8 @ case 1 - .4byte _0803B9C0 @ case 2 - .4byte _0803BA46 @ case 3 - .4byte _0803BA14 @ case 4 - .4byte _0803BA40 @ case 5 -_0803B9A8: - movs r1, #0 - movs r0, #2 - strb r0, [r4, #0xd] - strb r0, [r4, #0xe] - movs r0, #0x1e - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x74 - strb r1, [r0] - ldr r0, _0803BA10 @ =0x000001A9 - bl SoundReq -_0803B9C0: - ldrb r1, [r4, #0xf] - adds r0, r4, #0 - bl sub_0803BA8C - adds r0, r4, #0 - adds r0, #0x75 - adds r5, r4, #0 - adds r5, #0x74 - ldrb r1, [r0] - ldrb r0, [r5] - orrs r0, r1 - cmp r0, #0 - bne _0803B9E0 - ldr r0, _0803BA10 @ =0x000001A9 - bl SoundReq -_0803B9E0: - ldrb r0, [r5] - cmp r0, #0 - bne _0803BA66 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803BA66 - movs r0, #2 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xf] - subs r0, #4 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xa - bne _0803BA66 - ldr r0, [r4, #0x50] - ldr r1, [r0, #0x50] - movs r0, #3 - strb r0, [r1, #0xd] - strb r0, [r4, #0xd] - b _0803BA66 - .align 2, 0 -_0803BA10: .4byte 0x000001A9 -_0803BA14: - movs r0, #5 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #9 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x19] - movs r0, #0xd - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r4, #0x19] - b _0803BA46 -_0803BA34: - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x19] - subs r0, #0xf - ands r0, r1 - strb r0, [r4, #0x19] -_0803BA40: - adds r0, r4, #0 - bl GetNextFrame -_0803BA46: - adds r0, r4, #0 - movs r1, #0x10 - bl sub_0803BA8C - adds r1, r4, #0 - adds r1, #0x75 - adds r0, r4, #0 - adds r0, #0x74 - ldrb r1, [r1] - ldrb r0, [r0] - orrs r0, r1 - cmp r0, #0 - bne _0803BA66 - ldr r0, _0803BA68 @ =0x000001A9 - bl SoundReq -_0803BA66: - pop {r4, r5, pc} - .align 2, 0 -_0803BA68: .4byte 0x000001A9 - - thumb_func_start sub_0803BA6C -sub_0803BA6C: @ 0x0803BA6C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0xa - bl sub_0803BA8C - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803BA80 -sub_0803BA80: @ 0x0803BA80 - push {lr} - movs r1, #0xa - bl sub_0803BA8C - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803BA8C -sub_0803BA8C: @ 0x0803BA8C - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - movs r1, #0 - adds r4, r6, #0 - adds r4, #0x74 - ldrb r3, [r4] - movs r2, #0xe0 - ands r2, r3 - cmp r2, #0 - bne _0803BAEC - cmp r3, #0 - bne _0803BAD2 - adds r2, r6, #0 - adds r2, #0x75 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #9 - bls _0803BABA - strb r1, [r2] -_0803BABA: - ldrb r0, [r6, #0xa] - cmp r0, #2 - bne _0803BAC8 - ldr r1, _0803BAC4 @ =gUnk_080CFD30 - b _0803BACA - .align 2, 0 -_0803BAC4: .4byte gUnk_080CFD30 -_0803BAC8: - ldr r1, _0803BAE8 @ =gUnk_080CFD44 -_0803BACA: - ldrb r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] -_0803BAD2: - adds r2, r6, #0 - adds r2, #0x74 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - cmp r5, r0 - bhi _0803BB18 - movs r0, #0 - strb r0, [r2] - b _0803BB18 - .align 2, 0 -_0803BAE8: .4byte gUnk_080CFD44 -_0803BAEC: - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - bne _0803BB18 - movs r0, #0x80 - orrs r0, r3 - strb r0, [r4] - movs r0, #0x20 - ands r2, r0 - cmp r2, #0 - beq _0803BB0C - ldr r1, _0803BB08 @ =gUnk_080CFD58 - b _0803BB0E - .align 2, 0 -_0803BB08: .4byte gUnk_080CFD58 -_0803BB0C: - ldr r1, _0803BB78 @ =gUnk_080CFD5C -_0803BB0E: - ldrb r0, [r6, #0xa] - subs r0, #2 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] -_0803BB18: - cmp r1, #0 - beq _0803BB74 - adds r0, r6, #0 - bl sub_0801D2B4 - ldr r0, [r6, #0x50] - ldr r4, [r0, #0x78] - ldrb r1, [r6, #0x1a] - lsls r1, r1, #0x1c - lsrs r1, r1, #0x1c - ldrb r2, [r4, #0x1a] - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r3, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - ldr r0, [r6, #0x50] - ldr r5, [r0, #0x78] - ldrb r1, [r6, #0x1a] - lsls r1, r1, #0x1c - lsrs r1, r1, #0x18 - ldrb r4, [r5, #0x1a] - movs r2, #0xf - adds r0, r2, #0 - ands r0, r4 - orrs r0, r1 - strb r0, [r5, #0x1a] - ldr r0, [r6, #0x50] - ldr r4, [r0, #0x54] - ldrb r0, [r6, #0x1a] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - ldrb r1, [r4, #0x1a] - ands r3, r1 - orrs r3, r0 - strb r3, [r4, #0x1a] - ldr r0, [r6, #0x50] - ldr r3, [r0, #0x54] - ldrb r0, [r6, #0x1a] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x18 - ldrb r1, [r3, #0x1a] - ands r2, r1 - orrs r2, r0 - strb r2, [r3, #0x1a] -_0803BB74: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803BB78: .4byte gUnk_080CFD5C diff --git a/asm/non_matching/mazaal/sub_0803A188.inc b/asm/non_matching/mazaal/sub_0803A188.inc new file mode 100644 index 00000000..a1161bd4 --- /dev/null +++ b/asm/non_matching/mazaal/sub_0803A188.inc @@ -0,0 +1,105 @@ + + .syntax unified + + push {r4, r5, lr} + adds r4, r0, #0 + ldrb r3, [r4, #0xa] + cmp r3, #1 + bhi _0803A23E + ldrb r0, [r4, #0xc] + cmp r0, #0x2b + beq _0803A210 + adds r0, r4, #0 + adds r0, #0x3d + movs r1, #0 + ldrsb r1, [r0, r1] + adds r5, r0, #0 + cmp r1, #0 + ble _0803A23E + adds r0, #4 + ldrb r0, [r0] + cmp r0, #0x95 + beq _0803A1B2 + cmp r0, #0x8e + bne _0803A23E +_0803A1B2: + movs r0, #0x28 + strb r0, [r4, #0xc] + ldrb r1, [r4, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r4, #0x10] + ldr r2, [r4, #0x50] + adds r0, r2, #0 + adds r0, #0x7d + ldrb r1, [r0] + cmp r3, #0 + bne _0803A1CE + movs r0, #1 + b _0803A1D0 +_0803A1CE: + movs r0, #2 +_0803A1D0: + orrs r1, r0 + adds r0, r2, #0 + adds r0, #0x7d + strb r1, [r0] + adds r0, #3 + ldrb r2, [r0] + ldrb r1, [r4, #0xa] + adds r3, r0, #0 + cmp r1, #0 + bne _0803A1E8 + movs r0, #1 + b _0803A1EA +_0803A1E8: + movs r0, #2 +_0803A1EA: + orrs r0, r2 + strb r0, [r3] + ldr r2, [r4, #0x54] + ldrb r1, [r5] + adds r0, r2, #0 + adds r0, #0x3d + strb r1, [r0] + ldr r2, [r4, #0x74] + ldrb r1, [r5] + adds r0, r2, #0 + adds r0, #0x3d + strb r1, [r0] + ldr r0, _0803A20C @ =0x00000127 + bl SoundReq + b _0803A23E + .align 2, 0 +_0803A20C: .4byte 0x00000127 +_0803A210: + ldr r2, [r4, #0x54] + adds r3, r4, #0 + adds r3, #0x3d + ldrb r1, [r3] + adds r0, r2, #0 + adds r0, #0x3d + strb r1, [r0] + ldr r2, [r4, #0x74] + ldrb r1, [r3] + adds r0, r2, #0 + adds r0, #0x3d + strb r1, [r0] + adds r0, r4, #0 + movs r1, #0x18 + bl InitializeAnimation + ldr r0, [r4, #0x54] + movs r1, #9 + bl InitAnimationForceUpdate + ldr r0, _0803A248 @ =0x00000127 + bl SoundReq +_0803A23E: + ldr r1, _0803A24C @ =gUnk_080CFC14 + adds r0, r4, #0 + bl sub_0804AA30 + pop {r4, r5, pc} + .align 2, 0 +_0803A248: .4byte 0x00000127 +_0803A24C: .4byte gUnk_080CFC14 + + .syntax divided diff --git a/asm/non_matching/mazaal/sub_0803AA98.inc b/asm/non_matching/mazaal/sub_0803AA98.inc new file mode 100644 index 00000000..fa5339dc --- /dev/null +++ b/asm/non_matching/mazaal/sub_0803AA98.inc @@ -0,0 +1,60 @@ + + .syntax unified + + push {r4, lr} + adds r4, r0, #0 + ldr r2, _0803AB0C @ =gUnk_080CED6C + ldr r0, [r4, #0x50] + ldrb r0, [r0, #0xf] + lsrs r0, r0, #4 + adds r0, #3 + ldrb r1, [r4, #0xa] + lsls r1, r1, #1 + adds r0, r0, r1 + movs r1, #7 + ands r0, r1 + adds r0, r0, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, #4 + strh r0, [r4, #0x36] + adds r0, r4, #0 + bl sub_0803B870 + cmp r0, #0 + bne _0803AB0A + adds r0, r4, #0 + bl sub_0806F69C + adds r0, r4, #0 + bl sub_0803B6F4 + cmp r0, #0 + beq _0803AB0A + movs r0, #0x14 + strb r0, [r4, #0xc] + movs r0, #0x40 + strh r0, [r4, #0x24] + adds r0, r4, #0 + movs r1, #0xa + bl InitializeAnimation + ldr r2, [r4, #0x74] + ldrb r1, [r2, #0x10] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2, #0x10] + ldr r2, [r4, #0x54] + adds r1, r2, #0 + adds r1, #0x3f + movs r0, #0x13 + strb r0, [r1] + adds r0, r2, #0 + movs r1, #5 + bl InitAnimationForceUpdate + movs r0, #0xb7 + lsls r0, r0, #1 + bl SoundReq +_0803AB0A: + pop {r4, pc} + .align 2, 0 +_0803AB0C: .4byte gUnk_080CED6C + + .syntax divided diff --git a/asm/non_matching/mazaal/sub_0803BA8C.inc b/asm/non_matching/mazaal/sub_0803BA8C.inc new file mode 100644 index 00000000..3b0fd69f --- /dev/null +++ b/asm/non_matching/mazaal/sub_0803BA8C.inc @@ -0,0 +1,129 @@ + + .syntax unified + + push {r4, r5, r6, lr} + adds r6, r0, #0 + adds r5, r1, #0 + movs r1, #0 + adds r4, r6, #0 + adds r4, #0x74 + ldrb r3, [r4] + movs r2, #0xe0 + ands r2, r3 + cmp r2, #0 + bne _0803BAEC + cmp r3, #0 + bne _0803BAD2 + adds r2, r6, #0 + adds r2, #0x75 + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #9 + bls _0803BABA + strb r1, [r2] +_0803BABA: + ldrb r0, [r6, #0xa] + cmp r0, #2 + bne _0803BAC8 + ldr r1, _0803BAC4 @ =gUnk_080CFD30 + b _0803BACA + .align 2, 0 +_0803BAC4: .4byte gUnk_080CFD30 +_0803BAC8: + ldr r1, _0803BAE8 @ =gUnk_080CFD44 +_0803BACA: + ldrb r0, [r2] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r1, [r0] +_0803BAD2: + adds r2, r6, #0 + adds r2, #0x74 + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] + cmp r5, r0 + bhi _0803BB18 + movs r0, #0 + strb r0, [r2] + b _0803BB18 + .align 2, 0 +_0803BAE8: .4byte gUnk_080CFD44 +_0803BAEC: + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + bne _0803BB18 + movs r0, #0x80 + orrs r0, r3 + strb r0, [r4] + movs r0, #0x20 + ands r2, r0 + cmp r2, #0 + beq _0803BB0C + ldr r1, _0803BB08 @ =gUnk_080CFD58 + b _0803BB0E + .align 2, 0 +_0803BB08: .4byte gUnk_080CFD58 +_0803BB0C: + ldr r1, _0803BB78 @ =gUnk_080CFD5C +_0803BB0E: + ldrb r0, [r6, #0xa] + subs r0, #2 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r1, [r0] +_0803BB18: + cmp r1, #0 + beq _0803BB74 + adds r0, r6, #0 + bl sub_0801D2B4 + ldr r0, [r6, #0x50] + ldr r4, [r0, #0x78] + ldrb r1, [r6, #0x1a] + lsls r1, r1, #0x1c + lsrs r1, r1, #0x1c + ldrb r2, [r4, #0x1a] + movs r3, #0x10 + rsbs r3, r3, #0 + adds r0, r3, #0 + ands r0, r2 + orrs r0, r1 + strb r0, [r4, #0x1a] + ldr r0, [r6, #0x50] + ldr r5, [r0, #0x78] + ldrb r1, [r6, #0x1a] + lsls r1, r1, #0x1c + lsrs r1, r1, #0x18 + ldrb r4, [r5, #0x1a] + movs r2, #0xf + adds r0, r2, #0 + ands r0, r4 + orrs r0, r1 + strb r0, [r5, #0x1a] + ldr r0, [r6, #0x50] + ldr r4, [r0, #0x54] + ldrb r0, [r6, #0x1a] + lsls r0, r0, #0x1c + lsrs r0, r0, #0x1c + ldrb r1, [r4, #0x1a] + ands r3, r1 + orrs r3, r0 + strb r3, [r4, #0x1a] + ldr r0, [r6, #0x50] + ldr r3, [r0, #0x54] + ldrb r0, [r6, #0x1a] + lsls r0, r0, #0x1c + lsrs r0, r0, #0x18 + ldrb r1, [r3, #0x1a] + ands r2, r1 + orrs r2, r0 + strb r2, [r3, #0x1a] +_0803BB74: + pop {r4, r5, r6, pc} + .align 2, 0 +_0803BB78: .4byte gUnk_080CFD5C + .syntax divided diff --git a/data/const/enemy/mazaalBracelet.s b/data/const/enemy/mazaalBracelet.s deleted file mode 100644 index 26632bd9..00000000 --- a/data/const/enemy/mazaalBracelet.s +++ /dev/null @@ -1,109 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - - -gUnk_080CFC14:: @ 080CFC14 - .4byte sub_0803A170 - .4byte sub_0803A188 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte nullsub_167 - -gUnk_080CFC2C:: @ 080CFC2C - .4byte sub_0803A254 - .4byte sub_0803A254 - .4byte sub_0803B8F8 - .4byte sub_0803B8F8 - -gUnk_080CFC3C:: @ 080CFC3C - .4byte sub_0803A274 - .4byte sub_0803A364 - .4byte sub_0803A548 - .4byte sub_0803A58C - .4byte sub_0803A5D0 - .4byte sub_0803A60C - .4byte sub_0803A660 - .4byte sub_0803A6E8 - .4byte sub_0803A720 - .4byte sub_0803A740 - .4byte sub_0803A780 - .4byte sub_0803A7AC - .4byte sub_0803A7CC - .4byte sub_0803A814 - .4byte sub_0803A86C - .4byte sub_0803A8B8 - .4byte sub_0803A90C - .4byte sub_0803A978 - .4byte sub_0803AA00 - .4byte sub_0803AA98 - .4byte sub_0803AB10 - .4byte sub_0803AB5C - .4byte sub_0803ABB4 - .4byte sub_0803AC1C - .4byte sub_0803AC60 - .4byte sub_0803ACC0 - .4byte sub_0803ADAC - .4byte sub_0803ADF4 - .4byte sub_0803AE48 - .4byte sub_0803AEC4 - .4byte sub_0803AF18 - .4byte sub_0803AF50 - .4byte sub_0803AF7C - .4byte sub_0803AF9C - .4byte sub_0803AFC8 - .4byte sub_0803AFE0 - .4byte sub_0803B01C - .4byte sub_0803B04C - .4byte sub_0803B074 - .4byte sub_0803B0D4 - .4byte sub_0803B100 - .4byte sub_0803B144 - .4byte sub_0803B17C - .4byte sub_0803B1B8 - .4byte sub_0803B2D0 - .4byte sub_0803B30C - .4byte sub_0803B338 - .4byte sub_0803B35C - .4byte sub_0803B398 - .4byte sub_0803B3F4 - .4byte sub_0803B480 - -gUnk_080CFD08:: @ 080CFD08 - .incbin "baserom.gba", 0x0CFD08, 0x0000002 - -gUnk_080CFD0A:: @ 080CFD0A - .incbin "baserom.gba", 0x0CFD0A, 0x0000002 - -gUnk_080CFD0C:: @ 080CFD0C - .incbin "baserom.gba", 0x0CFD0C, 0x000000D - -gUnk_080CFD19:: @ 080CFD19 - .incbin "baserom.gba", 0x0CFD19, 0x0000002 - -gUnk_080CFD1B:: @ 080CFD1B - .incbin "baserom.gba", 0x0CFD1B, 0x0000002 - -gUnk_080CFD1D:: @ 080CFD1D - .incbin "baserom.gba", 0x0CFD1D, 0x0000003 - -gUnk_080CFD20:: @ 080CFD20 - .4byte sub_0803B910 - .4byte sub_0803B978 - .4byte sub_0803BA6C - .4byte sub_0803BA80 - -gUnk_080CFD30:: @ 080CFD30 - .incbin "baserom.gba", 0x0CFD30, 0x0000014 - -gUnk_080CFD44:: @ 080CFD44 - .incbin "baserom.gba", 0x0CFD44, 0x0000014 - -gUnk_080CFD58:: @ 080CFD58 - .incbin "baserom.gba", 0x0CFD58, 0x0000004 - -gUnk_080CFD5C:: @ 080CFD5C - .incbin "baserom.gba", 0x0CFD5C, 0x0000004 diff --git a/linker.ld b/linker.ld index ff9da6bc..92fc3026 100644 --- a/linker.ld +++ b/linker.ld @@ -410,7 +410,7 @@ SECTIONS { asm/cuccoAggr.o(.text); asm/stalfos.o(.text); asm/flyingSkull.o(.text); - asm/mazaalBracelet.o(.text); + src/enemy/mazaalBracelet.o(.text); asm/takkuri.o(.text); src/enemy/bowMoblin.o(.text); asm/bowMoblin.o(.text); @@ -1117,7 +1117,7 @@ SECTIONS { data/animations/enemy/stalfos.o(.rodata); data/const/enemy/flyingSkull.o(.rodata); data/animations/enemy/flyingSkull.o(.rodata); - data/const/enemy/mazaalBracelet.o(.rodata); + src/enemy/mazaalBracelet.o(.rodata); data/animations/enemy/mazaalBracelet.o(.rodata); data/const/enemy/takkuri.o(.rodata); data/const/enemy/bowMoblin.o(.rodata); diff --git a/src/enemy/mazaalBracelet.c b/src/enemy/mazaalBracelet.c new file mode 100644 index 00000000..695ed0c6 --- /dev/null +++ b/src/enemy/mazaalBracelet.c @@ -0,0 +1,1401 @@ +#include "global.h" +#include "enemy.h" +#include "audio.h" +#include "random.h" +#include "functions.h" + +void sub_0803B538(Entity*); +u32 sub_0803B4E4(Entity*); +void sub_0803B55C(Entity*); +void sub_0803B4D4(Entity*); +void sub_0803B59C(Entity*); +void sub_0803B5C0(Entity*); +u32 sub_0803B610(Entity*); +void sub_0803B63C(Entity*); +void sub_0803B6A4(Entity*); +u32 sub_0803B6F4(Entity*); +extern void sub_0803B8E8(Entity*, u32); +extern u32 sub_0803B870(Entity*); +extern void sub_0803B824(Entity*); +extern void sub_0803B804(Entity*); +extern void sub_0803B798(void); +extern void sub_0803BA8C(Entity*, u32); + +extern void sub_0803B724(Entity*); +extern void sub_0800449C(Entity*, u32); + +void sub_0803A170(Entity*); +void sub_0803A188(Entity*); +void nullsub_167(Entity*); +void sub_0803A254(Entity*); +extern void sub_0803B8F8(Entity*); + +void sub_0803A274(Entity*); +void sub_0803A364(Entity*); +void sub_0803A548(Entity*); +void sub_0803A58C(Entity*); +void sub_0803A5D0(Entity*); +void sub_0803A60C(Entity*); +void sub_0803A660(Entity*); +void sub_0803A6E8(Entity*); +void sub_0803A720(Entity*); +void sub_0803A740(Entity*); +void sub_0803A780(Entity*); +void sub_0803A7AC(Entity*); +void sub_0803A7CC(Entity*); +void sub_0803A814(Entity*); +void sub_0803A86C(Entity*); +void sub_0803A8B8(Entity*); +void sub_0803A90C(Entity*); +void sub_0803A978(Entity*); +void sub_0803AA00(Entity*); +void sub_0803AA98(Entity*); +void sub_0803AB10(Entity*); +void sub_0803AB5C(Entity*); +void sub_0803ABB4(Entity*); +void sub_0803AC1C(Entity*); +void sub_0803AC60(Entity*); +void sub_0803ACC0(Entity*); +void sub_0803ADAC(Entity*); +void sub_0803ADF4(Entity*); +void sub_0803AE48(Entity*); +void sub_0803AEC4(Entity*); +void sub_0803AF18(Entity*); +void sub_0803AF50(Entity*); +void sub_0803AF7C(Entity*); +void sub_0803AF9C(Entity*); +void sub_0803AFC8(Entity*); +void sub_0803AFE0(Entity*); +void sub_0803B01C(Entity*); +void sub_0803B04C(Entity*); +void sub_0803B074(Entity*); +void sub_0803B0D4(Entity*); +void sub_0803B100(Entity*); +void sub_0803B144(Entity*); +void sub_0803B17C(Entity*); +void sub_0803B1B8(Entity*); +void sub_0803B2D0(Entity*); +void sub_0803B30C(Entity*); +void sub_0803B338(Entity*); +void sub_0803B35C(Entity*); +void sub_0803B398(Entity*); +void sub_0803B3F4(Entity*); +void sub_0803B480(Entity*); + +extern void sub_0803B910(Entity*); +extern void sub_0803B978(Entity*); +extern void sub_0803BA6C(Entity*); +extern void sub_0803BA80(Entity*); + +extern u8 gEntCount; +// these are not with the rest of this files constant data +extern Hitbox gUnk_080FD35C; +extern Hitbox gUnk_080FD364; +extern Hitbox gUnk_080FD36C; +extern Hitbox gUnk_080FD374; + +void (*const gUnk_080CFC14[])(Entity*) = { sub_0803A170, sub_0803A188, sub_08001324, + sub_0804A7D4, sub_08001242, nullsub_167 }; + +void (*const gUnk_080CFC2C[])(Entity*) = { sub_0803A254, sub_0803A254, sub_0803B8F8, sub_0803B8F8 }; + +void (*const gUnk_080CFC3C[])(Entity*) = { + sub_0803A274, sub_0803A364, sub_0803A548, sub_0803A58C, sub_0803A5D0, sub_0803A60C, sub_0803A660, sub_0803A6E8, + sub_0803A720, sub_0803A740, sub_0803A780, sub_0803A7AC, sub_0803A7CC, sub_0803A814, sub_0803A86C, sub_0803A8B8, + sub_0803A90C, sub_0803A978, sub_0803AA00, sub_0803AA98, sub_0803AB10, sub_0803AB5C, sub_0803ABB4, sub_0803AC1C, + sub_0803AC60, sub_0803ACC0, sub_0803ADAC, sub_0803ADF4, sub_0803AE48, sub_0803AEC4, sub_0803AF18, sub_0803AF50, + sub_0803AF7C, sub_0803AF9C, sub_0803AFC8, sub_0803AFE0, sub_0803B01C, sub_0803B04C, sub_0803B074, sub_0803B0D4, + sub_0803B100, sub_0803B144, sub_0803B17C, sub_0803B1B8, sub_0803B2D0, sub_0803B30C, sub_0803B338, sub_0803B35C, + sub_0803B398, sub_0803B3F4, sub_0803B480 +}; + +const s8 gUnk_080CFD08[] = { 10, -10 }; +const s8 gUnk_080CFD0A[] = { 0x30, -0x30 }; +const u8 gUnk_080CFD0C[] = { 0x14, 0x13, 0x13, 0x12, 0x12, 0x11, 0x10, 0x0f, 0x0f, 0x0e, 0x0e, 0x0d, 0x0c }; +const s8 gUnk_080CFD19[] = { 0x10, -0x10 }; +const s8 gUnk_080CFD1B[] = { -0x38, 0x38 }; +const s8 gUnk_080CFD1D[] = { -0x11, 0x11 }; + +void (*const gUnk_080CFD20[])(Entity*) = { sub_0803B910, sub_0803B978, sub_0803BA6C, sub_0803BA80 }; + +const s16 gUnk_080CFD30[] = { 0xdb, 0xdd, 0xdf, 0xe1, 0xdf, 0xdd, 0xdb, 0xe3, 0xe5, 0xe3 }; +const s16 gUnk_080CFD44[] = { 0xdc, 0xde, 0xe0, 0xe2, 0xe0, 0xde, 0xdc, 0xe4, 0xe6, 0xe4 }; +const s16 gUnk_080CFD58[] = { 0xe5, 0xe6 }; +const s16 gUnk_080CFD5C[] = { 0xe7, 0xe8 }; + +extern s8 gUnk_080CED6C[8]; + +void MazaalBracelet(Entity* this) { + gUnk_080CFC14[GetNextFunction(this)](this); +} + +void sub_0803A170(Entity* this) { + gUnk_080CFC2C[this->type](this); +} + +NONMATCH("asm/non_matching/mazaal/sub_0803A188.inc", void sub_0803A188(Entity* this)) { + Entity* pEVar3; + Entity* entity74; + + if (this->type < 2) { + if (this->action != 0x2b) { + if ((0 < this->iframes) && ((this->bitfield == 0x95 || (this->bitfield == 0x8e)))) { + this->action = 0x28; + this->flags = this->flags & 0x7f; + pEVar3 = this->parent; + pEVar3->field_0x7c.BYTES.byte1 = pEVar3->field_0x7c.BYTES.byte1 | (this->type == 0 ? 1 : 2); + pEVar3->field_0x80.HALF.LO = (this->type == 0 ? 1 : 2) | pEVar3->field_0x80.HALF.LO; + this->attachedEntity->iframes = this->iframes; + entity74 = *(Entity**)&this->field_0x74; + entity74->iframes = this->iframes; + SoundReq(SFX_BOSS_HIT); + } + } else { + this->attachedEntity->iframes = this->iframes; + entity74 = *(Entity**)&this->field_0x74; + entity74->iframes = this->iframes; + InitializeAnimation(this, 0x18); + InitAnimationForceUpdate(this->attachedEntity, 9); + SoundReq(SFX_BOSS_HIT); + } + } + sub_0804AA30(this, gUnk_080CFC14); +} +END_NONMATCH + +void nullsub_167(Entity* this) { +} + +void sub_0803A254(Entity* this) { + gUnk_080CFC3C[this->action](this); + sub_0803B538(this); +} + +void sub_0803A274(Entity* this) { + Entity* pEVar1; + + if (gEntCount < 0x45) { + if (this->type == 0) { + pEVar1 = CreateEnemy(0x38, 0); + pEVar1->parent = this; + this->attachedEntity = pEVar1; + pEVar1 = CreateEnemy(0x44, 2); + pEVar1->parent = this; + *(Entity**)&this->field_0x74 = pEVar1; + pEVar1 = CreateObject(0x7e, 1, 0); + pEVar1->parent = this; + pEVar1->attachedEntity = this->attachedEntity; + PositionRelative(this->parent, this, 0x100000, 0x200000); + } else { + pEVar1 = CreateEnemy(0x38, 1); + pEVar1->parent = this; + this->attachedEntity = pEVar1; + pEVar1 = CreateEnemy(0x44, 3); + pEVar1->parent = this; + *(Entity**)&this->field_0x74 = pEVar1; + pEVar1 = CreateObject(0x7e, 2, 0); + pEVar1->parent = this; + pEVar1->attachedEntity = this->attachedEntity; + this->spriteSettings.b.flipX = 1; + PositionRelative(this->parent, this, -0x100000, 0x200000); + } + if (gScreenTransition.field_0x38 != 0) { + this->action = 3; + this->flags |= 0x80; + this->spriteSettings.b.draw = 1; + this->attachedEntity->spriteSettings.b.draw = 1; + InitializeAnimation(this, 0x10); + } else { + this->action = 1; + InitializeAnimation(this, 4); + } + } +} + +void sub_0803A364(Entity* this) { + u8 uVar1; + int iVar2; + Entity* pEVar3; + u32 index; + s8* ptr; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + switch (this->subAction & 0x7f) { + case 0: + case 2: + break; + case 1: + this->subAction = 2; + pEVar3 = this->attachedEntity; + pEVar3->spriteSettings.b.draw = 1; + pEVar3->spriteRendering.alphaBlend = 1; + break; + case 3: + this->subAction = 4; + this->spriteSettings.b.draw = 1; + this->attachedEntity->spriteRendering.alphaBlend = 0; + break; + case 4: + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->subAction = 5; + } + break; + case 5: + iVar2 = sub_0803B4E4(this); + if (iVar2 == 0) { + sub_0806F69C(this); + return; + } + this->type2 = 0; + uVar1 = 6; + this->subAction = uVar1; + this->actionDelay = 0x1e; + break; + case 6: + this->actionDelay--; + if (this->actionDelay == 0) { + this->subAction = 7; + InitializeAnimation(this, 5); + } + break; + case 7: + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->subAction = 8; + this->spriteSettings.b.draw = 0; + InitAnimationForceUpdate(this->attachedEntity, 8); + SoundReq(SFX_16E); + } + break; + case 8: + sub_0803B55C(this); + if ((this->attachedEntity->frames.all & 0x80) == 0) { + return; + } + uVar1 = 9; + this->subAction = uVar1; + this->actionDelay = 0x1e; + break; + case 9: + this->actionDelay--; + if (this->actionDelay == 0) { + this->subAction = 10; + InitAnimationForceUpdate(this->attachedEntity, 6); + } + break; + case 10: + sub_0803B55C(this); + if ((this->attachedEntity->frames.all & 0x80) != 0) { + this->subAction = 0xb; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 4); + } + break; + case 0xb: + GetNextFrame(this); + if ((this->frames.all & 0x80) == 0) { + return; + } + if (this->type2 != 0) { + uVar1 = 0xc; + this->subAction = uVar1; + this->actionDelay = 0x1e; + } else { + this->type2 = 1; + this->subAction = 6; + this->actionDelay = 10; + } + break; + default: + this->actionDelay--; + if (this->actionDelay == 0) { + this->flags = this->flags | 0x80; + sub_0803B4D4(this); + } + break; + } +} + +void sub_0803A548(Entity* this) { + u32 index; + s8* ptr; + + sub_0803B5C0(this); + UpdateAnimationSingleFrame(this); + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (sub_0803B4E4(this) == 0) { + sub_0806F69C(this); + } +} + +void sub_0803A58C(Entity* this) { + u32 index; + s8* ptr; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (sub_0803B4E4(this) != 0) { + sub_0803B59C(this); + } else { + sub_0806F69C(this); + } +} + +void sub_0803A5D0(Entity* this) { + u32 index; + s8* ptr; + + this->action = 5; + this->flags = this->flags & 0x7f; + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + InitializeAnimation(this, 5); +} + +void sub_0803A60C(Entity* this) { + u32 index; + s8* ptr; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 6; + this->spriteSettings.b.draw = 0; + InitAnimationForceUpdate(this->attachedEntity, 8); + } +} + +void sub_0803A660(Entity* this) { + s32 sVar1; + u32 uVar2; + u8* pbVar3; + + s8* ptr; + u32 index; + + pbVar3 = &this->attachedEntity->frames.all; + if ((*pbVar3 & 0x80) != 0) { + if (this->height.HALF.HI > -0x50) { + this->height.HALF.HI = this->height.HALF.HI - 2; + } else { + this->action = 7; + this->actionDelay = 0; + uVar2 = GetFacingDirection(this, &gPlayerEntity); + this->direction = (u8)uVar2; + this->speed = 0x280; + return; + } + } else { + sub_0803B55C(this); + if ((*pbVar3 & 0x80) != 0) { + SoundReq(SFX_157); + } + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + } +} + +void sub_0803A6E8(Entity* this) { + s32 iVar1; + + if (sub_0803B610(this)) { + this->action = 8; + this->actionDelay = 10; + } else { + sub_0803B63C(this); + sub_0806F69C(this); + iVar1 = this->parent->y.HALF.HI + 8; + if (iVar1 > this->y.HALF.HI) { + this->y.HALF.HI = iVar1; + } + } +} + +void sub_0803A720(Entity* this) { + this->actionDelay--; + if (this->actionDelay == 0) { + this->action = 9; + sub_0803B8E8(this, 0x16); + } +} + +void sub_0803A740(Entity* this) { + u16 uVar1; + + // TODO this is bad, but it matches + uVar1 = this->height.HALF.HI + 4; + this->height.HALF.HI += 4; + if (-1 < uVar1 * 0x10000) { + this->height.HALF.HI = 0; + this->action = 10; + this->actionDelay = 10; + this->parent->field_0x7c.BYTES.byte1 |= 0x40; + sub_0803B8E8(this, 0x13); + sub_08080964(10, 0); + SoundReq(SFX_158); + } +} + +void sub_0803A780(Entity* this) { + if (--this->actionDelay == 0) { + if (--this->field_0x7c.BYTES.byte0) { + this->action = 6; + } else { + this->action = 0xb; + } + } +} + +void sub_0803A7AC(Entity* this) { + if (this->height.HALF.HI > -6) { + this->height.HALF.HI--; + } else { + this->action = 0xc; + } +} + +void sub_0803A7CC(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (sub_0803B4E4(this)) { + this->action = 0xd; + InitAnimationForceUpdate(this->attachedEntity, 6); + } else { + sub_0806F69C(this); + } +} + +void sub_0803A814(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + sub_0803B55C(this); + if ((this->attachedEntity->frames.all & 0x80) != 0) { + this->action = 0xe; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 4); + } +} + +void sub_0803A86C(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->flags = this->flags | 0x80; + sub_0803B59C(this); + } +} + +void sub_0803A8B8(Entity* this) { + s8* ptr; + u32 index; + + this->action = 0x10; + this->actionDelay = 0x1e; + this->direction = 0; + this->speed = 0x80; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + InitializeAnimation(this, 6); + InitAnimationForceUpdate(this->attachedEntity, 1); + SoundReq(SFX_153); +} + +void sub_0803A90C(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + GetNextFrame(this); + sub_0803B55C(this); + sub_0806F69C(this); + this->actionDelay--; + if (this->actionDelay == 0) { + this->action = 0x11; + this->direction = this->type * 0x10 + 8; + this->speed = 0x200; + InitializeAnimation(this, 7); + InitAnimationForceUpdate(this->attachedEntity, 2); + } +} + +void sub_0803A978(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + GetNextFrame(this); + sub_0803B55C(this); + if ((++this->actionDelay & 3) == 0) { + sub_08004596(this, 0x10); + } + sub_0806F69C(this); + if (this->direction == 0x10) { + this->action = 0x12; + this->actionDelay = 3; + this->flags = this->flags & 0x7f; + *(u8*)(*(int*)&this->field_0x74 + 0x10) &= 0x7f; + InitializeAnimation(this, 8); + InitAnimationForceUpdate(this->attachedEntity, 3); + } +} + +void sub_0803AA00(Entity* this) { + u32 direction; + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (sub_0803B870(this) == 0) { + direction = (this->type ^ 1) * 0x10 + 8; + if ((++this->actionDelay & 3) == 0) { + sub_08004596(this, direction); + } + sub_0806F69C(this); + if ((this->direction == direction) || (this->y.HALF.HI >= gPlayerEntity.y.HALF.HI)) { + this->action = 0x13; + this->spriteSettings.b.draw = 0; + this->direction = direction; + this->field_0x80.HWORD = gPlayerEntity.x.HALF.HI; + InitAnimationForceUpdate(this->attachedEntity, 4); + } + } +} + +NONMATCH("asm/non_matching/mazaal/sub_0803AA98.inc", void sub_0803AA98(Entity* this)) { + Entity* temp; + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (sub_0803B870(this) == 0) { + sub_0806F69C(this); + if (sub_0803B6F4(this) != 0) { + this->action = 0x14; + this->speed = 0x40; + InitializeAnimation(this, 10); + (*(Entity**)&this->field_0x74)->flags |= 0x80; + temp = this->attachedEntity; + temp->damageType = 0x13; + InitAnimationForceUpdate(temp, 5); + SoundReq(SFX_16E); + } + } +} +END_NONMATCH + +void sub_0803AB10(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + sub_0806F69C(this); + sub_0803B55C(this); + if ((this->attachedEntity->frames.all & 0x80) != 0) { + this->action = 0x15; + this->actionDelay = 0xf; + } +} + +void sub_0803AB5C(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (--this->actionDelay == 0) { + this->action = 0x16; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 0xb); + InitAnimationForceUpdate(this->attachedEntity, 6); + } +} + +void sub_0803ABB4(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + GetNextFrame(this); + sub_0803B55C(this); + if ((this->attachedEntity->frames.all & 0x80) != 0) { + this->action = 0x17; + this->flags = this->flags | 0x80; + this->speed = 0x180; + InitializeAnimation(this, 0x10); + InitAnimationForceUpdate(this->attachedEntity, 0); + } +} + +void sub_0803AC1C(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (sub_0803B4E4(this)) { + sub_0803B59C(this); + } else { + sub_0806F69C(this); + } +} + +void sub_0803AC60(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + GetNextFrame(this); + if (!this->actionDelay) { + if (sub_0803B4E4(this) != 0) { + this->action = 0x19; + this->subAction = 0; + this->actionDelay = 0x1e; + } else { + sub_0806F69C(this); + } + } else { + this->actionDelay = this->actionDelay - 1; + } + sub_0803B824(this); +} + +void sub_0803ACC0(Entity* this) { + u16 uVar2; + + switch (this->subAction) { + default: + if (--this->actionDelay == 0) { + this->subAction = 1; + } + break; + case 1: + if (--this->height.HALF.HI * 0x10000 >> 0x10 < -0x20) { + this->subAction = 2; + } + break; + case 2: + uVar2 = this->height.HALF.HI += 4; + if (-1 < (uVar2 * 0x10000)) { + this->height.HALF.HI = 0; + this->actionDelay = 0xc; + this->subAction = 3; + sub_08080964(8, 0); + SoundReq(SFX_158); + sub_0803B804(this); + } + break; + case 3: + if (--this->actionDelay == 0) { + this->subAction = 4; + } + break; + case 4: + uVar2 = this->height.HALF.HI -= 2; + if (uVar2 * 0x10000 >> 0x10 < -0x28) { + this->subAction = 5; + } + break; + case 5: + uVar2 = this->height.HALF.HI += 4; + if (-1 < (uVar2 * 0x10000)) { + this->height.HALF.HI = 0; + this->action = 0x1a; + this->actionDelay = 0x3c; + sub_08080964(0x1e, 0); + SoundReq(SFX_158); + sub_0803B804(this); + return; + } + break; + } + sub_0803B824(this); +} + +void sub_0803ADAC(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 0x16; + this->spriteSettings.b.draw = 1; + (*(Entity**)&this->field_0x74)->flags |= 0x80; + InitializeAnimation(this, 0xb); + InitAnimationForceUpdate(this->attachedEntity, 6); + sub_0803B798(); + } else { + sub_0803B824(this); + } +} + +void sub_0803ADF4(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + UpdateAnimationSingleFrame(this); + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 0x1c; + this->actionDelay = 0x1e; + this->spriteSettings.b.draw = 0; + } +} + +void sub_0803AE48(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + UpdateAnimationSingleFrame(this); + if (((this->actionDelay == 0) || (--this->actionDelay == 0)) && ((this->parent->field_0x7c.BYTES.byte1 & 3) != 0)) { + this->action = 0x1d; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 4); + } else { + if (sub_0803B4E4(this) == 0) { + sub_0806F69C(this); + } + } +} + +void sub_0803AEC4(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + UpdateAnimationSingleFrame(this); + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->flags |= 0x80; + sub_0803B59C(this); + } +} + +void sub_0803AF18(Entity* this) { + this->action = 0x1f; + this->flags = this->flags & 0x7f; + InitializeAnimation(this, 5); + this->height.HALF.HI = gUnk_080CED6C[(this->parent->field_0xf >> 4) & 7] + 4; +} + +void sub_0803AF50(Entity* this) { + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 0x20; + this->spriteSettings.b.draw = 0; + InitAnimationForceUpdate(this->attachedEntity, 8); + } +} + +void sub_0803AF7C(Entity* this) { + sub_0803B55C(this); + if ((this->attachedEntity->frames.all & 0x80) != 0) { + this->action = 0x21; + this->actionDelay = 0xf; + } +} + +void sub_0803AF9C(Entity* this) { + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (-0x20 < this->height.HALF.HI) { + this->height.HALF.HI -= 2; + } else { + this->action = 0x22; + this->actionDelay = 10; + } + } +} + +void sub_0803AFC8(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 0x23; + } +} + +void sub_0803AFE0(Entity* this) { + if (this->height.HALF.HI < 0) { + this->height.HALF.HI += 4; + } else { + this->action = 0x24; + this->actionDelay = 0xf0; + *(u8*)&this->cutsceneBeh = 3; + this->height.HALF.HI = 0; + sub_08080964(0xa0, 0); + SoundReq(SFX_158); + } +} + +void sub_0803B01C(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 0x25; + } else { + if ((0x46 < this->actionDelay) && ((this->actionDelay & 0xf) == 0)) { + sub_0803B724(this); + } + } +} + +void sub_0803B04C(Entity* this) { + if (this->height.HALF.HI > -6) { + this->height.HALF.HI--; + } else { + this->action = 0x26; + InitAnimationForceUpdate(this->attachedEntity, 6); + } +} + +void sub_0803B074(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + sub_0803B55C(this); + if ((this->attachedEntity->frames.all & 0x80) != 0) { + this->action = 0x27; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 4); + InitAnimationForceUpdate(this->attachedEntity, 0); + } +} + +void sub_0803B0D4(Entity* this) { + UpdateAnimationSingleFrame(this); + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->flags |= 0x80; + sub_0803B59C(this); + } +} + +void sub_0803B100(Entity* this) { + Entity* temp; + + this->action = 0x29; + this->field_0x20 = 0x14000; + if (this->type == 0) { + this->hitbox = &gUnk_080FD364; + } else { + this->hitbox = &gUnk_080FD374; + } + temp = *(Entity**)&this->field_0x74; + temp->action = 3; + temp->field_0x74.HALF.LO = 0x20; + InitAnimationForceUpdate(this->attachedEntity, 9); + SoundReq(SFX_14F); +} + +void sub_0803B144(Entity* this) { + UpdateAnimationSingleFrame(this->attachedEntity); + if (sub_08003FC4(this, 0x2000) == 0) { + this->action = 0x2a; + InitializeAnimation(this, 0x16); + sub_0803B8E8(this, 0x14); + sub_08080964(8, 0); + } +} + +void sub_0803B17C(Entity* this) { + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 0x2b; + this->flags |= 0x80; + this->damageType = 0x18; + this->currentHealth = 0xff; + this->field_0x7c.HALF.HI = 600; + } +} + +void sub_0803B1B8(Entity* this) { + Entity* temp; + u16 val; + + if ((this->frames.all & 0x80) == 0) { + GetNextFrame(this); + UpdateAnimationSingleFrame(this->attachedEntity); + } + if (this->currentHealth < 0xf5) { + this->action = 0x32; + this->field_0x7c.HALF.HI = 0x5dc; + this->spriteSettings.b.draw = 0; + this->damageType = 0x14; + temp = CreateFx(this, 0x51, 0); + if (temp != (Entity*)0x0) { + temp->x.HALF.HI += this->hitbox->offset_x; + temp->y.HALF.HI += this->hitbox->offset_y; + temp->spritePriority.b0 = 3; + } + temp = CreateObject(0, 0x5e, 0); + if (temp != (Entity*)0x0) { + temp->actionDelay = 0; + temp->direction = 0x90; + PositionRelative(this, temp, this->hitbox->offset_x << 0x10, this->hitbox->offset_y << 0x10); + } + temp = *(Entity**)&this->field_0x74; + temp->field_0x74.HALF.LO = 0x40; + temp = this->parent; + temp->field_0x80.HALF.LO |= (this->type == 0) ? 4 : 8; + if ((temp->field_0x80.HALF.LO & 0xc) == 0xc) { + temp->action = 0xb; + temp->actionDelay = 0x78; + temp->field_0x20 = 0; + *(u16*)(*(int*)&temp->field_0x74 + 0x7e) = val = 0x708; + *(u16*)(*(int*)&temp->field_0x78 + 0x7e) = val; + } + } else { + if (--this->field_0x7c.HALF.HI == 0) { + sub_0803B6A4(this); + } + } +} + +void sub_0803B2D0(Entity* this) { + Entity* temp; + + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 0x2d; + this->spriteSettings.b.draw = 0; + temp = *(Entity**)&this->field_0x74; + temp->action = 2; + temp->field_0x74.HALF.LO = 0; + temp->field_0x78.HWORD = 0; + InitializeAnimation(temp, 3); + } +} + +void sub_0803B30C(Entity* this) { + Entity* pEVar1; + + pEVar1 = *(Entity**)&this->field_0x74; + if ((pEVar1->frames.all & 0x80) != 0) { + this->action = 0x2e; + sub_0803B8E8(this, 0x13); + InitializeAnimation(pEVar1, 0); + } +} + +void sub_0803B338(Entity* this) { + if (this->height.HALF.HI > -10) { + this->height.HALF.HI--; + } else { + this->action = 0x2f; + this->actionDelay = 0xf; + } +} + +void sub_0803B35C(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (--this->actionDelay == 0) { + this->action = 0x30; + } +} + +void sub_0803B398(Entity* this) { + s8* ptr; + u32 index; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + if (sub_0803B4E4(this) != 0) { + this->action = 0x31; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 4); + InitAnimationForceUpdate(this->attachedEntity, 0); + } else { + sub_0806F69C(this); + } +} + +void sub_0803B3F4(Entity* this) { + u8 value; + s8* ptr; + u32 index; + Entity* temp; + + ptr = gUnk_080CED6C; + index = ((this->parent->field_0xf >> 4) + 3); + this->height.HALF.HI = ptr[(index + (u32)this->type * 2) & 7] + 4; + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->damageType = 0x17; + if (this->type == 0) { + this->hitbox = (Hitbox*)&gUnk_080FD35C; + } else { + this->hitbox = &gUnk_080FD36C; + } + temp = this->parent; + value = (this->type == 0) ? 1 : 2; + temp->field_0x80.HALF.LO &= ~(((this->type == 0) ? 0x10 : 0x20) | value); + sub_0803B59C(this); + } +} + +void sub_0803B480(Entity* this) { + Entity* target; + + if (((this->field_0x7c.HALF.HI & 0x1f) == 0) && (target = CreateObject(0x2d, 1, 0), target != (Entity*)0x0)) { + PositionRelative(this, target, gUnk_080CFD08[this->type] << 0x10, 0); + } + if (--this->field_0x7c.HALF.HI == 0) { + sub_0803B6A4(this); + } +} + +void sub_0803B4D4(Entity* this) { + this->action = 3; + InitializeAnimation(this, 0x10); +} + +u32 sub_0803B4E4(Entity* this) { + u32 xoff; + u32 yoff; + + xoff = this->parent->x.HALF.HI + gUnk_080CFD0A[this->type]; + yoff = this->parent->y.HALF.HI + 0x10; + if (sub_0806FCB8(this, xoff, yoff, 2)) { + this->x.HALF.HI = xoff; + this->y.HALF.HI = yoff; + return 1; + } else { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, xoff, yoff); + return 0; + } +} + +void sub_0803B538(Entity* this) { + PositionRelative(this, this->attachedEntity, 0, -0x10000); + PositionRelative(this, *(Entity**)&this->field_0x74, 0, -0x20000); +} + +void sub_0803B55C(Entity* this) { + Entity* entity; + Entity* pEVar1; + + pEVar1 = *(Entity**)&this->field_0x74; + entity = this->attachedEntity; + UpdateAnimationSingleFrame(entity); + if ((entity->frames.all & 0x10) != 0) { + if (pEVar1->animIndex != 1) { + InitializeAnimation(pEVar1, 1); + } + } else { + if (pEVar1->animIndex != 0) { + InitializeAnimation(pEVar1, 0); + } + } +} + +void sub_0803B59C(Entity* this) { + this->action = 2; + this->parent->field_0x7c.BYTES.byte1 |= (this->type == 0) ? 1 : 2; +} + +void sub_0803B5C0(Entity* this) { + u32 direction; + u32 temp; + + direction = GetFacingDirection(this, &gPlayerEntity); + if (direction < 10) { + direction = 10; + } + if (direction > 0x16) { + direction = 0x16; + } + if (this->type == 0) { + temp = gUnk_080CFD0C[direction - 10]; + } else { + temp = gUnk_080CFD0C[0x16 - direction]; + } + if (this->frames.all != temp) { + InitializeAnimation(this, temp); + } +} + +u32 sub_0803B610(Entity* this) { + return sub_0806FCB8(this, gPlayerEntity.x.HALF.HI + gUnk_080CFD19[this->type], gPlayerEntity.y.HALF.HI - 0xc, 8); +} + +// sub_0803B698 was the tail of this function +void sub_0803B63C(Entity* this) { + int y; + int x; + + x = gPlayerEntity.x.HALF.HI; + x += gUnk_080CFD19[this->type]; + y = gPlayerEntity.y.HALF.HI - 0xc; + if (this->actionDelay++ >= 0xb5) { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + } else { + sub_08004596(this, sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y)); + } +} + +void sub_0803B6A4(Entity* this) { + Entity* temp; + + this->action = 0x2c; + this->damageType = 0x14; + temp = this->parent; + temp->field_0x80.HALF.LO |= (this->type == 0) ? 0x10 : 0x20; + temp->field_0x80.HALF.LO &= (this->type == 0) ? -5 : -9; + InitializeAnimation(this, 0x17); +} + +u32 sub_0803B6F4(Entity* this) { + if (this->type == 0) { + if (this->field_0x80.HWORD > this->x.HALF.HI) { + return 1; + } + } else { + if (this->field_0x80.HWORD < this->x.HALF.HI) { + return 1; + } + } + return 0; +} + +void sub_0803B724(Entity* param_1) { + Entity* pEVar1; + u32 random_value; + u8 temp; + + if (((param_1->field_0xf < 3) && (param_1->cutsceneBeh.HALF.LO != 0)) && + (pEVar1 = CreateEnemy(7, 1), pEVar1 != (Entity*)0x0)) { + pEVar1->type2 = 1; + random_value = Random(); + temp = gUnk_080CFD1B[param_1->type]; + pEVar1->x.HALF.HI = (random_value & 0x70) + temp + gRoomControls.roomOriginX; + pEVar1->y.HALF.HI = ((random_value >> 0x10) & 7) * 10 + 0x5c + gRoomControls.roomOriginY; + pEVar1->parent = param_1; + sub_08016A30(pEVar1); + param_1->field_0xf++; + param_1->cutsceneBeh.HALF.LO--; + } +} + +void sub_0803B798(void) { + gPlayerState.jumpStatus = 0x41; + gPlayerState.field_0xa = 0; + gPlayerState.flags.all &= 0xffef; + gPlayerEntity.flags |= 0x80; + gPlayerEntity.field_0x20 = 0x18000; + gPlayerEntity.height.HALF.HI = -10; + gPlayerEntity.direction = 0x10; + gPlayerEntity.animationState = 4; + gPlayerEntity.spritePriority.b1 = 1; + gPlayerEntity.spriteOffsetY = 0; + gPlayerEntity.speed = 0x140; + gPlayerEntity.iframes = -0x1e; +} + +void sub_0803B804(Entity* this) { + gPlayerEntity.iframes = 30; + ModHealth(-4); + sub_0800449C(&gPlayerEntity, 0x7a); +} + +void sub_0803B824(Entity* this) { + ResetPlayer(); + gPlayerState.field_0x1a[0] = gPlayerState.field_0x1a[0] | 0x80; + sub_0806FA90(this, &gPlayerEntity, gUnk_080CFD1D[this->type], 1); + gPlayerEntity.spriteOffsetY = -6; + gPlayerEntity.spritePriority.b1 = 0; +} + +u32 sub_0803B870(Entity* this) { + Entity* entity; + + entity = this->attachedEntity; + if ((entity->bitfield & 0x80) != 0 && (gPlayerState.flags.all & 0x10) != 0) { + this->action = 0x18; + this->actionDelay = 0x44; + this->spriteSettings.b.draw = 0; + gPlayerEntity.flags = gPlayerEntity.flags & 0x7f; + gPlayerEntity.iframes = -0x10; + sub_0803B824(this); + entity->damageType = 0x13; + InitAnimationForceUpdate(entity, 7); + SoundReq(SFX_16E); + return 1; + } else { + entity->damageType = 0x15; + return 0; + } +} + +void sub_0803B8E8(Entity* this, u32 unk) { + Entity* entity; + entity = this->attachedEntity; + entity->damageType = unk; + entity = (*(Entity**)&this->field_0x74); + entity->damageType = unk; +} + +void sub_0803B8F8(Entity* this) { + gUnk_080CFD20[this->action](this); +} + +void sub_0803B910(Entity* this) { + if (gScreenTransition.field_0x38 != 0) { + this->action = 2; + this->spriteSettings.b.draw = 1; + *(u8*)&this->field_0x74 = 0; + sub_0803BA8C(this, 10); + } else { + this->action = 1; + *(u8*)&this->field_0x74 = 0x80; + } + this->spriteSettings.b.flipX = (this->type - 2); + InitializeAnimation(this, 0); + CopyPositionAndSpriteOffset(this->parent, this); +} + +void sub_0803B978(Entity* this) { + switch (this->subAction) { + case 0: + return; + case 1: + this->subAction = 2; + this->actionDelay = 2; + this->field_0xf = 0x1e; + this->field_0x74.HALF.LO = 0; + SoundReq(0x1a9); + case 2: + sub_0803BA8C(this, this->field_0xf); + if ((this->field_0x74.HALF.HI | this->field_0x74.HALF.LO) == 0) { + SoundReq(0x1a9); + } + if (this->field_0x74.HALF.LO != 0) { + return; + } + if (--this->actionDelay != 0) { + return; + } + this->actionDelay = 2; + this->field_0xf -= 4; + if (this->field_0xf != 10) { + return; + } + this->parent->parent->subAction = 3; + this->subAction = 3; + return; + case 3: + break; + case 4: + this->subAction = 5; + this->spriteSettings.b.draw = 1; + this->spriteRendering.alphaBlend = 1; + break; + default: + this->action = 2; + this->spriteRendering.alphaBlend = 0; + case 5: + GetNextFrame(this); + } + sub_0803BA8C(this, 0x10); + if ((this->field_0x74.HALF.HI | this->field_0x74.HALF.LO) == 0) { + SoundReq(0x1a9); + } +} + +void sub_0803BA6C(Entity* this) { + sub_0803BA8C(this, 10); + GetNextFrame(this); +} + +void sub_0803BA80(Entity* this) { + sub_0803BA8C(this, 10); +} + +NONMATCH("asm/non_matching/mazaal/sub_0803BA8C.inc", void sub_0803BA8C(Entity* this, u32 unk)) { + u32 sVar2; + + sVar2 = 0; + if ((this->field_0x74.HALF.LO & 0xe0) == 0) { + if (this->field_0x74.HALF.LO == 0) { + if (9 < ++this->field_0x74.HALF.HI) { + this->field_0x74.HALF.HI = 0; + } + if (this->type == 2) { + sVar2 = gUnk_080CFD30[this->field_0x74.HALF.HI]; + } else { + sVar2 = gUnk_080CFD44[this->field_0x74.HALF.HI]; + } + } + this->field_0x74.HALF.LO++; + if (unk <= this->field_0x74.HALF.LO) { + this->field_0x74.HALF.LO = 0; + } + } else { + if ((this->field_0x74.HALF.LO & 0x80) == 0) { + this->field_0x74.HALF.LO |= 0x80; + if ((this->field_0x74.HALF.LO & 0x20) != 0) { + sVar2 = gUnk_080CFD58[this->type - 2]; + } else { + sVar2 = gUnk_080CFD5C[this->type - 2]; + } + } + } + if (sVar2 != 0) { + sub_0801D2B4(this, sVar2); + (*(Entity**)&this->parent->field_0x78)->palette.b.b0 = this->palette.b.b0; + (*(Entity**)&this->parent->field_0x78)->palette.b.b4 = this->palette.b.b0; + this->parent->attachedEntity->palette.b.b0 = this->palette.b.b0; + this->parent->attachedEntity->palette.b.b4 = this->palette.b.b0; + } +} +END_NONMATCH diff --git a/src/enemy/mazaalHand.c b/src/enemy/mazaalHand.c new file mode 100644 index 00000000..d4008854 --- /dev/null +++ b/src/enemy/mazaalHand.c @@ -0,0 +1 @@ +#include "global.h" \ No newline at end of file diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c new file mode 100644 index 00000000..d4008854 --- /dev/null +++ b/src/enemy/mazaalHead.c @@ -0,0 +1 @@ +#include "global.h" \ No newline at end of file diff --git a/src/enemy/mazaalMacro.c b/src/enemy/mazaalMacro.c new file mode 100644 index 00000000..d4008854 --- /dev/null +++ b/src/enemy/mazaalMacro.c @@ -0,0 +1 @@ +#include "global.h" \ No newline at end of file