summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/enemy/armos.s1164
-rw-r--r--asm/non_matching/armos/sub_080304BC.inc29
-rw-r--r--asm/non_matching/armos/sub_080305BC.inc86
-rw-r--r--asm/non_matching/armos/sub_080306C4.inc136
-rw-r--r--asm/non_matching/armos/sub_0803086C.inc154
-rw-r--r--data/animations/enemy/armos.s3
-rw-r--r--data/const/enemy/armos.s27
-rw-r--r--include/enemy.h2
-rw-r--r--include/functions.h2
-rw-r--r--linker.ld4
-rw-r--r--src/enemy/armos.c355
-rw-r--r--src/enemy/helmasaur.c1
-rw-r--r--src/enemy/leever.c2
-rw-r--r--src/enemy/octorokGolden.c1
-rw-r--r--src/enemy/sensorBladeTrap.c2
-rw-r--r--src/npc/npc5.c1
-rw-r--r--src/object/objectB2.c2
-rw-r--r--src/projectile/guardLineOfSight.c1
18 files changed, 766 insertions, 1206 deletions
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;