diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9137e3aa..0a438e7d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -220,7 +220,7 @@ void sub_08086284(Entity *r4) { gUnk_08120668[r4->action](r4); r4->bitfield = 0; - sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->itemCooldown, 0); + sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->field_0x7a, 0); return; } ``` @@ -268,7 +268,7 @@ extern void (*gUnk_08120668[])(Entity *); void sub_08086284(Entity *r4) { gUnk_08120668[r4->action](r4); r4->bitfield = 0; - sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->itemCooldown, 0); + sub_0805EC9C(r4, *((u16 *)&r4->heldObjectPtr + 1), r4->field_0x7a, 0); return; } ``` diff --git a/asm/lakitu.s b/asm/lakitu.s deleted file mode 100644 index 6faceee6..00000000 --- a/asm/lakitu.s +++ /dev/null @@ -1,748 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Lakitu -Lakitu: @ 0x0803C738 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0803C754 @ =gUnk_080D0110 - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_0803C754: .4byte gUnk_080D0110 - - thumb_func_start sub_0803C758 -sub_0803C758: @ 0x0803C758 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0803C76C - cmp r0, #7 - beq _0803C76C - adds r0, r4, #0 - bl sub_0803CAD0 -_0803C76C: - ldr r0, _0803C780 @ =gUnk_080D0128 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_0803C780: .4byte gUnk_080D0128 - - thumb_func_start sub_0803C784 -sub_0803C784: @ 0x0803C784 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x1d - bne _0803C7A2 - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - adds r0, r4, #0 - bl sub_0803CBAC - b _0803C7FA -_0803C7A2: - adds r0, r4, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x43 - bne _0803C7FA - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _0803C7FA - adds r0, r4, #0 - adds r0, #0x3e - ldrb r1, [r0] - movs r0, #0x10 - eors r0, r1 - lsls r1, r0, #3 - ldr r3, _0803C818 @ =gSineTable - lsls r0, r0, #4 - adds r0, r0, r3 - movs r5, #0 - ldrsh r0, [r0, r5] - cmp r0, #0 - bge _0803C7D8 - adds r0, #0x1f -_0803C7D8: - asrs r0, r0, #5 - ldrh r5, [r2, #0x2e] - adds r0, r0, r5 - strh r0, [r2, #0x2e] - adds r0, r1, #0 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r3 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - bge _0803C7F2 - adds r0, #0x1f -_0803C7F2: - asrs r1, r0, #5 - ldrh r0, [r2, #0x32] - subs r0, r0, r1 - strh r0, [r2, #0x32] -_0803C7FA: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0803C80C - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0803C80C: - ldr r1, _0803C81C @ =gUnk_080D0110 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_0803C818: .4byte gSineTable -_0803C81C: .4byte gUnk_080D0110 - - thumb_func_start sub_0803C820 -sub_0803C820: @ 0x0803C820 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - beq _0803C83C - ldr r0, _0803C840 @ =gUnk_080D0148 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0803C83C: - pop {r4, pc} - .align 2, 0 -_0803C840: .4byte gUnk_080D0148 - - thumb_func_start sub_0803C844 -sub_0803C844: @ 0x0803C844 - movs r1, #1 - strb r1, [r0, #0xd] - movs r1, #0x3c - strb r1, [r0, #0x1d] - bx lr - .align 2, 0 - - thumb_func_start sub_0803C850 -sub_0803C850: @ 0x0803C850 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x54] - cmp r0, #0 - beq _0803C864 - adds r1, r2, #0 - adds r1, #0x62 - ldrb r1, [r1] - adds r0, #0x62 - strb r1, [r0] -_0803C864: - adds r0, r2, #0 - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_0803C86C -sub_0803C86C: @ 0x0803C86C - push {r4, lr} - adds r4, r0, #0 - bl sub_0803CBAC - movs r0, #0 - str r0, [r4, #0x54] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803C87C -sub_0803C87C: @ 0x0803C87C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x11 - movs r2, #0 - bl sub_0804A98C - cmp r0, #0 - beq _0803C8B4 - str r4, [r0, #0x50] - str r0, [r4, #0x54] - adds r0, r4, #0 - bl sub_0804A720 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0803C8B8 @ =0x0000FFFE - strh r0, [r4, #0x36] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xff - strb r0, [r1] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x74 - strh r1, [r0] - ldrh r1, [r4, #0x32] - adds r0, #2 - strh r1, [r0] -_0803C8B4: - pop {r4, pc} - .align 2, 0 -_0803C8B8: .4byte 0x0000FFFE - - thumb_func_start sub_0803C8BC -sub_0803C8BC: @ 0x0803C8BC - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - bl sub_0803CA84 - adds r0, r4, #0 - bl sub_0803CA4C - cmp r0, #0 - beq _0803C8E0 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] -_0803C8E0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803C8E4 -sub_0803C8E4: @ 0x0803C8E4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803C914 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x42 - strb r0, [r1] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0803C914: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803C918 -sub_0803C918: @ 0x0803C918 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803CB04 - cmp r0, #0 - bne _0803C94E - adds r0, r4, #0 - bl sub_0803CA4C - cmp r0, #0 - bne _0803C946 - movs r0, #4 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x43 - strb r0, [r1] - ldrb r1, [r4, #0x14] - adds r1, #0xc - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803C94E -_0803C946: - adds r0, r4, #0 - movs r1, #4 - bl sub_0803CA84 -_0803C94E: - pop {r4, pc} - - thumb_func_start sub_0803C950 -sub_0803C950: @ 0x0803C950 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803C97A - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0803C97A: - pop {r4, pc} - - thumb_func_start sub_0803C97C -sub_0803C97C: @ 0x0803C97C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803C9D2 - adds r0, r4, #0 - bl sub_0803CB64 - movs r0, #6 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x42 - strb r0, [r1] - bl Random - movs r1, #1 - ands r0, r1 - adds r2, r4, #0 - adds r2, #0x79 - cmp r0, #0 - beq _0803C9C2 - ldrb r0, [r2] - cmp r0, #0 - bne _0803C9C2 - movs r0, #0xf - strb r0, [r4, #0xe] - strb r1, [r2] - b _0803C9D2 -_0803C9C2: - movs r1, #0 - movs r0, #0x1e - strb r0, [r4, #0xe] - strb r1, [r2] - ldr r0, [r4, #0x54] - ldrb r1, [r4, #0x14] - bl InitAnimationForceUpdate -_0803C9D2: - pop {r4, pc} - - thumb_func_start sub_0803C9D4 -sub_0803C9D4: @ 0x0803C9D4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803CA08 - adds r0, r2, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #1 - bne _0803C9F6 - adds r0, r2, #0 - bl sub_0803CB34 - b _0803CA08 -_0803C9F6: - movs r0, #3 - strb r0, [r2, #0xc] - movs r0, #0xb4 - strb r0, [r2, #0xe] - ldrb r1, [r2, #0x14] - adds r1, #4 - adds r0, r2, #0 - bl InitAnimationForceUpdate -_0803CA08: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803CA0C -sub_0803CA0C: @ 0x0803CA0C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0xc0 - lsls r1, r1, #5 - bl sub_08003FC4 - cmp r0, #0 - bne _0803CA3E - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0x13 - bhi _0803CA3E - ldrb r1, [r4, #0x14] - adds r1, #0x14 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] -_0803CA3E: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0803CC08 - pop {r4, pc} - - thumb_func_start sub_0803CA4C -sub_0803CA4C: @ 0x0803CA4C - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0803CA7C @ =gLinkEntity - movs r0, #0x2e - ldrsh r1, [r4, r0] - movs r0, #0x32 - ldrsh r2, [r4, r0] - adds r0, r5, #0 - movs r3, #0x28 - bl sub_0806FCB8 - cmp r0, #0 - bne _0803CA80 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0x70 - movs r3, #0x50 - bl sub_080041A0 - cmp r0, #0 - beq _0803CA80 - movs r0, #1 - b _0803CA82 - .align 2, 0 -_0803CA7C: .4byte gLinkEntity -_0803CA80: - movs r0, #0 -_0803CA82: - pop {r4, r5, pc} - - thumb_func_start sub_0803CA84 -sub_0803CA84: @ 0x0803CA84 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldr r1, _0803CACC @ =gLinkEntity - bl sub_080045C4 - adds r4, r0, #0 - subs r0, r4, #3 - movs r1, #7 - ands r0, r1 - cmp r0, #2 - bhi _0803CAAA - ldrb r0, [r5, #0x14] - lsrs r1, r4, #3 - subs r0, r0, r1 - movs r1, #3 - ands r0, r1 - cmp r0, #1 - bls _0803CACA -_0803CAAA: - adds r0, r4, #4 - movs r1, #0x18 - ands r0, r1 - lsrs r4, r0, #3 - ldrb r0, [r5, #0x14] - cmp r4, r0 - beq _0803CACA - strb r4, [r5, #0x14] - adds r1, r4, r6 - adds r0, r5, #0 - bl InitAnimationForceUpdate - ldr r0, [r5, #0x54] - adds r1, r4, #0 - bl InitAnimationForceUpdate -_0803CACA: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803CACC: .4byte gLinkEntity - - thumb_func_start sub_0803CAD0 -sub_0803CAD0: @ 0x0803CAD0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x74 - ldrh r1, [r6] - adds r5, r4, #0 - adds r5, #0x76 - ldrh r2, [r5] - movs r3, #1 - bl sub_0806FCB8 - cmp r0, #0 - bne _0803CB02 - movs r1, #0x2e - ldrsh r0, [r4, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r6] - ldrh r3, [r5] - bl sub_080045D4 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_080AEFE0 -_0803CB02: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0803CB04 -sub_0803CB04: @ 0x0803CB04 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - beq _0803CB1A - movs r0, #0 - b _0803CB32 -_0803CB1A: - adds r0, r4, #0 - bl sub_0803CB34 - adds r0, r4, #0 - adds r0, #0x79 - strb r5, [r0] - ldr r0, [r4, #0x54] - ldrb r1, [r4, #0x14] - adds r1, #4 - bl InitAnimationForceUpdate - movs r0, #1 -_0803CB32: - pop {r4, r5, pc} - - thumb_func_start sub_0803CB34 -sub_0803CB34: @ 0x0803CB34 - push {r4, lr} - adds r4, r0, #0 - movs r0, #5 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0xa6 - strb r0, [r1] - ldr r1, _0803CB60 @ =gLinkEntity - adds r0, r4, #0 - bl sub_080045C4 - adds r1, r4, #0 - adds r1, #0x78 - strb r0, [r1] - ldrb r1, [r4, #0x14] - adds r1, #8 - adds r0, r4, #0 - bl InitAnimationForceUpdate - pop {r4, pc} - .align 2, 0 -_0803CB60: .4byte gLinkEntity - - thumb_func_start sub_0803CB64 -sub_0803CB64: @ 0x0803CB64 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0x12 - movs r2, #0 - bl sub_0804A98C - adds r5, r0, #0 - cmp r5, #0 - beq _0803CBA0 - ldrb r1, [r4, #0x14] - lsls r1, r1, #1 - ldr r0, _0803CBA4 @ =gUnk_080D0154 - adds r1, r1, r0 - adds r0, r4, #0 - adds r0, #0x78 - ldrb r0, [r0] - strb r0, [r5, #0x15] - movs r2, #0 - ldrsb r2, [r1, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r1, r3] - lsls r3, r3, #0x10 - adds r0, r4, #0 - adds r1, r5, #0 - bl PositionRelative - ldr r0, _0803CBA8 @ =0x00000193 - bl sub_08004488 -_0803CBA0: - pop {r4, r5, pc} - .align 2, 0 -_0803CBA4: .4byte gUnk_080D0154 -_0803CBA8: .4byte 0x00000193 - - thumb_func_start sub_0803CBAC -sub_0803CBAC: @ 0x0803CBAC - push {lr} - adds r3, r0, #0 - ldr r2, [r3, #0x54] - cmp r2, #0 - beq _0803CBC6 - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x43 - strb r0, [r1] -_0803CBC6: - movs r0, #7 - strb r0, [r3, #0xc] - ldrb r1, [r3, #0x18] - subs r0, #0xb - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r3, #0x18] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r2, #0x12 - ldrb r1, [r2] - movs r0, #0x7b - ands r0, r1 - strb r0, [r2] - adds r1, r3, #0 - adds r1, #0x3f - movs r0, #0x42 - strb r0, [r1] - ldrb r1, [r3, #0x14] - adds r1, #0x10 - adds r0, r3, #0 - bl InitAnimationForceUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803CC08 -sub_0803CC08: @ 0x0803CC08 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x54] - cmp r5, #0 - beq _0803CCB4 - movs r1, #0x36 - ldrsh r0, [r5, r1] - movs r2, #0x36 - ldrsh r1, [r4, r2] - subs r0, r0, r1 - cmp r0, #2 - bhi _0803CCB4 - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _0803CCB4 - movs r0, #0x2e - ldrsh r1, [r5, r0] - movs r0, #0x32 - ldrsh r2, [r5, r0] - adds r0, r4, #0 - movs r3, #6 - bl sub_0806FCB8 - cmp r0, #0 - beq _0803CCB4 - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CC56 - ldrh r0, [r1, #0x2e] - adds r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - adds r0, #6 - strh r0, [r1, #0x32] -_0803CC56: - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CC72 - ldrh r0, [r1, #0x2e] - subs r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - adds r0, #6 - strh r0, [r1, #0x32] -_0803CC72: - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CC8E - ldrh r0, [r1, #0x2e] - adds r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - subs r0, #6 - strh r0, [r1, #0x32] -_0803CC8E: - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _0803CCAA - ldrh r0, [r1, #0x2e] - subs r0, #6 - strh r0, [r1, #0x2e] - ldrh r0, [r1, #0x32] - subs r0, #6 - strh r0, [r1, #0x32] -_0803CCAA: - movs r0, #0 - str r0, [r4, #0x54] - adds r0, r5, #0 - bl DeleteEntity -_0803CCB4: - pop {r4, r5, pc} - .align 2, 0 diff --git a/asm/lakituCloud.s b/asm/lakituCloud.s deleted file mode 100644 index 69a60a52..00000000 --- a/asm/lakituCloud.s +++ /dev/null @@ -1,254 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LakituCloud -LakituCloud: @ 0x0803CCB8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0803CCD0 @ =gUnk_080D0418 - 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 -_0803CCD0: .4byte gUnk_080D0418 - - thumb_func_start sub_0803CCD4 -sub_0803CCD4: @ 0x0803CCD4 - push {lr} - ldr r2, _0803CCE8 @ =gUnk_080D0430 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0803CCE8: .4byte gUnk_080D0430 - - thumb_func_start sub_0803CCEC -sub_0803CCEC: @ 0x0803CCEC - push {lr} - adds r2, r0, #0 - adds r2, #0x42 - movs r1, #0 - strb r1, [r2] - bl sub_0803CCD4 - pop {pc} - - thumb_func_start sub_0803CCFC -sub_0803CCFC: @ 0x0803CCFC - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - bne _0803CD16 - ldrb r0, [r4, #0xd] - cmp r0, #2 - bne _0803CD26 - adds r0, r4, #0 - bl sub_0803CE3C - b _0803CD26 -_0803CD16: - ldr r0, _0803CD28 @ =gUnk_080D043C - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0803CD26: - pop {r4, pc} - .align 2, 0 -_0803CD28: .4byte gUnk_080D043C - - thumb_func_start sub_0803CD2C -sub_0803CD2C: @ 0x0803CD2C - movs r1, #1 - strb r1, [r0, #0xd] - movs r1, #0x3c - strb r1, [r0, #0x1d] - bx lr - .align 2, 0 - - thumb_func_start sub_0803CD38 -sub_0803CD38: @ 0x0803CD38 - push {lr} - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_0803CD40 -sub_0803CD40: @ 0x0803CD40 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _0803CD66 - movs r0, #2 - rsbs r0, r0, #0 - bl ModHealth - ldr r0, _0803CD68 @ =gLinkEntity - movs r1, #0x7a - bl sub_0800449C - bl sub_08079D84 - adds r0, r4, #0 - bl sub_0803CE3C -_0803CD66: - pop {r4, pc} - .align 2, 0 -_0803CD68: .4byte gLinkEntity - - thumb_func_start sub_0803CD6C -sub_0803CD6C: @ 0x0803CD6C - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0803CDA4 @ =0x0000FFFE - strh r0, [r4, #0x36] - ldrb r0, [r4, #0xa] - bl sub_0804B128 - str r0, [r4, #0x54] - str r0, [r4, #0x50] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x78 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x7a - strh r0, [r1] - adds r0, r4, #0 - movs r1, #4 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0803CE14 - pop {r4, pc} - .align 2, 0 -_0803CDA4: .4byte 0x0000FFFE - - thumb_func_start sub_0803CDA8 -sub_0803CDA8: @ 0x0803CDA8 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803CDC0 - adds r0, r4, #0 - bl sub_0806F69C -_0803CDC0: - adds r1, r4, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803CDD6 - adds r0, r4, #0 - bl sub_0803CE14 -_0803CDD6: - pop {r4, pc} - - thumb_func_start sub_0803CDD8 -sub_0803CDD8: @ 0x0803CDD8 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x1e - lsrs r0, r0, #0x1e - movs r2, #1 - eors r0, r2 - movs r5, #4 - rsbs r5, r5, #0 - adds r3, r5, #0 - ands r3, r1 - orrs r3, r0 - strb r3, [r4, #0x18] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803CE10 - movs r0, #1 - strb r2, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r2, #0x80 - orrs r1, r2 - strb r1, [r4, #0x10] - ands r3, r5 - orrs r3, r0 - strb r3, [r4, #0x18] -_0803CE10: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803CE14 -sub_0803CE14: @ 0x0803CE14 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x54 - adds r2, r4, #0 - adds r2, #0x74 - bl sub_080A2CC0 - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803CE38 - lsrs r1, r1, #3 - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0803CE38: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803CE3C -sub_0803CE3C: @ 0x0803CE3C - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r2, r4, #0 - adds r2, #0x3a - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x78 - ldrh r0, [r0] - strh r0, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x7a - ldrh r0, [r0] - strh r0, [r4, #0x32] - ldr r0, [r4, #0x50] - str r0, [r4, #0x54] - adds r0, r4, #0 - bl sub_0803CE14 - pop {r4, pc} diff --git a/asm/wheaton.s b/asm/wheaton.s deleted file mode 100644 index b19406ba..00000000 --- a/asm/wheaton.s +++ /dev/null @@ -1,38 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Wheaton -Wheaton: @ 0x08062E20 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08062E50 - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - adds r1, r4, #0 - bl ResolveEntityOnTop - ldr r0, _08062E5C @ =gUnk_0810C3C0 - str r0, [r4, #0x48] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xfe - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807DD64 -_08062E50: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - pop {r4, pc} - .align 2, 0 -_08062E5C: .4byte gUnk_0810C3C0 diff --git a/include/entity.h b/include/entity.h index d9a60d30..c912c917 100644 --- a/include/entity.h +++ b/include/entity.h @@ -80,7 +80,8 @@ typedef struct Entity { u8 b1 : 2; u8 b2 : 2; } PACKED spriteOrientation; - u8 filler[2]; + u8 filler[1]; + u8 field_0x1d; u8 frameIndex; u8 lastFrameIndex; s32 field_0x20; @@ -140,9 +141,10 @@ typedef struct Entity { u8 field_0x6c; u8 field_0x6d; u8 filler4[6]; - u32* heldObjectPtr; - u16 field_0x78; - u16 itemCooldown; + u16 field_0x74; + u16 field_0x76; + union SplitHWord field_0x78; + u16 field_0x7a; union SplitWord field_0x7c; u16 field_0x80; u16 field_0x82; diff --git a/include/trig.h b/include/trig.h new file mode 100644 index 00000000..0e6e44a9 --- /dev/null +++ b/include/trig.h @@ -0,0 +1,7 @@ +#ifndef TRIG_H +#define TRIG_H + +extern const s16 gSineTable[]; +extern const s16 gCosineTable[]; + +#endif diff --git a/linker.ld b/linker.ld index 15355c11..3576b03d 100644 --- a/linker.ld +++ b/linker.ld @@ -394,8 +394,8 @@ SECTIONS { asm/takkuri.o(.text); src/bowMoblin.o(.text); asm/bowMoblin.o(.text); - asm/lakitu.o(.text); - asm/lakituCloud.o(.text); + src/lakitu.o(.text); + src/lakituCloud.o(.text); asm/enemy49.o(.text); asm/vaatiRebornEnemy.o(.text); asm/vaatiProjectile.o(.text); @@ -536,7 +536,7 @@ SECTIONS { asm/npc9.o(.text); src/stamp.o(.text); asm/marcy.o(.text); - asm/wheaton.o(.text); + src/wheaton.o(.text); asm/pita.o(.text); asm/minishEzlo.o(.text); src/mailbox.o(.text); diff --git a/src/bladeTrap.c b/src/bladeTrap.c index 58cff0c1..89d1663a 100644 --- a/src/bladeTrap.c +++ b/src/bladeTrap.c @@ -14,16 +14,19 @@ void BladeTrap(Entity* ent) { ent->action = 1; pEVar2 = sub_0804B128((u8)(ent->entityType).form); ent->attachedEntity = pEVar2; - sub_080A2CC0((EntityData*)ent, &ent->attachedEntity, &ent->heldObjectPtr); + sub_080A2CC0((EntityData*)ent, &ent->attachedEntity, &ent->field_0x74); } if ((ent->direction & 0x80) == 0) { sub_0806F69C(ent); } - puVar3 = (u16*)&(ent->heldObjectPtr); + + + + puVar3 = &(ent->field_0x74); uVar1 = *puVar3; *puVar3 = uVar1 - 1; - if ((u16)(*puVar3) == 0) { - if ((ent->direction & 0x80) == 0) { + if ((*puVar3) == 0) { + if ((u16)(ent->direction & 0x80) == 0) { sub_08004488(0x74); } sub_080A2CC0((EntityData*)ent, &ent->attachedEntity, puVar3); diff --git a/src/keese.c b/src/keese.c index b9914c2f..a000ab80 100644 --- a/src/keese.c +++ b/src/keese.c @@ -4,9 +4,9 @@ #include "link.h" extern void sub_0804AA30(Entity*, void *); -extern u32 sub_0806F520(void); +extern u32 sub_0806F520(Entity*); extern void sub_0806F4E8(Entity*); -extern u32 sub_0806F3E4(void); +extern u32 sub_0806F3E4(Entity*); extern void sub_0804A7D4(Entity*); extern void sub_0804A720(Entity*); extern u32 Random(); @@ -45,7 +45,7 @@ void sub_08021d98(Entity *this) void sub_08021DA8(Entity *this) { - if (sub_0806F520()) { + if (sub_0806F520(this)) { gUnk_080CB6C4[this->previousActionFlag](this); } } @@ -62,7 +62,7 @@ void sub_08021DD4(Entity *this) void sub_08021DDC(Entity *this) { - if (sub_0806F3E4()) { + if (sub_0806F3E4(this)) { sub_0804A7D4(this); } } @@ -85,11 +85,11 @@ void sub_08021DF0(Entity *this) void sub_08021E4C(Entity *this) { - if (this->field_0x78 != 0) { - this->field_0x78--; + if (this->field_0x78.HWORD != 0) { + this->field_0x78.HWORD--; } - if (this->itemCooldown != 0) { - (this->itemCooldown)--; + if (this->field_0x7a != 0) { + (this->field_0x7a)--; } GetNextFrame(this); if ((this->frames.b.f3) != 0) { @@ -128,7 +128,7 @@ void sub_08021EF0(Entity *this) u32 uVar1; this->action = 1; - this->field_0x78 = gUnk_080CB6D6[Random() & 0xf]; - this->itemCooldown = 0x3c; + this->field_0x78.HWORD = gUnk_080CB6D6[Random() & 0xf]; + this->field_0x7a = 0x3c; InitializeAnimation(this, 0); } diff --git a/src/lakitu.c b/src/lakitu.c new file mode 100644 index 00000000..9c7c41d6 --- /dev/null +++ b/src/lakitu.c @@ -0,0 +1,429 @@ +#include "global.h" +#include "entity.h" +#include "trig.h" +#include "random.h" +#include "link.h" + +// Lakitu +extern void EnemyFunctionHandler(Entity *, void (*const funcs[])(Entity*)); +extern void SetChildOffset(Entity *, u32, u32, u32); + +// sub_0803C758 +extern void sub_0803CAD0(Entity *); + +// sub_0803C784 +extern void sub_0803CBAC(Entity *); // Also used in sub_0803C86C +extern Entity *CreateFx(Entity*, u32, u32); +extern void sub_0804A9FC(Entity *, u32); +extern void sub_0804AA30(Entity *, void (*const funcs[])(Entity *)); + +// sub_0803C820 +extern u32 sub_0806F520(Entity *); + +// sub_0803C850 +extern void sub_0806F4E8(Entity *); + +// sub_0803C87C +extern Entity *sub_0804A98C(Entity *, u32, u32); +extern void sub_0804A720(Entity *); + +// sub_0803C8BC and sub_0803C918 +extern void sub_0803CA84(Entity *, u32); +extern bool32 sub_0803CA4C(Entity *); + +// Many functions +extern void UpdateAnimationSingleFrame(Entity *); +extern void InitAnimationForceUpdate(Entity *, u32); + +// sub_0803C918 +extern u32 sub_0803CB04(Entity *); + +// sub_0803C97C +extern void sub_0803CB64(Entity *); + +// sub_0803C9D4 and sub_0803CB04 +extern void sub_0803CB34(Entity *); + +// sub_0803CA0C +extern u32 sub_08003FC4(Entity *, u32); +extern void sub_0803CC08(Entity *this); + +// sub_0803CA4C +extern u32 sub_0806FCB8(Entity *, u32, u32, u32); +extern u32 sub_080041A0(Entity *, Entity *, u32, u32); + +// sub_0803CA84 +extern u32 sub_080045C4(Entity *, Entity *); + +// sub_0803CAD0 +extern u8 sub_080045D4(s16, s16, u16, u16); +extern void sub_080AEFE0(Entity *); + +// sub_0803CB64 +extern void PositionRelative(Entity *, Entity *, u32, u32); +extern void sub_08004488(u32); + +typedef struct { + s8 x; + s8 y; +} PACKED OffsetCoords; + +// sub_0803CC08 +extern void DeleteEntity(Entity *); + +// Variables +extern void (*const gUnk_080D0110[])(Entity *); +extern void (*const gUnk_080D0128[])(Entity *); +extern void (*const gUnk_080D0148[])(Entity *); +extern const OffsetCoords gUnk_080D0154[]; + +void Lakitu(Entity *this) { + EnemyFunctionHandler(this, gUnk_080D0110); + + SetChildOffset(this, 0, 1, -16); +} + +void sub_0803C758(Entity *this) { + if (this->action != 0 && this->action != 7) { + sub_0803CAD0(this); + } + + gUnk_080D0128[this->action](this); +} + +void sub_0803C784(Entity *this) { + if ((this->bitfield & 0x7f) == 0x1d) { + this->field_0x20 = 0x20000; + + sub_0803CBAC(this); + } + else { + if (this->damageType == 0x43) { + Entity *sound = CreateFx(this, 2, 0); + + if (sound != 0) { + u32 angle = (this->field_0x3e ^ 0x10) << 3; + s32 sine; + + sine = gSineTable[angle]; + if (sine < 0) { + sine += 0x1f; + } + + sound->x.HALF.HI += sine >> 5; + + sine = gSineTable[angle + 0x40]; + if (sine < 0) { + sine += 0x1f; + } + + sound->y.HALF.HI -= sine >> 5; + } + } + } + + if (this->field_0x43) { + sub_0804A9FC(this, 0x1c); + } + + sub_0804AA30(this, gUnk_080D0110); +} + +void sub_0803C820(Entity *this) { + if (sub_0806F520(this)) { + gUnk_080D0148[this->previousActionFlag](this); + } +} + +void sub_0803C844(Entity *this) { + this->previousActionFlag = 1; + this->field_0x1d = 0x3c; +} + +void sub_0803C850(Entity *this) { + Entity *cloud = this->attachedEntity; + if (cloud != 0) { + cloud->spriteOffsetX = this->spriteOffsetX; + } + + sub_0806F4E8(this); +} + +void sub_0803C86C(Entity *this) { + sub_0803CBAC(this); + this->attachedEntity = 0; +} + +void sub_0803C87C(Entity *this) { + Entity *cloud = sub_0804A98C(this, 17, 0); + if (cloud == 0) { + return; + } + + cloud->parent = this; + this->attachedEntity = cloud; + + sub_0804A720(this); + + this->action = 1; + + this->height.HALF.HI = -2; + + this->spriteOffsetY = 0xff; + + this->field_0x74 = this->x.HALF.HI; + this->field_0x76 = this->y.HALF.HI; +} + +void sub_0803C8BC(Entity *this) { + sub_0803CA84(this, 0); + + if (sub_0803CA4C(this)) { + this->action = 2; + this->spriteSettings.b.ss0 = 1; + } +} + +void sub_0803C8E4(Entity *this) { + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3) { + this->action = 3; + this->actionDelay = 0x3c; + + this->damageType = 0x42; + + InitAnimationForceUpdate(this, this->animationState + 4); + } +} + +void sub_0803C918(Entity *this) { + if (sub_0803CB04(this) != 0) { + return; + } + + if (sub_0803CA4C(this) == 0) { + this->action = 4; + + this->damageType = 0x43; + InitAnimationForceUpdate(this, this->animationState + 0xc); + } + else { + sub_0803CA84(this, 4); + } +} + +void sub_0803C950(Entity *this) { + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3 != 0) { + this->action = 1; + this->spriteSettings.b.ss0 = 0; + + InitAnimationForceUpdate(this, this->animationState); + } +} + +void sub_0803C97C(Entity *this) { + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3 == 0) { + return; + } + + sub_0803CB64(this); + this->action = 6; + this->damageType = 0x42; + + + if ((Random() & 1) && this->field_0x78.HALF.HI == 0) { + this->actionDelay = 0xf; + this->field_0x78.HALF.HI = 1; + } + else { + this->actionDelay = 0x1e; + this->field_0x78.HALF.HI = 0; + + InitAnimationForceUpdate(this->attachedEntity, this->animationState); + } +} + +void sub_0803C9D4(Entity *this) { + this->actionDelay--; + + if (this->actionDelay != 0) { + return; + } + + if (this->field_0x78.HALF.HI == 1) { + sub_0803CB34(this); + } + else { + this->action = 3; + this->actionDelay = 0xb4; + + InitAnimationForceUpdate(this, this->animationState + 4); + } +} + +void sub_0803CA0C(Entity *this) { + if (sub_08003FC4(this, 0x1800) == 0 && this->animIndex <= 19) { + InitAnimationForceUpdate(this, this->animationState + 20); + + this->ticks.b1 = 0; + } + + UpdateAnimationSingleFrame(this); + sub_0803CC08(this); +} + +bool32 sub_0803CA4C(Entity *this) { + if (sub_0806FCB8(this, gLinkEntity.x.HALF.HI, gLinkEntity.y.HALF.HI, 0x28) == 0) { + if (sub_080041A0(this, &gLinkEntity, 0x70, 0x50)) { + return 1; + } + } + + return 0; +} + +void sub_0803CA84(Entity *this, u32 unkParameter) { + u32 altAnimState = sub_080045C4(this, &gLinkEntity); + + if (((altAnimState - 3) & 7) > 2 || ((this->animationState - (altAnimState >> 3)) & 3) > 1) { + u32 intermediate = (altAnimState + 4) & 0x18; + altAnimState = intermediate >> 3; + + if (altAnimState != this->animationState) { + this->animationState = altAnimState; + + InitAnimationForceUpdate(this, altAnimState + unkParameter); + InitAnimationForceUpdate(this->attachedEntity, altAnimState); + } + } +} + +void sub_0803CAD0(Entity *this) { + if (sub_0806FCB8(this, this->field_0x74, this->field_0x76, 1) == 0) { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74, this->field_0x76); + + sub_080AEFE0(this); + } +} + +bool32 sub_0803CB04(Entity *this) { + bool32 returnValue; + u8 delay; + + delay = --this->actionDelay; + if (delay != 0) { + returnValue = 0; + } + else { + sub_0803CB34(this); + this->field_0x78.HALF.HI = delay; + + InitAnimationForceUpdate(this->attachedEntity, this->animationState + 4); + returnValue = 1; + } + + return returnValue; +} + +void sub_0803CB34(Entity *this) { + this->action = 5; + this->damageType = 0xa6; + + this->field_0x78.HALF.LO = sub_080045C4(this, &gLinkEntity); + + InitAnimationForceUpdate(this, this->animationState + 8); +} + +void sub_0803CB64(Entity *this) { + Entity *cloud; + const OffsetCoords *offset; + + cloud = sub_0804A98C(this, 18, 0); + + if (cloud == 0) { + return; + } + + offset = &gUnk_080D0154[this->animationState]; + + cloud->direction = this->field_0x78.HALF.LO; + + PositionRelative(this, cloud, offset->x << 16, offset->y << 16); + + sub_08004488(0x193); +} + +void sub_0803CBAC(Entity *this) { + Entity *cloud; + + cloud = this->attachedEntity; + if (cloud != 0) { + cloud->flags |= 0x80; + cloud->damageType = 0x43; + } + + this->action = 7; + this->spriteSettings.b.ss0 = 1; + + this->ticks.b1 = 1; + + this->flags2 &= 0x7b; + + this->damageType = 0x42; + + InitAnimationForceUpdate(this, this->animationState + 16); +} + +void sub_0803CC08(Entity *this) { + Entity *cloud; + Entity *sound; + + cloud = this->attachedEntity; + if (cloud == 0) { + return; + } + + if ((u32)(cloud->height.HALF.HI - this->height.HALF.HI) > 2) { + return; + } + + if (this->field_0x20 >= 0) { + return; + } + + if (!sub_0806FCB8(this, cloud->x.HALF.HI, cloud->y.HALF.HI, 6)) { + return; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI += 6; + sound->y.HALF.HI += 6; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI -= 6; + sound->y.HALF.HI += 6; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI += 6; + sound->y.HALF.HI -= 6; + } + + sound = CreateFx(this, 2, 0); + if (sound != 0) { + sound->x.HALF.HI -= 6; + sound->y.HALF.HI -= 6; + } + + this->attachedEntity = 0; + DeleteEntity(cloud); +} \ No newline at end of file diff --git a/src/lakituCloud.c b/src/lakituCloud.c new file mode 100644 index 00000000..9932b662 --- /dev/null +++ b/src/lakituCloud.c @@ -0,0 +1,155 @@ +#include "global.h" +#include "entity.h" + +extern Entity gLinkEntity; + +extern void UpdateAnimationSingleFrame(Entity *); +extern void InitAnimationForceUpdate(Entity *, s32); +extern u32 GetNextFunction(Entity *); +extern void ModHealth(s32); +extern void CreateFx(Entity *, u16, u16); + +extern void (* const gUnk_080D0418[])(Entity *); +extern void (* const gUnk_080D0430[])(Entity *); +extern void (* const gUnk_080D043C[])(Entity *); + +extern bool32 sub_0806F3E4(Entity *); +extern bool32 sub_0806F520(Entity *); + +extern void sub_0800449C(Entity *, u32); +extern void sub_0803CE14(Entity *); +extern void sub_0803CE3C(Entity *); +extern Entity *sub_0804B128(u8); +extern void sub_0806F4E8(Entity *); +extern void sub_0806F69C(Entity *); +extern void sub_08079D84(void); +extern void sub_080A2CC0(Entity *, Entity **, u16 *); + +void LakituCloud(Entity *this) { + gUnk_080D0418[GetNextFunction(this)](this); +} + +void sub_0803CCD4(Entity *this) { + gUnk_080D0430[this->action](this); +} + +void sub_0803CCEC(Entity *this) { + this->field_0x42 = 0; + sub_0803CCD4(this); +} + +void sub_0803CCFC(Entity *this) { + if (sub_0806F520(this) == 0) { + if (this->previousActionFlag == 2) { + sub_0803CE3C(this); + } + } + else { + gUnk_080D043C[this->previousActionFlag](this); + } +} + +void sub_0803CD2C(Entity *this) { + this->previousActionFlag = 1; + this->field_0x1d = 0x3c; +} + +void sub_0803CD38(Entity *this) { + sub_0806F4E8(this); +} + +void sub_0803CD40(Entity *this) { + if (!sub_0806F3E4(this)) { + return; + } + + ModHealth(-2); + + sub_0800449C(&gLinkEntity, 122); + sub_08079D84(); + + sub_0803CE3C(this); +} + +void sub_0803CD6C(Entity *this) { + Entity *lakitu; + + this->action = 1; + this->height.HALF.HI = -2; + + // Set parent to lakitu + lakitu = sub_0804B128(this->entityType.form); + this->attachedEntity = lakitu; + this->parent = lakitu; + + this->field_0x78.HWORD = this->x.HALF.HI; + this->field_0x7a = this->y.HALF.HI; + + InitAnimationForceUpdate(this, 4); + + sub_0803CE14(this); +} + +void sub_0803CDA8(Entity *this) { + UpdateAnimationSingleFrame(this); + + if ((this->direction & 0x80) == 0) { + sub_0806F69C(this); + } + + if (--this->field_0x74 << 0x10 == 0) { + sub_0803CE14(this); + } +} + +void sub_0803CDD8(Entity *this) { + u8 one; + u8 ss0; + + ss0 = this->spriteSettings.b.ss0; + one = 1; + this->spriteSettings.b.ss0 = ss0 ^ one; + + this->actionDelay--; + + if (this->actionDelay == 0) { + this->action = 1; + + this->flags |= 0x80; + + this->spriteSettings.b.ss0 = one; + } +} + +void sub_0803CE14(Entity *this) { + u8 direction; + + sub_080A2CC0(this, &this->attachedEntity, &this->field_0x74); + + direction = this->direction; + if (direction & 0x80) { + return; + } + + direction = direction / 8 + 4; + + InitAnimationForceUpdate(this, direction); +} + +void sub_0803CE3C(Entity *this) { + CreateFx(this, 2, 0); + + this->action = 2; + this->actionDelay = 60; + + this->flags &= 0x7f; + + this->field_0x3a &= 0xfb; + + this->x.HALF.HI = this->field_0x78.HWORD; + this->y.HALF.HI = this->field_0x7a; + + this->attachedEntity = this->parent; + + sub_0803CE14(this); +} diff --git a/src/mask.c b/src/mask.c index d33f3481..bb867761 100644 --- a/src/mask.c +++ b/src/mask.c @@ -60,7 +60,7 @@ void sub_080929A4(Entity *this) { this->action = 1; this->field_0x20 = 0x18000; - this->field_0x78 = ((Random() & 7) << 10) | 0x2000; + this->field_0x78.HWORD = ((Random() & 7) << 10) | 0x2000; this->field_0xf = this->actionDelay >> 1; this->actionDelay = 0; @@ -70,7 +70,7 @@ void sub_080929A4(Entity *this) { this->field_0x7c.HALF.HI = COORD_TO_TILE(this); this->field_0x7c.HALF.LO = sub_080001DA(this->field_0x7c.HALF.HI, 1); - this->itemCooldown = sub_080002E0(this->field_0x7c.HALF.HI, 1); + this->field_0x7a = sub_080002E0(this->field_0x7c.HALF.HI, 1); SetTile(0x4022, this->field_0x7c.HALF.HI, 1); } @@ -98,7 +98,7 @@ void sub_08092A94(Entity *this) { // Presumably, make the mask fall SetTile((u16)this->field_0x7c.HALF.LO, this->field_0x7c.HALF.HI, 1); - sub_08000148(this->itemCooldown, this->field_0x7c.HALF.HI, 1); + sub_08000148(this->field_0x7a, this->field_0x7c.HALF.HI, 1); this->action = 2; @@ -129,7 +129,7 @@ void sub_08092B0C(Entity *this) { sub_0805457C(this, 3); } else { - sub_080044EC(this, this->field_0x78); + sub_080044EC(this, this->field_0x78.HWORD); if (this->height.HALF.HI == 0) { this->actionDelay++; diff --git a/src/ocarina.c b/src/ocarina.c index 88fab47b..b4eddddc 100644 --- a/src/ocarina.c +++ b/src/ocarina.c @@ -24,7 +24,7 @@ void Ocarina(ItemBehavior* pItemBeh, u32 inputFlags) // u32 *ocarinaStates = &gOcarinaStates; //_call_via_r2(pItemBeh, inputFlags,(ocarinaStates)[pItemBeh->stateID]); gOcarinaStates[pItemBeh->stateID](pItemBeh, inputFlags); - gLinkEntity.itemCooldown = gLinkEntity.itemCooldown + 1; + gLinkEntity.field_0x7a = gLinkEntity.field_0x7a + 1; } void OcarinaUse(ItemBehavior* itemBeh, s32 inputFlags) { @@ -40,7 +40,7 @@ void OcarinaUse(ItemBehavior* itemBeh, s32 inputFlags) { gLinkEntity.spriteSettings.raw &= var; gLinkEntity.flags &= 127; - gLinkEntity.itemCooldown = 2; + gLinkEntity.field_0x7a = 2; gLinkState.flags.all |= 0x10000000; gLinkState.filler8[0] = 255; gUnk_02034490 = 1; diff --git a/src/wheaton.c b/src/wheaton.c new file mode 100644 index 00000000..06285482 --- /dev/null +++ b/src/wheaton.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "entity.h" + +extern void sub_0805E3A0(Entity *, u32); +extern void ResolveEntityOnTop(Entity *, Entity *); +extern BoundingBox gUnk_0810C3C0; +extern void sub_0807DD64(Entity *); +extern void sub_0807DD94(Entity *, u32); + +void Wheaton(Entity *this) { + if (this->action == 0) { + this->action++; + + sub_0805E3A0(this, 2); + + ResolveEntityOnTop(this, this); + + this->boundingBox = &gUnk_0810C3C0; + + this->spriteOffsetY = 0xfe; + + sub_0807DD64(this); + } + + sub_0807DD94(this, 0); +} \ No newline at end of file diff --git a/src/zelda.c b/src/zelda.c index 830bbf3e..10cc79cc 100644 --- a/src/zelda.c +++ b/src/zelda.c @@ -94,7 +94,7 @@ void sub_08066D94(Entity* ent) { npc->flags |= 0x20; npc->animationState = sub_0806EDC4(ent); roomID = gRoomControls.roomID; - *(u16*)&npc->heldObjectPtr = roomID; + npc->field_0x74 = roomID; CopyPosition(ent, npc); } DeleteThisEntity();