From 8b303867597a0bb7670499287d16ee5f8c728505 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 26 Jan 2022 18:33:14 +0200 Subject: [PATCH 1/2] Decompile spiny beetle --- asm/enemy/spinyBeetle.s | 966 --------------------------------- assets/assets.json | 10 - data/const/enemy/spinyBeetle.s | 27 - linker.ld | 4 +- src/enemy/spinyBeetle.c | 396 ++++++++++++++ 5 files changed, 398 insertions(+), 1005 deletions(-) delete mode 100644 asm/enemy/spinyBeetle.s delete mode 100644 data/const/enemy/spinyBeetle.s create mode 100644 src/enemy/spinyBeetle.c diff --git a/asm/enemy/spinyBeetle.s b/asm/enemy/spinyBeetle.s deleted file mode 100644 index 1938f48e..00000000 --- a/asm/enemy/spinyBeetle.s +++ /dev/null @@ -1,966 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start SpinyBeetle -SpinyBeetle: @ 0x0803379C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080337B8 @ =gUnk_080CEBEC - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_080337B8: .4byte gUnk_080CEBEC - - thumb_func_start sub_080337BC -sub_080337BC: @ 0x080337BC - push {lr} - ldr r2, _080337D0 @ =gUnk_080CEC04 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080337D0: .4byte gUnk_080CEC04 - - thumb_func_start sub_080337D4 -sub_080337D4: @ 0x080337D4 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _080337E8 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_080337E8: - ldr r1, _08033868 @ =gUnk_080CEBEC - adds r0, r4, #0 - bl sub_0804AA30 - adds r2, r4, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - adds r5, r2, #0 - cmp r0, #0 - beq _08033864 - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0803381A - ldr r0, [r4, #0x54] - cmp r0, #0 - beq _0803381A - adds r0, r4, #0 - bl sub_08033E1C -_0803381A: - ldrb r1, [r5] - movs r0, #0x3f - ands r0, r1 - cmp r0, #0x14 - bne _08033864 - ldrb r0, [r4, #0xc] - cmp r0, #5 - beq _08033864 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x5a - strb r0, [r4, #0xe] - movs r0, #0x10 - strb r0, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x49 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_08033D78 - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation -_08033864: - pop {r4, r5, pc} - .align 2, 0 -_08033868: .4byte gUnk_080CEBEC - - thumb_func_start nullsub_159 -nullsub_159: @ 0x0803386C - bx lr - .align 2, 0 - - thumb_func_start sub_08033870 -sub_08033870: @ 0x08033870 - push {r4, lr} - adds r4, r0, #0 - bl sub_08001242 - ldrb r0, [r4, #0xc] - cmp r0, #5 - beq _0803388E - adds r0, r4, #0 - bl sub_08033DF0 - cmp r0, #0 - beq _0803388E - adds r0, r4, #0 - bl sub_08033E1C -_0803388E: - pop {r4, pc} - - thumb_func_start sub_08033890 -sub_08033890: @ 0x08033890 - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r6, #0xc] - strb r1, [r6, #0xe] - strb r1, [r6, #0xf] - ldr r0, [r6, #0x2c] - ldr r3, _0803394C @ =0xFFF00000 - ands r0, r3 - movs r2, #0x80 - lsls r2, r2, #0xc - orrs r0, r2 - str r0, [r6, #0x7c] - adds r4, r6, #0 - adds r4, #0x80 - ldr r0, [r6, #0x30] - ands r0, r3 - orrs r0, r2 - str r0, [r4] - ldr r0, [r6, #0x7c] - str r0, [r6, #0x2c] - ldr r0, [r4] - str r0, [r6, #0x30] - adds r0, r6, #0 - adds r0, #0x79 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - subs r0, #2 - strb r1, [r0] - adds r0, #3 - strb r1, [r0] - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r2, _08033950 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r4, r6, #0 - adds r4, #0x74 - strh r1, [r4] - ldrh r0, [r4] - adds r5, r6, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x76 - strh r0, [r1] - ldr r0, _08033954 @ =0x00004022 - ldrh r1, [r4] - ldrb r2, [r5] - bl SetTile - ldrb r1, [r6, #0xa] - movs r0, #0x7d - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - bne _08033928 - bl DeleteThisEntity -_08033928: - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPosition - str r4, [r6, #0x54] - str r6, [r4, #0x50] - ldrb r0, [r6, #0xa] - cmp r0, #1 - bne _08033940 - adds r0, r6, #0 - bl sub_08033EA8 -_08033940: - adds r0, r6, #0 - movs r1, #0 - bl InitializeAnimation - pop {r4, r5, r6, pc} - .align 2, 0 -_0803394C: .4byte 0xFFF00000 -_08033950: .4byte gRoomControls -_08033954: .4byte 0x00004022 - - thumb_func_start sub_08033958 -sub_08033958: @ 0x08033958 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_08033DF0 - cmp r0, #0 - beq _08033982 - adds r0, r4, #0 - bl sub_08033E1C - adds r0, r4, #0 - adds r0, #0x76 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x74 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl sub_0807B9B8 - b _08033A72 -_08033982: - adds r1, r4, #0 - adds r1, #0x7b - ldrb r0, [r1] - cmp r0, #0 - beq _08033992 - subs r0, #1 - strb r0, [r1] - b _08033A72 -_08033992: - ldr r0, [r4, #0x7c] - str r0, [r4, #0x2c] - adds r0, r4, #0 - adds r0, #0x80 - ldr r0, [r0] - str r0, [r4, #0x30] - adds r0, r4, #0 - movs r1, #1 - movs r2, #0x10 - bl sub_0804A024 - adds r5, r0, #0 - cmp r5, #0x10 - beq _080339E0 - cmp r5, #0x10 - bhi _080339BC - cmp r5, #0 - beq _080339C6 - cmp r5, #8 - beq _080339F0 - b _08033A10 -_080339BC: - cmp r5, #0x18 - beq _08033A00 - cmp r5, #0xff - bne _08033A10 - b _08033A72 -_080339C6: - adds r0, r4, #0 - adds r0, #0x78 - ldrb r0, [r0] - cmp r0, #0 - beq _08033A72 - movs r1, #0x32 - ldrsh r0, [r4, r1] - ldr r1, _080339DC @ =gPlayerEntity - movs r2, #0x32 - ldrsh r1, [r1, r2] - b _08033A0A - .align 2, 0 -_080339DC: .4byte gPlayerEntity -_080339E0: - ldr r0, _080339EC @ =gPlayerEntity - movs r1, #0x32 - ldrsh r0, [r0, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - b _08033A0A - .align 2, 0 -_080339EC: .4byte gPlayerEntity -_080339F0: - ldr r0, _080339FC @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r0, r1] - movs r2, #0x2e - ldrsh r1, [r4, r2] - b _08033A0A - .align 2, 0 -_080339FC: .4byte gPlayerEntity -_08033A00: - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r1, _08033A74 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r1, r2] -_08033A0A: - subs r0, r0, r1 - cmp r0, #0x30 - bgt _08033A72 -_08033A10: - ldr r0, [r4, #0x54] - cmp r0, #0 - beq _08033A1E - bl sub_0806F520 - cmp r0, #0 - bne _08033A72 -_08033A1E: - adds r1, r4, #0 - adds r1, #0x78 - ldrb r0, [r1] - cmp r0, #0 - bne _08033A2C - movs r0, #1 - strb r0, [r1] -_08033A2C: - movs r0, #2 - strb r0, [r4, #0xc] - strb r5, [r4, #0x15] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldr r0, [r4, #0x30] - ldr r1, _08033A78 @ =0xFFF00000 - ands r0, r1 - movs r1, #0xc0 - lsls r1, r1, #0xc - orrs r0, r1 - str r0, [r4, #0x30] - adds r0, r4, #0 - adds r0, #0x76 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x74 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl sub_0807B9B8 - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation -_08033A72: - pop {r4, r5, pc} - .align 2, 0 -_08033A74: .4byte gPlayerEntity -_08033A78: .4byte 0xFFF00000 - - thumb_func_start sub_08033A7C -sub_08033A7C: @ 0x08033A7C - push {r4, lr} - adds r4, r0, #0 - bl sub_08033DF0 - cmp r0, #0 - beq _08033A90 - adds r0, r4, #0 - bl sub_08033E1C - b _08033AC8 -_08033A90: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08033AC8 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - movs r0, #0x20 - strb r0, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x59 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation -_08033AC8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08033ACC -sub_08033ACC: @ 0x08033ACC - push {r4, lr} - adds r4, r0, #0 - bl sub_08033DF0 - cmp r0, #0 - beq _08033AE0 - adds r0, r4, #0 - bl sub_08033E1C - b _08033B42 -_08033AE0: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _08033AF8 - subs r0, #1 - strb r0, [r4, #0xf] - b _08033B42 -_08033AF8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08033B3C - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - ldr r2, [r4, #0x2c] - ldr r1, _08033B38 @ =0xFFF00000 - ands r2, r1 - movs r0, #0x80 - lsls r0, r0, #0xc - orrs r2, r0 - str r2, [r4, #0x2c] - ldr r0, [r4, #0x30] - ands r0, r1 - movs r1, #0xc0 - lsls r1, r1, #0xc - orrs r0, r1 - str r0, [r4, #0x30] - str r2, [r4, #0x7c] - adds r1, r4, #0 - adds r1, #0x80 - str r0, [r1] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - b _08033B42 - .align 2, 0 -_08033B38: .4byte 0xFFF00000 -_08033B3C: - adds r0, r4, #0 - bl sub_08033D78 -_08033B42: - pop {r4, pc} - - thumb_func_start sub_08033B44 -sub_08033B44: @ 0x08033B44 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0xc - adds r4, r0, #0 - bl sub_08033DF0 - cmp r0, #0 - beq _08033B62 - adds r0, r4, #0 - bl sub_08033E1C - b _08033C82 -_08033B62: - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _08033B76 - b _08033C82 -_08033B76: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #0 - mov r8, r0 - adds r1, r4, #0 - adds r1, #0x80 - str r1, [sp, #4] - adds r6, r4, #0 - adds r6, #0x29 - adds r2, r4, #0 - adds r2, #0x7b - str r2, [sp] - adds r5, r4, #0 - adds r5, #0x74 - adds r3, r4, #0 - adds r3, #0x38 - str r3, [sp, #8] - movs r7, #0x76 - adds r7, r7, r4 - mov sl, r7 - ldr r0, _08033C20 @ =gRoomControls - mov sb, r0 -_08033BB2: - ldr r1, [r4, #0x2c] - ldr r3, _08033C24 @ =0xFFF00000 - ands r1, r3 - movs r2, #0x80 - lsls r2, r2, #0xc - orrs r1, r2 - str r1, [r4, #0x2c] - ldr r0, [r4, #0x30] - ands r0, r3 - orrs r0, r2 - str r0, [r4, #0x30] - str r1, [r4, #0x7c] - ldr r1, [sp, #4] - str r0, [r1] - ldrb r0, [r6] - movs r2, #0x39 - rsbs r2, r2, #0 - adds r1, r2, #0 - ands r0, r1 - strb r0, [r6] - movs r0, #0x78 - ldr r3, [sp] - strb r0, [r3] - movs r7, #0x2e - ldrsh r2, [r4, r7] - mov r1, sb - ldrh r0, [r1, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - movs r7, #0x32 - ldrsh r0, [r4, r7] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r2, r0 - strh r2, [r5] - ldrh r0, [r5] - ldr r2, [sp, #8] - ldrb r1, [r2] - bl GetTileIndex - mov r3, sl - strh r0, [r3] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r7, _08033C28 @ =0x00004022 - cmp r0, r7 - beq _08033C2C - movs r0, #1 - add r8, r0 - b _08033C68 - .align 2, 0 -_08033C20: .4byte gRoomControls -_08033C24: .4byte 0xFFF00000 -_08033C28: .4byte 0x00004022 -_08033C2C: - ldrb r1, [r4, #0x15] - movs r0, #0x18 - ands r0, r1 - lsrs r0, r0, #2 - cmp r0, #2 - beq _08033C54 - cmp r0, #2 - bgt _08033C42 - cmp r0, #0 - beq _08033C4C - b _08033C68 -_08033C42: - cmp r0, #4 - beq _08033C5A - cmp r0, #6 - beq _08033C62 - b _08033C68 -_08033C4C: - ldrh r0, [r4, #0x32] - adds r0, #0x10 - strh r0, [r4, #0x32] - b _08033C68 -_08033C54: - ldrh r0, [r4, #0x2e] - subs r0, #0x10 - b _08033C66 -_08033C5A: - ldrh r0, [r4, #0x32] - subs r0, #0x10 - strh r0, [r4, #0x32] - b _08033C68 -_08033C62: - ldrh r0, [r4, #0x2e] - adds r0, #0x10 -_08033C66: - strh r0, [r4, #0x2e] -_08033C68: - mov r1, r8 - cmp r1, #0 - beq _08033BB2 - ldr r0, _08033C90 @ =0x00004022 - ldrh r1, [r5] - ldr r3, [sp, #8] - ldrb r2, [r3] - bl SetTile - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_08033C82: - add sp, #0xc - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08033C90: .4byte 0x00004022 - - thumb_func_start sub_08033C94 -sub_08033C94: @ 0x08033C94 - push {r4, lr} - adds r4, r0, #0 - movs r1, #3 - bl UpdateAnimationVariableFrames - adds r1, r4, #0 - adds r1, #0x79 - ldrb r0, [r1] - cmp r0, #1 - beq _08033CD2 - cmp r0, #1 - bgt _08033CB2 - cmp r0, #0 - beq _08033CB8 - b _08033D76 -_08033CB2: - cmp r0, #2 - beq _08033D18 - b _08033D76 -_08033CB8: - movs r0, #1 - strb r0, [r1] - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - beq _08033CD2 - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] -_08033CD2: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - bne _08033D76 - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #2 - strb r0, [r1] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x63 - strb r2, [r0] - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - adds r0, #0x14 - strb r0, [r4, #0x15] - bl Random - adds r1, r0, #0 - movs r0, #3 - ands r1, r0 - cmp r1, #0 - beq _08033D12 - cmp r1, #2 - beq _08033D68 - b _08033D6E -_08033D12: - ldrb r0, [r4, #0x15] - adds r0, #8 - b _08033D6C -_08033D18: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _08033D24 - subs r0, #1 - strb r0, [r4, #0xf] - b _08033D2A -_08033D24: - adds r0, r4, #0 - bl sub_08033D78 -_08033D2A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08033D76 - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x20 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - adds r0, #0x14 - strb r0, [r4, #0x15] - bl Random - adds r1, r0, #0 - movs r0, #3 - ands r1, r0 - cmp r1, #1 - beq _08033D62 - cmp r1, #3 - beq _08033D68 - b _08033D6E -_08033D62: - ldrb r0, [r4, #0x15] - adds r0, #8 - b _08033D6C -_08033D68: - ldrb r0, [r4, #0x15] - adds r0, #0x18 -_08033D6C: - strb r0, [r4, #0x15] -_08033D6E: - ldrb r1, [r4, #0x15] - movs r0, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] -_08033D76: - pop {r4, pc} - - thumb_func_start sub_08033D78 -sub_08033D78: @ 0x08033D78 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0x15] - movs r2, #0x18 - ands r2, r0 - lsrs r2, r2, #2 - ldr r0, _08033DE4 @ =gUnk_080CEC1C - adds r2, r2, r0 - movs r1, #0x2e - ldrsh r0, [r6, r1] - movs r1, #0 - ldrsb r1, [r2, r1] - adds r0, r0, r1 - ldr r4, _08033DE8 @ =gRoomControls - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r5, r0, #4 - movs r3, #0x3f - ands r5, r3 - movs r1, #0x32 - ldrsh r0, [r6, r1] - movs r1, #1 - ldrsb r1, [r2, r1] - adds r0, r0, r1 - ldrh r1, [r4, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r5, r0 - adds r4, r6, #0 - adds r4, #0x38 - ldrb r1, [r4] - adds r0, r5, #0 - bl GetTileType - adds r1, r0, #0 - ldr r0, _08033DEC @ =0x000001C5 - cmp r1, r0 - bhi _08033DCE - subs r0, #1 - cmp r1, r0 - bhs _08033DE2 -_08033DCE: - ldrb r1, [r4] - adds r0, r5, #0 - bl sub_080002E0 - subs r0, #1 - cmp r0, #0x3e - bls _08033DE2 - adds r0, r6, #0 - bl ProcessMovement -_08033DE2: - pop {r4, r5, r6, pc} - .align 2, 0 -_08033DE4: .4byte gUnk_080CEC1C -_08033DE8: .4byte gRoomControls -_08033DEC: .4byte 0x000001C5 - - thumb_func_start sub_08033DF0 -sub_08033DF0: @ 0x08033DF0 - push {lr} - movs r2, #0 - ldr r1, [r0, #0x54] - cmp r1, #0 - beq _08033E16 - ldrb r0, [r1, #0xc] - cmp r0, #3 - beq _08033E10 - cmp r0, #3 - bgt _08033E0A - cmp r0, #2 - beq _08033E16 - b _08033E18 -_08033E0A: - cmp r0, #4 - bne _08033E18 - b _08033E16 -_08033E10: - ldrb r0, [r1, #0xd] - cmp r0, #1 - bls _08033E18 -_08033E16: - movs r2, #1 -_08033E18: - adds r0, r2, #0 - pop {pc} - - thumb_func_start sub_08033E1C -sub_08033E1C: @ 0x08033E1C - push {r4, lr} - adds r4, r0, #0 - movs r2, #0 - movs r3, #5 - movs r0, #5 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x79 - strb r2, [r0] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - movs r0, #0x29 - adds r0, r0, r4 - mov ip, r0 - ldrb r1, [r0] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r3 - mov r1, ip - strb r0, [r1] - ldr r0, [r4, #0x30] - ldr r1, _08033EA4 @ =0xFFF00000 - ands r0, r1 - movs r1, #0xc0 - lsls r1, r1, #0xc - orrs r0, r1 - str r0, [r4, #0x30] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x19 - strb r0, [r1] - mov r0, ip - ldrb r1, [r0] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - mov r1, ip - strb r0, [r1] - movs r0, #0x30 - strb r0, [r4, #0xe] - strb r2, [r4, #0xf] - adds r0, #0xd0 - strh r0, [r4, #0x24] - str r2, [r4, #0x54] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - movs r2, #0xc - rsbs r2, r2, #0 - adds r0, r4, #0 - movs r1, #0xa - bl CreateSpeechBubbleExclamationMark - pop {r4, pc} - .align 2, 0 -_08033EA4: .4byte 0xFFF00000 - - thumb_func_start sub_08033EA8 -sub_08033EA8: @ 0x08033EA8 - push {lr} - adds r2, r0, #0 - ldr r0, _08033EC4 @ =gPlayerState - adds r0, #0xac - ldrh r1, [r0] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _08033EC8 - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x95 - b _08033ECE - .align 2, 0 -_08033EC4: .4byte gPlayerState -_08033EC8: - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x63 -_08033ECE: - strb r0, [r1] - pop {pc} - .align 2, 0 - diff --git a/assets/assets.json b/assets/assets.json index cb2905a8..f373e164 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -25971,16 +25971,6 @@ "size": 20, "type": "animation" }, - { - "path": "spinyBeetle/unusedLabel_0CEBDC.bin", - "start": 846812, - "size": 16 - }, - { - "path": "spinyBeetle/gUnk_080CEC1C.bin", - "start": 846876, - "size": 8 - }, { "path": "animations/gSpriteAnimations_MazaalHead_0.bin", "start": 847280, diff --git a/data/const/enemy/spinyBeetle.s b/data/const/enemy/spinyBeetle.s deleted file mode 100644 index a8d3efeb..00000000 --- a/data/const/enemy/spinyBeetle.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -unusedLabel_0CEBDC:: - .incbin "spinyBeetle/unusedLabel_0CEBDC.bin" - -gUnk_080CEBEC:: @ 080CEBEC - .4byte sub_080337BC - .4byte sub_080337D4 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08033870 - .4byte nullsub_159 - -gUnk_080CEC04:: @ 080CEC04 - .4byte sub_08033890 - .4byte sub_08033958 - .4byte sub_08033A7C - .4byte sub_08033ACC - .4byte sub_08033B44 - .4byte sub_08033C94 - -gUnk_080CEC1C:: @ 080CEC1C - .incbin "spinyBeetle/gUnk_080CEC1C.bin" diff --git a/linker.ld b/linker.ld index 013228aa..5e876c73 100644 --- a/linker.ld +++ b/linker.ld @@ -375,7 +375,7 @@ SECTIONS { asm/enemy/mulldozer.o(.text); src/enemy/bombarossa.o(.text); src/enemy/wisp.o(.text); - asm/enemy/spinyBeetle.o(.text); + src/enemy/spinyBeetle.o(.text); src/enemy/mazaalHead.o(.text); src/enemy/mazaalMacro.o(.text); src/enemy/mazaalHand.o(.text); @@ -1036,7 +1036,7 @@ SECTIONS { data/animations/enemy/bombarossa.o(.rodata); data/const/enemy/wisp.o(.rodata); data/animations/enemy/wisp.o(.rodata); - data/const/enemy/spinyBeetle.o(.rodata); + src/enemy/spinyBeetle.o(.rodata); data/animations/enemy/spinyBeetle.o(.rodata); src/enemy/mazaalHead.o(.rodata); data/animations/enemy/mazaalHead.o(.rodata); diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c new file mode 100644 index 00000000..c802127c --- /dev/null +++ b/src/enemy/spinyBeetle.c @@ -0,0 +1,396 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "object.h" + +typedef struct { + Entity base; + u8 filler[0xc]; + u16 tile; + u16 tileIndex; + u8 unk_78; + u8 unk_79; + u8 unk_7a; + u8 unk_7b; + s32 unk_7c; + s32 unk_80; + u16 unk_84; +} SpinyBeetleEntity; + +void (*const gUnk_080CEBEC[])(Entity*); +void (*const gUnk_080CEC04[])(SpinyBeetleEntity*); +const s8 gUnk_080CEC1C[]; + +extern void sub_08033E1C(SpinyBeetleEntity*); +extern void sub_08033D78(SpinyBeetleEntity*); +extern u32 sub_08033DF0(SpinyBeetleEntity*); +extern void SpinyBeetle_SetHitType(SpinyBeetleEntity*); +extern void sub_0804AA30(Entity*, EntityActionArray); +extern void sub_0807B9B8(s32, s32, s32); +extern u32 sub_0804A024(Entity*, u32, u32); + +void SpinyBeetle(Entity* this) { + EnemyFunctionHandler(this, gUnk_080CEBEC); + SetChildOffset(this, 0, 1, -0x10); +} + +void sub_080337BC(SpinyBeetleEntity* this) { + gUnk_080CEC04[super->action](this); +} + +void sub_080337D4(SpinyBeetleEntity* this) { + if (super->field_0x43) { + sub_0804A9FC(super, 0x1c); + } + + sub_0804AA30(super, gUnk_080CEBEC); + if (super->bitfield & 0x80) { + if (super->iframes > 0 && super->child) { + sub_08033E1C(this); + } + + if ((super->bitfield & 0x3f) == 0x14 && super->action != 5) { + super->action = 3; + super->actionDelay = 0x5a; + super->field_0xf = 0x10; + super->spritePriority.b1 = 1; + super->direction = DirectionRoundUp(sub_08049F84(super, 1)); + sub_08033D78(this); + InitializeAnimation(super, 3); + } + } +} + +void nullsub_159(SpinyBeetleEntity* this) { +} + +void sub_08033870(SpinyBeetleEntity* this) { + sub_08001242(super); + + if (super->action != 5) { + if (sub_08033DF0(this)) { + sub_08033E1C(this); + } + } +} + +void SpinyBeetle_Init(SpinyBeetleEntity* this) { + Entity* obj; + super->action = 1; + super->actionDelay = 0; + super->field_0xf = 0; + this->unk_7c = (super->x.WORD & 0xfff00000) | 0x80000; + this->unk_80 = (super->y.WORD & 0xfff00000) | 0x80000; + super->x.WORD = this->unk_7c; + super->y.WORD = this->unk_80; + this->unk_79 = 0; + this->unk_7a = 0; + this->unk_78 = 0; + this->unk_7b = 0; + this->tile = COORD_TO_TILE(super); + this->tileIndex = GetTileIndex(this->tile, super->collisionLayer); + SetTile(0x4022, this->tile, super->collisionLayer); + obj = CreateObject(OBJECT_ON_BEETLE, super->type, 0); + + if (obj == NULL) { + DeleteThisEntity(); + } + + CopyPosition(super, obj); + super->child = obj; + obj->parent = super; + + if (super->type == 1) { + SpinyBeetle_SetHitType(this); + } + + InitializeAnimation(super, 0); +} + +void sub_08033958(SpinyBeetleEntity* this) { + s32 r0, r1; + u32 direction; + if (sub_08033DF0(this)) { + sub_08033E1C(this); + sub_0807B9B8(this->tileIndex, this->tile, super->collisionLayer); + return; + } + + if (this->unk_7b) { + this->unk_7b--; + return; + } + + super->x.WORD = this->unk_7c; + super->y.WORD = this->unk_80; + direction = sub_0804A024(super, 1, 0x10); + switch (direction) { + case 0xff: + return; + case 0: + if (this->unk_78 == 0) + return; + if (super->y.HALF.HI - gPlayerEntity.y.HALF.HI > 0x30) + return; + break; + case 0x10: + if (gPlayerEntity.y.HALF.HI - super->y.HALF.HI > 0x30) + return; + break; + case 8: + if (gPlayerEntity.x.HALF.HI - super->x.HALF.HI > 0x30) + return; + break; + case 0x18: + if (super->x.HALF.HI - gPlayerEntity.x.HALF.HI > 0x30) + return; + break; + } + + if (super->child && sub_0806F520(super->child)) { + return; + } + + if (this->unk_78 == 0) { + this->unk_78 = 1; + } + + super->action = 2; + super->direction = direction; + super->spriteSettings.draw = 1; + COLLISION_ON(super); + + super->y.WORD = (super->y.WORD & 0xfff00000) | 0xC0000; + sub_0807B9B8(this->tileIndex, this->tile, super->collisionLayer); + InitializeAnimation(super, 2); +} + +void sub_08033A7C(SpinyBeetleEntity* this) { + if (sub_08033DF0(this)) { + sub_08033E1C(this); + return; + } + + GetNextFrame(super); + if ((super->frame & 0x80) == 0) + return; + + super->action = 3; + super->actionDelay = 0x78; + super->field_0xf = 0x20; + super->spritePriority.b1 = 1; + InitializeAnimation(super, 3); +} + +void sub_08033ACC(SpinyBeetleEntity* this) { + if (sub_08033DF0(this)) { + sub_08033E1C(this); + return; + } + + GetNextFrame(super); + GetNextFrame(super); + + if (super->field_0xf) { + super->field_0xf--; + return; + } + + if (--super->actionDelay == 0) { + super->action = 4; + super->actionDelay = 0x78; + super->x.WORD = (super->x.WORD & 0xfff00000) | 0x80000; + super->y.WORD = (super->y.WORD & 0xfff00000) | 0xC0000; + this->unk_7c = super->x.WORD; + this->unk_80 = super->y.WORD; + InitializeAnimation(super, 4); + } else { + sub_08033D78(this); + } +} + +void sub_08033B44(SpinyBeetleEntity* this) { + u32 unk_80; + u32 stop; + if (sub_08033DF0(this)) { + sub_08033E1C(this); + return; + } + + GetNextFrame(super); + if (--super->actionDelay) + return; + + super->action = 1; + super->spriteSettings.draw = 0; + COLLISION_OFF(super); + + stop = 0; + while (!stop) { + super->x.WORD = (super->x.WORD & 0xfff00000) | 0x80000; + super->y.WORD = (super->y.WORD & 0xfff00000) | 0x80000; + this->unk_7c = super->x.WORD; + this->unk_80 = super->y.WORD; + super->spritePriority.b1 = 0; + this->unk_7b = 0x78; + this->tile = COORD_TO_TILE(super); + this->tileIndex = GetTileIndex(this->tile, super->collisionLayer); + + if (this->tileIndex != 0x4022) { + stop += 1; + } else { + switch (DirectionRound(super->direction) >> 2) { + case 0: + super->y.HALF.HI += 0x10; + break; + case 2: + super->x.HALF.HI -= 0x10; + break; + case 4: + super->y.HALF.HI -= 0x10; + break; + case 6: + super->x.HALF.HI += 0x10; + break; + } + } + } + + SetTile(0x4022, this->tile, super->collisionLayer); + InitializeAnimation(super, 0); +} + +void sub_08033C94(SpinyBeetleEntity* this) { + UpdateAnimationVariableFrames(super, 3); + switch (this->unk_79) { + case 0: + this->unk_79 = 1; + if (super->spriteSettings.draw != 1) { + super->spriteSettings.draw = 1; + } + case 1: + if (--super->actionDelay) + return; + this->unk_79 = 2; + super->actionDelay = 0x78; + super->spriteOffsetY = 0; + super->direction = sub_08049F84(super, 1) + 0x14; + + switch (Random() & 3) { + case 0: + super->direction += 8; + break; + case 2: + super->direction += 0x18; + break; + } + + super->direction &= 0x18; + break; + case 2: + if (super->field_0xf != 0) { + super->field_0xf--; + } else { + sub_08033D78(this); + } + + if (--super->actionDelay) + return; + super->actionDelay = (Random() & 0x1f) + 0x20; + super->direction = sub_08049F84(super, 1) + 0x14; + switch (Random() & 3) { + case 1: + super->direction += 8; + break; + case 3: + super->direction += 0x18; + break; + } + + super->direction &= 0x18; + break; + } +} + +void sub_08033D78(SpinyBeetleEntity* this) { + u32 dir = DirectionRound(super->direction) >> 2; + const s8* ptr = gUnk_080CEC1C + dir; + s32 tile; + u32 type; + tile = COORD_TO_TILE_OFFSET(super, -ptr[0], -ptr[1]); + type = GetTileType(tile, super->collisionLayer); + + switch (type) { + case 0x1c4: + case 0x1c5: + break; + default: + if (sub_080002E0(tile, super->collisionLayer) - 1 > 0x3e) + ProcessMovement(super); + break; + } +} + +bool32 sub_08033DF0(SpinyBeetleEntity* this) { + bool32 rv = 0; + if (super->child == NULL) { + rv = 1; + } else { + switch (super->child->action) { + case 4: + rv = 1; + break; + case 3: + if (super->child->subAction > 1) { + rv = 1; + } + break; + case 2: + rv = 1; + break; + } + } + + return rv; +} + +void sub_08033E1C(SpinyBeetleEntity* this) { + super->action = 5; + this->unk_79 = 0; + super->spriteSettings.draw = 1; + COLLISION_ON(super); + super->spritePriority.b0 = 5; + super->y.WORD = (super->y.WORD & 0xfff00000) | 0xC0000; + super->hitType = 0x19; + super->spritePriority.b1 = 1; + super->actionDelay = 0x30; + super->field_0xf = 0; + super->speed = 0x100; + super->child = NULL; + InitializeAnimation(super, 3); + CreateSpeechBubbleExclamationMark(super, 0xa, -12); +} + +void SpinyBeetle_SetHitType(SpinyBeetleEntity* this) { + if ((gPlayerState.field_0xac & 8)) { + super->hitType = 0x95; + } else { + super->hitType = 0x63; + } +} + +const u16 unusedLabel_0CEBDC[] = { + 0x3F, 0x1C, 0x50, 0x2A, 0x55, 0x1D, 0x5C, 0x2B, +}; + +void (*const gUnk_080CEBEC[])(Entity*) = { + (EntityActionPtr)sub_080337BC, (EntityActionPtr)sub_080337D4, sub_08001324, sub_0804A7D4, + (EntityActionPtr)sub_08033870, (EntityActionPtr)nullsub_159, +}; + +void (*const gUnk_080CEC04[])(SpinyBeetleEntity*) = { + SpinyBeetle_Init, sub_08033958, sub_08033A7C, sub_08033ACC, sub_08033B44, sub_08033C94, +}; + +const s8 gUnk_080CEC1C[] = { 0, -8, 8, 0, 0, 8, -8, 0 }; From 2cb23a30464c7e44576ea6be7852be45563383ce Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Thu, 27 Jan 2022 08:27:50 +0200 Subject: [PATCH 2/2] Review fixes --- src/enemy/spinyBeetle.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c index c802127c..81a45577 100644 --- a/src/enemy/spinyBeetle.c +++ b/src/enemy/spinyBeetle.c @@ -109,7 +109,6 @@ void SpinyBeetle_Init(SpinyBeetleEntity* this) { } void sub_08033958(SpinyBeetleEntity* this) { - s32 r0, r1; u32 direction; if (sub_08033DF0(this)) { sub_08033E1C(this); @@ -211,7 +210,6 @@ void sub_08033ACC(SpinyBeetleEntity* this) { } void sub_08033B44(SpinyBeetleEntity* this) { - u32 unk_80; u32 stop; if (sub_08033DF0(this)) { sub_08033E1C(this);