diff --git a/asm/bombPeahat.s b/asm/bombPeahat.s deleted file mode 100644 index cb6928ae..00000000 --- a/asm/bombPeahat.s +++ /dev/null @@ -1,1319 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0802A924 -sub_0802A924: @ 0x0802A924 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - movs r5, #0 - movs r6, #1 - movs r0, #1 - strb r0, [r7, #0xc] - strb r5, [r7, #0xd] - strb r5, [r7, #0xe] - strb r5, [r7, #0xf] - ldr r0, _0802A9A0 @ =gUnk_080CD16C - str r0, [r7, #0x48] - movs r4, #0 - ldr r0, _0802A9A4 @ =0x0000FFD0 - strh r0, [r7, #0x36] - bl Random - ands r0, r6 - adds r1, r7, #0 - adds r1, #0x80 - strb r0, [r1] - adds r0, r7, #0 - adds r0, #0x82 - strh r5, [r0] - subs r0, #7 - strb r4, [r0] - adds r0, #6 - strb r4, [r0] - subs r0, #7 - strb r4, [r0] - subs r0, #2 - strb r4, [r0] - adds r0, #1 - strb r4, [r0] - subs r1, #0x48 - movs r0, #3 - strb r0, [r1] - ldrb r2, [r7, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - orrs r0, r2 - strb r0, [r7, #0x1b] - ldrb r0, [r7, #0x19] - ands r1, r0 - orrs r1, r2 - strb r1, [r7, #0x19] - adds r2, r7, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r6 - strb r0, [r2] - ldrb r1, [r7, #0xa] - adds r1, #1 - adds r0, r7, #0 - bl InitializeAnimation - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0802A9A0: .4byte gUnk_080CD16C -_0802A9A4: .4byte 0x0000FFD0 - - thumb_func_start sub_0802A9A8 -sub_0802A9A8: @ 0x0802A9A8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0802A9B8 - subs r0, #1 - strb r0, [r4, #0xf] - b _0802AA3E -_0802A9B8: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802A9DE - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802AA38 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r0, #0x40 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #8 - bl sub_0802ACDC - b _0802AA38 -_0802A9DE: - ldr r0, _0802AA14 @ =gRoomControls - ldrh r1, [r0] - adds r2, r0, #0 - cmp r1, #0 - bne _0802AA3E - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #1 - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0802AA18 - ldrh r0, [r2, #0xa] - subs r0, #0x10 - strh r0, [r4, #0x2e] - movs r0, #8 - b _0802AA26 - .align 2, 0 -_0802AA14: .4byte gRoomControls -_0802AA18: - movs r1, #0x80 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r1, [r2, #0xa] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - movs r0, #0x18 -_0802AA26: - strb r0, [r4, #0x15] - ldrh r0, [r2, #0xc] - adds r0, #0x40 - strh r0, [r4, #0x32] - movs r0, #0x80 - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_0802ADDC -_0802AA38: - adds r0, r4, #0 - bl sub_0802AC40 -_0802AA3E: - pop {r4, pc} - - thumb_func_start sub_0802AA40 -sub_0802AA40: @ 0x0802AA40 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802AC40 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802AA66 - adds r0, r4, #0 - movs r1, #8 - bl sub_0802ACDC - adds r1, r4, #0 - adds r1, #0x7b - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] -_0802AA66: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802AA72 - subs r0, #1 - strb r0, [r4, #0xe] - b _0802AABE -_0802AA72: - ldr r2, [r4, #0x54] - cmp r2, #0 - beq _0802AABE - ldr r0, [r2, #4] - cmp r0, #0 - bne _0802AA82 - str r0, [r4, #0x54] - b _0802AABE -_0802AA82: - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - lsls r0, r0, #4 - adds r1, r0, #0 - adds r1, #0x18 - movs r0, #0x18 - ands r1, r0 - adds r3, r4, #0 - adds r3, #0x7b - ldrb r0, [r3] - cmp r0, #0x20 - bls _0802AA9E - strb r1, [r4, #0x15] -_0802AA9E: - ldrb r0, [r4, #0x15] - cmp r0, r1 - bne _0802AABE - movs r0, #3 - strb r0, [r4, #0xc] - movs r1, #0 - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - strb r1, [r3] - adds r1, r2, #0 - adds r1, #0x80 - movs r0, #1 - strb r0, [r1] - movs r0, #0x96 - strb r0, [r2, #0xe] -_0802AABE: - pop {r4, pc} - - thumb_func_start sub_0802AAC0 -sub_0802AAC0: @ 0x0802AAC0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl sub_0802AC40 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - movs r6, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802AADE - adds r0, r4, #0 - movs r1, #4 - bl sub_0802AD1C -_0802AADE: - adds r2, r4, #0 - adds r2, #0x81 - ldrb r5, [r2] - cmp r5, #0 - beq _0802AB0E - ldr r1, [r4, #0x54] - cmp r1, #0 - bne _0802AAF2 - strb r1, [r2] - b _0802AB3C -_0802AAF2: - ldr r0, [r1, #4] - cmp r0, #0 - bne _0802AAFE - strb r0, [r2] - str r0, [r4, #0x54] - b _0802AB3C -_0802AAFE: - ldrb r3, [r1, #0xe] - cmp r3, #0 - bne _0802AB3C - ldrb r0, [r1, #0xf] - cmp r0, #0x50 - bhi _0802AB3C - strb r3, [r2] - b _0802AB3C -_0802AB0E: - movs r3, #4 - strb r3, [r4, #0xc] - movs r0, #0xc0 - strb r0, [r4, #0xe] - strb r3, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x80 - ldrb r0, [r2] - movs r1, #1 - eors r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x78 - strb r5, [r0] - adds r0, #1 - strb r3, [r0] - ldrb r0, [r4, #0x15] - orrs r0, r6 - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_0802AB3C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0802AB40 -sub_0802AB40: @ 0x0802AB40 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802AC40 - adds r3, r4, #0 - adds r3, #0x78 - ldrb r0, [r3] - cmp r0, #1 - beq _0802AB94 - cmp r0, #1 - bgt _0802AB5C - cmp r0, #0 - beq _0802AB62 - b _0802AC04 -_0802AB5C: - cmp r0, #2 - beq _0802ABC2 - b _0802AC04 -_0802AB62: - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _0802AB86 - adds r1, r4, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802AC04 - movs r0, #4 - strb r0, [r1] - ldrh r0, [r4, #0x36] - adds r0, #1 - strh r0, [r4, #0x36] - b _0802AC04 -_0802AB86: - movs r0, #1 - strb r0, [r3] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0x30 - strb r0, [r1] - b _0802ABB6 -_0802AB94: - adds r2, r4, #0 - adds r2, #0x79 - ldrb r0, [r2] - subs r1, r0, #1 - strb r1, [r2] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0802ABAE - movs r0, #2 - strb r0, [r3] - movs r0, #4 - strb r0, [r2] - b _0802AC04 -_0802ABAE: - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0802AC04 -_0802ABB6: - adds r0, r4, #0 - movs r1, #0 - bl sub_08049F84 - strb r0, [r4, #0x15] - b _0802AC04 -_0802ABC2: - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #0x30 - rsbs r0, r0, #0 - cmp r1, r0 - ble _0802ABF2 - adds r1, r4, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802AC04 - movs r0, #4 - strb r0, [r1] - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - adds r0, r4, #0 - movs r1, #4 - bl sub_0802ACDC - b _0802AC04 -_0802ABF2: - movs r1, #0 - movs r0, #5 - strb r0, [r4, #0xc] - strh r1, [r4, #0x24] - ldrb r1, [r4, #0xa] - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation -_0802AC04: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802AC08 -sub_0802AC08: @ 0x0802AC08 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802AC36 - movs r1, #0 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r0, #0x40 - strb r0, [r4, #0xe] - movs r0, #0xc0 - strh r0, [r4, #0x24] - adds r0, r4, #0 - movs r1, #8 - bl sub_0802ACDC - adds r0, r4, #0 - bl sub_0802ADDC -_0802AC36: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802AC40 -sub_0802AC40: @ 0x0802AC40 - push {r4, r5, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0806F69C - adds r5, r4, #0 - adds r5, #0x7a - ldrb r0, [r5] - cmp r0, #0 - beq _0802ACA2 - adds r0, r4, #0 - bl sub_0802B234 - cmp r0, #0 - bne _0802AC72 - strb r0, [r5] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - b _0802ACD8 -_0802AC72: - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _0802AC92 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x38 - ands r0, r1 - cmp r0, #8 - beq _0802ACDA - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - b _0802ACD6 -_0802AC92: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x38 - ands r0, r1 - cmp r0, #0x18 - beq _0802ACDA - b _0802ACCE -_0802ACA2: - adds r0, r4, #0 - bl sub_0802B234 - cmp r0, #0 - beq _0802ACDA - movs r0, #1 - strb r0, [r5] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _0802ACC8 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - b _0802ACD6 -_0802ACC8: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] -_0802ACCE: - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x18 -_0802ACD6: - orrs r0, r1 -_0802ACD8: - strb r0, [r2] -_0802ACDA: - pop {r4, r5, pc} - - thumb_func_start sub_0802ACDC -sub_0802ACDC: @ 0x0802ACDC - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0802ACF8 - ldr r0, _0802ACF4 @ =gRoomControls - movs r2, #0xa - ldrsh r1, [r0, r2] - adds r1, #0x20 - b _0802AD00 - .align 2, 0 -_0802ACF4: .4byte gRoomControls -_0802ACF8: - ldr r0, _0802AD18 @ =gRoomControls - movs r2, #0xa - ldrsh r1, [r0, r2] - adds r1, #0xd0 -_0802AD00: - movs r3, #0xc - ldrsh r2, [r0, r3] - adds r2, #0x60 - adds r0, r4, #0 - bl sub_080045B4 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - strb r5, [r4, #0xf] - pop {r4, r5, pc} - .align 2, 0 -_0802AD18: .4byte gRoomControls - - thumb_func_start sub_0802AD1C -sub_0802AD1C: @ 0x0802AD1C - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r0, #1 - bl sub_08049DF4 - cmp r0, #0 - beq _0802AD48 - movs r1, #0x32 - ldrsh r2, [r0, r1] - subs r2, #0x18 - movs r3, #0x2e - ldrsh r1, [r0, r3] - adds r0, r4, #0 - bl sub_080045B4 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - strb r5, [r4, #0xf] - b _0802AD50 -_0802AD48: - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0802ACDC -_0802AD50: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0802AD54 -sub_0802AD54: @ 0x0802AD54 - push {r4, lr} - adds r2, r0, #0 - adds r0, #0x82 - ldrh r0, [r0] - cmp r0, #0 - beq _0802ADAE - ldr r4, _0802AD7C @ =gRoomControls - ldrh r0, [r4] - cmp r0, #0 - beq _0802AD80 - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - bl DeleteEntity - b _0802ADD8 - .align 2, 0 -_0802AD7C: .4byte gRoomControls -_0802AD80: - ldrh r1, [r4, #8] - movs r0, #0x32 - ldrsh r3, [r2, r0] - cmp r1, r3 - bgt _0802AD94 - ldrh r0, [r4, #0x20] - adds r0, r1, r0 - adds r0, #0x20 - cmp r0, r3 - bge _0802ADA0 -_0802AD94: - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - b _0802ADAE -_0802ADA0: - ldrb r0, [r2, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r2, #0x18] -_0802ADAE: - adds r0, r2, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _0802ADD8 - ldr r0, [r2, #0x54] - cmp r0, #0 - beq _0802ADC4 - ldr r0, [r0, #4] - cmp r0, #0 - bne _0802ADD8 -_0802ADC4: - movs r1, #4 - strb r1, [r2, #0xc] - movs r0, #0xc0 - strb r0, [r2, #0xe] - strb r1, [r2, #0xf] - adds r2, #0x80 - ldrb r0, [r2] - movs r1, #1 - eors r0, r1 - strb r0, [r2] -_0802ADD8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802ADDC -sub_0802ADDC: @ 0x0802ADDC - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - adds r1, #2 - movs r0, #0x1b - bl CreateEnemy - adds r5, r0, #0 - cmp r5, #0 - beq _0802AE20 - adds r0, r4, #0 - bl sub_0802B234 - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f - strb r1, [r5, #0xb] - str r4, [r5, #0x50] - str r5, [r4, #0x54] - adds r0, r4, #0 - adds r1, r5, #0 - bl CopyPosition - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #1 - strb r0, [r1] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0802AE20 - subs r1, #7 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] -_0802AE20: - pop {r4, r5, pc} - .align 2, 0 - - - thumb_func_start sub_0802AE24 -sub_0802AE24: @ 0x0802AE24 - push {lr} - mov ip, r0 - movs r2, #0 - movs r3, #1 - strb r3, [r0, #0xc] - movs r0, #0xf0 - mov r1, ip - strb r0, [r1, #0xe] - movs r0, #0x80 - lsls r0, r0, #8 - str r0, [r1, #0x20] - ldr r0, _0802AE64 @ =gUnk_080CD174 - str r0, [r1, #0x48] - adds r1, #0x3c - movs r0, #3 - strb r0, [r1] - mov r0, ip - strb r2, [r0, #0x16] - movs r0, #2 - mov r1, ip - strb r0, [r1, #0x1c] - mov r0, ip - adds r0, #0x81 - strb r2, [r0] - subs r0, #6 - strb r3, [r0] - mov r0, ip - movs r1, #3 - bl InitializeAnimation - pop {pc} - .align 2, 0 -_0802AE64: .4byte gUnk_080CD174 - - thumb_func_start sub_0802AE68 -sub_0802AE68: @ 0x0802AE68 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802B250 - adds r1, r0, #0 - cmp r1, #0 - bne _0802AE8A - movs r0, #3 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x80 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0802B264 - b _0802AEBA -_0802AE8A: - adds r0, r1, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _0802AEA8 - adds r0, r1, #0 - adds r1, r4, #0 - bl CopyPosition - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _0802AEBA -_0802AEA8: - movs r0, #3 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x80 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0802B264 -_0802AEBA: - pop {r4, pc} - - thumb_func_start sub_0802AEBC -sub_0802AEBC: @ 0x0802AEBC - push {lr} - ldr r2, _0802AED0 @ =gUnk_080CD158 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802AED0: .4byte gUnk_080CD158 - - thumb_func_start sub_0802AED4 -sub_0802AED4: @ 0x0802AED4 - push {r4, r5, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r5, r4, #0 - adds r5, #0x81 - ldrb r0, [r5] - cmp r0, #1 - bhi _0802AEFC - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_080044EC - cmp r0, #1 - bne _0802AF0C - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - b _0802AF0C -_0802AEFC: - adds r0, r4, #0 - bl sub_0800442E - cmp r0, #0 - bne _0802AF0C - adds r0, r4, #0 - bl sub_08078930 -_0802AF0C: - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _0802AF24 - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _0802AF24 - movs r0, #0 - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r4, #0xf] -_0802AF24: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0802AF28 -sub_0802AF28: @ 0x0802AF28 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xd] - adds r0, r4, #0 - bl sub_08079BD8 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x10 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_0802AF50 -sub_0802AF50: @ 0x0802AF50 - push {lr} - bl GetNextFrame - pop {pc} - - thumb_func_start sub_0802AF58 -sub_0802AF58: @ 0x0802AF58 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r4, #0x29 - ldrb r1, [r4] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802AF74 -sub_0802AF74: @ 0x0802AF74 - push {lr} - adds r2, r0, #0 - movs r0, #0 - movs r1, #3 - strb r1, [r2, #0xc] - strb r0, [r2, #0xd] - ldrb r0, [r2, #0xe] - cmp r0, #0x3c - bls _0802AF8A - movs r0, #0x3c - strb r0, [r2, #0xe] -_0802AF8A: - adds r0, r2, #0 - bl GetNextFrame - pop {pc} - .align 2, 0 - - thumb_func_start sub_0802AF94 -sub_0802AF94: @ 0x0802AF94 - push {lr} - bl DeleteEntity - pop {pc} - - thumb_func_start sub_0802AF9C -sub_0802AF9C: @ 0x0802AF9C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802AFC6 - ldr r0, [r4, #0x50] - adds r1, r0, #0 - adds r1, #0x7a - ldrb r0, [r1] - cmp r0, #0 - beq _0802AFC0 - subs r0, #1 - strb r0, [r1] -_0802AFC0: - adds r0, r4, #0 - bl DeleteEntity -_0802AFC6: - pop {r4, pc} - - thumb_func_start sub_0802AFC8 -sub_0802AFC8: @ 0x0802AFC8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - movs r7, #8 - cmp r0, #0x28 - bhi _0802B022 - movs r7, #4 - adds r1, r4, #0 - adds r1, #0x82 - ldrh r2, [r1] - movs r0, #0x80 - lsls r0, r0, #8 - ands r0, r2 - cmp r0, #0 - beq _0802AFEC - adds r0, r2, #0 - subs r0, #0x10 - b _0802AFF0 -_0802AFEC: - adds r0, r2, #0 - adds r0, #0x10 -_0802AFF0: - strh r0, [r1] - adds r5, r1, #0 - ldrh r2, [r5] - movs r6, #0xf0 - adds r3, r6, #0 - ands r3, r2 - subs r0, r3, #1 - cmp r0, #0x7f - bls _0802B00C - movs r3, #0x80 - lsls r3, r3, #8 - adds r0, r3, #0 - eors r0, r2 - strh r0, [r5] -_0802B00C: - ldrh r0, [r1] - adds r3, r6, #0 - ands r3, r0 - movs r2, #0x98 - lsls r2, r2, #1 - subs r2, r2, r3 - adds r0, r4, #0 - adds r1, r2, #0 - movs r3, #0 - bl sub_0805EC9C -_0802B022: - ldrb r0, [r4, #0xf] - ands r0, r7 - cmp r0, #0 - beq _0802B03A - ldrb r0, [r4, #0x1a] - lsrs r2, r0, #4 - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x1a] - b _0802B044 -_0802B03A: - ldrb r1, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x1a] -_0802B044: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0802B048 -sub_0802B048: @ 0x0802B048 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x7b - ldrb r0, [r0] - cmp r0, #0 - beq _0802B080 - ldr r0, _0802B074 @ =gRoomControls - ldrh r1, [r0, #8] - movs r3, #0x32 - ldrsh r2, [r4, r3] - cmp r1, r2 - bgt _0802B06A - ldrh r0, [r0, #0x20] - adds r0, r1, r0 - adds r0, #0x20 - cmp r0, r2 - bge _0802B078 -_0802B06A: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - b _0802B07E - .align 2, 0 -_0802B074: .4byte gRoomControls -_0802B078: - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 -_0802B07E: - strb r0, [r4, #0x10] -_0802B080: - ldr r5, [r4, #0x50] - cmp r5, #0 - beq _0802B0CA - ldrb r0, [r4, #0xc] - cmp r0, #1 - bne _0802B0CA - ldrb r1, [r5, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r3, [r4, #0x19] - movs r2, #0x3f - adds r0, r2, #0 - ands r0, r3 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - movs r0, #0x29 - adds r0, r0, r4 - mov ip, r0 - lsrs r1, r1, #0x1d - ldrb r3, [r0] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r3 - orrs r0, r1 - mov r1, ip - strb r0, [r1] - ldrb r0, [r5, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r1, [r4, #0x1b] - ands r2, r1 - orrs r2, r0 - strb r2, [r4, #0x1b] -_0802B0CA: - ldrb r2, [r4, #0xc] - cmp r2, #4 - beq _0802B19E - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0802B19E - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802B10E - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802B19E - movs r0, #0x50 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x82 - strh r1, [r0] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - movs r2, #0x80 - lsls r2, r2, #1 - adds r0, r4, #0 - adds r1, r2, #0 - movs r3, #0 - bl sub_0805EC9C - b _0802B19E -_0802B10E: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0802B19E - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0802B198 - cmp r2, #2 - bne _0802B12E - ldrb r0, [r4, #0xd] - cmp r0, #1 - bne _0802B12E - ldr r0, _0802B188 @ =gPlayerState - strb r1, [r0, #5] -_0802B12E: - adds r0, r4, #0 - bl sub_0805EC60 - movs r5, #0 - movs r0, #4 - strb r0, [r4, #0xc] - ldr r0, _0802B18C @ =gUnk_080CD17C - str r0, [r4, #0x48] - movs r0, #0xf - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #0x13 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x7b - strb r5, [r0] - adds r0, r4, #0 - bl sub_08078954 - ldr r1, [r4, #0x50] - ldr r0, [r1, #4] - cmp r0, #0 - beq _0802B16C - adds r0, r1, #0 - adds r0, #0x81 - strb r5, [r0] -_0802B16C: - adds r0, r4, #0 - movs r1, #0x20 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r5, r0, #0 - cmp r5, #0 - beq _0802B190 - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] - b _0802B19E - .align 2, 0 -_0802B188: .4byte gPlayerState -_0802B18C: .4byte gUnk_080CD17C -_0802B190: - adds r0, r4, #0 - bl DeleteEntity - b _0802B19E -_0802B198: - adds r0, r4, #0 - bl sub_0802AFC8 -_0802B19E: - pop {r4, r5, pc} - - thumb_func_start sub_0802B1A0 -sub_0802B1A0: @ 0x0802B1A0 - push {lr} - movs r1, #0 - movs r2, #1 - strb r2, [r0, #0xc] - strb r1, [r0, #0xe] - movs r1, #0x4f - strb r1, [r0, #0xf] - adds r1, r0, #0 - adds r1, #0x81 - strb r2, [r1] - movs r1, #0 - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0802B1BC -sub_0802B1BC: @ 0x0802B1BC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802B1CA - subs r0, #1 - strb r0, [r4, #0xe] -_0802B1CA: - adds r0, r4, #0 - bl sub_0802B250 - adds r1, r0, #0 - cmp r1, #0 - bne _0802B1E2 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0802B264 - b _0802B200 -_0802B1E2: - adds r0, r1, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _0802B1F6 - adds r0, r1, #0 - adds r1, r4, #0 - bl CopyPosition - b _0802B200 -_0802B1F6: - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0802B264 -_0802B200: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802B204 -sub_0802B204: @ 0x0802B204 - push {r4, r5, lr} - adds r5, r0, #0 - movs r1, #0xa0 - lsls r1, r1, #6 - bl sub_080044EC - cmp r0, #1 - bne _0802B232 - movs r0, #0x22 - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _0802B22E - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r0, [r5, #0x50] - str r0, [r4, #0x50] -_0802B22E: - bl DeleteThisEntity -_0802B232: - pop {r4, r5, pc} - - thumb_func_start sub_0802B234 -sub_0802B234: @ 0x0802B234 - push {r4, lr} - movs r4, #0 - bl GetTileTypeByEntity - ldr r1, _0802B24C @ =0xFFFFFE3C - adds r0, r0, r1 - cmp r0, #1 - bls _0802B246 - movs r4, #1 -_0802B246: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_0802B24C: .4byte 0xFFFFFE3C - - thumb_func_start sub_0802B250 -sub_0802B250: @ 0x0802B250 - push {lr} - ldr r1, [r0, #0x50] - cmp r1, #0 - beq _0802B260 - ldr r0, [r1, #4] - cmp r0, #0 - bne _0802B260 - movs r1, #0 -_0802B260: - adds r0, r1, #0 - pop {pc} - - thumb_func_start sub_0802B264 -sub_0802B264: @ 0x0802B264 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl sub_0802B234 - cmp r0, #0 - beq _0802B294 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #0x18 - orrs r1, r0 - strb r1, [r2] - b _0802B2A2 -_0802B294: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] -_0802B2A2: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 \ No newline at end of file diff --git a/asm/non_matching/bombPeahat/sub_0802AFC8.inc b/asm/non_matching/bombPeahat/sub_0802AFC8.inc new file mode 100644 index 00000000..89393e10 --- /dev/null +++ b/asm/non_matching/bombPeahat/sub_0802AFC8.inc @@ -0,0 +1,76 @@ + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xf] + movs r7, #8 + cmp r0, #0x28 + bhi _0802B022 + movs r7, #4 + adds r1, r4, #0 + adds r1, #0x82 + ldrh r2, [r1] + movs r0, #0x80 + lsls r0, r0, #8 + ands r0, r2 + cmp r0, #0 + beq _0802AFEC + adds r0, r2, #0 + subs r0, #0x10 + b _0802AFF0 +_0802AFEC: + adds r0, r2, #0 + adds r0, #0x10 +_0802AFF0: + strh r0, [r1] + adds r5, r1, #0 + ldrh r2, [r5] + movs r6, #0xf0 + adds r3, r6, #0 + ands r3, r2 + subs r0, r3, #1 + cmp r0, #0x7f + bls _0802B00C + movs r3, #0x80 + lsls r3, r3, #8 + adds r0, r3, #0 + eors r0, r2 + strh r0, [r5] +_0802B00C: + ldrh r0, [r1] + adds r3, r6, #0 + ands r3, r0 + movs r2, #0x98 + lsls r2, r2, #1 + subs r2, r2, r3 + adds r0, r4, #0 + adds r1, r2, #0 + movs r3, #0 + bl sub_0805EC9C +_0802B022: + ldrb r0, [r4, #0xf] + ands r0, r7 + cmp r0, #0 + beq _0802B03A + ldrb r0, [r4, #0x1a] + lsrs r2, r0, #4 + movs r1, #0x10 + rsbs r1, r1, #0 + ands r1, r0 + orrs r1, r2 + strb r1, [r4, #0x1a] + b _0802B044 +_0802B03A: + ldrb r1, [r4, #0x1a] + movs r0, #0x10 + rsbs r0, r0, #0 + ands r0, r1 + strb r0, [r4, #0x1a] +_0802B044: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + + .syntax divided diff --git a/data/animations/bombPeahat.s b/data/animations/bombPeahat.s new file mode 100644 index 00000000..c2d22e24 --- /dev/null +++ b/data/animations/bombPeahat.s @@ -0,0 +1,19 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + +gUnk_080CD184:: @ 080CD184 + .incbin "baserom.gba", 0x0CD184, 0x0000011 + +gUnk_080CD195:: @ 080CD195 + .incbin "baserom.gba", 0x0CD195, 0x0000041 + +gUnk_080CD1D6:: @ 080CD1D6 + .incbin "baserom.gba", 0x0CD1D6, 0x0000041 + +gUnk_080CD217:: @ 080CD217 + .incbin "baserom.gba", 0x0CD217, 0x0000009 + +gUnk_080CD220:: @ 080CD220 + .incbin "baserom.gba", 0x0CD220, 0x0000014 diff --git a/data/data_080CC6FC.s b/data/data_080CC6FC.s index af2f52c1..e997b4d4 100644 --- a/data/data_080CC6FC.s +++ b/data/data_080CC6FC.s @@ -3,48 +3,6 @@ .section .rodata -gUnk_080CD0F0:: @ 080CD0F0 - .incbin "baserom.gba", 0x0CD0F0, 0x0000018 - -gUnk_080CD108:: @ 080CD108 - .incbin "baserom.gba", 0x0CD108, 0x0000018 - -gUnk_080CD120:: @ 080CD120 - .incbin "baserom.gba", 0x0CD120, 0x0000014 - -gUnk_080CD134:: @ 080CD134 - .incbin "baserom.gba", 0x0CD134, 0x000000C - -gUnk_080CD140:: @ 080CD140 - .incbin "baserom.gba", 0x0CD140, 0x0000018 - -gUnk_080CD158:: @ 080CD158 - .incbin "baserom.gba", 0x0CD158, 0x0000014 - -gUnk_080CD16C:: @ 080CD16C - .incbin "baserom.gba", 0x0CD16C, 0x0000008 - -gUnk_080CD174:: @ 080CD174 - .incbin "baserom.gba", 0x0CD174, 0x0000008 - -gUnk_080CD17C:: @ 080CD17C - .incbin "baserom.gba", 0x0CD17C, 0x0000008 - -gUnk_080CD184:: @ 080CD184 - .incbin "baserom.gba", 0x0CD184, 0x0000011 - -gUnk_080CD195:: @ 080CD195 - .incbin "baserom.gba", 0x0CD195, 0x0000041 - -gUnk_080CD1D6:: @ 080CD1D6 - .incbin "baserom.gba", 0x0CD1D6, 0x0000041 - -gUnk_080CD217:: @ 080CD217 - .incbin "baserom.gba", 0x0CD217, 0x0000009 - -gUnk_080CD220:: @ 080CD220 - .incbin "baserom.gba", 0x0CD220, 0x0000014 - gUnk_080CD234:: @ 080CD234 .incbin "baserom.gba", 0x0CD234, 0x0000018 diff --git a/include/functions.h b/include/functions.h index 78b686c5..3e74a41d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -195,6 +195,7 @@ extern u32 sub_080043E8(Entity*); extern void sub_08001290(Entity*, u32); extern void EnqueueSFX(u32); extern void sub_08004596(Entity*, u32); +extern u32 sub_080045B4(Entity*, u32, u32); extern u32 sub_0807953C(void); extern void ResetPlayer(void); extern void CreateDust(Entity*); diff --git a/linker.ld b/linker.ld index b0643af3..20c751b6 100644 --- a/linker.ld +++ b/linker.ld @@ -353,7 +353,6 @@ SECTIONS { src/enemy/waterDrop.o(.text); src/enemy/wallMaster.o(.text); src/enemy/bombPeahat.o(.text); - asm/bombPeahat.o(.text); asm/spark.o(.text); asm/chaser.o(.text); asm/spikedBeetle.o(.text); @@ -957,6 +956,8 @@ SECTIONS { data/animations/waterDrop.o(.rodata); src/enemy/wallMaster.o(.rodata); data/animations/wallMaster.o(.rodata); + src/enemy/bombPeahat.o(.rodata); + data/animations/bombPeahat.o(.rodata); data/data_080CC6FC.o(.rodata); src/enemy.o(.rodata); data/data_080D3D94.o(.rodata); diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c index 90ae7830..98f54841 100644 --- a/src/enemy/bombPeahat.c +++ b/src/enemy/bombPeahat.c @@ -3,24 +3,43 @@ #include "functions.h" #include "player.h" +extern void sub_08078954(Entity*); +extern u32 sub_0800442E(Entity*); +extern void sub_08078930(Entity*); extern s32 sub_080012DC(Entity*); extern u32 GetNextFunction(Entity*); -extern void sub_0802AD54(Entity*); -extern void sub_0802B048(Entity*); extern void sub_0806F4E8(Entity*); +extern Entity* sub_08049DF4(u32); +extern void sub_08079BD8(Entity*); +extern u32 GetTileTypeByEntity(Entity*); + +void sub_0802AD1C(Entity*, u32); +void sub_0802AD54(Entity*); +void sub_0802B048(Entity*); +void sub_0802ACDC(Entity*, u32); +void sub_0802ADDC(Entity*); +void sub_0802AC40(Entity*); +bool32 sub_0802B234(Entity*); +Entity* sub_0802B250(Entity*); +void sub_0802B264(Entity*); extern void (*const gUnk_080012C8[])(Entity*); + extern void (*const gUnk_080CD0F0[])(Entity*); +extern void (*const gUnk_080CD108[])(Entity*); extern void (*const gUnk_080CD120[])(Entity*); extern void (*const gUnk_080CD134[])(Entity*); -extern void (*const gUnk_080CD108[])(Entity*); extern void (*const gUnk_080CD140[])(Entity*); +extern void (*const gUnk_080CD158[])(Entity*); + +extern const BoundingBox gUnk_080CD16C; +extern const BoundingBox gUnk_080CD174; +extern const BoundingBox gUnk_080CD17C; void BombPeahat(Entity* this) { s32 iVar1; - u32 uVar2; - if (((this->entityType).form == 2) && (iVar1 = sub_080012DC(this), iVar1)) { + if ((this->entityType.form == 2) && (iVar1 = sub_080012DC(this), iVar1)) { gUnk_080012C8[iVar1](this); } else { gUnk_080CD0F0[GetNextFunction(this)](this); @@ -32,54 +51,618 @@ void sub_0802A84C(Entity* this) { default: gUnk_080CD108[this->action](this); sub_0802AD54(this); - return; + break; case 2: gUnk_080CD120[this->action](this); sub_0802B048(this); - return; + break; case 3: gUnk_080CD134[this->action](this); + break; } } -void sub_0802A8AC(Entity *this) { +void sub_0802A8AC(Entity* this) { this->field_0x80.HALF.HI = 0; if (this->entityType.form < 2) { InitializeAnimation(this, 0); } } -void sub_0802A8C8(Entity* this) -{ - gUnk_080CD140[this->previousActionFlag](this); +void sub_0802A8C8(Entity* this) { + gUnk_080CD140[this->previousActionFlag](this); } -void sub_0802A8E0(Entity *this) -{ - this->previousActionFlag = 1; - this->field_0x1d = 0x3c; +void sub_0802A8E0(Entity* this) { + this->previousActionFlag = 1; + this->field_0x1d = 60; } -void sub_0802A8EC(Entity *this) -{ +void sub_0802A8EC(Entity* this) { sub_0806F4E8(this); } -void sub_0802A8F4(Entity *this) -{ +void sub_0802A8F4(Entity* this) { sub_0806F3E4(this); } -void sub_0802A8FC(Entity *this) -{ - if ((gPlayerState.field_0x1c & 0xf) == 0) { - this->currentHealth = gPlayerState.field_0x1c & 0xf; - } +void sub_0802A8FC(Entity* this) { + if ((gPlayerState.field_0x1c & 0xf) == 0) { + this->currentHealth = gPlayerState.field_0x1c & 0xf; + } } -void nullsub_143(Entity* this){} - -void sub_0802A91C(Entity *this) -{ - this->currentHealth = 0; +void nullsub_143(Entity* this) { + /* ... */ } + +void sub_0802A91C(Entity* this) { + this->currentHealth = 0; +} + +void sub_0802A924(Entity* this) { + this->action = 1; + this->previousActionFlag = 0; + this->actionDelay = 0; + this->field_0xf = 0; + this->boundingBox = (BoundingBox*)&gUnk_080CD16C; + this->height.HALF.HI = -0x30; + this->field_0x80.HALF.LO = Random() & 1; + this->field_0x82.HWORD = 0; + this->field_0x7a.HALF.HI = 0; + this->field_0x80.HALF.HI = 0; + this->field_0x7a.HALF.LO = 0; + this->field_0x78.HALF.LO = 0; + this->field_0x78.HALF.HI = 0; + this->collisionLayer = 3; + this->spriteOrientation.flipY = 1; + this->spriteRendering.b3 = 1; + this->spritePriority.b0 = 1; + InitializeAnimation(this, this->entityType.form + 1); +} + +void sub_0802A9A8(Entity* this) { + if (this->field_0xf) { + this->field_0xf--; + } else { + if (this->actionDelay) { + if (--this->actionDelay == 0) { + this->action = 2; + this->previousActionFlag = 0; + this->actionDelay = 0x40; + sub_0802ACDC(this, 8); + } + } else { + if (gRoomControls.unk2 != 0) { + return; + } + this->spriteSettings.b.draw = 1; + this->field_0x82.HWORD = 1; + if (this->field_0x80.HALF.LO) { + this->x.HALF.HI = gRoomControls.roomScrollX - 0x10; + this->direction = 8; + } else { + this->x.HALF.HI = gRoomControls.roomScrollX + 0x100; + this->direction = 0x18; + } + this->y.HALF.HI = gRoomControls.roomScrollY + 0x40; + this->actionDelay = 0x80; + sub_0802ADDC(this); + } + sub_0802AC40(this); + } +} + +void sub_0802AA40(Entity* this) { + sub_0802AC40(this); + if (--this->field_0xf == 0) { + sub_0802ACDC(this, 8); + this->field_0x7a.HALF.HI++; + } + if (this->actionDelay) { + this->actionDelay--; + } else { + Entity* ent = this->attachedEntity; + if (ent) { + if (ent->next == NULL) { + this->attachedEntity = NULL; + } else { + u32 direction = DirectionRound(this->field_0x80.HALF.LO * 0x10 + 0x18); + + if (0x20 < this->field_0x7a.HALF.HI) { + this->direction = direction; + } + if (this->direction == direction) { + this->action = 3; + this->nonPlanarMovement = 0x180; + this->field_0x7a.HALF.HI = 0; + ent->field_0x80.HALF.LO = 1; + ent->actionDelay = 0x96; + } + } + } + } +} + +void sub_0802AAC0(Entity* this) { + sub_0802AC40(this); + if (--this->field_0xf == 0) { + sub_0802AD1C(this, 4); + } + + if (this->field_0x80.HALF.HI) { + Entity* ent = this->attachedEntity; + if (ent == NULL) { + this->field_0x80.HALF.HI = 0; + } else if (ent->next == NULL) { + this->field_0x80.HALF.HI = 0; + this->attachedEntity = NULL; + } else if (ent->actionDelay == 0 && ent->field_0xf < 0x51) { + this->field_0x80.HALF.HI = 0; + } + } else { + this->action = 4; + this->actionDelay = 0xc0; + this->field_0xf = 4; + this->field_0x80.HALF.LO ^= 1; + this->field_0x78.HALF.LO = 0; + this->field_0x78.HALF.HI = 4; + this->direction = 0xff; + InitializeAnimation(this, 0); + } +} + +void sub_0802AB40(Entity* this) { + sub_0802AC40(this); + switch (this->field_0x78.HALF.LO) { + case 0: + if (this->height.HALF.HI) { + if (--this->field_0x78.HALF.HI == 0) { + this->field_0x78.HALF.HI = 4; + this->height.HALF.HI++; + } + } else { + this->field_0x78.HALF.LO = 1; + this->field_0x78.HALF.HI = 0x30; + this->direction = sub_08049F84(this, 0); + } + break; + case 1: + if (--this->field_0x78.HALF.HI == 0) { + this->field_0x78.HALF.LO = 2; + this->field_0x78.HALF.HI = 4; + } else if ((this->field_0x78.HALF.HI & 7) == 0) { + this->direction = sub_08049F84(this, 0); + } + break; + case 2: + if (-0x30 < this->height.HALF.HI) { + if (--this->field_0x78.HALF.HI == 0) { + this->field_0x78.HALF.HI = 4; + this->height.HALF.HI--; + sub_0802ACDC(this, 4); + } + } else { + this->action = 5; + this->nonPlanarMovement = 0; + InitializeAnimation(this, this->entityType.form + 1); + } + break; + } +} + +void sub_0802AC08(Entity* this) { + if (this->frames.all & 0x80) { + this->action = 2; + this->previousActionFlag = 0; + this->actionDelay = 0x40; + this->nonPlanarMovement = 0xc0; + sub_0802ACDC(this, 8); + sub_0802ADDC(this); + } + GetNextFrame(this); +} + +void sub_0802AC40(Entity* this) { + GetNextFrame(this); + sub_0806F69C(this); + if (this->field_0x7a.HALF.LO) { + if (sub_0802B234(this) == 0) { + this->field_0x7a.HALF.LO = 0; + this->spritePriority.b1 = 0; + } else { + if (this->height.HALF.HI == 0) { + if (this->spritePriority.b1 != 1) { + this->spritePriority.b1 = 1; + } + } else { + if (this->spritePriority.b1 != 3) { + this->spritePriority.b1 = 3; + } + } + } + } else { + if (sub_0802B234(this)) { + this->field_0x7a.HALF.LO = 1; + if (this->height.HALF.HI == 0) { + this->spritePriority.b1 = 1; + } else { + this->spritePriority.b1 = 3; + } + } + } +} + +void sub_0802ACDC(Entity* this, u32 param_2) { + u32 x; + if (this->field_0x80.HALF.LO) { + x = sub_080045B4(this, gRoomControls.roomScrollX + 0x20, gRoomControls.roomScrollY + 0x60); + } else { + x = sub_080045B4(this, gRoomControls.roomScrollX + 0xd0, gRoomControls.roomScrollY + 0x60); + } + sub_08004596(this, x); + this->field_0xf = param_2; +} + +void sub_0802AD1C(Entity* this, u32 param_2) { + Entity* ent = sub_08049DF4(1); + if (ent) { + u32 y = ent->y.HALF.HI - 0x18; + u32 x = ent->x.HALF.HI; + sub_08004596(this, sub_080045B4(this, x, y)); + this->field_0xf = param_2; + } else { + sub_0802ACDC(this, param_2); + } +} + +void sub_0802AD54(Entity* this) { + if (this->field_0x82.HWORD != 0) { + if (gRoomControls.unk2 != 0) { + this->spriteSettings.b.draw = 0; + DeleteEntity(this); + return; + } + if (gRoomControls.roomOriginY > this->y.HALF.HI || + (gRoomControls.roomOriginY + gRoomControls.height + 0x20) < this->y.HALF.HI) { + this->spriteSettings.b.draw = 0; + } else { + this->spriteSettings.b.draw = 1; + } + } + if (this->field_0x80.HALF.HI) { + if (this->attachedEntity == NULL || this->attachedEntity->next == NULL) { + this->action = 4; + this->actionDelay = 0xc0; + this->field_0xf = 4; + this->field_0x80.HALF.LO ^= 1; + } + } +} + +void sub_0802ADDC(Entity* this) { + Entity* ent = CreateEnemy(0x1b, this->entityType.form + 2); + if (ent != NULL) { + ent->entityType.parameter = !!sub_0802B234(this); + ent->parent = this; + this->attachedEntity = ent; + CopyPosition(this, ent); + this->field_0x80.HALF.HI = 1; + if (this->entityType.form == 0) { + this->field_0x7a.HALF.LO++; + } + } +} + +void sub_0802AE24(Entity* this) { + this->action = 1; + this->actionDelay = 0xf0; + this->field_0x20 = 0x8000; + this->boundingBox = (BoundingBox*)&gUnk_080CD174; + this->field_0x3c = 3; + this->field_0x16 = 0; + this->field_0x1c = 2; + this->field_0x80.HALF.HI = 0; + this->field_0x7a.HALF.HI = 1; + InitializeAnimation(this, 3); +} + +void sub_0802AE68(Entity* this) { + Entity* ent = sub_0802B250(this); + if (ent == 0) { + this->action = 3; + this->field_0x80.HALF.LO = 1; + sub_0802B264(this); + } else { + if (ent->field_0x80.HALF.HI) { + CopyPosition(ent, this); + this->spriteSettings.b.draw = 0; + } else { + this->action = 3; + this->field_0x80.HALF.LO = 1; + sub_0802B264(this); + } + } +} + +void sub_0802AEBC(Entity* this) { + gUnk_080CD158[this->previousActionFlag](this); +} + +void sub_0802AED4(Entity* this) { + GetNextFrame(this); + if (this->field_0x80.HALF.HI < 2) { + if (sub_080044EC(this, 0x2800) == 1) { + this->field_0x80.HALF.HI++; + } + } else { + if (!sub_0800442E(this)) { + sub_08078930(this); + } + } + if (this->entityType.parameter != 0 && this->field_0x80.HALF.HI) { + this->actionDelay = 0; + this->field_0xf = 1; + } +} + +void sub_0802AF28(Entity* this) { + this->previousActionFlag = 1; + sub_08079BD8(this); + this->spritePriority.b1 = 2; + GetNextFrame(this); +} + +void sub_0802AF50(Entity* this) { + GetNextFrame(this); +} + +void sub_0802AF58(Entity* this) { + GetNextFrame(this); + this->spritePriority.b1 = 3; +} + +void sub_0802AF74(Entity* this) { + this->action = 3; + this->previousActionFlag = 0; + if (this->actionDelay > 60) { + this->actionDelay = 60; + } + GetNextFrame(this); +} + +void sub_0802AF94(Entity* this) { + DeleteEntity(this); +} + +void sub_0802AF9C(Entity* this) { + GetNextFrame(this); + if (--this->actionDelay == 0) { + if (this->parent->field_0x7a.HALF.LO) { + this->parent->field_0x7a.HALF.LO--; + } + DeleteEntity(this); + } +} + +#if NON_MATCHING +void sub_0802AFC8(Entity* this) { + u32 flag = 8; + if (this->field_0xf < 0x29) { + u32 tmp; + + flag = 4; + if (this->field_0x82.HWORD & 0x8000) { + this->field_0x82.HWORD -= 0x10; + } else { + this->field_0x82.HWORD += 0x10; + } + if (0x7f < (this->field_0x82.HWORD & 0xf0) - 1) { + this->field_0x82.HWORD ^= 0x8000; + } + + tmp = 0x130 - (this->field_0x82.HWORD & 0xf0); + sub_0805EC9C(this, tmp, tmp, 0); + } + + if (this->field_0xf & flag) { + this->palette.b.b0 = 0; + } else { + this->palette.b.b0 = this->palette.b.b4; + } +} +#else +NAKED +void sub_0802AFC8(Entity* this) { + asm(".include \"asm/non_matching/bombPeahat/sub_0802AFC8.inc\""); +} +#endif + +void sub_0802B048(Entity* this) { + Entity* ent; + u32 action; + + if (this->field_0x7a.HALF.HI) { + if (gRoomControls.roomOriginY > this->y.HALF.HI || + (gRoomControls.roomOriginY + gRoomControls.height + 0x20) < this->y.HALF.HI) { + this->flags &= ~0x80; + } else { + this->flags |= 0x80; + } + } + + ent = this->parent; + if (ent && this->action == 1) { + this->spriteRendering.b3 = ent->spriteRendering.b3; + this->spritePriority.b0 = ent->spritePriority.b0; + this->spriteOrientation.flipY = ent->spriteOrientation.flipY; + } + + action = this->action; + if (action != 4 && this->field_0x80.HALF.LO) { + if (this->actionDelay) { + if (--this->actionDelay == 0) { + this->field_0xf = 0x50; + this->field_0x82.HWORD = 0; + this->spriteRendering.b0 = 3; + sub_0805EC9C(this, 0x100, 0x100, 0); + } + } else { + if (this->field_0xf) { + if (--this->field_0xf == 0) { + if (action == 2 && this->previousActionFlag == 1) { + gPlayerState.heldObject = 0; + } + sub_0805EC60(this); + this->action = 4; + this->boundingBox = (BoundingBox*)&gUnk_080CD17C; + this->actionDelay = 0xf; + this->spriteSettings.b.draw = 0; + this->flags |= 0x80; + this->field_0x7a.HALF.HI = 0; + sub_08078954(this); + if (this->parent->next) { + this->parent->field_0x80.HALF.HI = 0; + } + ent = CreateObjectWithParent(this, 0x20, 0, 0); + if (ent != NULL) { + this->collisionLayer = 1; + } else { + DeleteEntity(this); + } + } else { + sub_0802AFC8(this); + } + } + } + } +} + +void sub_0802B1A0(Entity* this) { + this->action = 1; + this->actionDelay = 0; + this->field_0xf = 0x4f; + this->field_0x80.HALF.HI = 1; + InitializeAnimation(this, 0); +} + +void sub_0802B1BC(Entity* this) { + Entity* ent; + + if (this->actionDelay) { + this->actionDelay--; + } + + ent = sub_0802B250(this); + if (ent == 0) { + this->action = 2; + sub_0802B264(this); + } else { + if (ent->field_0x80.HALF.HI) { + CopyPosition(ent, this); + } else { + this->action = 2; + sub_0802B264(this); + } + } +} + +void sub_0802B204(Entity* this) { + if (sub_080044EC(this, 0x2800) == 1) { + Entity* ent = CreateEnemy(0x22, 1); + if (ent) { + CopyPosition(this, ent); + ent->parent = this->parent; + } + DeleteThisEntity(); + } +} + +bool32 sub_0802B234(Entity* this) { + bool32 ret = FALSE; + if (GetTileTypeByEntity(this) - 0x1c4 > 1) + ret = TRUE; + return ret; +} + +Entity* sub_0802B250(Entity* this) { + Entity* parent = this->parent; + if (parent && parent->next == NULL) { + parent = NULL; + } + return parent; +} + +void sub_0802B264(Entity* this) { + this->spriteSettings.b.draw = 1; + if (sub_0802B234(this)) { + this->spritePriority.b1 = 3; + } else { + + this->spritePriority.b1 = 0; + } + GetNextFrame(this); +} + +// clang-format off +void (*const gUnk_080CD0F0[])(Entity*) = { + sub_0802A84C, + sub_0802A8AC, + sub_08001324, + sub_0804A7D4, + sub_08001242, + sub_0802A8C8, +}; + +void (*const gUnk_080CD108[])(Entity*) = { + sub_0802A924, + sub_0802A9A8, + sub_0802AA40, + sub_0802AAC0, + sub_0802AB40, + sub_0802AC08, +}; + +void (*const gUnk_080CD120[])(Entity*) = { + sub_0802AE24, + sub_0802AE68, + sub_0802AEBC, + sub_0802AED4, + sub_0802AF9C, +}; + +void (*const gUnk_080CD134[])(Entity*) = { + sub_0802B1A0, + sub_0802B1BC, + sub_0802B204, +}; + +void (*const gUnk_080CD140[])(Entity*) = { + sub_0802A8E0, + sub_0802A8EC, + sub_0802A8F4, + sub_0802A8FC, + nullsub_143, + sub_0802A91C, +}; + +void (*const gUnk_080CD158[])(Entity*) = { + sub_0802AF28, + sub_0802AF50, + sub_0802AF58, + sub_0802AF74, + sub_0802AF94, +}; + +const BoundingBox gUnk_080CD16C = { + 0x00, 0xFB, 0x05, 0x03, 0x03, 0x05, 0x06, 0x06, +}; + +const BoundingBox gUnk_080CD174 = { + 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x04, 0x04, +}; + +const BoundingBox gUnk_080CD17C = { + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x16, 0x16, +}; +// clang-format on \ No newline at end of file