From 3649a3e01698ef22e00740ace4a72bef90d89af0 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 5 Feb 2022 23:00:30 +0100 Subject: [PATCH] Decompile Armos --- asm/enemy/armos.s | 1164 ----------------------- asm/non_matching/armos/sub_080304BC.inc | 29 + asm/non_matching/armos/sub_080305BC.inc | 86 ++ asm/non_matching/armos/sub_080306C4.inc | 136 +++ asm/non_matching/armos/sub_0803086C.inc | 154 +++ data/animations/enemy/armos.s | 3 - data/const/enemy/armos.s | 27 - include/enemy.h | 2 +- include/functions.h | 2 + linker.ld | 4 +- src/enemy/armos.c | 355 +++++++ src/enemy/helmasaur.c | 1 - src/enemy/leever.c | 2 - src/enemy/octorokGolden.c | 1 - src/enemy/sensorBladeTrap.c | 2 +- src/npc/npc5.c | 1 - src/object/objectB2.c | 2 - src/projectile/guardLineOfSight.c | 1 - 18 files changed, 766 insertions(+), 1206 deletions(-) delete mode 100644 asm/enemy/armos.s create mode 100644 asm/non_matching/armos/sub_080304BC.inc create mode 100644 asm/non_matching/armos/sub_080305BC.inc create mode 100644 asm/non_matching/armos/sub_080306C4.inc create mode 100644 asm/non_matching/armos/sub_0803086C.inc delete mode 100644 data/const/enemy/armos.s create mode 100644 src/enemy/armos.c diff --git a/asm/enemy/armos.s b/asm/enemy/armos.s deleted file mode 100644 index efabea78..00000000 --- a/asm/enemy/armos.s +++ /dev/null @@ -1,1164 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Armos -Armos: @ 0x08030198 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080301B8 @ =gUnk_080CE124 - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - adds r0, r4, #0 - bl sub_08030150 - pop {r4, pc} - .align 2, 0 -_080301B8: .4byte gUnk_080CE124 - - thumb_func_start sub_080301BC -sub_080301BC: @ 0x080301BC - push {lr} - ldr r2, _080301D0 @ =gUnk_080CE13C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080301D0: .4byte gUnk_080CE13C - - thumb_func_start sub_080301D4 -sub_080301D4: @ 0x080301D4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - bne _080301EE - ldr r1, [r4, #0x4c] - ldr r0, _08030238 @ =gPlayerEntity - cmp r1, r0 - bne _080301EE - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0xe2 - strb r0, [r1] -_080301EE: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r1, [r0] - adds r6, r0, #0 - adds r5, r4, #0 - adds r5, #0x81 - cmp r1, #0 - beq _08030216 - ldrb r0, [r5] - cmp r1, r0 - beq _08030216 - movs r0, #8 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #6 - bl sub_080309C8 - adds r0, r4, #0 - bl sub_080309E8 -_08030216: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _08030228 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_08030228: - ldrb r0, [r6] - strb r0, [r5] - ldr r1, _0803023C @ =gUnk_080CE124 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, r6, pc} - .align 2, 0 -_08030238: .4byte gPlayerEntity -_0803023C: .4byte gUnk_080CE124 - - thumb_func_start sub_08030240 -sub_08030240: @ 0x08030240 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #6 - bne _08030260 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08030260 - adds r0, r4, #0 - bl GetNextFrame -_08030260: - adds r0, r4, #0 - bl sub_08001242 - pop {r4, pc} - - thumb_func_start nullsub_17 -nullsub_17: @ 0x08030268 - bx lr - .align 2, 0 - - thumb_func_start sub_0803026C -sub_0803026C: @ 0x0803026C - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0804A720 - ldrb r0, [r4, #0xe] - adds r3, r4, #0 - adds r3, #0x80 - strb r0, [r3] - ldrb r2, [r3] - lsls r0, r2, #2 - ldr r5, _080302A8 @ =armos_data - adds r0, r0, r5 - ldrh r1, [r0] - cmp r1, #0 - beq _080302AC - strh r1, [r4, #0x2e] - ldrh r0, [r0, #2] - strh r0, [r4, #0x32] - adds r2, r4, #0 - adds r2, #0x84 - adds r0, r5, #0 - adds r0, #0x40 - ldrh r0, [r0] - ldrb r3, [r3] - asrs r0, r3 - movs r1, #1 - ands r0, r1 - str r0, [r2] - b _080302BA - .align 2, 0 -_080302A8: .4byte gRoomTransition + 0x6c -_080302AC: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, _08030304 @ =0x0000047D - asrs r1, r2 - movs r2, #1 - ands r1, r2 - str r1, [r0] -_080302BA: - ldrb r0, [r4, #0xb] - cmp r0, #0 - beq _080302C6 - bl GetCurrentRoomProperty - str r0, [r4, #0x7c] -_080302C6: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x81 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08030580 - adds r0, r4, #0 - bl sub_080307EC - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - bne _08030302 - ldr r0, _08030308 @ =gRoomControls - ldrh r0, [r0, #8] - adds r0, #0x80 - movs r2, #0x32 - ldrsh r1, [r4, r2] - cmp r0, r1 - bge _08030302 - movs r0, #7 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #7 - bl sub_080309C8 -_08030302: - pop {r4, r5, pc} - .align 2, 0 -_08030304: .4byte 0x0000047D -_08030308: .4byte gRoomControls - - thumb_func_start sub_0803030C -sub_0803030C: @ 0x0803030C - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0803086C - adds r5, r0, #0 - cmp r5, #0 - bne _08030334 - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - cmp r0, #0 - beq _08030334 - adds r0, r4, #0 - bl sub_08030650 - cmp r0, #0 - beq _08030334 - movs r0, #2 - strb r0, [r4, #0xc] - strb r5, [r4, #0xd] -_08030334: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08030338 -sub_08030338: @ 0x08030338 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - beq _0803034C - adds r0, r4, #0 - bl sub_080309A8 - b _08030368 -_0803034C: - adds r0, r4, #0 - movs r1, #3 - bl UpdateAnimationVariableFrames - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - cmp r0, #0 - beq _08030368 - ldrb r0, [r4, #0x1e] - cmp r0, #0x25 - bne _08030368 - movs r0, #0x19 - strb r0, [r4, #0x1e] -_08030368: - adds r3, r4, #0 - adds r3, #0x5a - ldrb r2, [r3] - adds r1, r2, #0 - cmp r1, #1 - bne _0803039C - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _0803037C - strb r1, [r4, #0xd] -_0803037C: - ldrb r0, [r4, #0xe] - adds r2, r0, #1 - strb r2, [r4, #0xe] - ands r1, r2 - cmp r1, #0 - beq _0803042C - ldr r1, _08030398 @ =gUnk_080CE160 - movs r0, #6 - ands r2, r0 - lsrs r0, r2, #1 - adds r0, r0, r1 - ldrb r1, [r0] - b _08030426 - .align 2, 0 -_08030398: .4byte gUnk_080CE160 -_0803039C: - cmp r1, #2 - bne _080303D4 - movs r0, #0 - strb r0, [r3] - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - beq _080303C0 - adds r1, r4, #0 - adds r1, #0x3b - movs r0, #0xb - strb r0, [r1] - adds r1, #4 - movs r0, #8 - strb r0, [r1] - ldr r0, _080303D0 @ =gUnk_080FD2F0 - str r0, [r4, #0x48] -_080303C0: - adds r0, r4, #0 - bl sub_08030834 - movs r0, #0x95 - lsls r0, r0, #1 - bl EnqueueSFX - b _0803042C - .align 2, 0 -_080303D0: .4byte gUnk_080FD2F0 -_080303D4: - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _08030426 - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - beq _08030412 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0xff - strb r0, [r4, #0x14] - adds r2, r4, #0 - adds r2, #0x7a - movs r1, #0 - movs r0, #0x96 - lsls r0, r0, #2 - strh r0, [r2] - adds r0, r4, #0 - adds r0, #0x82 - strb r1, [r0] - adds r0, r4, #0 - bl sub_080306C4 - adds r0, r4, #0 - bl sub_080309E8 - b _0803042C -_08030412: - movs r0, #6 - strb r0, [r4, #0xc] - movs r0, #0x1a - strb r0, [r4, #0xe] - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - movs r0, #0x10 - strb r0, [r4, #0x15] - b _0803042C -_08030426: - adds r0, r4, #0 - adds r0, #0x62 - strb r1, [r0] -_0803042C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08030430 -sub_08030430: @ 0x08030430 - push {r4, lr} - adds r4, r0, #0 - bl sub_08030A04 - movs r0, #0x24 - ldrsh r1, [r4, r0] - movs r0, #0x80 - lsls r0, r0, #1 - cmp r1, r0 - ble _0803044A - adds r0, r4, #0 - bl GetNextFrame -_0803044A: - adds r0, r4, #0 - bl sub_080309A8 - adds r1, r4, #0 - adds r1, #0x7a - ldrh r0, [r1] - cmp r0, #0 - beq _0803045E - subs r0, #1 - strh r0, [r1] -_0803045E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08030470 - adds r0, r4, #0 - bl sub_080306C4 -_08030470: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08030474 -sub_08030474: @ 0x08030474 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803049C - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x7a - movs r0, #0x3c - strh r0, [r1] - adds r0, r4, #0 - bl sub_080309E8 - b _080304BA -_0803049C: - adds r0, r4, #0 - bl sub_080305BC - cmp r0, #0 - beq _080304AE - adds r0, r4, #0 - bl sub_08030590 - b _080304BA -_080304AE: - adds r0, r4, #0 - bl sub_080307D4 - adds r0, r4, #0 - bl sub_080309A8 -_080304BA: - pop {r4, pc} - - thumb_func_start sub_080304BC -sub_080304BC: @ 0x080304BC - push {r4, lr} - adds r4, r0, #0 - bl sub_080309A8 - adds r3, r4, #0 - adds r3, #0x5a - ldrb r1, [r3] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - beq _080304DE - adds r0, r4, #0 - bl sub_08030580 - b _080304F0 -_080304DE: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bne _080304F0 - strb r2, [r3] - movs r0, #0x95 - lsls r0, r0, #1 - bl EnqueueSFX -_080304F0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080304F4 -sub_080304F4: @ 0x080304F4 - push {r4, lr} - adds r4, r0, #0 - bl LinearMoveUpdate - adds r0, r4, #0 - bl sub_080309A8 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08030520 - movs r0, #7 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #5 - bl sub_080309C8 - adds r0, r4, #0 - bl sub_080307EC -_08030520: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08030524 -sub_08030524: @ 0x08030524 - push {lr} - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x5a - ldrb r1, [r3] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803053E - adds r0, r2, #0 - bl sub_080309A8 - b _08030552 -_0803053E: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bne _08030552 - movs r0, #0 - strb r0, [r3] - movs r0, #0x95 - lsls r0, r0, #1 - bl EnqueueSFX -_08030552: - pop {pc} - - thumb_func_start sub_08030554 -sub_08030554: @ 0x08030554 - push {r4, lr} - adds r4, r0, #0 - bl sub_080309A8 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803057C - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl sub_080309C8 - adds r0, r4, #0 - bl sub_080306C4 -_0803057C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08030580 -sub_08030580: @ 0x08030580 - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - movs r1, #4 - bl sub_080309C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08030590 -sub_08030590: @ 0x08030590 - push {r4, lr} - adds r4, r0, #0 - movs r0, #5 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3b - movs r0, #1 - strb r0, [r1] - adds r1, #4 - strb r0, [r1] - ldr r0, _080305B8 @ =gHitbox_15 - str r0, [r4, #0x48] - adds r0, r4, #0 - movs r1, #5 - bl sub_080309C8 - adds r0, r4, #0 - bl sub_080307EC - pop {r4, pc} - .align 2, 0 -_080305B8: .4byte gHitbox_15 - - thumb_func_start sub_080305BC -sub_080305BC: @ 0x080305BC - push {r4, lr} - adds r4, r0, #0 - ldrh r1, [r4, #0x2e] - movs r2, #0xf - adds r0, r2, #0 - ands r0, r1 - movs r3, #0 - cmp r0, #8 - bne _080305D0 - movs r3, #1 -_080305D0: - ldrh r0, [r4, #0x32] - ands r2, r0 - cmp r2, #8 - bne _080305DC - movs r0, #2 - orrs r3, r0 -_080305DC: - cmp r3, #3 - bne _080305E4 - movs r0, #1 - b _0803064C -_080305E4: - ldrb r1, [r4, #0x15] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _0803061E - movs r0, #1 - ands r0, r3 - cmp r0, #0 - bne _08030608 - adds r0, r4, #0 - bl ProcessMovement - cmp r0, #0 - bne _0803064A - ldrb r0, [r4, #0x15] - movs r1, #0x10 - eors r0, r1 - b _08030648 -_08030608: - cmp r2, #8 - ble _08030610 - movs r0, #0x10 - b _08030612 -_08030610: - movs r0, #0 -_08030612: - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x15] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - bne _0803064A -_0803061E: - movs r0, #2 - ands r3, r0 - cmp r3, #0 - bne _08030638 - adds r0, r4, #0 - bl ProcessMovement - cmp r0, #0 - bne _0803064A - ldrb r0, [r4, #0x15] - movs r1, #0x10 - eors r0, r1 - b _08030648 -_08030638: - ldrh r1, [r4, #0x2e] - movs r0, #0xf - ands r0, r1 - cmp r0, #8 - ble _08030646 - movs r0, #8 - b _08030648 -_08030646: - movs r0, #0x18 -_08030648: - strb r0, [r4, #0x15] -_0803064A: - movs r0, #0 -_0803064C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08030650 -sub_08030650: @ 0x08030650 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _08030668 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x80 - bne _080306B6 -_08030664: - movs r0, #1 - b _080306B8 -_08030668: - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - beq _08030698 - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _080306B6 - ldr r0, _08030694 @ =gUnk_020000B0 - ldr r0, [r0] - movs r1, #0x2e - ldrsh r0, [r0, r1] - movs r2, #0x2e - ldrsh r1, [r4, r2] - subs r0, r0, r1 - adds r0, #0x10 - cmp r0, #0x20 - bhi _080306B6 - b _08030664 - .align 2, 0 -_08030694: .4byte gUnk_020000B0 -_08030698: - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _080306B6 - ldr r0, _080306BC @ =gUnk_020000B0 - ldr r0, [r0] - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r0, _080306C0 @ =gRoomControls - ldrh r0, [r0, #6] - adds r0, #0xa8 - cmp r1, r0 - blt _08030664 -_080306B6: - movs r0, #0 -_080306B8: - pop {r4, pc} - .align 2, 0 -_080306BC: .4byte gUnk_020000B0 -_080306C0: .4byte gRoomControls - - thumb_func_start sub_080306C4 -sub_080306C4: @ 0x080306C4 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _080307C0 - adds r0, r4, #0 - adds r0, #0x7a - ldrh r0, [r0] - cmp r0, #0 - beq _080307C0 - movs r0, #0x18 - strb r0, [r4, #0xe] - ldr r0, _080307B0 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl sub_0800132C - adds r5, r0, #0 - cmp r5, #0xff - beq _080307CC - movs r0, #0 - mov r8, r0 - bl Random - movs r1, #7 - ands r1, r0 - cmp r1, #0 - bne _0803070E - ldrb r0, [r4, #0x14] - adds r6, r4, #0 - adds r6, #0x82 - cmp r0, #0xff - bne _0803072A -_0803070E: - adds r2, r4, #0 - adds r2, #0x82 - ldrb r1, [r2] - movs r0, #3 - ands r0, r1 - adds r6, r2, #0 - cmp r0, #3 - beq _0803072A - adds r0, r5, #4 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - movs r1, #1 - mov r8, r1 -_0803072A: - mov r7, r8 - cmp r7, #0 - bne _08030746 - bl Random - movs r1, #2 - ands r1, r0 - subs r1, #1 - lsls r1, r1, #3 - adds r1, #4 - adds r1, r5, r1 - movs r0, #0x18 - ands r1, r0 - strb r1, [r4, #0x15] -_08030746: - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - ldr r1, _080307B4 @ =gUnk_02027EB4 - mov ip, r1 - cmp r0, #2 - bne _08030758 - ldr r7, _080307B8 @ =gUnk_0200D654 - mov ip, r7 -_08030758: - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r3, _080307BC @ =gUnk_080CE164 - ldrb r0, [r4, #0x15] - lsrs r0, r0, #2 - adds r2, r0, r3 - ldrb r2, [r2] - lsls r2, r2, #0x18 - asrs r2, r2, #0x18 - adds r1, r1, r2 - movs r7, #0x32 - ldrsh r2, [r4, r7] - adds r0, #1 - adds r0, r0, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r2, r2, r0 - mov r0, ip - movs r3, #0 - bl sub_080AE4CC - cmp r0, #0 - beq _0803079E - movs r0, #4 - adds r1, r5, #0 - ands r1, r0 - eors r1, r0 - lsls r1, r1, #1 - movs r0, #0x10 - ands r5, r0 - orrs r1, r5 - strb r1, [r4, #0x15] - movs r0, #0 - mov r8, r0 -_0803079E: - adds r0, r4, #0 - bl sub_080307D4 - ldrb r0, [r6] - lsls r0, r0, #1 - mov r1, r8 - orrs r0, r1 - strb r0, [r6] - b _080307CC - .align 2, 0 -_080307B0: .4byte gUnk_020000B0 -_080307B4: .4byte gUnk_02027EB4 -_080307B8: .4byte gUnk_0200D654 -_080307BC: .4byte gUnk_080CE164 -_080307C0: - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - movs r0, #0xa0 - strh r0, [r4, #0x24] -_080307CC: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_080307D4 -sub_080307D4: @ 0x080307D4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0x15] - lsrs r1, r0, #3 - ldrb r0, [r2, #0x14] - cmp r1, r0 - beq _080307EA - strb r1, [r2, #0x14] - adds r0, r2, #0 - bl sub_080309C8 -_080307EA: - pop {pc} - - thumb_func_start sub_080307EC -sub_080307EC: @ 0x080307EC - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r0, #0x2e - ldrsh r4, [r5, r0] - ldr r1, _0803082C @ =gRoomControls - ldrh r0, [r1, #6] - subs r4, r4, r0 - asrs r4, r4, #4 - movs r2, #0x3f - ands r4, r2 - movs r3, #0x32 - ldrsh r0, [r5, r3] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - adds r6, r5, #0 - adds r6, #0x38 - ldrb r1, [r6] - adds r0, r4, #0 - bl GetTileIndex - adds r5, #0x78 - strh r0, [r5] - ldr r0, _08030830 @ =0x00004022 - ldrb r2, [r6] - adds r1, r4, #0 - bl SetTile - pop {r4, r5, r6, pc} - .align 2, 0 -_0803082C: .4byte gRoomControls -_08030830: .4byte 0x00004022 - - thumb_func_start sub_08030834 -sub_08030834: @ 0x08030834 - push {r4, r5, r6, lr} - adds r1, r0, #0 - adds r1, #0x78 - ldrh r5, [r1] - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r3, _08030868 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r0, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r0, #0x38 - ldrb r2, [r0] - adds r0, r5, #0 - bl SetTile - pop {r4, r5, r6, pc} - .align 2, 0 -_08030868: .4byte gRoomControls - - thumb_func_start sub_0803086C -sub_0803086C: @ 0x0803086C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - ldr r0, [r5, #0x7c] - cmp r0, #0 - bne _08030880 - b _0803099C -_08030880: - ldr r0, _08030928 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803088E - b _0803098A -_0803088E: - ldr r0, _0803092C @ =gRoomControls - mov sb, r0 - ldrh r0, [r5, #0x2e] - mov r2, sb - ldrh r1, [r2, #6] - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r7, r0, #0x10 - ldrh r0, [r5, #0x32] - ldrh r1, [r2, #8] - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r6, r0, #0x10 - movs r3, #0x2e - ldrsh r0, [r5, r3] - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r4, r0, #4 - movs r2, #0x3f - ands r4, r2 - movs r1, #0x32 - ldrsh r0, [r5, r1] - mov r3, sb - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - movs r0, #0x38 - adds r0, r0, r5 - mov r8, r0 - ldrb r1, [r0] - adds r0, r4, #0 - bl GetTileType - ldr r1, _08030930 @ =0x00004049 - mov sl, r1 - cmp r0, sl - bne _08030950 - adds r0, r7, #0 - adds r1, r6, #0 - movs r2, #2 - movs r3, #0xc - bl CheckPlayerInRegion - cmp r0, #0 - beq _0803093C - subs r1, r6, #4 - adds r0, r7, #0 - movs r2, #2 - movs r3, #4 - bl CheckPlayerInRegion - cmp r0, #0 - beq _0803098A - ldr r2, _08030934 @ =gPlayerEntity - 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] - ldr r0, [r5, #0x7c] - bl DoExitTransition - ldr r0, _08030938 @ =gRoomTransition - adds r1, r5, #0 - adds r1, #0x80 - ldrb r1, [r1] - adds r0, #0xae - strh r1, [r0] - movs r0, #1 - b _0803099E - .align 2, 0 -_08030928: .4byte gPlayerState -_0803092C: .4byte gRoomControls -_08030930: .4byte 0x00004049 -_08030934: .4byte gPlayerEntity -_08030938: .4byte gRoomTransition -_0803093C: - ldr r0, _0803094C @ =0x00004022 - mov r3, r8 - ldrb r2, [r3] - adds r1, r4, #0 - bl SetTile - b _0803098A - .align 2, 0 -_0803094C: .4byte 0x00004022 -_08030950: - adds r1, r6, #6 - adds r0, r7, #0 - movs r2, #2 - movs r3, #5 - bl CheckPlayerInRegion - cmp r0, #0 - beq _0803098A - movs r4, #0x2e - ldrsh r1, [r5, r4] - mov r2, sb - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r4, #0x32 - ldrsh r0, [r5, r4] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - mov r0, r8 - ldrb r2, [r0] - mov r0, sl - bl SetTile -_0803098A: - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] -_0803099C: - movs r0, #0 -_0803099E: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080309A8 -sub_080309A8: @ 0x080309A8 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - cmp r0, #0 - beq _080309C4 - ldrb r0, [r4, #0x1e] - cmp r0, #0x25 - bne _080309C4 - movs r0, #0x19 - strb r0, [r4, #0x1e] -_080309C4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080309C8 -sub_080309C8: @ 0x080309C8 - push {r4, lr} - adds r4, r0, #0 - bl InitializeAnimation - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - cmp r0, #0 - beq _080309E4 - ldrb r0, [r4, #0x1e] - cmp r0, #0x25 - bne _080309E4 - movs r0, #0x19 - strb r0, [r4, #0x1e] -_080309E4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080309E8 -sub_080309E8: @ 0x080309E8 - push {lr} - adds r1, r0, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #4 - bhi _080309FA - movs r0, #0x90 - lsls r0, r0, #1 - b _08030A00 -_080309FA: - cmp r0, #8 - bhi _08030A02 - movs r0, #0xe0 -_08030A00: - strh r0, [r1, #0x24] -_08030A02: - pop {pc} - - thumb_func_start sub_08030A04 -sub_08030A04: @ 0x08030A04 - push {r4, lr} - adds r4, r0, #0 - bl ProcessMovement - adds r4, #0x5a - ldrb r1, [r4] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08030A24 - movs r0, #0xfe - ands r0, r1 - strb r0, [r4] - ldr r0, _08030A28 @ =0x00000101 - bl EnqueueSFX -_08030A24: - pop {r4, pc} - .align 2, 0 -_08030A28: .4byte 0x00000101 diff --git a/asm/non_matching/armos/sub_080304BC.inc b/asm/non_matching/armos/sub_080304BC.inc new file mode 100644 index 00000000..5d872b51 --- /dev/null +++ b/asm/non_matching/armos/sub_080304BC.inc @@ -0,0 +1,29 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + bl sub_080309A8 + adds r3, r4, #0 + adds r3, #0x5a + ldrb r1, [r3] + movs r0, #0x80 + ands r0, r1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #0 + beq _080304DE + adds r0, r4, #0 + bl sub_08030580 + b _080304F0 +_080304DE: + lsls r0, r1, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bne _080304F0 + strb r2, [r3] + movs r0, #0x95 + lsls r0, r0, #1 + bl EnqueueSFX +_080304F0: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/armos/sub_080305BC.inc b/asm/non_matching/armos/sub_080305BC.inc new file mode 100644 index 00000000..1267ed9d --- /dev/null +++ b/asm/non_matching/armos/sub_080305BC.inc @@ -0,0 +1,86 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r1, [r4, #0x2e] + movs r2, #0xf + adds r0, r2, #0 + ands r0, r1 + movs r3, #0 + cmp r0, #8 + bne _080305D0 + movs r3, #1 +_080305D0: + ldrh r0, [r4, #0x32] + ands r2, r0 + cmp r2, #8 + bne _080305DC + movs r0, #2 + orrs r3, r0 +_080305DC: + cmp r3, #3 + bne _080305E4 + movs r0, #1 + b _0803064C +_080305E4: + ldrb r1, [r4, #0x15] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0803061E + movs r0, #1 + ands r0, r3 + cmp r0, #0 + bne _08030608 + adds r0, r4, #0 + bl ProcessMovement + cmp r0, #0 + bne _0803064A + ldrb r0, [r4, #0x15] + movs r1, #0x10 + eors r0, r1 + b _08030648 +_08030608: + cmp r2, #8 + ble _08030610 + movs r0, #0x10 + b _08030612 +_08030610: + movs r0, #0 +_08030612: + strb r0, [r4, #0x15] + ldrb r1, [r4, #0x15] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + bne _0803064A +_0803061E: + movs r0, #2 + ands r3, r0 + cmp r3, #0 + bne _08030638 + adds r0, r4, #0 + bl ProcessMovement + cmp r0, #0 + bne _0803064A + ldrb r0, [r4, #0x15] + movs r1, #0x10 + eors r0, r1 + b _08030648 +_08030638: + ldrh r1, [r4, #0x2e] + movs r0, #0xf + ands r0, r1 + cmp r0, #8 + ble _08030646 + movs r0, #8 + b _08030648 +_08030646: + movs r0, #0x18 +_08030648: + strb r0, [r4, #0x15] +_0803064A: + movs r0, #0 +_0803064C: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/armos/sub_080306C4.inc b/asm/non_matching/armos/sub_080306C4.inc new file mode 100644 index 00000000..a57b4080 --- /dev/null +++ b/asm/non_matching/armos/sub_080306C4.inc @@ -0,0 +1,136 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r4, r0, #0 + movs r1, #1 + bl sub_08049FDC + cmp r0, #0 + beq _080307C0 + adds r0, r4, #0 + adds r0, #0x7a + ldrh r0, [r0] + cmp r0, #0 + beq _080307C0 + movs r0, #0x18 + strb r0, [r4, #0xe] + ldr r0, _080307B0 @ =gUnk_020000B0 + ldr r1, [r0] + adds r0, r4, #0 + bl sub_0800132C + adds r5, r0, #0 + cmp r5, #0xff + beq _080307CC + movs r0, #0 + mov r8, r0 + bl Random + movs r1, #7 + ands r1, r0 + cmp r1, #0 + bne _0803070E + ldrb r0, [r4, #0x14] + adds r6, r4, #0 + adds r6, #0x82 + cmp r0, #0xff + bne _0803072A +_0803070E: + adds r2, r4, #0 + adds r2, #0x82 + ldrb r1, [r2] + movs r0, #3 + ands r0, r1 + adds r6, r2, #0 + cmp r0, #3 + beq _0803072A + adds r0, r5, #4 + movs r1, #0x18 + ands r0, r1 + strb r0, [r4, #0x15] + movs r1, #1 + mov r8, r1 +_0803072A: + mov r7, r8 + cmp r7, #0 + bne _08030746 + bl Random + movs r1, #2 + ands r1, r0 + subs r1, #1 + lsls r1, r1, #3 + adds r1, #4 + adds r1, r5, r1 + movs r0, #0x18 + ands r1, r0 + strb r1, [r4, #0x15] +_08030746: + adds r0, r4, #0 + adds r0, #0x38 + ldrb r0, [r0] + ldr r1, _080307B4 @ =gUnk_02027EB4 + mov ip, r1 + cmp r0, #2 + bne _08030758 + ldr r7, _080307B8 @ =gUnk_0200D654 + mov ip, r7 +_08030758: + movs r0, #0x2e + ldrsh r1, [r4, r0] + ldr r3, _080307BC @ =gUnk_080CE164 + ldrb r0, [r4, #0x15] + lsrs r0, r0, #2 + adds r2, r0, r3 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + movs r7, #0x32 + ldrsh r2, [r4, r7] + adds r0, #1 + adds r0, r0, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r2, r2, r0 + mov r0, ip + movs r3, #0 + bl sub_080AE4CC + cmp r0, #0 + beq _0803079E + movs r0, #4 + adds r1, r5, #0 + ands r1, r0 + eors r1, r0 + lsls r1, r1, #1 + movs r0, #0x10 + ands r5, r0 + orrs r1, r5 + strb r1, [r4, #0x15] + movs r0, #0 + mov r8, r0 +_0803079E: + adds r0, r4, #0 + bl sub_080307D4 + ldrb r0, [r6] + lsls r0, r0, #1 + mov r1, r8 + orrs r0, r1 + strb r0, [r6] + b _080307CC + .align 2, 0 +_080307B0: .4byte gUnk_020000B0 +_080307B4: .4byte gUnk_02027EB4 +_080307B8: .4byte gUnk_0200D654 +_080307BC: .4byte gUnk_080CE164 +_080307C0: + movs r0, #4 + strb r0, [r4, #0xc] + movs r0, #0x78 + strb r0, [r4, #0xe] + movs r0, #0xa0 + strh r0, [r4, #0x24] +_080307CC: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/armos/sub_0803086C.inc b/asm/non_matching/armos/sub_0803086C.inc new file mode 100644 index 00000000..311d5097 --- /dev/null +++ b/asm/non_matching/armos/sub_0803086C.inc @@ -0,0 +1,154 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + adds r5, r0, #0 + ldr r0, [r5, #0x7c] + cmp r0, #0 + bne _08030880 + b _0803099C +_08030880: + ldr r0, _08030928 @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0803088E + b _0803098A +_0803088E: + ldr r0, _0803092C @ =gRoomControls + mov sb, r0 + ldrh r0, [r5, #0x2e] + mov r2, sb + ldrh r1, [r2, #6] + subs r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 + ldrh r0, [r5, #0x32] + ldrh r1, [r2, #8] + subs r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + movs r3, #0x2e + ldrsh r0, [r5, r3] + ldrh r1, [r2, #6] + subs r0, r0, r1 + asrs r4, r0, #4 + movs r2, #0x3f + ands r4, r2 + movs r1, #0x32 + ldrsh r0, [r5, r1] + mov r3, sb + ldrh r1, [r3, #8] + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r2 + lsls r0, r0, #6 + orrs r4, r0 + movs r0, #0x38 + adds r0, r0, r5 + mov r8, r0 + ldrb r1, [r0] + adds r0, r4, #0 + bl GetTileType + ldr r1, _08030930 @ =0x00004049 + mov sl, r1 + cmp r0, sl + bne _08030950 + adds r0, r7, #0 + adds r1, r6, #0 + movs r2, #2 + movs r3, #0xc + bl CheckPlayerInRegion + cmp r0, #0 + beq _0803093C + subs r1, r6, #4 + adds r0, r7, #0 + movs r2, #2 + movs r3, #4 + bl CheckPlayerInRegion + cmp r0, #0 + beq _0803098A + ldr r2, _08030934 @ =gPlayerEntity + 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] + ldr r0, [r5, #0x7c] + bl DoExitTransition + ldr r0, _08030938 @ =gRoomTransition + adds r1, r5, #0 + adds r1, #0x80 + ldrb r1, [r1] + adds r0, #0xae + strh r1, [r0] + movs r0, #1 + b _0803099E + .align 2, 0 +_08030928: .4byte gPlayerState +_0803092C: .4byte gRoomControls +_08030930: .4byte 0x00004049 +_08030934: .4byte gPlayerEntity +_08030938: .4byte gRoomTransition +_0803093C: + ldr r0, _0803094C @ =0x00004022 + mov r3, r8 + ldrb r2, [r3] + adds r1, r4, #0 + bl SetTile + b _0803098A + .align 2, 0 +_0803094C: .4byte 0x00004022 +_08030950: + adds r1, r6, #6 + adds r0, r7, #0 + movs r2, #2 + movs r3, #5 + bl CheckPlayerInRegion + cmp r0, #0 + beq _0803098A + movs r4, #0x2e + ldrsh r1, [r5, r4] + mov r2, sb + ldrh r0, [r2, #6] + subs r1, r1, r0 + asrs r1, r1, #4 + movs r3, #0x3f + ands r1, r3 + movs r4, #0x32 + ldrsh r0, [r5, r4] + ldrh r2, [r2, #8] + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r3 + lsls r0, r0, #6 + orrs r1, r0 + mov r0, r8 + ldrb r2, [r0] + mov r0, sl + bl SetTile +_0803098A: + adds r2, r5, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + strb r0, [r2] +_0803099C: + movs r0, #0 +_0803099E: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/data/animations/enemy/armos.s b/data/animations/enemy/armos.s index b792b0fd..3c8b85d2 100644 --- a/data/animations/enemy/armos.s +++ b/data/animations/enemy/armos.s @@ -4,9 +4,6 @@ .section .rodata .align 2 -gUnk_080CE164:: @ 080CE164 - .incbin "armos/gUnk_080CE164.bin" - gSpriteAnimations_Armos_0:: @ 080CE16C .include "animations/gSpriteAnimations_Armos_0.s" diff --git a/data/const/enemy/armos.s b/data/const/enemy/armos.s deleted file mode 100644 index 6d97965e..00000000 --- a/data/const/enemy/armos.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CE124:: @ 080CE124 - .4byte sub_080301BC - .4byte sub_080301D4 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08030240 - .4byte nullsub_17 - -gUnk_080CE13C:: @ 080CE13C - .4byte sub_0803026C - .4byte sub_0803030C - .4byte sub_08030338 - .4byte sub_08030430 - .4byte sub_08030474 - .4byte sub_080304BC - .4byte sub_080304F4 - .4byte sub_08030524 - .4byte sub_08030554 - -gUnk_080CE160:: @ 080CE160 - .incbin "armos/gUnk_080CE160.bin" diff --git a/include/enemy.h b/include/enemy.h index f1640550..0fce746f 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -175,7 +175,7 @@ void Tektite(Entity*); void WizzrobeWind(); void WizzrobeFire(); void WizzrobeIce(); -void Armos(Entity*); +void Armos(); void Eyegore(Entity*); void Rope(Entity*); void SmallPesto(Entity*); diff --git a/include/functions.h b/include/functions.h index ecdc319b..25b666e5 100644 --- a/include/functions.h +++ b/include/functions.h @@ -173,4 +173,6 @@ extern Entity* sub_080A2A3C(Entity*, u32, u32, u32); extern void sub_0806FCF4(Entity*, s32, s32, s32); extern u32 sub_080041DC(Entity*, u32, u32); extern void sub_080AE58C(Entity*, u32, u32); +extern u32 sub_0800132C(Entity*, Entity*); +extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); #endif diff --git a/linker.ld b/linker.ld index e2f4fce7..dad5e304 100644 --- a/linker.ld +++ b/linker.ld @@ -367,7 +367,7 @@ SECTIONS { src/enemy/wizzrobeIce.o(.text); src/enemy/code_080300AC.o(.text); asm/enemy/code_080300AC.o(.text); - asm/enemy/armos.o(.text); + src/enemy/armos.o(.text); asm/enemy/eyegore.o(.text); src/enemy/rope.o(.text); src/enemy/smallPesto.o(.text); @@ -1019,7 +1019,7 @@ SECTIONS { data/animations/enemy/wizzrobeFire.o(.rodata); src/enemy/wizzrobeIce.o(.rodata); data/animations/enemy/wizzrobeIce.o(.rodata); - data/const/enemy/armos.o(.rodata); + src/enemy/armos.o(.rodata); data/animations/enemy/armos.o(.rodata); data/const/enemy/eyegore.o(.rodata); data/animations/enemy/eyegore.o(.rodata); diff --git a/src/enemy/armos.c b/src/enemy/armos.c new file mode 100644 index 00000000..c2df4d80 --- /dev/null +++ b/src/enemy/armos.c @@ -0,0 +1,355 @@ +/** + * @file armos.c + * @ingroup Enemies + * + * @brief Armos enemy + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "enemy.h" +#include "functions.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[0x10]; + /*0x78*/ u16 unk_78; + /*0x7a*/ u16 unk_7a; + /*0x7c*/ ScreenTransitionData* unk_7c; + /*0x80*/ u8 unk_80; + /*0x81*/ u8 unk_81; + /*0x82*/ u8 unk_82; + /*0x83*/ u8 unk_83; + /*0x84*/ u32 unk_84; +} ArmosEntity; + +extern Hitbox gUnk_080FD2F0; +extern Hitbox gHitbox_15; +extern Entity* gUnk_020000B0; +extern Entity gUnk_02027EB4; +extern Entity gUnk_0200D654; + +extern void (*const gUnk_080CE124[])(ArmosEntity*); +extern void (*const gUnk_080CE13C[])(ArmosEntity*); +extern const u8 gUnk_080CE160[]; +extern const s8 gUnk_080CE164[]; + +void sub_08030150(ArmosEntity*); +void sub_080309C8(ArmosEntity*, u32); +void sub_080309E8(ArmosEntity*); +void sub_08030580(ArmosEntity*); +void sub_080307EC(ArmosEntity*); +bool32 sub_0803086C(ArmosEntity*); +bool32 sub_08030650(ArmosEntity*); +void sub_080309A8(ArmosEntity*); +void sub_08030834(ArmosEntity*); +void sub_080306C4(ArmosEntity*); +void sub_08030A04(ArmosEntity*); +bool32 sub_080305BC(ArmosEntity*); +void sub_080307D4(ArmosEntity*); +void sub_08030590(ArmosEntity*); + +void Armos(ArmosEntity* this) { + EnemyFunctionHandler(super, (EntityActionArray)&gUnk_080CE124); + SetChildOffset(super, 0, 1, -0x10); + sub_08030150(this); +} + +void sub_080301BC(ArmosEntity* this) { + gUnk_080CE13C[super->action](this); +} + +void sub_080301D4(ArmosEntity* this) { + if ((super->action == 1) && (super->field_0x4c == &gPlayerEntity)) { + super->iframes = -0x1e; + } + if ((super->health != 0) && (super->health != this->unk_81)) { + super->action = 8; + sub_080309C8(this, 6); + sub_080309E8(this); + } + if (super->field_0x43 != 0) { + sub_0804A9FC(super, 0x1c); + } + this->unk_81 = super->health; + sub_0804AA30(super, gUnk_080CE124); +} + +void sub_08030240(ArmosEntity* this) { + if (super->animIndex == 6) { + if ((super->frame & 0x80) == 0) { + GetNextFrame(super); + } + } + sub_08001242(super); +} + +void nullsub_17(ArmosEntity* this) { +} + +void sub_0803026C(ArmosEntity* this) { + u16* ptr; + sub_0804A720(super); + this->unk_80 = super->actionDelay; + ptr = &gRoomTransition.armos_data.data[this->unk_80 * 2]; + if (ptr[0] != 0) { + super->x.HALF.HI = ptr[0]; + super->y.HALF.HI = ptr[1]; + this->unk_84 = (gRoomTransition.armos_data.field_0xac >> this->unk_80) & 1; + } else { + this->unk_84 = (0x47d >> this->unk_80) & 1; + } + if (super->type2 != 0) { + this->unk_7c = (ScreenTransitionData*)GetCurrentRoomProperty(super->type2); + } + this->unk_81 = super->health; + sub_08030580(this); + sub_080307EC(this); + if (this->unk_80 == 2 && gRoomControls.origin_y + 0x80 < super->y.HALF.HI) { + super->action = 7; + sub_080309C8(this, 7); + } +} + +void sub_0803030C(ArmosEntity* this) { + if (sub_0803086C(this) == 0 && this->unk_84 != 0 && sub_08030650(this)) { + super->action = 2; + super->subAction = 0; + } +} + +void sub_08030338(ArmosEntity* this) { + u8 bVar2; + u32 uVar3; + + if (this->unk_80 != 2) { + sub_080309A8(this); + } else { + UpdateAnimationVariableFrames(super, 3); + if ((this->unk_84 != 0) && (super->frameIndex == 0x25)) { + super->frameIndex = 0x19; + } + } + if (super->frame == 1) { + if (super->subAction == 0) { + super->subAction = 1; + } + uVar3 = super->actionDelay + 1; + super->actionDelay = (u8)uVar3; + if ((uVar3 & 1) == 0) { + return; + } + super->spriteOffsetX = gUnk_080CE160[(uVar3 & 6) >> 1]; + } else { + if (super->frame == 2) { + super->frame = 0; + if (this->unk_80 != 2) { + super->flags2 = 0xb; + super->hitType = 8; + super->hitbox = (Hitbox*)&gUnk_080FD2F0; + } + sub_08030834(this); + EnqueueSFX(SFX_12A); + return; + } + bVar2 = super->frame & 0x80; + if ((super->frame & 0x80) != 0) { + if (this->unk_80 != 2) { + super->action = 3; + super->animationState = 0xff; + this->unk_7a = 600; + this->unk_82 = 0; + sub_080306C4(this); + sub_080309E8(this); + return; + } + super->action = 6; + super->actionDelay = 0x1a; + super->speed = 0x300; + super->direction = 0x10; + return; + } else { + super->spriteOffsetX = bVar2; + } + } +} + +void sub_08030430(ArmosEntity* this) { + sub_08030A04(this); + if (0x100 < super->speed) { + GetNextFrame(super); + } + sub_080309A8(this); + if (this->unk_7a != 0) { + this->unk_7a--; + } + if (--super->actionDelay == 0) { + sub_080306C4(this); + } +} + +void sub_08030474(ArmosEntity* this) { + if (--super->actionDelay == 0) { + super->action = 3; + super->actionDelay = 1; + this->unk_7a = 0x3c; + sub_080309E8(this); + } else { + if (sub_080305BC(this)) { + sub_08030590(this); + } else { + sub_080307D4(this); + sub_080309A8(this); + } + } +} + +NONMATCH("asm/non_matching/armos/sub_080304BC.inc", void sub_080304BC(ArmosEntity* this)) { + u32 tmp; + + sub_080309A8(this); + tmp = super->frame & 0x80; + if (tmp != 0) { + sub_08030580(this); + } else { + if (super->frame == 1) { + super->frame = tmp; + EnqueueSFX(SFX_12A); + } + } +} +END_NONMATCH + +void sub_080304F4(ArmosEntity* this) { + LinearMoveUpdate(super); + sub_080309A8(this); + if (--super->actionDelay == 0) { + super->action = 7; + sub_080309C8(this, 5); + sub_080307EC(this); + } +} + +void sub_08030524(ArmosEntity* this) { + if ((super->frame & 0x80) == 0) { + sub_080309A8(this); + } else if (super->frame == 1) { + super->frame = 0; + EnqueueSFX(SFX_12A); + } +} + +void sub_08030554(ArmosEntity* this) { + sub_080309A8(this); + if ((super->frame & 0x80) != 0) { + super->action = 3; + sub_080309C8(this, (u32)super->animationState); + sub_080306C4(this); + } +} + +void sub_08030580(ArmosEntity* this) { + super->action = 1; + sub_080309C8(this, 4); +} + +void sub_08030590(ArmosEntity* this) { + super->action = 5; + super->flags2 = 1; + super->hitType = 1; + super->hitbox = (Hitbox*)&gHitbox_15; + sub_080309C8(this, 5); + sub_080307EC(this); +} + +ASM_FUNC("asm/non_matching/armos/sub_080305BC.inc", bool32 sub_080305BC(ArmosEntity* this)) + +bool32 sub_08030650(ArmosEntity* this) { + if (super->type == 0) { + if (super->bitfield == 0x80) { + return 1; + } + } else if (this->unk_80 != 2) { + if ((sub_08049FDC(super, 1) == 0) || (0x20 < (gUnk_020000B0->x.HALF.HI - super->x.HALF.HI) + 0x10U)) { + return FALSE; + } + return TRUE; + } else { + if (sub_08049FDC(super, 1) == 0) { + return FALSE; + } + if (gUnk_020000B0->x.HALF.HI >= (s32)(gRoomControls.origin_x + 0xa8)) { + return FALSE; + } + return TRUE; + } + return FALSE; +} + +ASM_FUNC("asm/non_matching/armos/sub_080306C4.inc", void sub_080306C4(ArmosEntity* this)) + +void sub_080307D4(ArmosEntity* this) { + u8 tmp = super->direction >> 3; + if (tmp != super->animationState) { + super->animationState = tmp; + sub_080309C8(this, tmp); + } +} + +void sub_080307EC(ArmosEntity* this) { + u32 position = COORD_TO_TILE(super); + this->unk_78 = GetTileIndex(position, super->collisionLayer); + SetTile(0x4022, position, (u32)super->collisionLayer); +} + +void sub_08030834(ArmosEntity* this) { + SetTile(this->unk_78, COORD_TO_TILE(super), super->collisionLayer); +} + +ASM_FUNC("asm/non_matching/armos/sub_0803086C.inc", bool32 sub_0803086C(ArmosEntity* this)) + +void sub_080309A8(ArmosEntity* this) { + GetNextFrame(super); + if ((this->unk_84 != 0) && (super->frameIndex == 0x25)) { + super->frameIndex = 0x19; + } +} + +void sub_080309C8(ArmosEntity* this, u32 param_2) { + InitializeAnimation(super, param_2); + if ((this->unk_84 != 0) && (super->frameIndex == 0x25)) { + super->frameIndex = 0x19; + } +} + +void sub_080309E8(ArmosEntity* this) { + if (super->health < 5) { + super->speed = 0x120; + } else if (super->health <= 8) { + super->speed = 0xe0; + } +} + +void sub_08030A04(ArmosEntity* this) { + ProcessMovement(super); + if ((super->frame & 1) != 0) { + super->frame = super->frame & 0xfe; + EnqueueSFX(SFX_101); + } +} + +void (*const gUnk_080CE124[])(ArmosEntity*) = { + sub_080301BC, sub_080301D4, (void (*)(ArmosEntity*))sub_08001324, (void (*)(ArmosEntity*))sub_0804A7D4, + sub_08030240, nullsub_17, +}; +void (*const gUnk_080CE13C[])(ArmosEntity*) = { + sub_0803026C, sub_0803030C, sub_08030338, sub_08030430, sub_08030474, + sub_080304BC, sub_080304F4, sub_08030524, sub_08030554, +}; +const u8 gUnk_080CE160[] = { + 255, + 0, + 1, + 0, +}; +const s8 gUnk_080CE164[] = { 0, -7, 7, 0, 0, 7, -7, 0 }; diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c index be7f9dad..5aeca1ca 100644 --- a/src/enemy/helmasaur.c +++ b/src/enemy/helmasaur.c @@ -11,7 +11,6 @@ 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; diff --git a/src/enemy/leever.c b/src/enemy/leever.c index 3f33914b..df9542f0 100644 --- a/src/enemy/leever.c +++ b/src/enemy/leever.c @@ -163,8 +163,6 @@ bool32 Leever_PlayerInRange(Entity* ent, s32 arg2) { } } -extern u32 sub_0800132C(Entity*, Entity*); - void Leever_Move(Entity* this) { if (sub_08049FDC(this, 1) == 0) { this->field_0x74.HWORD = 1; diff --git a/src/enemy/octorokGolden.c b/src/enemy/octorokGolden.c index bcad77be..60137119 100644 --- a/src/enemy/octorokGolden.c +++ b/src/enemy/octorokGolden.c @@ -10,7 +10,6 @@ const u8 gUnk_080CF498[]; extern u16* GetLayerByIndex(u32); extern s32 sub_080012DC(Entity*); -extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); extern u32 sub_0804A044(Entity*, Entity*, u32); void sub_08037E14(Entity* this); diff --git a/src/enemy/sensorBladeTrap.c b/src/enemy/sensorBladeTrap.c index 77af113a..2c8c4ecf 100644 --- a/src/enemy/sensorBladeTrap.c +++ b/src/enemy/sensorBladeTrap.c @@ -6,9 +6,9 @@ */ #include "enemy.h" +#include "functions.h" extern u32 sub_0804A024(Entity*, u32, u32); -extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); extern bool32 sub_080AF038(Entity*); extern Entity gUnk_02027EB4; diff --git a/src/npc/npc5.c b/src/npc/npc5.c index c7640746..3ffa94fb 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -41,7 +41,6 @@ u32 PointInsideRadius(s32, s32, s32); extern Entity gUnk_0200D654; extern Entity gUnk_02027EB4; -extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); extern u32 sub_080AF1EC(Entity*); u32 sub_080611D4(Entity*); diff --git a/src/object/objectB2.c b/src/object/objectB2.c index b40c73b6..1e5f0b58 100644 --- a/src/object/objectB2.c +++ b/src/object/objectB2.c @@ -2,8 +2,6 @@ #include "entity.h" #include "functions.h" -extern u32 sub_080AE4CC(Entity*, u32, u32, u32); - extern void* gUnk_02027EB4; extern void* gUnk_0200D654; diff --git a/src/projectile/guardLineOfSight.c b/src/projectile/guardLineOfSight.c index 9d8472f3..909530b4 100644 --- a/src/projectile/guardLineOfSight.c +++ b/src/projectile/guardLineOfSight.c @@ -5,7 +5,6 @@ #include "projectile.h" extern u32 sub_080644C8(Entity*); -extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); extern Entity gUnk_02027EB4; extern const Hitbox gUnk_080FD1E4;