From 34d16a7db5098015386b092cbfcdad8ffdfe9c86 Mon Sep 17 00:00:00 2001 From: Behemoth Date: Fri, 18 Sep 2020 01:20:53 +0200 Subject: [PATCH] decompile madderpillar --- asm/madderpillar.s | 1292 ----------------- .../madderpillar/sub_08029E0C.inc | 115 ++ include/entity.h | 2 +- linker.ld | 2 +- src/createObject.c | 2 +- src/enemy/madderpillar.c | 584 ++++++++ src/enemy/pesto.c | 22 +- src/enemy/puffstool.c | 6 +- src/manager/manager20.c | 2 +- src/object/bigVortex.c | 4 +- src/object/button.c | 6 +- src/object/fan.c | 4 +- src/object/heartContainer.c | 2 +- src/object/hiddenLadderDown.c | 4 +- src/object/jailBars.c | 4 +- src/object/lightableSwitch.c | 12 +- src/object/mask.c | 6 +- src/object/metalDoor.c | 2 +- src/object/object2A.c | 2 +- src/object/objectA.c | 4 +- src/object/pot.c | 6 +- src/object/railtrack.c | 12 +- src/object/treeHidingPortal.c | 4 +- 23 files changed, 753 insertions(+), 1346 deletions(-) delete mode 100644 asm/madderpillar.s create mode 100644 asm/non_matching/madderpillar/sub_08029E0C.inc create mode 100644 src/enemy/madderpillar.c diff --git a/asm/madderpillar.s b/asm/madderpillar.s deleted file mode 100644 index c98eafb5..00000000 --- a/asm/madderpillar.s +++ /dev/null @@ -1,1292 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Madderpillar -Madderpillar: @ 0x08029858 - push {lr} - ldr r2, _0802986C @ =gUnk_080CCD44 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802986C: .4byte gUnk_080CCD44 - - thumb_func_start sub_08029870 -sub_08029870: @ 0x08029870 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _08029888 @ =gUnk_080CCD60 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_08029888: .4byte gUnk_080CCD60 - - thumb_func_start sub_0802988C -sub_0802988C: @ 0x0802988C - push {lr} - ldr r2, _080298A0 @ =gUnk_080CCD78 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080298A0: .4byte gUnk_080CCD78 - - thumb_func_start sub_080298A4 -sub_080298A4: @ 0x080298A4 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #1 - bne _08029970 - adds r0, r5, #0 - adds r0, #0x41 - ldrb r0, [r0] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0x1e - bhi _08029948 - lsls r0, r1, #2 - ldr r1, _080298C8 @ =_080298CC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080298C8: .4byte _080298CC -_080298CC: @ jump table - .4byte _08029970 @ case 0 - .4byte _08029970 @ case 1 - .4byte _08029970 @ case 2 - .4byte _08029970 @ case 3 - .4byte _08029948 @ case 4 - .4byte _08029948 @ case 5 - .4byte _08029948 @ case 6 - .4byte _08029948 @ case 7 - .4byte _08029948 @ case 8 - .4byte _08029948 @ case 9 - .4byte _08029948 @ case 10 - .4byte _08029948 @ case 11 - .4byte _08029948 @ case 12 - .4byte _08029948 @ case 13 - .4byte _08029948 @ case 14 - .4byte _08029970 @ case 15 - .4byte _08029948 @ case 16 - .4byte _08029948 @ case 17 - .4byte _08029948 @ case 18 - .4byte _08029970 @ case 19 - .4byte _08029948 @ case 20 - .4byte _08029948 @ case 21 - .4byte _08029948 @ case 22 - .4byte _08029948 @ case 23 - .4byte _08029948 @ case 24 - .4byte _08029948 @ case 25 - .4byte _08029948 @ case 26 - .4byte _08029970 @ case 27 - .4byte _08029948 @ case 28 - .4byte _08029948 @ case 29 - .4byte _08029970 @ case 30 -_08029948: - movs r1, #0 - movs r4, #2 - strb r4, [r5, #0xc] - strb r1, [r5, #0xe] - adds r2, r5, #0 - adds r2, #0x3f - movs r0, #0x6b - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x77 - strb r1, [r0] - adds r0, r5, #0 - movs r1, #0x7f - bl sub_0801D2B4 - movs r0, #0xfe - bl EnqueueSFX - ldr r0, [r5, #0x54] - strb r4, [r0, #0xc] -_08029970: - ldr r1, _0802997C @ =gUnk_080CCD60 - adds r0, r5, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_0802997C: .4byte gUnk_080CCD60 - - thumb_func_start sub_08029980 -sub_08029980: @ 0x08029980 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xf] - cmp r0, #0 - beq _08029990 - subs r0, #1 - strb r0, [r1, #0xf] - b _08029996 -_08029990: - adds r0, r1, #0 - bl sub_0804A7D4 -_08029996: - pop {pc} - - thumb_func_start nullsub_14 -nullsub_14: @ 0x08029998 - bx lr - .align 2, 0 - - - thumb_func_start sub_0802999C -sub_0802999C: @ 0x0802999C - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldr r0, _08029A90 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x43 - bhi _08029A8E - movs r0, #0x18 - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - str r7, [r4, #0x50] - adds r0, r7, #0 - adds r1, r4, #0 - movs r2, #0 - movs r3, #5 - bl PositionRelative - str r4, [r7, #0x54] - movs r0, #0x18 - movs r1, #2 - bl CreateEnemy - adds r5, r0, #0 - str r7, [r5, #0x50] - adds r0, r7, #0 - adds r1, r5, #0 - movs r2, #0 - movs r3, #4 - bl PositionRelative - str r5, [r4, #0x54] - movs r0, #0x18 - movs r1, #3 - bl CreateEnemy - adds r4, r0, #0 - str r7, [r4, #0x50] - adds r0, r7, #0 - adds r1, r4, #0 - movs r2, #0 - movs r3, #3 - bl PositionRelative - str r4, [r5, #0x54] - movs r0, #0x18 - movs r1, #4 - bl CreateEnemy - adds r5, r0, #0 - str r7, [r5, #0x50] - adds r0, r7, #0 - adds r1, r5, #0 - movs r2, #0 - movs r3, #2 - bl PositionRelative - str r5, [r4, #0x54] - movs r0, #0x18 - movs r1, #5 - bl CreateEnemy - adds r6, r0, #0 - str r7, [r6, #0x50] - adds r0, r7, #0 - adds r1, r6, #0 - movs r2, #0 - movs r3, #1 - bl PositionRelative - str r6, [r5, #0x54] - movs r0, #0x18 - movs r1, #6 - bl CreateEnemy - adds r4, r0, #0 - str r7, [r4, #0x54] - str r7, [r4, #0x50] - adds r0, r7, #0 - adds r1, r4, #0 - movs r2, #0 - movs r3, #0 - bl PositionRelative - str r4, [r6, #0x54] - movs r4, #1 - strb r4, [r7, #0xc] - ldrb r1, [r7, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r7, #0x10] - bl Random - movs r1, #0x18 - ands r0, r1 - strb r0, [r7, #0x15] - movs r2, #0 - movs r0, #0xa0 - strh r0, [r7, #0x24] - movs r0, #0xff - strb r0, [r7, #0x14] - ldr r0, [r7, #0x30] - adds r0, #6 - str r0, [r7, #0x30] - str r7, [r7, #0x50] - adds r1, r7, #0 - adds r1, #0x74 - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1] - adds r0, r7, #0 - adds r0, #0x75 - strb r2, [r0] - adds r0, #2 - strb r4, [r0] - adds r0, r7, #0 - bl sub_08029E0C - adds r0, r7, #0 - bl sub_08029EEC -_08029A8E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08029A90: .4byte gEntCount - - thumb_func_start sub_08029A94 -sub_08029A94: @ 0x08029A94 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0802A098 - pop {r4, pc} - - thumb_func_start sub_08029AA4 -sub_08029AA4: @ 0x08029AA4 - push {lr} - adds r1, r0, #0 - adds r0, #0x77 - ldrb r0, [r0] - cmp r0, #0 - beq _08029ADA - movs r0, #3 - strb r0, [r1, #0xc] - movs r0, #0x84 - lsls r0, r0, #1 - strh r0, [r1, #0x24] - adds r2, r1, #0 - adds r2, #0x3f - movs r0, #0x6a - strb r0, [r2] - adds r2, #0x3b - adds r0, #0xfe - strh r0, [r2] - subs r2, #5 - movs r0, #4 - strb r0, [r2] - adds r0, r1, #0 - bl sub_08029EEC - ldr r0, _08029ADC @ =0x0000019D - bl EnqueueSFX -_08029ADA: - pop {pc} - .align 2, 0 -_08029ADC: .4byte 0x0000019D - - thumb_func_start sub_08029AE0 -sub_08029AE0: @ 0x08029AE0 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0802A16C - adds r0, r4, #0 - bl sub_0802A098 - adds r1, r4, #0 - adds r1, #0x7a - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08029B28 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0xa0 - strh r0, [r4, #0x24] - subs r1, #5 - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08029EEC - adds r0, r4, #0 - movs r1, #0x77 - bl sub_0801D2B4 - movs r0, #0xc1 - lsls r0, r0, #1 - bl EnqueueSFX -_08029B28: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08029B2C -sub_08029B2C: @ 0x08029B2C - push {r4, lr} - adds r4, r0, #0 - bl sub_0802A14C - cmp r0, #0 - beq _08029B7A - adds r2, r4, #0 - adds r2, #0x86 - ldrb r0, [r2] - cmp r0, #0 - beq _08029B60 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029B8A - adds r0, r4, #0 - movs r1, #0x48 - movs r2, #0 - bl CreateFx - adds r0, r4, #0 - bl DeleteEntity - b _08029B8A -_08029B60: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r4, #0xa] - lsls r1, r0, #4 - subs r1, r1, r0 - movs r0, #0x5a - subs r0, r0, r1 - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r2] - b _08029B8A -_08029B7A: - ldr r0, _08029B8C @ =gUnk_080CCD88 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_08029B8A: - pop {r4, pc} - .align 2, 0 -_08029B8C: .4byte gUnk_080CCD88 - - thumb_func_start sub_08029B90 -sub_08029B90: @ 0x08029B90 - push {r4, lr} - adds r4, r0, #0 - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl sub_0802A058 - ldrb r0, [r4, #0xa] - cmp r0, #1 - bhi _08029BBA - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - b _08029BC2 -_08029BBA: - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation -_08029BC2: - pop {r4, pc} - - thumb_func_start sub_08029BC4 -sub_08029BC4: @ 0x08029BC4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl sub_0802A18C - movs r0, #0x2e - ldrsh r5, [r4, r0] - movs r0, #0x32 - ldrsh r6, [r4, r0] - adds r0, r4, #0 - bl sub_08029FE4 - cmp r0, #0 - beq _08029BF2 - ldrb r0, [r4, #0xa] - movs r2, #4 - cmp r0, #1 - bhi _08029BE8 - movs r2, #0 -_08029BE8: - ldrb r1, [r4, #0x14] - adds r1, r1, r2 - adds r0, r4, #0 - bl InitializeAnimation -_08029BF2: - movs r0, #0x2e - ldrsh r1, [r4, r0] - subs r1, r1, r5 - movs r0, #0x32 - ldrsh r2, [r4, r0] - subs r2, r2, r6 - adds r0, r4, #0 - bl sub_08029FB4 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08029C08 -sub_08029C08: @ 0x08029C08 - movs r1, #3 - strb r1, [r0, #0xc] - ldr r2, _08029C28 @ =gUnk_080CCDA0 - ldrb r1, [r0, #0xa] - adds r1, r1, r2 - ldrb r1, [r1] - strb r1, [r0, #0xe] - adds r2, r0, #0 - adds r2, #0x3f - movs r1, #0x6b - strb r1, [r2] - ldr r1, [r0, #0x54] - movs r0, #2 - strb r0, [r1, #0xc] - bx lr - .align 2, 0 -_08029C28: .4byte gUnk_080CCDA0 - - thumb_func_start sub_08029C2C -sub_08029C2C: @ 0x08029C2C - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029C4E - movs r0, #4 - strb r0, [r1, #0xc] - adds r0, r1, #0 - movs r1, #0x7f - bl sub_0801D2B4 - movs r0, #0x6c - bl EnqueueSFX -_08029C4E: - pop {pc} - - thumb_func_start sub_08029C50 -sub_08029C50: @ 0x08029C50 - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x50] - adds r0, #0x77 - ldrb r0, [r0] - cmp r0, #0 - beq _08029C68 - movs r0, #5 - strb r0, [r1, #0xc] - adds r1, #0x3f - movs r0, #0x6a - strb r0, [r1] -_08029C68: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08029C6C -sub_08029C6C: @ 0x08029C6C - push {r4, lr} - adds r4, r0, #0 - bl sub_0802A18C - adds r0, r4, #0 - bl sub_08029BC4 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #3 - beq _08029C90 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0x77 - bl sub_0801D2B4 - b _08029C96 -_08029C90: - adds r0, r4, #0 - bl sub_0802A16C -_08029C96: - pop {r4, pc} - - thumb_func_start sub_08029C98 -sub_08029C98: @ 0x08029C98 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802A14C - cmp r0, #0 - beq _08029CB6 - adds r0, r4, #0 - movs r1, #0x48 - movs r2, #0 - bl CreateFx - adds r0, r4, #0 - bl DeleteEntity - b _08029CC6 -_08029CB6: - ldr r0, _08029CC8 @ =gUnk_080CCDA8 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_08029CC6: - pop {r4, pc} - .align 2, 0 -_08029CC8: .4byte gUnk_080CCDA8 - - thumb_func_start sub_08029CCC -sub_08029CCC: @ 0x08029CCC - push {r4, lr} - adds r4, r0, #0 - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl sub_0802A058 - adds r0, r4, #0 - movs r1, #8 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_08029CF0 -sub_08029CF0: @ 0x08029CF0 - push {r4, lr} - adds r4, r0, #0 - bl sub_08029FE4 - cmp r0, #0 - beq _08029D06 - ldrb r1, [r4, #0x14] - adds r1, #8 - adds r0, r4, #0 - bl InitializeAnimation -_08029D06: - pop {r4, pc} - - thumb_func_start sub_08029D08 -sub_08029D08: @ 0x08029D08 - movs r1, #3 - strb r1, [r0, #0xc] - movs r1, #0x47 - strb r1, [r0, #0xe] - bx lr - .align 2, 0 - - thumb_func_start sub_08029D14 -sub_08029D14: @ 0x08029D14 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08029D42 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029D70 - ldrb r1, [r4, #0x14] - adds r1, #0xc - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - movs r1, #0x7f - bl sub_0801D2B4 - movs r0, #0x6c - bl EnqueueSFX - b _08029D70 -_08029D42: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08029D70 - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x6c - strb r0, [r1] - ldr r0, _08029D74 @ =gUnk_080FD298 - str r0, [r4, #0x48] - movs r0, #0x6b - bl EnqueueSFX -_08029D70: - pop {r4, pc} - .align 2, 0 -_08029D74: .4byte gUnk_080FD298 - - thumb_func_start sub_08029D78 -sub_08029D78: @ 0x08029D78 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802A0F8 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029DA6 - movs r0, #5 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x6a - strb r0, [r1] - ldr r0, _08029DA8 @ =gUnk_080FD2A0 - str r0, [r4, #0x48] - ldrb r1, [r4, #0x14] - adds r1, #0x10 - adds r0, r4, #0 - bl InitializeAnimation -_08029DA6: - pop {r4, pc} - .align 2, 0 -_08029DA8: .4byte gUnk_080FD2A0 - - thumb_func_start sub_08029DAC -sub_08029DAC: @ 0x08029DAC - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08029DD8 - movs r0, #6 - strb r0, [r4, #0xc] - ldr r0, [r4, #0x50] - adds r0, #0x77 - movs r1, #1 - strb r1, [r0] - ldrb r1, [r4, #0x14] - adds r1, #8 - adds r0, r4, #0 - bl InitializeAnimation -_08029DD8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08029DDC -sub_08029DDC: @ 0x08029DDC - movs r1, #7 - strb r1, [r0, #0xc] - bx lr - .align 2, 0 - - thumb_func_start sub_08029DE4 -sub_08029DE4: @ 0x08029DE4 - push {r4, lr} - adds r4, r0, #0 - bl sub_08029CF0 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #3 - beq _08029E02 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0x77 - bl sub_0801D2B4 - b _08029E08 -_08029E02: - adds r0, r4, #0 - bl sub_0802A16C -_08029E08: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08029E0C -sub_08029E0C: @ 0x08029E0C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - adds r5, r0, #0 - ldrb r0, [r5, #0x15] - lsrs r0, r0, #3 - lsls r1, r0, #1 - adds r1, r1, r0 - ldr r0, _08029EE0 @ =gUnk_080CCDC8 - adds r1, r1, r0 - str r1, [sp] - bl Random - movs r1, #1 - ands r1, r0 - lsls r1, r1, #1 - subs r1, #1 - mov sl, r1 - bl Random - adds r1, r0, #0 - movs r0, #0xf - ands r0, r1 - movs r1, #3 - bl __modsi3 - mov sb, r0 - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r3, _08029EE4 @ =gRoomControls - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - mov r8, r0 - movs r2, #0x3f - ands r0, r2 - mov r8, r0 - movs r1, #0x32 - ldrsh r0, [r5, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - mov r1, r8 - orrs r1, r0 - mov r8, r1 - movs r7, #0 -_08029E72: - ldr r0, [sp] - add r0, sb - ldrb r4, [r0] - lsrs r0, r4, #3 - lsls r0, r0, #1 - ldr r1, _08029EE8 @ =gUnk_080B4488 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - add r0, r8 - adds r1, r5, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_080002E0 - adds r6, r5, #0 - adds r6, #0x74 - cmp r0, #0 - bne _08029EA6 - str r4, [sp, #4] - ldrb r1, [r5, #0x15] - ldrb r0, [r6] - subs r0, r1, r0 - subs r1, r4, r1 - cmp r0, r1 - bne _08029EBA -_08029EA6: - mov r0, sb - add r0, sl - adds r0, #3 - movs r1, #3 - bl __modsi3 - mov sb, r0 - adds r7, #1 - cmp r7, #2 - bls _08029E72 -_08029EBA: - cmp r7, #3 - bne _08029EC0 - ldr r4, [sp, #4] -_08029EC0: - ldrb r1, [r5, #0x15] - ldrb r0, [r6] - cmp r0, r1 - beq _08029ECA - strb r1, [r6] -_08029ECA: - strb r4, [r5, #0x15] - adds r0, r5, #0 - bl sub_08029F0C - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08029EE0: .4byte gUnk_080CCDC8 -_08029EE4: .4byte gRoomControls -_08029EE8: .4byte gUnk_080B4488 - - thumb_func_start sub_08029EEC -sub_08029EEC: @ 0x08029EEC - push {lr} - adds r3, r0, #0 - ldrb r0, [r3, #0x15] - adds r2, r3, #0 - adds r2, #0x75 - lsrs r0, r0, #3 - ldrb r2, [r2] - adds r1, r0, r2 - ldrb r0, [r3, #0x14] - cmp r1, r0 - beq _08029F0A - strb r1, [r3, #0x14] - adds r0, r3, #0 - bl InitAnimationForceUpdate -_08029F0A: - pop {pc} - - thumb_func_start sub_08029F0C -sub_08029F0C: @ 0x08029F0C - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0x15] - lsrs r0, r0, #3 - cmp r0, #1 - beq _08029F30 - cmp r0, #1 - bgt _08029F22 - cmp r0, #0 - beq _08029F2C - b _08029F44 -_08029F22: - cmp r0, #2 - beq _08029F36 - cmp r0, #3 - beq _08029F3C - b _08029F44 -_08029F2C: - ldrh r0, [r1, #0x32] - b _08029F3E -_08029F30: - ldrh r0, [r1, #0x2e] - adds r0, #0x10 - b _08029F40 -_08029F36: - ldrh r0, [r1, #0x32] - adds r0, #0x10 - b _08029F40 -_08029F3C: - ldrh r0, [r1, #0x2e] -_08029F3E: - subs r0, #0x10 -_08029F40: - adds r1, #0x78 - strh r0, [r1] -_08029F44: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08029F48 -sub_08029F48: @ 0x08029F48 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0x15] - lsrs r0, r0, #3 - cmp r0, #1 - beq _08029F78 - cmp r0, #1 - bgt _08029F5E - cmp r0, #0 - beq _08029F68 - b _08029FB0 -_08029F5E: - cmp r0, #2 - beq _08029F88 - cmp r0, #3 - beq _08029F9C - b _08029FB0 -_08029F68: - movs r0, #0x32 - ldrsh r1, [r2, r0] - adds r0, r2, #0 - adds r0, #0x78 - ldrh r0, [r0] - cmp r1, r0 - bgt _08029FB0 - b _08029F96 -_08029F78: - movs r0, #0x2e - ldrsh r1, [r2, r0] - adds r0, r2, #0 - adds r0, #0x78 - ldrh r0, [r0] - cmp r1, r0 - blt _08029FB0 - b _08029FAA -_08029F88: - movs r0, #0x32 - ldrsh r1, [r2, r0] - adds r0, r2, #0 - adds r0, #0x78 - ldrh r0, [r0] - cmp r1, r0 - blt _08029FB0 -_08029F96: - strh r0, [r2, #0x32] - movs r0, #1 - b _08029FB2 -_08029F9C: - movs r0, #0x2e - ldrsh r1, [r2, r0] - adds r0, r2, #0 - adds r0, #0x78 - ldrh r0, [r0] - cmp r1, r0 - bgt _08029FB0 -_08029FAA: - strh r0, [r2, #0x2e] - movs r0, #1 - b _08029FB2 -_08029FB0: - movs r0, #0 -_08029FB2: - pop {pc} - - thumb_func_start sub_08029FB4 -sub_08029FB4: @ 0x08029FB4 - push {r4, r5, r6, lr} - adds r5, r1, #0 - adds r4, r2, #0 - ldr r6, [r0, #0x54] - adds r6, #0x78 - ldr r0, [r0, #0x50] - adds r0, #0x7e - ldrb r0, [r0] - movs r1, #0xe - bl __modsi3 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - adds r6, r6, r0 - adds r5, #8 - movs r0, #0xf - ands r5, r0 - adds r4, #8 - ands r4, r0 - lsls r4, r4, #4 - orrs r5, r4 - strb r5, [r6] - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08029FE4 -sub_08029FE4: @ 0x08029FE4 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r4, r5, #0 - adds r4, #0x78 - ldr r0, [r5, #0x50] - adds r0, #0x7e - ldrb r0, [r0] - adds r0, #1 - movs r1, #0xe - bl __modsi3 - adds r4, r4, r0 - ldrb r1, [r4] - movs r0, #0xf - ands r0, r1 - subs r0, #8 - lsrs r1, r1, #4 - subs r1, #8 - lsls r1, r1, #0x18 - lsls r0, r0, #0x18 - asrs r4, r0, #0x18 - ldrh r0, [r5, #0x2e] - adds r0, r0, r4 - strh r0, [r5, #0x2e] - lsrs r6, r1, #0x18 - asrs r1, r1, #0x18 - ldrh r0, [r5, #0x32] - adds r1, r1, r0 - strh r1, [r5, #0x32] - adds r0, r5, #0 - bl GetNextFrame - movs r1, #0xff - cmp r4, #0 - beq _0802A032 - movs r1, #3 - cmp r4, #0 - ble _0802A032 - movs r1, #1 -_0802A032: - lsls r0, r6, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0802A042 - movs r1, #0 - cmp r0, #0 - ble _0802A042 - movs r1, #2 -_0802A042: - cmp r1, #0xff - beq _0802A052 - ldrb r0, [r5, #0x14] - cmp r1, r0 - beq _0802A052 - strb r1, [r5, #0x14] - movs r0, #1 - b _0802A054 -_0802A052: - movs r0, #0 -_0802A054: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0802A058 -sub_0802A058: @ 0x0802A058 - adds r2, r0, #0 - adds r0, #0x78 - movs r1, #0x88 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - bx lr - .align 2, 0 - - thumb_func_start sub_0802A098 -sub_0802A098: @ 0x0802A098 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x7e - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - ldrb r0, [r5] - movs r1, #0xe - bl __modsi3 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _0802A0B8 - strb r0, [r5] -_0802A0B8: - movs r0, #0x2e - ldrsh r5, [r4, r0] - movs r0, #0x32 - ldrsh r6, [r4, r0] - adds r0, r4, #0 - bl ProcessMovement - adds r0, r4, #0 - bl sub_08029F48 - cmp r0, #0 - beq _0802A0E4 - adds r0, r4, #0 - bl sub_08029E0C - adds r0, r4, #0 - bl sub_08029EEC - movs r0, #0x82 - lsls r0, r0, #1 - bl EnqueueSFX -_0802A0E4: - movs r0, #0x2e - ldrsh r1, [r4, r0] - subs r1, r1, r5 - movs r0, #0x32 - ldrsh r2, [r4, r0] - subs r2, r2, r6 - adds r0, r4, #0 - bl sub_08029FB4 - pop {r4, r5, r6, pc} - - thumb_func_start sub_0802A0F8 -sub_0802A0F8: @ 0x0802A0F8 - push {r4, lr} - adds r3, r0, #0 - adds r0, #0x45 - ldrb r4, [r0] - cmp r4, #0 - beq _0802A134 - subs r0, #4 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802A14A - adds r1, r3, #0 - adds r1, #0x3d - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _0802A14A - adds r2, r3, #0 - movs r3, #0 - adds r4, r1, #0 -_0802A122: - ldr r2, [r2, #0x54] - ldrb r0, [r4] - adds r1, r2, #0 - adds r1, #0x3d - strb r0, [r1] - adds r3, #1 - cmp r3, #5 - bls _0802A122 - b _0802A14A -_0802A134: - ldr r2, [r3, #0x50] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - ldr r0, [r3, #0x50] - adds r0, #0x45 - strb r4, [r0] - ldr r1, [r3, #0x50] - movs r0, #0x69 - strb r0, [r1, #0xf] -_0802A14A: - pop {r4, pc} - - thumb_func_start sub_0802A14C -sub_0802A14C: @ 0x0802A14C - push {lr} - adds r1, r0, #0 - movs r2, #0 - ldr r0, [r1, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _0802A166 - adds r0, r1, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #0 - beq _0802A168 -_0802A166: - movs r2, #1 -_0802A168: - adds r0, r2, #0 - pop {pc} - - thumb_func_start sub_0802A16C -sub_0802A16C: @ 0x0802A16C - push {lr} - ldr r3, _0802A188 @ =gUnk_080CCDD4 - ldr r1, [r0, #0x50] - adds r1, #0x7a - ldrh r1, [r1] - lsrs r1, r1, #2 - movs r2, #3 - ands r1, r2 - lsls r1, r1, #1 - adds r1, r1, r3 - ldrh r1, [r1] - bl sub_0801D2B4 - pop {pc} - .align 2, 0 -_0802A188: .4byte gUnk_080CCDD4 - - thumb_func_start sub_0802A18C -sub_0802A18C: @ 0x0802A18C - push {lr} - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802A234 - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x1e - bhi _0802A22C - lsls r0, r0, #2 - ldr r1, _0802A1AC @ =_0802A1B0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802A1AC: .4byte _0802A1B0 -_0802A1B0: @ jump table - .4byte _0802A234 @ case 0 - .4byte _0802A234 @ case 1 - .4byte _0802A234 @ case 2 - .4byte _0802A234 @ case 3 - .4byte _0802A22C @ case 4 - .4byte _0802A22C @ case 5 - .4byte _0802A22C @ case 6 - .4byte _0802A22C @ case 7 - .4byte _0802A22C @ case 8 - .4byte _0802A22C @ case 9 - .4byte _0802A22C @ case 10 - .4byte _0802A22C @ case 11 - .4byte _0802A22C @ case 12 - .4byte _0802A22C @ case 13 - .4byte _0802A22C @ case 14 - .4byte _0802A234 @ case 15 - .4byte _0802A22C @ case 16 - .4byte _0802A22C @ case 17 - .4byte _0802A22C @ case 18 - .4byte _0802A234 @ case 19 - .4byte _0802A22C @ case 20 - .4byte _0802A22C @ case 21 - .4byte _0802A22C @ case 22 - .4byte _0802A22C @ case 23 - .4byte _0802A22C @ case 24 - .4byte _0802A22C @ case 25 - .4byte _0802A22C @ case 26 - .4byte _0802A234 @ case 27 - .4byte _0802A22C @ case 28 - .4byte _0802A22C @ case 29 - .4byte _0802A234 @ case 30 -_0802A22C: - movs r0, #0x97 - lsls r0, r0, #1 - bl EnqueueSFX -_0802A234: - pop {pc} - .align 2, 0 diff --git a/asm/non_matching/madderpillar/sub_08029E0C.inc b/asm/non_matching/madderpillar/sub_08029E0C.inc new file mode 100644 index 00000000..0e9abb89 --- /dev/null +++ b/asm/non_matching/madderpillar/sub_08029E0C.inc @@ -0,0 +1,115 @@ + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + adds r5, r0, #0 + ldrb r0, [r5, #0x15] + lsrs r0, r0, #3 + lsls r1, r0, #1 + adds r1, r1, r0 + ldr r0, _08029EE0 @ =gUnk_080CCDC8 + adds r1, r1, r0 + str r1, [sp] + bl Random + movs r1, #1 + ands r1, r0 + lsls r1, r1, #1 + subs r1, #1 + mov sl, r1 + bl Random + adds r1, r0, #0 + movs r0, #0xf + ands r0, r1 + movs r1, #3 + bl __modsi3 + mov sb, r0 + movs r1, #0x2e + ldrsh r0, [r5, r1] + ldr r3, _08029EE4 @ =gRoomControls + ldrh r1, [r3, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + mov r8, r0 + movs r2, #0x3f + ands r0, r2 + mov r8, r0 + movs r1, #0x32 + ldrsh r0, [r5, r1] + ldrh r1, [r3, #8] + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r2 + lsls r0, r0, #6 + mov r1, r8 + orrs r1, r0 + mov r8, r1 + movs r7, #0 +_08029E72: + ldr r0, [sp] + add r0, sb + ldrb r4, [r0] + lsrs r0, r4, #3 + lsls r0, r0, #1 + ldr r1, _08029EE8 @ =gUnk_080B4488 + adds r0, r0, r1 + movs r1, #0 + ldrsh r0, [r0, r1] + add r0, r8 + adds r1, r5, #0 + adds r1, #0x38 + ldrb r1, [r1] + bl sub_080002E0 + adds r6, r5, #0 + adds r6, #0x74 + cmp r0, #0 + bne _08029EA6 + str r4, [sp, #4] + ldrb r1, [r5, #0x15] + ldrb r0, [r6] + subs r0, r1, r0 + subs r1, r4, r1 + cmp r0, r1 + bne _08029EBA +_08029EA6: + mov r0, sb + add r0, sl + adds r0, #3 + movs r1, #3 + bl __modsi3 + mov sb, r0 + adds r7, #1 + cmp r7, #2 + bls _08029E72 +_08029EBA: + cmp r7, #3 + bne _08029EC0 + ldr r4, [sp, #4] +_08029EC0: + ldrb r1, [r5, #0x15] + ldrb r0, [r6] + cmp r0, r1 + beq _08029ECA + strb r1, [r6] +_08029ECA: + strb r4, [r5, #0x15] + adds r0, r5, #0 + bl sub_08029F0C + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08029EE0: .4byte gUnk_080CCDC8 +_08029EE4: .4byte gRoomControls +_08029EE8: .4byte gUnk_080B4488 + + .syntax divided diff --git a/include/entity.h b/include/entity.h index 420a3193..6bbb5200 100644 --- a/include/entity.h +++ b/include/entity.h @@ -135,7 +135,7 @@ typedef struct Entity { /*0x80*/ union SplitHWord field_0x80; /*0x82*/ union SplitHWord field_0x82; /*0x84*/ union SplitHWord cutsceneBeh; - /*0x86*/ u16 field_0x86; + /*0x86*/ union SplitHWord field_0x86; } Entity; #define COORD_TO_TILE(entity) \ diff --git a/linker.ld b/linker.ld index 399e48ac..2c3f9da5 100644 --- a/linker.ld +++ b/linker.ld @@ -349,7 +349,7 @@ SECTIONS { src/enemy/spearMoblin.o(.text); asm/businessScrub.o(.text); src/enemy/rupeeLike.o(.text); - asm/madderpillar.o(.text); + src/enemy/madderpillar.o(.text); asm/waterDrop.o(.text); asm/wallMaster.o(.text); src/enemy/bombPeahat.o(.text); diff --git a/src/createObject.c b/src/createObject.c index 25adbe29..ad852900 100644 --- a/src/createObject.c +++ b/src/createObject.c @@ -78,7 +78,7 @@ Entity* sub_080A2A3C(Entity* parent, u32 form, u32 subtype, u32 param_4) { ent = CreateObjectWithParent(parent, 0, form, subtype); if (ent != NULL) { ent->actionDelay = 5; - ent->field_0x86 = param_4; + ent->field_0x86.HWORD = param_4; } return ent; } diff --git a/src/enemy/madderpillar.c b/src/enemy/madderpillar.c new file mode 100644 index 00000000..78a579e9 --- /dev/null +++ b/src/enemy/madderpillar.c @@ -0,0 +1,584 @@ +#include "enemy.h" +#include "entity.h" +#include "functions.h" + +extern u8 gEntCount; +extern BoundingBox gUnk_080FD298; +extern BoundingBox gUnk_080FD2A0; + +void sub_08029E0C(Entity*); +void sub_08029EEC(Entity*); +void sub_0802A098(Entity*); +void sub_0802A16C(Entity*); +void sub_0802A058(Entity*); +bool32 sub_0802A14C(Entity*); +void sub_0802A18C(Entity*); +bool32 sub_08029FE4(Entity*); +void sub_08029FB4(Entity*, u32, u32); +void sub_0802A0F8(Entity*); + +extern void (*const gUnk_080CCD44[])(Entity*); +extern void (*const gUnk_080CCD60[])(Entity*); +extern void (*const gUnk_080CCD78[])(Entity*); +extern void (*const gUnk_080CCD88[])(Entity*); +extern const u8 gUnk_080CCDA0[]; +extern void (*const gUnk_080CCDA8[])(Entity*); +extern const u8 gUnk_080CCDC8[]; +extern const u16 gUnk_080CCDD4[]; + +void Madderpillar(Entity* this) { + gUnk_080CCD44[this->entityType.form](this); +} + +void sub_08029870(Entity* this) { + gUnk_080CCD60[GetNextFunction(this)](this); +} + +void sub_0802988C(Entity* this) { + gUnk_080CCD78[this->action](this); +} + +void sub_080298A4(Entity* this) { + if (this->action == 1) { + switch (this->bitfield & 0x7f) { + case 0: + case 1: + case 2: + case 3: + case 0xf: + case 0x13: + case 0x1b: + case 0x1e: + break; + default: + this->action = 2; + this->actionDelay = 0; + this->damageType = 0x6b; + this->field_0x76.HALF.HI = 0; + sub_0801D2B4(this, 0x7f); + EnqueueSFX(0xfe); + this->attachedEntity->action = 2; + break; + } + } + + sub_0804AA30(this, gUnk_080CCD60); +} + +void sub_08029980(Entity* this) { + if (this->field_0xf) { + this->field_0xf--; + } else { + sub_0804A7D4(this); + } +} + +void nullsub_14(Entity* this) { + /* ... */ +} + +void sub_0802999C(Entity* this) { + if (gEntCount < 0x44) { + Entity *ent1, *ent2, *ent3, *ent4, *ent5, *ent6; + + ent1 = CreateEnemy(0x18, 1); + ent1->parent = this; + PositionRelative(this, ent1, 0, 5); + this->attachedEntity = ent1; + + ent2 = CreateEnemy(0x18, 2); + ent2->parent = this; + PositionRelative(this, ent2, 0, 4); + ent1->attachedEntity = ent2; + + ent3 = CreateEnemy(0x18, 3); + ent3->parent = this; + PositionRelative(this, ent3, 0, 3); + ent2->attachedEntity = ent3; + + ent4 = CreateEnemy(0x18, 4); + ent4->parent = this; + PositionRelative(this, ent4, 0, 2); + ent3->attachedEntity = ent4; + + ent5 = CreateEnemy(0x18, 5); + ent5->parent = this; + PositionRelative(this, ent5, 0, 1); + ent4->attachedEntity = ent5; + + ent6 = CreateEnemy(0x18, 6); + ent6->attachedEntity = this; + ent6->parent = this; + PositionRelative(this, ent6, 0, 0); + ent5->attachedEntity = ent6; + + this->action = 1; + this->flags |= 0x80; + this->direction = DirectionRound(Random()); + this->nonPlanarMovement = 0xa0; + this->animationState = 0xff; + this->y.WORD += 6; + this->parent = this; + this->field_0x74.HALF.LO = 0xff; + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + sub_08029E0C(this); + sub_08029EEC(this); + } +} + +void sub_08029A94(Entity* this) { + UpdateAnimationSingleFrame(this); + sub_0802A098(this); +} + +void sub_08029AA4(Entity* this) { + if (this->field_0x76.HALF.HI != 0) { + this->action = 3; + this->nonPlanarMovement = 0x108; + this->damageType = 0x6a; + this->field_0x7a.HWORD = 0x168; + this->field_0x74.HALF.HI = 4; + sub_08029EEC(this); + EnqueueSFX(0x19d); + } +} + +void sub_08029AE0(Entity* this) { + UpdateAnimationSingleFrame(this); + sub_0802A16C(this); + sub_0802A098(this); + if (--this->field_0x7a.HWORD == 0) { + this->action = 1; + this->nonPlanarMovement = 0xa0; + this->field_0x74.HALF.HI = 0; + sub_08029EEC(this); + sub_0801D2B4(this, 0x77); + EnqueueSFX(0x182); + } +} + +void sub_08029B2C(Entity* this) { + if (sub_0802A14C(this)) { + if (this->field_0x86.HALF.LO) { + if (--this->actionDelay == 0) { + CreateFx(this, 0x48, 0); + DeleteEntity(this); + } + } else { + this->flags &= ~0x80; + this->actionDelay = -(this->entityType.form * 15 - 90); + this->field_0x86.HALF.LO = 1; + } + } else { + gUnk_080CCD88[this->action](this); + } +} + +void sub_08029B90(Entity* this) { + this->action = 1; + this->spriteSettings.b.draw = 1; + sub_0802A058(this); + if (this->entityType.form < 2) { + InitializeAnimation(this, 0); + } else { + InitializeAnimation(this, 4); + } +} + +void sub_08029BC4(Entity* this) { + u32 uVar1; + u32 uVar2; + + sub_0802A18C(this); + uVar1 = this->x.HALF.HI; + uVar2 = this->y.HALF.HI; + if (sub_08029FE4(this)) { + u32 index; + if (this->entityType.form < 2) { + index = 0; + } else { + index = 4; + } + InitializeAnimation(this, this->animationState + index); + } + sub_08029FB4(this, this->x.HALF.HI - uVar1, this->y.HALF.HI - uVar2); +} + +void sub_08029C08(Entity* this) { + this->action = 3; + this->actionDelay = gUnk_080CCDA0[this->entityType.form]; + this->damageType = 0x6b; + this->attachedEntity->action = 2; +} + +void sub_08029C2C(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 4; + sub_0801D2B4(this, 0x7f); + EnqueueSFX(0x6c); + } +} + +void sub_08029C50(Entity* this) { + if (this->parent->field_0x76.HALF.HI != 0) { + this->action = 5; + this->damageType = 0x6a; + } +} + +void sub_08029C6C(Entity* this) { + sub_0802A18C(this); + sub_08029BC4(this); + if (this->parent->action != 3) { + this->action = 1; + sub_0801D2B4(this, 0x77); + } else { + sub_0802A16C(this); + } +} + +void sub_08029C98(Entity* this) { + if (sub_0802A14C(this)) { + CreateFx(this, 0x48, 0); + DeleteEntity(this); + } else { + gUnk_080CCDA8[this->action](this); + } +} + +void sub_08029CCC(Entity* this) { + this->action = 1; + this->spriteSettings.b.draw = 1; + sub_0802A058(this); + InitializeAnimation(this, 8); +} + +void sub_08029CF0(Entity* this) { + if (sub_08029FE4(this)) { + InitializeAnimation(this, this->animationState + 8); + } +} + +void sub_08029D08(Entity* this) { + this->action = 3; + this->actionDelay = 0x47; +} + +void sub_08029D14(Entity* this) { + if (this->actionDelay) { + if (--this->actionDelay == 0) { + InitializeAnimation(this, this->animationState + 0xc); + sub_0801D2B4(this, 0x7f); + EnqueueSFX(0x6c); + } + } else { + GetNextFrame(this); + if (this->frames.all & 0x80) { + this->action = 4; + this->actionDelay = 0x78; + this->damageType = 0x6c; + this->boundingBox = &gUnk_080FD298; + EnqueueSFX(0x6b); + } + } +} + +void sub_08029D78(Entity* this) { + sub_0802A0F8(this); + if (--this->actionDelay == 0) { + this->action = 5; + this->damageType = 0x6a; + this->boundingBox = (BoundingBox*)&gUnk_080FD2A0; + InitializeAnimation(this, this->animationState + 0x10); + } +} + +void sub_08029DAC(Entity* this) { + GetNextFrame(this); + if (this->frames.all & 0x80) { + this->action = 6; + this->parent->field_0x76.HALF.HI = 1; + InitializeAnimation(this, this->animationState + 8); + } +} + +void sub_08029DDC(Entity* this) { + this->action = 7; +} + +void sub_08029DE4(Entity* this) { + sub_08029CF0(this); + if (this->parent->action != 3) { + this->action = 1; + sub_0801D2B4(this, 0x77); + } else { + sub_0802A16C(this); + } +} + +NAKED +void sub_08029E0C(Entity* this) { + asm(".include \"asm/non_matching/madderpillar/sub_08029E0C.inc\""); +} + +void sub_08029EEC(Entity* this) { + u32 uVar1 = (this->direction >> 3) + this->field_0x74.HALF.HI; + if (uVar1 != this->animationState) { + this->animationState = uVar1; + InitAnimationForceUpdate(this, uVar1); + } +} + +void sub_08029F0C(Entity* this) { + switch (this->direction >> 3) { + case 0: + this->field_0x78.HWORD = this->y.HALF.HI - 0x10; + break; + case 1: + this->field_0x78.HWORD = this->x.HALF.HI + 0x10; + break; + case 2: + this->field_0x78.HWORD = this->y.HALF.HI + 0x10; + break; + case 3: + this->field_0x78.HWORD = this->x.HALF.HI - 0x10; + break; + } +} + +bool32 sub_08029F48(Entity* this) { + switch (this->direction >> 3) { + case 0: + if (this->y.HALF.HI <= this->field_0x78.HWORD) { + this->y.HALF.HI = this->field_0x78.HWORD; + return TRUE; + } + break; + case 1: + if (this->x.HALF.HI >= this->field_0x78.HWORD) { + this->x.HALF.HI = this->field_0x78.HWORD; + return TRUE; + } + break; + case 2: + if (this->y.HALF.HI >= this->field_0x78.HWORD) { + this->y.HALF.HI = this->field_0x78.HWORD; + return TRUE; + } + break; + case 3: + if (this->x.HALF.HI <= this->field_0x78.HWORD) { + this->x.HALF.HI = this->field_0x78.HWORD; + return TRUE; + } + break; + } + + return FALSE; +} + +void sub_08029FB4(Entity* this, u32 x, u32 y) { + u8* dst = (u8*)&this->attachedEntity->field_0x78; + s32 unk = this->parent->field_0x7c.BYTES.byte2; + u8 idx = unk % 0xe; + dst[idx] = ((x + 8) & 0xf) | (((y + 8) & 0xf) << 4); +} + +/* The optimizer is strong within you. */ +bool32 sub_08029FE4(Entity* this) { + u8 state; + u8* dst = (u8*)&this->field_0x78; + s32 unk = this->parent->field_0x7c.BYTES.byte2 + 1; + s8 iVar6 = (dst[unk % 0xe] & 0xf) - 8; + s8 iVar5 = (dst[unk % 0xe] >> 4) - 8; + this->x.HALF.HI += iVar6; + this->y.HALF.HI += iVar5; + GetNextFrame(this); + + state = 0xff; + if (iVar6 != 0) { + if (0 < iVar6) { + state = 1; + } else { + state = 3; + } + } + + if (iVar5 != 0) { + if (0 < iVar5) { + state = 2; + } else { + state = 0; + } + } + + if (state != 0xff && state != this->animationState) { + this->animationState = state; + return TRUE; + } else { + return FALSE; + } +} + +void sub_0802A058(Entity* this) { + this->field_0x78.HALF.LO = 0x88; + this->field_0x78.HALF.HI = 0x88; + this->field_0x7a.HALF.LO = 0x88; + this->field_0x7a.HALF.HI = 0x88; + this->field_0x7c.BYTES.byte0 = 0x88; + this->field_0x7c.BYTES.byte1 = 0x88; + this->field_0x7c.BYTES.byte2 = 0x88; + this->field_0x7c.BYTES.byte3 = 0x88; + this->field_0x80.HALF.LO = 0x88; + this->field_0x80.HALF.HI = 0x88; + this->field_0x82.HALF.LO = 0x88; + this->field_0x82.HALF.HI = 0x88; + this->cutsceneBeh.HALF.LO = 0x88; + this->cutsceneBeh.HALF.HI = 0x88; +} + +void sub_0802A098(Entity* this) { + u32 uVar1; + u32 uVar2; + s32 unk = (++this->field_0x7c.BYTES.byte2, this->field_0x7c.BYTES.byte2); + u8 idx = unk % 0xe; + if (idx == 0) { + this->field_0x7c.BYTES.byte2 = 0; + } + uVar1 = this->x.HALF.HI; + uVar2 = this->y.HALF.HI; + ProcessMovement(this); + if (sub_08029F48(this)) { + sub_08029E0C(this); + sub_08029EEC(this); + EnqueueSFX(0x104); + } + + sub_08029FB4(this, this->x.HALF.HI - uVar1, this->y.HALF.HI - uVar2); +} + +void sub_0802A0F8(Entity* this) { + if (this->currentHealth != 0) { + if ((this->bitfield & 0x80) && this->hurtBlinkTime != 0) { + Entity* ent = this; + u32 i; + for (i = 0; i < 6; i++) { + ent = ent->attachedEntity; + ent->hurtBlinkTime = this->hurtBlinkTime; + } + } + } else { + this->parent->flags &= ~0x80; + this->parent->currentHealth = 0; + this->parent->field_0xf = 0x69; + } +} + +bool32 sub_0802A14C(Entity* this) { + u32 ret = FALSE; + + if (this->parent->currentHealth == 0 || this->field_0x86.HALF.LO) { + ret = TRUE; + } else { + ret = FALSE; + } + return ret; +} + +void sub_0802A16C(Entity* this) { + sub_0801D2B4(this, gUnk_080CCDD4[this->parent->field_0x7a.HWORD >> 2 & 3]); +} + +void sub_0802A18C(Entity* this) { + if (this->bitfield & 0x80) { + switch (this->bitfield & 0x7f) { + case 0: + case 1: + case 2: + case 3: + case 0xf: + case 0x13: + case 0x1b: + case 0x1e: + break; + default: + EnqueueSFX(0x12e); + break; + } + } +} + +/* +// clang-format off +void (*const gUnk_080CCD44[])(Entity*) = { + sub_08029870, + sub_08029B2C, + sub_08029B2C, + sub_08029B2C, + sub_08029B2C, + sub_08029B2C, + sub_08029C98, +}; + +void (*const gUnk_080CCD60[])(Entity*) = { + sub_0802988C, + sub_080298A4, + sub_0802988C, + sub_08029980, + sub_08001242, + nullsub_14, +}; + +void (*const gUnk_080CCD78[])(Entity*) = { + sub_0802999C, + sub_08029A94, + sub_08029AA4, + sub_08029AE0, +}; + +void (*const gUnk_080CCD88[])(Entity*) = { + sub_08029B90, + sub_08029BC4, + sub_08029C08, + sub_08029C2C, + sub_08029C50, + sub_08029C6C, +}; + +const u8 gUnk_080CCDA0[] = { + 0x00, 0x24, + 0x30, + 0x3A, + 0x41, + 0x45, + 0x00, + 0x00, +}; + +void (*const gUnk_080CCDA8[])(Entity*) = { + sub_08029CCC, + sub_08029CF0, + sub_08029D08, + sub_08029D14, + sub_08029D78, + sub_08029DAC, + sub_08029DDC, + sub_08029DE4, +}; + +const u8 gUnk_080CCDC8[] = { + 0x08, 0x00, + 0x18, 0x00, + 0x10, 0x08, + 0x10, 0x08, + 0x18, 0x00, + 0x18, 0x10, +}; + +const u16 gUnk_080CCDD4[] = { + 0x80, 0x81, + 0x82, 0x81, +}; +// clang-format on +*/ diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c index 5849d45a..8147d832 100644 --- a/src/enemy/pesto.c +++ b/src/enemy/pesto.c @@ -49,7 +49,7 @@ void sub_08023F44(Entity* this) { void sub_08023F5C(Entity* this) { if (this->damageType != 0x6e) { if (this->bitfield == 0x80) { - *(u8*)&this->field_0x86 = 0x30; + this->field_0x86.HALF.LO = 0x30; if ((this->field_0x82.HALF.HI & 0xf) == 3 && this->action == 6) { switch (this->field_0x80.HALF.LO) { @@ -155,8 +155,8 @@ void sub_080240B8(Entity* this) { this->field_0x80.HALF.HI = Random() & 0x40; this->field_0x82.HALF.LO = 0; this->field_0x82.HALF.HI = 0x80; - *((u8*)&this->field_0x86 + 0) = 0; - *((u8*)&this->field_0x86 + 1) = 0; + this->field_0x86.HALF.LO = 0; + this->field_0x86.HALF.HI = 0; this->actionDelay = 0; this->field_0xf = 0x20; this->field_0x3c |= 0x10; @@ -727,19 +727,19 @@ void sub_08024C94(Entity* this) { bool32 sub_08024CC0(Entity* this) { bool32 uVar2; - uVar2 = 1; + uVar2 = TRUE; if (!sub_08024C48(this, 1)) { - uVar2 = 0; + uVar2 = FALSE; } else if (!sub_08049F1C(this, gUnk_020000B0, 0x50) || !sub_08049FDC(this, 3)) { - uVar2 = 0; + uVar2 = FALSE; sub_08024C7C(this); } return uVar2; } void sub_08024D00(Entity* this) { - if (*(u8*)&this->field_0x86) { - (*(u8*)&this->field_0x86)--; + if (this->field_0x86.HALF.LO) { + this->field_0x86.HALF.LO--; GetNextFrame(this); } else { sub_08024940(this); @@ -804,9 +804,9 @@ void sub_08024E4C(Entity* this) { this->cutsceneBeh.HALF.LO += 1 + (Random() & 1); } - if (gUnk_02002A40.stats.health == 0 || *((u8*)&this->field_0x86 + 1) == 4) { + if (gUnk_02002A40.stats.health == 0 || this->field_0x86.HALF.HI == 4) { this->cutsceneBeh.HALF.LO = 0x30; - *((u8*)&this->field_0x86 + 1) = 0; + this->field_0x86.HALF.HI = 0; sub_08024F50(this); this->field_0x80.HALF.LO = 0; this->nonPlanarMovement = 0x40; @@ -828,7 +828,7 @@ void sub_08024E4C(Entity* this) { player->animationState = 4; player->spritePriority.b1 = 0; if (this->field_0xf == 0) { - (*((u8*)&this->field_0x86 + 1))++; + (this->field_0x86.HALF.HI++; player->hurtBlinkTime = 8; ModHealth(-2); sub_0800449C(player, 0x7a); diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c index 2a87dc68..881437f5 100644 --- a/src/enemy/puffstool.c +++ b/src/enemy/puffstool.c @@ -169,7 +169,7 @@ void sub_08025230(Entity* this) { if (sub_0802571C(this)) { this->action = 2; this->actionDelay = 240; - this->field_0x86 = COORD_TO_TILE(this); + this->field_0x86.HWORD = COORD_TO_TILE(this); } } else { this->field_0x78.HWORD--; @@ -186,12 +186,12 @@ void sub_080252E0(Entity* this) { GetNextFrame(this); tile = COORD_TO_TILE(this); - if (tile == this->field_0x86) { + if (tile == this->field_0x86.HWORD) { if (--this->actionDelay == 0) { sub_080256B4(this); } } else { - this->field_0x86 = tile; + this->field_0x86.HWORD = tile; this->actionDelay = 240; } diff --git a/src/manager/manager20.c b/src/manager/manager20.c index 1f989f10..fe50967e 100644 --- a/src/manager/manager20.c +++ b/src/manager/manager20.c @@ -22,7 +22,7 @@ extern void DeleteManager(Manager20*); void sub_0805B7A0(Manager20* this) { Entity* tmp = CreateObject(this->manager.unk_0e, this->manager.unk_0a, this->manager.unk_0b); if (!tmp) return; - tmp->field_0x86 = this->unk_3e; + tmp->field_0x86.HWORD = this->unk_3e; if (CheckFlags(this->unk_3e)) { tmp->x.HALF.HI = this->unk_36 | (this->unk_37&0xF)<<8;//r1 tmp->y.HALF.HI = this->unk_3c & 0xFFF; diff --git a/src/object/bigVortex.c b/src/object/bigVortex.c index 73c6a034..8e8522c0 100644 --- a/src/object/bigVortex.c +++ b/src/object/bigVortex.c @@ -23,7 +23,7 @@ void sub_08098D1C(Entity* this) { this->action = 1; this->height.HALF.HI = -0x10; - temp = this->field_0x86; + temp = this->field_0x86.HWORD; if ((temp != 0) && !CheckFlags(temp)) { this->action = 1; @@ -39,7 +39,7 @@ void sub_08098D1C(Entity* this) { void sub_08098D6C(Entity* this) { Entity* ent; - if (CheckFlags(this->field_0x86)) { + if (CheckFlags(this->field_0x86.HWORD)) { this->action = 2; this->actionDelay = 0x2d; ent = CreateFx(this, 0x43, 0); diff --git a/src/object/button.c b/src/object/button.c index b66c7f2d..99d018b3 100644 --- a/src/object/button.c +++ b/src/object/button.c @@ -22,7 +22,7 @@ void sub_08081AE0(Entity* this) { this->field_0x74.HWORD = (((this->x.HALF.HI - gRoomControls.roomOriginX)>>4) & 0x3F) | ((((this->y.HALF.HI - gRoomControls.roomOriginY)>>4) & 0x3F) << 6); this->field_0x70.HALF.HI = GetTileType(this->field_0x74.HWORD, this->collisionLayer); - if (this->entityType.form == 0 && CheckFlags(this->field_0x86)) { + if (this->entityType.form == 0 && CheckFlags(this->field_0x86.HWORD)) { this->action = 5; SetTileType(0x7A, this->field_0x74.HWORD, this->collisionLayer); } else { @@ -92,7 +92,7 @@ void sub_08081C30(Entity* this) { } } else { this->action = 2; - ClearFlag(this->field_0x86); + ClearFlag(this->field_0x86.HWORD); SetTileType(0x77, this->field_0x74.HWORD, this->collisionLayer); PlaySFX(0x10C); } @@ -257,7 +257,7 @@ u32 sub_08081F7C(Entity* this, u32 r7) { this->attachedEntity->spriteOffsetY = 0xfc; } else { if (this->actionDelay == 6) { - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); SetTileType(r7, this->field_0x74.HWORD, this->collisionLayer); sub_08081F24(this); PlaySFX(0x10C); diff --git a/src/object/fan.c b/src/object/fan.c index c73cec9b..564ff69c 100644 --- a/src/object/fan.c +++ b/src/object/fan.c @@ -40,8 +40,8 @@ void sub_0809ED88(Entity *this) { sub_0809F08C(); sub_0809EE44(this); - if (this->field_0x86 != 0) { - if (this->cutsceneBeh.HWORD == this->field_0x86) { + if (this->field_0x86.HWORD != 0) { + if (this->cutsceneBeh.HWORD == this->field_0x86.HWORD) { if (CheckFlags(this->cutsceneBeh.HWORD)) { return; } diff --git a/src/object/heartContainer.c b/src/object/heartContainer.c index 9222f36f..a2a35887 100644 --- a/src/object/heartContainer.c +++ b/src/object/heartContainer.c @@ -37,7 +37,7 @@ static void sub_0808E6A0(Entity* this) { } static void sub_0808E6E4(Entity* this) { - if (CheckFlags(this->field_0x86)) { + if (CheckFlags(this->field_0x86.HWORD)) { this->action = 2; this->spriteSettings.b.draw = 1; this->spriteRendering.b0 = 3; diff --git a/src/object/hiddenLadderDown.c b/src/object/hiddenLadderDown.c index f878f055..932018c8 100644 --- a/src/object/hiddenLadderDown.c +++ b/src/object/hiddenLadderDown.c @@ -20,7 +20,7 @@ void sub_08091F14(Entity* this) { this->animIndex = 0; this->field_0x70.HALF.LO = COORD_TO_TILE(this); puVar3 = &this->field_0x70.HALF.LO; - if (CheckFlags(this->field_0x86) != 0) { + if (CheckFlags(this->field_0x86.HWORD) != 0) { this->action = 2; this->spriteSettings.b.draw = TRUE; SetTileType(0x1a2, *puVar3 - 0x41, this->collisionLayer); @@ -39,6 +39,6 @@ void sub_08092000(Entity* this) { if (GetTileType(*(u16*)&this->field_0x70.HALF.LO, this->collisionLayer) == 0x1a6) { this->action = 2; this->spriteSettings.b.draw = TRUE; - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); } } \ No newline at end of file diff --git a/src/object/jailBars.c b/src/object/jailBars.c index c72713b6..4fe3cb26 100644 --- a/src/object/jailBars.c +++ b/src/object/jailBars.c @@ -18,7 +18,7 @@ void JailBars(Entity *this) void sub_080A08C4(Entity *this) { - if (CheckFlags(this->field_0x86) == 0) { + if (CheckFlags(this->field_0x86.HWORD) == 0) { this->action = 1; sub_080A0960(this, 0); } @@ -34,7 +34,7 @@ void sub_080A08C4(Entity *this) void sub_080A0910(Entity *this) { - if (CheckFlags(this->field_0x86) != 0) { + if (CheckFlags(this->field_0x86.HWORD) != 0) { this->action = 2; sub_080A0960(this, 1); PlaySFX(0x10b); diff --git a/src/object/lightableSwitch.c b/src/object/lightableSwitch.c index 047f5282..3d33dcfe 100644 --- a/src/object/lightableSwitch.c +++ b/src/object/lightableSwitch.c @@ -45,10 +45,10 @@ void sub_0809EA34(Entity* this) { void sub_0809EA80(Entity* this) { if ((this->bitfield & 0x80) != 0) { - if (CheckFlags(this->field_0x86) != 0) { - ClearFlag(this->field_0x86); + if (CheckFlags(this->field_0x86.HWORD) != 0) { + ClearFlag(this->field_0x86.HWORD); } else { - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); } EnqueueSFX(0x110); } @@ -59,7 +59,7 @@ void sub_0809EABC(Entity* this) { bool32 anySet; u32 f; - f = CheckFlags(this->field_0x86); + f = CheckFlags(this->field_0x86.HWORD); anySet = (-f | f) >> 0x1F; if (this->frameIndex != anySet) { this->frameIndex = anySet; @@ -122,7 +122,7 @@ void sub_0809EBD8(Entity* this) { this->action = 2; this->actionDelay = 0x10; this->frameIndex = 2; - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); EnqueueSFX(0x110); } } @@ -136,7 +136,7 @@ void sub_0809EC08(Entity* this) { if (--this->actionDelay == 0) { this->action = 1; this->frameIndex = 3; - ClearFlag(this->field_0x86); + ClearFlag(this->field_0x86.HWORD); EnqueueSFX(0x110); } } diff --git a/src/object/mask.c b/src/object/mask.c index a936e7e1..9fb42c68 100644 --- a/src/object/mask.c +++ b/src/object/mask.c @@ -31,7 +31,7 @@ void Mask(Entity *this) { void sub_080929A4(Entity *this) { if (this->entityType.parameter & 0xC0) { - if (CheckFlags(this->field_0x86)) { + if (CheckFlags(this->field_0x86.HWORD)) { s32 field_0x0a; switch (this->entityType.parameter & 0xC0) { @@ -45,7 +45,7 @@ void sub_080929A4(Entity *this) { goto switchEnd; } - ClearFlag(this->field_0x86); + ClearFlag(this->field_0x86.HWORD); break; case 0x80: DeleteThisEntity(); @@ -117,7 +117,7 @@ void sub_08092B0C(Entity *this) { case 0x80: EnqueueSFX(0x72); case 0x40: - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); break; } diff --git a/src/object/metalDoor.c b/src/object/metalDoor.c index 7aa6ec5d..ec363f4d 100644 --- a/src/object/metalDoor.c +++ b/src/object/metalDoor.c @@ -77,7 +77,7 @@ void sub_080A074C(Entity *this) void sub_080A07BC(Entity *this) { - if (CheckFlags(this->field_0x86)) { + if (CheckFlags(this->field_0x86.HWORD)) { this->action = 4; this->actionDelay = 0xc; this->direction = 0x10; diff --git a/src/object/object2A.c b/src/object/object2A.c index 032db162..f98b8cd0 100644 --- a/src/object/object2A.c +++ b/src/object/object2A.c @@ -30,7 +30,7 @@ void sub_08089B18(Entity *this) CopyPosition(this->parent, this); break; case 4: - if (!CheckFlags(this->field_0x86)) { + if (!CheckFlags(this->field_0x86.HWORD)) { this->spriteSettings.b.draw = FALSE; this->previousActionFlag = 1; return; diff --git a/src/object/objectA.c b/src/object/objectA.c index 72c4e61a..60be0b74 100644 --- a/src/object/objectA.c +++ b/src/object/objectA.c @@ -20,7 +20,7 @@ void ObjectA(Entity *this) { uVar2 = 0x34; } this->field_0x70.HALF.LO = uVar2; - if (CheckFlags(this->field_0x86) != 0) { + if (CheckFlags(this->field_0x86.HWORD) != 0) { SetTileType(*(u16*)&this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); if ((gRoomControls.unk2 & 1) != 0) { gUnk_02000070 = 0; @@ -31,7 +31,7 @@ void ObjectA(Entity *this) { } } else if (this->interactType != 0) { SetTileType(*(u16*)&this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer); - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); CreateDust(this); sub_080526F8(-1); DeleteThisEntity(); diff --git a/src/object/pot.c b/src/object/pot.c index b7cfc8d6..a415b3fb 100755 --- a/src/object/pot.c +++ b/src/object/pot.c @@ -30,7 +30,7 @@ void Pot(Entity* this) { } void sub_0808222C(Entity* this) { - if (this->entityType.parameter == 1 && CheckFlags(this->field_0x86)) { + if (this->entityType.parameter == 1 && CheckFlags(this->field_0x86.HWORD)) { DeleteThisEntity(); } @@ -271,7 +271,7 @@ static void sub_08082850(Entity* this, Entity* parent) { } if (this->entityType.parameter == 1) { - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); } DeleteThisEntity(); @@ -292,7 +292,7 @@ u32 sub_0808288C(Entity* this, u32 form, u32 arg2, u32 arg3) { if (entity) { if (arg3 == 2) { entity->actionDelay = 5; - entity->field_0x86 = this->field_0x86; + entity->field_0x86.HWORD = this->field_0x86.HWORD; } else { entity->actionDelay = 0; } diff --git a/src/object/railtrack.c b/src/object/railtrack.c index ef45e554..01222738 100644 --- a/src/object/railtrack.c +++ b/src/object/railtrack.c @@ -32,7 +32,7 @@ void sub_080851AC(Entity* this) { } this->animationState = this->entityType.parameter & 2; if ((this->entityType).form == 3) { - uVar1 = CheckFlags(this->field_0x86); + uVar1 = CheckFlags(this->field_0x86.HWORD); this->field_0x7a.HWORD = uVar1; if ((u16)(uVar1 & -1) != 0) { this->animationState = (this->animationState + 2) & 3; @@ -45,11 +45,11 @@ void sub_080851AC(Entity* this) { } void sub_08085264(Entity* this) { - if (CheckFlags(this->field_0x86)) { + if (CheckFlags(this->field_0x86.HWORD)) { this->action = 2; this->field_0xf = 8; if (this->entityType.form == 1) { - ClearFlag(this->field_0x86); + ClearFlag(this->field_0x86.HWORD); } this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3; InitializeAnimation(this, this->animationState); @@ -62,7 +62,7 @@ void sub_080852B4(Entity* this) { if (--this->field_0xf == 0) { this->action = 3; this->field_0xf = this->actionDelay; - this->field_0x7a.HWORD = CheckFlags(this->field_0x86); + this->field_0x7a.HWORD = CheckFlags(this->field_0x86.HWORD); this->animationState = (this->animationState + *(u8*)&this->field_0x7c) & 3; InitializeAnimation(this, this->animationState); sub_08085394(this); @@ -77,13 +77,13 @@ void sub_08085308(Entity* this) { case 1: break; case 2: - if (CheckFlags(this->field_0x86) == 0) { + if (CheckFlags(this->field_0x86.HWORD) == 0) { this->action = 1; return; } break; case 3: - if (CheckFlags(this->field_0x86) == *(u16*)&this->field_0x7a) { + if (CheckFlags(this->field_0x86.HWORD) == *(u16*)&this->field_0x7a) { this->field_0xf = 0xff; } else { this->field_0xf = 1; diff --git a/src/object/treeHidingPortal.c b/src/object/treeHidingPortal.c index ab7888c5..eb507c93 100644 --- a/src/object/treeHidingPortal.c +++ b/src/object/treeHidingPortal.c @@ -23,7 +23,7 @@ void TreeHidingPortal(Entity* this) { } void sub_0809E83C(Entity* this) { - if (CheckFlags(this->field_0x86)) { + if (CheckFlags(this->field_0x86.HWORD)) { sub_0809E96C(this); DeleteThisEntity(); } @@ -60,7 +60,7 @@ void sub_0809E8BC(Entity* this) { void sub_0809E8EC(Entity* this) { if (--this->actionDelay == 0) { - SetFlag(this->field_0x86); + SetFlag(this->field_0x86.HWORD); sub_08078A90(0); PlaySFX(0x73); DeleteThisEntity();