diff --git a/asm/non_matching/vaati/sub_0803E028.inc b/asm/non_matching/vaati/sub_0803E028.inc new file mode 100644 index 00000000..6678e52b --- /dev/null +++ b/asm/non_matching/vaati/sub_0803E028.inc @@ -0,0 +1,53 @@ +.syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + movs r5, #0 + adds r0, #0x75 + ldrb r0, [r0] + cmp r0, #2 + beq _0803E046 + bl Random + movs r1, #1 + ands r1, r0 + cmp r1, #0 + beq _0803E046 + movs r0, #0 + b _0803E082 +_0803E046: + adds r0, r4, #0 + adds r0, #0x77 + ldrb r0, [r0] + cmp r0, #1 + bne _0803E080 + ldr r2, _0803E084 @ =gRoomControls + ldrh r0, [r2, #6] + adds r1, r0, #0 + adds r1, #0x58 + ldr r0, _0803E088 @ =gPlayerEntity + movs r3, #0x2e + ldrsh r0, [r0, r3] + cmp r1, r0 + bgt _0803E080 + ldrh r2, [r2, #8] + adds r1, r2, #0 + adds r1, #0x58 + cmp r1, r0 + bgt _0803E080 + adds r1, r2, #0 + adds r1, #0xf8 + cmp r1, r0 + blt _0803E080 + adds r1, r4, #0 + adds r1, #0x81 + ldrb r0, [r1] + adds r0, #5 + strb r0, [r1] + movs r5, #1 +_0803E080: + adds r0, r5, #0 +_0803E082: + pop {r4, r5, pc} + .align 2, 0 +_0803E084: .4byte gRoomControls +_0803E088: .4byte gPlayerEntity +.syntax divided diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s deleted file mode 100644 index d2092068..00000000 --- a/asm/vaatiRebornEnemy.s +++ /dev/null @@ -1,1494 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start sub_0803D560 -sub_0803D560: @ 0x0803D560 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x74 - ldrb r0, [r2] - cmp r0, #2 - beq _0803D62A - cmp r0, #2 - bgt _0803D57C - cmp r0, #0 - beq _0803D5BC - cmp r0, #1 - beq _0803D5F8 - b _0803D650 -_0803D57C: - cmp r0, #0xfe - beq _0803D590 - cmp r0, #0xfe - bgt _0803D58A - cmp r0, #3 - beq _0803D646 - b _0803D650 -_0803D58A: - cmp r0, #0xff - beq _0803D598 - b _0803D650 -_0803D590: - movs r0, #0 - strb r0, [r2] - movs r0, #1 - b _0803D64E -_0803D598: - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #4 - rsbs r0, r0, #0 - cmp r1, r0 - beq _0803D5AC - ldr r0, [r4, #0x34] - ldr r1, _0803D5B8 @ =0xFFFFE000 - adds r0, r0, r1 - str r0, [r4, #0x34] -_0803D5AC: - ldrb r0, [r4, #0xe] - cmp r0, #2 - bne _0803D650 - movs r0, #0xfe - strb r0, [r2] - b _0803D650 - .align 2, 0 -_0803D5B8: .4byte 0xFFFFE000 -_0803D5BC: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D650 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x75 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - movs r1, #0x20 - cmp r0, #0 - beq _0803D5E0 - movs r1, #0x14 -_0803D5E0: - strb r1, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - adds r0, #1 - asrs r0, r0, #1 - lsls r0, r0, #1 - adds r0, #2 - adds r1, r4, #0 - adds r1, #0x80 - strb r0, [r1] - b _0803D650 -_0803D5F8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D650 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x75 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803D620 - movs r0, #0xd8 - lsls r0, r0, #1 - bl SoundReq -_0803D620: - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _0803D650 -_0803D62A: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803D650 - movs r0, #3 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803D650 -_0803D646: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] -_0803D64E: - strb r0, [r4, #0xe] -_0803D650: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - - thumb_func_start sub_0803D658 -sub_0803D658: @ 0x0803D658 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D68E - movs r2, #1 - strb r2, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x84 - ldrb r0, [r1] - orrs r0, r3 - strb r0, [r1] - strb r2, [r4, #0xe] - ldrb r0, [r4, #0x15] - adds r0, #0x10 - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803D6EE -_0803D68E: - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0803D6EE - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - adds r5, r4, #0 - adds r5, #0x84 - ldrb r0, [r5] - cmp r0, #0xff - bne _0803D6C8 - ldr r1, _0803D6F8 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - ldr r1, _0803D6FC @ =gUnk_080D04C0 - lsrs r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r5] - movs r0, #0 - strb r0, [r4, #0xf] -_0803D6C8: - ldrb r0, [r4, #0xf] - cmp r0, #0xf - bhi _0803D6EE - ldrb r2, [r5] - adds r0, r4, #0 - movs r1, #0x1a - bl sub_0804A98C - adds r1, r0, #0 - cmp r1, #0 - beq _0803D6EE - ldrb r0, [r4, #0xf] - strb r0, [r1, #0xf] - str r4, [r1, #0x50] - ldrh r0, [r4, #0x36] - strh r0, [r1, #0x36] - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] -_0803D6EE: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 -_0803D6F8: .4byte gPlayerEntity -_0803D6FC: .4byte gUnk_080D04C0 - - thumb_func_start sub_0803D700 -sub_0803D700: @ 0x0803D700 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803D720 - movs r0, #1 - strb r0, [r4, #0xc] - strb r0, [r4, #0xe] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803D82E -_0803D720: - adds r2, r4, #0 - adds r2, #0x74 - ldrb r0, [r2] - adds r6, r2, #0 - cmp r0, #1 - beq _0803D764 - cmp r0, #1 - bgt _0803D736 - cmp r0, #0 - beq _0803D744 - b _0803D73E -_0803D736: - cmp r0, #2 - beq _0803D78E - cmp r0, #3 - beq _0803D7FA -_0803D73E: - adds r5, r4, #0 - adds r5, #0x87 - b _0803D81C -_0803D744: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - adds r5, r4, #0 - adds r5, #0x87 - cmp r0, #0 - bne _0803D81C - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _0803D81C -_0803D764: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x10 - ands r0, r1 - adds r5, r4, #0 - adds r5, #0x87 - cmp r0, #0 - beq _0803D81C - movs r0, #2 - strb r0, [r2] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x40 - strb r0, [r4, #0xf] - movs r0, #0xf4 - bl SoundReq - b _0803D81C -_0803D78E: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - adds r5, r4, #0 - adds r5, #0x87 - cmp r0, #0 - bne _0803D81C - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #1 - bls _0803D7E4 - ldrb r0, [r5] - cmp r0, #3 - bhi _0803D7E4 - bl Random - movs r1, #0x10 - ands r1, r0 - cmp r1, #0 - beq _0803D7E4 - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x40 - strb r0, [r4, #0xf] - ldr r1, _0803D7E0 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - movs r1, #0x10 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - b _0803D81A - .align 2, 0 -_0803D7E0: .4byte gPlayerEntity -_0803D7E4: - ldrb r0, [r6] - adds r0, #1 - movs r1, #0 - strb r0, [r6] - strb r1, [r5] - movs r0, #0x30 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803D81C -_0803D7FA: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r5, r4, #0 - adds r5, #0x87 - cmp r1, #0 - bne _0803D81C - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] - strb r0, [r4, #0xe] - ldrb r0, [r4, #0x15] - orrs r0, r3 -_0803D81A: - strb r0, [r4, #0x15] -_0803D81C: - ldrb r0, [r5] - cmp r0, #0 - beq _0803D828 - adds r0, r4, #0 - bl sub_080AEFB4 -_0803D828: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_0803D82E: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0803D830 -sub_0803D830: @ 0x0803D830 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803D844 - movs r0, #1 - strb r0, [r5, #0xc] - strb r0, [r5, #0xe] - b _0803D8F4 -_0803D844: - adds r4, r5, #0 - adds r4, #0x74 - ldrb r0, [r4] - cmp r0, #1 - beq _0803D870 - cmp r0, #1 - bgt _0803D858 - cmp r0, #0 - beq _0803D862 - b _0803D8EE -_0803D858: - cmp r0, #2 - beq _0803D8C2 - cmp r0, #3 - beq _0803D8CE - b _0803D8EE -_0803D862: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0803D8EE - movs r0, #1 - strb r0, [r4] - movs r0, #0x70 - b _0803D8EC -_0803D870: - ldrb r0, [r5, #0xe] - subs r1, r0, #1 - strb r1, [r5, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803D8B0 - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - movs r0, #0xa8 - lsls r0, r0, #1 - bl SoundReq - adds r0, r5, #0 - movs r1, #0x18 - movs r2, #0 - bl sub_0804A98C - adds r4, r0, #0 - cmp r4, #0 - beq _0803D8EE - ldr r3, _0803D8AC @ =0xFFF00000 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - str r5, [r4, #0x50] - b _0803D8EE - .align 2, 0 -_0803D8AC: .4byte 0xFFF00000 -_0803D8B0: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x40 - bne _0803D8EE - movs r0, #0xcb - lsls r0, r0, #1 - bl SoundReq - b _0803D8EE -_0803D8C2: - ldrb r0, [r5, #0xf] - cmp r0, #0 - beq _0803D8EE - movs r0, #0 - strb r0, [r5, #0xf] - b _0803D8EE -_0803D8CE: - ldrb r0, [r5, #0xf] - cmp r0, #0 - bne _0803D8DE - movs r0, #1 - strb r0, [r5, #0xf] - ldr r0, _0803D8F8 @ =0x0000014F - bl SoundReq -_0803D8DE: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0803D8EE - movs r1, #0 - movs r0, #1 - strb r0, [r5, #0xc] - strb r1, [r4] -_0803D8EC: - strb r0, [r5, #0xe] -_0803D8EE: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame -_0803D8F4: - pop {r4, r5, pc} - .align 2, 0 -_0803D8F8: .4byte 0x0000014F - - thumb_func_start sub_0803D8FC -sub_0803D8FC: @ 0x0803D8FC - push {r4, r5, lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - cmp r0, #0 - beq _0803D968 - subs r1, r0, #1 - strb r1, [r2, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803D918 - movs r0, #1 - bl SetRoomFlag - b _0803D968 -_0803D918: - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0803D968 - adds r0, r2, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _0803D968 - bl Random - ldr r1, _0803D96C @ =0x00003F3F - ands r0, r1 - movs r3, #0xff - adds r1, r0, #0 - ands r1, r3 - ldr r5, _0803D970 @ =0x0000FFE0 - adds r2, r5, #0 - adds r1, r2, r1 - ldrh r5, [r4, #0x2e] - adds r1, r1, r5 - strh r1, [r4, #0x2e] - lsrs r0, r0, #8 - ands r0, r3 - adds r2, r2, r0 - ldrh r0, [r4, #0x32] - adds r2, r2, r0 - strh r2, [r4, #0x32] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2] -_0803D968: - pop {r4, r5, pc} - .align 2, 0 -_0803D96C: .4byte 0x00003F3F -_0803D970: .4byte 0x0000FFE0 - - thumb_func_start sub_0803D974 -sub_0803D974: @ 0x0803D974 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r5, r4, #0 - adds r5, #0x74 - strb r1, [r5] - adds r2, r4, #0 - adds r2, #0x75 - strb r0, [r2] - strb r1, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xff - strb r0, [r1] - ldr r0, [r4, #0x50] - movs r3, #0x80 - lsls r3, r3, #9 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - movs r0, #0x4a - movs r1, #2 - bl CreateEnemy - str r4, [r0, #0x50] - ldr r1, [r4, #0x50] - str r1, [r0, #0x54] - ldrb r1, [r5] - adds r0, r4, #0 - bl InitAnimationForceUpdate - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803D9BC -sub_0803D9BC: @ 0x0803D9BC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - adds r2, r4, #0 - adds r2, #0x74 - ldrb r0, [r2] - cmp r0, #0 - bne _0803D9E2 - adds r0, r5, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803DA44 - movs r0, #1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x30 - b _0803D9F6 -_0803D9E2: - adds r0, r5, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0803DA02 - movs r0, #0 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x2f -_0803D9F6: - strb r0, [r1] - ldrb r1, [r2] - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803DA44 -_0803DA02: - adds r2, r4, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803DA2E - adds r0, r4, #0 - adds r0, #0x3d - ldrb r1, [r0] - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0803DA2E - adds r0, r5, #0 - adds r0, #0x3d - strb r1, [r0] - ldrb r0, [r2] - adds r2, r5, #0 - adds r2, #0x41 - strb r0, [r2] -_0803DA2E: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0803DA44 - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_0803DA44: - adds r1, r4, #0 - adds r1, #0x75 - ldrb r0, [r1] - cmp r0, #0 - bne _0803DA60 - ldrb r0, [r5, #0xc] - cmp r0, #2 - beq _0803DA72 - movs r0, #1 - strb r0, [r1] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - b _0803DA70 -_0803DA60: - ldrb r0, [r5, #0xc] - cmp r0, #2 - bne _0803DA72 - movs r0, #0 - strb r0, [r1] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 -_0803DA70: - strb r0, [r4, #0x10] -_0803DA72: - ldrb r1, [r5, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r5, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x62 - strb r0, [r1] - ldr r0, [r4, #0x50] - movs r3, #0x80 - lsls r3, r3, #9 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803DAA8 -sub_0803DAA8: @ 0x0803DAA8 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #0x50] - movs r3, #0 - movs r2, #1 - strb r2, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x74 - strb r2, [r1] - adds r1, #1 - strb r3, [r1] - adds r2, r4, #0 - adds r2, #0x63 - movs r1, #0xfe - strb r1, [r2] - movs r1, #0xff - strb r1, [r4, #0x15] - movs r3, #0x80 - lsls r3, r3, #0xa - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803DAE4 -sub_0803DAE4: @ 0x0803DAE4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - adds r0, r5, #0 - adds r0, #0x74 - ldrb r2, [r0] - cmp r2, #0 - bne _0803DB3E - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - beq _0803DB00 - strb r2, [r1] -_0803DB00: - ldr r0, [r5, #0x50] - ldrb r1, [r0, #0x15] - cmp r1, #0xff - beq _0803DB28 - adds r2, r4, #0 - adds r2, #0x75 - ldrb r0, [r2] - cmp r0, #0 - bne _0803DB16 - movs r0, #1 - strb r0, [r2] -_0803DB16: - ldrb r0, [r4, #0x15] - cmp r1, r0 - beq _0803DB54 - strb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803DB54 -_0803DB28: - adds r1, r4, #0 - adds r1, #0x75 - ldrb r0, [r1] - cmp r0, #0 - beq _0803DB54 - strb r2, [r1] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803DB54 -_0803DB3E: - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - bne _0803DB54 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_0803DB54: - ldrb r1, [r5, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r5, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x62 - strb r0, [r1] - ldr r0, [r5, #0x50] - movs r3, #0x80 - lsls r3, r3, #0xa - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - - thumb_func_start sub_0803DB88 -sub_0803DB88: @ 0x0803DB88 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r2, r4, #0 - adds r2, #0x74 - strb r1, [r2] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1] - ldrb r1, [r2] - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0803DC0C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803DBB8 -sub_0803DBB8: @ 0x0803DBB8 - push {r4, lr} - adds r4, r0, #0 - ldr r2, [r4, #0x50] - ldrb r0, [r2, #0x15] - cmp r0, #0xff - beq _0803DBE8 - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - bne _0803DBD2 - movs r0, #1 - strb r0, [r1] -_0803DBD2: - ldrb r0, [r2, #0x15] - lsls r1, r0, #0x18 - ldrb r2, [r4, #0x15] - cmp r0, r2 - beq _0803DC02 - strb r0, [r4, #0x15] - lsrs r1, r1, #0x1b - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803DC02 -_0803DBE8: - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - beq _0803DC02 - movs r0, #0 - strb r0, [r1] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_0803DC02: - adds r0, r4, #0 - bl sub_0803DC0C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803DC0C -sub_0803DC0C: @ 0x0803DC0C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldrb r5, [r4, #0xe] - lsls r5, r5, #1 - ldr r1, _0803DC54 @ =gUnk_080D04C8 - adds r5, r5, r1 - ldrb r2, [r0, #0x18] - lsls r2, r2, #0x1e - lsrs r2, r2, #0x1e - ldrb r3, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r3 - orrs r1, r2 - strb r1, [r4, #0x18] - adds r1, r0, #0 - adds r1, #0x62 - ldrb r1, [r1] - adds r2, r4, #0 - adds r2, #0x62 - strb r1, [r2] - movs r2, #0 - ldrsb r2, [r5, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r5, r3] - adds r3, #1 - lsls r3, r3, #0x10 - adds r1, r4, #0 - bl PositionRelative - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 -_0803DC54: .4byte gUnk_080D04C8 - - thumb_func_start sub_0803DC58 -sub_0803DC58: @ 0x0803DC58 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x30 - beq _0803DC66 - b _0803DD74 -_0803DC66: - ldr r5, [r4, #0x50] - adds r2, r4, #0 - adds r2, #0x77 - movs r7, #0 - strb r7, [r2] - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - mov ip, r0 - ands r0, r1 - adds r6, r2, #0 - cmp r0, #0 - beq _0803DD20 - ldr r0, _0803DCE4 @ =gUnk_080D04D0 - adds r3, r5, #0 - adds r3, #0x86 - ldrb r2, [r3] - adds r0, r2, r0 - adds r1, r4, #0 - adds r1, #0x45 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bls _0803DCFA - adds r0, r2, #1 - strb r0, [r3] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bls _0803DCF0 - ldrb r2, [r4, #0x10] - movs r1, #0x7f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r4, #0x10] - movs r0, #7 - strb r0, [r5, #0xc] - ldrb r0, [r5, #0x10] - ands r1, r0 - strb r1, [r5, #0x10] - mov r2, ip - strb r2, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x62 - strb r7, [r0] - ldrb r0, [r5, #0x15] - orrs r0, r3 - strb r0, [r5, #0x15] - strb r7, [r4, #0xe] - ldr r0, _0803DCE8 @ =0x80100000 - bl SoundReq - ldr r0, _0803DCEC @ =gArea - movs r2, #0x86 - lsls r2, r2, #4 - adds r1, r0, r2 - adds r2, #4 - adds r0, r0, r2 - ldr r0, [r0] - str r0, [r1] - b _0803DD74 - .align 2, 0 -_0803DCE4: .4byte gUnk_080D04D0 -_0803DCE8: .4byte 0x80100000 -_0803DCEC: .4byte gArea -_0803DCF0: - movs r0, #1 - strb r0, [r4, #0xe] - ldrb r0, [r6] - orrs r0, r3 - strb r0, [r6] -_0803DCFA: - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0803DD20 - ldr r0, _0803DD50 @ =0x00000127 - bl SoundReq - movs r0, #0xc - movs r1, #1 - bl sub_08080964 - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0803DD26 - movs r0, #0x48 - strb r0, [r4, #0xe] -_0803DD20: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0803DD74 -_0803DD26: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r2, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803DD74 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x2f - strb r0, [r1] - adds r1, #0x35 - movs r0, #1 - strb r0, [r1] - ldrb r0, [r6] - cmp r0, #0 - bne _0803DD54 - adds r1, r5, #0 - adds r1, #0x74 - movs r0, #0xf0 - b _0803DD64 - .align 2, 0 -_0803DD50: .4byte 0x00000127 -_0803DD54: - adds r1, r5, #0 - adds r1, #0x74 - movs r0, #0x70 - strb r0, [r1] - adds r1, r4, #0 - adds r1, #0x45 - ldrb r0, [r1] - orrs r0, r2 -_0803DD64: - strb r0, [r1] - movs r0, #1 - strb r0, [r5, #0xc] - strb r0, [r5, #0xe] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_0803DD74: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0803DD78 -sub_0803DD78: @ 0x0803DD78 - push {r4, r5, lr} - adds r4, r0, #0 - bl Random - movs r1, #0x7c - ands r1, r0 - lsrs r2, r1, #2 - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #1 - beq _0803DDFE - cmp r0, #1 - bgt _0803DD9A - cmp r0, #0 - beq _0803DDA0 - b _0803DDB6 -_0803DD9A: - cmp r0, #2 - beq _0803DE5C - b _0803DDB6 -_0803DDA0: - adds r0, r4, #0 - adds r0, #0x80 - ldrb r1, [r0] - cmp r1, #0 - bne _0803DDBC - subs r0, #0xb - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x77 - movs r0, #0x50 - strb r0, [r1] -_0803DDB6: - adds r5, r4, #0 - adds r5, #0x83 - b _0803DED0 -_0803DDBC: - adds r0, r4, #0 - adds r0, #0x83 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #5 - bls _0803DDCA - b _0803DED0 -_0803DDCA: - lsls r0, r1, #2 - ldr r1, _0803DDD4 @ =_0803DDD8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DDD4: .4byte _0803DDD8 -_0803DDD8: @ jump table - .4byte _0803DDF0 @ case 0 - .4byte _0803DEC2 @ case 1 - .4byte _0803DDF0 @ case 2 - .4byte _0803DEC2 @ case 3 - .4byte _0803DDF0 @ case 4 - .4byte _0803DEC2 @ case 5 -_0803DDF0: - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #0 - strb r0, [r1] - adds r1, #2 - movs r0, #0x50 - b _0803DECE -_0803DDFE: - adds r0, r4, #0 - adds r0, #0x83 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #5 - bhi _0803DED0 - lsls r0, r1, #2 - ldr r1, _0803DE14 @ =_0803DE18 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DE14: .4byte _0803DE18 -_0803DE18: @ jump table - .4byte _0803DE98 @ case 0 - .4byte _0803DEC2 @ case 1 - .4byte _0803DE30 @ case 2 - .4byte _0803DEC2 @ case 3 - .4byte _0803DE46 @ case 4 - .4byte _0803DEC2 @ case 5 -_0803DE30: - movs r1, #8 - ands r1, r2 - cmp r1, #0 - bne _0803DEC2 - adds r0, r4, #0 - adds r0, #0x75 - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x77 - movs r0, #0x50 - b _0803DECE -_0803DE46: - movs r0, #8 - ands r2, r0 - cmp r2, #0 - beq _0803DE98 - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #0 - strb r0, [r1] - adds r1, #2 - movs r0, #0x50 - b _0803DECE -_0803DE5C: - adds r0, r4, #0 - adds r0, #0x83 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #5 - bhi _0803DED0 - lsls r0, r1, #2 - ldr r1, _0803DE74 @ =_0803DE78 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DE74: .4byte _0803DE78 -_0803DE78: @ jump table - .4byte _0803DE98 @ case 0 - .4byte _0803DEC2 @ case 1 - .4byte _0803DE90 @ case 2 - .4byte _0803DEC2 @ case 3 - .4byte _0803DEA6 @ case 4 - .4byte _0803DEC2 @ case 5 -_0803DE90: - movs r0, #0xf - ands r2, r0 - cmp r2, #2 - bls _0803DEC2 -_0803DE98: - adds r0, r4, #0 - adds r0, #0x75 - movs r1, #1 - strb r1, [r0] - adds r0, #2 - strb r1, [r0] - b _0803DED0 -_0803DEA6: - cmp r2, #9 - bls _0803DEC2 - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #2 - strb r0, [r1] - bl Random - movs r1, #1 - ands r0, r1 - adds r0, #2 - adds r1, r4, #0 - adds r1, #0x77 - b _0803DECE -_0803DEC2: - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #0 - strb r0, [r1] - adds r1, #2 - movs r0, #1 -_0803DECE: - strb r0, [r1] -_0803DED0: - ldrb r0, [r5] - adds r0, #1 - movs r1, #6 - bl __modsi3 - strb r0, [r5] - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803DEE0 -sub_0803DEE0: @ 0x0803DEE0 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #2 - bl Random - movs r1, #0xf8 - ands r1, r0 - lsrs r2, r1, #3 - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0803DFB8 - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #1 - beq _0803DF28 - cmp r0, #1 - bgt _0803DF0E - cmp r0, #0 - beq _0803DF14 - b _0803DFB8 -_0803DF0E: - cmp r0, #2 - beq _0803DF68 - b _0803DFB8 -_0803DF14: - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - movs r5, #1 - ands r5, r1 - adds r1, #1 - movs r2, #3 - ands r1, r2 - strb r1, [r0] - b _0803DFB8 -_0803DF28: - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - adds r4, r0, #0 - cmp r1, #4 - bhi _0803DFAC - lsls r0, r1, #2 - ldr r1, _0803DF40 @ =_0803DF44 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DF40: .4byte _0803DF44 -_0803DF44: @ jump table - .4byte _0803DF9E @ case 0 - .4byte _0803DF58 @ case 1 - .4byte _0803DF9E @ case 2 - .4byte _0803DF58 @ case 3 - .4byte _0803DF5C @ case 4 -_0803DF58: - movs r5, #1 - b _0803DFAC -_0803DF5C: - movs r0, #8 - ands r2, r0 - movs r5, #0 - cmp r2, #0 - beq _0803DFAC - b _0803DF9E -_0803DF68: - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - adds r4, r0, #0 - cmp r1, #4 - bhi _0803DFAC - lsls r0, r1, #2 - ldr r1, _0803DF80 @ =_0803DF84 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DF80: .4byte _0803DF84 -_0803DF84: @ jump table - .4byte _0803DF9E @ case 0 - .4byte _0803DF98 @ case 1 - .4byte _0803DFA2 @ case 2 - .4byte _0803DF9E @ case 3 - .4byte _0803DFAA @ case 4 -_0803DF98: - movs r5, #0 - cmp r2, #5 - bls _0803DFAC -_0803DF9E: - movs r5, #3 - b _0803DFAC -_0803DFA2: - movs r5, #0 - cmp r2, #9 - bhi _0803DFAC - b _0803DF9E -_0803DFAA: - movs r5, #0 -_0803DFAC: - ldrb r0, [r4] - adds r0, #1 - movs r1, #5 - bl __modsi3 - strb r0, [r4] -_0803DFB8: - adds r0, r5, #0 - pop {r4, r5, pc} - - thumb_func_start sub_0803DFBC -sub_0803DFBC: @ 0x0803DFBC - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0803DFCE - ldr r0, [r4, #0x2c] - str r0, [r4, #0x78] - ldr r0, [r4, #0x30] - str r0, [r4, #0x7c] -_0803DFCE: - adds r5, r4, #0 - adds r5, #0x76 - ldrb r0, [r5] - cmp r0, #0 - bne _0803DFFC - ldrb r0, [r4, #0x15] - cmp r0, #0xff - beq _0803E000 - adds r0, r4, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _0803E000 - adds r0, r4, #0 - bl sub_08049EE4 - movs r1, #0x10 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r4, #0x15] - movs r0, #0x10 - b _0803DFFE -_0803DFFC: - subs r0, #1 -_0803DFFE: - strb r0, [r5] -_0803E000: - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803E022 - ldrb r0, [r4, #0x14] - adds r0, #1 - movs r1, #3 - ands r0, r1 - strb r0, [r4, #0x14] - ldr r1, _0803E024 @ =gUnk_080D04D3 - ldrb r0, [r4, #0x14] - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x62 - strb r1, [r0] -_0803E022: - pop {r4, r5, pc} - .align 2, 0 -_0803E024: .4byte gUnk_080D04D3 - - thumb_func_start sub_0803E028 -sub_0803E028: @ 0x0803E028 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #0 - adds r0, #0x75 - ldrb r0, [r0] - cmp r0, #2 - beq _0803E046 - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _0803E046 - movs r0, #0 - b _0803E082 -_0803E046: - adds r0, r4, #0 - adds r0, #0x77 - ldrb r0, [r0] - cmp r0, #1 - bne _0803E080 - ldr r2, _0803E084 @ =gRoomControls - ldrh r0, [r2, #6] - adds r1, r0, #0 - adds r1, #0x58 - ldr r0, _0803E088 @ =gPlayerEntity - movs r3, #0x2e - ldrsh r0, [r0, r3] - cmp r1, r0 - bgt _0803E080 - ldrh r2, [r2, #8] - adds r1, r2, #0 - adds r1, #0x58 - cmp r1, r0 - bgt _0803E080 - adds r1, r2, #0 - adds r1, #0xf8 - cmp r1, r0 - blt _0803E080 - adds r1, r4, #0 - adds r1, #0x81 - ldrb r0, [r1] - adds r0, #5 - strb r0, [r1] - movs r5, #1 -_0803E080: - adds r0, r5, #0 -_0803E082: - pop {r4, r5, pc} - .align 2, 0 -_0803E084: .4byte gRoomControls -_0803E088: .4byte gPlayerEntity diff --git a/data/const/enemy/vaatiRebornEnemy.s b/data/const/enemy/vaatiRebornEnemy.s deleted file mode 100644 index c1c266fd..00000000 --- a/data/const/enemy/vaatiRebornEnemy.s +++ /dev/null @@ -1,23 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D04A8:: @ 080D04A8 - .incbin "baserom.gba", 0x0D04A8, 0x0000004 - -gUnk_080D04AC:: @ 080D04AC - .incbin "baserom.gba", 0x0D04AC, 0x0000014 - -gUnk_080D04C0:: @ 080D04C0 - .incbin "baserom.gba", 0x0D04C0, 0x0000008 - -gUnk_080D04C8:: @ 080D04C8 - .incbin "baserom.gba", 0x0D04C8, 0x0000008 - -gUnk_080D04D0:: @ 080D04D0 - .incbin "baserom.gba", 0x0D04D0, 0x0000003 - -gUnk_080D04D3:: @ 080D04D3 - .incbin "baserom.gba", 0x0D04D3, 0x0000004 diff --git a/linker.ld b/linker.ld index 00b46639..d0566e3f 100644 --- a/linker.ld +++ b/linker.ld @@ -417,7 +417,6 @@ SECTIONS { src/enemy/lakituCloud.o(.text); asm/enemy49.o(.text); src/enemy/vaatiRebornEnemy.o(.text); - asm/vaatiRebornEnemy.o(.text); src/enemy/vaatiProjectile.o(.text); asm/ballChainSoldier.o(.text); src/enemy/enemy4D.o(.text); @@ -1122,7 +1121,6 @@ SECTIONS { src/enemy/lakituCloud.o(.rodata); data/const/enemy/enemy49.o(.rodata); src/enemy/vaatiRebornEnemy.o(.rodata); - data/const/enemy/vaatiRebornEnemy.o(.rodata); data/animations/enemy/vaatiRebornEnemy.o(.rodata); src/enemy/vaatiProjectile.o(.rodata); data/animations/enemy/vaatiProjectile.o(.rodata); diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c index 7ab2d240..3f3bceef 100644 --- a/src/enemy/vaatiRebornEnemy.c +++ b/src/enemy/vaatiRebornEnemy.c @@ -4,9 +4,9 @@ #include "flags.h" #include "random.h" #include "audio.h" +#include "area.h" #include "functions.h" -extern u32 __modsi3(u32, u32); extern void sub_080AEFB4(Entity*); extern u8 gEntCount; @@ -29,6 +29,7 @@ void sub_0803DBB8(Entity*); void sub_0803DD78(Entity*); u32 sub_0803DEE0(Entity*); u32 sub_0803E028(Entity*); +void sub_0803DC0C(Entity*); typedef struct xy { s8 x; @@ -51,8 +52,16 @@ void (*const gUnk_080D04A0[])(Entity*) = { sub_0803DBB8, }; -extern const xy gUnk_080D04A8[]; -extern const Coords gUnk_080D04AC[]; +const xy gUnk_080D04A8[] = { { 16, -43 }, { -16, -43 } }; +const Coords gUnk_080D04AC[] = { { .HALF = { 0x58, 0x60 } }, + { .HALF = { 0x58, 0x90 } }, + { .HALF = { 0x98, 0x78 } }, + { .HALF = { 0xd8, 0x60 } }, + { .HALF = { 0xd8, 0x90 } } }; +const u8 gUnk_080D04C0[] = { 2, 0, 0, 2, 2, 2, 4, 4 }; +const xy gUnk_080D04C8[] = { { 10, -29 }, { -10, -29 }, { 15, -21 }, { -15, -21 } }; +const u8 gUnk_080D04D0[] = { -24, -40, -48 }; +const u8 gUnk_080D04D3[] = { 0, 1, 0, -1 }; void VaatiRebornEnemy(Entity* this) { switch (this->type) { @@ -231,8 +240,10 @@ void sub_0803D408(Entity* this) { if (--this->actionDelay == 0) { this->field_0x74.HALF.LO++; if (sub_0803E028(this) == 0) { + s32 tmp; this->field_0x80.HALF.HI += 1 + (Random() & 3); - this->field_0x80.HALF.HI = __modsi3(this->field_0x80.HALF.HI, 5); + tmp = this->field_0x80.HALF.HI; + this->field_0x80.HALF.HI = tmp % 5; ptr = &gUnk_080D04AC[this->field_0x80.HALF.HI]; this->x.HALF.HI = gRoomControls.roomOriginX + ptr->HALF.x + 0x10; this->y.HALF.HI = gRoomControls.roomOriginY + ptr->HALF.y + 0x10; @@ -263,3 +274,617 @@ void sub_0803D408(Entity* this) { } UpdateAnimationSingleFrame(this); } + +void sub_0803D560(Entity* this) { + u8 temp; + + switch (this->field_0x74.HALF.LO) { + case 0xfe: + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + break; + case 0xff: + if (this->height.HALF.HI != -4) { + this->height.WORD -= 0x2000; + } + if (this->actionDelay == 2) { + this->field_0x74.HALF.LO = 0xfe; + } + break; + case 0: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + if ((this->field_0x74.HALF.HI & 0x80) != 0) { + temp = 0x14; + } else { + temp = 0x20; + } + this->actionDelay = temp; + this->field_0x80.HALF.LO = ((this->field_0x86.HALF.LO + 1) >> 1) * 2 + 2; + } + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + if ((this->field_0x74.HALF.HI & 0x80) == 0) { + SoundReq(SFX_1B0); + } + InitAnimationForceUpdate(this, 1); + } + break; + case 2: + if ((this->frames.all & 0x80) != 0) { + this->field_0x74.HALF.LO = 3; + InitAnimationForceUpdate(this, 0); + } + break; + case 3: + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + break; + } + UpdateAnimationSingleFrame(this); +} + +void sub_0803D658(Entity* this) { + u32 index; + Entity* entity; + + if (--this->actionDelay == 0) { + this->action = 1; + this->cutsceneBeh.HALF.LO = 0xff; + this->actionDelay = 1; + this->direction = (this->direction + 0x10) & 0x1f; + InitAnimationForceUpdate(this, 0); + } else { + if ((this->frames.all & 0x10) != 0) { + this->frames.all &= 0xef; + if (this->cutsceneBeh.HALF.LO == 0xff) { + index = Direction8RoundUp(GetFacingDirection(this, &gPlayerEntity)); + this->cutsceneBeh.HALF.LO = gUnk_080D04C0[index >> 2]; + this->field_0xf = 0; + } + if ((this->field_0xf < 0x10) && + (entity = sub_0804A98C(this, 0x1a, this->cutsceneBeh.HALF.LO), entity != NULL)) { + entity->field_0xf = this->field_0xf; + entity->parent = this; + entity->height.HALF.HI = this->height.HALF.HI; + this->field_0xf = this->field_0xf + 1; + } + } + } + UpdateAnimationSingleFrame(this); +} + +void sub_0803D700(Entity* this) { + u32 uVar3; + + if (this->field_0x80.HALF.LO == 0) { + this->action = 1; + this->actionDelay = 1; + this->direction = 0xff; + InitAnimationForceUpdate(this, 0); + return; + } + + switch (this->field_0x74.HALF.LO) { + case 0: + if (--this->field_0xf == 0) { + this->field_0x74.HALF.LO++; + InitAnimationForceUpdate(this, 1); + } + break; + case 1: + if ((this->frames.all & 0x10) != 0) { + this->field_0x74.HALF.LO = 2; + this->field_0xf = (Random() & 0x3f) + 0x40; + SoundReq(SFX_SUMMON); + } + break; + case 2: + if (--this->field_0xf == 0) { + if (!((this->field_0x86.HALF.LO < 2) || (3 < this->field_0x86.HALF.HI)) && (Random() & 0x10) != 0) { + this->field_0x86.HALF.HI++; + this->field_0xf = (Random() & 0x3f) + 0x40; + uVar3 = GetFacingDirection(this, &gPlayerEntity); + this->direction = (uVar3 & 0x10) | 8; + } else { + this->field_0x74.HALF.LO++; + this->field_0x86.HALF.HI = 0; + this->field_0xf = 0x30; + InitAnimationForceUpdate(this, 0); + } + } + break; + case 3: + if (--this->field_0xf == 0) { + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + this->direction = 0xff; + } + break; + } + + if (this->field_0x86.HALF.HI != 0) { + sub_080AEFB4(this); + } + UpdateAnimationSingleFrame(this); +} + +void sub_0803D830(Entity* this) { + Entity* target; + + if (this->field_0x80.HALF.LO == 0) { + this->action = 1; + this->actionDelay = 1; + return; + } + + switch (this->field_0x74.HALF.LO) { + case 0: + if (this->actionDelay != 0) { + this->field_0x74.HALF.LO = 1; + this->actionDelay = 0x70; + } + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + SoundReq(SFX_150); + target = sub_0804A98C(this, 0x18, 0); + if (target != NULL) { + PositionRelative(this, target, 0, -0x100000); + target->parent = this; + } + } else if (this->actionDelay == 0x40) { + SoundReq(SFX_196); + } + break; + case 2: + if (this->field_0xf != 0) { + this->field_0xf = 0; + } + break; + case 3: + if (this->field_0xf == 0) { + this->field_0xf = 1; + SoundReq(SFX_14F); + } + if (this->actionDelay) { + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + } + break; + } + UpdateAnimationSingleFrame(this); +} + +void sub_0803D8FC(Entity* this) { + Entity* fx; + u32 tmp; + + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + SetRoomFlag(1); + } else { + if ((this->actionDelay & 7) == 0) { + fx = CreateFx(this, 2, 0); + if (fx != NULL) { + tmp = Random() & 0x3f3f; + fx->x.HALF.HI = ((tmp & 0xff) - 0x20) + fx->x.HALF.HI; + fx->y.HALF.HI = ((tmp >> 8) & 0xff) - 0x20 + fx->y.HALF.HI; + fx->spritePriority.b0 = 2; + } + } + } + } +} + +void sub_0803D974(Entity* this) { + Entity* enemy; + + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->field_0x74.HALF.HI = 1; + this->actionDelay = 0; + this->spriteOffsetY = -1; + PositionRelative(this->parent, this, 0, 0x10000); + enemy = CreateEnemy(VAATI_REBORN_ENEMY, 2); + enemy->parent = this; + enemy->attachedEntity = this->parent; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); +} + +void sub_0803D9BC(Entity* this) { + Entity* parent; + + parent = this->parent; + if (this->field_0x74.HALF.LO == 0) { + if (parent->field_0x80.HALF.LO == 0) { + this->field_0x74.HALF.LO = 1; + this->damageType = 0x30; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); + } + } else { + if (parent->field_0x80.HALF.LO != 0) { + this->field_0x74.HALF.LO = 0; + this->damageType = 0x2f; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); + } else { + if (((this->bitfield & 0x80) != 0) && (0 < this->iframes)) { + parent->iframes = this->iframes; + parent->bitfield = this->bitfield; + } + if ((this->frames.all & 0x40) != 0) { + InitAnimationForceUpdate(this, 2); + } + } + } + + if (this->field_0x74.HALF.HI == 0) { + if (parent->action != 2) { + this->field_0x74.HALF.HI = 1; + this->flags |= 0x80; + } + } else { + if (parent->action == 2) { + this->field_0x74.HALF.HI = 0; + this->flags &= 0x7f; + } + } + this->spriteSettings.b.draw = parent->spriteSettings.b.draw; + this->spriteOffsetX = parent->spriteOffsetX; + PositionRelative(this->parent, this, 0, 0x10000); + UpdateAnimationSingleFrame(this); +} + +void sub_0803DAA8(Entity* this) { + Entity* source; + + source = this->parent->parent; + this->action = 1; + this->field_0x74.HALF.LO = 1; + this->field_0x74.HALF.HI = 0; + this->spriteOffsetY = -2; + this->direction = 0xff; + PositionRelative(source, this, 0, 0x20000); + InitAnimationForceUpdate(this, 2); +} + +void sub_0803DAE4(Entity* this) { + u8 bVar1; + Entity* parent; + + parent = this->parent; + if (parent->field_0x74.HALF.LO == 0) { + if (this->field_0x74.HALF.LO != 0) { + this->field_0x74.HALF.LO = 0; + } + bVar1 = parent->parent->direction; + if (bVar1 != 0xff) { + if (this->field_0x74.HALF.HI == 0) { + this->field_0x74.HALF.HI = 1; + } + if (bVar1 != this->direction) { + this->direction = bVar1; + InitAnimationForceUpdate(this, bVar1 >> 3); + } + } else { + if (this->field_0x74.HALF.HI != 0) { + this->field_0x74.HALF.HI = 0; + InitAnimationForceUpdate(this, 0); + } + } + } else { + if (this->field_0x74.HALF.LO == 0) { + this->field_0x74.HALF.LO = 1; + InitAnimationForceUpdate(this, 2); + } + } + this->spriteSettings.b.draw = parent->spriteSettings.b.draw; + this->spriteOffsetX = parent->spriteOffsetX; + PositionRelative(parent->parent, this, 0, 0x20000); + UpdateAnimationSingleFrame(this); +} + +void sub_0803DB88(Entity* this) { + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->direction = 0xff; + this->spriteOffsetY = -1; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); + sub_0803DC0C(this); +} + +void sub_0803DBB8(Entity* this) { + Entity* parent = this->parent; + + if (this->parent->direction != 0xff) { + if (this->field_0x74.HALF.LO == 0) { + this->field_0x74.HALF.LO = 1; + } + if (parent->direction != this->direction) { + this->direction = parent->direction; + InitAnimationForceUpdate(this, this->direction >> 3); + } + } else { + if (this->field_0x74.HALF.LO != 0) { + this->field_0x74.HALF.LO = 0; + this->direction = 0xff; + InitAnimationForceUpdate(this, 2); + } + } + sub_0803DC0C(this); +} + +void sub_0803DC0C(Entity* this) { + Entity* parent; + const xy* tmp; + + parent = this->parent; + tmp = &gUnk_080D04C8[this->actionDelay]; + this->spriteSettings.b.draw = parent->spriteSettings.b.draw; + this->spriteOffsetX = parent->spriteOffsetX; + PositionRelative(parent, this, tmp->x << 0x10, (tmp->y + 1) * 0x10000); + UpdateAnimationSingleFrame(this); +} + +void sub_0803DC58(Entity* this) { + Entity* parent; + + if (this->damageType != 0x30) { + return; + } + parent = this->parent; + this->field_0x76.HALF.HI = 0; + if ((this->bitfield & 0x80) != 0) { + if (gUnk_080D04D0[parent->field_0x86.HALF.LO] > this->currentHealth) { + if (2 < ++parent->field_0x86.HALF.LO) { + this->flags &= 0x7f; + parent->action = 7; + parent->flags &= 0x7f; + parent->actionDelay = 0x80; + parent->spriteOffsetX = 0; + parent->direction = -1; + this->actionDelay = 0; + SoundReq(0x80100000); + gArea.musicIndex = gArea.pMusicIndex; + return; + } + this->actionDelay = 1; + this->field_0x76.HALF.HI = 0xff; + } + if (0 < this->iframes) { + SoundReq(0x127); + sub_08080964(0xc, 1); + if (this->actionDelay == 0) + this->actionDelay = 0x48; + } + } + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + this->damageType = 0x2f; + this->field_0x74.HALF.LO = 1; + if (this->field_0x76.HALF.HI == 0) { + parent->field_0x74.HALF.LO = 0xf0; + } else { + parent->field_0x74.HALF.LO = 0x70; + this->currentHealth = 0xff; + } + parent->action = 1; + parent->actionDelay = 1; + InitAnimationForceUpdate(this, 0); + } + } +} + +void sub_0803DD78(Entity* this) { + u32 random_number; + + random_number = ((u32)Random() & 0x7c) >> 2; + + switch (this->field_0x86.HALF.LO) { + case 0: + if (this->field_0x80.HALF.LO == 0) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + break; + } + switch (this->field_0x82.HALF.HI) { + case 0: + case 2: + case 4: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + break; + case 1: + case 3: + case 5: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + break; + default: + break; + } + break; + case 1: + switch (this->field_0x82.HALF.HI) { + case 1: + case 3: + case 5: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + break; + case 2: + if ((random_number & 8) != 0) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + } else { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + } + break; + case 4: + if ((random_number & 8) != 0) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + break; + } + case 0: + this->field_0x74.HALF.HI = 1; + this->field_0x76.HALF.HI = 1; + break; + default: + break; + } + break; + case 2: + switch (this->field_0x82.HALF.HI) { + case 2: + if ((random_number & 0xf) < 3) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + } else { + this->field_0x74.HALF.HI = 1; + this->field_0x76.HALF.HI = 1; + } + break; + case 0: + this->field_0x74.HALF.HI = 1; + this->field_0x76.HALF.HI = 1; + break; + case 4: + if (9 < random_number) { + this->field_0x74.HALF.HI = 2; + this->field_0x76.HALF.HI = (Random() & 1) + 2; + break; + } + case 1: + case 3: + case 5: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + break; + default: + break; + } + } + + this->field_0x82.HALF.HI = (this->field_0x82.HALF.HI + 1) % 6; +} + +u32 sub_0803DEE0(Entity* this) { + u32 randomValue; + u32 ret; + + ret = 2; + randomValue = (Random() & 0xf8) >> 3; + if (this->field_0x80.HALF.LO) { + switch (this->field_0x86.HALF.LO) { + case 0: + ret = this->field_0x82.HALF.LO & 1; + this->field_0x82.HALF.LO = (this->field_0x82.HALF.LO + 1) & 3; + break; + case 1: + switch (this->field_0x82.HALF.LO) { + case 0: + case 2: + ret = 3; + break; + case 1: + case 3: + ret = 1; + break; + case 4: + if (randomValue & 8) { + ret = 3; + } else { + ret = 0; + } + break; + } + this->field_0x82.HALF.LO = (this->field_0x82.HALF.LO + 1) % 5; + break; + case 2: + switch (this->field_0x82.HALF.LO) { + case 0: + case 3: + ret = 3; + break; + case 1: + ret = 0; + if (randomValue > 5) { + ret = 3; + } + break; + case 2: + ret = 0; + if (randomValue < 10) { + ret = 3; + } + break; + case 4: + ret = 0; + break; + default: + ret = 2; + } + this->field_0x82.HALF.LO = (this->field_0x82.HALF.LO + 1) % 5; + break; + } + } + return ret; +} + +void sub_0803DFBC(Entity* this) { + u32 bVar1; + int iVar3; + + if (this->action != 0) { + *(u32*)&this->field_0x78 = this->x.WORD; + this->field_0x7c = this->y; + } + if (this->field_0x76.HALF.LO == 0) { + if ((this->direction == 0xff) || sub_08049FA0(this)) { + if (this->field_0x80.HALF.LO == 0) { + this->animationState = (this->animationState + 1) & 3; + this->spriteOffsetX = gUnk_080D04D3[this->animationState]; + } + return; + } + bVar1 = sub_08049EE4(this); + this->direction = (bVar1 & 0x10) | 8; + this->field_0x76.HALF.LO = 0x10; + } else { + this->field_0x76.HALF.LO--; + } + if (this->field_0x80.HALF.LO == 0) { + this->animationState = (this->animationState + 1) & 3; + this->spriteOffsetX = gUnk_080D04D3[this->animationState]; + } +} + +NONMATCH("asm/non_matching/vaati/sub_0803E028.inc", u32 sub_0803E028(Entity* this)) { + u32 uVar4; + u32 rx, ry, px; + + uVar4 = 0; + if ((this->field_0x74.HALF.HI != 2) && ((Random() & 1) != 0)) { + return 0; + } + if (this->field_0x76.HALF.HI == 1) { + if (gRoomControls.roomOriginX + 0x58 <= gPlayerEntity.x.HALF.HI) { + if (gRoomControls.roomOriginY + 0x58 <= gPlayerEntity.x.HALF.HI) { + if (gRoomControls.roomOriginY + 0xf8 >= gPlayerEntity.x.HALF.HI) { + this->field_0x80.HALF.HI += 5; + uVar4 = 1; + } + } + } + } + return uVar4; +} +END_NONMATCH