diff --git a/asm/beedle.s b/asm/beedle.s index ce6dcb63..7881f69a 100644 --- a/asm/beedle.s +++ b/asm/beedle.s @@ -147,7 +147,7 @@ sub_08063390: @ 0x08063390 movs r0, #1 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitializeAnimation diff --git a/asm/brocco.s b/asm/brocco.s index 29a04a7c..34dc7917 100644 --- a/asm/brocco.s +++ b/asm/brocco.s @@ -109,7 +109,7 @@ _080635D0: movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r1, #4 adds r0, r4, #0 diff --git a/asm/businessScrub.s b/asm/businessScrub.s index 097ed9f3..1a681b03 100644 --- a/asm/businessScrub.s +++ b/asm/businessScrub.s @@ -805,7 +805,7 @@ _08028F2C: adds r0, r5, #0 bl sub_0804AA1C adds r0, r5, #0 - bl sub_0806EDC4 + bl GetAnimationState lsls r0, r0, #3 strb r0, [r5, #0x15] adds r0, r5, #0 diff --git a/asm/code_0806ED78.s b/asm/code_0806ED78.s index 6b986255..736b901a 100644 --- a/asm/code_0806ED78.s +++ b/asm/code_0806ED78.s @@ -40,7 +40,7 @@ sub_0806ED9C: @ 0x0806ED9C cmp r0, #0 beq _0806EDBC adds r0, r5, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r6, r0, #0 _0806EDBC: adds r0, r6, #0 @@ -48,8 +48,8 @@ _0806EDBC: .align 2, 0 _0806EDC0: .4byte gLinkEntity - thumb_func_start sub_0806EDC4 -sub_0806EDC4: @ 0x0806EDC4 + thumb_func_start GetAnimationState +GetAnimationState: @ 0x0806EDC4 push {lr} ldr r1, _0806EDD4 @ =gLinkEntity bl GetFacingDirection diff --git a/asm/dog.s b/asm/dog.s index 17558ef6..7afc6af2 100644 --- a/asm/dog.s +++ b/asm/dog.s @@ -171,7 +171,7 @@ sub_08069C40: @ 0x08069C40 _08069C68: .4byte gLinkState _08069C6C: adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState strb r0, [r4, #0x14] adds r0, r4, #0 bl sub_08069D00 @@ -426,7 +426,7 @@ sub_08069E44: @ 0x08069E44 sub_08069E50: @ 0x08069E50 push {r4, r5, r6, r7, lr} adds r4, r0, #0 - bl sub_0806EDC4 + bl GetAnimationState strb r0, [r4, #0x14] adds r5, r4, #0 adds r5, #0x6b diff --git a/asm/fan.s b/asm/fan.s index 0ccbd9d2..a3db90a6 100644 --- a/asm/fan.s +++ b/asm/fan.s @@ -6,157 +6,6 @@ .text - thumb_func_start sub_0809ED30 -sub_0809ED30: @ 0x0809ED30 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - movs r1, #2 - eors r0, r1 - lsls r0, r0, #3 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_0809EE34 - adds r0, r4, #0 - bl sub_0809EFB0 - ldrb r1, [r4, #0xa] - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_0809ED54 -sub_0809ED54: @ 0x0809ED54 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x84 - ldrh r0, [r1] - cmp r0, #0 - beq _0809ED6A - bl CheckFlags - cmp r0, #0 - beq _0809ED86 -_0809ED6A: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0809ED80 - adds r1, r4, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0809ED86 -_0809ED80: - adds r0, r4, #0 - bl sub_0809EE08 -_0809ED86: - pop {r4, pc} - - thumb_func_start sub_0809ED88 -sub_0809ED88: @ 0x0809ED88 - push {r4, lr} - adds r4, r0, #0 - bl sub_0809F08C - adds r0, r4, #0 - bl sub_0809EE44 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r2, [r0] - cmp r2, #0 - beq _0809EDC6 - adds r1, r4, #0 - adds r1, #0x84 - ldrh r0, [r1] - cmp r0, r2 - bne _0809EDB4 - bl CheckFlags - cmp r0, #0 - bne _0809EDE2 - b _0809EDBE -_0809EDB4: - ldrh r0, [r1] - bl CheckFlags - cmp r0, #0 - beq _0809EDE2 -_0809EDBE: - adds r0, r4, #0 - bl sub_0809EE24 - b _0809EDE2 -_0809EDC6: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0809EDE2 - adds r1, r4, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0809EDE2 - adds r0, r4, #0 - bl sub_0809EE24 -_0809EDE2: - pop {r4, pc} - - thumb_func_start sub_0809EDE4 -sub_0809EDE4: @ 0x0809EDE4 - push {r4, lr} - adds r4, r0, #0 - bl sub_0809F08C - adds r0, r4, #0 - bl sub_0809EE44 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809EE06 - adds r0, r4, #0 - bl sub_0809EE34 -_0809EE06: - pop {r4, pc} - - thumb_func_start sub_0809EE08 -sub_0809EE08: @ 0x0809EE08 - push {lr} - movs r1, #2 - strb r1, [r0, #0xc] - adds r1, r0, #0 - adds r1, #0x7f - ldrb r1, [r1] - lsls r1, r1, #2 - adds r2, r0, #0 - adds r2, #0x74 - strh r1, [r2] - ldrb r1, [r0, #0xa] - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0809EE24 -sub_0809EE24: @ 0x0809EE24 - push {lr} - movs r1, #3 - strb r1, [r0, #0xc] - ldrb r1, [r0, #0xa] - adds r1, #4 - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0809EE34 -sub_0809EE34: @ 0x0809EE34 - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r1, [r0, #0xe] - lsls r1, r1, #2 - adds r0, #0x74 - strh r1, [r0] - bx lr - .align 2, 0 - thumb_func_start sub_0809EE44 sub_0809EE44: @ 0x0809EE44 push {r4, r5, r6, r7, lr} diff --git a/asm/kid.s b/asm/kid.s index 8463cba2..3aa4ff7d 100644 --- a/asm/kid.s +++ b/asm/kid.s @@ -76,7 +76,7 @@ sub_08062130: @ 0x08062130 movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitAnimationForceUpdate diff --git a/asm/mama.s b/asm/mama.s index c1db8a76..e23cb932 100644 --- a/asm/mama.s +++ b/asm/mama.s @@ -154,7 +154,7 @@ sub_0806C4A8: @ 0x0806C4A8 cmp r0, #0 beq _0806C4D8 adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 cmp r1, #0 bge _0806C4CC diff --git a/asm/manager1.s b/asm/manager1.s index 500a5767..435e67ad 100644 --- a/asm/manager1.s +++ b/asm/manager1.s @@ -6,140 +6,6 @@ .text - thumb_func_start sub_08057064 -sub_08057064: @ 0x08057064 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _080570AC @ =gUnk_08107C5C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r1, _080570B0 @ =gUnk_08107C48 - adds r5, r4, #0 - adds r5, #0x21 - ldrb r0, [r5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r1, _080570B4 @ =gUnk_08107C40 - ldrb r0, [r5] - adds r0, r0, r1 - ldrb r1, [r0] - cmp r1, #0 - beq _080570AA - adds r2, r4, #0 - adds r2, #0x20 - ldrb r0, [r2] - cmp r0, r1 - beq _080570AA - strb r1, [r2] - adds r0, r1, #0 - bl sub_0801D7EC -_080570AA: - pop {r4, r5, pc} - .align 2, 0 -_080570AC: .4byte gUnk_08107C5C -_080570B0: .4byte gUnk_08107C48 -_080570B4: .4byte gUnk_08107C40 - - thumb_func_start sub_080570B8 -sub_080570B8: @ 0x080570B8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x20 - ldrb r0, [r0] - bl sub_0801D7EC - movs r0, #0 - str r0, [r4, #0x34] - adds r1, r4, #0 - adds r1, #0x21 - ldrb r0, [r1] - cmp r0, #3 - bne _080570E0 - ldr r1, _080570DC @ =gScreen - movs r0, #1 - strh r0, [r1, #0x32] - b _080570F0 - .align 2, 0 -_080570DC: .4byte gScreen -_080570E0: - ldr r0, _080570F4 @ =gUnk_08107C48 - ldrb r1, [r1] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_080570F0: - pop {r4, pc} - .align 2, 0 -_080570F4: .4byte gUnk_08107C48 - - thumb_func_start sub_080570F8 -sub_080570F8: @ 0x080570F8 - push {lr} - ldr r1, _08057110 @ =gScreen - ldrh r2, [r1] - ldr r0, _08057114 @ =0x0000F7FF - ands r0, r2 - movs r2, #0 - strh r0, [r1] - adds r1, #0x66 - strh r2, [r1] - bl sub_08056250 - pop {pc} - .align 2, 0 -_08057110: .4byte gScreen -_08057114: .4byte 0x0000F7FF - - thumb_func_start sub_08057118 -sub_08057118: @ 0x08057118 - push {r4, lr} - adds r3, r0, #0 - movs r1, #0 - strb r1, [r3, #0xe] - adds r0, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - movs r0, #1 - strb r0, [r3, #0xc] - ldr r1, _08057160 @ =gScreen - ldr r0, _08057164 @ =0x00001E04 - strh r0, [r1, #0x2c] - ldrh r0, [r1] - movs r4, #0x80 - lsls r4, r4, #4 - adds r2, r4, #0 - orrs r0, r2 - strh r0, [r1] - adds r2, r1, #0 - adds r2, #0x66 - ldr r0, _08057168 @ =0x00003648 - strh r0, [r2] - adds r1, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - ldr r1, _0805716C @ =sub_080570B8 - ldr r2, _08057170 @ =sub_080570F8 - adds r0, r3, #0 - bl sub_08052D74 - pop {r4, pc} - .align 2, 0 -_08057160: .4byte gScreen -_08057164: .4byte 0x00001E04 -_08057168: .4byte 0x00003648 -_0805716C: .4byte sub_080570B8 -_08057170: .4byte sub_080570F8 - thumb_func_start sub_08057174 sub_08057174: @ 0x08057174 push {r4, r5, r6, r7, lr} diff --git a/asm/manager2.s b/asm/manager2.s index 0fc1f04d..71e90095 100644 --- a/asm/manager2.s +++ b/asm/manager2.s @@ -6,30 +6,6 @@ .text - thumb_func_start sub_0805751C -sub_0805751C: @ 0x0805751C - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xc] - cmp r1, #0 - bne _0805753A - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _08057544 @ =gScreen - strh r1, [r0, #0x32] - strh r1, [r0, #0x1a] - ldr r1, _08057548 @ =sub_080576A0 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_0805753A: - adds r0, r4, #0 - bl sub_0805754C - pop {r4, pc} - .align 2, 0 -_08057544: .4byte gScreen -_08057548: .4byte sub_080576A0 - thumb_func_start sub_0805754C sub_0805754C: @ 0x0805754C push {r4, r5, r6, lr} diff --git a/asm/non_matching/smith/smith.inc b/asm/non_matching/smith/smith.inc new file mode 100644 index 00000000..27a834f7 --- /dev/null +++ b/asm/non_matching/smith/smith.inc @@ -0,0 +1,119 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldrb r1, [r4, #0x10] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08066028 + adds r2, r4, #0 + adds r2, #0x39 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r6, r4, #0 + adds r6, #0x58 + cmp r0, #2 + bne _0806600C + movs r0, #0 + movs r1, #4 + strb r1, [r4, #0xc] + strb r0, [r2] + ldrb r0, [r6] + movs r5, #0 + cmp r0, #0xc + bne _08065FF0 + movs r5, #8 +_08065FF0: + ldr r1, _08066020 @ =gLinkEntity + adds r0, r4, #0 + bl GetFacingDirection + bl sub_0806F5A4 + adds r5, r5, r0 + adds r0, r4, #0 + adds r1, r5, #0 + bl InitAnimationForceUpdate + adds r0, r4, #0 + bl sub_0806F118 +_0806600C: + ldr r0, _08066024 @ =gUnk_0811036C + ldrb r1, [r4, #0xc] + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r1, [r1] + adds r0, r4, #0 + bl _call_via_r1 + b _08066042 + .align 2, 0 +_08066020: .4byte gLinkEntity +_08066024: .4byte gUnk_0811036C +_08066028: + ldr r0, _08066058 @ =gUnk_08110360 + ldrb r1, [r4, #0xc] + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r1, [r1] + adds r0, r4, #0 + bl _call_via_r1 + adds r0, r4, #0 + bl sub_0806ED78 + adds r6, r4, #0 + adds r6, #0x58 +_08066042: + ldrb r0, [r6] + cmp r0, #0xc + bne _0806605C + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #0x39 + rsbs r0, r0, #0 + ands r0, r1 + strb r0, [r2] + b _0806606E + .align 2, 0 +_08066058: .4byte gUnk_08110360 +_0806605C: + adds r2, r4, #0 + adds r2, #0x29 + ldrb r0, [r2] + movs r1, #0x39 + rsbs r1, r1, #0 + ands r1, r0 + movs r0, #8 + orrs r1, r0 + strb r1, [r2] +_0806606E: + adds r2, r4, #0 + adds r2, #0x5a + ldrb r1, [r2] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080660A0 + movs r0, #0xfe + ands r0, r1 + strb r0, [r2] + adds r0, r4, #0 + movs r1, #0x3d + movs r2, #0x20 + bl CreateFx + ldr r4, _080660A4 @ =gUnk_08110380 + bl Random + movs r1, #7 + ands r1, r0 + lsls r1, r1, #1 + adds r1, r1, r4 + ldrh r0, [r1] + bl PlaySFX +_080660A0: + pop {r4, r5, r6, pc} + .align 2, 0 +_080660A4: .4byte gUnk_08110380 + .syntax divided \ No newline at end of file diff --git a/asm/pina.s b/asm/pina.s index 25fba55c..8d869270 100644 --- a/asm/pina.s +++ b/asm/pina.s @@ -109,7 +109,7 @@ _08063B0C: movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r1, #4 adds r0, r4, #0 diff --git a/asm/postman.s b/asm/postman.s index a08597ba..66761797 100644 --- a/asm/postman.s +++ b/asm/postman.s @@ -769,7 +769,7 @@ CreateZeldaFollower: @ 0x080609AC orrs r0, r1 strb r0, [r4, #0x10] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState strb r0, [r4, #0x14] _080609E0: pop {r4, pc} diff --git a/asm/rem.s b/asm/rem.s index 52147a70..c52753d1 100644 --- a/asm/rem.s +++ b/asm/rem.s @@ -153,7 +153,7 @@ _0806A512: adds r0, #0x6a strh r2, [r0] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitializeAnimation @@ -169,7 +169,7 @@ _0806A52C: movs r0, #2 strb r0, [r4, #0xd] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 adds r0, r4, #0 bl InitializeAnimation diff --git a/asm/smith.s b/asm/smith.s deleted file mode 100644 index 79b10146..00000000 --- a/asm/smith.s +++ /dev/null @@ -1,425 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Smith -Smith: @ 0x08065FC0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08066028 - adds r2, r4, #0 - adds r2, #0x39 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r6, r4, #0 - adds r6, #0x58 - cmp r0, #2 - bne _0806600C - movs r0, #0 - movs r1, #4 - strb r1, [r4, #0xc] - strb r0, [r2] - ldrb r0, [r6] - movs r5, #0 - cmp r0, #0xc - bne _08065FF0 - movs r5, #8 -_08065FF0: - ldr r1, _08066020 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r5, r5, r0 - adds r0, r4, #0 - adds r1, r5, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 -_0806600C: - ldr r0, _08066024 @ =gUnk_0811036C - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _08066042 - .align 2, 0 -_08066020: .4byte gLinkEntity -_08066024: .4byte gUnk_0811036C -_08066028: - ldr r0, _08066058 @ =gUnk_08110360 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0806ED78 - adds r6, r4, #0 - adds r6, #0x58 -_08066042: - ldrb r0, [r6] - cmp r0, #0xc - bne _0806605C - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - b _0806606E - .align 2, 0 -_08066058: .4byte gUnk_08110360 -_0806605C: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #8 - orrs r1, r0 - strb r1, [r2] -_0806606E: - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080660A0 - movs r0, #0xfe - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0x3d - movs r2, #0x20 - bl CreateFx - ldr r4, _080660A4 @ =gUnk_08110380 - bl Random - movs r1, #7 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - bl PlaySFX -_080660A0: - pop {r4, r5, r6, pc} - .align 2, 0 -_080660A4: .4byte gUnk_08110380 - - thumb_func_start Smith_Head -Smith_Head: @ 0x080660A8 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x5a - ldrb r4, [r0] - ldrb r2, [r5, #0x1e] - adds r0, r5, #0 - movs r1, #0 - bl SetExtraSpriteFrame - movs r0, #0x40 - ands r4, r0 - cmp r4, #0 - beq _080660CE - adds r0, r5, #0 - movs r1, #1 - movs r2, #0x16 - bl SetExtraSpriteFrame - b _080660D8 -_080660CE: - adds r0, r5, #0 - movs r1, #1 - movs r2, #0xff - bl SetExtraSpriteFrame -_080660D8: - adds r0, r5, #0 - movs r1, #0 - movs r2, #1 - bl SetSpriteSubEntryOffsetData1 - adds r0, r5, #0 - bl sub_0807000C - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080660EC -sub_080660EC: @ 0x080660EC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08066114 @ =gUnk_08110354 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08066112 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_08066112: - pop {r4, pc} - .align 2, 0 -_08066114: .4byte gUnk_08110354 - - thumb_func_start sub_08066118 -sub_08066118: @ 0x08066118 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x28 - movs r2, #0x28 - bl sub_0806ED9C - adds r1, r0, #0 - cmp r1, #0 - bge _0806612E - movs r1, #2 - b _08066144 -_0806612E: - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _0806613A - movs r0, #0x10 - strb r0, [r4, #0xf] - b _08066144 -_0806613A: - subs r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x58 - ldrb r1, [r0] -_08066144: - adds r0, r4, #0 - bl sub_0806F078 - cmp r0, #0 - bne _08066154 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08066154: - adds r0, r4, #0 - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0806616C - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0 - bl TextboxNoOverlapFollow -_0806616C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08066170 -sub_08066170: @ 0x08066170 - movs r1, #1 - strb r1, [r0, #0xc] - bx lr - .align 2, 0 - - thumb_func_start sub_08066178 -sub_08066178: @ 0x08066178 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080661AC @ =gUnk_08110354 - bl LoadExtraSpriteData - cmp r0, #0 - beq _080661A8 - 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_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807DD50 -_080661A8: - pop {r4, pc} - .align 2, 0 -_080661AC: .4byte gUnk_08110354 - - thumb_func_start sub_080661B0 -sub_080661B0: @ 0x080661B0 - push {lr} - movs r1, #0 - bl sub_0807DD94 - pop {pc} - .align 2, 0 - - thumb_func_start sub_080661BC -sub_080661BC: @ 0x080661BC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xc - bne _080661F4 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080661FC - adds r0, r4, #0 - bl sub_0806EDC4 - adds r0, #8 - adds r1, r4, #0 - adds r1, #0x80 - strh r0, [r1] - ldrh r1, [r1] - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _080661FC -_080661F4: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 -_080661FC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08066200 -sub_08066200: @ 0x08066200 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - - thumb_func_start sub_08066218 -sub_08066218: @ 0x08066218 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _08066228 - movs r0, #1 - strb r0, [r4, #0xc] -_08066228: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0806622C -sub_0806622C: @ 0x0806622C - push {lr} - adds r2, r0, #0 - ldr r0, _0806624C @ =gUnk_02002A40 - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _0806623C - movs r0, #0 -_0806623C: - lsls r1, r0, #3 - ldr r0, _08066250 @ =gUnk_08110390 - adds r1, r1, r0 - adds r0, r2, #0 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806624C: .4byte gUnk_02002A40 -_08066250: .4byte gUnk_08110390 - - thumb_func_start nullsub_501 -nullsub_501: @ 0x08066254 - bx lr - .align 2, 0 - - thumb_func_start sub_08066258 -sub_08066258: @ 0x08066258 - push {r4, lr} - ldr r4, _08066270 @ =gUnk_081103D0 - bl Random - movs r1, #7 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - bl PlaySFX - pop {r4, pc} - .align 2, 0 -_08066270: .4byte gUnk_081103D0 - - thumb_func_start sub_08066274 -sub_08066274: @ 0x08066274 - push {lr} - ldr r3, _08066284 @ =gUnk_081103E0 - movs r1, #1 - movs r2, #0 - bl sub_08078850 - pop {pc} - .align 2, 0 -_08066284: .4byte gUnk_081103E0 - - thumb_func_start sub_08066288 -sub_08066288: @ 0x08066288 - push {lr} - adds r1, r0, #0 - adds r1, #0x68 - ldrb r1, [r1] - bl sub_08078784 - pop {pc} - .align 2, 0 - - thumb_func_start Smith_Fusion -Smith_Fusion: @ 0x08066298 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080662D0 - ldr r1, _080662CC @ =gUnk_08110354 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _080662D6 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #6 - bl InitAnimationForceUpdate - b _080662D6 - .align 2, 0 -_080662CC: .4byte gUnk_08110354 -_080662D0: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_080662D6: - pop {r4, pc} diff --git a/asm/sturgeon.s b/asm/sturgeon.s index 6bb91643..34a9e992 100644 --- a/asm/sturgeon.s +++ b/asm/sturgeon.s @@ -166,7 +166,7 @@ _08064BCE: movs r0, #3 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 cmp r1, #0 bge _08064BE0 @@ -187,7 +187,7 @@ _08064BFA: movs r0, #2 strb r0, [r4, #0xc] adds r0, r4, #0 - bl sub_0806EDC4 + bl GetAnimationState adds r1, r0, #0 cmp r1, #0 bge _08064C0C diff --git a/include/screen.h b/include/screen.h index 3c732093..fd61b5f5 100644 --- a/include/screen.h +++ b/include/screen.h @@ -22,7 +22,8 @@ typedef struct { u16 bg2xOffset; u16 bg2yOffset; u16 unk; - u32 unk2; + u16 unk2; + u16 unk3; u16 bg3Control; u16 bg3xOffset; u16 bg3yOffset; @@ -67,4 +68,6 @@ typedef struct { BgControls controls; } Screen; +extern Screen gScreen; + #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index af8b84aa..032b66c1 100644 --- a/linker.ld +++ b/linker.ld @@ -467,7 +467,9 @@ SECTIONS { asm/code_08055FF4.o(.text); src/textbox.o(.text); asm/code_08056418.o(.text); + src/manager1.o(.text); asm/manager1.o(.text); + src/manager2.o(.text); asm/manager2.o(.text); asm/manager3.o(.text); asm/manager4.o(.text); @@ -562,7 +564,7 @@ SECTIONS { src/epona.o(.text); src/milkCart.o(.text); asm/ghostBrothers.o(.text); - asm/smith.o(.text); + src/smith.o(.text); asm/npc23.o(.text); asm/kingDaltus.o(.text); asm/ministerPotho.o(.text); diff --git a/src/fan.c b/src/fan.c index 93910dc7..481e3887 100644 --- a/src/fan.c +++ b/src/fan.c @@ -1,9 +1,86 @@ #include "global.h" #include "entity.h" +#include "flags.h" + +extern void sub_0809EE34(Entity*); +extern void sub_0809EFB0(Entity*); +extern void sub_0809EE08(Entity*); +extern void sub_0809F08C(void); +extern void sub_0809EE44(Entity*); +extern void sub_0809EE24(Entity*); extern void (*const gUnk_081243D4[])(Entity*); void Fan(Entity *this) { gUnk_081243D4[this->action](this); +} + +void sub_0809ED30(Entity *this) +{ + this->direction = (this->entityType.form ^ 2) << 3; + sub_0809EE34(this); + sub_0809EFB0(this); + InitializeAnimation(this, this->entityType.form); +} + +void sub_0809ED54(Entity *this) +{ + u16 uVar1; + u32 iVar2; + + if (((this->cutsceneBeh.HWORD == 0) || CheckFlags(this->cutsceneBeh.HWORD)) && + ((this->entityType.parameter != 1 || + (--this->field_0x74 == 0)))) { + sub_0809EE08(this); + } +} + +void sub_0809ED88(Entity *this) +{ + sub_0809F08C(); + sub_0809EE44(this); + if (this->field_0x86 != 0) { + if (this->cutsceneBeh.HWORD == this->field_0x86) { + if (CheckFlags(this->cutsceneBeh.HWORD)) { + return; + } + } + else if (!CheckFlags(this->cutsceneBeh.HWORD)) { + return; + } + sub_0809EE24(this); + } + else if (((this->entityType).parameter == 1) && + (--this->field_0x74 == 0)) { + sub_0809EE24(this); + } +} + +void sub_0809EDE4(Entity *this) +{ + sub_0809F08C(); + sub_0809EE44(this); + if (this->frames.b.f3) { + sub_0809EE34(this); + } +} + +void sub_0809EE08(Entity *this) +{ + this->action = 2; + this->field_0x74 = *((u8 *)&this->field_0x7c + 3) << 2; + InitializeAnimation(this, this->entityType.form); +} + +void sub_0809EE24(Entity *this) +{ + this->action = 3; + InitializeAnimation(this, this->entityType.form + 4); +} + +void sub_0809EE34(Entity *this) +{ + this->action = 1; + this->field_0x74 = this->actionDelay << 2; } \ No newline at end of file diff --git a/src/manager1.c b/src/manager1.c new file mode 100644 index 00000000..ba556db0 --- /dev/null +++ b/src/manager1.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "entity.h" +#include "screen.h" + +extern void sub_0801D7EC(u32); +extern void sub_08056250(void); +extern void sub_080570B8(Entity*); +void sub_080570F8(void); +extern void sub_08052D74(void*, void*, void*); + +extern void (*const gUnk_08107C5C[])(Entity*); +extern void (*const gUnk_08107C48[])(Entity*); + +extern u8 gUnk_08107C40[]; + +void Manager1(Entity *this) +{ + u8 bVar1; + u8 *pbVar2; + + gUnk_08107C5C[this->action](this); + gUnk_08107C48[((u8*)&this->field_0x20)[1]](this); + bVar1 = gUnk_08107C40[((u8*)&this->field_0x20)[1]]; + if ((bVar1 != 0) && (*(u8 *)&this->field_0x20 != bVar1)) { + ((u8*)&this->field_0x20)[0] = bVar1; + sub_0801D7EC(bVar1); + } +} + +void sub_080570B8(Entity *this) +{ + u8 *pbVar1; + + sub_0801D7EC(((u8 *)&this->field_0x20)[0]); + this->height.WORD = 0; + pbVar1 = ((u8 *)&this->field_0x20 + 1); + if (*pbVar1 == 3) { + gScreen.affine.bg3xOffset = 1; + } + else { + gUnk_08107C48[*pbVar1](this); + } +} + +void sub_080570F8(void) +{ + gScreen.lcd.lcdControl2 &= 0xf7ff; + gScreen.controls.windowOutsideControl = 0; + sub_08056250(); +} + +void sub_08057118(Entity *this) +{ + this->actionDelay = 0; + *(u8 *)&this->field_0x20 = 0; + ((u8 *)&this->field_0x20)[1] = 0; + ((u8 *)&this->field_0x20)[2] = 0; + this->action = 1; + gScreen.affine.unk2 = 0x1e04; + *(u16 *)&gScreen.lcd.lcdControl2 |= 0x800; + gScreen.controls.windowOutsideControl = 0x3648; + gScreen.controls.mosaicSize = 0x1000; + sub_08052D74(this, sub_080570B8, sub_080570F8); +} \ No newline at end of file diff --git a/src/manager2.c b/src/manager2.c new file mode 100644 index 00000000..707c13d1 --- /dev/null +++ b/src/manager2.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "entity.h" +#include "screen.h" + +extern void sub_080576A0(); +extern void sub_08052D74(); +extern void sub_0805754C(Entity*); + +void Manager2(Entity *this) +{ + if (this->action == 0) { + this->action = 1; + gScreen.affine.bg3xOffset = 0; + gScreen.bg2.bg0xOffset = 0; + sub_08052D74(this, sub_080576A0, 0); + } + sub_0805754C(this); +} \ No newline at end of file diff --git a/src/smith.c b/src/smith.c new file mode 100644 index 00000000..061d3c40 --- /dev/null +++ b/src/smith.c @@ -0,0 +1,225 @@ +#include "global.h" +#include "entity.h" +#include "textbox.h" + +typedef struct { + u8 filler[8]; + u8 unk; +} struct_02002A40; + +extern u32 GetFacingDirection(Entity*, Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806F118(Entity*); +extern void sub_0806ED78(Entity*); +extern Entity* CreateFx(Entity*, u32, u32); +extern void PlaySFX(u32); +extern u32 Random(void); +extern void sub_0807000C(Entity*); +extern u32 sub_0801E99C(Entity*); +extern u32 sub_0806ED9C(Entity*, u32, u32); +extern u32 sub_0806F078(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern u32 UpdateFuseInteraction(Entity*); +extern u32 GetAnimationState(Entity*); +extern void ShowNPCDialogue(Entity*, u32*); +extern void sub_08078850(u32, u32, u32, u32*); +extern void sub_08078784(Entity*, u32); + +extern void (*const gUnk_08110360[])(Entity*); +extern void (*const gUnk_0811036C[])(Entity*); + +extern u16 gUnk_08110380[]; +extern SpriteLoadData gUnk_08110354; +extern struct_02002A40 gUnk_02002A40; +extern u32 gUnk_08110390[]; +extern u16 gUnk_081103D0[]; +extern u32 gUnk_081103E0; + +#if NON_MATCHING //reg-alloc +void Smith(Entity *this) +{ + u32 iVar2; + u32 iVar4; + + if ((this->flags & 2) != 0) { + if (this->interactType == 2) { + this->action = 4; + this->interactType = 0; + iVar4 = (this->animIndex == 0xc) ? 8 : 0; + iVar2 = sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)); + InitAnimationForceUpdate(this, iVar2 + iVar4); + sub_0806F118(this); + } + gUnk_0811036C[this->action](this); + } + else { + gUnk_08110360[this->action](this); + sub_0806ED78(this); + } + if (this->animIndex == 0xc) { + this->spritePriority.b1 = 0; + } + else { + this->spritePriority.b1 = 1; + } + if ((this->frames.all & 1) != 0) { + this->frames.all &= 0xfe; + CreateFx(this, 0x3d, 0x20); + PlaySFX(gUnk_08110380[(Random() & 7)]); + } +} +#else +NAKED +void Smith(Entity *this) { + asm(".include \"asm/non_matching/smith/smith.inc\""); +} +#endif + +void Smith_Head(Entity *this) +{ + u8 bVar1; + + bVar1 = this->frames.all; + SetExtraSpriteFrame(this, 0, this->frameIndex); + if ((bVar1 & 0x40) != 0) { + SetExtraSpriteFrame(this, 1, 0x16); + } + else { + SetExtraSpriteFrame(this, 1, 0xff); + } + SetSpriteSubEntryOffsetData1(this,0,1); + sub_0807000C(this); +} + +void sub_080660EC(Entity *this) +{ + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action = 1; + this->field_0x68 = sub_0801E99C(this); + InitAnimationForceUpdate(this, 2); + } +} + +void sub_08066118(Entity *this) +{ + s32 uVar1; + u32 iVar2; + + uVar1 = sub_0806ED9C(this, 0x28, 0x28); + if (uVar1 < 0) { + uVar1 = 2; + } + else { + if (this->field_0xf == 0) { + this->field_0xf = 0x10; + } + else { + --this->field_0xf; + uVar1 = this->animIndex; + } + } + if (sub_0806F078(this, uVar1) == 0) { + UpdateAnimationSingleFrame(this); + } + if (this->interactType != 0) { + this->action = 2; + TextboxNoOverlapFollow(0); + } +} + +void sub_08066170(Entity *this) +{ + this->action = 1; +} + +void sub_08066178(Entity *this) +{ + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action = 1; + this->spriteSettings.b.draw = 1; + this->field_0x68 = sub_0801E99C(this); + sub_0807DD50(this); + } +} + +void sub_080661B0(Entity *this) +{ + sub_0807DD94(this, 0); +} + +void sub_080661BC(Entity *this) +{ + u32 sVar1; + + if (this->animIndex == 0xc) { + UpdateAnimationSingleFrame(this); + if ((this->frames.b.f3) != 0) { + this->field_0x80 = GetAnimationState(this) + 8; + InitAnimationForceUpdate(this, this->field_0x80); + } + } + else { + sub_0807DD94(this,0); + } +} + +void sub_08066200(Entity *this) +{ + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + UpdateAnimationSingleFrame(this); +} + +void sub_08066218(Entity *this) +{ + if (UpdateFuseInteraction(this) != 0) { + this->action = 1; + } +} + +void sub_0806622C(Entity *this) +{ + u32 iVar1; + + if (gUnk_02002A40.unk - 2 < 0) { + iVar1 = 0; + } + else { + iVar1 = gUnk_02002A40.unk - 2; + } + ShowNPCDialogue(this, &gUnk_08110390[iVar1 * 2]); +} + +void nullsub_501(Entity* this) {} + +void sub_08066258(void) +{ + PlaySFX(gUnk_081103D0[Random() & 7]); +} + +void sub_08066274(u32 arg0) +{ + sub_08078850(arg0, 1, 0, &gUnk_081103E0); +} + +void sub_08066288(Entity *arg0) +{ + sub_08078784(arg0, arg0->field_0x68); +} + +void Smith_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action++; + this->spriteSettings.b.draw = 1; + InitAnimationForceUpdate(this, 6); + } + } + else { + UpdateAnimationSingleFrame(this); + } +} \ No newline at end of file diff --git a/src/zelda.c b/src/zelda.c index 8aa89a33..2ba8bf28 100644 --- a/src/zelda.c +++ b/src/zelda.c @@ -11,7 +11,7 @@ extern Entity* sub_0805EB9C(u32, u32); void CopyPosition(Entity*, Entity*); void sub_08068680(Entity*, Entity*); void sub_08068694(Entity*, Entity*); -u32 sub_0806EDC4(Entity* ent); +u32 GetAnimationState(Entity* ent); void DeleteThisEntity(void); extern Entity* GetEntityByType(u32, u32); extern void sub_080686C4(Entity*, Entity*); @@ -89,7 +89,7 @@ void sub_08066D94(Entity* ent) { if (npc != NULL) { npc->animationState = gLinkEntity.animationState; npc->flags |= 0x20; - npc->animationState = sub_0806EDC4(ent); + npc->animationState = GetAnimationState(ent); roomID = gRoomControls.roomID; npc->field_0x74 = roomID; CopyPosition(ent, npc);