diff --git a/asm/darkNut.s b/asm/darkNut.s deleted file mode 100644 index fd3af0e8..00000000 --- a/asm/darkNut.s +++ /dev/null @@ -1,1549 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start DarkNut -DarkNut: @ 0x08020B80 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08020B9C @ =gUnk_080CAA98 - bl EnemyFunctionHandler - movs r3, #0x16 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_08020B9C: .4byte gUnk_080CAA98 - - thumb_func_start sub_08020BA0 -sub_08020BA0: @ 0x08020BA0 - push {lr} - ldr r2, _08020BB4 @ =gUnk_080CAAB0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08020BB4: .4byte gUnk_080CAAB0 - - thumb_func_start sub_08020BB8 -sub_08020BB8: @ 0x08020BB8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - movs r2, #0x7f - adds r1, r2, #0 - ands r1, r0 - cmp r1, #0x1c - beq _08020BE0 - cmp r1, #0x1c - bgt _08020BD4 - cmp r1, #0x16 - beq _08020C24 - b _08020D32 -_08020BD4: - cmp r1, #0x4b - beq _08020C68 - cmp r1, #0x4c - bne _08020BDE - b _08020CF0 -_08020BDE: - b _08020D32 -_08020BE0: - movs r0, #0xb - strb r0, [r4, #0xc] - ldr r1, _08020C20 @ =gUnk_080CAB0C - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x51 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - movs r2, #0x10 - eors r2, r0 - adds r2, #4 - movs r0, #0x18 - ands r2, r0 - asrs r2, r2, #3 - adds r0, r4, #0 - movs r1, #8 - bl sub_08021218 - adds r0, r4, #0 - bl sub_08021588 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC - b _08020CE2 - .align 2, 0 -_08020C20: .4byte gUnk_080CAB0C -_08020C24: - movs r0, #0xb - strb r0, [r4, #0xc] - ldr r1, _08020C64 @ =gUnk_080CAB10 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x51 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - movs r2, #0x10 - eors r2, r0 - adds r2, #4 - movs r0, #0x18 - ands r2, r0 - asrs r2, r2, #3 - adds r0, r4, #0 - movs r1, #8 - bl sub_08021218 - adds r0, r4, #0 - bl sub_08021588 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC - b _08020CE2 - .align 2, 0 -_08020C64: .4byte gUnk_080CAB10 -_08020C68: - ldrb r0, [r4, #0xc] - adds r6, r4, #0 - adds r6, #0x45 - adds r5, r4, #0 - adds r5, #0x78 - cmp r0, #0xd - beq _08020D58 - cmp r0, #0xf - beq _08020D58 - cmp r0, #0x13 - beq _08020D58 - cmp r0, #0x12 - beq _08020D58 - adds r0, r4, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #4 - blt _08020CC0 - cmp r0, #6 - ble _08020CAC - cmp r0, #0xc - bgt _08020CC0 - cmp r0, #8 - blt _08020CC0 - ldr r0, _08020CA8 @ =gUnk_080CAB04 - ldrb r1, [r4, #0xa] - adds r1, r1, r0 - ldrb r0, [r1] - adds r1, r4, #0 - adds r1, #0x7a - b _08020CC6 - .align 2, 0 -_08020CA8: .4byte gUnk_080CAB04 -_08020CAC: - ldr r0, _08020CBC @ =gUnk_080CAB00 - ldrb r1, [r4, #0xa] - adds r1, r1, r0 - ldrb r0, [r1] - adds r1, r4, #0 - adds r1, #0x7a - b _08020CC6 - .align 2, 0 -_08020CBC: .4byte gUnk_080CAB00 -_08020CC0: - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #0 -_08020CC6: - strb r0, [r1] - movs r0, #0xa - strb r0, [r4, #0xc] - ldrb r2, [r4, #0x14] - adds r0, r4, #0 - movs r1, #0xb - bl sub_08021218 - ldr r0, _08020CEC @ =0x0000015D - bl sub_08004488 - adds r0, r4, #0 - bl sub_08021588 -_08020CE2: - adds r6, r4, #0 - adds r6, #0x45 - adds r5, r4, #0 - adds r5, #0x78 - b _08020D58 - .align 2, 0 -_08020CEC: .4byte 0x0000015D -_08020CF0: - ldrb r0, [r4, #0xc] - adds r6, r4, #0 - adds r6, #0x45 - adds r5, r4, #0 - adds r5, #0x78 - cmp r0, #0xf - bne _08020D58 - movs r1, #0xff - ldr r0, [r4, #0x54] - cmp r0, #0 - beq _08020D0E - adds r0, #0x41 - ldrb r0, [r0] - adds r1, r2, #0 - ands r1, r0 -_08020D0E: - cmp r1, #2 - bne _08020D28 - ldr r0, _08020D24 @ =gUnk_080CAB08 - ldrb r1, [r4, #0xa] - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_080213D0 - b _08020D58 - .align 2, 0 -_08020D24: .4byte gUnk_080CAB08 -_08020D28: - adds r0, r4, #0 - movs r1, #0 - bl sub_080213D0 - b _08020D58 -_08020D32: - adds r2, r4, #0 - adds r2, #0x45 - adds r0, r4, #0 - adds r0, #0x78 - ldrb r1, [r2] - adds r6, r2, #0 - adds r5, r0, #0 - ldrb r0, [r5] - cmp r1, r0 - beq _08020D58 - adds r0, r4, #0 - bl sub_08021588 - adds r0, r4, #0 - bl sub_08021390 - adds r0, r4, #0 - bl sub_0804AA1C -_08020D58: - ldrb r0, [r6] - strb r0, [r5] - ldr r1, _08020D68 @ =gUnk_080CAA98 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, r6, pc} - .align 2, 0 -_08020D68: .4byte gUnk_080CAA98 - - thumb_func_start nullsub_129 -nullsub_129: @ 0x08020D6C - bx lr - .align 2, 0 - - thumb_func_start sub_08020D70 -sub_08020D70: @ 0x08020D70 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x75 - strb r1, [r0] - subs r0, #0x30 - ldrb r1, [r0] - adds r0, #0x33 - strb r1, [r0] - movs r0, #0xff - strb r0, [r4, #0x14] - adds r0, r4, #0 - movs r1, #0 - movs r2, #2 - bl sub_08021218 - pop {r4, pc} - - thumb_func_start sub_08020D9C -sub_08020D9C: @ 0x08020D9C - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _08020DB0 - adds r0, r4, #0 - bl sub_080213F0 -_08020DB0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08020DB4 -sub_08020DB4: @ 0x08020DB4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08020DD0 - adds r0, r4, #0 - bl sub_08021390 -_08020DD0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08020DD4 -sub_08020DD4: @ 0x08020DD4 - push {r4, lr} - adds r4, r0, #0 - bl sub_080214FC - cmp r0, #0 - beq _08020DE8 - adds r0, r4, #0 - bl sub_080213F0 - b _08020E26 -_08020DE8: - adds r1, r4, #0 - adds r1, #0x76 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08020E08 - movs r0, #5 - strb r0, [r4, #0xc] - ldrb r2, [r4, #0x14] - adds r0, r4, #0 - movs r1, #5 - bl sub_08021218 - b _08020E26 -_08020E08: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08020E1A - adds r0, r4, #0 - bl sub_08021540 -_08020E1A: - adds r0, r4, #0 - bl sub_080AEF88 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08020E26: - pop {r4, pc} - - thumb_func_start sub_08020E28 -sub_08020E28: @ 0x08020E28 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08020E44 - adds r0, r4, #0 - bl sub_080213B0 -_08020E44: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08020E48 -sub_08020E48: @ 0x08020E48 - push {r4, lr} - adds r4, r0, #0 - bl sub_080214FC - cmp r0, #0 - beq _08020E5C - adds r0, r4, #0 - bl sub_080213F0 - b _08020E76 -_08020E5C: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08020E76 - adds r0, r4, #0 - bl sub_080213B0 -_08020E76: - pop {r4, pc} - - thumb_func_start sub_08020E78 -sub_08020E78: @ 0x08020E78 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08020E94 - adds r0, r4, #0 - bl sub_08021390 -_08020E94: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08020E98 -sub_08020E98: @ 0x08020E98 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #1 - movs r2, #0x38 - bl sub_08049F64 - cmp r0, #0 - beq _08020EF6 - ldr r5, _08020EDC @ =gUnk_020000B0 - ldr r1, [r5] - adds r0, r4, #0 - bl sub_0802169C - cmp r0, #0 - bne _08020ECA - ldr r0, [r5] - adds r1, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_080AEF88 - cmp r0, #0 - bne _08020EE0 -_08020ECA: - movs r0, #8 - strb r0, [r4, #0xc] - ldrb r2, [r4, #0x14] - adds r0, r4, #0 - movs r1, #7 - bl sub_08021218 - b _08020F26 - .align 2, 0 -_08020EDC: .4byte gUnk_020000B0 -_08020EE0: - ldrb r0, [r4, #0x15] - movs r1, #0x10 - eors r0, r1 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_0802124C - adds r0, r4, #0 - bl sub_08021644 - b _08020F26 -_08020EF6: - ldr r0, _08020F08 @ =gUnk_020000B0 - ldr r1, [r0] - cmp r1, #0 - bne _08020F0C - adds r0, r4, #0 - bl sub_08021414 - b _08020F26 - .align 2, 0 -_08020F08: .4byte gUnk_020000B0 -_08020F0C: - adds r0, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_080AEF88 - adds r0, r4, #0 - bl sub_0802124C - adds r0, r4, #0 - bl sub_08021644 -_08020F26: - pop {r4, r5, pc} - - thumb_func_start sub_08020F28 -sub_08020F28: @ 0x08020F28 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08020F44 - adds r0, r4, #0 - bl sub_08021400 -_08020F44: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08020F48 -sub_08020F48: @ 0x08020F48 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #1 - movs r2, #0x48 - bl sub_08049F64 - cmp r0, #0 - beq _08020FA4 - ldr r5, _08020F98 @ =gUnk_020000B0 - ldr r1, [r5] - adds r0, r4, #0 - bl sub_08021664 - cmp r0, #0 - beq _08020F9C - ldr r1, [r5] - adds r0, r4, #0 - movs r2, #9 - bl sub_0804A044 - adds r2, r0, #0 - cmp r2, #0xff - beq _08020F9C - movs r0, #0xe - strb r0, [r4, #0xc] - lsrs r2, r2, #3 - adds r0, r4, #0 - movs r1, #0xd - bl sub_08021218 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl sub_0804A98C - cmp r0, #0 - beq _08020FAA - str r4, [r0, #0x50] - str r0, [r4, #0x54] - b _08020FAA - .align 2, 0 -_08020F98: .4byte gUnk_020000B0 -_08020F9C: - adds r0, r4, #0 - bl sub_08021424 - b _08020FAA -_08020FA4: - adds r0, r4, #0 - bl sub_08021390 -_08020FAA: - pop {r4, r5, pc} - - thumb_func_start sub_08020FAC -sub_08020FAC: @ 0x08020FAC - push {lr} - adds r2, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08020FDC - adds r1, r2, #0 - adds r1, #0x7a - ldrb r0, [r1] - cmp r0, #0 - beq _08020FCC - subs r0, #1 - strb r0, [r1] - b _08020FE2 -_08020FCC: - adds r1, r2, #0 - adds r1, #0x3d - movs r0, #0xf8 - strb r0, [r1] - adds r0, r2, #0 - bl sub_08021390 - b _08020FE2 -_08020FDC: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_08020FE2: - pop {pc} - - thumb_func_start sub_08020FE4 -sub_08020FE4: @ 0x08020FE4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802100C - movs r0, #0xc - strb r0, [r4, #0xc] - ldrb r2, [r4, #0x14] - adds r0, r4, #0 - movs r1, #9 - bl sub_08021218 - adds r0, r4, #0 - bl sub_0804AA1C -_0802100C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08021010 -sub_08021010: @ 0x08021010 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08021034 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x56 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080213F0 -_08021034: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08021038 -sub_08021038: @ 0x08021038 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - cmp r0, #0 - bne _08021066 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - beq _08021066 - adds r0, r4, #0 - movs r1, #0 - movs r2, #0 - bl sub_0804A98C - cmp r0, #0 - beq _0802105E - str r4, [r0, #0x50] - str r0, [r4, #0x54] -_0802105E: - movs r0, #0x87 - lsls r0, r0, #1 - bl sub_08004488 -_08021066: - adds r5, r4, #0 - adds r5, #0x5a - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08021090 - adds r0, r4, #0 - bl sub_08021588 - adds r1, r4, #0 - adds r1, #0x7c - ldrb r0, [r1] - cmp r0, #0 - beq _08021088 - subs r0, #1 - b _080210A2 -_08021088: - adds r0, r4, #0 - bl sub_08021390 - b _080210A4 -_08021090: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r5] - cmp r0, #4 - bne _080210A4 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x51 -_080210A2: - strb r0, [r1] -_080210A4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080210A8 -sub_080210A8: @ 0x080210A8 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080210D4 - movs r0, #0 - strb r0, [r2] - adds r0, r4, #0 - bl sub_08021588 - ldr r0, _080210D0 @ =0x0000015D - bl sub_08004488 - b _080210E2 - .align 2, 0 -_080210D0: .4byte 0x0000015D -_080210D4: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080210E2 - adds r0, r4, #0 - bl sub_08021390 -_080210E2: - pop {r4, pc} - - thumb_func_start sub_080210E4 -sub_080210E4: @ 0x080210E4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0802111A - movs r0, #0xfe - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0 - movs r2, #2 - bl sub_0804A98C - cmp r0, #0 - beq _08021112 - str r4, [r0, #0x50] - str r0, [r4, #0x54] -_08021112: - movs r0, #0x87 - lsls r0, r0, #1 - bl sub_08004488 -_0802111A: - adds r0, r4, #0 - bl sub_08021644 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08021154 - adds r0, r4, #0 - bl sub_080AEF88 - cmp r0, #0 - beq _0802114A - ldr r0, [r4, #0x54] - cmp r0, #0 - beq _08021154 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08021154 -_0802114A: - adds r0, r4, #0 - movs r1, #0 - bl sub_080213D0 - b _0802116C -_08021154: - adds r1, r4, #0 - adds r1, #0x76 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0802116C - adds r0, r4, #0 - movs r1, #0 - bl sub_080213D0 -_0802116C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08021170 -sub_08021170: @ 0x08021170 - push {lr} - adds r2, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08021198 - adds r1, r2, #0 - adds r1, #0x7b - ldrb r0, [r1] - cmp r0, #0 - beq _08021190 - subs r0, #1 - strb r0, [r1] - b _0802119E -_08021190: - adds r0, r2, #0 - bl sub_08021390 - b _0802119E -_08021198: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_0802119E: - pop {pc} - - thumb_func_start sub_080211A0 -sub_080211A0: @ 0x080211A0 - push {r4, lr} - adds r4, r0, #0 - bl sub_080214FC - cmp r0, #0 - beq _080211B4 - adds r0, r4, #0 - bl sub_08021390 - b _080211CE -_080211B4: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080211CE - adds r0, r4, #0 - bl sub_080213B0 -_080211CE: - pop {r4, pc} - - thumb_func_start sub_080211D0 -sub_080211D0: @ 0x080211D0 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0802159C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080211F2 - adds r0, r4, #0 - bl sub_08021390 -_080211F2: - pop {r4, pc} - - thumb_func_start sub_080211F4 -sub_080211F4: @ 0x080211F4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_08021600 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08021216 - adds r0, r4, #0 - bl sub_08021390 -_08021216: - pop {r4, pc} - - thumb_func_start sub_08021218 -sub_08021218: @ 0x08021218 - push {r4, lr} - adds r3, r0, #0 - adds r4, r3, #0 - adds r4, #0x74 - ldrb r0, [r4] - cmp r0, r1 - bne _0802122C - ldrb r0, [r3, #0x14] - cmp r0, r2 - beq _08021244 -_0802122C: - strb r2, [r3, #0x14] - strb r1, [r4] - lsls r0, r1, #1 - ldr r1, _08021248 @ =gUnk_080CAB14 - adds r0, r0, r1 - ldrb r1, [r0, #1] - strh r1, [r3, #0x12] - ldrb r1, [r0] - adds r1, r1, r2 - adds r0, r3, #0 - bl InitAnimationForceUpdate -_08021244: - pop {r4, pc} - .align 2, 0 -_08021248: .4byte gUnk_080CAB14 - - thumb_func_start sub_0802124C -sub_0802124C: @ 0x0802124C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0x14] - ldrb r1, [r4, #0x15] - bl sub_08021274 - adds r2, r0, #0 - cmp r2, #0xff - beq _0802126C - adds r0, r4, #0 - adds r0, #0x74 - ldrb r1, [r0] - adds r0, r4, #0 - bl sub_08021218 - b _08021272 -_0802126C: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08021272: - pop {r4, pc} - - thumb_func_start sub_08021274 -sub_08021274: @ 0x08021274 - push {lr} - adds r2, r0, #0 - movs r0, #7 - ands r0, r1 - subs r0, #3 - cmp r0, #2 - bhi _0802129A - movs r3, #0x18 - adds r0, r1, #0 - ands r0, r3 - lsrs r0, r0, #3 - cmp r0, r2 - beq _080212AA - adds r0, r1, #0 - adds r0, #8 - ands r0, r3 - lsrs r0, r0, #3 - cmp r0, r2 - beq _080212AA -_0802129A: - adds r0, r1, #4 - movs r1, #0x18 - ands r0, r1 - lsrs r1, r0, #3 - cmp r2, r1 - beq _080212AA - adds r0, r1, #0 - b _080212AC -_080212AA: - movs r0, #0xff -_080212AC: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080212B0 -sub_080212B0: @ 0x080212B0 - push {r4, r5, lr} - adds r5, r0, #0 - adds r1, r5, #0 - adds r1, #0x75 - ldrb r0, [r1] - cmp r0, #1 - beq _080212D0 - cmp r0, #2 - beq _080212DC - movs r0, #1 - strb r0, [r1] - ldr r4, _080212CC @ =gUnk_080CAB3A - b _080212E2 - .align 2, 0 -_080212CC: .4byte gUnk_080CAB3A -_080212D0: - movs r0, #2 - strb r0, [r1] - ldr r4, _080212D8 @ =gUnk_080CAB42 - b _080212E2 - .align 2, 0 -_080212D8: .4byte gUnk_080CAB42 -_080212DC: - movs r0, #0 - strb r0, [r1] - ldr r4, _0802131C @ =gUnk_080CAB4A -_080212E2: - bl Random - movs r1, #7 - ands r1, r0 - adds r1, r1, r4 - ldrb r2, [r1] - ldrb r0, [r5, #0xa] - cmp r0, #1 - bhi _08021306 - cmp r2, #2 - bne _08021306 - ldr r4, _08021320 @ =gUnk_080CAB52 - bl Random - movs r1, #3 - ands r1, r0 - adds r1, r1, r4 - ldrb r2, [r1] -_08021306: - movs r0, #0 - str r0, [r5, #0x54] - ldr r1, _08021324 @ =gUnk_080CAB58 - lsls r0, r2, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_0802131C: .4byte gUnk_080CAB4A -_08021320: .4byte gUnk_080CAB52 -_08021324: .4byte gUnk_080CAB58 - - thumb_func_start sub_08021328 -sub_08021328: @ 0x08021328 - push {lr} - movs r1, #0xd - strb r1, [r0, #0xc] - ldr r2, _08021348 @ =gUnk_080CAB68 - ldrb r1, [r0, #0xa] - adds r1, r1, r2 - ldrb r2, [r1] - adds r1, r0, #0 - adds r1, #0x7c - strb r2, [r1] - ldrb r2, [r0, #0x14] - movs r1, #0xc - bl sub_08021218 - pop {pc} - .align 2, 0 -_08021348: .4byte gUnk_080CAB68 - - thumb_func_start sub_0802134C -sub_0802134C: @ 0x0802134C - push {lr} - movs r1, #0xf - strb r1, [r0, #0xc] - ldrb r1, [r0, #0x14] - lsls r1, r1, #3 - strb r1, [r0, #0x15] - movs r1, #0x80 - lsls r1, r1, #2 - strh r1, [r0, #0x24] - adds r2, r0, #0 - adds r2, #0x76 - movs r1, #0x78 - strh r1, [r2] - ldrb r2, [r0, #0x14] - movs r1, #0xe - bl sub_08021218 - pop {pc} - - thumb_func_start sub_08021370 -sub_08021370: @ 0x08021370 - push {lr} - movs r1, #0x12 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x14] - movs r1, #0x10 - bl sub_08021218 - pop {pc} - - thumb_func_start sub_08021380 -sub_08021380: @ 0x08021380 - push {lr} - movs r1, #0x13 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x14] - movs r1, #0x11 - bl sub_08021218 - pop {pc} - - thumb_func_start sub_08021390 -sub_08021390: @ 0x08021390 - push {lr} - movs r1, #7 - strb r1, [r0, #0xc] - movs r1, #0x80 - lsls r1, r1, #2 - strh r1, [r0, #0x24] - adds r2, r0, #0 - adds r2, #0x3f - movs r1, #0x56 - strb r1, [r2] - ldrb r2, [r0, #0x14] - movs r1, #6 - bl sub_08021218 - pop {pc} - .align 2, 0 - - thumb_func_start sub_080213B0 -sub_080213B0: @ 0x080213B0 - push {lr} - movs r1, #3 - strb r1, [r0, #0xc] - movs r1, #1 - strb r1, [r0, #0xe] - movs r1, #0xc0 - strh r1, [r0, #0x24] - adds r2, r0, #0 - adds r2, #0x76 - movs r1, #0xf0 - strh r1, [r2] - ldrb r2, [r0, #0x14] - movs r1, #3 - bl sub_08021218 - pop {pc} - - thumb_func_start sub_080213D0 -sub_080213D0: @ 0x080213D0 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x10 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x7b - strb r1, [r0] - ldrb r2, [r4, #0x14] - adds r0, r4, #0 - movs r1, #0xf - bl sub_08021218 - adds r0, r4, #0 - bl sub_08021588 - pop {r4, pc} - - thumb_func_start sub_080213F0 -sub_080213F0: @ 0x080213F0 - push {lr} - movs r1, #6 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x14] - movs r1, #1 - bl sub_08021218 - pop {pc} - - thumb_func_start sub_08021400 -sub_08021400: @ 0x08021400 - push {lr} - movs r1, #9 - strb r1, [r0, #0xc] - movs r1, #0x60 - strh r1, [r0, #0x24] - ldrb r2, [r0, #0x14] - movs r1, #0xa - bl sub_08021218 - pop {pc} - - thumb_func_start sub_08021414 -sub_08021414: @ 0x08021414 - push {lr} - movs r1, #0x11 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x14] - movs r1, #5 - bl sub_08021218 - pop {pc} - - thumb_func_start sub_08021424 -sub_08021424: @ 0x08021424 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _08021450 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r5, #0 - bl GetFacingDirection - adds r1, r0, #0 - ldrb r0, [r5, #0x14] - bl sub_08021274 - adds r4, r0, #0 - cmp r4, #0xff - beq _08021454 - adds r0, r5, #0 - adds r0, #0x74 - ldrb r1, [r0] - adds r0, r5, #0 - adds r2, r4, #0 - bl sub_08021218 - b _08021456 - .align 2, 0 -_08021450: .4byte gUnk_020000B0 -_08021454: - ldrb r4, [r5, #0x14] -_08021456: - cmp r4, #1 - beq _08021490 - cmp r4, #1 - blo _08021478 - cmp r4, #2 - beq _080214A8 - ldr r0, _08021474 @ =gUnk_020000B0 - ldr r1, [r0] - movs r2, #0x2e - ldrsh r0, [r1, r2] - adds r2, r0, #0 - adds r2, #0x24 - movs r4, #0x32 - ldrsh r3, [r1, r4] - b _080214B8 - .align 2, 0 -_08021474: .4byte gUnk_020000B0 -_08021478: - ldr r0, _0802148C @ =gUnk_020000B0 - ldr r0, [r0] - movs r1, #0x2e - ldrsh r2, [r0, r1] - movs r4, #0x32 - ldrsh r0, [r0, r4] - adds r3, r0, #0 - adds r3, #0x2c - b _080214B8 - .align 2, 0 -_0802148C: .4byte gUnk_020000B0 -_08021490: - ldr r0, _080214A4 @ =gUnk_020000B0 - ldr r1, [r0] - movs r2, #0x2e - ldrsh r0, [r1, r2] - adds r2, r0, #0 - subs r2, #0x24 - movs r4, #0x32 - ldrsh r3, [r1, r4] - b _080214B8 - .align 2, 0 -_080214A4: .4byte gUnk_020000B0 -_080214A8: - ldr r0, _080214F0 @ =gUnk_020000B0 - ldr r0, [r0] - movs r1, #0x2e - ldrsh r2, [r0, r1] - movs r4, #0x32 - ldrsh r0, [r0, r4] - adds r3, r0, #0 - subs r3, #0x1d -_080214B8: - movs r1, #0x2e - ldrsh r0, [r5, r1] - subs r0, r2, r0 - adds r0, #3 - cmp r0, #6 - bhi _080214D0 - movs r4, #0x32 - ldrsh r0, [r5, r4] - subs r0, r3, r0 - adds r0, #2 - cmp r0, #4 - bls _080214E8 -_080214D0: - movs r1, #0x2e - ldrsh r0, [r5, r1] - movs r4, #0x32 - ldrsh r1, [r5, r4] - bl sub_080045D4 - strb r0, [r5, #0x15] - adds r0, r5, #0 - bl sub_080AEF88 - cmp r0, #0 - bne _080214F4 -_080214E8: - adds r0, r5, #0 - bl sub_080212B0 - b _080214FA - .align 2, 0 -_080214F0: .4byte gUnk_020000B0 -_080214F4: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame -_080214FA: - pop {r4, r5, pc} - - thumb_func_start sub_080214FC -sub_080214FC: @ 0x080214FC - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0802153C - ldr r0, _08021538 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - adds r2, r0, #0 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x1f - ands r0, r1 - subs r0, r2, r0 - subs r0, #2 - cmp r0, #4 - bhi _0802153C - adds r0, r2, #4 - movs r1, #0x18 - ands r0, r1 - lsrs r0, r0, #3 - strb r0, [r4, #0x14] - movs r0, #1 - b _0802153E - .align 2, 0 -_08021538: .4byte gUnk_020000B0 -_0802153C: - movs r0, #0 -_0802153E: - pop {r4, pc} - - thumb_func_start sub_08021540 -sub_08021540: @ 0x08021540 - push {r4, r5, lr} - adds r4, r0, #0 - bl Random - adds r5, r0, #0 - adds r0, r4, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _08021566 - movs r0, #1 - ands r0, r5 - cmp r0, #0 - beq _08021566 - adds r0, r4, #0 - bl sub_08049EE4 - adds r1, r0, #4 - b _08021568 -_08021566: - lsrs r1, r5, #0x10 -_08021568: - movs r0, #0x18 - ands r1, r0 - strb r1, [r4, #0x15] - ldrb r0, [r4, #0x14] - bl sub_08021274 - adds r2, r0, #0 - cmp r2, #0xff - beq _08021582 - adds r0, r4, #0 - movs r1, #3 - bl sub_08021218 -_08021582: - movs r0, #0x1e - strb r0, [r4, #0xe] - pop {r4, r5, pc} - - thumb_func_start sub_08021588 -sub_08021588: @ 0x08021588 - push {lr} - adds r2, r0, #0 - ldr r1, [r2, #0x54] - cmp r1, #0 - beq _08021598 - movs r0, #0 - str r0, [r1, #0x50] - str r0, [r2, #0x54] -_08021598: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0802159C -sub_0802159C: @ 0x0802159C - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - adds r0, r1, #0 - cmp r0, #1 - bne _080215D4 - movs r0, #0 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x51 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0 - movs r2, #3 - bl sub_0804A98C - cmp r0, #0 - beq _080215CA - str r4, [r0, #0x50] - str r0, [r4, #0x54] -_080215CA: - movs r0, #0x8b - lsls r0, r0, #1 - bl sub_08004488 - b _080215F8 -_080215D4: - cmp r0, #2 - bne _080215E4 - movs r0, #0 - strb r0, [r2] - adds r0, r4, #0 - bl sub_08021588 - b _080215F8 -_080215E4: - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _080215F8 - movs r0, #0xdf - ands r0, r1 - strb r0, [r2] - ldr r0, _080215FC @ =0x00000115 - bl sub_08004488 -_080215F8: - pop {r4, pc} - .align 2, 0 -_080215FC: .4byte 0x00000115 - - thumb_func_start sub_08021600 -sub_08021600: @ 0x08021600 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x5a - ldrb r0, [r1] - cmp r0, #1 - bne _08021634 - movs r0, #0 - strb r0, [r1] - subs r1, #0x1b - movs r0, #0x51 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0 - movs r2, #4 - bl sub_0804A98C - cmp r0, #0 - beq _0802162A - str r4, [r0, #0x50] - str r0, [r4, #0x54] -_0802162A: - movs r0, #0x87 - lsls r0, r0, #1 - bl sub_08004488 - b _08021642 -_08021634: - cmp r0, #2 - bne _08021642 - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08021588 -_08021642: - pop {r4, pc} - - thumb_func_start sub_08021644 -sub_08021644: @ 0x08021644 - push {lr} - adds r2, r0, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08021660 - movs r0, #0xdf - ands r0, r1 - strb r0, [r2] - movs r0, #0x7d - bl sub_08004488 -_08021660: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08021664 -sub_08021664: @ 0x08021664 - push {lr} - ldrb r2, [r0, #0x14] - cmp r2, #1 - beq _08021690 - cmp r2, #1 - bgt _08021676 - cmp r2, #0 - beq _08021680 - b _08021698 -_08021676: - cmp r2, #2 - beq _08021688 - cmp r2, #3 - beq _08021690 - b _08021698 -_08021680: - movs r2, #0x22 - bl sub_08049F1C - b _0802169A -_08021688: - movs r2, #0x13 - bl sub_08049F1C - b _0802169A -_08021690: - movs r2, #0x1a - bl sub_08049F1C - b _0802169A -_08021698: - movs r0, #0 -_0802169A: - pop {pc} - - thumb_func_start sub_0802169C -sub_0802169C: @ 0x0802169C - push {lr} - ldrb r2, [r0, #0x14] - cmp r2, #1 - beq _080216C0 - cmp r2, #1 - bgt _080216AE - cmp r2, #0 - beq _080216B8 - b _080216CE -_080216AE: - cmp r2, #2 - beq _080216BC - cmp r2, #3 - beq _080216C0 - b _080216CE -_080216B8: - movs r2, #0x2c - b _080216C2 -_080216BC: - movs r2, #0x1d - b _080216C2 -_080216C0: - movs r2, #0x24 -_080216C2: - bl sub_08049F1C - cmp r0, #0 - bne _080216CE - movs r0, #1 - b _080216D0 -_080216CE: - movs r0, #0 -_080216D0: - pop {pc} - .align 2, 0 diff --git a/asm/non_matching/darkNut/sub_08021274.inc b/asm/non_matching/darkNut/sub_08021274.inc new file mode 100644 index 00000000..9809b641 --- /dev/null +++ b/asm/non_matching/darkNut/sub_08021274.inc @@ -0,0 +1,43 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {lr} + adds r2, r0, #0 + movs r0, #7 + ands r0, r1 + subs r0, #3 + cmp r0, #2 + bhi _0802129A + movs r3, #0x18 + adds r0, r1, #0 + ands r0, r3 + lsrs r0, r0, #3 + cmp r0, r2 + beq _080212AA + adds r0, r1, #0 + adds r0, #8 + ands r0, r3 + lsrs r0, r0, #3 + cmp r0, r2 + beq _080212AA +_0802129A: + adds r0, r1, #4 + movs r1, #0x18 + ands r0, r1 + lsrs r1, r0, #3 + cmp r2, r1 + beq _080212AA + adds r0, r1, #0 + b _080212AC +_080212AA: + movs r0, #0xff +_080212AC: + pop {pc} + .align 2, 0 + + .syntax divided diff --git a/data/darkNutAnimations.s b/data/darkNutAnimations.s new file mode 100644 index 00000000..67419e1d --- /dev/null +++ b/data/darkNutAnimations.s @@ -0,0 +1,239 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + .align 2 + +gUnk_080CAB6C:: @ 080CAB6C + .incbin "baserom.gba", 0x0CAB6C, 0x0000004 + +gUnk_080CAB70:: @ 080CAB70 + .incbin "baserom.gba", 0x0CAB70, 0x0000004 + +gUnk_080CAB74:: @ 080CAB74 + .incbin "baserom.gba", 0x0CAB74, 0x0000004 + +gUnk_080CAB78:: @ 080CAB78 + .incbin "baserom.gba", 0x0CAB78, 0x0000004 + +gUnk_080CAB7C:: @ 080CAB7C + .incbin "baserom.gba", 0x0CAB7C, 0x0000010 + +gUnk_080CAB8C:: @ 080CAB8C + .incbin "baserom.gba", 0x0CAB8C, 0x0000010 + +gUnk_080CAB9C:: @ 080CAB9C + .incbin "baserom.gba", 0x0CAB9C, 0x0000010 + +gUnk_080CABAC:: @ 080CABAC + .incbin "baserom.gba", 0x0CABAC, 0x0000010 + +gUnk_080CABBC:: @ 080CABBC + .incbin "baserom.gba", 0x0CABBC, 0x0000004 + +gUnk_080CABC0:: @ 080CABC0 + .incbin "baserom.gba", 0x0CABC0, 0x0000004 + +gUnk_080CABC4:: @ 080CABC4 + .incbin "baserom.gba", 0x0CABC4, 0x0000004 + +gUnk_080CABC8:: @ 080CABC8 + .incbin "baserom.gba", 0x0CABC8, 0x0000004 + +gUnk_080CABCC:: @ 080CABCC + .incbin "baserom.gba", 0x0CABCC, 0x0000019 + +gUnk_080CABE5:: @ 080CABE5 + .incbin "baserom.gba", 0x0CABE5, 0x0000019 + +gUnk_080CABFE:: @ 080CABFE + .incbin "baserom.gba", 0x0CABFE, 0x0000019 + +gUnk_080CAC17:: @ 080CAC17 + .incbin "baserom.gba", 0x0CAC17, 0x0000019 + +gUnk_080CAC30:: @ 080CAC30 + .incbin "baserom.gba", 0x0CAC30, 0x000000C + +gUnk_080CAC3C:: @ 080CAC3C + .incbin "baserom.gba", 0x0CAC3C, 0x000000C + +gUnk_080CAC48:: @ 080CAC48 + .incbin "baserom.gba", 0x0CAC48, 0x000000C + +gUnk_080CAC54:: @ 080CAC54 + .incbin "baserom.gba", 0x0CAC54, 0x000000C + +gUnk_080CAC60:: @ 080CAC60 + .incbin "baserom.gba", 0x0CAC60, 0x0000028 + +gUnk_080CAC88:: @ 080CAC88 + .incbin "baserom.gba", 0x0CAC88, 0x0000028 + +gUnk_080CACB0:: @ 080CACB0 + .incbin "baserom.gba", 0x0CACB0, 0x0000028 + +gUnk_080CACD8:: @ 080CACD8 + .incbin "baserom.gba", 0x0CACD8, 0x0000028 + +gUnk_080CAD00:: @ 080CAD00 + .incbin "baserom.gba", 0x0CAD00, 0x0000019 + +gUnk_080CAD19:: @ 080CAD19 + .incbin "baserom.gba", 0x0CAD19, 0x0000019 + +gUnk_080CAD32:: @ 080CAD32 + .incbin "baserom.gba", 0x0CAD32, 0x0000019 + +gUnk_080CAD4B:: @ 080CAD4B + .incbin "baserom.gba", 0x0CAD4B, 0x0000019 + +gUnk_080CAD64:: @ 080CAD64 + .incbin "baserom.gba", 0x0CAD64, 0x000000C + +gUnk_080CAD70:: @ 080CAD70 + .incbin "baserom.gba", 0x0CAD70, 0x000000C + +gUnk_080CAD7C:: @ 080CAD7C + .incbin "baserom.gba", 0x0CAD7C, 0x000000C + +gUnk_080CAD88:: @ 080CAD88 + .incbin "baserom.gba", 0x0CAD88, 0x000000C + +gUnk_080CAD94:: @ 080CAD94 + .incbin "baserom.gba", 0x0CAD94, 0x0000015 + +gUnk_080CADA9:: @ 080CADA9 + .incbin "baserom.gba", 0x0CADA9, 0x0000015 + +gUnk_080CADBE:: @ 080CADBE + .incbin "baserom.gba", 0x0CADBE, 0x0000015 + +gUnk_080CADD3:: @ 080CADD3 + .incbin "baserom.gba", 0x0CADD3, 0x0000015 + +gUnk_080CADE8:: @ 080CADE8 + .incbin "baserom.gba", 0x0CADE8, 0x0000019 + +gUnk_080CAE01:: @ 080CAE01 + .incbin "baserom.gba", 0x0CAE01, 0x0000019 + +gUnk_080CAE1A:: @ 080CAE1A + .incbin "baserom.gba", 0x0CAE1A, 0x0000019 + +gUnk_080CAE33:: @ 080CAE33 + .incbin "baserom.gba", 0x0CAE33, 0x0000019 + +gUnk_080CAE4C:: @ 080CAE4C + .incbin "baserom.gba", 0x0CAE4C, 0x0000019 + +gUnk_080CAE65:: @ 080CAE65 + .incbin "baserom.gba", 0x0CAE65, 0x0000019 + +gUnk_080CAE7E:: @ 080CAE7E + .incbin "baserom.gba", 0x0CAE7E, 0x0000019 + +gUnk_080CAE97:: @ 080CAE97 + .incbin "baserom.gba", 0x0CAE97, 0x0000019 + +gUnk_080CAEB0:: @ 080CAEB0 + .incbin "baserom.gba", 0x0CAEB0, 0x0000010 + +gUnk_080CAEC0:: @ 080CAEC0 + .incbin "baserom.gba", 0x0CAEC0, 0x0000010 + +gUnk_080CAED0:: @ 080CAED0 + .incbin "baserom.gba", 0x0CAED0, 0x0000010 + +gUnk_080CAEE0:: @ 080CAEE0 + .incbin "baserom.gba", 0x0CAEE0, 0x0000010 + +gUnk_080CAEF0:: @ 080CAEF0 + .incbin "baserom.gba", 0x0CAEF0, 0x0000030 + +gUnk_080CAF20:: @ 080CAF20 + .incbin "baserom.gba", 0x0CAF20, 0x0000030 + +gUnk_080CAF50:: @ 080CAF50 + .incbin "baserom.gba", 0x0CAF50, 0x0000030 + +gUnk_080CAF80:: @ 080CAF80 + .incbin "baserom.gba", 0x0CAF80, 0x0000030 + +gUnk_080CAFB0:: @ 080CAFB0 + .incbin "baserom.gba", 0x0CAFB0, 0x0000018 + +gUnk_080CAFC8:: @ 080CAFC8 + .incbin "baserom.gba", 0x0CAFC8, 0x0000018 + +gUnk_080CAFE0:: @ 080CAFE0 + .incbin "baserom.gba", 0x0CAFE0, 0x0000018 + +gUnk_080CAFF8:: @ 080CAFF8 + .incbin "baserom.gba", 0x0CAFF8, 0x0000018 + +gUnk_080CB010:: @ 080CB010 + .incbin "baserom.gba", 0x0CB010, 0x0000035 + +gUnk_080CB045:: @ 080CB045 + .incbin "baserom.gba", 0x0CB045, 0x0000035 + +gUnk_080CB07A:: @ 080CB07A + .incbin "baserom.gba", 0x0CB07A, 0x0000035 + +gUnk_080CB0AF:: @ 080CB0AF + .incbin "baserom.gba", 0x0CB0AF, 0x0000035 + +gUnk_080CB0E4:: @ 080CB0E4 + .incbin "baserom.gba", 0x0CB0E4, 0x0000008 + +gUnk_080CB0EC:: @ 080CB0EC + .incbin "baserom.gba", 0x0CB0EC, 0x0000008 + +gUnk_080CB0F4:: @ 080CB0F4 + .incbin "baserom.gba", 0x0CB0F4, 0x0000008 + +gUnk_080CB0FC:: @ 080CB0FC + .incbin "baserom.gba", 0x0CB0FC, 0x0000008 + +gUnk_080CB104:: @ 080CB104 + .incbin "baserom.gba", 0x0CB104, 0x0000070 + +gUnk_080CB174:: @ 080CB174 + .incbin "baserom.gba", 0x0CB174, 0x0000070 + +gUnk_080CB1E4:: @ 080CB1E4 + .incbin "baserom.gba", 0x0CB1E4, 0x0000070 + +gUnk_080CB254:: @ 080CB254 + .incbin "baserom.gba", 0x0CB254, 0x0000070 + +gUnk_080CB2C4:: @ 080CB2C4 + .incbin "baserom.gba", 0x0CB2C4, 0x0000034 + +gUnk_080CB2F8:: @ 080CB2F8 + .incbin "baserom.gba", 0x0CB2F8, 0x0000034 + +gUnk_080CB32C:: @ 080CB32C + .incbin "baserom.gba", 0x0CB32C, 0x0000034 + +gUnk_080CB360:: @ 080CB360 + .incbin "baserom.gba", 0x0CB360, 0x0000034 + +gUnk_080CB394:: @ 080CB394 + .incbin "baserom.gba", 0x0CB394, 0x0000029 + +gUnk_080CB3BD:: @ 080CB3BD + .incbin "baserom.gba", 0x0CB3BD, 0x0000029 + +gUnk_080CB3E6:: @ 080CB3E6 + .incbin "baserom.gba", 0x0CB3E6, 0x0000029 + +gUnk_080CB40F:: @ 080CB40F + .incbin "baserom.gba", 0x0CB40F, 0x0000029 + +gUnk_080CB438:: @ 080CB438 + .incbin "baserom.gba", 0x0CB438, 0x00000C4 + +gUnk_080CB4FC:: @ 080CB4FC + .incbin "baserom.gba", 0x0CB4FC, 0x0000074 diff --git a/data/data_080CAA98.s b/data/data_080CAA98.s index 305d378b..ae280443 100644 --- a/data/data_080CAA98.s +++ b/data/data_080CAA98.s @@ -4,282 +4,6 @@ .section .rodata .align 2 -gUnk_080CAA98:: @ 080CAA98 - .incbin "baserom.gba", 0x0CAA98, 0x0000018 - -gUnk_080CAAB0:: @ 080CAAB0 - .incbin "baserom.gba", 0x0CAAB0, 0x0000050 - -gUnk_080CAB00:: @ 080CAB00 - .incbin "baserom.gba", 0x0CAB00, 0x0000004 - -gUnk_080CAB04:: @ 080CAB04 - .incbin "baserom.gba", 0x0CAB04, 0x0000004 - -gUnk_080CAB08:: @ 080CAB08 - .incbin "baserom.gba", 0x0CAB08, 0x0000004 - -gUnk_080CAB0C:: @ 080CAB0C - .incbin "baserom.gba", 0x0CAB0C, 0x0000004 - -gUnk_080CAB10:: @ 080CAB10 - .incbin "baserom.gba", 0x0CAB10, 0x0000004 - -gUnk_080CAB14:: @ 080CAB14 - .incbin "baserom.gba", 0x0CAB14, 0x0000026 - -gUnk_080CAB3A:: @ 080CAB3A - .incbin "baserom.gba", 0x0CAB3A, 0x0000008 - -gUnk_080CAB42:: @ 080CAB42 - .incbin "baserom.gba", 0x0CAB42, 0x0000008 - -gUnk_080CAB4A:: @ 080CAB4A - .incbin "baserom.gba", 0x0CAB4A, 0x0000008 - -gUnk_080CAB52:: @ 080CAB52 - .incbin "baserom.gba", 0x0CAB52, 0x0000006 - -gUnk_080CAB58:: @ 080CAB58 - .incbin "baserom.gba", 0x0CAB58, 0x0000010 - -gUnk_080CAB68:: @ 080CAB68 - .incbin "baserom.gba", 0x0CAB68, 0x0000004 - -gUnk_080CAB6C:: @ 080CAB6C - .incbin "baserom.gba", 0x0CAB6C, 0x0000004 - -gUnk_080CAB70:: @ 080CAB70 - .incbin "baserom.gba", 0x0CAB70, 0x0000004 - -gUnk_080CAB74:: @ 080CAB74 - .incbin "baserom.gba", 0x0CAB74, 0x0000004 - -gUnk_080CAB78:: @ 080CAB78 - .incbin "baserom.gba", 0x0CAB78, 0x0000004 - -gUnk_080CAB7C:: @ 080CAB7C - .incbin "baserom.gba", 0x0CAB7C, 0x0000010 - -gUnk_080CAB8C:: @ 080CAB8C - .incbin "baserom.gba", 0x0CAB8C, 0x0000010 - -gUnk_080CAB9C:: @ 080CAB9C - .incbin "baserom.gba", 0x0CAB9C, 0x0000010 - -gUnk_080CABAC:: @ 080CABAC - .incbin "baserom.gba", 0x0CABAC, 0x0000010 - -gUnk_080CABBC:: @ 080CABBC - .incbin "baserom.gba", 0x0CABBC, 0x0000004 - -gUnk_080CABC0:: @ 080CABC0 - .incbin "baserom.gba", 0x0CABC0, 0x0000004 - -gUnk_080CABC4:: @ 080CABC4 - .incbin "baserom.gba", 0x0CABC4, 0x0000004 - -gUnk_080CABC8:: @ 080CABC8 - .incbin "baserom.gba", 0x0CABC8, 0x0000004 - -gUnk_080CABCC:: @ 080CABCC - .incbin "baserom.gba", 0x0CABCC, 0x0000019 - -gUnk_080CABE5:: @ 080CABE5 - .incbin "baserom.gba", 0x0CABE5, 0x0000019 - -gUnk_080CABFE:: @ 080CABFE - .incbin "baserom.gba", 0x0CABFE, 0x0000019 - -gUnk_080CAC17:: @ 080CAC17 - .incbin "baserom.gba", 0x0CAC17, 0x0000019 - -gUnk_080CAC30:: @ 080CAC30 - .incbin "baserom.gba", 0x0CAC30, 0x000000C - -gUnk_080CAC3C:: @ 080CAC3C - .incbin "baserom.gba", 0x0CAC3C, 0x000000C - -gUnk_080CAC48:: @ 080CAC48 - .incbin "baserom.gba", 0x0CAC48, 0x000000C - -gUnk_080CAC54:: @ 080CAC54 - .incbin "baserom.gba", 0x0CAC54, 0x000000C - -gUnk_080CAC60:: @ 080CAC60 - .incbin "baserom.gba", 0x0CAC60, 0x0000028 - -gUnk_080CAC88:: @ 080CAC88 - .incbin "baserom.gba", 0x0CAC88, 0x0000028 - -gUnk_080CACB0:: @ 080CACB0 - .incbin "baserom.gba", 0x0CACB0, 0x0000028 - -gUnk_080CACD8:: @ 080CACD8 - .incbin "baserom.gba", 0x0CACD8, 0x0000028 - -gUnk_080CAD00:: @ 080CAD00 - .incbin "baserom.gba", 0x0CAD00, 0x0000019 - -gUnk_080CAD19:: @ 080CAD19 - .incbin "baserom.gba", 0x0CAD19, 0x0000019 - -gUnk_080CAD32:: @ 080CAD32 - .incbin "baserom.gba", 0x0CAD32, 0x0000019 - -gUnk_080CAD4B:: @ 080CAD4B - .incbin "baserom.gba", 0x0CAD4B, 0x0000019 - -gUnk_080CAD64:: @ 080CAD64 - .incbin "baserom.gba", 0x0CAD64, 0x000000C - -gUnk_080CAD70:: @ 080CAD70 - .incbin "baserom.gba", 0x0CAD70, 0x000000C - -gUnk_080CAD7C:: @ 080CAD7C - .incbin "baserom.gba", 0x0CAD7C, 0x000000C - -gUnk_080CAD88:: @ 080CAD88 - .incbin "baserom.gba", 0x0CAD88, 0x000000C - -gUnk_080CAD94:: @ 080CAD94 - .incbin "baserom.gba", 0x0CAD94, 0x0000015 - -gUnk_080CADA9:: @ 080CADA9 - .incbin "baserom.gba", 0x0CADA9, 0x0000015 - -gUnk_080CADBE:: @ 080CADBE - .incbin "baserom.gba", 0x0CADBE, 0x0000015 - -gUnk_080CADD3:: @ 080CADD3 - .incbin "baserom.gba", 0x0CADD3, 0x0000015 - -gUnk_080CADE8:: @ 080CADE8 - .incbin "baserom.gba", 0x0CADE8, 0x0000019 - -gUnk_080CAE01:: @ 080CAE01 - .incbin "baserom.gba", 0x0CAE01, 0x0000019 - -gUnk_080CAE1A:: @ 080CAE1A - .incbin "baserom.gba", 0x0CAE1A, 0x0000019 - -gUnk_080CAE33:: @ 080CAE33 - .incbin "baserom.gba", 0x0CAE33, 0x0000019 - -gUnk_080CAE4C:: @ 080CAE4C - .incbin "baserom.gba", 0x0CAE4C, 0x0000019 - -gUnk_080CAE65:: @ 080CAE65 - .incbin "baserom.gba", 0x0CAE65, 0x0000019 - -gUnk_080CAE7E:: @ 080CAE7E - .incbin "baserom.gba", 0x0CAE7E, 0x0000019 - -gUnk_080CAE97:: @ 080CAE97 - .incbin "baserom.gba", 0x0CAE97, 0x0000019 - -gUnk_080CAEB0:: @ 080CAEB0 - .incbin "baserom.gba", 0x0CAEB0, 0x0000010 - -gUnk_080CAEC0:: @ 080CAEC0 - .incbin "baserom.gba", 0x0CAEC0, 0x0000010 - -gUnk_080CAED0:: @ 080CAED0 - .incbin "baserom.gba", 0x0CAED0, 0x0000010 - -gUnk_080CAEE0:: @ 080CAEE0 - .incbin "baserom.gba", 0x0CAEE0, 0x0000010 - -gUnk_080CAEF0:: @ 080CAEF0 - .incbin "baserom.gba", 0x0CAEF0, 0x0000030 - -gUnk_080CAF20:: @ 080CAF20 - .incbin "baserom.gba", 0x0CAF20, 0x0000030 - -gUnk_080CAF50:: @ 080CAF50 - .incbin "baserom.gba", 0x0CAF50, 0x0000030 - -gUnk_080CAF80:: @ 080CAF80 - .incbin "baserom.gba", 0x0CAF80, 0x0000030 - -gUnk_080CAFB0:: @ 080CAFB0 - .incbin "baserom.gba", 0x0CAFB0, 0x0000018 - -gUnk_080CAFC8:: @ 080CAFC8 - .incbin "baserom.gba", 0x0CAFC8, 0x0000018 - -gUnk_080CAFE0:: @ 080CAFE0 - .incbin "baserom.gba", 0x0CAFE0, 0x0000018 - -gUnk_080CAFF8:: @ 080CAFF8 - .incbin "baserom.gba", 0x0CAFF8, 0x0000018 - -gUnk_080CB010:: @ 080CB010 - .incbin "baserom.gba", 0x0CB010, 0x0000035 - -gUnk_080CB045:: @ 080CB045 - .incbin "baserom.gba", 0x0CB045, 0x0000035 - -gUnk_080CB07A:: @ 080CB07A - .incbin "baserom.gba", 0x0CB07A, 0x0000035 - -gUnk_080CB0AF:: @ 080CB0AF - .incbin "baserom.gba", 0x0CB0AF, 0x0000035 - -gUnk_080CB0E4:: @ 080CB0E4 - .incbin "baserom.gba", 0x0CB0E4, 0x0000008 - -gUnk_080CB0EC:: @ 080CB0EC - .incbin "baserom.gba", 0x0CB0EC, 0x0000008 - -gUnk_080CB0F4:: @ 080CB0F4 - .incbin "baserom.gba", 0x0CB0F4, 0x0000008 - -gUnk_080CB0FC:: @ 080CB0FC - .incbin "baserom.gba", 0x0CB0FC, 0x0000008 - -gUnk_080CB104:: @ 080CB104 - .incbin "baserom.gba", 0x0CB104, 0x0000070 - -gUnk_080CB174:: @ 080CB174 - .incbin "baserom.gba", 0x0CB174, 0x0000070 - -gUnk_080CB1E4:: @ 080CB1E4 - .incbin "baserom.gba", 0x0CB1E4, 0x0000070 - -gUnk_080CB254:: @ 080CB254 - .incbin "baserom.gba", 0x0CB254, 0x0000070 - -gUnk_080CB2C4:: @ 080CB2C4 - .incbin "baserom.gba", 0x0CB2C4, 0x0000034 - -gUnk_080CB2F8:: @ 080CB2F8 - .incbin "baserom.gba", 0x0CB2F8, 0x0000034 - -gUnk_080CB32C:: @ 080CB32C - .incbin "baserom.gba", 0x0CB32C, 0x0000034 - -gUnk_080CB360:: @ 080CB360 - .incbin "baserom.gba", 0x0CB360, 0x0000034 - -gUnk_080CB394:: @ 080CB394 - .incbin "baserom.gba", 0x0CB394, 0x0000029 - -gUnk_080CB3BD:: @ 080CB3BD - .incbin "baserom.gba", 0x0CB3BD, 0x0000029 - -gUnk_080CB3E6:: @ 080CB3E6 - .incbin "baserom.gba", 0x0CB3E6, 0x0000029 - -gUnk_080CB40F:: @ 080CB40F - .incbin "baserom.gba", 0x0CB40F, 0x0000029 - -gUnk_080CB438:: @ 080CB438 - .incbin "baserom.gba", 0x0CB438, 0x00000C4 - -gUnk_080CB4FC:: @ 080CB4FC - .incbin "baserom.gba", 0x0CB4FC, 0x0000074 - gUnk_080CB570:: @ 080CB570 .incbin "baserom.gba", 0x0CB570, 0x0000018 diff --git a/include/functions.h b/include/functions.h index 25ebf1ca..cd11f49e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -60,7 +60,7 @@ extern void sub_080791D0(); extern void sub_0805EC9C(); extern void sub_0805EC60(); extern void sub_080873D0(); -extern u8 sub_080045D4(s16, s16, u16, u16); +extern u8 sub_080045D4(s16, s16, u32, u32); extern void sub_0806F69C(Entity*); extern void sub_0805E3A0(void*, u32); extern void sub_0806D0B0(Entity*); diff --git a/linker.ld b/linker.ld index dfbdb5ac..61480876 100644 --- a/linker.ld +++ b/linker.ld @@ -330,7 +330,7 @@ SECTIONS { src/enemy/leever.o(.text); src/enemy/peahat.o(.text); src/enemy/rollobite.o(.text); - asm/darkNut.o(.text); + src/enemy/darkNut.o(.text); src/enemy/hangingSeed.o(.text); asm/beetle.o(.text); src/enemy/keese.o(.text); @@ -915,6 +915,8 @@ SECTIONS { data/peahatAnimations.o(.rodata); src/enemy/rollobite.o(.rodata); data/rollobiteAnimations.o(.rodata); + src/enemy/darkNut.o(.rodata); + data/darkNutAnimations.o(.rodata); data/data_080CAA98.o(.rodata); src/enemy.o(.rodata); data/data_080D3D94.o(.rodata); diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c new file mode 100644 index 00000000..f226026f --- /dev/null +++ b/src/enemy/darkNut.c @@ -0,0 +1,754 @@ +#include "entity.h" +#include "functions.h" + +typedef struct { + u8 field_0x0; + u8 field_0x1; +} PACKED stuct_080CAB14; + +void sub_08021218(); +void sub_08021588(); +void sub_080213D0(); +void sub_08021390(); +void sub_0802159C(); +void sub_0804AA1C(); +void sub_080213F0(); +u32 sub_080214FC(); +void sub_08021540(); +void sub_08021600(); +void sub_080213B0(); +u32 sub_08049F64(); +u32 sub_0802169C(); +void sub_0802124C(); +void sub_08021644(); +void sub_08021414(); +void sub_08021400(); +u32 sub_08021274(u32, u32); +u32 sub_08021664(Entity*, Entity*); +u32 sub_0804A044(Entity*, Entity*, u32); +void sub_08021424(Entity*); + +extern Entity* gUnk_020000B0; + +extern void (*const gUnk_080CAA98[])(Entity*); +extern void (*const gUnk_080CAAB0[])(Entity*); + +extern const s8 gUnk_080CAB00[]; +extern const s8 gUnk_080CAB04[]; +extern const u8 gUnk_080CAB08[]; +extern const s8 gUnk_080CAB0C[]; +extern const s8 gUnk_080CAB10[]; +extern const stuct_080CAB14 gUnk_080CAB14[]; +extern const u8 gUnk_080CAB3A[]; +extern const u8 gUnk_080CAB42[]; +extern const u8 gUnk_080CAB4A[]; +extern const u8 gUnk_080CAB52[]; +extern const u8 gUnk_080CAB68[]; + +extern void (*const gUnk_080CAB58[])(Entity*); + +void DarkNut(Entity* this) { + EnemyFunctionHandler(this, gUnk_080CAA98); + SetChildOffset(this, 0, 1, -22); +} + +void sub_08020BA0(Entity* this) { + gUnk_080CAAB0[this->action](this); +} + +void sub_08020BB8(Entity* this) { + switch (this->bitfield & 0x7f) { + case 0x1c: + this->action = 11; + this->actionDelay = gUnk_080CAB0C[this->entityType.form]; + this->damageType = 81; + sub_08021218(this, 8, (((this->field_0x3e ^ 0x10) + 4) & 0x18) >> 3); + sub_08021588(this); + sub_0804A9FC(this, 0x1c); + break; + case 0x16: + this->action = 11; + this->actionDelay = gUnk_080CAB10[this->entityType.form]; + this->damageType = 81; + sub_08021218(this, 8, (((this->field_0x3e ^ 0x10) + 4) & 0x18) >> 3); + sub_08021588(this); + sub_0804A9FC(this, 0x1c); + break; + case 0x4b: + if (this->action == 13 || this->action == 15 || this->action == 19 || this->action == 18) + break; + switch (this->field_0x78.HALF.HI) { + case 8 ... 12: + this->field_0x7a.HALF.LO = gUnk_080CAB04[this->entityType.form]; + break; + case 4 ... 6: + this->field_0x7a.HALF.LO = gUnk_080CAB00[this->entityType.form]; + break; + default: + this->field_0x7a.HALF.LO = 0; + break; + } + this->action = 10; + sub_08021218(this, 0xb, this->animationState); + sub_08004488(0x15d); + sub_08021588(this); + break; + case 0x4c: + if (this->action == 15) { + u8 bVar3 = 0xff; + if (this->attachedEntity != NULL) { + bVar3 = this->attachedEntity->bitfield & 0x7f; + } + if (bVar3 == 2) { + sub_080213D0(this, gUnk_080CAB08[this->entityType.form]); + } else { + sub_080213D0(this, 0); + } + } + break; + default: + if (this->currentHealth != this->field_0x78.HALF.LO) { + sub_08021588(this); + sub_08021390(this); + sub_0804AA1C(this); + } + break; + } + this->field_0x78.HALF.LO = this->currentHealth; + sub_0804AA30(this, gUnk_080CAA98); +} + +void nullsub_129(Entity* this) { +} + +void sub_08020D70(Entity* this) { + sub_0804A720(this); + this->action = 1; + this->field_0x74.HALF.HI = 0; + this->field_0x78.HALF.LO = this->currentHealth; + this->animationState = -1; + sub_08021218(this, 0, 2); +} + +void sub_08020D9C(Entity* this) { + if (sub_08049FDC(this, 1)) + sub_080213F0(this); +} + +void sub_08020DB4(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) + sub_08021390(this); +} + +void sub_08020DD4(Entity* this) { + if (sub_080214FC(this)) { + sub_080213F0(this); + } else if (--this->field_0x76.HWORD == 0) { + this->action = 5; + sub_08021218(this, 5, this->animationState); + } else { + if (--this->actionDelay == 0) + sub_08021540(this); + sub_080AEF88(this); + UpdateAnimationSingleFrame(this); + } +} + +void sub_08020E28(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) + sub_080213B0(this); +} + +void sub_08020E48(Entity* this) { + if (sub_080214FC(this)) { + sub_080213F0(this); + } else { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) + sub_080213B0(this); + } +} + +void sub_08020E78(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) + sub_08021390(this); +} + +void sub_08020E98(Entity* this) { + if (sub_08049F64(this, 1, 0x38)) { + if (sub_0802169C(this, gUnk_020000B0)) { + this->action = 8; + sub_08021218(this, 7, this->animationState); + } else { + this->direction = GetFacingDirection(gUnk_020000B0, this); + if (sub_080AEF88(this) == 0) { + this->action = 8; + sub_08021218(this, 7, this->animationState); + } else { + this->direction ^= 0x10; + sub_0802124C(this); + sub_08021644(this); + } + } + } else { + if (gUnk_020000B0 == NULL) { + sub_08021414(this); + } else { + this->direction = GetFacingDirection(this, gUnk_020000B0); + sub_080AEF88(this); + sub_0802124C(this); + sub_08021644(this); + } + } +} + +void sub_08020F28(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) + sub_08021400(this); +} + +void sub_08020F48(Entity* this) { + if (sub_08049F64(this, 1, 0x48)) { + if (sub_08021664(this, gUnk_020000B0)) { + u32 uVar2 = sub_0804A044(this, gUnk_020000B0, 9); + if (uVar2 == 0xff) { + sub_08021424(this); + } else { + Entity* pEVar3; + + this->action = 14; + sub_08021218(this, 13, uVar2 >> 3); + pEVar3 = sub_0804A98C(this, 0, 1); + if (pEVar3) { + pEVar3->parent = this; + this->attachedEntity = pEVar3; + } + } + } else { + sub_08021424(this); + } + } else { + sub_08021390(this); + } +} + +void sub_08020FAC(Entity* this) { + if (this->frames.all & 0x80) { + if (this->field_0x7a.HALF.LO) { + this->field_0x7a.HALF.LO--; + } else { + this->hurtBlinkTime = -8; + sub_08021390(this); + } + } else { + UpdateAnimationSingleFrame(this); + } +} + +void sub_08020FE4(Entity* this) { + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0) { + this->action = 12; + sub_08021218(this, 9, this->animationState); + sub_0804AA1C(this); + } +} + +void sub_08021010(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) { + this->damageType = 0x56; + sub_080213F0(this); + } +} + +void sub_08021038(Entity* this) { + if (this->attachedEntity == NULL && this->frames.all) { + Entity* pEVar2 = (Entity*)sub_0804A98C(this, 0, 0); + if (pEVar2) { + pEVar2->parent = this; + this->attachedEntity = pEVar2; + } + sub_08004488(270); + } + + if (this->frames.all & 0x80) { + sub_08021588(this); + if (this->field_0x7c.BYTES.byte0) { + this->field_0x7c.BYTES.byte0--; + } else { + sub_08021390(this); + } + } else { + UpdateAnimationSingleFrame(this); + if (this->frames.all == 4) + this->damageType = 81; + } +} + +void sub_080210A8(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 1) { + this->frames.all = 0; + sub_08021588(this); + sub_08004488(349); + } else if (this->frames.all & 0x80) { + sub_08021390(this); + } +} + +void sub_080210E4(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 1) { + Entity* ent; + + this->frames.all &= ~1; + ent = sub_0804A98C(this, 0, 2); + if (ent) { + ent->parent = this; + this->attachedEntity = ent; + } + + sub_08004488(270); + } + + sub_08021644(this); + if ((this->frames.all & 0x10) && + (!sub_080AEF88(this) || (this->attachedEntity && (this->attachedEntity->bitfield & 0x80)))) { + sub_080213D0(this, 0); + } else { + if (--this->field_0x76.HWORD == 0) + sub_080213D0(this, 0); + } +} + +void sub_08021170(Entity* this) { + if (this->frames.all & 0x80) { + if (this->field_0x7a.HALF.HI) { + this->field_0x7a.HALF.HI--; + } else { + sub_08021390(this); + } + } else { + UpdateAnimationSingleFrame(this); + } +} + +void sub_080211A0(Entity* this) { + if (sub_080214FC(this)) { + sub_08021390(this); + } else { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) + sub_080213B0(this); + } +} + +void sub_080211D0(Entity* this) + +{ + UpdateAnimationSingleFrame(this); + sub_0802159C(this); + + if (this->frames.all & 0x80) + sub_08021390(this); +} + +void sub_080211F4(Entity* this) { + UpdateAnimationSingleFrame(this); + sub_08021600(this); + + if (this->frames.all & 0x80) + sub_08021390(this); +} + +void sub_08021218(Entity* this, u32 param_2, u32 param_3) { + const stuct_080CAB14* unk; + + if (this->field_0x74.HALF.LO == param_2 && this->animationState == param_3) + return; + + this->animationState = param_3; + this->field_0x74.HALF.LO = param_2; + + unk = &gUnk_080CAB14[param_2]; + this->spriteIndex = unk->field_0x1; + InitAnimationForceUpdate(this, unk->field_0x0 + param_3); +} + +void sub_0802124C(Entity* this) { + u32 iVar1 = sub_08021274(this->animationState, this->direction); + if (iVar1 != 0xff) { + sub_08021218(this, this->field_0x74.HALF.LO, iVar1); + } else { + UpdateAnimationSingleFrame(this); + } +} + +NAKED +u32 sub_08021274(u32 a, u32 b) { + asm(".include \"asm/non_matching/darkNut/sub_08021274.inc\""); +} + +void sub_080212B0(Entity* this) { + u8 tmp; + + switch (this->field_0x74.HALF.HI) { + default: + this->field_0x74.HALF.HI = 1; + tmp = gUnk_080CAB3A[Random() & 7]; + break; + case 1: + this->field_0x74.HALF.HI = 2; + tmp = gUnk_080CAB42[Random() & 7]; + break; + case 2: + this->field_0x74.HALF.HI = 0; + tmp = gUnk_080CAB4A[Random() & 7]; + break; + } + + if (this->entityType.form < 2 && tmp == 2) + tmp = gUnk_080CAB52[Random() & 3]; + + this->attachedEntity = NULL; + gUnk_080CAB58[tmp](this); +} + +void sub_08021328(Entity* this) { + this->action = 13; + this->field_0x7c.BYTES.byte0 = gUnk_080CAB68[this->entityType.form]; + sub_08021218(this, 0xc, this->animationState); +} + +void sub_0802134C(Entity* this) { + this->action = 15; + this->direction = this->animationState << 3; + this->nonPlanarMovement = 0x200; + this->field_0x76.HWORD = 0x78; + sub_08021218(this, 0xe, this->animationState); +} + +void sub_08021370(Entity* this) { + this->action = 18; + sub_08021218(this, 0x10, this->animationState); +} + +void sub_08021380(Entity* this) { + this->action = 19; + sub_08021218(this, 0x11, this->animationState); +} + +void sub_08021390(Entity* this) { + this->action = 7; + this->nonPlanarMovement = 0x200; + this->damageType = 0x56; + sub_08021218(this, 6, this->animationState); +} + +void sub_080213B0(Entity* this) { + this->action = 3; + this->actionDelay = 1; + this->nonPlanarMovement = 0xc0; + this->field_0x76.HWORD = 0xf0; + sub_08021218(this, 3, this->animationState); +} + +void sub_080213D0(Entity* this, u32 param_2) { + this->action = 16; + this->field_0x7a.HALF.HI = param_2; + sub_08021218(this, 0xf, this->animationState); + sub_08021588(this); +} + +void sub_080213F0(Entity* this) { + this->action = 6; + sub_08021218(this, 1, this->animationState); +} + +void sub_08021400(Entity* this) { + this->action = 9; + this->nonPlanarMovement = 0x60; + sub_08021218(this, 10, this->animationState); +} + +void sub_08021414(Entity* this) { + this->action = 17; + sub_08021218(this, 5, this->animationState); +} + +void sub_08021424(Entity* this) { + s32 x, y; + u32 tmp; + + u32 dir = GetFacingDirection(this, gUnk_020000B0); + tmp = sub_08021274(this->animationState, dir); + if (tmp != 0xff) { + sub_08021218(this, this->field_0x74.HALF.LO, tmp); + } else { + tmp = this->animationState; + } + + switch (tmp) { + case 0: + x = gUnk_020000B0->x.HALF.HI; + y = gUnk_020000B0->y.HALF.HI + 0x2c; + break; + case 1: + x = gUnk_020000B0->x.HALF.HI - 0x24; + y = gUnk_020000B0->y.HALF.HI; + break; + case 2: + x = gUnk_020000B0->x.HALF.HI; + y = gUnk_020000B0->y.HALF.HI - 0x1d; + break; + default: + x = gUnk_020000B0->x.HALF.HI + 0x24; + y = gUnk_020000B0->y.HALF.HI; + break; + } + + if (!(6 < (x - this->x.HALF.HI) + 3U) && !(4 < (y - this->y.HALF.HI) + 2U)) { + sub_080212B0(this); + } else { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + if (!sub_080AEF88(this)) { + sub_080212B0(this); + } else { + UpdateAnimationSingleFrame(this); + } + } +} + +u32 sub_080214FC(Entity* this) { + u32 direction; + + if (!sub_08049FDC(this, 1)) + return 0; + + direction = GetFacingDirection(this, gUnk_020000B0); + if (4 < (direction - (this->frames.all & 0x1f)) - 2) + return 0; + + this->animationState = ((direction + 4) & 0x18) >> 3; + return 1; +} + +void sub_08021540(Entity* this) { + u32 tmp, tmp2; + u32 rand; + + rand = Random(); + if (!sub_08049FA0(this) && (rand & 1)) { + tmp2 = (sub_08049EE4(this) + 4) & 0x18; + } else { + tmp2 = (rand >> 0x10) & 0x18; + } + this->direction = tmp2; + + tmp = sub_08021274(this->animationState, tmp2); + if (tmp != 0xff) + sub_08021218(this, 3, tmp); + + this->actionDelay = 30; +} + +void sub_08021588(Entity* this) { + if (this->attachedEntity) { + this->attachedEntity->parent = NULL; + this->attachedEntity = NULL; + } +} + +void sub_0802159C(Entity* this) { + if (this->frames.all == 1) { + Entity* ent; + + this->frames.all = 0; + this->damageType = 0x51; + ent = sub_0804A98C(this, 0, 3); + if (ent) { + ent->parent = this; + this->attachedEntity = ent; + } + sub_08004488(0x116); + } else if (this->frames.all == 2) { + this->frames.all = 0; + sub_08021588(this); + } else if (this->frames.all & 0x20) { + this->frames.all &= ~0x20; + sub_08004488(0x115); + } +} + +void sub_08021600(Entity* this) { + if (this->frames.all == 1) { + Entity* ent; + + this->frames.all = 0; + this->damageType = 0x51; + ent = sub_0804A98C(this, 0, 4); + if (ent) { + ent->parent = this; + this->attachedEntity = ent; + } + sub_08004488(0x10e); + } else if (this->frames.all == 2) { + this->frames.all = 0; + sub_08021588(this); + } +} + +void sub_08021644(Entity* this) { + if (this->frames.all & 0x20) { + this->frames.all &= ~0x20; + sub_08004488(0x7d); + } +} + +extern u32 sub_08049F1C(Entity*, Entity*, u32); + +u32 sub_08021664(Entity* this, Entity* ent) { + switch (this->animationState) { + case 0: + return sub_08049F1C(this, ent, 0x22); + case 1: + return sub_08049F1C(this, ent, 0x1a); + case 2: + return sub_08049F1C(this, ent, 0x13); + case 3: + return sub_08049F1C(this, ent, 0x1a); + } + return 0; +} + +u32 sub_0802169C(Entity* this, Entity* ent) { + u32 ret; + + switch (this->animationState) { + case 0: + ret = 0x2c; + break; + case 2: + ret = 0x1d; + break; + case 1: + case 3: + ret = 0x24; + break; + default: + return 0; + } + + if (sub_08049F1C(this, ent, ret)) { + return 0; + } else { + return 1; + } +} + +// clang-format off +void (*const gUnk_080CAA98[])(Entity*) = { + sub_08020BA0, + sub_08020BB8, + sub_08001324, + sub_0804A7D4, + sub_08001242, + nullsub_129, +}; +void (*const gUnk_080CAAB0[])(Entity*) = { + sub_08020D70, + sub_08020D9C, + sub_08020DB4, + sub_08020DD4, + sub_08020E28, + sub_08020E48, + sub_08020E78, + sub_08020E98, + sub_08020F28, + sub_08020F48, + sub_08020FAC, + sub_08020FE4, + sub_08021010, + sub_08021038, + sub_080210A8, + sub_080210E4, + sub_08021170, + sub_080211A0, + sub_080211D0, + sub_080211F4, +}; + +const s8 gUnk_080CAB00[] = { + 30, 30, 20, 10, +}; + +const s8 gUnk_080CAB04[] = { + 60, 60, 45, 30, +}; + +const u8 gUnk_080CAB08[] = { + 90, 90, 60, 30, +}; + +const s8 gUnk_080CAB0C[] = { + 90, 90, 60, 30, +}; + +const s8 gUnk_080CAB10[] = { + 90, 90, 45, 8, +}; + +const stuct_080CAB14 gUnk_080CAB14[] = { + {0x00, 0x62}, + {0x04, 0x62}, + {0x08, 0x62}, + {0x0C, 0x62}, + {0x10, 0x62}, + {0x14, 0x62}, + {0x18, 0x62}, + {0x1C, 0x62}, + {0x20, 0x62}, + {0x24, 0x62}, + {0x28, 0x62}, + {0x2C, 0x62}, + {0x00, 0x63}, + {0x04, 0x63}, + {0x08, 0x63}, + {0x0C, 0x63}, + {0x10, 0x63}, + {0x14, 0x63}, + {0x18, 0x63}, +}; + +const u8 gUnk_080CAB3A[] = { + 0, 1, 1, 0, 3, 0, 1, 0, +}; + +const u8 gUnk_080CAB42[] = { + 1, 1, 3, 0, 1, 2, 0, 0, +}; + +const u8 gUnk_080CAB4A[] = { + 0, 0, 3, 1, 2, 2, 3, 1, +}; + +const u8 gUnk_080CAB52[] = { + 0, 3, 1, 0, 0, 0 +}; + +void (*const gUnk_080CAB58[])(Entity*) = { + sub_08021328, + sub_0802134C, + sub_08021370, + sub_08021380, +}; + +const u8 gUnk_080CAB68[] = { + 90, 90, 45, 7, +}; +// clang-format on