diff --git a/asm/helmasaur.s b/asm/helmasaur.s deleted file mode 100644 index e8a891ea..00000000 --- a/asm/helmasaur.s +++ /dev/null @@ -1,936 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Helmasaur -Helmasaur: @ 0x0802BB6C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0802BB94 - ldr r1, _0802BB90 @ =gUnk_080CD3E4 - adds r0, r4, #0 - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - b _0802BBA4 - .align 2, 0 -_0802BB90: .4byte gUnk_080CD3E4 -_0802BB94: - ldr r0, _0802BBA8 @ =gUnk_080CD3FC - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0802BBA4: - pop {r4, pc} - .align 2, 0 -_0802BBA8: .4byte gUnk_080CD3FC - - thumb_func_start sub_0802BBAC -sub_0802BBAC: @ 0x0802BBAC - push {lr} - ldr r2, _0802BBC0 @ =gUnk_080CD408 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802BBC0: .4byte gUnk_080CD408 - - thumb_func_start sub_0802BBC4 -sub_0802BBC4: @ 0x0802BBC4 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x19 - beq _0802BBFE - adds r0, r4, #0 - adds r0, #0x41 - ldrb r0, [r0] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0 - beq _0802BBEA - cmp r1, #0 - blt _0802BBFE - cmp r1, #3 - bgt _0802BBFE - cmp r1, #2 - blt _0802BBFE -_0802BBEA: - ldrb r0, [r4, #0xc] - cmp r0, #4 - bne _0802BBFE - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0802C218 -_0802BBFE: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0802BC10 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0802BC10: - ldr r1, _0802BC1C @ =gUnk_080CD3E4 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, pc} - .align 2, 0 -_0802BC1C: .4byte gUnk_080CD3E4 - - thumb_func_start sub_0802BC20 -sub_0802BC20: @ 0x0802BC20 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x19 - beq _0802BC4C - adds r0, r4, #0 - bl sub_0806F520 - cmp r0, #0 - beq _0802BC6C - ldr r0, _0802BC48 @ =gUnk_080CD42C - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0802BC6C - .align 2, 0 -_0802BC48: .4byte gUnk_080CD42C -_0802BC4C: - ldrb r0, [r4, #0xd] - cmp r0, #2 - bhi _0802BC5C - adds r0, r4, #0 - bl sub_0806F520 - cmp r0, #0 - beq _0802BC6C -_0802BC5C: - ldr r0, _0802BC70 @ =gUnk_080CD438 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0802BC6C: - pop {r4, pc} - .align 2, 0 -_0802BC70: .4byte gUnk_080CD438 - - thumb_func_start sub_0802BC74 -sub_0802BC74: @ 0x0802BC74 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802C1C0 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0x1d] - ldr r0, _0802BC9C @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - movs r1, #2 - eors r0, r1 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 -_0802BC9C: .4byte gPlayerEntity - - thumb_func_start sub_0802BCA0 -sub_0802BCA0: @ 0x0802BCA0 - push {lr} - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_0802BCA8 -sub_0802BCA8: @ 0x0802BCA8 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x3f - ldrb r0, [r1] - cmp r0, #0x19 - beq _0802BCFA - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x5a - strb r0, [r4, #0xe] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r4, #0x20] - movs r0, #0x19 - strb r0, [r1] - adds r2, r4, #0 - adds r2, #0x3a - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - movs r0, #0x12 - strb r0, [r4, #0x1c] - movs r0, #0x20 - movs r1, #1 - bl CreateEnemy - adds r1, r0, #0 - cmp r1, #0 - beq _0802BCF0 - ldrb r0, [r4, #0x14] - strb r0, [r1, #0x14] - adds r0, r4, #0 - bl CopyPosition -_0802BCF0: - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation -_0802BCFA: - pop {r4, pc} - - thumb_func_start sub_0802BCFC -sub_0802BCFC: @ 0x0802BCFC - movs r1, #1 - strb r1, [r0, #0xd] - movs r1, #0x3c - strb r1, [r0, #0x1d] - bx lr - .align 2, 0 - - thumb_func_start sub_0802BD08 -sub_0802BD08: @ 0x0802BD08 - push {lr} - bl sub_0806F3E4 - pop {pc} - - thumb_func_start sub_0802BD10 -sub_0802BD10: @ 0x0802BD10 - push {lr} - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - movs r1, #2 - bl UpdateAnimationVariableFrames - pop {pc} - .align 2, 0 - - thumb_func_start nullsub_145 -nullsub_145: @ 0x0802BD24 - bx lr - .align 2, 0 - - thumb_func_start sub_0802BD28 -sub_0802BD28: @ 0x0802BD28 - push {lr} - adds r2, r0, #0 - ldrb r3, [r2, #0x10] - movs r0, #0x80 - ands r0, r3 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0802BD4C - movs r0, #0x80 - orrs r0, r3 - strb r0, [r2, #0x10] - adds r2, #0x3a - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - b _0802BD52 -_0802BD4C: - adds r0, r2, #0 - adds r0, #0x45 - strb r1, [r0] -_0802BD52: - pop {pc} - - thumb_func_start sub_0802BD54 -sub_0802BD54: @ 0x0802BD54 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - movs r0, #1 - strb r0, [r4, #0xc] - bl Random - adds r1, r4, #0 - adds r1, #0x78 - strb r0, [r1] - movs r0, #0x3c - strb r0, [r4, #0x1d] - adds r1, #1 - movs r0, #0xff - strb r0, [r1] - bl Random - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - lsrs r0, r0, #3 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_0802BD8C -sub_0802BD8C: @ 0x0802BD8C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802BD9C - subs r0, #1 - strb r0, [r4, #0xe] - b _0802BDDE -_0802BD9C: - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0802BDCA - adds r0, r4, #0 - movs r1, #1 - movs r2, #0x10 - bl sub_0804A024 - adds r1, r0, #0 - cmp r1, #0xff - beq _0802BDCA - adds r0, r4, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r1, r0 - beq _0802BDCA - adds r0, r4, #0 - bl sub_0802C058 - b _0802BDDE -_0802BDCA: - adds r0, r4, #0 - bl sub_0802C020 - adds r1, r0, #0 - ldrb r0, [r4, #0x15] - cmp r1, r0 - beq _0802BDDE - adds r0, r4, #0 - bl sub_0802C058 -_0802BDDE: - pop {r4, pc} - - thumb_func_start sub_0802BDE0 -sub_0802BDE0: @ 0x0802BDE0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802C06C - cmp r0, #0 - beq _0802BDFE - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0xff - strb r0, [r1] - b _0802BE16 -_0802BDFE: - movs r0, #1 - strb r0, [r4, #0xc] - bl Random - movs r1, #0xf - ands r0, r1 - adds r0, #0xf - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x15] - adds r0, r4, #0 - adds r0, #0x79 - strb r1, [r0] -_0802BE16: - pop {r4, pc} - - thumb_func_start sub_0802BE18 -sub_0802BE18: @ 0x0802BE18 - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - bl UpdateAnimationVariableFrames - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802BE3E - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - b _0802BE44 -_0802BE3E: - adds r0, r4, #0 - bl sub_0802C18C -_0802BE44: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802BE48 -sub_0802BE48: @ 0x0802BE48 - push {r4, lr} - adds r4, r0, #0 - bl sub_080AEFE0 - cmp r0, #0 - bne _0802BE64 - adds r0, r4, #0 - bl sub_0802C218 - movs r0, #8 - movs r1, #0 - bl sub_08080964 - b _0802BE7E -_0802BE64: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0802C1CC - adds r0, r4, #0 - bl sub_0802C0E8 - cmp r0, #0 - beq _0802BE7E - movs r0, #5 - strb r0, [r4, #0xc] -_0802BE7E: - pop {r4, pc} - - thumb_func_start sub_0802BE80 -sub_0802BE80: @ 0x0802BE80 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x24] - subs r0, #0x20 - strh r0, [r4, #0x24] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xff - ble _0802BE98 - adds r0, r4, #0 - bl sub_0802C1CC -_0802BE98: - movs r1, #0x24 - ldrsh r0, [r4, r1] - cmp r0, #0 - ble _0802BEAE - adds r0, r4, #0 - bl sub_080AEFE0 - adds r0, r4, #0 - bl sub_0802C18C - b _0802BEBA -_0802BEAE: - adds r0, r4, #0 - bl sub_0802C1C0 - ldrb r0, [r4, #0xe] - adds r0, #0x1e - strb r0, [r4, #0xe] -_0802BEBA: - pop {r4, pc} - - thumb_func_start sub_0802BEBC -sub_0802BEBC: @ 0x0802BEBC - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0x15] - movs r4, #0x10 - eors r0, r4 - strb r0, [r5, #0x15] - adds r0, r5, #0 - bl sub_080AEFE0 - ldrb r0, [r5, #0x15] - eors r0, r4 - strb r0, [r5, #0x15] - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r5, #0 - bl sub_080044EC - cmp r0, #0 - bne _0802BEE8 - adds r0, r5, #0 - bl sub_0802C1C0 -_0802BEE8: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0802BEEC -sub_0802BEEC: @ 0x0802BEEC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802BF1E - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - ands r0, r1 - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - bne _0802BF3A - ldrb r0, [r4, #0x14] - movs r1, #2 - eors r0, r1 - strb r0, [r4, #0x14] - lsls r0, r0, #3 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation - b _0802BF3A -_0802BF1E: - movs r1, #0xe0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _0802BF3A - movs r0, #8 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - movs r0, #0x90 - lsls r0, r0, #1 - strh r0, [r4, #0x24] -_0802BF3A: - pop {r4, pc} - - thumb_func_start sub_0802BF3C -sub_0802BF3C: @ 0x0802BF3C - push {r4, lr} - adds r4, r0, #0 - bl ProcessMovement - 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 _0802BF76 - movs r0, #0x1e - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_0802C020 - strb r0, [r4, #0x15] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1b - ldrb r1, [r4, #0x14] - cmp r0, r1 - beq _0802BF76 - strb r0, [r4, #0x14] - adds r1, r0, #4 - adds r0, r4, #0 - bl InitializeAnimation -_0802BF76: - pop {r4, pc} - - thumb_func_start sub_0802BF78 -sub_0802BF78: @ 0x0802BF78 - push {lr} - movs r2, #1 - strb r2, [r0, #0xc] - adds r3, r0, #0 - adds r3, #0x3b - movs r1, #4 - strb r1, [r3] - strb r2, [r0, #0x1c] - ldrb r1, [r0, #0x14] - lsls r1, r1, #3 - strb r1, [r0, #0x15] - ldrb r1, [r0, #0x14] - adds r1, #8 - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0802BF98 -sub_0802BF98: @ 0x0802BF98 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - beq _0802BFBC - ldr r0, _0802BFB8 @ =gUnk_080CD450 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0802BFCC - .align 2, 0 -_0802BFB8: .4byte gUnk_080CD450 -_0802BFBC: - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] -_0802BFCC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802BFD0 -sub_0802BFD0: @ 0x0802BFD0 - movs r1, #2 - strb r1, [r0, #0xd] - bx lr - .align 2, 0 - - thumb_func_start sub_0802BFD8 -sub_0802BFD8: @ 0x0802BFD8 - push {lr} - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_0802BFE0 -sub_0802BFE0: @ 0x0802BFE0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _0802BFF2 - adds r0, r4, #0 - bl DeleteEntity -_0802BFF2: - pop {r4, pc} - - thumb_func_start sub_0802BFF4 -sub_0802BFF4: @ 0x0802BFF4 - push {lr} - adds r3, r0, #0 - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - movs r0, #1 - eors r1, r0 - subs r0, #5 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - ldrb r0, [r3, #0xe] - subs r0, #1 - strb r0, [r3, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802C01C - adds r0, r3, #0 - bl DeleteEntity -_0802C01C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0802C020 -sub_0802C020: @ 0x0802C020 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl Random - adds r4, r0, #0 - adds r0, r5, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _0802C03E - movs r6, #1 - adds r0, r4, #0 - ands r0, r6 - cmp r0, #0 - beq _0802C044 -_0802C03E: - movs r0, #0x18 - ands r0, r4 - b _0802C056 -_0802C044: - adds r0, r5, #0 - bl sub_08049EE4 - lsrs r1, r4, #0x10 - ands r1, r6 - lsls r1, r1, #2 - adds r0, r0, r1 - movs r1, #0x18 - ands r0, r1 -_0802C056: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0802C058 -sub_0802C058: @ 0x0802C058 - push {lr} - movs r2, #2 - strb r2, [r0, #0xc] - strb r1, [r0, #0x15] - lsrs r1, r1, #3 - strb r1, [r0, #0x14] - ldrb r1, [r0, #0x14] - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0802C06C -sub_0802C06C: @ 0x0802C06C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - movs r1, #0x2e - ldrsh r2, [r0, r1] - ldr r3, [r0, #0x48] - movs r1, #0 - ldrsb r1, [r3, r1] - adds r6, r2, r1 - movs r1, #0x32 - ldrsh r2, [r0, r1] - movs r1, #1 - ldrsb r1, [r3, r1] - adds r5, r2, r1 - ldr r3, _0802C0CC @ =gUnk_080CD45C - ldrb r1, [r0, #0x15] - lsrs r1, r1, #2 - adds r2, r1, r3 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - mov sb, r2 - adds r1, #1 - adds r1, r1, r3 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - mov r8, r1 - adds r0, #0x38 - ldrb r0, [r0] - ldr r7, _0802C0D0 @ =gUnk_02027EB4 - cmp r0, #2 - bne _0802C0B2 - ldr r7, _0802C0D4 @ =gUnk_0200D654 -_0802C0B2: - movs r4, #0 -_0802C0B4: - add r6, sb - add r5, r8 - adds r0, r7, #0 - adds r1, r6, #0 - adds r2, r5, #0 - movs r3, #0 - bl sub_080AE4CC - cmp r0, #0 - beq _0802C0D8 - movs r0, #0 - b _0802C0E0 - .align 2, 0 -_0802C0CC: .4byte gUnk_080CD45C -_0802C0D0: .4byte gUnk_02027EB4 -_0802C0D4: .4byte gUnk_0200D654 -_0802C0D8: - adds r4, #1 - cmp r4, #7 - bls _0802C0B4 - movs r0, #1 -_0802C0E0: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0802C0E8 -sub_0802C0E8: @ 0x0802C0E8 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802C0FC - movs r0, #1 - b _0802C178 -_0802C0FC: - ldrb r3, [r5, #0x15] - lsrs r3, r3, #2 - ldr r0, _0802C17C @ =gUnk_080CD45C - adds r3, r3, r0 - movs r0, #0x2e - ldrsh r2, [r5, r0] - ldr r4, [r5, #0x48] - movs r0, #0 - ldrsb r0, [r4, r0] - adds r2, r2, r0 - movs r1, #0 - ldrsb r1, [r3, r1] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r6, r2, r0 - movs r0, #0x32 - ldrsh r2, [r5, r0] - movs r0, #1 - ldrsb r0, [r4, r0] - adds r2, r2, r0 - movs r1, #1 - ldrsb r1, [r3, r1] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r4, r2, r0 - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - ldr r7, _0802C180 @ =gUnk_02027EB4 - cmp r0, #2 - bne _0802C140 - ldr r7, _0802C184 @ =gUnk_0200D654 -_0802C140: - movs r5, #0 - ldr r1, _0802C188 @ =gRoomControls - ldrh r0, [r1, #6] - subs r0, r6, r0 - asrs r0, r0, #4 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r1, #8] - subs r1, r4, r1 - asrs r1, r1, #4 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - movs r1, #9 - bl sub_0806FC24 - cmp r0, #0 - bne _0802C176 - adds r0, r7, #0 - adds r1, r6, #0 - adds r2, r4, #0 - movs r3, #0 - bl sub_080AE4CC - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r5, r1, #0x1f -_0802C176: - adds r0, r5, #0 -_0802C178: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0802C17C: .4byte gUnk_080CD45C -_0802C180: .4byte gUnk_02027EB4 -_0802C184: .4byte gUnk_0200D654 -_0802C188: .4byte gRoomControls - - thumb_func_start sub_0802C18C -sub_0802C18C: @ 0x0802C18C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x78 - ldrb r1, [r0] - subs r1, #1 - strb r1, [r0] - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0802C1BC - movs r0, #0xf - movs r1, #0x11 - movs r2, #0x40 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0802C1BC - movs r3, #0x80 - lsls r3, r3, #9 - adds r0, r4, #0 - movs r2, #0 - bl PositionRelative -_0802C1BC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802C1C0 -sub_0802C1C0: @ 0x0802C1C0 - movs r1, #1 - strb r1, [r0, #0xc] - movs r1, #0x1e - strb r1, [r0, #0xe] - bx lr - .align 2, 0 - - thumb_func_start sub_0802C1CC -sub_0802C1CC: @ 0x0802C1CC - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r4, [r5, #0x14] - lsls r4, r4, #2 - ldr r0, _0802C214 @ =gUnk_080CD464 - adds r4, r4, r0 - movs r0, #0x2e - ldrsh r2, [r5, r0] - movs r0, #0 - ldrsb r0, [r4, r0] - adds r2, r2, r0 - movs r0, #0x32 - ldrsh r3, [r5, r0] - movs r0, #1 - ldrsb r0, [r4, r0] - adds r3, r3, r0 - adds r0, r5, #0 - movs r1, #9 - bl sub_08008796 - movs r0, #0x2e - ldrsh r2, [r5, r0] - movs r0, #2 - ldrsb r0, [r4, r0] - adds r2, r2, r0 - movs r0, #0x32 - ldrsh r3, [r5, r0] - movs r0, #3 - ldrsb r0, [r4, r0] - adds r3, r3, r0 - adds r0, r5, #0 - movs r1, #9 - bl sub_08008796 - pop {r4, r5, pc} - .align 2, 0 -_0802C214: .4byte gUnk_080CD464 - - thumb_func_start sub_0802C218 -sub_0802C218: @ 0x0802C218 - movs r1, #6 - strb r1, [r0, #0xc] - movs r1, #0xe0 - strh r1, [r0, #0x24] - movs r1, #0xc0 - lsls r1, r1, #9 - str r1, [r0, #0x20] - bx lr diff --git a/asm/non_matching/helmasaur/sub_0802BD8C.inc b/asm/non_matching/helmasaur/sub_0802BD8C.inc new file mode 100644 index 00000000..3e53e7d0 --- /dev/null +++ b/asm/non_matching/helmasaur/sub_0802BD8C.inc @@ -0,0 +1,47 @@ + + .syntax unified + + .text + + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xe] + cmp r0, #0 + beq _0802BD9C + subs r0, #1 + strb r0, [r4, #0xe] + b _0802BDDE +_0802BD9C: + adds r0, r4, #0 + movs r1, #1 + bl sub_08049FDC + cmp r0, #0 + beq _0802BDCA + adds r0, r4, #0 + movs r1, #1 + movs r2, #0x10 + bl sub_0804A024 + adds r1, r0, #0 + cmp r1, #0xff + beq _0802BDCA + adds r0, r4, #0 + adds r0, #0x79 + ldrb r0, [r0] + cmp r1, r0 + beq _0802BDCA + adds r0, r4, #0 + bl sub_0802C058 + b _0802BDDE +_0802BDCA: + adds r0, r4, #0 + bl sub_0802C020 + adds r1, r0, #0 + ldrb r0, [r4, #0x15] + cmp r1, r0 + beq _0802BDDE + adds r0, r4, #0 + bl sub_0802C058 +_0802BDDE: + pop {r4, pc} + + .syntax divided diff --git a/data/animations/helmasaur.s b/data/animations/helmasaur.s new file mode 100644 index 00000000..793c8a7a --- /dev/null +++ b/data/animations/helmasaur.s @@ -0,0 +1,43 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + +gUnk_080CD474:: @ 080CD474 + .incbin "baserom.gba", 0x0CD474, 0x0000011 + +gUnk_080CD485:: @ 080CD485 + .incbin "baserom.gba", 0x0CD485, 0x0000011 + +gUnk_080CD496:: @ 080CD496 + .incbin "baserom.gba", 0x0CD496, 0x0000011 + +gUnk_080CD4A7:: @ 080CD4A7 + .incbin "baserom.gba", 0x0CD4A7, 0x0000011 + +gUnk_080CD4B8:: @ 080CD4B8 + .incbin "baserom.gba", 0x0CD4B8, 0x0000011 + +gUnk_080CD4C9:: @ 080CD4C9 + .incbin "baserom.gba", 0x0CD4C9, 0x0000011 + +gUnk_080CD4DA:: @ 080CD4DA + .incbin "baserom.gba", 0x0CD4DA, 0x0000011 + +gUnk_080CD4EB:: @ 080CD4EB + .incbin "baserom.gba", 0x0CD4EB, 0x0000011 + +gUnk_080CD4FC:: @ 080CD4FC + .incbin "baserom.gba", 0x0CD4FC, 0x0000004 + +gUnk_080CD500:: @ 080CD500 + .incbin "baserom.gba", 0x0CD500, 0x0000004 + +gUnk_080CD504:: @ 080CD504 + .incbin "baserom.gba", 0x0CD504, 0x0000004 + +gUnk_080CD508:: @ 080CD508 + .incbin "baserom.gba", 0x0CD508, 0x0000004 + +gUnk_080CD50C:: @ 080CD50C + .incbin "baserom.gba", 0x0CD50C, 0x0000034 diff --git a/data/data_080CC6FC.s b/data/data_080CC6FC.s index aea078bc..68a0c8f3 100644 --- a/data/data_080CC6FC.s +++ b/data/data_080CC6FC.s @@ -3,69 +3,6 @@ .section .rodata -gUnk_080CD3E4:: @ 080CD3E4 - .incbin "baserom.gba", 0x0CD3E4, 0x0000018 - -gUnk_080CD3FC:: @ 080CD3FC - .incbin "baserom.gba", 0x0CD3FC, 0x000000C - -gUnk_080CD408:: @ 080CD408 - .incbin "baserom.gba", 0x0CD408, 0x0000024 - -gUnk_080CD42C:: @ 080CD42C - .incbin "baserom.gba", 0x0CD42C, 0x000000C - -gUnk_080CD438:: @ 080CD438 - .incbin "baserom.gba", 0x0CD438, 0x0000018 - -gUnk_080CD450:: @ 080CD450 - .incbin "baserom.gba", 0x0CD450, 0x000000C - -gUnk_080CD45C:: @ 080CD45C - .incbin "baserom.gba", 0x0CD45C, 0x0000008 - -gUnk_080CD464:: @ 080CD464 - .incbin "baserom.gba", 0x0CD464, 0x0000010 - -gUnk_080CD474:: @ 080CD474 - .incbin "baserom.gba", 0x0CD474, 0x0000011 - -gUnk_080CD485:: @ 080CD485 - .incbin "baserom.gba", 0x0CD485, 0x0000011 - -gUnk_080CD496:: @ 080CD496 - .incbin "baserom.gba", 0x0CD496, 0x0000011 - -gUnk_080CD4A7:: @ 080CD4A7 - .incbin "baserom.gba", 0x0CD4A7, 0x0000011 - -gUnk_080CD4B8:: @ 080CD4B8 - .incbin "baserom.gba", 0x0CD4B8, 0x0000011 - -gUnk_080CD4C9:: @ 080CD4C9 - .incbin "baserom.gba", 0x0CD4C9, 0x0000011 - -gUnk_080CD4DA:: @ 080CD4DA - .incbin "baserom.gba", 0x0CD4DA, 0x0000011 - -gUnk_080CD4EB:: @ 080CD4EB - .incbin "baserom.gba", 0x0CD4EB, 0x0000011 - -gUnk_080CD4FC:: @ 080CD4FC - .incbin "baserom.gba", 0x0CD4FC, 0x0000004 - -gUnk_080CD500:: @ 080CD500 - .incbin "baserom.gba", 0x0CD500, 0x0000004 - -gUnk_080CD504:: @ 080CD504 - .incbin "baserom.gba", 0x0CD504, 0x0000004 - -gUnk_080CD508:: @ 080CD508 - .incbin "baserom.gba", 0x0CD508, 0x0000004 - -gUnk_080CD50C:: @ 080CD50C - .incbin "baserom.gba", 0x0CD50C, 0x0000034 - gUnk_080CD540:: @ 080CD540 .incbin "baserom.gba", 0x0CD540, 0x0000018 diff --git a/include/entity.h b/include/entity.h index 5a0a7665..fe662b65 100644 --- a/include/entity.h +++ b/include/entity.h @@ -138,13 +138,15 @@ typedef struct Entity { /*0x86*/ union SplitHWord field_0x86; } Entity; -#define COORD_TO_TILE(entity) \ - ((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ - (((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) +#define TILE(x, y) \ + ((((x - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ + (((y - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) -#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \ - ((((entity->x.HALF.HI - xOff - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \ - (((entity->y.HALF.HI - yOff - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) +#define COORD_TO_TILE(entity) \ + TILE(entity->x.HALF.HI, entity->y.HALF.HI) + +#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \ + TILE(entity->x.HALF.HI - xOff, entity->y.HALF.HI - yOff) extern Entity* CreateEnemy(u32 subtype, u32 form); extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter); diff --git a/linker.ld b/linker.ld index 4b4ef3a2..4f3fe8b3 100644 --- a/linker.ld +++ b/linker.ld @@ -357,7 +357,7 @@ SECTIONS { src/enemy/chaser.o(.text); src/enemy/spikedBeetle.o(.text); src/enemy/sensorBladeTrap.o(.text); - asm/helmasaur.o(.text); + src/enemy/helmasaur.o(.text); asm/fallingBoulder.o(.text); asm/bobomb.o(.text); asm/wallMaster2.o(.text); @@ -965,6 +965,8 @@ SECTIONS { src/enemy/spikedBeetle.o(.rodata); data/animations/spikedBeetle.o(.rodata); src/enemy/sensorBladeTrap.o(.rodata); + src/enemy/helmasaur.o(.rodata); + data/animations/helmasaur.o(.rodata); data/data_080CC6FC.o(.rodata); src/enemy.o(.rodata); data/data_080D3D94.o(.rodata); diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c new file mode 100644 index 00000000..645924dc --- /dev/null +++ b/src/enemy/helmasaur.c @@ -0,0 +1,436 @@ +#include "enemy.h" +#include "functions.h" + +extern void sub_08008796(Entity*, u32, u32, u32); +extern u32 sub_0804A024(Entity*, u32, u32); +extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); + +extern Entity gUnk_0200D654; +extern Entity gUnk_02027EB4; + +void sub_0802C18C(Entity*); +void sub_0802C218(Entity*); +void sub_0802C1C0(Entity*); +u32 sub_0802C020(Entity*); +void sub_0802C058(Entity*, u32); +bool32 sub_0802C06C(Entity*); +void sub_08080964(u32, u32); +void sub_0802C1CC(Entity*); +bool32 sub_0802C0E8(Entity*); + +extern void (*const gUnk_080CD3E4[])(Entity*); +extern void (*const gUnk_080CD3FC[])(Entity*); +extern void (*const gUnk_080CD408[])(Entity*); +extern void (*const gUnk_080CD42C[])(Entity*); +extern void (*const gUnk_080CD438[])(Entity*); +extern void (*const gUnk_080CD450[])(Entity*); +extern const s8 gUnk_080CD45C[]; +extern const s8 gUnk_080CD464[]; + +void Helmasaur(Entity* this) { + if (this->entityType.form == 0) { + EnemyFunctionHandler(this, gUnk_080CD3E4); + SetChildOffset(this, 0, 1, -0x10); + } else { + gUnk_080CD3FC[this->action](this); + } +} + +void sub_0802BBAC(Entity* this) { + gUnk_080CD408[this->action](this); +} + +void sub_0802BBC4(Entity* this) { + if (this->damageType != 0x19) { + switch (this->bitfield & 0x7f) { + case 0: + case 2: + case 3: + if (this->action == 4) { + this->field_0x42 = 0; + sub_0802C218(this); + } + break; + } + } + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } + + sub_0804AA30(this, gUnk_080CD3E4); +} + +void sub_0802BC20(Entity* this) { + if (this->damageType != 0x19) { + if (sub_0806F520(this)) { + gUnk_080CD42C[this->previousActionFlag](this); + } + } else if (2 < this->previousActionFlag || sub_0806F520(this)) { + gUnk_080CD438[this->previousActionFlag](this); + } +} + +void sub_0802BC74(Entity* this) { + sub_0802C1C0(this); + this->previousActionFlag = 1; + this->field_0x1d = 60; + this->animationState = (gPlayerEntity.animationState >> 1) ^ 2; + InitializeAnimation(this, this->animationState); +} + +void sub_0802BCA0(Entity* this) { + sub_0806F4E8(this); +} + +void sub_0802BCA8(Entity* this) { + if (this->damageType != 0x19) { + Entity* ent; + + this->action = 7; + this->actionDelay = 0x5a; + this->field_0x20 = 0x18000; + this->damageType = 0x19; + this->field_0x3a = this->field_0x3a & 0xfb; + this->field_0x1c = 0x12; + ent = CreateEnemy(0x20, 1); + if (ent) { + ent->animationState = this->animationState; + CopyPosition(this, ent); + } + InitializeAnimation(this, this->animationState + 4); + } +} + +void sub_0802BCFC(Entity* this) { + this->previousActionFlag = 1; + this->field_0x1d = 60; +} + +void sub_0802BD08(Entity* this) { + sub_0806F3E4(this); +} + +void sub_0802BD10(Entity* this) { + this->flags &= ~0x80; + UpdateAnimationVariableFrames(this, 2); +} + +void nullsub_145(Entity* this) { + /* ... */ +} + +void sub_0802BD28(Entity* this) { + if (this->flags & 0x80) { + this->flags |= 0x80; + this->field_0x3a &= ~0x4; + } else { + this->currentHealth = 0; + } +} + +void sub_0802BD54(Entity* this) { + sub_0804A720(this); + this->action = 1; + this->field_0x78.HALF.LO = Random(); + this->field_0x1d = 60; + this->field_0x78.HALF.HI = 0xff; + this->direction = DirectionRound(Random()); + this->animationState = this->direction >> 3; + InitializeAnimation(this, this->animationState); +} + +void sub_0802BD8C(Entity* this) { + if (this->actionDelay) { + this->actionDelay--; + } else { + u32 direction; + + if (sub_08049FDC(this, 1)) { + direction = sub_0804A024(this, 1, 0x10); + if (direction != 0xff && direction != this->field_0x78.HALF.HI) { + sub_0802C058(this, direction); + return; + } + } + + direction = sub_0802C020(this); + if (direction != this->direction) { + sub_0802C058(this, direction); + } + } +} + +void sub_0802BDE0(Entity* this) { + if (sub_0802C06C(this)) { + this->action = 3; + this->actionDelay = 60; + this->field_0x78.HALF.HI = 0xff; + } else { + this->action = 1; + this->actionDelay = (Random() & 0xf) + 0xf; + this->field_0x78.HALF.HI = this->direction; + } +} + +void sub_0802BE18(Entity* this) { + UpdateAnimationVariableFrames(this, 2); + if (--this->actionDelay == 0) { + this->action = 4; + this->actionDelay = 0x1e; + this->nonPlanarMovement = 0x300; + } else { + sub_0802C18C(this); + } +} + +void sub_0802BE48(Entity* this) { + if (!sub_080AEFE0(this)) { + sub_0802C218(this); + sub_08080964(8, 0); + } else { + GetNextFrame(this); + sub_0802C1CC(this); + if (sub_0802C0E8(this)) { + this->action = 5; + } + } +} + +void sub_0802BE80(Entity* this) { + this->nonPlanarMovement -= 0x20; + if (0xff < this->nonPlanarMovement) { + sub_0802C1CC(this); + } + + if (this->nonPlanarMovement > 0) { + sub_080AEFE0(this); + sub_0802C18C(this); + } else { + sub_0802C1C0(this); + this->actionDelay += 30; + } +} + +void sub_0802BEBC(Entity* this) { + this->direction ^= 0x10; + sub_080AEFE0(this); + this->direction ^= 0x10; + if (!sub_080044EC(this, 0x2000)) { + sub_0802C1C0(this); + } +} + +void sub_0802BEEC(Entity* this) { + if (this->actionDelay) { + if ((--this->actionDelay & 0x1f) == 0) { + this->animationState ^= 2; + this->direction = this->animationState << 3; + InitializeAnimation(this, this->animationState + 4); + } + } else if (!sub_08003FC4(this, 0x1c00)) { + this->action = 8; + this->actionDelay = 30; + this->nonPlanarMovement = 0x120; + } +} + +void sub_0802BF3C(Entity* this) { + ProcessMovement(this); + GetNextFrame(this); + if (--this->actionDelay == 0) { + u32 sprite; + + this->actionDelay = 30; + this->direction = sub_0802C020(this); + sprite = this->direction >> 3; + if (sprite != this->animationState) { + this->animationState = sprite; + InitializeAnimation(this, sprite + 4); + } + } +} + +void sub_0802BF78(Entity* this) { + this->action = 1; + this->flags2 = 4; + this->field_0x1c = 1; + this->direction = this->animationState << 3; + InitializeAnimation(this, this->animationState + 8); +} + +void sub_0802BF98(Entity* this) { + if (sub_0806F520(this)) { + gUnk_080CD450[this->previousActionFlag](this); + } else { + this->action = 2; + this->actionDelay = 30; + this->flags &= ~0x80; + } +} + +void sub_0802BFD0(Entity* this) { + this->previousActionFlag = 2; +} + +void sub_0802BFD8(Entity* this) { + sub_0806F4E8(this); +} + +void sub_0802BFE0(Entity* this) { + if (sub_0806F3E4(this)) { + DeleteEntity(this); + } +} + +void sub_0802BFF4(Entity* this) { + this->spriteSettings.b.draw ^= 1; + if (--this->actionDelay == 0) { + DeleteEntity(this); + } +} + +u32 sub_0802C020(Entity* this) { + u32 uVar1 = Random(); + + if (sub_08049FA0(this) || (uVar1 & 1)) + return DirectionRound(uVar1); + + return (sub_08049EE4(this) + (uVar1 >> 0x10 & 1) * 4) & 0x18; +} + +void sub_0802C058(Entity* this, u32 param_2) { + this->action = 2; + this->direction = param_2; + this->animationState = param_2 >> 3; + InitializeAnimation(this, this->animationState); +} + +bool32 sub_0802C06C(Entity* this) { + u32 x = this->x.HALF.HI + (s8)this->boundingBox->unknown[0]; + u32 y = this->y.HALF.HI + (s8)this->boundingBox->unknown[1]; + u32 xdiff = gUnk_080CD45C[(this->direction >> 2) + 0]; + u32 ydiff = gUnk_080CD45C[(this->direction >> 2) + 1]; + + Entity* ent = this->collisionLayer == 2 ? &gUnk_0200D654 : &gUnk_02027EB4; + + u32 i; + for (i = 0; i < 8; i++) { + x += xdiff; + y += ydiff; + if (sub_080AE4CC(ent, x, y, 0)) + return FALSE; + } + + return TRUE; +} + +bool32 sub_0806FC24(u32, u32); + +bool32 sub_0802C0E8(Entity* this) { + if (--this->actionDelay == 0) { + return TRUE; + } else { + const s8* ptr = &gUnk_080CD45C[this->direction >> 2]; + s32 x = this->x.HALF.HI + (s8)this->boundingBox->unknown[0] + ptr[0] * 6; + s32 y = this->y.HALF.HI + (s8)this->boundingBox->unknown[1] + ptr[1] * 6; + + Entity* ent = this->collisionLayer == 2 ? &gUnk_0200D654 : &gUnk_02027EB4; + u32 ret = FALSE; + if (!sub_0806FC24(TILE(x, y), 9)) { + u32 tmp = sub_080AE4CC(ent, x, y, 0); + ret = (-tmp | tmp) >> 0x1f; + } + return ret; + } +} + +void sub_0802C18C(Entity* this) { + this->field_0x78.HALF.LO--; + if ((this->field_0x78.HALF.LO & 7) == 0) { + Entity* ent = CreateObject(0xf, 0x11, 0x40); + if (ent) { + PositionRelative(this, ent, 0, 0x10000); + } + } +} + +void sub_0802C1C0(Entity* this) { + this->action = 1; + this->actionDelay = 30; +} + +void sub_0802C1CC(Entity* this) { + const s8* ptr = &gUnk_080CD464[this->animationState << 2]; + sub_08008796(this, 9, this->x.HALF.HI + ptr[0], this->y.HALF.HI + ptr[1]); + sub_08008796(this, 9, this->x.HALF.HI + ptr[2], this->y.HALF.HI + ptr[3]); +} + +void sub_0802C218(Entity* this) { + this->action = 6; + this->nonPlanarMovement = 0xe0; + this->field_0x20 = 0x18000; +} + +// clang-format off +void (*const gUnk_080CD3E4[])(Entity*) = { + sub_0802BBAC, + sub_0802BBC4, + sub_08001324, + sub_0804A7D4, + sub_08001242, + sub_0802BC20, +}; + +void (*const gUnk_080CD3FC[])(Entity*) = { + sub_0802BF78, + sub_0802BF98, + sub_0802BFF4, +}; + +void (*const gUnk_080CD408[])(Entity*) = { + sub_0802BD54, + sub_0802BD8C, + sub_0802BDE0, + sub_0802BE18, + sub_0802BE48, + sub_0802BE80, + sub_0802BEBC, + sub_0802BEEC, + sub_0802BF3C, +}; + +void (*const gUnk_080CD42C[])(Entity*) = { + sub_0802BC74, + sub_0802BCA0, + sub_0802BCA8, +}; + +void (*const gUnk_080CD438[])(Entity*) = { + sub_0802BCFC, + sub_0802BCA0, + sub_0802BD08, + sub_0802BD10, + nullsub_145, + sub_0802BD28, +}; + +void (*const gUnk_080CD450[])(Entity*) = { + sub_0802BFD0, + sub_0802BFD8, + sub_0802BFE0, +}; + +const s8 gUnk_080CD45C[] = { + 0, -8, + 8, 0, + 0, 8, + -8, 0, +}; + +const s8 gUnk_080CD464[] = { + -3, -8, 3, -8, + 8, -3, 8, 3, + -3, 8, 3, 8, + -8, -3, -8, 3, +}; +// clang-format on