diff --git a/asm/festari.s b/asm/festari.s index c4e935f9..b3bf6c9a 100644 --- a/asm/festari.s +++ b/asm/festari.s @@ -6,150 +6,6 @@ .text - thumb_func_start sub_0805FE10 -sub_0805FE10: @ 0x0805FE10 - 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 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - adds r0, r4, #0 - bl sub_0807DD50 - pop {r4, pc} - - thumb_func_start sub_0805FE48 -sub_0805FE48: @ 0x0805FE48 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r2, r5, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0805FE80 - movs r0, #0 - strb r1, [r5, #0xc] - strb r0, [r2] - ldr r1, _0805FE7C @ =gLinkEntity - adds r0, r5, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r5, #0 - bl InitAnimationForceUpdate - adds r0, r5, #0 - bl sub_0806F118 - b _0805FF14 - .align 2, 0 -_0805FE7C: .4byte gLinkEntity -_0805FE80: - adds r4, r5, #0 - adds r4, #0x84 - ldr r1, [r4] - adds r0, r5, #0 - bl ExecuteScriptCommandSet - ldr r1, [r4] - adds r0, r5, #0 - bl sub_0805FF2C - adds r0, r5, #0 - adds r0, #0x80 - ldrh r3, [r0] - adds r7, r0, #0 - adds r6, r5, #0 - adds r6, #0x82 - cmp r3, #7 - bhi _0805FEC6 - ldrh r1, [r6] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0805FEBA - movs r1, #0xfc - ands r1, r3 - ldrb r0, [r5, #0xf] - lsrs r0, r0, #1 - adds r3, r1, r0 - b _0805FEC6 -_0805FEBA: - movs r0, #0xfc - ands r0, r3 - ldrb r2, [r5, #0x14] - lsrs r1, r2, #1 - adds r3, r0, r1 - strb r2, [r5, #0xf] -_0805FEC6: - adds r4, r5, #0 - adds r4, #0x58 - ldrb r0, [r4] - cmp r3, r0 - beq _0805FED8 - adds r0, r5, #0 - adds r1, r3, #0 - bl InitAnimationForceUpdate -_0805FED8: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0805FF02 - ldrb r0, [r4] - cmp r0, #8 - beq _0805FEFE - cmp r0, #8 - blt _0805FF02 - cmp r0, #0xc - bgt _0805FF02 - cmp r0, #0xa - blt _0805FF02 -_0805FEFE: - movs r0, #0 - strh r0, [r7] -_0805FF02: - ldrh r1, [r6] - mvns r0, r1 - adds r0, #1 - ands r1, r0 - cmp r1, #2 - bne _0805FF14 - adds r0, r5, #0 - bl sub_0806ED78 -_0805FF14: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0805FF18 -sub_0805FF18: @ 0x0805FF18 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0805FF28 - movs r0, #1 - strb r0, [r4, #0xc] -_0805FF28: - pop {r4, pc} - .align 2, 0 - thumb_func_start sub_0805FF2C sub_0805FF2C: @ 0x0805FF2C push {r4, r5, r6, lr} diff --git a/asm/forestMinish.s b/asm/forestMinish.s deleted file mode 100644 index 5946d0fc..00000000 --- a/asm/forestMinish.s +++ /dev/null @@ -1,561 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ForestMinish -ForestMinish: @ 0x0805FFD8 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r5, [r4, #0xc] - cmp r5, #1 - beq _08060044 - cmp r5, #1 - bgt _0805FFEC - cmp r5, #0 - beq _0805FFF2 - b _0806008C -_0805FFEC: - cmp r5, #2 - beq _0806007E - b _0806008C -_0805FFF2: - ldr r1, _0806003C @ =gUnk_0810A348 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806008C - 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] - ldrb r0, [r4, #0xe] - lsls r0, r0, #1 - strb r0, [r4, #0x14] - adds r1, r4, #0 - adds r1, #0x69 - strb r0, [r1] - strb r5, [r4, #0xe] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - ldr r1, _08060040 @ =gUnk_08109D18 - ldrb r0, [r4, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl StartCutscene - adds r0, r4, #0 - bl sub_0807DD50 - b _0806008C - .align 2, 0 -_0806003C: .4byte gUnk_0810A348 -_08060040: .4byte gUnk_08109D18 -_08060044: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806005E - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - adds r0, r4, #0 - bl sub_0806F118 - b _0806008C -_0806005E: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0807DDE4 - adds r0, r4, #0 - adds r0, #0x59 - ldrb r0, [r0] - cmp r0, #0xf0 - beq _0806008C - adds r0, r4, #0 - bl sub_080600F0 - b _0806008C -_0806007E: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806008C - movs r0, #1 - strb r0, [r4, #0xc] -_0806008C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08060090 -sub_08060090: @ 0x08060090 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start ForestMinish_Head -ForestMinish_Head: @ 0x080600A8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r2, [r0] - cmp r2, #0xff - beq _080600BA - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 -_080600BA: - adds r0, r4, #0 - adds r0, #0x5b - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _080600CA - movs r2, #0xff -_080600CA: - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080600F0 -sub_080600F0: @ 0x080600F0 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x80 - ldrh r3, [r0] - cmp r3, #7 - bhi _08060120 - adds r0, #2 - ldrh r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08060114 - movs r1, #0xfc - ands r1, r3 - ldrb r0, [r4, #0xf] - lsrs r0, r0, #1 - adds r3, r1, r0 - b _08060120 -_08060114: - movs r0, #0xfc - ands r0, r3 - ldrb r2, [r4, #0x14] - lsrs r1, r2, #1 - adds r3, r0, r1 - strb r2, [r4, #0xf] -_08060120: - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r3, r0 - beq _08060132 - adds r0, r4, #0 - adds r1, r3, #0 - bl InitAnimationForceUpdate -_08060132: - adds r0, r4, #0 - adds r0, #0x82 - ldrh r1, [r0] - movs r0, #4 - ands r0, r1 - movs r1, #1 - cmp r0, #0 - beq _08060144 - movs r1, #2 -_08060144: - adds r0, r4, #0 - bl sub_080042BA - pop {r4, pc} - - thumb_func_start sub_0806014C -sub_0806014C: @ 0x0806014C - push {lr} - movs r1, #0 - strb r1, [r0, #0xe] - bl sub_08060158 - pop {pc} - - thumb_func_start sub_08060158 -sub_08060158: @ 0x08060158 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - adds r7, r0, #0 - cmp r7, #0 - beq _0806016A - subs r0, #1 - strb r0, [r4, #0xe] - b _080601CC -_0806016A: - movs r0, #2 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0x20 - movs r2, #0x20 - bl sub_0806EDD8 - adds r3, r0, #0 - cmp r3, #0 - bge _08060188 - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - strb r0, [r4, #0x14] - lsls r3, r0, #2 -_08060188: - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #5 - asrs r1, r3, #1 - lsls r1, r1, #1 - ldr r2, _080601D0 @ =gUnk_08109C98 - adds r1, r1, r2 - adds r0, r0, r1 - ldrb r6, [r0] - ldrb r5, [r0, #1] - movs r0, #0x80 - ands r0, r5 - cmp r0, #0 - beq _080601AC - adds r0, r3, #0 - bl sub_0806F5B0 - strb r0, [r4, #0x14] -_080601AC: - movs r0, #0x7f - ands r5, r0 - adds r0, r4, #0 - adds r0, #0x5a - strb r6, [r0] - strb r5, [r4, #0x1e] - adds r1, r4, #0 - adds r1, #0x5b - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x58 - strb r7, [r0] - subs r1, #2 - movs r0, #0xf0 - strb r0, [r1] -_080601CC: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080601D0: .4byte gUnk_08109C98 - - thumb_func_start sub_080601D4 -sub_080601D4: @ 0x080601D4 - push {r4, lr} - adds r4, r0, #0 - movs r0, #4 - bl CheckGlobalFlag - cmp r0, #0 - bne _080601E6 - movs r1, #2 - b _080601F2 -_080601E6: - movs r0, #0x17 - bl CheckKinstoneFused - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r1, r1, #0x1f -_080601F2: - ldr r0, _08060204 @ =gUnk_0810A354 - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r4, #0 - bl TextboxNoOverlap - pop {r4, pc} - .align 2, 0 -_08060204: .4byte gUnk_0810A354 - - thumb_func_start sub_08060208 -sub_08060208: @ 0x08060208 - push {lr} - ldrb r1, [r0, #0xb] - lsls r1, r1, #5 - ldr r2, _08060218 @ =gUnk_08109DC8 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_08060218: .4byte gUnk_08109DC8 - - thumb_func_start sub_0806021C -sub_0806021C: @ 0x0806021C - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x5b - bl GetInventoryValue - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f - movs r0, #0x40 - bl GetInventoryValue - cmp r0, #0 - beq _08060238 - movs r4, #2 -_08060238: - movs r0, #0x13 - bl GetInventoryValue - cmp r0, #0 - beq _08060244 - movs r4, #3 -_08060244: - ldrb r1, [r5, #0xb] - lsls r1, r1, #5 - lsls r0, r4, #3 - ldr r2, _08060258 @ =gUnk_08109DC8 - adds r0, r0, r2 - adds r1, r1, r0 - adds r0, r5, #0 - bl ShowNPCDialogue - pop {r4, r5, pc} - .align 2, 0 -_08060258: .4byte gUnk_08109DC8 - - thumb_func_start sub_0806025C -sub_0806025C: @ 0x0806025C - push {lr} - ldrb r1, [r0, #0xb] - lsls r1, r1, #5 - ldr r2, _0806026C @ =gUnk_08109DC8 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806026C: .4byte gUnk_08109DC8 - - thumb_func_start sub_08060270 -sub_08060270: @ 0x08060270 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _08060294 - movs r4, #1 - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - bne _080602A8 - movs r4, #0 - movs r0, #0x29 - bl SetGlobalFlag - b _080602A8 -_08060294: - movs r4, #3 - movs r0, #0x76 - bl CheckLocalFlag - cmp r0, #0 - bne _080602A8 - movs r4, #2 - movs r0, #0x76 - bl SetLocalFlag -_080602A8: - ldr r0, _080602B8 @ =gUnk_0810A35A - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_080602B8: .4byte gUnk_0810A35A - - thumb_func_start sub_080602BC -sub_080602BC: @ 0x080602BC - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x48 - bl GetInventoryValue - cmp r0, #0 - beq _080602D6 - bl Random - movs r1, #1 - ands r1, r0 - adds r2, r1, #2 - b _080602F0 -_080602D6: - ldr r0, _08060300 @ =gUnk_02002A40 - adds r2, r0, #0 - adds r2, #0xac - ldr r1, _08060304 @ =gBombBagSizes - adds r0, #0xae - ldrb r0, [r0] - adds r0, r0, r1 - ldrb r1, [r2] - movs r2, #0 - ldrb r0, [r0] - cmp r1, r0 - bhs _080602F0 - movs r2, #1 -_080602F0: - ldr r0, _08060308 @ =gUnk_0810A362 - lsls r1, r2, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r4, #0 - bl TextboxNoOverlap - pop {r4, pc} - .align 2, 0 -_08060300: .4byte gUnk_02002A40 -_08060304: .4byte gBombBagSizes -_08060308: .4byte gUnk_0810A362 - - thumb_func_start sub_0806030C -sub_0806030C: @ 0x0806030C - push {lr} - ldr r0, [r1, #4] - bl ModBombs - pop {pc} - .align 2, 0 - - thumb_func_start sub_08060318 -sub_08060318: @ 0x08060318 - push {r4, r5, lr} - movs r5, #2 -_0806031C: - movs r0, #8 - movs r1, #2 - movs r2, #2 - bl sub_0805EB00 - adds r4, r0, #0 - cmp r4, #0 - beq _08060336 - bl sub_080A29BC - adds r0, r4, #0 - bl DeleteEntity -_08060336: - subs r5, #1 - cmp r5, #0 - bge _0806031C - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08060340 -sub_08060340: @ 0x08060340 - ldr r0, _08060350 @ =gUnk_02002A40 - movs r2, #0x92 - lsls r2, r2, #3 - adds r1, r0, r2 - ldr r0, [r0, #0x50] - str r0, [r1] - bx lr - .align 2, 0 -_08060350: .4byte gUnk_02002A40 - - thumb_func_start sub_08060354 -sub_08060354: @ 0x08060354 - push {r4, lr} - ldr r0, _08060378 @ =gUnk_02002A40 - movs r2, #0x92 - lsls r2, r2, #3 - adds r1, r0, r2 - ldr r2, [r0, #0x50] - ldr r0, [r1] - subs r4, r2, r0 - movs r0, #0x3b - bl CheckGlobalFlag - cmp r0, #0 - bne _08060380 - cmp r4, #4 - ble _080603B0 - ldr r0, _0806037C @ =0x00008444 - b _080603B2 - .align 2, 0 -_08060378: .4byte gUnk_02002A40 -_0806037C: .4byte 0x00008444 -_08060380: - movs r0, #0x3c - bl CheckGlobalFlag - cmp r0, #0 - bne _08060398 - cmp r4, #9 - ble _080603B0 - ldr r0, _08060394 @ =0x00008444 - b _080603B2 - .align 2, 0 -_08060394: .4byte 0x00008444 -_08060398: - movs r0, #0x3d - bl CheckGlobalFlag - cmp r0, #0 - bne _080603B0 - cmp r4, #0xe - ble _080603B0 - ldr r0, _080603AC @ =0x00008444 - b _080603B2 - .align 2, 0 -_080603AC: .4byte 0x00008444 -_080603B0: - movs r0, #0 -_080603B2: - pop {r4, pc} - - thumb_func_start ForestMinish_Fusion -ForestMinish_Fusion: @ 0x080603B4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080603F4 - ldr r1, _080603F0 @ =gUnk_0810A348 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _080603FA - 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, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - movs r1, #6 - bl InitializeAnimation - b _080603FA - .align 2, 0 -_080603F0: .4byte gUnk_0810A348 -_080603F4: - adds r0, r4, #0 - bl GetNextFrame -_080603FA: - pop {r4, pc} diff --git a/asm/gentari.s b/asm/gentari.s deleted file mode 100644 index 4cfbf586..00000000 --- a/asm/gentari.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Festari -Festari: @ 0x0805FDF8 - push {lr} - ldr r2, _0805FE0C @ =gUnk_08109BBC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805FE0C: .4byte gUnk_08109BBC diff --git a/asm/non_matching/festari/sub_0805FE48.inc b/asm/non_matching/festari/sub_0805FE48.inc new file mode 100644 index 00000000..0f7ff560 --- /dev/null +++ b/asm/non_matching/festari/sub_0805FE48.inc @@ -0,0 +1,110 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + adds r2, r5, #0 + adds r2, #0x39 + movs r1, #0 + ldrsb r1, [r2, r1] + cmp r1, #2 + bne _0805FE80 + movs r0, #0 + strb r1, [r5, #0xc] + strb r0, [r2] + ldr r1, _0805FE7C @ =gLinkEntity + adds r0, r5, #0 + bl GetFacingDirection + bl sub_0806F5A4 + adds r1, r0, #0 + adds r0, r5, #0 + bl InitAnimationForceUpdate + adds r0, r5, #0 + bl sub_0806F118 + b _0805FF14 + .align 2, 0 +_0805FE7C: .4byte gLinkEntity +_0805FE80: + adds r4, r5, #0 + adds r4, #0x84 + ldr r1, [r4] + adds r0, r5, #0 + bl ExecuteScriptCommandSet + ldr r1, [r4] + adds r0, r5, #0 + bl sub_0805FF2C + adds r0, r5, #0 + adds r0, #0x80 + ldrh r3, [r0] + adds r7, r0, #0 + adds r6, r5, #0 + adds r6, #0x82 + cmp r3, #7 + bhi _0805FEC6 + ldrh r1, [r6] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0805FEBA + movs r1, #0xfc + ands r1, r3 + ldrb r0, [r5, #0xf] + lsrs r0, r0, #1 + adds r3, r1, r0 + b _0805FEC6 +_0805FEBA: + movs r0, #0xfc + ands r0, r3 + ldrb r2, [r5, #0x14] + lsrs r1, r2, #1 + adds r3, r0, r1 + strb r2, [r5, #0xf] +_0805FEC6: + adds r4, r5, #0 + adds r4, #0x58 + ldrb r0, [r4] + cmp r3, r0 + beq _0805FED8 + adds r0, r5, #0 + adds r1, r3, #0 + bl InitAnimationForceUpdate +_0805FED8: + adds r0, r5, #0 + bl UpdateAnimationSingleFrame + adds r0, r5, #0 + adds r0, #0x5a + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0805FF02 + ldrb r0, [r4] + cmp r0, #8 + beq _0805FEFE + cmp r0, #8 + blt _0805FF02 + cmp r0, #0xc + bgt _0805FF02 + cmp r0, #0xa + blt _0805FF02 +_0805FEFE: + movs r0, #0 + strh r0, [r7] +_0805FF02: + ldrh r1, [r6] + mvns r0, r1 + adds r0, #1 + ands r1, r0 + cmp r1, #2 + bne _0805FF14 + adds r0, r5, #0 + bl sub_0806ED78 +_0805FF14: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/forestMinish/sub_08060158.inc b/asm/non_matching/forestMinish/sub_08060158.inc new file mode 100644 index 00000000..92ec5d85 --- /dev/null +++ b/asm/non_matching/forestMinish/sub_08060158.inc @@ -0,0 +1,72 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xe] + adds r7, r0, #0 + cmp r7, #0 + beq _0806016A + subs r0, #1 + strb r0, [r4, #0xe] + b _080601CC +_0806016A: + movs r0, #2 + strb r0, [r4, #0xe] + adds r0, r4, #0 + movs r1, #0x20 + movs r2, #0x20 + bl sub_0806EDD8 + adds r3, r0, #0 + cmp r3, #0 + bge _08060188 + adds r0, r4, #0 + adds r0, #0x69 + ldrb r0, [r0] + strb r0, [r4, #0x14] + lsls r3, r0, #2 +_08060188: + ldrb r0, [r4, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #5 + asrs r1, r3, #1 + lsls r1, r1, #1 + ldr r2, _080601D0 @ =gUnk_08109C98 + adds r1, r1, r2 + adds r0, r0, r1 + ldrb r6, [r0] + ldrb r5, [r0, #1] + movs r0, #0x80 + ands r0, r5 + cmp r0, #0 + beq _080601AC + adds r0, r3, #0 + bl sub_0806F5B0 + strb r0, [r4, #0x14] +_080601AC: + movs r0, #0x7f + ands r5, r0 + adds r0, r4, #0 + adds r0, #0x5a + strb r6, [r0] + strb r5, [r4, #0x1e] + adds r1, r4, #0 + adds r1, #0x5b + movs r0, #1 + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x58 + strb r7, [r0] + subs r1, #2 + movs r0, #0xf0 + strb r0, [r1] +_080601CC: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080601D0: .4byte gUnk_08109C98 + .syntax divided \ No newline at end of file diff --git a/include/link.h b/include/link.h index fa4cec13..76f4206d 100644 --- a/include/link.h +++ b/include/link.h @@ -74,6 +74,8 @@ typedef struct { u8 filler3[12]; } Stats; +extern u8 gBombBagSizes[]; + extern LinkState gLinkState; extern Stats gStats; extern Entity gLinkEntity; diff --git a/include/npc.h b/include/npc.h index fff3334a..314a5869 100644 --- a/include/npc.h +++ b/include/npc.h @@ -1,5 +1,6 @@ #include "global.h" #include "entity.h" +#include "link.h" #ifndef NPC_H #define NPC_H @@ -174,8 +175,14 @@ extern u32 UpdateFuseInteraction(Entity*); extern void ShowNPCDialogue(Entity*, u32*); typedef struct { - u8 filler[8]; - u8 unk; + /*0x000*/ u8 filler[8]; + /*0x008*/ u8 unk; + /*0x009*/ u8 filler2[0x47]; + /*0x050*/ u32 unk2; + /*0x051*/ u8 filler3[0x54]; + /*0x0a8*/ Stats stats; + /*0x0d0*/ u8 filler4[0x3c0]; + /*0x490*/ u32 unk3; } struct_02002A40; extern struct_02002A40 gUnk_02002A40; diff --git a/linker.ld b/linker.ld index 8024ecfc..1ad87c17 100644 --- a/linker.ld +++ b/linker.ld @@ -534,9 +534,9 @@ SECTIONS { asm/code_0805E744.o(.text); /* npcs */ src/gentari.o(.text); - asm/gentari.o(.text); + src/festari.o(.text); asm/festari.o(.text); - asm/forestMinish.o(.text); + src/forestMinish.o(.text); asm/postman.o(.text); asm/npc5.o(.text); asm/townsperson.o(.text); diff --git a/src/festari.c b/src/festari.c new file mode 100644 index 00000000..ff64ccd6 --- /dev/null +++ b/src/festari.c @@ -0,0 +1,91 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "link.h" + +extern void sub_0805E3A0(Entity*, u32); +extern u32 sub_0801E99C(Entity*); +extern void sub_08078784(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern void sub_0806F118(Entity*); +extern void ExecuteScriptCommandSet(Entity*, void *); +extern void sub_0805FF2C(Entity*, void*); +extern void sub_0806ED78(Entity*); + +extern void (*const gUnk_08109BBC[])(Entity*); + + +void Festari(Entity *this) +{ + gUnk_08109BBC[this->action](this); +} + +void sub_0805FE10(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); + sub_0807DD50(this); +} + +#if NON_MATCHING +void sub_0805FE48(Entity *this) +{ + u8 bVar1; + u16 uVar2; + u32 uVar3; + u32 uVar4; + + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity))); + sub_0806F118(this); + } + else { + ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh); + sub_0805FF2C(this, *(void **)&this->cutsceneBeh); + if (this->field_0x80 < 8) { + if ((this->field_0x82 & 1) != 0) { + uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1); + } + else { + uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1); + this->field_0xf = this->animationState; + } + } + if (uVar4 != this->animIndex) { + InitAnimationForceUpdate(this, uVar4); + } + UpdateAnimationSingleFrame(this); + + if (this->frames.b.f3) + { + switch (this->animIndex) { + case 8: + case 10: + case 11: + case 12: + this->field_0x80 = 0; + } + } + if ((this->field_0x82 & (~this->field_0x82 + 1)) == 2) { + sub_0806ED78(this); + } + } +} +#else +NAKED +void sub_0805FE48(Entity *this) { + asm(".include \"asm/non_matching/festari/sub_0805FE48.inc\""); +} +#endif + +void sub_0805FF18(Entity *this) +{ + if (UpdateFuseInteraction(this)) { + this->action = 1; + } +} \ No newline at end of file diff --git a/src/forestMinish.c b/src/forestMinish.c new file mode 100644 index 00000000..29a4ea6a --- /dev/null +++ b/src/forestMinish.c @@ -0,0 +1,304 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" +#include "flags.h" +#include "textbox.h" +#include "link.h" + +extern void sub_0805E3A0(Entity*, u32); +extern void StartCutscene(Entity*, void*); +extern void sub_0807DD50(Entity*); +extern void sub_0806F118(Entity*); +extern void sub_0807DDAC(Entity*, u32); +extern void sub_0807DDE4(Entity*); +extern void sub_080600F0(Entity*); +extern u32 sub_0801E99C(Entity*); +extern void sub_08078784(Entity*, u32); +extern void sub_0807000C(Entity*); +extern void sub_080042BA(Entity*, u32); +extern void sub_08060158(Entity*); +extern u32 CheckKinstoneFused(u32); +extern Entity* sub_0805EB00(u32, u32, u32); +extern void sub_080A29BC(Entity* parent); +extern void DeleteEntity(Entity*); +extern u32 Random(void); +extern void ModBombs(s32); + +extern SpriteLoadData gUnk_0810A348; +extern void* gUnk_08109D18[]; +extern u8 gUnk_08109C98[]; +extern u16 gUnk_0810A354[]; +extern u32 gUnk_08109DC8[]; +extern u16 gUnk_0810A35A[]; +extern u16 gUnk_0810A362[]; + +void ForestMinish(Entity* this) { + switch (this->action) { + case 0: + if (LoadExtraSpriteData(this, &gUnk_0810A348)) { + this->action = 1; + this->spriteSettings.b.draw = TRUE; + this->field_0x69 = this->animationState = this->actionDelay << 1; + this->actionDelay = 0; + sub_0805E3A0(this, 2); + StartCutscene(this, gUnk_08109D18[this->entityType.parameter]); + sub_0807DD50(this); + } + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + sub_0806F118(this); + } else { + sub_0807DDAC(this, 0); + sub_0807DDE4(this); + if (this->frameDuration != 0xf0) { + sub_080600F0(this); + } + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + } +} + +void sub_08060090(Entity* this) { + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); +} + +void ForestMinish_Head(Entity* this) { + u32 pbVar1; + + pbVar1 = this->frames.all; + if (this->frames.all != 0xff) { + pbVar1 &= -0x81; + } + if ((this->frameSpriteSettings & 1) == 0) { + pbVar1 = 0xff; + } + SetExtraSpriteFrame(this, 0, pbVar1); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); +} + +void sub_080600F0(Entity* this) { + u32 uVar1; + u32 uVar2; + + uVar2 = this->field_0x80; + if (this->field_0x80 < 8) { + if ((this->field_0x82 & 1) != 0) { + uVar2 = (uVar2 & 0xfc) + (this->field_0xf >> 1); + } else { + uVar2 = (uVar2 & 0xfc) + (this->animationState >> 1); + this->field_0xf = this->animationState; + } + } + if (uVar2 != this->animIndex) { + InitAnimationForceUpdate(this, uVar2); + } + if ((this->field_0x82 & 4) != 0) { + uVar1 = 2; + } else { + uVar1 = 1; + } + sub_080042BA(this, uVar1); +} + +void sub_0806014C(Entity* this) { + this->actionDelay = 0; + sub_08060158(this); +} + +#if 0 +void sub_08060158(Entity *this) +{ + u8 bVar1; + u8 bVar2; + s32 iVar4; + u32 temp; + if (this->actionDelay != 0) { + this->actionDelay--; + } + else { + this->actionDelay = 2; + iVar4 = sub_0806EDD8(this, 0x20, 0x20); + if (iVar4 < 0) { + this->animationState = this->field_0x69; + iVar4 = this->field_0x69 << 2; + } + temp = (this->animationState >> 1) * 0x20 + (iVar4 >> 1) * 2; + bVar1 = gUnk_08109C98[temp]; + bVar2 = gUnk_08109C98[temp + 1]; + if ((bVar2 & 0x80) != 0) { + this->animationState = sub_0806F5B0(iVar4); + } + this->frames.all = bVar1; + this->frameIndex = bVar2 & 0x7f; + this->frameSpriteSettings = 1; + this->animIndex = 0; + this->frameDuration = 0xf0; + } +} +#endif +NAKED +void sub_08060158(Entity* this) { + asm(".include \"asm/non_matching/forestMinish/sub_08060158.inc\""); +} + +void sub_080601D4(Entity* this) { + u32 temp; + u32 uVar2; + + if (CheckGlobalFlag(4) == 0) { + uVar2 = 2; + } else { + temp = CheckKinstoneFused(0x17); + uVar2 = (-temp | temp) >> 0x1f; + } + TextboxNoOverlap(gUnk_0810A354[uVar2], this); +} + +void sub_08060208(Entity *this) +{ + ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]); +} + +void sub_0806021C(Entity *this) +{ + u32 uVar1; + u32 uVar2; + + //jabber nut + uVar1 = GetInventoryValue(0x5B); + uVar2 = (-uVar1 | uVar1) >> 0x1f; + + //earth element + if (GetInventoryValue(0x40)) { + uVar2 = 2; + } + + //mole mitts + if (GetInventoryValue(0x13)) { + uVar2 = 3; + } + ShowNPCDialogue(this, gUnk_08109DC8 + this->entityType.parameter * 0x8 + uVar2 * 2); +} + +void sub_0806025C(Entity *this) +{ + ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]); +} + +void sub_08060270(Entity *this) +{ + u32 index; + + //flippers + if (GetInventoryValue(0x46) == 0) { + index = 1; + if (CheckGlobalFlag(0x29) == 0) { + index = 0; + SetGlobalFlag(0x29); + } + } + else { + index = 3; + if (CheckLocalFlag(0x76) == 0) { + index = 2; + SetLocalFlag(0x76); + } + } + TextboxNoOverlap(gUnk_0810A35A[index], this); +} + +void sub_080602BC(Entity *this) +{ + u32 index; + + //spin attack + if (GetInventoryValue(0x48) != 0) { + index = (Random() & 1) + 2; + } + else { + if (gUnk_02002A40.stats.bombCount < gBombBagSizes[gUnk_02002A40.stats.bombBagType]) { + index = 1; + } + else { + index = 0; + } + } + TextboxNoOverlap(gUnk_0810A362[index], this); +} + +void sub_0806030C(Entity* this, u32 *arg1) +{ + ModBombs(*(arg1 + 1)); +} + +void sub_08060318(void) +{ + Entity *ent; + int i; + + for (i = 2; i >= 0; i--) { + ent = sub_0805EB00(8, 2, 2); + if (ent != NULL) { + sub_080A29BC(ent); + DeleteEntity(ent); + } + } +} + +void sub_08060340(void) +{ + gUnk_02002A40.unk3 = gUnk_02002A40.unk2; +} + +u32 sub_08060354(void) +{ + u32 iVar1; + s32 iVar2; + + iVar2 = gUnk_02002A40.unk2 - gUnk_02002A40.unk3; + if (CheckGlobalFlag(0x3b) == 0) { + if (4 < iVar2) { + return 0x8444; + } + } + else { + if (CheckGlobalFlag(0x3c) == 0) { + if (iVar2 > 9) { + return 0x8444; + } + } + else { + if (CheckGlobalFlag(0x3d) == 0) { + if (iVar2 > 14) { + return 0x8444; + } + } + } + } + return 0; +} + +void ForestMinish_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_0810A348)) { + this->action++; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + InitializeAnimation(this, 6); + } + } + else { + GetNextFrame(this); + } +} \ No newline at end of file