diff --git a/asm/enemy/ghini.s b/asm/enemy/ghini.s deleted file mode 100644 index 5ffffb3e..00000000 --- a/asm/enemy/ghini.s +++ /dev/null @@ -1,1010 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Ghini -Ghini: @ 0x0803EFDC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0803F004 @ =gUnk_080D0924 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r5 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, r5, pc} - .align 2, 0 -_0803F004: .4byte gUnk_080D0924 - - thumb_func_start sub_0803F008 -sub_0803F008: @ 0x0803F008 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0803F024 @ =gUnk_080D093C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0803F694 - pop {r4, pc} - .align 2, 0 -_0803F024: .4byte gUnk_080D093C - - thumb_func_start sub_0803F028 -sub_0803F028: @ 0x0803F028 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - subs r0, #8 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bhi _0803F05C - movs r0, #0xff - strb r0, [r4, #0x14] - adds r0, r4, #0 - adds r0, #0x3e - ldrb r1, [r0] - lsrs r1, r1, #4 - movs r0, #1 - eors r1, r0 - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0803F630 - adds r0, r4, #0 - bl sub_0803F6EC -_0803F05C: - adds r0, r4, #0 - adds r0, #0x3f - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x41 - cmp r0, #0x25 - bne _0803F07E - ldrb r0, [r1] - cmp r0, #0x80 - bne _0803F07E - movs r0, #8 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - b _0803F0E4 -_0803F07E: - ldrb r0, [r1] - cmp r0, #0x9d - bne _0803F08A - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r4, #0x20] -_0803F08A: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0803F0B0 - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - lsrs r0, r0, #4 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r1, #7 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0803F0B0: - adds r0, r4, #0 - adds r0, #0x45 - adds r1, r4, #0 - adds r1, #0x7a - ldrb r0, [r0] - ldrb r2, [r1] - cmp r0, r2 - beq _0803F0E4 - strb r0, [r1] - ldrb r0, [r4, #0xc] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bhi _0803F0D4 - adds r0, r4, #0 - bl sub_0803F51C -_0803F0D4: - adds r0, r4, #0 - adds r0, #0x3e - ldrb r1, [r0] - lsrs r1, r1, #4 - adds r1, #7 - adds r0, r4, #0 - bl InitializeAnimation -_0803F0E4: - ldr r1, _0803F0F0 @ =gUnk_080D0924 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, pc} - .align 2, 0 -_0803F0F0: .4byte gUnk_080D0924 - - thumb_func_start sub_0803F0F4 -sub_0803F0F4: @ 0x0803F0F4 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_08001328 - adds r0, r4, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - bne _0803F144 - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _0803F144 - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - bne _0803F144 - movs r0, #0xff - strb r0, [r4, #0x14] - adds r1, r4, #0 - adds r1, #0x58 - ldrb r0, [r1] - subs r0, #7 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bhi _0803F144 - ldrb r1, [r1] - subs r1, #7 - movs r0, #1 - eors r1, r0 - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation -_0803F144: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803F148 -sub_0803F148: @ 0x0803F148 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x58 - ldrb r0, [r0] - subs r0, #7 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bls _0803F164 - ldrb r1, [r4, #0x14] - adds r1, #7 - adds r0, r4, #0 - bl InitializeAnimation -_0803F164: - adds r0, r4, #0 - bl sub_08001242 - ldrh r1, [r4, #0x36] - movs r2, #0x36 - ldrsh r0, [r4, r2] - cmp r0, #0 - bne _0803F178 - ldr r0, _0803F1A4 @ =0x0000FFFF - strh r0, [r4, #0x36] -_0803F178: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - bne _0803F1A0 - ldrb r0, [r4, #0x14] - movs r1, #1 - eors r1, r0 - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation - movs r0, #0xff - strb r0, [r4, #0x15] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_0803F630 -_0803F1A0: - pop {r4, pc} - .align 2, 0 -_0803F1A4: .4byte 0x0000FFFF - - thumb_func_start sub_0803F1A8 -sub_0803F1A8: @ 0x0803F1A8 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - beq _0803F1CC - ldr r0, _0803F1C8 @ =gUnk_080D0964 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0803F1DE - .align 2, 0 -_0803F1C8: .4byte gUnk_080D0964 -_0803F1CC: - adds r0, r4, #0 - bl sub_0803F51C - ldrb r1, [r4, #0x15] - lsrs r1, r1, #4 - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation -_0803F1DE: - pop {r4, pc} - - thumb_func_start sub_0803F1E0 -sub_0803F1E0: @ 0x0803F1E0 - push {lr} - movs r1, #1 - strb r1, [r0, #0xd] - movs r1, #0x3c - strb r1, [r0, #0x1d] - ldr r1, _0803F1F8 @ =gPlayerEntity - ldrb r1, [r1, #0x14] - lsrs r1, r1, #2 - adds r1, #5 - bl InitializeAnimation - pop {pc} - .align 2, 0 -_0803F1F8: .4byte gPlayerEntity - - thumb_func_start sub_0803F1FC -sub_0803F1FC: @ 0x0803F1FC - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0806F4E8 - pop {r4, pc} - - thumb_func_start sub_0803F20C -sub_0803F20C: @ 0x0803F20C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _0803F244 - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - cmp r0, #0 - beq _0803F23E - adds r2, r0, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] -_0803F23E: - adds r0, r4, #0 - bl sub_0804A7D4 -_0803F244: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803F248 -sub_0803F248: @ 0x0803F248 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - bl Random - movs r2, #0x1e - adds r1, r0, #0 - ands r1, r2 - movs r2, #0 - strb r1, [r4, #0x15] - movs r1, #0xff - strb r1, [r4, #0x14] - movs r1, #1 - strb r1, [r4, #0x1c] - adds r1, r4, #0 - adds r1, #0x45 - ldrb r1, [r1] - adds r3, r4, #0 - adds r3, #0x7a - strb r1, [r3] - lsrs r0, r0, #4 - adds r1, r4, #0 - adds r1, #0x7b - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x7c - strh r2, [r0] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0803F28E - adds r0, r4, #0 - bl sub_0803F50C - b _0803F2A0 -_0803F28E: - adds r0, r4, #0 - bl sub_0803F51C - ldrb r1, [r4, #0x15] - lsrs r1, r1, #4 - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation -_0803F2A0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803F2A4 -sub_0803F2A4: @ 0x0803F2A4 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803F5A8 - cmp r0, #0 - beq _0803F2C0 - movs r0, #2 - strb r0, [r4, #0xc] - bl Random - movs r1, #0x60 - ands r0, r1 - adds r0, #0xa - strb r0, [r4, #0xe] -_0803F2C0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803F2C4 -sub_0803F2C4: @ 0x0803F2C4 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803F5A8 - cmp r0, #0 - bne _0803F2D8 - adds r0, r4, #0 - bl sub_0803F50C - b _0803F322 -_0803F2D8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803F322 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - movs r0, #1 - bl sub_08049DF4 - cmp r0, #0 - beq _0803F308 - ldr r0, _0803F304 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - b _0803F310 - .align 2, 0 -_0803F304: .4byte gUnk_020000B0 -_0803F308: - bl Random - movs r1, #0x1f - ands r0, r1 -_0803F310: - strb r0, [r4, #0x15] - ldrb r0, [r4, #0x15] - lsrs r0, r0, #4 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation -_0803F322: - pop {r4, pc} - - thumb_func_start sub_0803F324 -sub_0803F324: @ 0x0803F324 - 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 _0803F33E - adds r0, r4, #0 - bl sub_0803F51C -_0803F33E: - pop {r4, pc} - - thumb_func_start sub_0803F340 -sub_0803F340: @ 0x0803F340 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803F5D4 - cmp r0, #0 - bne _0803F36A - adds r0, r4, #0 - bl sub_0803F58C - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803F36A - adds r0, r4, #0 - bl sub_0803F51C -_0803F36A: - pop {r4, pc} - - thumb_func_start sub_0803F36C -sub_0803F36C: @ 0x0803F36C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - strb r0, [r4, #0x15] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _0803F3A6 - adds r0, r4, #0 - bl sub_0803F66C - adds r1, r4, #0 - adds r1, #0x78 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803F3AC - movs r0, #6 - strb r0, [r4, #0xc] - adds r0, #0xfa - strh r0, [r4, #0x24] - b _0803F3AC -_0803F3A6: - adds r0, r4, #0 - bl sub_0803F51C -_0803F3AC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803F3B0 -sub_0803F3B0: @ 0x0803F3B0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803F5A8 - cmp r0, #0 - bne _0803F3C4 - adds r0, r4, #0 - bl sub_0803F51C - b _0803F41C -_0803F3C4: - movs r0, #1 - bl sub_08049DF4 - cmp r0, #0 - beq _0803F414 - ldrb r1, [r4, #0xe] - adds r1, #1 - strb r1, [r4, #0xe] - ldr r2, _0803F40C @ =gUnk_080D0970 - lsls r0, r1, #0x18 - lsrs r0, r0, #0x1e - adds r0, r0, r2 - ldrb r0, [r0] - ands r1, r0 - cmp r1, #0 - bne _0803F3F6 - ldr r0, _0803F410 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 -_0803F3F6: - adds r0, r4, #0 - bl sub_0803F66C - adds r0, r4, #0 - bl sub_080AEFB4 - adds r0, r4, #0 - bl GetNextFrame - b _0803F41C - .align 2, 0 -_0803F40C: .4byte gUnk_080D0970 -_0803F410: .4byte gUnk_020000B0 -_0803F414: - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] -_0803F41C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803F420 -sub_0803F420: @ 0x0803F420 - 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 _0803F43A - adds r0, r4, #0 - bl sub_0803F51C -_0803F43A: - pop {r4, pc} - - thumb_func_start sub_0803F43C -sub_0803F43C: @ 0x0803F43C - push {r4, lr} - adds r4, r0, #0 - bl sub_0803F738 - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803F474 - movs r2, #0 - movs r0, #9 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x78 - strh r2, [r0] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation -_0803F474: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803F478 -sub_0803F478: @ 0x0803F478 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0803F494 - adds r0, r4, #0 - bl sub_0803F6C0 -_0803F494: - bl sub_0807953C - adds r1, r4, #0 - adds r1, #0x78 - cmp r0, #0 - beq _0803F4A6 - ldrh r0, [r1] - adds r0, #0xc - strh r0, [r1] -_0803F4A6: - ldr r2, _0803F500 @ =gPlayerEntity - adds r0, r2, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0803F4B6 - movs r0, #0xe0 - strh r0, [r1] -_0803F4B6: - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0xdf - bls _0803F504 - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0x78 - strh r0, [r1] - movs r0, #0xff - strb r0, [r4, #0x14] - subs r1, #0x3f - movs r0, #0xf4 - strb r0, [r1] - adds r1, #5 - movs r0, #0x14 - strb r0, [r1] - adds r1, #4 - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r1] - ldrb r0, [r2, #0x14] - lsls r0, r0, #2 - movs r1, #0x10 - eors r0, r1 - adds r1, r4, #0 - adds r1, #0x3e - strb r0, [r1] - adds r0, r4, #0 - bl sub_0803F51C - adds r0, r4, #0 - bl sub_0803F6EC - b _0803F50A - .align 2, 0 -_0803F500: .4byte gPlayerEntity -_0803F504: - adds r0, r4, #0 - bl sub_0803F738 -_0803F50A: - pop {r4, pc} - - thumb_func_start sub_0803F50C -sub_0803F50C: @ 0x0803F50C - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - movs r1, #9 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803F51C -sub_0803F51C: @ 0x0803F51C - push {lr} - movs r1, #4 - strb r1, [r0, #0xc] - bl sub_0803F528 - pop {pc} - - thumb_func_start sub_0803F528 -sub_0803F528: @ 0x0803F528 - push {r4, r5, lr} - adds r4, r0, #0 - bl Random - adds r5, r0, #0 - movs r0, #8 - adds r1, r5, #0 - ands r1, r0 - adds r1, #8 - strb r1, [r4, #0xe] - adds r0, r4, #0 - bl sub_08049FA0 - cmp r0, #0 - beq _0803F55C - ldr r1, _0803F558 @ =gUnk_080D0978 - movs r0, #7 - ands r0, r5 - adds r0, r0, r1 - ldrb r0, [r0] - ldrb r1, [r4, #0x15] - adds r0, r0, r1 - b _0803F562 - .align 2, 0 -_0803F558: .4byte gUnk_080D0978 -_0803F55C: - adds r0, r4, #0 - bl sub_08049EE4 -_0803F562: - movs r1, #0x1e - ands r0, r1 - strb r0, [r4, #0x15] - ldr r2, _0803F588 @ =gUnk_080D0974 - lsrs r0, r5, #4 - movs r1, #3 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - strh r0, [r4, #0x24] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x24 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0803F66C - pop {r4, r5, pc} - .align 2, 0 -_0803F588: .4byte gUnk_080D0974 - - thumb_func_start sub_0803F58C -sub_0803F58C: @ 0x0803F58C - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, [r5, #0x30] - bl sub_080AEFB4 - ldr r1, [r5, #0x30] - subs r4, r1, r4 - lsrs r0, r4, #0x1f - adds r4, r4, r0 - asrs r4, r4, #1 - subs r1, r1, r4 - str r1, [r5, #0x30] - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803F5A8 -sub_0803F5A8: @ 0x0803F5A8 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - bne _0803F5BA - movs r0, #0 - b _0803F5D2 -_0803F5BA: - ldr r0, _0803F5CC @ =gArea - movs r1, #0xa - ldrsh r0, [r0, r1] - cmp r0, #0xf - bgt _0803F5D0 - adds r0, r4, #0 - bl sub_0806FD54 - b _0803F5D2 - .align 2, 0 -_0803F5CC: .4byte gArea -_0803F5D0: - movs r0, #1 -_0803F5D2: - pop {r4, pc} - - thumb_func_start sub_0803F5D4 -sub_0803F5D4: @ 0x0803F5D4 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - ldrh r0, [r1] - cmp r0, #0 - beq _0803F5E8 - subs r0, #1 - strh r0, [r1] - b _0803F62C -_0803F5E8: - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0803F62C - adds r0, r4, #0 - bl sub_0806FD54 - cmp r0, #0 - bne _0803F61A - ldr r0, _0803F624 @ =gArea - movs r1, #0xa - ldrsh r0, [r0, r1] - cmp r0, #0xf - ble _0803F62C - ldr r0, _0803F628 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - movs r2, #0x70 - movs r3, #0x48 - bl EntityInRectRadius - cmp r0, #0 - beq _0803F62C -_0803F61A: - adds r0, r4, #0 - bl sub_0803F630 - movs r0, #1 - b _0803F62E - .align 2, 0 -_0803F624: .4byte gArea -_0803F628: .4byte gUnk_020000B0 -_0803F62C: - movs r0, #0 -_0803F62E: - pop {r4, pc} - - thumb_func_start sub_0803F630 -sub_0803F630: @ 0x0803F630 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #5 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x25 - strb r0, [r1] - movs r5, #0 - ldr r0, _0803F664 @ =gPlayerClones - ldr r0, [r0] - cmp r0, #0 - beq _0803F64C - movs r5, #0x3c -_0803F64C: - bl Random - ldr r2, _0803F668 @ =gUnk_080D0980 - movs r1, #3 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] - adds r0, r0, r5 - adds r1, r4, #0 - adds r1, #0x78 - strh r0, [r1] - pop {r4, r5, pc} - .align 2, 0 -_0803F664: .4byte gPlayerClones -_0803F668: .4byte gUnk_080D0980 - - thumb_func_start sub_0803F66C -sub_0803F66C: @ 0x0803F66C - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x15] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - bne _0803F680 - ldrb r0, [r2, #0x14] - cmp r0, #0xff - bne _0803F692 -_0803F680: - lsrs r0, r1, #4 - ldrb r1, [r2, #0x14] - cmp r0, r1 - beq _0803F692 - strb r0, [r2, #0x14] - adds r1, r0, #1 - adds r0, r2, #0 - bl InitializeAnimation -_0803F692: - pop {pc} - - thumb_func_start sub_0803F694 -sub_0803F694: @ 0x0803F694 - push {r4, lr} - ldr r3, _0803F6BC @ =gUnk_080D0984 - movs r1, #0x7b - adds r1, r1, r0 - mov ip, r1 - ldrb r1, [r1] - adds r2, r1, #1 - mov r4, ip - strb r2, [r4] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x1b - movs r2, #3 - ands r1, r2 - adds r1, r1, r3 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - strh r1, [r0, #0x36] - pop {r4, pc} - .align 2, 0 -_0803F6BC: .4byte gUnk_080D0984 - - thumb_func_start sub_0803F6C0 -sub_0803F6C0: @ 0x0803F6C0 - push {r4, lr} - adds r0, #0x5a - ldrb r2, [r0] - movs r1, #0xfe - ands r1, r2 - strb r1, [r0] - ldr r4, _0803F6E8 @ =gPlayerEntity - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0xc - strb r0, [r1] - subs r0, #0x10 - bl ModHealth - adds r0, r4, #0 - movs r1, #0x7a - bl SoundReqClipped - pop {r4, pc} - .align 2, 0 -_0803F6E8: .4byte gPlayerEntity - - thumb_func_start sub_0803F6EC -sub_0803F6EC: @ 0x0803F6EC - push {lr} - ldr r2, _0803F72C @ =gPlayerEntity - adds r0, r2, #0 - adds r0, #0x45 - ldrb r0, [r0] - ldr r3, _0803F730 @ =gPlayerState - cmp r0, #0 - beq _0803F720 - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r2, #0x20] - ldr r0, _0803F734 @ =0x0000FFFE - strh r0, [r2, #0x36] - ldrb r0, [r2, #0x14] - lsls r0, r0, #2 - strb r0, [r2, #0x15] - adds r1, r2, #0 - adds r1, #0x3d - movs r0, #0xc4 - strb r0, [r1] - movs r0, #0x41 - strb r0, [r3, #2] -_0803F720: - ldr r0, [r3, #0x30] - movs r1, #0x11 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r3, #0x30] - pop {pc} - .align 2, 0 -_0803F72C: .4byte gPlayerEntity -_0803F730: .4byte gPlayerState -_0803F734: .4byte 0x0000FFFE - - thumb_func_start sub_0803F738 -sub_0803F738: @ 0x0803F738 - push {r4, lr} - adds r4, r0, #0 - bl ResetPlayer - ldr r2, _0803F768 @ =gPlayerState - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r1, r0 - strb r1, [r2, #0x1a] - ldrb r1, [r2, #0xa] - orrs r0, r1 - strb r0, [r2, #0xa] - ldr r0, _0803F76C @ =gPlayerEntity - adds r1, r4, #0 - movs r2, #0 - movs r3, #1 - bl sub_0806FA90 - adds r4, #0x63 - ldrb r0, [r4] - subs r0, #2 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 -_0803F768: .4byte gPlayerState -_0803F76C: .4byte gPlayerEntity diff --git a/asm/non_matching/sittingPerson/SittingPerson_Head.inc b/asm/non_matching/sittingPerson/SittingPerson_Head.inc deleted file mode 100644 index 5e2a7ef9..00000000 --- a/asm/non_matching/sittingPerson/SittingPerson_Head.inc +++ /dev/null @@ -1,42 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r5, [r4, #0xa] - lsls r5, r5, #2 - ldr r0, _080639C8 @ =gUnk_0810CBC0 - adds r5, r5, r0 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #0xf - ands r2, r0 - ldrb r0, [r5] - adds r2, r2, r0 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldr r2, _080639CC @ =gUnk_0810CD88 - ldrb r1, [r4, #0x1e] - movs r0, #3 - ands r0, r1 - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r0, r0, r1 - adds r0, r0, r2 - ldrb r2, [r0] - ldrb r0, [r5, #1] - adds r2, r2, r0 - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, r5, pc} - .align 2, 0 -_080639C8: .4byte gUnk_0810CBC0 -_080639CC: .4byte gUnk_0810CD88 - .syntax divided diff --git a/assets/assets.json b/assets/assets.json index 706dcd76..a6ea87fd 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -27586,31 +27586,6 @@ "size": 5, "type": "animation" }, - { - "path": "ghini/gUnk_080D0970.bin", - "start": 854384, - "size": 4 - }, - { - "path": "ghini/gUnk_080D0974.bin", - "start": 854388, - "size": 4 - }, - { - "path": "ghini/gUnk_080D0978.bin", - "start": 854392, - "size": 8 - }, - { - "path": "ghini/gUnk_080D0980.bin", - "start": 854400, - "size": 4 - }, - { - "path": "ghini/gUnk_080D0984.bin", - "start": 854404, - "size": 4 - }, { "path": "animations/gSpriteAnimations_VaatiTransfigured_0_0.bin", "start": 854948, diff --git a/data/const/enemy/ghini.s b/data/const/enemy/ghini.s deleted file mode 100644 index 484c52f0..00000000 --- a/data/const/enemy/ghini.s +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D0924:: @ 080D0924 - .4byte sub_0803F008 - .4byte sub_0803F028 - .4byte sub_0803F0F4 - .4byte sub_0804A7D4 - .4byte sub_0803F148 - .4byte sub_0803F1A8 - -gUnk_080D093C:: @ 080D093C - .4byte sub_0803F248 - .4byte sub_0803F2A4 - .4byte sub_0803F2C4 - .4byte sub_0803F324 - .4byte sub_0803F340 - .4byte sub_0803F36C - .4byte sub_0803F3B0 - .4byte sub_0803F420 - .4byte sub_0803F43C - .4byte sub_0803F478 - -gUnk_080D0964:: @ 080D0964 - .4byte sub_0803F1E0 - .4byte sub_0803F1FC - .4byte sub_0803F20C - -gUnk_080D0970:: @ 080D0970 - .incbin "ghini/gUnk_080D0970.bin" - -gUnk_080D0974:: @ 080D0974 - .incbin "ghini/gUnk_080D0974.bin" - -gUnk_080D0978:: @ 080D0978 - .incbin "ghini/gUnk_080D0978.bin" - -gUnk_080D0980:: @ 080D0980 - .incbin "ghini/gUnk_080D0980.bin" - -gUnk_080D0984:: @ 080D0984 - .incbin "ghini/gUnk_080D0984.bin" diff --git a/include/coord.h b/include/coord.h index 5ead1236..116e646c 100644 --- a/include/coord.h +++ b/include/coord.h @@ -18,6 +18,7 @@ void SortEntityBelow(Entity*, Entity*); u32 sub_0806F5A4(u32 idx); u32 sub_0806F3E4(Entity*); void LinearMoveUpdate(Entity*); +bool32 sub_0806FD54(Entity*); extern const s16 gSineTable[64]; extern const s16 gCosineTable[256]; diff --git a/include/enemy.h b/include/enemy.h index 4bbecfec..539337b4 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -211,7 +211,7 @@ void VaatiRebornEnemy(Entity*); void VaatiProjectile(Entity*); void BallChainSoldier(Entity*); void Enemy4D(Entity*); -void Ghini(Entity*); +void Ghini(); void VaatiTransfigured(Entity*); void Enemy50(Entity*); void VaatiWrath(Entity*); diff --git a/linker.ld b/linker.ld index d1126618..8eb1e373 100644 --- a/linker.ld +++ b/linker.ld @@ -404,7 +404,7 @@ SECTIONS { src/enemy/ballChainSoldier.o(.text); src/enemy/enemy4D.o(.text); asm/enemy/enemy4D.o(.text); - asm/enemy/ghini.o(.text); + src/enemy/ghini.o(.text); src/enemy/vaatiTransfigured.o(.text); asm/enemy/enemy50.o(.text); src/enemy/vaatiWrath.o(.text); @@ -1081,7 +1081,7 @@ SECTIONS { data/const/enemy/ballChainSoldier.o(.rodata); data/animations/enemy/ballChainSoldier.o(.rodata); data/const/enemy/enemy4D.o(.rodata); - data/const/enemy/ghini.o(.rodata); + src/enemy/ghini.o(.rodata); data/animations/enemy/ghini.o(.rodata); src/enemy/vaatiTransfigured.o(.rodata); data/animations/enemy/vaatiTransfigured.o(.rodata); diff --git a/src/enemy/ghini.c b/src/enemy/ghini.c new file mode 100644 index 00000000..371c4917 --- /dev/null +++ b/src/enemy/ghini.c @@ -0,0 +1,438 @@ +/** + * @file ghini.c + * @ingroup Enemies + * + * @brief Ghini enemy + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "enemy.h" +#include "functions.h" +#include "area.h" +#include "coord.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[0x10]; + /*0x78*/ u16 unk_78; + /*0x7a*/ u8 unk_7a; + /*0x7b*/ u8 unk_7b; + /*0x7c*/ u16 unk_7c; +} GhiniEntity; + +extern Entity* gUnk_020000B0; + +extern void (*const Ghini_Functions[])(GhiniEntity*); +extern void (*const Ghini_Actions[])(GhiniEntity*); +extern void (*const Ghini_SubActions[])(GhiniEntity*); +extern const u8 gUnk_080D0970[]; +extern const u8 gUnk_080D0974[]; +extern const u8 gUnk_080D0978[]; +extern const u8 gUnk_080D0980[]; +extern const u8 gUnk_080D0984[]; + +void sub_0803F694(GhiniEntity*); +void sub_0803F630(GhiniEntity*); +void sub_0803F6EC(GhiniEntity*); +void sub_0803F51C(GhiniEntity*); +void sub_0803F50C(GhiniEntity*); +bool32 sub_0803F5A8(GhiniEntity*); +bool32 sub_0803F5D4(GhiniEntity*); +void sub_0803F58C(GhiniEntity*); +void sub_0803F66C(GhiniEntity*); +void sub_0803F738(GhiniEntity*); +void sub_0803F6C0(GhiniEntity*); +void sub_0803F528(GhiniEntity*); + +void Ghini(GhiniEntity* this) { + Ghini_Functions[GetNextFunction(super)](this); + SetChildOffset(super, 0, 1, -0x10); +} + +void Ghini_OnTick(GhiniEntity* this) { + Ghini_Actions[super->action](this); + sub_0803F694(this); +} + +void sub_0803F028(GhiniEntity* this) { + if (super->action == 8 || super->action == 9) { + super->animationState = 0xff; + InitializeAnimation(super, (super->knockbackDirection >> 4 ^ 1) + 1); + sub_0803F630(this); + sub_0803F6EC(this); + } + if ((super->hitType == 0x25) && (super->bitfield == 0x80)) { + super->action = 8; + InitializeAnimation(super, 3); + } else { + if (super->bitfield == 0x9d) { + super->zVelocity = 0x18000; + } + if (super->field_0x43 != 0) { + super->animationState = super->knockbackDirection >> 4; + InitializeAnimation(super, super->animationState + 7); + sub_0804A9FC(super, 0x1c); + } + if (super->health != this->unk_7a) { + this->unk_7a = super->health; + if (super->action == 1 || super->action == 2) { + sub_0803F51C(this); + } + InitializeAnimation(super, (super->knockbackDirection >> 4) + 7); + } + } + sub_0804AA30(super, Ghini_Functions); +} + +void sub_0803F0F4(GhiniEntity* this) { + GetNextFrame(super); + sub_08001328(super); + if (((super->knockbackDuration == 0) && (super->health != 0)) && (super->field_0x43 == 0)) { + super->animationState = 0xff; + if (super->animIndex == 7 || super->animIndex == 8) { + InitializeAnimation(super, ((super->animIndex - 7) ^ 1) + 1); + } + } +} + +void sub_0803F148(GhiniEntity* this) { + if (super->animIndex != 7 && super->animIndex != 8) { + InitializeAnimation(super, super->animationState + 7); + } + sub_08001242(super); + if (super->z.HALF.HI == 0) { + super->z.HALF.HI = 0xffff; + } + if (super->field_0x43 == 0) { + InitializeAnimation(super, (super->animationState ^ 1) + 1); + super->direction = 0xff; + super->animationState = 0xff; + sub_0803F630(this); + } +} + +void sub_0803F1A8(GhiniEntity* this) { + if (sub_0806F520()) { + Ghini_SubActions[super->subAction](this); + } else { + sub_0803F51C(this); + InitializeAnimation(super, (super->direction >> 4) + 1); + } +} + +void Ghini_SubAction0(GhiniEntity* this) { + super->subAction = 1; + super->field_0x1d = 0x3c; + InitializeAnimation(super, (gPlayerEntity.animationState >> 2) + 5); +} + +void Ghini_SubAction1(GhiniEntity* this) { + GetNextFrame(super); + sub_0806F4E8(super); +} + +void Ghini_SubAction2(GhiniEntity* this) { + GetNextFrame(super); + if (sub_0806F3E4(super)) { + Entity* effect = CreateFx(super, FX_DEATH, 0); + if (effect != NULL) { + effect->spritePriority.b0 = 3; + } + sub_0804A7D4(super); + } +} + +void Ghini_Init(GhiniEntity* this) { + u32 rand; + + sub_0804A720(super); + rand = Random(); + super->direction = rand & 0x1e; + super->animationState = 0xff; + super->field_0x1c = 1; + this->unk_7a = super->health; + this->unk_7b = (rand >> 4); + this->unk_7c = 0; + if (super->type != 0) { + sub_0803F50C(this); + } else { + sub_0803F51C(this); + InitializeAnimation(super, (super->direction >> 4) + 1); + } +} + +void Ghini_Action1(GhiniEntity* this) { + if (sub_0803F5A8(this)) { + super->action = 2; + super->actionDelay = (Random() & 0x60) + 10; + } +} + +void Ghini_Action2(GhiniEntity* this) { + if (sub_0803F5A8(this) == 0) { + sub_0803F50C(this); + } else { + if (--super->actionDelay == 0) { + super->action = 3; + super->actionDelay = 0x1e; + if (sub_08049DF4(1) != NULL) { + super->direction = GetFacingDirection(super, gUnk_020000B0); + } else { + super->direction = Random() & 0x1f; + } + super->animationState = super->direction >> 4; + InitializeAnimation(super, super->animationState + 1); + } + } +} + +void Ghini_Action3(GhiniEntity* this) { + GetNextFrame(super); + if (--super->actionDelay == 0) { + sub_0803F51C(this); + } +} + +void Ghini_Action4(GhiniEntity* this) { + if (sub_0803F5D4(this) == FALSE) { + sub_0803F58C(this); + GetNextFrame(super); + if (--super->actionDelay == 0) { + sub_0803F51C(this); + } + } +} + +void Ghini_Action5(GhiniEntity* this) { + GetNextFrame(super); + super->direction = sub_08049F84(super, 1); + if ((super->direction) != 0xff) { + sub_0803F66C(this); + if (--this->unk_78 == 0) { + super->action = 6; + super->speed = 0x100; + } + } else { + sub_0803F51C(this); + } +} + +void Ghini_Action6(GhiniEntity* this) { + u32 tmp; + + if (sub_0803F5A8(this) == 0) { + sub_0803F51C(this); + } else { + if (sub_08049DF4(1) != NULL) { + tmp = super->actionDelay + 1; + super->actionDelay = tmp; + if ((tmp & gUnk_080D0970[tmp * 0x1000000 >> 0x1e]) == 0) { + sub_08004596(super, GetFacingDirection(super, gUnk_020000B0)); + } + sub_0803F66C(this); + sub_080AEFB4(super); + GetNextFrame(super); + } else { + super->action = 7; + super->actionDelay = 0x1e; + } + } +} + +void Ghini_Action7(GhiniEntity* this) { + GetNextFrame(super); + if (--super->actionDelay == 0) { + sub_0803F51C(this); + } +} + +void Ghini_Action8(GhiniEntity* this) { + sub_0803F738(this); + GetNextFrame(super); + if ((super->frame & 0x80) != 0) { + super->action = 9; + super->flags |= 0x80; + this->unk_78 = 0; + InitializeAnimation(super, 4); + } +} + +void Ghini_Action9(GhiniEntity* this) { + GetNextFrame(super); + if ((super->frame & 1) != 0) { + sub_0803F6C0(this); + } + if (sub_0807953C() != 0) { + this->unk_78 += 0xc; + } + if (gPlayerEntity.health == 0) { + this->unk_78 = 0xe0; + } + if (++this->unk_78 >= 0xe0) { + this->unk_7c = 0x78; + super->animationState = 0xff; + super->iframes = -0xc; + super->knockbackDuration = 0x14; + super->field_0x46 = 0x180; + super->knockbackDirection = gPlayerEntity.animationState << 2 ^ 0x10; + sub_0803F51C(this); + sub_0803F6EC(this); + } else { + sub_0803F738(this); + } +} + +void sub_0803F50C(GhiniEntity* this) { + super->action = 1; + InitializeAnimation(super, 9); +} + +void sub_0803F51C(GhiniEntity* this) { + super->action = 4; + sub_0803F528(this); +} + +void sub_0803F528(GhiniEntity* this) { + u32 rand = Random(); + super->actionDelay = (rand & 8) + 8; + if (sub_08049FA0(super)) { + super->direction = (super->direction + gUnk_080D0978[rand & 7]) & 0x1e; + } else { + super->direction = sub_08049EE4(super) & 0x1e; + } + super->speed = gUnk_080D0974[rand >> 4 & 3]; + super->hitType = 0x24; + sub_0803F66C(this); +} + +void sub_0803F58C(GhiniEntity* this) { + s32 yAfter; + s32 yBefore; + + yBefore = super->y.WORD; + sub_080AEFB4(super); + yAfter = super->y.WORD; + super->y.WORD = yAfter - (yAfter - yBefore) / 2; +} + +bool32 sub_0803F5A8(GhiniEntity* this) { + u32 result; + if (sub_08049FDC(super, 1) == 0) { + result = 0; + } else if ((s16)gArea.unk_0a < 0x10) { + result = sub_0806FD54(super); + } else { + result = 1; + } + return result; +} + +bool32 sub_0803F5D4(GhiniEntity* this) { + if (this->unk_7c != 0) { + this->unk_7c--; + } else { + if ((sub_08049FDC(super, 1)) && + ((sub_0806FD54(super) || + ((0xf < (s16)gArea.unk_0a && (EntityInRectRadius(super, gUnk_020000B0, 0x70, 0x48))))))) { + sub_0803F630(this); + return TRUE; + } + } + return FALSE; +} + +void sub_0803F630(GhiniEntity* this) { + s16 tmp; + + super->action = 5; + super->hitType = 0x25; + tmp = 0; + if (gPlayerClones[0] != NULL) { + tmp = 0x3c; + } + this->unk_78 = gUnk_080D0980[Random() & 3] + tmp; +} + +void sub_0803F66C(GhiniEntity* this) { + u8 tmp; + + if (((super->direction & 0xf) != 0) || (super->animationState == 0xff)) { + if (super->direction >> 4 != super->animationState) { + tmp = super->direction >> 4; + super->animationState = tmp; + InitializeAnimation(super, tmp + 1); + } + } +} + +void sub_0803F694(GhiniEntity* this) { + super->z.HALF.HI = gUnk_080D0984[(((u32)this->unk_7b++ << 0x18) >> 0x1b) & 3] << 0x18 >> 0x18; +} + +void sub_0803F6C0(GhiniEntity* this) { + super->frame &= 0xfe; + gPlayerEntity.iframes = 0xc; + ModHealth(-4); + SoundReqClipped(&gPlayerEntity, SFX_PLY_VO6); +} + +void sub_0803F6EC(GhiniEntity* this) { + if (gPlayerEntity.health != 0) { + gPlayerEntity.flags |= 0x80; + gPlayerEntity.zVelocity = 0x18000; + gPlayerEntity.z.HALF.HI = 0xfffe; + gPlayerEntity.direction = gPlayerEntity.animationState << 2; + gPlayerEntity.iframes = -0x3c; + gPlayerState.jump_status = 0x41; + } + gPlayerState.flags &= 0xffffffef; +} + +void sub_0803F738(GhiniEntity* this) { + ResetPlayer(); + gPlayerState.mobility |= 0x80; + gPlayerState.field_0xa |= 0x80; + sub_0806FA90(&gPlayerEntity, super, 0, 1); + super->spriteOffsetY -= 2; +} + +void (*const Ghini_Functions[])(GhiniEntity*) = { + Ghini_OnTick, sub_0803F028, sub_0803F0F4, (void (*)(GhiniEntity*))sub_0804A7D4, sub_0803F148, sub_0803F1A8, +}; +void (*const Ghini_Actions[])(GhiniEntity*) = { + Ghini_Init, Ghini_Action1, Ghini_Action2, Ghini_Action3, Ghini_Action4, + Ghini_Action5, Ghini_Action6, Ghini_Action7, Ghini_Action8, Ghini_Action9, +}; +void (*const Ghini_SubActions[])(GhiniEntity*) = { + Ghini_SubAction0, + Ghini_SubAction1, + Ghini_SubAction2, +}; +const u8 gUnk_080D0970[] = { + 15, + 7, + 3, + 1, +}; +const u8 gUnk_080D0974[] = { + 224, + 192, + 160, + 128, +}; +const u8 gUnk_080D0978[] = { + 0, 254, 0, 2, 0, 252, 0, 4, +}; +const u8 gUnk_080D0980[] = { + 15, + 25, + 34, + 45, +}; +const u8 gUnk_080D0984[] = { + 255, + 254, + 253, + 254, +};