diff --git a/asm/moldworm.s b/asm/moldworm.s deleted file mode 100644 index 18884dc8..00000000 --- a/asm/moldworm.s +++ /dev/null @@ -1,1523 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Moldworm -Moldworm: @ 0x08023038 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrh r5, [r4, #0x2e] - ldrh r6, [r4, #0x32] - ldrb r1, [r4, #0xa] - cmp r1, #0 - bne _0802306C - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _08023052 - adds r0, r4, #0 - bl sub_0802390C -_08023052: - adds r0, r4, #0 - adds r0, #0x7c - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x7d - strb r0, [r1] - ldr r1, _08023068 @ =gUnk_080CBC38 - adds r0, r4, #0 - bl EnemyFunctionHandler - b _08023090 - .align 2, 0 -_08023068: .4byte gUnk_080CBC38 -_0802306C: - ldr r0, [r4, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - beq _08023088 - cmp r1, #8 - beq _08023080 - adds r0, r4, #0 - bl sub_080235BC - b _08023090 -_08023080: - adds r0, r4, #0 - bl sub_08023730 - b _08023090 -_08023088: - adds r0, r4, #0 - bl DeleteEntity - b _080230CA -_08023090: - ldr r0, [r4, #0x50] - adds r2, r0, #0 - adds r2, #0x7c - adds r0, #0x7d - ldrb r1, [r2] - ldrb r0, [r0] - cmp r1, r0 - beq _080230CA - ldr r1, [r4, #0x54] - cmp r1, #0 - beq _080230CA - ldrb r2, [r2] - subs r2, #1 - movs r0, #0xf - ands r2, r0 - adds r2, #0x78 - adds r2, r1, r2 - ldrh r1, [r4, #0x2e] - subs r1, r1, r5 - adds r1, #8 - movs r3, #0xf - ands r1, r3 - lsls r1, r1, #4 - ldrh r0, [r4, #0x32] - subs r0, r0, r6 - adds r0, #8 - ands r0, r3 - orrs r1, r0 - strb r1, [r2] -_080230CA: - pop {r4, r5, r6, pc} - - thumb_func_start sub_080230CC -sub_080230CC: @ 0x080230CC - push {lr} - ldr r2, _080230E0 @ =gUnk_080CBC50 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080230E0: .4byte gUnk_080CBC50 - - thumb_func_start sub_080230E4 -sub_080230E4: @ 0x080230E4 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xd] - cmp r0, #0xff - bne _08023132 - movs r2, #0 - movs r0, #7 - strb r0, [r5, #0xc] - movs r3, #1 - strb r3, [r5, #0xe] - strb r2, [r5, #0xd] - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x85 - strb r0, [r1] - subs r1, #2 - movs r0, #0xf8 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x7f - strb r2, [r0] - subs r0, #4 - strb r2, [r0] - subs r0, #0x3a - ldrb r0, [r0] - cmp r0, #0x80 - beq _0802311E - cmp r0, #0x9e - bne _08023128 -_0802311E: - strb r2, [r5, #0xb] - adds r1, r5, #0 - adds r1, #0x80 - movs r0, #0x14 - b _08023130 -_08023128: - strb r3, [r5, #0xb] - adds r1, r5, #0 - adds r1, #0x80 - movs r0, #8 -_08023130: - strb r0, [r1] -_08023132: - adds r0, r5, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0802318A - adds r0, r5, #0 - adds r0, #0x7f - ldrb r0, [r0] - cmp r0, #0 - bne _0802318A - ldrb r0, [r5, #0xc] - cmp r0, #7 - bne _0802318A - ldr r4, _08023194 @ =gPlayerEntity - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r4, #0x20] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r4, #0x3d - movs r0, #0xec - strb r0, [r4] - ldr r2, _08023198 @ =gPlayerState - movs r0, #0x41 - strb r0, [r2, #2] - ldr r0, [r2, #0x30] - ldr r1, _0802319C @ =0xFFF7FFFF - ands r0, r1 - str r0, [r2, #0x30] -_0802318A: - ldr r1, _080231A0 @ =gUnk_080CBC38 - adds r0, r5, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_08023194: .4byte gPlayerEntity -_08023198: .4byte gPlayerState -_0802319C: .4byte 0xFFF7FFFF -_080231A0: .4byte gUnk_080CBC38 - - thumb_func_start sub_080231A4 -sub_080231A4: @ 0x080231A4 - push {lr} - adds r2, r0, #0 - adds r2, #0x7c - ldrb r1, [r2] - adds r1, #1 - strb r1, [r2] - bl sub_08001324 - - thumb_func_start nullsub_134 -nullsub_134: @ 0x080231B4 - pop {pc} - .align 2, 0 - - thumb_func_start nullsub_135 -nullsub_135: @ 0x080231B8 - bx lr - .align 2, 0 - - thumb_func_start sub_080231BC -sub_080231BC: @ 0x080231BC - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r0, _08023280 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x3f - bhi _0802327E - movs r0, #0xf - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - str r4, [r6, #0x54] - str r6, [r4, #0x50] - movs r0, #0xf - movs r1, #2 - bl CreateEnemy - adds r5, r0, #0 - str r5, [r4, #0x54] - str r6, [r5, #0x50] - movs r0, #0xf - movs r1, #3 - bl CreateEnemy - adds r4, r0, #0 - str r4, [r5, #0x54] - str r6, [r4, #0x50] - movs r0, #0xf - movs r1, #4 - bl CreateEnemy - adds r5, r0, #0 - str r5, [r4, #0x54] - str r6, [r5, #0x50] - movs r0, #0xf - movs r1, #5 - bl CreateEnemy - adds r4, r0, #0 - str r4, [r5, #0x54] - str r6, [r4, #0x50] - movs r0, #0xf - movs r1, #6 - bl CreateEnemy - adds r5, r0, #0 - str r5, [r4, #0x54] - str r6, [r5, #0x50] - movs r0, #0xf - movs r1, #7 - bl CreateEnemy - adds r4, r0, #0 - str r4, [r5, #0x54] - str r6, [r4, #0x50] - movs r0, #0xf - movs r1, #8 - bl CreateEnemy - str r0, [r4, #0x54] - str r4, [r0, #0x74] - str r6, [r0, #0x50] - movs r1, #0 - str r1, [r0, #0x54] - adds r0, r6, #0 - bl sub_0804A720 - movs r0, #6 - strb r0, [r6, #0xc] - movs r1, #0x1e - strb r1, [r6, #0xe] - str r6, [r6, #0x50] - adds r0, r6, #0 - adds r0, #0x78 - strh r1, [r0] - ldrb r1, [r6, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r6, #0x1a] - bl Random - movs r1, #0x1f - ands r0, r1 - strb r0, [r6, #0x15] - ldrb r0, [r6, #0x15] - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - asrs r0, r0, #2 - strb r0, [r6, #0x14] - ldrb r1, [r6, #0x14] - adds r0, r6, #0 - bl InitializeAnimation -_0802327E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08023280: .4byte gEntCount - - thumb_func_start nullsub_136 -nullsub_136: @ 0x08023284 - bx lr - .align 2, 0 - - thumb_func_start sub_08023288 -sub_08023288: @ 0x08023288 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r7, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _08023324 - ldrb r1, [r7, #0xe] - adds r0, r1, #1 - strb r0, [r7, #0xe] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - bne _08023324 - bl Random - adds r4, r0, #0 - movs r0, #0x1e - ands r4, r0 - movs r0, #0 - mov r8, r0 - ldr r2, _08023308 @ =gPlayerEntity - mov sb, r2 - ldr r0, _0802330C @ =gUnk_080CBC70 - mov sl, r0 -_080232C2: - mov r2, sb - movs r0, #0x2e - ldrsh r1, [r2, r0] - mov r2, sl - adds r0, r4, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r6, r1, r0 - mov r0, sb - movs r2, #0x32 - ldrsh r1, [r0, r2] - adds r0, r4, #1 - add r0, sl - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r5, r1, r0 - ldr r0, _08023310 @ =gUnk_03001198 - ldrb r2, [r0] - adds r0, r6, #0 - adds r1, r5, #0 - bl GetTileTypeByPos - bl sub_08023A38 - cmp r0, #0 - beq _08023314 - adds r0, r7, #0 - adds r1, r6, #0 - adds r2, r5, #0 - bl sub_08023990 - b _08023324 - .align 2, 0 -_08023308: .4byte gPlayerEntity -_0802330C: .4byte gUnk_080CBC70 -_08023310: .4byte gUnk_03001198 -_08023314: - adds r4, #2 - movs r0, #0x1e - ands r4, r0 - movs r2, #1 - add r8, r2 - mov r0, r8 - cmp r0, #0xf - bls _080232C2 -_08023324: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08023330 -sub_08023330: @ 0x08023330 - push {r4, r5, lr} - adds r5, r0, #0 - bl GetNextFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08023394 - movs r0, #4 - strb r0, [r5, #0xc] - movs r0, #0x19 - strb r0, [r5, #0xe] - ldrb r1, [r5, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - adds r1, r5, #0 - adds r1, #0x78 - movs r4, #0 - movs r0, #0x96 - lsls r0, r0, #2 - strh r0, [r1] - bl Random - movs r1, #0x1c - ands r0, r1 - strb r0, [r5, #0x15] - lsrs r0, r0, #2 - strb r0, [r5, #0x14] - adds r0, r5, #0 - adds r0, #0x7b - strb r4, [r0] - adds r0, #4 - strb r4, [r0] - ldrb r1, [r5, #0x14] - adds r0, r5, #0 - bl sub_08023A88 - ldr r1, [r5, #0x54] - adds r0, r5, #0 - bl CopyPosition - adds r0, r5, #0 - movs r1, #4 - movs r2, #0 - bl CreateFx -_08023394: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08023398 -sub_08023398: @ 0x08023398 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r0, #0x7c - ldrb r1, [r0] - adds r1, #1 - strb r1, [r0] - adds r0, #3 - ldrb r0, [r0] - cmp r0, #0 - beq _080233C0 - adds r0, r5, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - bne _080233C0 - adds r1, r5, #0 - adds r1, #0x78 - movs r0, #1 - strh r0, [r1] -_080233C0: - adds r4, r5, #0 - adds r4, #0x78 - ldrh r0, [r4] - subs r0, #1 - strh r0, [r4] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08023416 - adds r0, r5, #0 - bl GetTileTypeByEntity - bl sub_08023A38 - cmp r0, #0 - beq _08023412 - movs r0, #5 - strb r0, [r5, #0xc] - adds r1, r5, #0 - adds r1, #0x7f - movs r0, #0 - strb r0, [r1] - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0x85 - strb r0, [r1] - ldr r1, [r5, #0x54] - movs r0, #1 - strb r0, [r1, #0xe] - adds r0, r5, #0 - bl sub_08023A68 - adds r0, r5, #0 - movs r1, #4 - movs r2, #0 - bl CreateFx - b _0802349C -_08023412: - movs r0, #0x28 - strh r0, [r4] -_08023416: - adds r0, r5, #0 - adds r0, #0x7f - ldrb r0, [r0] - cmp r0, #0 - beq _08023426 - adds r0, r5, #0 - bl sub_08023AB0 -_08023426: - ldrb r0, [r5, #0xe] - subs r1, r0, #1 - strb r1, [r5, #0xe] - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bhi _08023440 - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0802349C - movs r0, #0x19 - strb r0, [r5, #0xe] - b _0802349C -_08023440: - ldr r4, [r5, #0x2c] - ldr r6, [r5, #0x30] - adds r0, r5, #0 - bl ProcessMovement - ldr r0, [r5, #0x2c] - cmp r0, r4 - bne _08023460 - ldr r0, [r5, #0x30] - cmp r0, r6 - bne _08023460 - adds r1, r5, #0 - adds r1, #0x7c - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] -_08023460: - ldr r0, _080234A0 @ =gScreenTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _0802349C - adds r0, r5, #0 - movs r1, #1 - bl sub_08049F84 - adds r1, r0, #0 - adds r0, r5, #0 - bl sub_08004596 - ldrb r0, [r5, #0x15] - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - asrs r0, r0, #2 - ldrb r1, [r5, #0x14] - cmp r0, r1 - beq _0802349C - strb r0, [r5, #0x14] - adds r1, r5, #0 - adds r1, #0x7b - ldrb r1, [r1] - adds r1, r0, r1 - adds r0, r5, #0 - bl InitializeAnimation -_0802349C: - pop {r4, r5, r6, pc} - .align 2, 0 -_080234A0: .4byte gScreenTransition - - thumb_func_start sub_080234A4 -sub_080234A4: @ 0x080234A4 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7c - ldrb r1, [r0] - adds r1, #1 - strb r1, [r0] - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x7f - ldrb r0, [r0] - cmp r0, #0 - beq _080234D6 - movs r0, #6 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #0xa - ands r0, r1 - strb r0, [r4, #0x18] - adds r1, r4, #0 - adds r1, #0x78 - movs r0, #0x96 - lsls r0, r0, #1 - strh r0, [r1] -_080234D6: - pop {r4, pc} - - thumb_func_start sub_080234D8 -sub_080234D8: @ 0x080234D8 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x78 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0802351A - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x1a] - subs r0, #0x12 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r4, #0x1a] - bl Random - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] - ldrb r0, [r4, #0x15] - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - asrs r0, r0, #2 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl sub_08023A88 -_0802351A: - pop {r4, pc} - - thumb_func_start sub_0802351C -sub_0802351C: @ 0x0802351C - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldrb r0, [r7, #0xe] - cmp r0, #0 - beq _0802355A - ldrb r0, [r7, #0xb] - cmp r0, #1 - beq _08023534 - ldr r0, _080235A8 @ =gPlayerEntity - ldrb r0, [r0, #0x1e] - cmp r0, #0xff - bne _0802355A -_08023534: - movs r0, #0 - strb r0, [r7, #0xe] - ldr r1, [r7, #0x54] - movs r0, #3 - strb r0, [r1, #0xc] - ldr r1, [r7, #0x54] - adds r0, r7, #0 - adds r0, #0x80 - ldrb r0, [r0] - strb r0, [r1, #0xf] - ldr r0, [r7, #0x54] - ldrb r1, [r0, #0x14] - adds r1, #1 - bl InitializeAnimation - ldrb r1, [r7, #0x14] - adds r0, r7, #0 - bl InitializeAnimation -_0802355A: - adds r0, r7, #0 - adds r0, #0x7f - ldrb r0, [r0] - cmp r0, #0 - bne _080235B4 - ldrb r0, [r7, #0xb] - cmp r0, #0 - bne _080235B8 - ldr r5, _080235A8 @ =gPlayerEntity - ldrb r0, [r7, #0x14] - movs r4, #7 - adds r2, r4, #0 - ands r2, r0 - strb r2, [r5, #0x14] - ldr r3, _080235AC @ =gPlayerState - ldr r0, [r3, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xc - orrs r0, r1 - str r0, [r3, #0x30] - ldr r6, _080235B0 @ =gUnk_080CBC90 - adds r2, r2, r6 - movs r3, #0 - ldrsb r3, [r2, r3] - lsls r3, r3, #0x10 - adds r0, r7, #0 - adds r1, r5, #0 - movs r2, #0 - bl PositionRelative - ldrb r0, [r7, #0x14] - ands r4, r0 - adds r4, r4, r6 - ldrb r0, [r4] - rsbs r0, r0, #0 - adds r5, #0x63 - strb r0, [r5] - b _080235B8 - .align 2, 0 -_080235A8: .4byte gPlayerEntity -_080235AC: .4byte gPlayerState -_080235B0: .4byte gUnk_080CBC90 -_080235B4: - movs r0, #4 - strb r0, [r7, #0xc] -_080235B8: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_080235BC -sub_080235BC: @ 0x080235BC - push {lr} - ldr r2, _080235D0 @ =gUnk_080CBC98 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080235D0: .4byte gUnk_080CBC98 - - thumb_func_start sub_080235D4 -sub_080235D4: @ 0x080235D4 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r1, [r4, #0x50] - ldrh r0, [r1, #0x2e] - strh r0, [r4, #0x2e] - ldrh r0, [r1, #0x32] - strh r0, [r4, #0x32] - adds r0, r4, #0 - bl sub_080239F0 - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _080235F6 - movs r0, #0x10 - b _080235F8 -_080235F6: - movs r0, #0x12 -_080235F8: - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_08023604 -sub_08023604: @ 0x08023604 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x50] - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - adds r0, r0, r2 - adds r0, #0x78 - ldrb r0, [r0] - cmp r0, #0x88 - beq _08023640 - movs r1, #0 - movs r0, #2 - strb r0, [r2, #0xc] - strb r1, [r2, #0xe] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - bl sub_08023644 -_08023640: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08023644 -sub_08023644: @ 0x08023644 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - adds r0, r5, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0x17 - bne _08023692 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08023692 - movs r0, #0x2e - ldrsh r1, [r4, r0] - movs r2, #0x2e - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _08023692 - movs r6, #0x32 - ldrsh r1, [r4, r6] - movs r2, #0x32 - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _08023692 - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x54] - strb r2, [r0, #0xe] - adds r0, r4, #0 - bl sub_080239F0 -_08023692: - adds r0, r5, #0 - adds r0, #0x7c - adds r1, r5, #0 - adds r1, #0x7d - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - beq _080236F2 - movs r2, #0xf - adds r1, r2, #0 - ands r1, r0 - adds r1, #0x78 - adds r1, r4, r1 - ldrb r0, [r1] - lsrs r0, r0, #4 - ldr r3, _080236F4 @ =0x0000FFF8 - adds r0, r0, r3 - ldrh r6, [r4, #0x2e] - adds r0, r0, r6 - strh r0, [r4, #0x2e] - ldrb r0, [r1] - ands r2, r0 - adds r2, r2, r3 - ldrh r0, [r4, #0x32] - adds r2, r2, r0 - strh r2, [r4, #0x32] - ldrb r2, [r5, #0x1b] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r4, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, #0x1b] - ldrb r0, [r5, #0x19] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r4, #0x19] - ands r1, r2 - orrs r1, r0 - strb r1, [r4, #0x19] - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] -_080236F2: - pop {r4, r5, r6, pc} - .align 2, 0 -_080236F4: .4byte 0x0000FFF8 - - thumb_func_start sub_080236F8 -sub_080236F8: @ 0x080236F8 - 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 _0802372E - movs r0, #2 - strb r0, [r4, #0xc] - ldr r1, [r4, #0x54] - movs r0, #3 - strb r0, [r1, #0xc] - ldr r1, [r4, #0x54] - ldr r0, [r4, #0x50] - adds r0, #0x80 - ldrb r0, [r0] - strb r0, [r1, #0xf] - ldr r0, [r4, #0x54] - ldrb r1, [r0, #0x14] - adds r1, #1 - bl InitializeAnimation - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation -_0802372E: - pop {r4, pc} - - thumb_func_start sub_08023730 -sub_08023730: @ 0x08023730 - push {lr} - ldr r2, _08023744 @ =gUnk_080CBCA8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08023744: .4byte gUnk_080CBCA8 - - thumb_func_start sub_08023748 -sub_08023748: @ 0x08023748 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x14 - strb r0, [r4, #0x14] - ldr r1, [r4, #0x50] - ldrh r0, [r1, #0x2e] - strh r0, [r4, #0x2e] - ldrh r0, [r1, #0x32] - strh r0, [r4, #0x32] - adds r0, r4, #0 - bl sub_080239F0 - adds r0, r4, #0 - bl sub_08023A68 - pop {r4, pc} - - thumb_func_start sub_0802376C -sub_0802376C: @ 0x0802376C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - ldrb r0, [r5, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _0802379A - adds r0, r5, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xf - bhi _0802379A - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r4, #0x18] - adds r0, r4, #0 - bl GetNextFrame -_0802379A: - adds r0, r5, #0 - adds r0, #0x7c - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - adds r0, r0, r4 - adds r0, #0x78 - ldrb r0, [r0] - cmp r0, #0x88 - beq _080237D4 - movs r1, #0 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldr r0, [r4, #0x50] - adds r0, #0x7f - movs r1, #1 - strb r1, [r0] - adds r0, r4, #0 - movs r1, #0x14 - bl sub_08023A88 - adds r0, r4, #0 - bl sub_080237D8 -_080237D4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080237D8 -sub_080237D8: @ 0x080237D8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - adds r0, r5, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0x17 - bne _0802382E - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802382E - movs r0, #0x2e - ldrsh r1, [r4, r0] - movs r2, #0x2e - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _0802382E - movs r6, #0x32 - ldrsh r1, [r4, r6] - movs r2, #0x32 - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _0802382E - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r5, #0 - adds r0, #0x7f - strb r2, [r0] - adds r0, r4, #0 - bl sub_080239F0 - adds r0, r4, #0 - bl sub_08023A68 -_0802382E: - adds r0, r5, #0 - adds r0, #0x7c - adds r1, r5, #0 - adds r1, #0x7d - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - beq _0802388E - movs r2, #0xf - adds r1, r2, #0 - ands r1, r0 - adds r1, #0x78 - adds r1, r4, r1 - ldrb r0, [r1] - lsrs r0, r0, #4 - ldr r3, _08023890 @ =0x0000FFF8 - adds r0, r0, r3 - ldrh r6, [r4, #0x2e] - adds r0, r0, r6 - strh r0, [r4, #0x2e] - ldrb r0, [r1] - ands r2, r0 - adds r2, r2, r3 - ldrh r0, [r4, #0x32] - adds r2, r2, r0 - strh r2, [r4, #0x32] - ldrb r2, [r5, #0x1b] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r4, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, #0x1b] - ldrb r0, [r5, #0x19] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r4, #0x19] - ands r1, r2 - orrs r1, r0 - strb r1, [r4, #0x19] - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x38 - strb r1, [r0] -_0802388E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08023890: .4byte 0x0000FFF8 - - thumb_func_start sub_08023894 -sub_08023894: @ 0x08023894 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08023900 - movs r0, #2 - strb r0, [r5, #0xc] - ldr r0, [r5, #0x50] - adds r0, #0x7f - movs r1, #1 - strb r1, [r0] - ldrb r1, [r5, #0x14] - adds r0, r5, #0 - bl InitializeAnimation - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _08023900 - ldr r2, _08023904 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xe - orrs r0, r1 - str r0, [r2, #0x30] - ldr r4, _08023908 @ =gPlayerEntity - ldrh r0, [r5, #0x2e] - strh r0, [r4, #0x2e] - ldrh r0, [r5, #0x32] - strh r0, [r4, #0x32] - ldr r0, [r5, #0x74] - adds r1, r5, #0 - bl GetFacingDirection - adds r0, #4 - movs r1, #0x18 - ands r0, r1 - strb r0, [r4, #0x15] - lsrs r0, r0, #2 - strb r0, [r4, #0x14] - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0xc - strb r0, [r1] - subs r0, #0x1c - bl ModHealth - adds r0, r4, #0 - movs r1, #0x7a - bl sub_0800449C -_08023900: - pop {r4, r5, pc} - .align 2, 0 -_08023904: .4byte gPlayerState -_08023908: .4byte gPlayerEntity - - thumb_func_start sub_0802390C -sub_0802390C: @ 0x0802390C - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08023932 - ldr r2, [r5, #0x54] - adds r3, r5, #0 - adds r3, #0x3d -_08023922: - ldrb r0, [r3] - adds r1, r2, #0 - adds r1, #0x3d - strb r0, [r1] - ldr r2, [r2, #0x54] - cmp r2, #0 - bne _08023922 - b _0802398C -_08023932: - ldr r2, [r5, #0x54] - b _0802393C -_08023936: - ldr r2, [r2, #0x54] - cmp r2, #0 - beq _0802398C -_0802393C: - adds r0, r2, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08023936 - movs r0, #0x45 - adds r0, r0, r2 - mov ip, r0 - ldrb r1, [r0] - movs r4, #0xff - subs r0, r4, r1 - lsls r0, r0, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0 - beq _08023936 - adds r0, r1, #0 - orrs r0, r4 - mov r1, ip - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3d - ldrb r4, [r0] - adds r1, r5, #0 - adds r1, #0x45 - ldrb r0, [r1] - cmp r0, r3 - blo _0802397A - subs r0, r0, r3 - b _0802397C -_0802397A: - movs r0, #0 -_0802397C: - strb r0, [r1] - adds r2, r5, #0 -_08023980: - adds r0, r2, #0 - adds r0, #0x3d - strb r4, [r0] - ldr r2, [r2, #0x54] - cmp r2, #0 - bne _08023980 -_0802398C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08023990 -sub_08023990: @ 0x08023990 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #3 - strb r0, [r5, #0xc] - ldrb r3, [r5, #0x18] - subs r0, #7 - ands r0, r3 - movs r3, #1 - orrs r0, r3 - strb r0, [r5, #0x18] - movs r0, #0x55 - strb r0, [r5, #0x1a] - adds r4, r5, #0 - adds r4, #0x29 - ldrb r0, [r4] - movs r3, #7 - orrs r0, r3 - strb r0, [r4] - strh r1, [r5, #0x2e] - strh r2, [r5, #0x32] - ldr r0, _080239EC @ =gPlayerEntity - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x38 - strb r1, [r0] - adds r0, r5, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r5, #0 - movs r1, #0x16 - bl InitializeAnimation - ldr r4, [r5, #0x54] -_080239D4: - adds r0, r4, #0 - bl sub_080239F0 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r4, [r4, #0x54] - cmp r4, #0 - bne _080239D4 - pop {r4, r5, pc} - .align 2, 0 -_080239EC: .4byte gPlayerEntity - - thumb_func_start sub_080239F0 -sub_080239F0: @ 0x080239F0 - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x78 - movs r0, #0x88 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - bx lr - - thumb_func_start sub_08023A38 -sub_08023A38: @ 0x08023A38 - push {lr} - adds r1, r0, #0 - cmp r1, #0x1a - beq _08023A5A - cmp r1, #0x29 - beq _08023A5A - ldr r0, _08023A60 @ =gUnk_080B37A0 - adds r0, r1, r0 - ldrb r1, [r0] - cmp r1, #9 - beq _08023A5A - cmp r1, #0xb - beq _08023A5A - cmp r1, #0xa - beq _08023A5A - cmp r1, #0xc - bne _08023A64 -_08023A5A: - movs r0, #1 - b _08023A66 - .align 2, 0 -_08023A60: .4byte gUnk_080B37A0 -_08023A64: - movs r0, #0 -_08023A66: - pop {pc} - - thumb_func_start sub_08023A68 -sub_08023A68: @ 0x08023A68 - push {r4, lr} - adds r4, r0, #0 - movs r1, #5 - bl sub_0801D2B4 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0x17 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_08023A88 -sub_08023A88: @ 0x08023A88 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r1, #0x22 - bl sub_0801D2B4 - adds r2, r4, #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] - adds r0, r4, #0 - adds r1, r5, #0 - bl InitializeAnimation - pop {r4, r5, pc} - - thumb_func_start sub_08023AB0 -sub_08023AB0: @ 0x08023AB0 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r7, r4, #0 - adds r7, #0x7b - ldrb r0, [r7] - cmp r0, #8 - bne _08023AF6 - adds r5, r4, #0 - adds r5, #0x7e - ldrb r0, [r5] - adds r6, r0, #0 - cmp r6, #0 - bne _08023B00 - adds r0, r4, #0 - bl sub_08023B38 - cmp r0, #0 - beq _08023ADE - adds r0, r4, #0 - adds r0, #0x78 - ldrh r0, [r0] - cmp r0, #0x1d - bhi _08023B34 -_08023ADE: - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x85 - strb r0, [r1] - strb r6, [r7] - movs r0, #0x1e - strb r0, [r5] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - b _08023B34 -_08023AF6: - adds r5, r4, #0 - adds r5, #0x7e - ldrb r0, [r5] - cmp r0, #0 - beq _08023B06 -_08023B00: - subs r0, #1 - strb r0, [r5] - b _08023B34 -_08023B06: - adds r0, r4, #0 - adds r0, #0x78 - ldrh r0, [r0] - cmp r0, #0x59 - bls _08023B34 - adds r0, r4, #0 - bl sub_08023B38 - cmp r0, #0 - beq _08023B34 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x87 - strb r0, [r1] - movs r0, #8 - strb r0, [r7] - movs r0, #0xa - strb r0, [r5] - ldrb r1, [r4, #0x14] - adds r1, #8 - adds r0, r4, #0 - bl InitializeAnimation -_08023B34: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08023B38 -sub_08023B38: @ 0x08023B38 - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r0, #1 - bl sub_08049DF4 - adds r5, r0, #0 - cmp r5, #0 - bne _08023B4C - movs r0, #0 - b _08023B8E -_08023B4C: - movs r0, #0x2e - ldrsh r2, [r4, r0] - ldr r3, _08023B90 @ =gUnk_080CBCB8 - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - adds r1, r0, r3 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - adds r2, r2, r1 - movs r6, #0x32 - ldrsh r1, [r4, r6] - adds r0, #1 - adds r0, r0, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r1, r1, r0 - movs r3, #0 - movs r4, #0x2e - ldrsh r0, [r5, r4] - subs r0, r0, r2 - adds r0, #0x14 - cmp r0, #0x28 - bhi _08023B8C - movs r6, #0x32 - ldrsh r0, [r5, r6] - subs r0, r0, r1 - adds r0, #0x14 - cmp r0, #0x28 - bhi _08023B8C - movs r3, #1 -_08023B8C: - adds r0, r3, #0 -_08023B8E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08023B90: .4byte gUnk_080CBCB8 diff --git a/asm/non_matching/moldworm/moldworm.inc b/asm/non_matching/moldworm/moldworm.inc new file mode 100644 index 00000000..8f9c5c64 --- /dev/null +++ b/asm/non_matching/moldworm/moldworm.inc @@ -0,0 +1,83 @@ + + .syntax unified + + .text + + + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldrh r5, [r4, #0x2e] + ldrh r6, [r4, #0x32] + ldrb r1, [r4, #0xa] + cmp r1, #0 + bne _0802306C + ldrb r0, [r4, #0xc] + cmp r0, #0 + beq _08023052 + adds r0, r4, #0 + bl sub_0802390C +_08023052: + adds r0, r4, #0 + adds r0, #0x7c + ldrb r0, [r0] + adds r1, r4, #0 + adds r1, #0x7d + strb r0, [r1] + ldr r1, _08023068 @ =gUnk_080CBC38 + adds r0, r4, #0 + bl EnemyFunctionHandler + b _08023090 + .align 2, 0 +_08023068: .4byte gUnk_080CBC38 +_0802306C: + ldr r0, [r4, #0x50] + ldr r0, [r0, #4] + cmp r0, #0 + beq _08023088 + cmp r1, #8 + beq _08023080 + adds r0, r4, #0 + bl sub_080235BC + b _08023090 +_08023080: + adds r0, r4, #0 + bl sub_08023730 + b _08023090 +_08023088: + adds r0, r4, #0 + bl DeleteEntity + b _080230CA +_08023090: + ldr r0, [r4, #0x50] + adds r2, r0, #0 + adds r2, #0x7c + adds r0, #0x7d + ldrb r1, [r2] + ldrb r0, [r0] + cmp r1, r0 + beq _080230CA + ldr r1, [r4, #0x54] + cmp r1, #0 + beq _080230CA + ldrb r2, [r2] + subs r2, #1 + movs r0, #0xf + ands r2, r0 + adds r2, #0x78 + adds r2, r1, r2 + ldrh r1, [r4, #0x2e] + subs r1, r1, r5 + adds r1, #8 + movs r3, #0xf + ands r1, r3 + lsls r1, r1, #4 + ldrh r0, [r4, #0x32] + subs r0, r0, r6 + adds r0, #8 + ands r0, r3 + orrs r1, r0 + strb r1, [r2] +_080230CA: + pop {r4, r5, r6, pc} + + .syntax divided diff --git a/asm/non_matching/moldworm/sub_080239F0.inc b/asm/non_matching/moldworm/sub_080239F0.inc new file mode 100644 index 00000000..93034e9e --- /dev/null +++ b/asm/non_matching/moldworm/sub_080239F0.inc @@ -0,0 +1,43 @@ + + .syntax unified + + .text + + adds r2, r0, #0 + adds r1, r2, #0 + adds r1, #0x78 + movs r0, #0x88 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + bx lr + + .syntax divided diff --git a/asm/non_matching/moldworm/sub_08023B38.inc b/asm/non_matching/moldworm/sub_08023B38.inc new file mode 100644 index 00000000..98faa12a --- /dev/null +++ b/asm/non_matching/moldworm/sub_08023B38.inc @@ -0,0 +1,55 @@ + + .syntax unified + + .text + + push {r4, r5, r6, lr} + adds r4, r0, #0 + movs r0, #1 + bl sub_08049DF4 + adds r5, r0, #0 + cmp r5, #0 + bne _08023B4C + movs r0, #0 + b _08023B8E +_08023B4C: + movs r0, #0x2e + ldrsh r2, [r4, r0] + ldr r3, _08023B90 @ =gUnk_080CBCB8 + ldrb r0, [r4, #0x14] + lsls r0, r0, #1 + adds r1, r0, r3 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r2, r2, r1 + movs r6, #0x32 + ldrsh r1, [r4, r6] + adds r0, #1 + adds r0, r0, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r1, r1, r0 + movs r3, #0 + movs r4, #0x2e + ldrsh r0, [r5, r4] + subs r0, r0, r2 + adds r0, #0x14 + cmp r0, #0x28 + bhi _08023B8C + movs r6, #0x32 + ldrsh r0, [r5, r6] + subs r0, r0, r1 + adds r0, #0x14 + cmp r0, #0x28 + bhi _08023B8C + movs r3, #1 +_08023B8C: + adds r0, r3, #0 +_08023B8E: + pop {r4, r5, r6, pc} + .align 2, 0 +_08023B90: .4byte gUnk_080CBCB8 + + .syntax divided diff --git a/data/animations/moldworm.s b/data/animations/moldworm.s new file mode 100644 index 00000000..717039d5 --- /dev/null +++ b/data/animations/moldworm.s @@ -0,0 +1,79 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + +gUnk_080CBCC8:: @ 080CBCC8 + .incbin "baserom.gba", 0x0CBCC8, 0x0000004 + +gUnk_080CBCCC:: @ 080CBCCC + .incbin "baserom.gba", 0x0CBCCC, 0x0000004 + +gUnk_080CBCD0:: @ 080CBCD0 + .incbin "baserom.gba", 0x0CBCD0, 0x0000004 + +gUnk_080CBCD4:: @ 080CBCD4 + .incbin "baserom.gba", 0x0CBCD4, 0x0000004 + +gUnk_080CBCD8:: @ 080CBCD8 + .incbin "baserom.gba", 0x0CBCD8, 0x0000004 + +gUnk_080CBCDC:: @ 080CBCDC + .incbin "baserom.gba", 0x0CBCDC, 0x0000004 + +gUnk_080CBCE0:: @ 080CBCE0 + .incbin "baserom.gba", 0x0CBCE0, 0x0000004 + +gUnk_080CBCE4:: @ 080CBCE4 + .incbin "baserom.gba", 0x0CBCE4, 0x0000004 + +gUnk_080CBCE8:: @ 080CBCE8 + .incbin "baserom.gba", 0x0CBCE8, 0x0000004 + +gUnk_080CBCEC:: @ 080CBCEC + .incbin "baserom.gba", 0x0CBCEC, 0x0000004 + +gUnk_080CBCF0:: @ 080CBCF0 + .incbin "baserom.gba", 0x0CBCF0, 0x0000004 + +gUnk_080CBCF4:: @ 080CBCF4 + .incbin "baserom.gba", 0x0CBCF4, 0x0000004 + +gUnk_080CBCF8:: @ 080CBCF8 + .incbin "baserom.gba", 0x0CBCF8, 0x0000004 + +gUnk_080CBCFC:: @ 080CBCFC + .incbin "baserom.gba", 0x0CBCFC, 0x0000004 + +gUnk_080CBD00:: @ 080CBD00 + .incbin "baserom.gba", 0x0CBD00, 0x0000004 + +gUnk_080CBD04:: @ 080CBD04 + .incbin "baserom.gba", 0x0CBD04, 0x0000004 + +gUnk_080CBD08:: @ 080CBD08 + .incbin "baserom.gba", 0x0CBD08, 0x0000004 + +gUnk_080CBD0C:: @ 080CBD0C + .incbin "baserom.gba", 0x0CBD0C, 0x0000004 + +gUnk_080CBD10:: @ 080CBD10 + .incbin "baserom.gba", 0x0CBD10, 0x0000004 + +gUnk_080CBD14:: @ 080CBD14 + .incbin "baserom.gba", 0x0CBD14, 0x0000004 + +gUnk_080CBD18:: @ 080CBD18 + .incbin "baserom.gba", 0x0CBD18, 0x0000004 + +gUnk_080CBD1C:: @ 080CBD1C + .incbin "baserom.gba", 0x0CBD1C, 0x0000004 + +gUnk_080CBD20:: @ 080CBD20 + .incbin "baserom.gba", 0x0CBD20, 0x000002C + +gUnk_080CBD4C:: @ 080CBD4C + .incbin "baserom.gba", 0x0CBD4C, 0x000000C + +gUnk_080CBD58:: @ 080CBD58 + .incbin "baserom.gba", 0x0CBD58, 0x0000064 diff --git a/data/data_080CBC38.s b/data/data_080CBC38.s index 6c805bb0..d32b4131 100644 --- a/data/data_080CBC38.s +++ b/data/data_080CBC38.s @@ -3,102 +3,6 @@ .section .rodata -gUnk_080CBC38:: @ 080CBC38 - .incbin "baserom.gba", 0x0CBC38, 0x0000018 - -gUnk_080CBC50:: @ 080CBC50 - .incbin "baserom.gba", 0x0CBC50, 0x0000020 - -gUnk_080CBC70:: @ 080CBC70 - .incbin "baserom.gba", 0x0CBC70, 0x0000020 - -gUnk_080CBC90:: @ 080CBC90 - .incbin "baserom.gba", 0x0CBC90, 0x0000008 - -gUnk_080CBC98:: @ 080CBC98 - .incbin "baserom.gba", 0x0CBC98, 0x0000010 - -gUnk_080CBCA8:: @ 080CBCA8 - .incbin "baserom.gba", 0x0CBCA8, 0x0000010 - -gUnk_080CBCB8:: @ 080CBCB8 - .incbin "baserom.gba", 0x0CBCB8, 0x0000010 - -gUnk_080CBCC8:: @ 080CBCC8 - .incbin "baserom.gba", 0x0CBCC8, 0x0000004 - -gUnk_080CBCCC:: @ 080CBCCC - .incbin "baserom.gba", 0x0CBCCC, 0x0000004 - -gUnk_080CBCD0:: @ 080CBCD0 - .incbin "baserom.gba", 0x0CBCD0, 0x0000004 - -gUnk_080CBCD4:: @ 080CBCD4 - .incbin "baserom.gba", 0x0CBCD4, 0x0000004 - -gUnk_080CBCD8:: @ 080CBCD8 - .incbin "baserom.gba", 0x0CBCD8, 0x0000004 - -gUnk_080CBCDC:: @ 080CBCDC - .incbin "baserom.gba", 0x0CBCDC, 0x0000004 - -gUnk_080CBCE0:: @ 080CBCE0 - .incbin "baserom.gba", 0x0CBCE0, 0x0000004 - -gUnk_080CBCE4:: @ 080CBCE4 - .incbin "baserom.gba", 0x0CBCE4, 0x0000004 - -gUnk_080CBCE8:: @ 080CBCE8 - .incbin "baserom.gba", 0x0CBCE8, 0x0000004 - -gUnk_080CBCEC:: @ 080CBCEC - .incbin "baserom.gba", 0x0CBCEC, 0x0000004 - -gUnk_080CBCF0:: @ 080CBCF0 - .incbin "baserom.gba", 0x0CBCF0, 0x0000004 - -gUnk_080CBCF4:: @ 080CBCF4 - .incbin "baserom.gba", 0x0CBCF4, 0x0000004 - -gUnk_080CBCF8:: @ 080CBCF8 - .incbin "baserom.gba", 0x0CBCF8, 0x0000004 - -gUnk_080CBCFC:: @ 080CBCFC - .incbin "baserom.gba", 0x0CBCFC, 0x0000004 - -gUnk_080CBD00:: @ 080CBD00 - .incbin "baserom.gba", 0x0CBD00, 0x0000004 - -gUnk_080CBD04:: @ 080CBD04 - .incbin "baserom.gba", 0x0CBD04, 0x0000004 - -gUnk_080CBD08:: @ 080CBD08 - .incbin "baserom.gba", 0x0CBD08, 0x0000004 - -gUnk_080CBD0C:: @ 080CBD0C - .incbin "baserom.gba", 0x0CBD0C, 0x0000004 - -gUnk_080CBD10:: @ 080CBD10 - .incbin "baserom.gba", 0x0CBD10, 0x0000004 - -gUnk_080CBD14:: @ 080CBD14 - .incbin "baserom.gba", 0x0CBD14, 0x0000004 - -gUnk_080CBD18:: @ 080CBD18 - .incbin "baserom.gba", 0x0CBD18, 0x0000004 - -gUnk_080CBD1C:: @ 080CBD1C - .incbin "baserom.gba", 0x0CBD1C, 0x0000004 - -gUnk_080CBD20:: @ 080CBD20 - .incbin "baserom.gba", 0x0CBD20, 0x000002C - -gUnk_080CBD4C:: @ 080CBD4C - .incbin "baserom.gba", 0x0CBD4C, 0x000000C - -gUnk_080CBD58:: @ 080CBD58 - .incbin "baserom.gba", 0x0CBD58, 0x0000064 - gUnk_080CBDBC:: @ 080CBDBC .incbin "baserom.gba", 0x0CBDBC, 0x0000018 diff --git a/include/entity.h b/include/entity.h index dc269c33..477889f4 100644 --- a/include/entity.h +++ b/include/entity.h @@ -177,6 +177,12 @@ extern void PositionRelative(Entity*, Entity*, s32, s32); #define DirectionToAnimationState(expr) (DirectionRoundUp(expr) >> 3) #define DirectionFromAnimationState(expr) (expr << 3) +#define Direction8Round(expr) ((expr) & 0x1c) +#define Direction8RoundUp(expr) Direction8Round((expr) + 2) +#define Direction8TurnAround(expr) (Direction8RoundUp(expr) ^ 0x10) +#define Direction8ToAnimationState(expr) (Direction8RoundUp(expr) >> 2) +#define Direction8FromAnimationState(expr) (expr << 2) + extern Entity gUnk_03003DA0; #endif diff --git a/linker.ld b/linker.ld index a0d37ce8..eaf61fe8 100644 --- a/linker.ld +++ b/linker.ld @@ -340,7 +340,7 @@ SECTIONS { src/enemy/cuccoChickAggr.o(.text); src/enemy/moldorm.o(.text); src/enemy/enemyE.o(.text); - asm/moldworm.o(.text); + src/enemy/moldworm.o(.text); asm/sluggula.o(.text); asm/pesto.o(.text); asm/puffstool.o(.text); @@ -932,6 +932,8 @@ SECTIONS { src/enemy/moldorm.o(.rodata); src/enemy/enemyE.o(.rodata); data/animations/enemyE.o(.rodata); + src/enemy/moldworm.o(.rodata); + data/animations/moldworm.o(.rodata); data/data_080CBC38.o(.rodata); src/enemy.o(.rodata); data/data_080D3D94.o(.rodata); diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c new file mode 100644 index 00000000..fea8f7e7 --- /dev/null +++ b/src/enemy/moldworm.c @@ -0,0 +1,586 @@ +#include "enemy.h" +#include "entity.h" +#include "functions.h" + +extern void sub_0800449C(Entity*, u32); +extern bool32 sub_08023A38(u32); +extern void sub_08023990(Entity*, u32, u32); +extern void sub_08023A88(Entity*, u32); + +void sub_080235BC(Entity*); +void sub_08023644(Entity*); +void sub_08023730(Entity*); +void sub_080237D8(Entity*); +void sub_0802390C(Entity*); +void sub_080239F0(Entity*); +bool32 sub_08023B38(Entity*); + +extern u8 gEntCount; +extern const u8 gUnk_080B37A0[]; + +extern void (*const gUnk_080CBC38[])(Entity*); +extern void (*const gUnk_080CBC50[])(Entity*); +extern const s8 gUnk_080CBC70[]; +extern const s8 gUnk_080CBC90[]; +extern void (*const gUnk_080CBC98[])(Entity*); +extern void (*const gUnk_080CBCA8[])(Entity*); +extern const s8 gUnk_080CBCB8[]; + +#if NON_MATCHING +void Moldworm(Entity* this) { + u16 prevX = this->x.HALF.HI; + u16 prevY = this->y.HALF.HI; + + if (this->entityType.form == 0) { + if (this->action != 0) { + sub_0802390C(this); + } + this->field_0x7c.BYTES.byte1 = this->field_0x7c.BYTES.byte0; + EnemyFunctionHandler(this, gUnk_080CBC38); + } else { + if (this->parent->next) { + if (this->entityType.form != 8) { + sub_080235BC(this); + } else { + sub_08023730(this); + } + } else { + DeleteEntity(this); + return; + } + } + + if (this->parent->field_0x7c.BYTES.byte0 != this->parent->field_0x7c.BYTES.byte1 && this->attachedEntity) { + ((u8*)&this->attachedEntity->field_0x78)[(this->parent->field_0x7c.BYTES.byte0 - 1) & 0xf] = + (((this->x.HALF.HI - prevX + 8) & 0xf) << 4) | ((this->y.HALF.HI - prevY + 8U) & 0xf); + } +} +#else +NAKED +void Moldworm(Entity* this) { + asm(".include \"asm/non_matching/moldworm/moldworm.inc\""); +} +#endif + +void sub_080230CC(Entity* this) { + gUnk_080CBC50[this->action](this); +} + +void sub_080230E4(Entity* this) { + if (this->previousActionFlag == 0xff) { + this->action = 7; + this->actionDelay = 1; + this->previousActionFlag = 0; + this->damageType = 0x85; + this->hurtBlinkTime = -8; + this->field_0x7c.BYTES.byte3 = 0; + this->field_0x7a.HALF.HI = 0; + if (this->bitfield == 0x80 || this->bitfield == 0x9e) { + this->entityType.parameter = 0; + this->field_0x80.HALF.LO = 0x14; + } else { + this->entityType.parameter = 1; + this->field_0x80.HALF.LO = 8; + } + } + + if (this->currentHealth == 0 && this->field_0x7c.BYTES.byte3 == 0 && this->action == 7) { + CopyPosition(this, &gPlayerEntity); + gPlayerEntity.flags = gPlayerEntity.flags | 0x80; + gPlayerEntity.spriteSettings.b.draw = 1; + gPlayerEntity.field_0x20 = 0x18000; + gPlayerEntity.direction = 0xff; + gPlayerEntity.hurtBlinkTime = -0x14; + gPlayerState.jumpStatus = 0x41; + gPlayerState.flags.all &= 0xfff7ffff; + } + + sub_0804AA30(this, gUnk_080CBC38); +} + +void sub_080231A4(Entity* this) { + this->field_0x7c.BYTES.byte0++; + sub_08001324(this); +} + +void nullsub_135(Entity* this) { +} + +void sub_080231BC(Entity* this) { + if (gEntCount < 0x40) { + Entity* ent; + + ent = this->attachedEntity = CreateEnemy(0xf, 1); + ent->parent = this; + + ent = ent->attachedEntity = CreateEnemy(0xf, 2); + ent->parent = this; + + ent = ent->attachedEntity = CreateEnemy(0xf, 3); + ent->parent = this; + + ent = ent->attachedEntity = CreateEnemy(0xf, 4); + ent->parent = this; + + ent = ent->attachedEntity = CreateEnemy(0xf, 5); + ent->parent = this; + + ent = ent->attachedEntity = CreateEnemy(0xf, 6); + ent->parent = this; + + ent = ent->attachedEntity = CreateEnemy(0xf, 7); + ent->parent = this; + + ent->attachedEntity = CreateEnemy(0xf, 8); + *(Entity**)&ent->attachedEntity->field_0x74 = ent; + ent = ent->attachedEntity; + ent->parent = this; + ent->attachedEntity = NULL; + sub_0804A720(this); + this->action = 6; + this->actionDelay = 0x1e; + this->parent = this; + this->field_0x78.HWORD = 0x1e; + this->palette.b.b0 = 5; + this->direction = Random() & 0x1f; + this->animationState = Direction8ToAnimationState(this->direction); + InitializeAnimation(this, this->animationState); + } +} + +void nullsub_136(Entity* this) { +} + +void sub_08023288(Entity* this) { + if (sub_08049FDC(this, 1) && (this->actionDelay++ & 0xf) == 0) { + u32 idx = Random() & 0x1e; + u32 i; + + for (i = 0; i < 0x10; i++) { + u32 x = gPlayerEntity.x.HALF.HI + gUnk_080CBC70[idx + 0]; + u32 y = gPlayerEntity.y.HALF.HI + gUnk_080CBC70[idx + 1]; + if (sub_08023A38(GetTileTypeByPos(x, y, gPlayerEntity.collisionLayer))) { + sub_08023990(this, x, y); + return; + } + idx += 2; + idx &= 0x1e; + } + } +} + +void sub_08023330(Entity* this) { + GetNextFrame(this); + if (this->frames.all & 0x80) { + this->action = 4; + this->actionDelay = 0x19; + this->flags |= 0x80; + this->field_0x78.HWORD = 600; + this->direction = Random() & 0x1c; + this->animationState = this->direction >> 2; + this->field_0x7a.HALF.HI = 0; + this->field_0x7c.BYTES.byte3 = 0; + sub_08023A88(this, this->animationState); + CopyPosition(this, this->attachedEntity); + CreateFx(this, 4, 0); + } +} + +extern u32 GetTileTypeByEntity(Entity*); +void sub_08023A68(Entity*); +void sub_08023AB0(Entity*); + +void sub_08023398(Entity* this) { + this->field_0x7c.BYTES.byte0++; + + if (this->field_0x7c.BYTES.byte3 && sub_08049FDC(this, 1) == 0) { + this->field_0x78.HWORD = 1; + } + + if (--this->field_0x78.HWORD == 0) { + if (sub_08023A38(GetTileTypeByEntity(this))) { + this->action = 5; + this->field_0x7c.BYTES.byte3 = 0; + this->flags = this->flags & 0x7f; + this->damageType = 0x85; + this->attachedEntity->actionDelay = 1; + sub_08023A68(this); + CreateFx(this, 4, 0); + return; + } + this->field_0x78.HWORD = 0x28; + } + + if (this->field_0x7c.BYTES.byte3) { + sub_08023AB0(this); + } + + if (--this->actionDelay < 3) { + if (this->actionDelay == 0) + this->actionDelay = 25; + } else { + int prevX = this->x.WORD; + int prevY = this->y.WORD; + ProcessMovement(this); + if (this->x.WORD == prevX && this->y.WORD == prevY) { + this->field_0x7c.BYTES.byte0--; + } + + if ((gScreenTransition.frameCount & 7) == 0) { + u32 uVar4; + + sub_08004596(this, sub_08049F84(this, 1)); + uVar4 = Direction8ToAnimationState(this->direction); + if (uVar4 != this->animationState) { + this->animationState = uVar4; + InitializeAnimation(this, uVar4 + this->field_0x7a.HALF.HI); + } + } + } +} + +void sub_080234A4(Entity* this) { + this->field_0x7c.BYTES.byte0++; + GetNextFrame(this); + if (this->field_0x7c.BYTES.byte3) { + this->action = 6; + this->spriteSettings.b.draw = 0; + this->field_0x78.HWORD = 300; + } +} + +void sub_080234D8(Entity* this) { + if (--this->field_0x78.HWORD == 0) { + this->action = 2; + this->palette.b.b0 = 5; + this->direction = Random() & 0x1f; + this->animationState = Direction8ToAnimationState(this->direction); + sub_08023A88(this, this->animationState); + } +} + +void sub_0802351C(Entity* this) { + if (this->actionDelay != 0 && (this->entityType.parameter == 1 || gPlayerEntity.frameIndex == 0xff)) { + this->actionDelay = 0; + this->attachedEntity->action = 3; + this->attachedEntity->field_0xf = this->field_0x80.HALF.LO; + InitializeAnimation(this->attachedEntity, this->attachedEntity->animationState + 1); + InitializeAnimation(this, this->animationState); + } + + if (this->field_0x7c.BYTES.byte3 == 0) { + if (this->entityType.parameter == 0) { + gPlayerEntity.animationState = this->animationState & 7; + gPlayerState.flags.all |= 0x80000; + PositionRelative(this, &gPlayerEntity, 0, gUnk_080CBC90[this->animationState & 7] << 0x10); + gPlayerEntity.spriteOffsetY = -gUnk_080CBC90[this->animationState & 7]; + } + } else { + this->action = 4; + } +} + +void sub_080235BC(Entity* this) { + gUnk_080CBC98[this->action](this); +} + +void sub_080235D4(Entity* this) { + Entity* parent; + + this->action = 1; + parent = this->parent; + this->x.HALF.HI = parent->x.HALF.HI; + this->y.HALF.HI = parent->y.HALF.HI; + sub_080239F0(this); + if (this->entityType.form == 1) { + this->animationState = 0x10; + } else { + this->animationState = 0x12; + } + InitializeAnimation(this, this->animationState); +} + +void sub_08023604(Entity* this) { + if (((u8*)&this->field_0x78)[this->parent->field_0x7c.BYTES.byte0 & 0xf] != 0x88) { + this->action = 2; + this->actionDelay = 0; + this->flags |= 0x80; + this->spriteSettings.b.draw = 1; + sub_08023644(this); + } +} + +void sub_08023644(Entity* this) { + Entity* parent = this->parent; + + if (parent->animIndex == 0x17 && this->actionDelay != 0 && this->x.HALF.HI == parent->x.HALF.HI && + this->y.HALF.HI == parent->y.HALF.HI) { + this->action = 1; + this->flags &= ~0x80; + this->spriteSettings.b.draw = 0; + this->attachedEntity->actionDelay = 1; + sub_080239F0(this); + } + + if (parent->field_0x7c.BYTES.byte0 != parent->field_0x7c.BYTES.byte1) { + u8* tmp = &((u8*)&this->field_0x78)[parent->field_0x7c.BYTES.byte0 & 0xf]; + this->x.HALF.HI += (*tmp >> 4) - 8; + this->y.HALF.HI += (*tmp & 0xf) - 8; + this->spriteOrientation.flipY = parent->spriteOrientation.flipY; + this->spriteRendering.b3 = parent->spriteRendering.b3; + this->collisionLayer = parent->collisionLayer; + } +} + +void sub_080236F8(Entity* parent) { + if (--parent->field_0xf == 0) { + parent->action = 2; + parent->attachedEntity->action = 3; + parent->attachedEntity->field_0xf = parent->parent->field_0x80.HALF.LO; + InitializeAnimation(parent->attachedEntity, parent->attachedEntity->animationState + 1); + InitializeAnimation(parent, parent->animationState); + } +} + +void sub_08023730(Entity* this) { + gUnk_080CBCA8[this->action](this); +} + +void sub_08023748(Entity* this) { + Entity* parent; + + this->action = 1; + this->animationState = 20; + parent = this->parent; + this->x.HALF.HI = parent->x.HALF.HI; + this->y.HALF.HI = parent->y.HALF.HI; + sub_080239F0(this); + sub_08023A68(this); +} + +void sub_0802376C(Entity* this) { + Entity* parent = this->parent; + + if (parent->spriteSettings.b.draw == 1 && parent->animIndex < 0x10) { + this->spriteSettings.b.draw = 1; + GetNextFrame(this); + } + + if (((u8*)&this->field_0x78)[parent->field_0x7c.BYTES.byte0 & 0xf] != 0x88) { + this->action = 2; + this->actionDelay = 0; + this->flags |= 0x80; + this->parent->field_0x7c.BYTES.byte3 = 1; + sub_08023A88(this, 20); + sub_080237D8(this); + } +} + +void sub_080237D8(Entity* this) { + Entity* parent = this->parent; + + if (parent->animIndex == 0x17 && this->actionDelay != 0 && this->x.HALF.HI == parent->x.HALF.HI && + this->y.HALF.HI == parent->y.HALF.HI) { + this->action = 1; + this->flags &= ~0x80; + this->spriteSettings.b.draw = 0; + parent->field_0x7c.BYTES.byte3 = 1; + sub_080239F0(this); + sub_08023A68(this); + } + + if (parent->field_0x7c.BYTES.byte0 != parent->field_0x7c.BYTES.byte1) { + u8* tmp = &((u8*)&this->field_0x78)[parent->field_0x7c.BYTES.byte0 & 0xf]; + this->x.HALF.HI += (*tmp >> 4) - 8; + this->y.HALF.HI += (*tmp & 0xf) - 8; + + this->spriteOrientation.flipY = parent->spriteOrientation.flipY; + this->spriteRendering.b3 = parent->spriteRendering.b3; + this->collisionLayer = parent->collisionLayer; + } +} + +void sub_08023894(Entity* this) { + if (--this->field_0xf == 0) { + this->action = 2; + this->parent->field_0x7c.BYTES.byte3 = 1; + InitializeAnimation(this, this->animationState); + if ((this->parent->entityType).parameter == 0) { + gPlayerState.flags.all |= 0x200000; + gPlayerEntity.x.HALF.HI = this->x.HALF.HI; + gPlayerEntity.y.HALF.HI = this->y.HALF.HI; + gPlayerEntity.direction = DirectionRoundUp(GetFacingDirection(*(Entity**)&this->field_0x74, this)); + gPlayerEntity.animationState = gPlayerEntity.direction >> 2; + gPlayerEntity.hurtBlinkTime = 12; + ModHealth(-0x10); + sub_0800449C(&gPlayerEntity, 0x7a); + } + } +} + +void sub_0802390C(Entity* this) { + if (this->bitfield & 0x80) { + Entity* ent = this->attachedEntity; + do { + ent->hurtBlinkTime = this->hurtBlinkTime; + } while (ent = ent->attachedEntity, ent != NULL); + } else { + Entity* ent = this->attachedEntity; + do { + if (ent->bitfield & 0x80) { + u8 bVar2 = 0xff - ent->currentHealth; + if (bVar2 != 0) { + u32 tmp; + ent->currentHealth = 0xff; + tmp = (u8)ent->hurtBlinkTime; + if (this->currentHealth >= bVar2) { + this->currentHealth -= bVar2; + } else { + this->currentHealth = 0; + } + + ent = this; + do { + ent->hurtBlinkTime = tmp; + } while (ent = ent->attachedEntity, ent != NULL); + break; + } + } + } while (ent = ent->attachedEntity, ent != NULL); + } +} + +void sub_08023990(Entity* this, u32 param_2, u32 param_3) { + Entity* ent; + + this->action = 3; + this->spriteSettings.b.draw = 1; + this->palette.b.b0 = 0x5; + this->palette.b.b4 = 0x5; + this->spritePriority.b0 = 7; + this->x.HALF.HI = param_2; + this->y.HALF.HI = param_3; + this->collisionLayer = gPlayerEntity.collisionLayer; + UpdateSpriteForCollisionLayer(this); + InitializeAnimation(this, 0x16); + + ent = this->attachedEntity; + do { + sub_080239F0(ent); + CopyPosition(this, ent); + } while (ent = ent->attachedEntity, ent != NULL); +} + +/* TODO: fix struct */ +NAKED +void sub_080239F0(Entity* this) { + asm(".include \"asm/non_matching/moldworm/sub_080239F0.inc\""); +} + +bool32 sub_08023A38(u32 unk) { + if (unk == 0x1a || unk == 0x29) { + return TRUE; + } else { + unk = gUnk_080B37A0[unk]; + if (unk == 9 || unk == 11 || unk == 10 || unk == 12) { + return TRUE; + } else { + return FALSE; + } + } +} + +void sub_08023A68(Entity* this) { + sub_0801D2B4(this, 5); + this->spritePriority.b0 = 7; + InitializeAnimation(this, 0x17); +} + +void sub_08023A88(Entity* this, u32 unk) { + sub_0801D2B4(this, 0x22); + this->spritePriority.b0 = 4; + InitializeAnimation(this, unk); +} + +void sub_08023AB0(Entity* this) { + if (this->field_0x7a.HALF.HI == 8) { + if (this->field_0x7c.BYTES.byte2) { + this->field_0x7c.BYTES.byte2--; + } else if (!sub_08023B38(this) || 0x1d >= this->field_0x78.HWORD) { + this->damageType = 0x85; + this->field_0x7a.HALF.HI = 0; + this->field_0x7c.BYTES.byte2 = 30; + InitializeAnimation(this, this->animationState); + } + } else if (this->field_0x7c.BYTES.byte2) { + this->field_0x7c.BYTES.byte2--; + } else if (this->field_0x78.HWORD >= 90 && sub_08023B38(this)) { + this->damageType = 0x87; + this->field_0x7a.HALF.HI = 8; + this->field_0x7c.BYTES.byte2 = 10; + InitializeAnimation(this, this->animationState + 8); + } +} + +NAKED +bool32 sub_08023B38(Entity* this) { + asm(".include \"asm/non_matching/moldworm/sub_08023B38.inc\""); +} + +// clang-format off +void (*const gUnk_080CBC38[])(Entity*) = { + sub_080230CC, + sub_080230E4, + sub_080231A4, + sub_0804A7D4, + sub_08001242, + nullsub_135, +}; + +void (*const gUnk_080CBC50[])(Entity*) = { + sub_080231BC, + nullsub_136, + sub_08023288, + sub_08023330, + sub_08023398, + sub_080234A4, + sub_080234D8, + sub_0802351C, +}; + +const s8 gUnk_080CBC70[] = { + 0x00, 0xd0, 0x00, 0x30, + 0xd0, 0x00, 0x30, 0x00, + 0xe0, 0xe0, 0xe0, 0x20, + 0x20, 0xe0, 0x20, 0x20, + 0xf0, 0xe0, 0x10, 0xe0, + 0xf0, 0x20, 0x10, 0x20, + 0xe0, 0xf0, 0x20, 0xf0, + 0xe0, 0x10, 0x20, 0x10, +}; + +const s8 gUnk_080CBC90[] = { + 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, +}; + +void (*const gUnk_080CBC98[])(Entity*) = { + sub_080235D4, + sub_08023604, + sub_08023644, + sub_080236F8, +}; + +void (*const gUnk_080CBCA8[])(Entity*) = { + sub_08023748, + sub_0802376C, + sub_080237D8, + sub_08023894, +}; + +const s8 gUnk_080CBCB8[] = { + 0x00, 0xe4, 0x14, 0xec, + 0x1c, 0x00, 0x14, 0x14, + 0x00, 0x1c, 0xec, 0x14, + 0xe4, 0x00, 0xec, 0xec, +}; +// clang-format on