From 1f185160ac3085757374d18244ed12c79ae1dbed Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Tue, 1 Feb 2022 20:09:15 +0100 Subject: [PATCH] Decompile Mulldozer --- asm/enemy/mulldozer.s | 1007 ------------------- asm/non_matching/mulldozer/sub_08033364.inc | 44 + asm/non_matching/sub_0805457C.inc | 428 -------- assets/assets.json | 15 - data/const/enemy/mulldozer.s | 31 - include/enemy.h | 2 +- linker.ld | 4 +- src/enemy/mulldozer.c | 462 +++++++++ 8 files changed, 509 insertions(+), 1484 deletions(-) delete mode 100644 asm/enemy/mulldozer.s create mode 100644 asm/non_matching/mulldozer/sub_08033364.inc delete mode 100644 asm/non_matching/sub_0805457C.inc delete mode 100644 data/const/enemy/mulldozer.s create mode 100644 src/enemy/mulldozer.c diff --git a/asm/enemy/mulldozer.s b/asm/enemy/mulldozer.s deleted file mode 100644 index 7617bcf3..00000000 --- a/asm/enemy/mulldozer.s +++ /dev/null @@ -1,1007 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Mulldozer -Mulldozer: @ 0x08032C74 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08032C90 @ =gUnk_080CEA1C - 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 -_08032C90: .4byte gUnk_080CEA1C - - thumb_func_start sub_08032C94 -sub_08032C94: @ 0x08032C94 - push {lr} - ldr r2, _08032CA8 @ =gUnk_080CEA34 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08032CA8: .4byte gUnk_080CEA34 - - thumb_func_start sub_08032CAC -sub_08032CAC: @ 0x08032CAC - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _08032CC0 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_08032CC0: - ldr r1, _08032D18 @ =gUnk_080CEA1C - adds r0, r4, #0 - bl sub_0804AA30 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08032D3A - movs r0, #0x3f - ands r0, r1 - cmp r0, #3 - bgt _08032D2C - cmp r0, #2 - blt _08032D2C - movs r0, #6 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - movs r1, #0xc8 - cmp r0, #0 - beq _08032CF0 - movs r1, #0x5a -_08032CF0: - strb r1, [r4, #0xe] - movs r0, #2 - strb r0, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x80 - movs r0, #3 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - strb r0, [r4, #0x15] - ldrb r5, [r4, #0x15] - bl Random - movs r1, #0x40 - ands r1, r0 - cmp r1, #0 - beq _08032D1C - adds r2, r5, #4 - b _08032D20 - .align 2, 0 -_08032D18: .4byte gUnk_080CEA1C -_08032D1C: - adds r2, r5, #0 - adds r2, #0x1c -_08032D20: - movs r1, #0 - movs r0, #0x1f - ands r0, r2 - strb r0, [r4, #0x15] - strh r1, [r4, #0x24] - b _08032D3A -_08032D2C: - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #4 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08033174 -_08032D3A: - pop {r4, r5, pc} - - thumb_func_start sub_08032D3C -sub_08032D3C: @ 0x08032D3C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08032D66 - movs r0, #2 - strb r0, [r4, #0xf] - ldrb r0, [r4, #0x14] - adds r0, #1 - movs r1, #7 - ands r0, r1 - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_08032F24 - adds r0, r4, #0 - bl sub_080331E8 -_08032D66: - adds r0, r4, #0 - bl sub_08001324 - - thumb_func_start nullsub_156 -nullsub_156: @ 0x08032D6C - pop {r4, pc} - .align 2, 0 - - thumb_func_start nullsub_157 -nullsub_157: @ 0x08032D70 - bx lr - .align 2, 0 - - thumb_func_start sub_08032D74 -sub_08032D74: @ 0x08032D74 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - adds r0, r4, #0 - bl sub_08033058 - pop {r4, pc} - - thumb_func_start sub_08032D84 -sub_08032D84: @ 0x08032D84 - 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 _08032D9C - adds r0, r4, #0 - bl sub_080330C0 - b _08032DAC -_08032D9C: - adds r0, r4, #0 - bl sub_08033364 - cmp r0, #0 - beq _08032DAC - adds r0, r4, #0 - bl sub_08033100 -_08032DAC: - adds r0, r4, #0 - bl sub_08032F64 - pop {r4, pc} - - thumb_func_start sub_08032DB4 -sub_08032DB4: @ 0x08032DB4 - 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 _08032DCA - adds r0, r4, #0 - bl sub_08033058 -_08032DCA: - adds r0, r4, #0 - bl sub_08032F48 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08032DD4 -sub_08032DD4: @ 0x08032DD4 - 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 _08032E3C - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xf] - movs r0, #0xf0 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - adds r0, r4, #0 - bl sub_080331B4 - adds r2, r4, #0 - adds r2, #0x82 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08032E18 - ldrb r0, [r4, #0x15] - adds r0, #0x1c - movs r1, #0x1c - ands r0, r1 - strb r0, [r4, #0x15] - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - b _08032E28 -_08032E18: - ldrb r0, [r4, #0x15] - adds r0, #4 - movs r1, #0x1c - ands r0, r1 - strb r0, [r4, #0x15] - ldrb r0, [r2] - movs r1, #0x80 - orrs r0, r1 -_08032E28: - strb r0, [r2] - ldrb r0, [r4, #0x15] - lsrs r0, r0, #2 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation - b _08032E4E -_08032E3C: - adds r0, r4, #0 - bl sub_08032F90 - adds r0, r4, #0 - bl sub_080331E8 - adds r0, r4, #0 - bl sub_08032F64 -_08032E4E: - pop {r4, pc} - - thumb_func_start sub_08032E50 -sub_08032E50: @ 0x08032E50 - 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 _08032E70 - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #4 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08033174 - b _08032E82 -_08032E70: - adds r0, r4, #0 - bl sub_08033000 - adds r0, r4, #0 - bl sub_080331E8 - adds r0, r4, #0 - bl sub_08032F64 -_08032E82: - pop {r4, pc} - - thumb_func_start sub_08032E84 -sub_08032E84: @ 0x08032E84 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08032EA4 - adds r0, r4, #0 - bl sub_08033320 - adds r0, r4, #0 - bl sub_080330C0 - b _08032EC0 -_08032EA4: - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _08032EC0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - ands r0, r1 - cmp r0, #0 - bne _08032EC0 - movs r0, #4 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_080332A8 -_08032EC0: - adds r0, r4, #0 - bl sub_080331E8 - adds r0, r4, #0 - bl ProcessMovement - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08032ED0 -sub_08032ED0: @ 0x08032ED0 - push {r4, r5, lr} - adds r4, r0, #0 - bl ProcessMovement - adds r0, r4, #0 - bl sub_08032F48 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - movs r5, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08032F06 - movs r0, #2 - strb r0, [r4, #0xf] - ldrb r0, [r4, #0x14] - adds r0, #1 - movs r1, #7 - ands r0, r1 - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_08032F24 - adds r0, r4, #0 - bl sub_080331E8 -_08032F06: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - ands r0, r5 - cmp r0, #0 - bne _08032F20 - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #4 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08033174 -_08032F20: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08032F24 -sub_08032F24: @ 0x08032F24 - push {lr} - adds r2, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _08032F38 - movs r1, #0 - ldrb r0, [r2, #0x14] - lsrs r0, r0, #1 - b _08032F3C -_08032F38: - movs r1, #4 - ldrb r0, [r2, #0x14] -_08032F3C: - adds r1, r1, r0 - adds r0, r2, #0 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_08032F48 -sub_08032F48: @ 0x08032F48 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - bne _08032F5A - adds r0, r4, #0 - bl GetNextFrame -_08032F5A: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08032F64 -sub_08032F64: @ 0x08032F64 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _08032F82 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_0800417E - ldrb r0, [r4, #0x15] - lsrs r0, r0, #2 - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_08032F24 -_08032F82: - adds r0, r4, #0 - bl sub_08032F48 - adds r0, r4, #0 - bl ProcessMovement - pop {r4, pc} - - thumb_func_start sub_08032F90 -sub_08032F90: @ 0x08032F90 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xa] - cmp r0, #0 - bne _08032FC0 - ldrb r0, [r2, #0xe] - cmp r0, #0x10 - bne _08032FA8 - adds r1, r2, #0 - adds r1, #0x80 - movs r0, #2 - strb r0, [r1] -_08032FA8: - ldrb r0, [r2, #0xf] - subs r0, #1 - strb r0, [r2, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08032FFE - movs r0, #8 - strb r0, [r2, #0xf] - adds r0, r2, #0 - bl sub_08033280 - b _08032FFE -_08032FC0: - ldrb r0, [r2, #0xf] - subs r0, #1 - strb r0, [r2, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08032FFE - movs r0, #4 - strb r0, [r2, #0xf] - adds r0, r2, #0 - adds r0, #0x82 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08032FE4 - ldrb r0, [r2, #0x15] - adds r0, #0x1c - b _08032FE8 -_08032FE4: - ldrb r0, [r2, #0x15] - adds r0, #4 -_08032FE8: - movs r1, #0x1c - ands r0, r1 - strb r0, [r2, #0x15] - ldrb r0, [r2, #0x15] - lsrs r0, r0, #2 - strb r0, [r2, #0x14] - ldrb r1, [r2, #0x14] - adds r1, #4 - adds r0, r2, #0 - bl InitializeAnimation -_08032FFE: - pop {pc} - - thumb_func_start sub_08033000 -sub_08033000: @ 0x08033000 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xf] - subs r0, #1 - strb r0, [r2, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08033056 - movs r0, #0x10 - strb r0, [r2, #0xf] - adds r3, r2, #0 - adds r3, #0x82 - ldrb r1, [r3] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08033034 - ldrb r0, [r2, #0x15] - adds r0, #0x18 - movs r1, #0x1c - ands r0, r1 - strb r0, [r2, #0x15] - ldrb r1, [r3] - movs r0, #0x7f - ands r0, r1 - b _08033044 -_08033034: - ldrb r0, [r2, #0x15] - adds r0, #8 - movs r1, #0x1c - ands r0, r1 - strb r0, [r2, #0x15] - ldrb r0, [r3] - movs r1, #0x80 - orrs r0, r1 -_08033044: - strb r0, [r3] - ldrb r0, [r2, #0x15] - lsrs r0, r0, #2 - strb r0, [r2, #0x14] - ldrb r1, [r2, #0x14] - adds r1, #4 - adds r0, r2, #0 - bl InitializeAnimation -_08033056: - pop {pc} - - thumb_func_start sub_08033058 -sub_08033058: @ 0x08033058 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r6, #1 - strb r6, [r5, #0xc] - adds r0, #0x80 - strb r6, [r0] - bl Random - ldr r1, _080330A0 @ =gUnk_080CEA50 - movs r4, #3 - ands r0, r4 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r5, #0xe] - adds r0, r5, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _080330A8 - bl Random - ands r0, r4 - cmp r0, #0 - beq _080330A8 - adds r0, r5, #0 - bl sub_08049EE4 - adds r4, r0, #0 - bl Random - ldr r1, _080330A4 @ =gUnk_080CEA54 - ands r0, r6 - adds r0, r0, r1 - ldrb r0, [r0] - adds r0, r0, r4 - b _080330AC - .align 2, 0 -_080330A0: .4byte gUnk_080CEA50 -_080330A4: .4byte gUnk_080CEA54 -_080330A8: - bl Random -_080330AC: - movs r1, #0x18 - ands r0, r1 - strb r0, [r5, #0x15] - ldrb r0, [r5, #0x15] - lsrs r0, r0, #2 - strb r0, [r5, #0x14] - adds r0, r5, #0 - bl sub_08032F24 - pop {r4, r5, r6, pc} - - thumb_func_start sub_080330C0 -sub_080330C0: @ 0x080330C0 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x80 - strb r1, [r0] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _080330E2 - bl Random - movs r1, #0x38 - ands r0, r1 - adds r0, #0x18 - b _080330E4 -_080330E2: - movs r0, #6 -_080330E4: - strb r0, [r4, #0xe] - movs r0, #0x60 - strh r0, [r4, #0x24] - ldrb r0, [r4, #0x15] - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - lsrs r0, r0, #2 - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_08032F24 - pop {r4, pc} - - thumb_func_start sub_08033100 -sub_08033100: @ 0x08033100 - push {r4, lr} - adds r4, r0, #0 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r2, [r4, #0xa] - cmp r2, #0 - bne _08033132 - adds r1, r4, #0 - adds r1, #0x80 - movs r0, #1 - strb r0, [r1] - movs r0, #0x30 - strb r0, [r4, #0xe] - movs r0, #8 - strb r0, [r4, #0xf] - strh r2, [r4, #0x24] - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - strb r0, [r4, #0x15] - b _08033150 -_08033132: - adds r1, r4, #0 - adds r1, #0x80 - movs r0, #2 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080331B4 - ldrb r0, [r4, #0xe] - adds r0, #0x10 - strb r0, [r4, #0xe] - movs r0, #4 - strb r0, [r4, #0xf] - movs r0, #0xb0 - lsls r0, r0, #1 - strh r0, [r4, #0x24] -_08033150: - adds r1, r4, #0 - adds r1, #0x83 - movs r0, #0 - strb r0, [r1] - bl Random - movs r1, #0x80 - ands r0, r1 - adds r1, r4, #0 - adds r1, #0x82 - strb r0, [r1] - ldrb r0, [r4, #0x15] - lsrs r0, r0, #2 - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_08032F24 - pop {r4, pc} - - thumb_func_start sub_08033174 -sub_08033174: @ 0x08033174 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x80 - movs r2, #0 - movs r0, #1 - strb r0, [r1] - ldrb r0, [r4, #0x15] - adds r1, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x82 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _080331A4 - bl Random - movs r1, #0x18 - ands r0, r1 - adds r0, #0x18 - b _080331A6 -_080331A4: - movs r0, #0xc -_080331A6: - strb r0, [r4, #0xe] - movs r0, #0xa0 - strh r0, [r4, #0x24] - adds r0, r4, #0 - bl sub_08032F24 - pop {r4, pc} - - thumb_func_start sub_080331B4 -sub_080331B4: @ 0x080331B4 - push {r4, lr} - adds r4, r0, #0 - bl Random - adds r1, r0, #0 - movs r0, #0xf0 - ands r1, r0 - movs r2, #0x1e - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080331D0 - movs r2, #0x3c - b _080331E4 -_080331D0: - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _080331DA - movs r2, #0x2d -_080331DA: - movs r0, #0x20 - ands r1, r0 - cmp r1, #0 - beq _080331E4 - movs r2, #0x4b -_080331E4: - strb r2, [r4, #0xe] - pop {r4, pc} - - thumb_func_start sub_080331E8 -sub_080331E8: @ 0x080331E8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r3, #0 - ldrb r0, [r5, #0xc] - cmp r0, #5 - beq _08033220 - adds r1, r5, #0 - adds r1, #0x83 - ldrb r0, [r1] - adds r2, r0, #1 - strb r2, [r1] - adds r0, r5, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - beq _0803320C - movs r0, #0xf - b _0803320E -_0803320C: - movs r0, #7 -_0803320E: - ands r2, r0 - strb r2, [r1] - ldrb r0, [r1] - cmp r0, #0 - bne _08033238 - movs r3, #1 - ldrb r0, [r5, #0x14] - lsls r6, r0, #1 - b _08033238 -_08033220: - adds r2, r5, #0 - adds r2, #0x83 - ldrb r0, [r2] - adds r0, #1 - movs r1, #0xf - ands r0, r1 - strb r0, [r2] - cmp r0, #0 - bne _08033238 - movs r3, #1 - ldrb r0, [r5, #0x15] - lsrs r6, r0, #1 -_08033238: - cmp r3, #0 - beq _08033278 - adds r0, r5, #0 - movs r1, #2 - movs r2, #0x40 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _08033278 - ldr r2, _0803327C @ =gUnk_080CEA56 - adds r2, r6, r2 - adds r3, r5, #0 - adds r3, #0x5a - ldrb r0, [r3] - movs r1, #0x20 - eors r0, r1 - strb r0, [r3] - movs r0, #0 - ldrsb r0, [r2, r0] - ldrh r1, [r4, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - movs r0, #1 - ldrsb r0, [r2, r0] - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] - movs r0, #0x86 - lsls r0, r0, #1 - bl EnqueueSFX -_08033278: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803327C: .4byte gUnk_080CEA56 - - thumb_func_start sub_08033280 -sub_08033280: @ 0x08033280 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049F84 - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - strb r0, [r4, #0x15] - lsrs r0, r0, #2 - ldrb r1, [r4, #0x14] - cmp r0, r1 - beq _080332A4 - strb r0, [r4, #0x14] - adds r1, r0, #4 - adds r0, r4, #0 - bl InitializeAnimation -_080332A4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080332A8 -sub_080332A8: @ 0x080332A8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r6, [r4, #0x15] - adds r5, r4, #0 - adds r5, #0x81 - ldrb r0, [r5] - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - ldrb r0, [r4, #0x15] - strb r0, [r5] - strb r6, [r4, #0x15] - ldrb r0, [r5] - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - asrs r6, r0, #2 - ldrb r0, [r4, #0x14] - cmp r6, r0 - beq _080332E4 - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_080332E8 -_080332E4: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080332E8 -sub_080332E8: @ 0x080332E8 - push {r4, lr} - adds r4, r0, #0 - adds r3, r4, #0 - adds r3, #0x82 - movs r0, #0 - strb r0, [r3] - ldrb r0, [r4, #0x14] - subs r2, r1, r0 - cmp r2, #0 - ble _08033304 - cmp r2, #4 - bgt _08033310 - movs r0, #1 - b _08033312 -_08033304: - movs r0, #4 - rsbs r0, r0, #0 - cmp r2, r0 - bge _08033310 - movs r0, #1 - b _08033312 -_08033310: - movs r0, #2 -_08033312: - strb r0, [r3] - strb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_08033320 -sub_08033320: @ 0x08033320 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0x14] - lsls r5, r0, #2 - movs r0, #4 - ands r0, r5 - cmp r0, #0 - beq _08033360 - adds r0, r4, #0 - adds r0, #0x82 - ldrb r0, [r0] - movs r1, #3 - ands r1, r0 - cmp r1, #1 - beq _08033350 - cmp r1, #2 - beq _08033354 - bl Random - movs r1, #0x10 - ands r1, r0 - movs r0, #0x1c - cmp r1, #0 - beq _08033356 -_08033350: - movs r0, #4 - b _08033356 -_08033354: - movs r0, #0x1c -_08033356: - adds r0, r0, r5 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - b _08033362 -_08033360: - strb r5, [r4, #0x15] -_08033362: - pop {r4, r5, pc} - - thumb_func_start sub_08033364 -sub_08033364: @ 0x08033364 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - bl sub_08049DF4 - adds r1, r0, #0 - cmp r1, #0 - beq _080333B4 - ldrb r0, [r4, #0xa] - movs r3, #0x38 - cmp r0, #0 - beq _0803337E - movs r3, #0x48 -_0803337E: - adds r0, r4, #0 - adds r2, r3, #0 - bl EntityInRectRadius - cmp r0, #0 - beq _080333B4 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _080333AA - ldr r0, _080333B0 @ =gUnk_020000B0 - ldr r1, [r0] - adds r0, r4, #0 - bl GetFacingDirection - adds r1, r0, #0 - adds r1, #2 - movs r0, #0x1c - ands r1, r0 - lsrs r1, r1, #2 - ldrb r0, [r4, #0x14] - cmp r0, r1 - bne _080333B4 -_080333AA: - movs r0, #1 - b _080333B6 - .align 2, 0 -_080333B0: .4byte gUnk_020000B0 -_080333B4: - movs r0, #0 -_080333B6: - pop {r4, pc} diff --git a/asm/non_matching/mulldozer/sub_08033364.inc b/asm/non_matching/mulldozer/sub_08033364.inc new file mode 100644 index 00000000..8667fa00 --- /dev/null +++ b/asm/non_matching/mulldozer/sub_08033364.inc @@ -0,0 +1,44 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r0, #1 + bl sub_08049DF4 + adds r1, r0, #0 + cmp r1, #0 + beq _080333B4 + ldrb r0, [r4, #0xa] + movs r3, #0x38 + cmp r0, #0 + beq _0803337E + movs r3, #0x48 +_0803337E: + adds r0, r4, #0 + adds r2, r3, #0 + bl EntityInRectRadius + cmp r0, #0 + beq _080333B4 + ldrb r0, [r4, #0xa] + cmp r0, #0 + bne _080333AA + ldr r0, _080333B0 @ =gUnk_020000B0 + ldr r1, [r0] + adds r0, r4, #0 + bl GetFacingDirection + adds r1, r0, #0 + adds r1, #2 + movs r0, #0x1c + ands r1, r0 + lsrs r1, r1, #2 + ldrb r0, [r4, #0x14] + cmp r0, r1 + bne _080333B4 +_080333AA: + movs r0, #1 + b _080333B6 + .align 2, 0 +_080333B0: .4byte gUnk_020000B0 +_080333B4: + movs r0, #0 +_080333B6: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/sub_0805457C.inc b/asm/non_matching/sub_0805457C.inc deleted file mode 100644 index 6af2e482..00000000 --- a/asm/non_matching/sub_0805457C.inc +++ /dev/null @@ -1,428 +0,0 @@ -.ifdef EU -.syntax unified - push {r4, r5, r6, r7, lr} - sub sp, #0x20 - adds r6, r0, #0 - adds r3, r1, #0 - ldr r0, _08054138 @ =gRoomVars - ldrb r0, [r0, #2] - cmp r0, #1 - bne _08054126 - b _080542CC -_08054126: - ldr r2, _0805413C @ =gUnk_08001A1C - movs r4, #0 - cmp r3, #0x18 - bhi _080541BC - lsls r0, r3, #2 - ldr r1, _08054140 @ =_08054144 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08054138: .4byte gRoomVars -_0805413C: .4byte gUnk_08001A1C -_08054140: .4byte _08054144 -_08054144: @ jump table - .4byte _080541BC @ case 0 - .4byte _080541A8 @ case 1 - .4byte _080541A8 @ case 2 - .4byte _080541A8 @ case 3 - .4byte _080541A8 @ case 4 - .4byte _080541A8 @ case 5 - .4byte _080541A8 @ case 6 - .4byte _080541A8 @ case 7 - .4byte _080541A8 @ case 8 - .4byte _080541A8 @ case 9 - .4byte _080541A8 @ case 10 - .4byte _080541A8 @ case 11 - .4byte _080541A8 @ case 12 - .4byte _080541BC @ case 13 - .4byte _080541BC @ case 14 - .4byte _080541BA @ case 15 - .4byte _080541B4 @ case 16 - .4byte _080541B4 @ case 17 - .4byte _080541B4 @ case 18 - .4byte _080541B4 @ case 19 - .4byte _080541B4 @ case 20 - .4byte _080541B4 @ case 21 - .4byte _080541B4 @ case 22 - .4byte _080541B4 @ case 23 - .4byte _080541B4 @ case 24 -_080541A8: - lsls r1, r3, #5 - ldr r0, _080541B0 @ =gUnk_0800137C - adds r4, r1, r0 - b _080541BC - .align 2, 0 -_080541B0: .4byte gUnk_0800137C -_080541B4: - lsls r1, r3, #5 - ldr r0, _080541D0 @ =gUnk_0800161C - adds r2, r1, r0 -_080541BA: - ldr r4, _080541D4 @ =gUnk_02034398 -_080541BC: - cmp r4, #0 - bne _080541C2 - b _080542CC -_080541C2: - ldr r0, _080541D8 @ =gSave - adds r0, #0xb3 - ldrb r1, [r0] - cmp r1, #0 - bne _080541E0 - ldr r3, _080541DC @ =gUnk_08001A1C - b _080541E6 - .align 2, 0 -_080541D0: .4byte gUnk_0800161C -_080541D4: .4byte gUnk_02034398 -_080541D8: .4byte gSave -_080541DC: .4byte gUnk_08001A1C -_080541E0: - lsls r1, r1, #5 - ldr r0, _080542BC @ =0x080014E4 - adds r3, r1, r0 -_080541E6: - mov r0, sp - adds r1, r4, #0 - bl sub_08000F14 - ldr r4, _080542C0 @ =gSave - adds r0, r4, #0 - adds r0, #0xaa - ldrb r0, [r0] - cmp r0, #8 - bhi _08054204 - mov r1, sp - mov r0, sp - ldrh r0, [r0, #8] - adds r0, #5 - strh r0, [r1, #8] -_08054204: - adds r0, r4, #0 - adds r0, #0xac - ldrb r0, [r0] - cmp r0, #0 - bne _08054218 - mov r1, sp - mov r0, sp - ldrh r0, [r0, #0xc] - adds r0, #3 - strh r0, [r1, #0xc] -_08054218: - adds r0, r4, #0 - adds r0, #0xad - ldrb r0, [r0] - cmp r0, #0 - bne _0805422C - mov r1, sp - mov r0, sp - ldrh r0, [r0, #0xe] - adds r0, #3 - strh r0, [r1, #0xe] -_0805422C: - adds r0, r4, #0 - adds r0, #0xc0 - ldrh r0, [r0] - cmp r0, #0xa - bhi _08054240 - mov r1, sp - mov r0, sp - ldrh r0, [r0, #4] - adds r0, #1 - strh r0, [r1, #4] -_08054240: - ldr r2, _080542C4 @ =gUnk_08001A1C - adds r0, r4, #0 - adds r0, #0xbb - ldrb r0, [r0] - adds r3, r2, #0 - cmp r0, #0 - beq _08054250 - adds r2, #0x20 -_08054250: - movs r1, #0x8b - lsls r1, r1, #1 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, #0 - beq _0805425E - adds r3, #0x40 -_0805425E: - mov r0, sp - mov r1, sp - bl sub_08000F2C - adds r4, r0, #0 - bl Random - adds r2, r0, #0 - asrs r5, r2, #0x18 - movs r0, #0xf - ands r5, r0 - adds r0, r2, #0 - adds r1, r4, #0 - bl __modsi3 - adds r2, r0, #0 - movs r3, #0 - lsls r0, r5, #1 - add r0, sp - movs r4, #0 - ldrsh r1, [r0, r4] - cmp r1, r2 - bgt _080542A6 - movs r4, #0xf -_0805428E: - adds r3, #1 - adds r5, #1 - ands r5, r4 - cmp r3, #0xf - bhi _080542A6 - lsls r0, r5, #1 - add r0, sp - movs r7, #0 - ldrsh r0, [r0, r7] - adds r1, r1, r0 - cmp r1, r2 - ble _0805428E -_080542A6: - ldr r0, _080542C8 @ =gUnk_080FE1B4 - adds r0, r5, r0 - ldrb r1, [r0] - cmp r1, #0 - beq _080542CC - adds r0, r6, #0 - movs r2, #0 - bl CreateItemDrop - b _080542CE - .align 2, 0 -_080542BC: .4byte 0x080014E4 -_080542C0: .4byte gSave -_080542C4: .4byte gUnk_08001A1C -_080542C8: .4byte gUnk_080FE1B4 -_080542CC: - movs r0, #0 -_080542CE: - add sp, #0x20 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - -.syntax divided -.else - .syntax unified - push {r4, r5, r6, r7, lr} - sub sp, #0x20 - adds r6, r0, #0 - adds r3, r1, #0 - ldr r0, _080545A4 @ =gRoomVars - ldrb r1, [r0, #2] - adds r5, r0, #0 - cmp r1, #1 - bne _08054590 - b _0805474C -_08054590: - ldr r2, _080545A8 @ =gUnk_08001A1C - movs r4, #0 - cmp r3, #0x19 - bhi _0805463C - lsls r0, r3, #2 - ldr r1, _080545AC @ =_080545B0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080545A4: .4byte gRoomVars -_080545A8: .4byte gUnk_08001A1C -_080545AC: .4byte _080545B0 -_080545B0: @ jump table - .4byte _0805463C @ case 0 - .4byte _08054618 @ case 1 - .4byte _08054618 @ case 2 - .4byte _08054618 @ case 3 - .4byte _08054618 @ case 4 - .4byte _08054618 @ case 5 - .4byte _08054618 @ case 6 - .4byte _08054618 @ case 7 - .4byte _08054618 @ case 8 - .4byte _08054618 @ case 9 - .4byte _08054618 @ case 10 - .4byte _08054618 @ case 11 - .4byte _08054618 @ case 12 - .4byte _0805463C @ case 13 - .4byte _0805463C @ case 14 - .4byte _0805463A @ case 15 - .4byte _08054634 @ case 16 - .4byte _08054634 @ case 17 - .4byte _08054634 @ case 18 - .4byte _08054634 @ case 19 - .4byte _08054634 @ case 20 - .4byte _08054634 @ case 21 - .4byte _08054634 @ case 22 - .4byte _08054634 @ case 23 - .4byte _08054624 @ case 24 - .4byte _08054624 @ case 25 -_08054618: - lsls r1, r3, #5 - ldr r0, _08054620 @ =gUnk_0800137C - adds r4, r1, r0 - b _0805463C - .align 2, 0 -_08054620: .4byte gUnk_0800137C -_08054624: - ldrb r0, [r5, #0xa] - ldr r4, _08054630 @ =gUnk_0800191C - cmp r0, #0 - beq _0805463C - adds r4, #0x20 - b _0805463C - .align 2, 0 -_08054630: .4byte gUnk_0800191C -_08054634: - lsls r1, r3, #5 - ldr r0, _08054650 @ =gUnk_0800161C - adds r2, r1, r0 -_0805463A: - ldr r4, _08054654 @ =gUnk_02034398 -_0805463C: - cmp r4, #0 - bne _08054642 - b _0805474C -_08054642: - ldr r0, _08054658 @ =gSave - adds r0, #0xb3 - ldrb r1, [r0] - cmp r1, #0 - bne _08054660 - ldr r3, _0805465C @ =gUnk_08001A1C - b _08054666 - .align 2, 0 -_08054650: .4byte gUnk_0800161C -_08054654: .4byte gUnk_02034398 -_08054658: .4byte gSave -_0805465C: .4byte gUnk_08001A1C -_08054660: - lsls r1, r1, #5 - ldr r0, _0805473C @ =gUnk_0800143C - adds r3, r1, r0 -_08054666: - mov r0, sp - adds r1, r4, #0 - bl sub_08000F14 - ldr r4, _08054740 @ =gSave - adds r0, r4, #0 - adds r0, #0xaa - ldrb r0, [r0] - cmp r0, #8 - bhi _08054684 - mov r1, sp - mov r0, sp - ldrh r0, [r0, #8] - adds r0, #5 - strh r0, [r1, #8] -_08054684: - adds r0, r4, #0 - adds r0, #0xac - ldrb r0, [r0] - cmp r0, #0 - bne _08054698 - mov r1, sp - mov r0, sp - ldrh r0, [r0, #0xc] - adds r0, #3 - strh r0, [r1, #0xc] -_08054698: - adds r0, r4, #0 - adds r0, #0xad - ldrb r0, [r0] - cmp r0, #0 - bne _080546AC - mov r1, sp - mov r0, sp - ldrh r0, [r0, #0xe] - adds r0, #3 - strh r0, [r1, #0xe] -_080546AC: - adds r0, r4, #0 - adds r0, #0xc0 - ldrh r0, [r0] - cmp r0, #0xa - bhi _080546C0 - mov r1, sp - mov r0, sp - ldrh r0, [r0, #4] - adds r0, #1 - strh r0, [r1, #4] -_080546C0: - ldr r2, _08054744 @ =gUnk_08001A1C - adds r0, r4, #0 - adds r0, #0xbb - ldrb r0, [r0] - adds r3, r2, #0 - cmp r0, #0 - beq _080546D0 - adds r2, #0x20 -_080546D0: - movs r1, #0x8b - lsls r1, r1, #1 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, #0 - beq _080546DE - adds r3, #0x40 -_080546DE: - mov r0, sp - mov r1, sp - bl sub_08000F2C - adds r4, r0, #0 - bl Random - adds r2, r0, #0 - asrs r5, r2, #0x18 - movs r0, #0xf - ands r5, r0 - adds r0, r2, #0 - adds r1, r4, #0 - bl __modsi3 - adds r2, r0, #0 - movs r3, #0 - lsls r0, r5, #1 - add r0, sp - movs r4, #0 - ldrsh r1, [r0, r4] - cmp r1, r2 - bgt _08054726 - movs r4, #0xf -_0805470E: - adds r3, #1 - adds r5, #1 - ands r5, r4 - cmp r3, #0xf - bhi _08054726 - lsls r0, r5, #1 - add r0, sp - movs r7, #0 - ldrsh r0, [r0, r7] - adds r1, r1, r0 - cmp r1, r2 - ble _0805470E -_08054726: - ldr r0, _08054748 @ =gUnk_080FE1B4 - adds r0, r5, r0 - ldrb r1, [r0] - cmp r1, #0 - beq _0805474C - adds r0, r6, #0 - movs r2, #0 - bl CreateItemDrop - b _0805474E - .align 2, 0 -_0805473C: .4byte gUnk_0800143C -_08054740: .4byte gSave -_08054744: .4byte gUnk_08001A1C -_08054748: .4byte gUnk_080FE1B4 -_0805474C: - movs r0, #0 -_0805474E: - add sp, #0x20 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - .syntax divided -.endif diff --git a/assets/assets.json b/assets/assets.json index 706dcd76..3fd4090f 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -25795,21 +25795,6 @@ "size": 19, "type": "animation" }, - { - "path": "mulldozer/gUnk_080CEA50.bin", - "start": 846416, - "size": 4 - }, - { - "path": "mulldozer/gUnk_080CEA54.bin", - "start": 846420, - "size": 2 - }, - { - "path": "mulldozer/gUnk_080CEA56.bin", - "start": 846422, - "size": 16 - }, { "path": "animations/gSpriteAnimations_Bombarossa_0.bin", "start": 846688, diff --git a/data/const/enemy/mulldozer.s b/data/const/enemy/mulldozer.s deleted file mode 100644 index 82936800..00000000 --- a/data/const/enemy/mulldozer.s +++ /dev/null @@ -1,31 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CEA1C:: @ 080CEA1C - .4byte sub_08032C94 - .4byte sub_08032CAC - .4byte sub_08032D3C - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte nullsub_157 - -gUnk_080CEA34:: @ 080CEA34 - .4byte sub_08032D74 - .4byte sub_08032D84 - .4byte sub_08032DB4 - .4byte sub_08032DD4 - .4byte sub_08032E50 - .4byte sub_08032E84 - .4byte sub_08032ED0 - -gUnk_080CEA50:: @ 080CEA50 - .incbin "mulldozer/gUnk_080CEA50.bin" - -gUnk_080CEA54:: @ 080CEA54 - .incbin "mulldozer/gUnk_080CEA54.bin" - -gUnk_080CEA56:: @ 080CEA56 - .incbin "mulldozer/gUnk_080CEA56.bin" diff --git a/include/enemy.h b/include/enemy.h index 4bbecfec..90829d9e 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -183,7 +183,7 @@ void AcroBandit(Entity*); void BladeTrap(Entity*); void Keaton(Entity*); void Crow(Entity*); -void Mulldozer(Entity*); +void Mulldozer(); void Bombarossa(Entity*); void Wisp(Entity*); void SpinyBeetle(Entity*); diff --git a/linker.ld b/linker.ld index d1126618..75e2074f 100644 --- a/linker.ld +++ b/linker.ld @@ -375,7 +375,7 @@ SECTIONS { src/enemy/bladeTrap.o(.text); src/enemy/keaton.o(.text); src/enemy/crow.o(.text); - asm/enemy/mulldozer.o(.text); + src/enemy/mulldozer.o(.text); src/enemy/bombarossa.o(.text); src/enemy/wisp.o(.text); src/enemy/spinyBeetle.o(.text); @@ -1032,7 +1032,7 @@ SECTIONS { data/animations/enemy/keaton.o(.rodata); src/enemy/crow.o(.rodata); data/animations/enemy/crow.o(.rodata); - data/const/enemy/mulldozer.o(.rodata); + src/enemy/mulldozer.o(.rodata); data/animations/enemy/mulldozer.o(.rodata); src/enemy/bombarossa.o(.rodata); data/animations/enemy/bombarossa.o(.rodata); diff --git a/src/enemy/mulldozer.c b/src/enemy/mulldozer.c new file mode 100644 index 00000000..38e3bf88 --- /dev/null +++ b/src/enemy/mulldozer.c @@ -0,0 +1,462 @@ +/** + * @file mulldozer.c + * @ingroup Enemies + * + * @brief Mulldozer enemy + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "enemy.h" +#include "functions.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 filler[0x18]; + /*0x80*/ u8 unk_80; + /*0x81*/ u8 unk_81; + /*0x82*/ u8 unk_82; + /*0x83*/ u8 unk_83; +} MulldozerEntity; + +extern Entity* gUnk_020000B0; + +extern void (*const Mulldozer_Functions[])(MulldozerEntity*); +extern void (*const Mulldozer_Actions[])(MulldozerEntity*); +extern const u8 gUnk_080CEA50[]; +extern const u8 gUnk_080CEA54[]; +extern const s8 gUnk_080CEA56[]; + +void sub_08033174(MulldozerEntity*); +void sub_08032F24(MulldozerEntity*); +void sub_080331E8(MulldozerEntity*); +void sub_08033058(MulldozerEntity*); +bool32 sub_08033364(MulldozerEntity*); +void sub_080330C0(MulldozerEntity*); +void sub_08033100(MulldozerEntity*); +void sub_08032F64(MulldozerEntity*); +void sub_08032F48(MulldozerEntity*); +void sub_080331B4(MulldozerEntity*); +void sub_08032F90(MulldozerEntity*); +void sub_08033000(MulldozerEntity*); +void sub_08033320(MulldozerEntity*); +void sub_080332A8(MulldozerEntity*); +void sub_08033280(MulldozerEntity*); +void sub_080332E8(MulldozerEntity*, s32); + +void Mulldozer(MulldozerEntity* this) { + EnemyFunctionHandler(super, (EntityActionArray)Mulldozer_Functions); + SetChildOffset(super, 0, 1, -0x10); +} + +void Mulldozer_OnInit(MulldozerEntity* this) { + Mulldozer_Actions[super->action](this); +} + +void sub_08032CAC(MulldozerEntity* this) { + if (super->field_0x43 != 0) { + sub_0804A9FC(super, 0x1c); + } + sub_0804AA30(super, Mulldozer_Functions); + if ((super->bitfield & 0x80) != 0) { + switch (super->bitfield & 0x3f) { + case 2: + case 3: + super->action = 6; + super->actionDelay = super->type != 0 ? 0x5a : 200; + super->field_0xf = 2; + this->unk_80 = 3; + super->direction = super->knockbackDirection; + super->direction = (super->direction + ((Random() & 0x40) != 0 ? 4 : 0x1c)); + super->direction &= 0x1f; + super->speed = 0; + break; + default: + super->action = 5; + super->field_0xf = 4; + sub_08033174(this); + break; + } + } +} + +void sub_08032D3C(MulldozerEntity* this) { + if (--super->field_0xf == 0) { + super->field_0xf = 2; + super->animationState = (super->animationState + 1) & 7; + sub_08032F24(this); + sub_080331E8(this); + } + sub_08001324(super); +} + +void nullsub_157(MulldozerEntity* this) { +} + +void Mulldozer_Init(MulldozerEntity* this) { + sub_0804A720(super); + sub_08033058(this); +} + +void Mulldozer_Action1(MulldozerEntity* this) { + if (--super->actionDelay == 0) { + sub_080330C0(this); + } else { + if (sub_08033364(this) != 0) { + sub_08033100(this); + } + } + sub_08032F64(this); +} + +void Mulldozer_Action2(MulldozerEntity* this) { + if (--super->actionDelay == 0) { + sub_08033058(this); + } + sub_08032F48(this); +} + +void Mulldozer_Action3(MulldozerEntity* this) { + if (--super->actionDelay == 0) { + super->action = 4; + super->field_0xf = 8; + super->speed = 0x1e0; + sub_080331B4(this); + if ((this->unk_82 & 0x80) != 0) { + super->direction = (super->direction + 0x1c) & 0x1c; + this->unk_82 = this->unk_82 & 0x7f; + } else { + super->direction = (super->direction + 4) & 0x1c; + this->unk_82 = this->unk_82 | 0x80; + } + super->animationState = super->direction >> 2; + InitializeAnimation(super, super->animationState + 4); + } else { + sub_08032F90(this); + sub_080331E8(this); + sub_08032F64(this); + } +} + +void Mulldozer_Action4(MulldozerEntity* this) { + if (--super->actionDelay == 0) { + super->action = 5; + super->field_0xf = 4; + sub_08033174(this); + } else { + sub_08033000(this); + sub_080331E8(this); + sub_08032F64(this); + } +} + +void Mulldozer_Action5(MulldozerEntity* this) { + if (--super->actionDelay == 0) { + sub_08033320(this); + sub_080330C0(this); + } else if ((super->type == 0) && (--super->field_0xf == 0)) { + super->field_0xf = 4; + sub_080332A8(this); + } + sub_080331E8(this); + ProcessMovement(super); +} + +void Mulldozer_Action6(MulldozerEntity* this) { + ProcessMovement(super); + sub_08032F48(this); + if (--super->field_0xf == 0) { + super->field_0xf = 2; + super->animationState = (super->animationState + 1) & 7; + sub_08032F24(this); + sub_080331E8(this); + } + if (--super->actionDelay == 0) { + super->action = 5; + super->field_0xf = 4; + sub_08033174(this); + } +} + +void sub_08032F24(MulldozerEntity* this) { + u32 tmpA; + u32 tmpB; + + if (this->unk_80 == 0) { + tmpA = 0; + tmpB = super->animationState >> 1; + } else { + tmpA = 4; + tmpB = super->animationState; + } + InitializeAnimation(super, tmpA + tmpB); +} + +void sub_08032F48(MulldozerEntity* this) { + if (this->unk_80 == 2) { + GetNextFrame(super); + } + GetNextFrame(super); +} + +void sub_08032F64(MulldozerEntity* this) { + if (super->collisions != 0) { + sub_0800417E(super, super->collisions); + super->animationState = super->direction >> 2; + sub_08032F24(this); + } + sub_08032F48(this); + ProcessMovement(super); +} + +void sub_08032F90(MulldozerEntity* this) { + if (super->type == 0) { + if (super->actionDelay == 0x10) { + this->unk_80 = 2; + } + if (--super->field_0xf == 0) { + super->field_0xf = 8; + sub_08033280(this); + } + } else { + if (--super->field_0xf == 0) { + super->field_0xf = 4; + if ((this->unk_82 & 0x80) != 0) { + super->direction = (super->direction + 0x1c) & 0x1c; + } else { + super->direction = (super->direction + 4) & 0x1c; + } + super->animationState = super->direction >> 2; + InitializeAnimation(super, super->animationState + 4); + } + } +} + +void sub_08033000(MulldozerEntity* this) { + if (--super->field_0xf == 0) { + super->field_0xf = 0x10; + if ((this->unk_82 & 0x80) != 0) { + super->direction = (super->direction + 0x18) & 0x1c; + this->unk_82 &= 0x7f; + } else { + super->direction = (super->direction + 8) & 0x1c; + this->unk_82 |= 0x80; + } + + super->animationState = super->direction >> 2; + InitializeAnimation(super, super->animationState + 4); + } +} + +void sub_08033058(MulldozerEntity* this) { + u32 uVar2; + u32 uVar3; + + super->action = 1; + this->unk_80 = 1; + super->actionDelay = gUnk_080CEA50[Random() & 3]; + if ((sub_08049FA0(super) == 0) && ((Random() & 3) != 0)) { + uVar2 = sub_08049EE4(super); + uVar3 = Random(); + super->direction = (gUnk_080CEA54[uVar3 & 1] + uVar2) & 0x18; + } else { + super->direction = (Random()) & 0x18; + } + super->animationState = super->direction >> 2; + sub_08032F24(this); +} + +void sub_080330C0(MulldozerEntity* this) { + super->action = 2; + this->unk_80 = 0; + if (super->type == 0) { + super->actionDelay = (Random() & 0x38) + 0x18; + } else { + super->actionDelay = 6; + } + super->speed = 0x60; + super->direction = (super->direction + 4) & 0x18; + super->animationState = super->direction >> 2; + sub_08032F24(this); +} + +void sub_08033100(MulldozerEntity* this) { + super->action = 3; + if (super->type == 0) { + this->unk_80 = 1; + super->actionDelay = 0x30; + super->field_0xf = 8; + super->speed = 0; + super->direction = (sub_08049F84(super, 1) + 2) & 0x1c; + } else { + this->unk_80 = 2; + sub_080331B4(this); + super->actionDelay += 0x10; + super->field_0xf = 4; + super->speed = 0x160; + } + this->unk_83 = 0; + this->unk_82 = Random() & 0x80; + super->animationState = super->direction >> 2; + sub_08032F24(this); +} + +void sub_08033174(MulldozerEntity* this) { + this->unk_80 = 1; + this->unk_81 = super->direction; + this->unk_82 = 0; + this->unk_83 = 0; + if (super->type == 0) { + super->actionDelay = (Random() & 0x18) + 0x18; + } else { + super->actionDelay = 0xc; + } + super->speed = 0xa0; + sub_08032F24(this); +} + +void sub_080331B4(MulldozerEntity* this) { + u32 rand = Random() & 0xf0; + u8 actionDelay = 0x1e; + if ((rand & 0x80) != 0) { + actionDelay = 0x3c; + } else { + if ((rand & 0x40) != 0) { + actionDelay = 0x2d; + } + if ((rand & 0x20) != 0) { + actionDelay = 0x4b; + } + } + super->actionDelay = actionDelay; +} + +void sub_080331E8(MulldozerEntity* this) { + bool32 createEffect; + u32 unaff_r6; + const s8* ptr; + + createEffect = FALSE; + if (super->action != 5) { + this->unk_83 = this->unk_83 + 1U; + if (this->unk_80 != 2) { + this->unk_83 &= 0xf; + } else { + this->unk_83 &= 0x7; + } + if (this->unk_83 == 0) { + createEffect = TRUE; + unaff_r6 = super->animationState << 1; + } + } else { + this->unk_83 = (this->unk_83 + 1) & 0xf; + if (this->unk_83 == 0) { + createEffect = TRUE; + unaff_r6 = super->direction >> 1; + } + } + if (createEffect) { + Entity* effect = CreateFx(super, 2, 0x40); + if (effect != NULL) { + ptr = &gUnk_080CEA56[unaff_r6]; + super->frame ^= 0x20; + effect->x.HALF.HI += ptr[0]; + effect->y.HALF.HI += ptr[1]; + EnqueueSFX(SFX_BUTTON_PRESS); + } + } +} + +void sub_08033280(MulldozerEntity* this) { + u32 direction; + super->direction = (sub_08049F84(super, 1) + 2) & 0x1c; + direction = super->direction >> 2; + if (direction != super->animationState) { + super->animationState = direction; + InitializeAnimation(super, direction + 4); + } +} + +void sub_080332A8(MulldozerEntity* this) { + s32 oldDirection = super->direction; + super->direction = this->unk_81; + sub_08004596(super, sub_08049F84(super, 1)); + this->unk_81 = super->direction; + super->direction = oldDirection; + oldDirection = ((this->unk_81 + 2) & 0x1c) >> 2; + if (oldDirection != super->animationState) { + sub_080332E8(this, oldDirection); + } +} + +void sub_080332E8(MulldozerEntity* this, s32 param_2) { + s32 tmp; + + this->unk_82 = 0; + tmp = param_2 - super->animationState; + if (tmp >= 1) { + if (tmp < 5) { + this->unk_82 = 1; + } else { + this->unk_82 = 2; + } + } else { + if (tmp < -4) { + this->unk_82 = 1; + } else { + this->unk_82 = 2; + } + } + + super->animationState = param_2; + InitializeAnimation(super, param_2 + 4); +} + +void sub_08033320(MulldozerEntity* this) { + u32 bVar4; + int temp; + + bVar4 = super->animationState * 4; + if ((bVar4 & 4) != 0) { + switch (this->unk_82 & 3) { + case 1: + temp = 4; + break; + case 2: + temp = 0x1c; + break; + default: + temp = ((Random() & 0x10)) ? 4 : 0x1c; + break; + } + super->direction = (temp + bVar4) & 0x18; + } else { + super->direction = bVar4; + } +} + +ASM_FUNC("asm/non_matching/mulldozer/sub_08033364.inc", bool32 sub_08033364(MulldozerEntity* this)) + +void (*const Mulldozer_Functions[])(MulldozerEntity*) = { + Mulldozer_OnInit, + sub_08032CAC, + sub_08032D3C, + (void (*)(MulldozerEntity*))sub_0804A7D4, + (void (*)(MulldozerEntity*))sub_08001242, + nullsub_157, +}; +void (*const Mulldozer_Actions[])(MulldozerEntity*) = { + Mulldozer_Init, Mulldozer_Action1, Mulldozer_Action2, Mulldozer_Action3, + Mulldozer_Action4, Mulldozer_Action5, Mulldozer_Action6, +}; +const u8 gUnk_080CEA50[] = { + 30, + 45, + 60, + 90, +}; +const u8 gUnk_080CEA54[] = { + 252, + 4, +}; +const s8 gUnk_080CEA56[] = { 0, 6, -3, 3, -6, 0, -3, -3, 0, -6, 3, -3, 6, 0, 3, 3 };