diff --git a/asm/enemy/ballChainSoldier.s b/asm/enemy/ballChainSoldier.s deleted file mode 100644 index 907efd54..00000000 --- a/asm/enemy/ballChainSoldier.s +++ /dev/null @@ -1,797 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start BallChainSoldier -BallChainSoldier: @ 0x0803E528 - push {lr} - ldr r1, _0803E534 @ =gUnk_080D06E0 - bl EnemyFunctionHandler - pop {pc} - .align 2, 0 -_0803E534: .4byte gUnk_080D06E0 - - thumb_func_start sub_0803E538 -sub_0803E538: @ 0x0803E538 - push {lr} - ldr r2, _0803E54C @ =gUnk_080D06F8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0803E54C: .4byte gUnk_080D06F8 - - thumb_func_start sub_0803E550 -sub_0803E550: @ 0x0803E550 - push {lr} - ldr r1, _0803E55C @ =gUnk_080D06E0 - bl sub_0804AA30 - pop {pc} - .align 2, 0 -_0803E55C: .4byte gUnk_080D06E0 - - thumb_func_start sub_0803E560 -sub_0803E560: @ 0x0803E560 - push {r4, lr} - adds r4, r0, #0 - bl sub_08001324 - - thumb_func_start sub_0803E568 -sub_0803E568: @ 0x0803E568 - adds r0, r4, #0 - bl sub_0803E538 - pop {r4, pc} - - thumb_func_start sub_0803E570 -sub_0803E570: @ 0x0803E570 - push {lr} - movs r1, #0xff - movs r2, #0x57 - bl CreateDeathFx - pop {pc} - - thumb_func_start nullsub_20 -nullsub_20: @ 0x0803E57C - bx lr - .align 2, 0 - - thumb_func_start sub_0803E580 -sub_0803E580: @ 0x0803E580 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_0804A720 - adds r0, r5, #0 - movs r1, #0x19 - movs r2, #0 - bl CreateProjectileWithParent - cmp r0, #0 - beq _0803E5E4 - str r5, [r0, #0x50] - str r0, [r5, #0x54] - ldrb r1, [r5, #0x10] - movs r0, #0x80 - movs r4, #0 - orrs r0, r1 - strb r0, [r5, #0x10] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - bl Random - movs r1, #3 - ands r0, r1 - strb r0, [r5, #0x14] - adds r0, r5, #0 - adds r0, #0x7b - strb r4, [r0] - adds r0, #1 - strb r4, [r0] - adds r1, r5, #0 - adds r1, #0x7e - movs r0, #0x20 - strb r0, [r1] - adds r1, #1 - movs r0, #0xfe - strb r0, [r1] - ldrb r1, [r5, #0x14] - lsls r1, r1, #2 - adds r0, r5, #0 - bl InitAnimationForceUpdate - adds r0, r5, #0 - bl sub_0803E86C -_0803E5E4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803E5E8 -sub_0803E5E8: @ 0x0803E5E8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7c - ldrb r1, [r0] - subs r1, #0xa - strb r1, [r0] - adds r0, r4, #0 - bl sub_0803E9A4 - adds r0, r4, #0 - bl sub_0803E9D4 - cmp r0, #0 - bne _0803E61A - adds r1, r4, #0 - adds r1, #0x78 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803E61A - adds r0, r4, #0 - bl sub_0803E8CC -_0803E61A: - pop {r4, pc} - - thumb_func_start sub_0803E61C -sub_0803E61C: @ 0x0803E61C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7c - ldrb r1, [r0] - subs r1, #0xa - strb r1, [r0] - adds r0, r4, #0 - bl sub_0803E9A4 - adds r0, r4, #0 - bl sub_0803E9D4 - cmp r0, #0 - bne _0803E66A - adds r0, r4, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - bne _0803E654 - adds r0, r4, #0 - bl ProcessMovement - cmp r0, #0 - bne _0803E654 - adds r0, r4, #0 - bl sub_0803E86C - b _0803E66A -_0803E654: - adds r1, r4, #0 - adds r1, #0x78 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803E66A - adds r0, r4, #0 - bl sub_0803E92C -_0803E66A: - pop {r4, pc} - - thumb_func_start sub_0803E66C -sub_0803E66C: @ 0x0803E66C - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - ldrb r0, [r1] - subs r0, #0x10 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0803E9A4 - adds r1, r4, #0 - adds r1, #0x7e - ldrb r0, [r1] - cmp r0, #0x21 - bhi _0803E68E - adds r0, #1 - strb r0, [r1] -_0803E68E: - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0803E6A4 - adds r0, r4, #0 - bl sub_0803EA64 - cmp r0, #0 - bne _0803E6B0 -_0803E6A4: - movs r0, #4 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x7b - movs r0, #0 - strb r0, [r1] -_0803E6B0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803E6B4 -sub_0803E6B4: @ 0x0803E6B4 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - ldrb r0, [r1] - subs r0, #0xa - strb r0, [r1] - adds r0, r4, #0 - bl sub_0803E9A4 - adds r1, r4, #0 - adds r1, #0x7e - ldrb r0, [r1] - cmp r0, #0x20 - bls _0803E6D8 - subs r0, #1 - strb r0, [r1] - b _0803E6DE -_0803E6D8: - adds r0, r4, #0 - bl sub_0803E86C -_0803E6DE: - pop {r4, pc} - - thumb_func_start sub_0803E6E0 -sub_0803E6E0: @ 0x0803E6E0 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7c - ldrb r1, [r0] - subs r1, #0xc - strb r1, [r0] - adds r0, r4, #0 - bl sub_0803E9A4 - adds r1, r4, #0 - adds r1, #0x7e - ldrb r0, [r1] - subs r0, #4 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bgt _0803E718 - movs r0, #0 - strb r0, [r1] - movs r0, #6 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x14] - adds r1, #0x20 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0803E718: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803E71C -sub_0803E71C: @ 0x0803E71C - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0 - bne _0803E756 - movs r0, #7 - strb r0, [r2, #0xc] - movs r0, #1 - strb r0, [r2, #0xe] - ldr r1, _0803E758 @ =gUnk_080D0724 - ldrb r0, [r2, #0x14] - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r2, #0 - adds r0, #0x7c - strb r1, [r0] - subs r0, #1 - strb r3, [r0] - adds r1, r2, #0 - adds r1, #0x7f - movs r0, #0xf6 - strb r0, [r1] - adds r0, #0x65 - bl EnqueueSFX -_0803E756: - pop {pc} - .align 2, 0 -_0803E758: .4byte gUnk_080D0724 - - thumb_func_start sub_0803E75C -sub_0803E75C: @ 0x0803E75C - push {lr} - adds r2, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803E774 - adds r0, r2, #0 - bl UpdateAnimationSingleFrame - b _0803E7B0 -_0803E774: - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - adds r1, r2, #0 - adds r1, #0x7f - cmp r0, #0 - bne _0803E78E - movs r0, #2 - strb r0, [r2, #0xe] - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] -_0803E78E: - ldrb r0, [r1] - cmp r0, #0 - beq _0803E7A0 - adds r1, r2, #0 - adds r1, #0x7e - ldrb r0, [r1] - adds r0, #5 - strb r0, [r1] - b _0803E7B0 -_0803E7A0: - movs r0, #8 - strb r0, [r2, #0xc] - movs r0, #0x1e - strb r0, [r2, #0xe] - movs r0, #8 - movs r1, #0 - bl InitScreenShake -_0803E7B0: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803E7B4 -sub_0803E7B4: @ 0x0803E7B4 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803E7C8 - movs r0, #9 - strb r0, [r1, #0xc] -_0803E7C8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803E7CC -sub_0803E7CC: @ 0x0803E7CC - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x7e - ldrb r0, [r1] - subs r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xa - bhi _0803E806 - movs r0, #0xa - strb r0, [r2, #0xc] - movs r0, #0x5a - strb r0, [r2, #0xe] - ldrb r0, [r2, #0x14] - lsls r0, r0, #3 - strb r0, [r2, #0x15] - subs r1, #2 - movs r0, #0 - strb r0, [r1] - adds r1, #3 - movs r0, #0xfe - strb r0, [r1] - adds r0, r2, #0 - movs r1, #0x10 - bl sub_0803E94C - b _0803E814 -_0803E806: - cmp r0, #0x12 - bhi _0803E814 - ldr r2, [r2, #0x54] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] -_0803E814: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803E818 -sub_0803E818: @ 0x0803E818 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0803E840 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803E868 - ldr r0, [r4, #0x54] - ldrb r1, [r0, #0x10] - movs r2, #0x80 - orrs r1, r2 - strb r1, [r0, #0x10] - adds r0, r4, #0 - movs r1, #0 - bl sub_0803E94C - b _0803E868 -_0803E840: - adds r1, r4, #0 - adds r1, #0x7c - ldrb r0, [r1] - subs r0, #0xa - strb r0, [r1] - adds r0, r4, #0 - bl sub_0803E9A4 - adds r1, r4, #0 - adds r1, #0x7e - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1f - bls _0803E868 - adds r0, r4, #0 - bl sub_0803E86C -_0803E868: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803E86C -sub_0803E86C: @ 0x0803E86C - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0803E898 - adds r0, r4, #0 - movs r1, #0x50 - bl sub_0803EAD0 - cmp r0, #0 - beq _0803E898 - ldr r0, _0803E8C4 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] -_0803E898: - movs r0, #1 - strb r0, [r4, #0xc] - bl Random - ldr r2, _0803E8C8 @ =gUnk_080D0728 - movs r1, #3 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1] - adds r0, r4, #0 - adds r0, #0x78 - strh r1, [r0] - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #4 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0 - bl sub_0803E94C - pop {r4, pc} - .align 2, 0 -_0803E8C4: .4byte gUnk_020000B0 -_0803E8C8: .4byte gUnk_080D0728 - - thumb_func_start sub_0803E8CC -sub_0803E8CC: @ 0x0803E8CC - 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 _0803E8F4 - movs r0, #3 - ands r0, r5 - cmp r0, #0 - beq _0803E8F4 - adds r0, r4, #0 - bl sub_08049EE4 - adds r0, #4 - movs r1, #0x18 - b _0803E8F8 -_0803E8F4: - movs r1, #0x18 - adds r0, r5, #0 -_0803E8F8: - ands r0, r1 - strb r0, [r4, #0x15] - movs r0, #2 - strb r0, [r4, #0xc] - ldr r2, _0803E928 @ =gUnk_080D0730 - lsrs r0, r5, #0x10 - movs r1, #3 - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r1, [r0] - adds r0, r4, #0 - adds r0, #0x78 - strh r1, [r0] - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #4 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0x10 - bl sub_0803E94C - pop {r4, r5, pc} - .align 2, 0 -_0803E928: .4byte gUnk_080D0730 - - thumb_func_start sub_0803E92C -sub_0803E92C: @ 0x0803E92C - push {r4, lr} - adds r4, r0, #0 - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _0803E944 - adds r0, r4, #0 - bl sub_0803E86C - b _0803E94A -_0803E944: - adds r0, r4, #0 - bl sub_0803E8CC -_0803E94A: - pop {r4, pc} - - thumb_func_start sub_0803E94C -sub_0803E94C: @ 0x0803E94C - push {r4, r5, r6, lr} - adds r3, r0, #0 - adds r6, r1, #0 - ldrb r2, [r3, #0x15] - adds r0, r2, #4 - movs r1, #0x18 - ands r0, r1 - asrs r4, r0, #3 - adds r0, r3, #0 - adds r0, #0x58 - ldrb r1, [r0] - movs r0, #0x10 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, r6 - bne _0803E988 - movs r0, #7 - ands r0, r2 - ldrb r5, [r3, #0x14] - cmp r0, #4 - bne _0803E984 - lsrs r0, r2, #3 - subs r0, r5, r0 - movs r1, #3 - ands r0, r1 - cmp r0, #1 - ble _0803E9A2 -_0803E984: - cmp r4, r5 - beq _0803E9A2 -_0803E988: - strb r4, [r3, #0x14] - adds r0, r3, #0 - adds r0, #0x58 - ldrb r1, [r0] - movs r0, #3 - ands r0, r1 - adds r0, r6, r0 - lsls r1, r4, #2 - adds r4, r0, r1 - adds r0, r3, #0 - adds r1, r4, #0 - bl InitAnimationForceUpdate -_0803E9A2: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0803E9A4 -sub_0803E9A4: @ 0x0803E9A4 - push {r4, lr} - adds r2, r0, #0 - adds r0, #0x7c - ldrb r0, [r0] - adds r0, #0x20 - movs r1, #0xff - ands r0, r1 - asrs r4, r0, #6 - adds r3, r2, #0 - adds r3, #0x58 - ldrb r1, [r3] - movs r0, #3 - ands r0, r1 - cmp r0, r4 - beq _0803E9D2 - ldrb r1, [r3] - movs r0, #4 - rsbs r0, r0, #0 - ands r1, r0 - adds r1, r4, r1 - adds r0, r2, #0 - bl InitAnimationForceUpdate -_0803E9D2: - pop {r4, pc} - - thumb_func_start sub_0803E9D4 -sub_0803E9D4: @ 0x0803E9D4 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0803EA58 - adds r0, r4, #0 - movs r1, #0x38 - bl sub_0803EAD0 - cmp r0, #0 - beq _0803EA10 - movs r0, #3 - strb r0, [r4, #0xc] - ldr r0, _0803EA0C @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - adds r1, r4, #0 - adds r1, #0x7b - movs r0, #1 - b _0803EA46 - .align 2, 0 -_0803EA0C: .4byte gUnk_020000B0 -_0803EA10: - adds r0, r4, #0 - movs r1, #0x4e - bl sub_0803EAD0 - cmp r0, #0 - beq _0803EA58 - ldr r0, _0803EA54 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - movs r2, #0x12 - bl sub_0804A044 - adds r2, r0, #0 - cmp r2, #0xff - beq _0803EA58 - adds r1, r4, #0 - adds r1, #0x7a - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803EA60 - movs r0, #5 - strb r0, [r4, #0xc] - strb r2, [r4, #0x15] - movs r0, #4 -_0803EA46: - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0 - bl sub_0803E94C - movs r0, #1 - b _0803EA62 - .align 2, 0 -_0803EA54: .4byte gUnk_020000B0 -_0803EA58: - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #4 - strb r0, [r1] -_0803EA60: - movs r0, #0 -_0803EA62: - pop {r4, pc} - - thumb_func_start sub_0803EA64 -sub_0803EA64: @ 0x0803EA64 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0803EAC4 - adds r0, r4, #0 - movs r1, #0x4e - bl sub_0803EAD0 - cmp r0, #0 - beq _0803EAB8 - ldr r0, _0803EAB4 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - movs r2, #0x12 - bl sub_0804A044 - adds r2, r0, #0 - cmp r2, #0xff - beq _0803EAB8 - adds r1, r4, #0 - adds r1, #0x7a - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803EAAE - movs r0, #5 - strb r0, [r4, #0xc] - strb r2, [r4, #0x15] - adds r0, r4, #0 - movs r1, #0 - bl sub_0803E94C -_0803EAAE: - movs r0, #1 - b _0803EACE - .align 2, 0 -_0803EAB4: .4byte gUnk_020000B0 -_0803EAB8: - adds r0, r4, #0 - movs r1, #0x38 - bl sub_0803EAD0 - cmp r0, #0 - bne _0803EAAE -_0803EAC4: - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #4 - strb r0, [r1] - movs r0, #0 -_0803EACE: - pop {r4, pc} - - thumb_func_start sub_0803EAD0 -sub_0803EAD0: @ 0x0803EAD0 - push {r4, lr} - adds r3, r1, #0 - ldr r1, _0803EAE8 @ =gUnk_020000B0 - ldr r2, [r1] - movs r4, #0x2e - ldrsh r1, [r2, r4] - movs r4, #0x32 - ldrsh r2, [r2, r4] - subs r2, #4 - bl EntityWithinDistance - pop {r4, pc} - .align 2, 0 -_0803EAE8: .4byte gUnk_020000B0 diff --git a/assets/assets.json b/assets/assets.json index f373e164..76ffe1f1 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -27771,11 +27771,6 @@ "size": 13, "type": "animation" }, - { - "path": "ballChainSoldier/gUnk_080D0724.bin", - "start": 853796, - "size": 4 - }, { "path": "ballChainSoldier/gUnk_080D0728.bin", "start": 853800, diff --git a/data/const/enemy/ballChainSoldier.s b/data/const/enemy/ballChainSoldier.s index 69e8693f..e5f1597a 100644 --- a/data/const/enemy/ballChainSoldier.s +++ b/data/const/enemy/ballChainSoldier.s @@ -4,36 +4,6 @@ .section .rodata .align 2 -gUnk_080D06E0:: @ 080D06E0 - .4byte sub_0803E538 - .4byte sub_0803E550 - .4byte sub_0803E560 - .4byte sub_0803E570 - .4byte sub_08001242 - .4byte nullsub_20 - -gUnk_080D06F8:: @ 080D06F8 - .4byte sub_0803E580 - .4byte sub_0803E5E8 - .4byte sub_0803E61C - .4byte sub_0803E66C - .4byte sub_0803E6B4 - .4byte sub_0803E6E0 - .4byte sub_0803E71C - .4byte sub_0803E75C - .4byte sub_0803E7B4 - .4byte sub_0803E7CC - .4byte sub_0803E818 - -gUnk_080D0724:: @ 080D0724 - .incbin "ballChainSoldier/gUnk_080D0724.bin" - -gUnk_080D0728:: @ 080D0728 - .incbin "ballChainSoldier/gUnk_080D0728.bin" - -gUnk_080D0730:: @ 080D0730 - .incbin "ballChainSoldier/gUnk_080D0730.bin" - gSpriteAnimations_BallChainSoldier_3:: @ 080D0738 .include "animations/gSpriteAnimations_BallChainSoldier_3.s" diff --git a/linker.ld b/linker.ld index 90d04c6d..b2f841c4 100644 --- a/linker.ld +++ b/linker.ld @@ -399,7 +399,7 @@ SECTIONS { src/enemy/torchTrap.o(.text); src/enemy/vaatiRebornEnemy.o(.text); src/enemy/vaatiProjectile.o(.text); - asm/enemy/ballChainSoldier.o(.text); + src/enemy/ballChainSoldier.o(.text); src/enemy/enemy4D.o(.text); asm/enemy/enemy4D.o(.text); asm/enemy/ghini.o(.text); @@ -1076,6 +1076,7 @@ SECTIONS { data/animations/enemy/vaatiRebornEnemy.o(.rodata); src/enemy/vaatiProjectile.o(.rodata); data/animations/enemy/vaatiProjectile.o(.rodata); + src/enemy/ballChainSoldier.o(.rodata); data/const/enemy/ballChainSoldier.o(.rodata); data/animations/enemy/ballChainSoldier.o(.rodata); data/const/enemy/enemy4D.o(.rodata); diff --git a/src/enemy/ballChainSoldier.c b/src/enemy/ballChainSoldier.c new file mode 100644 index 00000000..dad421f3 --- /dev/null +++ b/src/enemy/ballChainSoldier.c @@ -0,0 +1,342 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "enemy.h" +#include "functions.h" + +typedef struct { + Entity base; + u8 filler[0x10]; + u16 unk_78; + u8 unk_7a; + u8 unk_7b; + u8 unk_7c; + u8 unk_7d; + u8 unk_7e; + u8 unk_7f; +} BallChainSoldierEntity; + +extern Entity* gUnk_020000B0; + +void (*const gUnk_080D06E0[])(BallChainSoldierEntity*); +void (*const gUnk_080D06F8[])(BallChainSoldierEntity*); +const u8 gUnk_080D0724[]; +const u16 gUnk_080D0728[]; +const u16 gUnk_080D0730[]; + +extern u32 sub_0804A044(Entity*, Entity*, u32); +extern void sub_0803E86C(BallChainSoldierEntity*); +extern void sub_0803E9A4(BallChainSoldierEntity*); +extern bool32 sub_0803E9D4(BallChainSoldierEntity*); +extern void sub_0803E8CC(BallChainSoldierEntity*); +extern void sub_0803E92C(BallChainSoldierEntity*); +extern bool32 sub_0803EA64(BallChainSoldierEntity*); +extern void sub_0803E94C(BallChainSoldierEntity*, u32); +extern bool32 sub_0803EAD0(BallChainSoldierEntity*, u32); + +void BallChainSoldier(Entity* this) { + EnemyFunctionHandler(this, (EntityActionArray)gUnk_080D06E0); +} + +void sub_0803E538(BallChainSoldierEntity* this) { + gUnk_080D06F8[super->action](this); +} + +void sub_0803E550(BallChainSoldierEntity* this) { + sub_0804AA30(super, gUnk_080D06E0); +} + +void sub_0803E560(BallChainSoldierEntity* this) { + sub_08001324(super); + sub_0803E538(this); +} + +void BallChainSoldier_CreateDeathFx(BallChainSoldierEntity* this) { + CreateDeathFx(super, 0xff, 0x57); +} + +void nullsub_20(BallChainSoldierEntity* this) { +} + +void BallChainSoldier_Init(BallChainSoldierEntity* this) { + Entity* ent; + sub_0804A720(super); + ent = CreateProjectileWithParent(super, BALL_AND_CHAIN, 0); + if (ent == NULL) + return; + + ent->parent = super; + super->child = ent; + COLLISION_ON(super); + super->spriteSettings.draw = 1; + super->animationState = Random() & 3; + this->unk_7b = 0; + this->unk_7c = 0; + this->unk_7e = 0x20; + this->unk_7f = 0xfe; + InitAnimationForceUpdate(super, super->animationState << 2); + sub_0803E86C(this); +} + +void sub_0803E5E8(BallChainSoldierEntity* this) { + this->unk_7c -= 0xa; + sub_0803E9A4(this); + if (sub_0803E9D4(this) == 0) { + if (--this->unk_78 == 0) { + sub_0803E8CC(this); + } + } +} + +void sub_0803E61C(BallChainSoldierEntity* this) { + this->unk_7c -= 0xa; + sub_0803E9A4(this); + if (sub_0803E9D4(this) == 0) { + if (super->knockbackDuration == 0) { + if (ProcessMovement(super) == 0) { + sub_0803E86C(this); + return; + } + } + + if (--this->unk_78 == 0) { + sub_0803E92C(this); + } + } +} + +void sub_0803E66C(BallChainSoldierEntity* this) { + this->unk_7c -= 0x10; + sub_0803E9A4(this); + if (this->unk_7e <= 0x21) { + this->unk_7e++; + } + + if (!sub_08049FDC(super, 1) || sub_0803EA64(this) == 0) { + super->action = 4; + this->unk_7b = 0; + } +} + +void sub_0803E6B4(BallChainSoldierEntity* this) { + this->unk_7c -= 0xa; + sub_0803E9A4(this); + if (this->unk_7e > 0x20) { + this->unk_7e--; + } else { + sub_0803E86C(this); + } +} + +void sub_0803E6E0(BallChainSoldierEntity* this) { + this->unk_7c -= 0xc; + sub_0803E9A4(this); + this->unk_7e -= 4; + if ((s8)this->unk_7e <= 0) { + this->unk_7e = 0; + super->action = 6; + super->actionDelay = 0x1e; + InitAnimationForceUpdate(super, super->animationState + 0x20); + } +} + +void sub_0803E71C(BallChainSoldierEntity* this) { + if (--super->actionDelay == 0) { + super->action = 7; + super->actionDelay = 1; + this->unk_7c = gUnk_080D0724[super->animationState]; + this->unk_7b = 0; + this->unk_7f = 0xf6; + EnqueueSFX(SFX_15B); + } +} + +void sub_0803E75C(BallChainSoldierEntity* this) { + if ((super->frame & 0x80) == 0) { + UpdateAnimationSingleFrame(super); + } else { + if (--super->actionDelay == 0) { + super->actionDelay = 2; + this->unk_7f++; + } + + if (this->unk_7f) { + this->unk_7e += 5; + } else { + super->action = 8; + super->actionDelay = 0x1e; + InitScreenShake(8, 0); + } + } +} + +void sub_0803E7B4(BallChainSoldierEntity* this) { + if (--super->actionDelay == 0) { + super->action = 9; + } +} + +void sub_0803E7CC(BallChainSoldierEntity* this) { + this->unk_7e -= 2; + if (this->unk_7e <= 0xa) { + super->action = 0xa; + super->actionDelay = 0x5a; + super->direction = DirectionFromAnimationState(super->animationState); + this->unk_7c = 0; + this->unk_7f = 0xfe; + sub_0803E94C(this, 0x10); + } else if (this->unk_7e <= 0x12) { + COLLISION_OFF(super->child); + } +} + +void sub_0803E818(BallChainSoldierEntity* this) { + if (super->actionDelay) { + if (--super->actionDelay == 0) { + COLLISION_ON(super->child); + sub_0803E94C(this, 0); + } + } else { + this->unk_7c -= 0xa; + sub_0803E9A4(this); + if (++this->unk_7e > 0x1f) { + sub_0803E86C(this); + } + } +} + +void sub_0803E86C(BallChainSoldierEntity* this) { + if (sub_08049FDC(super, 1) && sub_0803EAD0(this, 0x50)) { + super->direction = DirectionRoundUp(GetFacingDirection(super, gUnk_020000B0)); + } + + super->action = 1; + this->unk_78 = gUnk_080D0728[Random() & 3]; + this->unk_7a = 4; + sub_0803E94C(this, 0); +} + +void sub_0803E8CC(BallChainSoldierEntity* this) { + u32 rand = Random(); + u32 temp; + u32 dir; + if (sub_08049FA0(super) == 0 && (rand & 3)) { + dir = sub_08049EE4(super) + 4; + temp = 0x18; + } else { + temp = 0x18; + dir = rand; + } + + super->direction = dir & temp; + super->action = 2; + this->unk_78 = gUnk_080D0730[(rand >> 0x10) & 3]; + this->unk_7a = 4; + sub_0803E94C(this, 0x10); +} + +void sub_0803E92C(BallChainSoldierEntity* this) { + if (Random() & 1) { + sub_0803E86C(this); + } else { + sub_0803E8CC(this); + } +} + +void sub_0803E94C(BallChainSoldierEntity* this, u32 arg2) { + s32 animationState = DirectionToAnimationState(super->direction); + if ((super->animIndex & 0x10) == arg2) { + u32 dir = super->direction & 7; + s32 currentAnimationState = super->animationState; + if (dir == 4) { + if (((currentAnimationState - (super->direction >> 3)) & 3) <= 1) + return; + } + if (animationState == currentAnimationState) + return; + } + + super->animationState = animationState; + animationState = arg2 + (super->animIndex & 3) + animationState * 4; + InitAnimationForceUpdate(super, animationState); +} + +void sub_0803E9A4(BallChainSoldierEntity* this) { + s32 val = ((this->unk_7c + 0x20) & 0xff) >> 6; + if ((super->animIndex & 3) == val) + return; + InitAnimationForceUpdate(super, val + (super->animIndex & -4)); +} + +bool32 sub_0803E9D4(BallChainSoldierEntity* this) { + u32 dir; + if (sub_08049FDC(super, 1)) { + if (sub_0803EAD0(this, 0x38)) { + super->action = 3; + super->direction = DirectionRoundUp(GetFacingDirection(super, gUnk_020000B0)); + this->unk_7b = 1; + sub_0803E94C(this, 0); + return 1; + } else if (sub_0803EAD0(this, 0x4e)) { + dir = sub_0804A044(super, gUnk_020000B0, 0x12); + if (dir != 0xff) { + if (--this->unk_7a != 0) + return 0; + super->action = 5; + super->direction = dir; + this->unk_7a = 4; + sub_0803E94C(this, 0); + return 1; + } + } + } + + this->unk_7a = 4; + return 0; +} + +bool32 sub_0803EA64(BallChainSoldierEntity* this) { + u32 dir; + if (sub_08049FDC(super, 1)) { + if (sub_0803EAD0(this, 0x4e)) { + dir = sub_0804A044(super, gUnk_020000B0, 0x12); + if (dir != 0xff) { + if (--this->unk_7a != 0) + return 1; + super->action = 5; + super->direction = dir; + sub_0803E94C(this, 0); + return 1; + } + } + + if (sub_0803EAD0(this, 0x38)) + return 1; + } + + this->unk_7a = 4; + return 0; +} + +bool32 sub_0803EAD0(BallChainSoldierEntity* this, u32 distance) { + return EntityWithinDistance(super, gUnk_020000B0->x.HALF.HI, gUnk_020000B0->y.HALF.HI - 4, distance); +} + +void (*const gUnk_080D06E0[])(BallChainSoldierEntity*) = { + sub_0803E538, + sub_0803E550, + sub_0803E560, + BallChainSoldier_CreateDeathFx, + (void (*const)(BallChainSoldierEntity*))sub_08001242, + nullsub_20, +}; + +void (*const gUnk_080D06F8[])(BallChainSoldierEntity*) = { + BallChainSoldier_Init, sub_0803E5E8, sub_0803E61C, sub_0803E66C, sub_0803E6B4, sub_0803E6E0, + sub_0803E71C, sub_0803E75C, sub_0803E7B4, sub_0803E7CC, sub_0803E818, +}; + +const u8 gUnk_080D0724[] = { 0, 0x44, 0x80, 0xBC }; + +const u16 gUnk_080D0728[] = { 0x1E, 0x32, 0x46, 0x5A }; + +const u16 gUnk_080D0730[] = { 0x3C, 0x5A, 0x78, 0x96 };