diff --git a/asm/carpenter.s b/asm/carpenter.s deleted file mode 100644 index 60e4a2c2..00000000 --- a/asm/carpenter.s +++ /dev/null @@ -1,101 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080672C8 -sub_080672C8: @ 0x080672C8 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - movs r0, #0x11 - bl GetInventoryValue - cmp r0, #0 - bne _080672E4 - movs r0, #0x15 - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f -_080672E4: - ldr r3, _08067300 @ =gUnk_08110CE8 - lsls r1, r4, #1 - ldrb r2, [r5, #0xa] - lsls r0, r2, #1 - adds r0, r0, r2 - lsls r0, r0, #1 - adds r1, r1, r0 - adds r1, r1, r3 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_08067300: .4byte gUnk_08110CE8 - - thumb_func_start sub_08067304 -sub_08067304: @ 0x08067304 - push {lr} - ldr r1, _08067310 @ =gUnk_08110D00 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_08067310: .4byte gUnk_08110D00 - - thumb_func_start sub_08067314 -sub_08067314: @ 0x08067314 - 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 Carpenter_Fusion -Carpenter_Fusion: @ 0x0806732C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08067378 - ldrb r1, [r4, #0xa] - lsls r1, r1, #4 - ldr r0, _08067374 @ =gUnk_08110CA8 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806737E - 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 - ldrb r1, [r4, #0xa] - lsls r1, r1, #3 - adds r1, #2 - adds r0, r4, #0 - bl InitializeAnimation - b _0806737E - .align 2, 0 -_08067374: .4byte gUnk_08110CA8 -_08067378: - adds r0, r4, #0 - bl GetNextFrame -_0806737E: - pop {r4, pc} diff --git a/asm/cat.s b/asm/cat.s deleted file mode 100644 index 5dfe0f10..00000000 --- a/asm/cat.s +++ /dev/null @@ -1,857 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080677EC -sub_080677EC: @ 0x080677EC - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #8 - strb r0, [r4, #0x15] - movs r0, #0x80 - strh r0, [r4, #0x24] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #4 - movs r0, #0x48 - strb r0, [r1] - subs r1, #1 - movs r0, #0xa8 - strb r0, [r1] - subs r1, #4 - movs r0, #1 - strb r0, [r1] - adds r1, #0x2e - movs r0, #0xff - strb r0, [r1] - ldr r0, _0806783C @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r4, r2] - movs r2, #0x2e - ldrsh r0, [r0, r2] - cmp r1, r0 - bge _08067840 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - b _08067848 - .align 2, 0 -_0806783C: .4byte gPlayerEntity -_08067840: - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 -_08067848: - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldr r0, _0806786C @ =gUnk_08110EF0 - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_0805ACC0 - adds r2, r0, #0 - cmp r2, #0 - bne _08067870 - movs r0, #0x2e - ldrsh r2, [r4, r0] - b _08067872 - .align 2, 0 -_0806786C: .4byte gUnk_08110EF0 -_08067870: - lsrs r2, r2, #0x10 -_08067872: - adds r0, r4, #0 - adds r0, #0x6c - movs r1, #0 - strh r2, [r0] - ldrb r0, [r4, #0xe] - adds r0, r0, r2 - adds r2, r4, #0 - adds r2, #0x6e - strh r0, [r2] - strb r1, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x75 - strb r1, [r0] - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x1e - adds r1, r4, #0 - adds r1, #0x74 - strb r0, [r1] - subs r1, #0xb - movs r0, #0xff - strb r0, [r1] - adds r0, r4, #0 - bl sub_08067B08 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080678AC -sub_080678AC: @ 0x080678AC - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_08067D20 - cmp r0, #0 - beq _080678C2 - adds r0, r4, #0 - movs r1, #5 - bl sub_08067B80 - b _08067900 -_080678C2: - adds r2, r4, #0 - adds r2, #0x72 - ldrh r0, [r2] - cmp r0, #0 - beq _080678D0 - subs r0, #1 - strh r0, [r2] -_080678D0: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #1 - bne _080678EA - ldrh r0, [r2] - cmp r0, #0 - bne _080678EA - adds r0, r4, #0 - bl sub_08067AAC - b _08067900 -_080678EA: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08067900 - adds r0, r4, #0 - bl sub_08067B34 -_08067900: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08067904 -sub_08067904: @ 0x08067904 - push {r4, lr} - adds r4, r0, #0 - bl sub_08067D20 - cmp r0, #0 - beq _0806791A - adds r0, r4, #0 - movs r1, #8 - bl sub_08067B80 - b _08067978 -_0806791A: - adds r1, r4, #0 - adds r1, #0x72 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08067932 - adds r0, r4, #0 - bl sub_08067B70 - b _08067978 -_08067932: - ldrb r0, [r4, #0x15] - cmp r0, #8 - bne _08067952 - movs r1, #0x2e - ldrsh r0, [r4, r1] - adds r1, r4, #0 - adds r1, #0x6e - ldrh r1, [r1] - cmp r0, r1 - ble _0806796C - movs r0, #0x18 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x18] - subs r0, #0x59 - ands r0, r1 - b _0806796A -_08067952: - movs r0, #0x2e - ldrsh r1, [r4, r0] - adds r0, r4, #0 - adds r0, #0x6c - ldrh r0, [r0] - cmp r1, r0 - bge _0806796C - movs r0, #8 - strb r0, [r4, #0x15] - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 -_0806796A: - strb r0, [r4, #0x18] -_0806796C: - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08067978: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0806797C -sub_0806797C: @ 0x0806797C - 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 _08067998 - adds r0, r4, #0 - bl sub_08067B08 -_08067998: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0806799C -sub_0806799C: @ 0x0806799C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldr r0, _080679C0 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _080679BE - adds r0, r4, #0 - bl sub_08067B08 - adds r0, r4, #0 - movs r1, #1 - bl sub_0805E3A0 -_080679BE: - pop {r4, pc} - .align 2, 0 -_080679C0: .4byte gTextBox - - thumb_func_start sub_080679C4 -sub_080679C4: @ 0x080679C4 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - beq _080679E6 - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _080679E6 - adds r0, r4, #0 - bl sub_08067D20 - cmp r0, #0 - bne _080679EE -_080679E6: - adds r0, r4, #0 - bl sub_08067C24 - b _08067A0A -_080679EE: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_08067BD4 - adds r0, r4, #0 - bl sub_08067D74 - cmp r0, #0 - beq _08067A0A - adds r0, r4, #0 - bl sub_08067C18 -_08067A0A: - pop {r4, pc} - - thumb_func_start sub_08067A0C -sub_08067A0C: @ 0x08067A0C - 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 _08067A44 - adds r0, r4, #0 - bl sub_08067D20 - cmp r0, #0 - beq _08067A3C - adds r0, r4, #0 - movs r1, #5 - bl sub_08067B80 - ldrb r0, [r4, #0xe] - adds r0, #0x14 - strb r0, [r4, #0xe] - b _08067A76 -_08067A3C: - adds r0, r4, #0 - bl sub_08067C24 - b _08067A76 -_08067A44: - movs r2, #7 - ands r2, r1 - cmp r2, #0 - beq _08067A70 - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldr r1, _08067A6C @ =gUnk_08111154 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x19 - lsrs r0, r0, #0x1f - lsls r0, r0, #2 - subs r0, #1 - adds r0, r2, r0 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r4, #0x48] - b _08067A76 - .align 2, 0 -_08067A6C: .4byte gUnk_08111154 -_08067A70: - adds r0, r4, #0 - bl sub_08067DDC -_08067A76: - pop {r4, pc} - - thumb_func_start sub_08067A78 -sub_08067A78: @ 0x08067A78 - 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 _08067A94 - adds r0, r4, #0 - bl sub_08067AAC -_08067A94: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08067A98 -sub_08067A98: @ 0x08067A98 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _08067AAA - adds r0, r4, #0 - bl sub_08067B08 -_08067AAA: - pop {r4, pc} - - thumb_func_start sub_08067AAC -sub_08067AAC: @ 0x08067AAC - push {r4, lr} - adds r4, r0, #0 - movs r0, #2 - strb r0, [r4, #0xc] - bl Random - ldr r2, _08067AFC @ =gUnk_081110FC - movs r1, #3 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r0, [r1] - adds r1, r4, #0 - adds r1, #0x72 - strh r0, [r1] - ldrb r1, [r4, #0x15] - lsrs r1, r1, #4 - movs r0, #1 - eors r1, r0 - ands r1, r0 - lsls r1, r1, #6 - ldrb r2, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #3 - bl sub_08067DCC - ldr r0, _08067B00 @ =gUnk_0811110C - ldrb r2, [r0, #2] - ldr r3, _08067B04 @ =gUnk_0811110F - adds r0, r4, #0 - movs r1, #0 - bl sub_08078850 - pop {r4, pc} - .align 2, 0 -_08067AFC: .4byte gUnk_081110FC -_08067B00: .4byte gUnk_0811110C -_08067B04: .4byte gUnk_0811110F - - thumb_func_start sub_08067B08 -sub_08067B08: @ 0x08067B08 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - bl Random - ldr r2, _08067B30 @ =gUnk_08111104 - movs r1, #3 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r0, [r1] - adds r1, r4, #0 - adds r1, #0x72 - strh r0, [r1] - adds r0, r4, #0 - bl sub_08067B34 - pop {r4, pc} - .align 2, 0 -_08067B30: .4byte gUnk_08111104 - - thumb_func_start sub_08067B34 -sub_08067B34: @ 0x08067B34 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - bl sub_08067DCC - bl Random - movs r1, #0x30 - ands r0, r1 - adds r0, #0xb4 - adds r1, r4, #0 - adds r1, #0x59 - strb r0, [r1] - ldr r1, _08067B68 @ =gUnk_0811110C - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x19 - lsrs r0, r0, #0x1f - adds r0, r0, r1 - ldrb r2, [r0] - ldr r3, _08067B6C @ =gUnk_0811110F - adds r0, r4, #0 - movs r1, #0 - bl sub_08078850 - pop {r4, pc} - .align 2, 0 -_08067B68: .4byte gUnk_0811110C -_08067B6C: .4byte gUnk_0811110F - - thumb_func_start sub_08067B70 -sub_08067B70: @ 0x08067B70 - push {lr} - movs r1, #3 - strb r1, [r0, #0xc] - movs r1, #4 - bl sub_08067DCC - pop {pc} - .align 2, 0 - - thumb_func_start sub_08067B80 -sub_08067B80: @ 0x08067B80 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - movs r0, #5 - strb r0, [r5, #0xc] - movs r0, #0x14 - strb r0, [r5, #0xe] - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x1e - adds r1, r5, #0 - adds r1, #0x74 - strb r0, [r1] - adds r0, r5, #0 - adds r1, r4, #0 - bl InitAnimationForceUpdate - adds r0, r5, #0 - bl sub_08067DDC - ldr r0, _08067BC4 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r5, r2] - movs r2, #0x2e - ldrsh r0, [r0, r2] - cmp r1, r0 - bge _08067BC8 - ldrb r0, [r5, #0x18] - movs r1, #0x40 - orrs r0, r1 - b _08067BD0 - .align 2, 0 -_08067BC4: .4byte gPlayerEntity -_08067BC8: - ldrb r1, [r5, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 -_08067BD0: - strb r0, [r5, #0x18] - pop {r4, r5, pc} - - thumb_func_start sub_08067BD4 -sub_08067BD4: @ 0x08067BD4 - push {r4, lr} - adds r2, r0, #0 - ldrb r3, [r2, #0x18] - lsls r0, r3, #0x19 - cmp r0, #0 - bge _08067BFC - movs r1, #0x2e - ldrsh r0, [r2, r1] - subs r0, #4 - ldr r1, _08067BF8 @ =gPlayerEntity - movs r4, #0x2e - ldrsh r1, [r1, r4] - cmp r0, r1 - ble _08067C12 - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r3 - b _08067C10 - .align 2, 0 -_08067BF8: .4byte gPlayerEntity -_08067BFC: - movs r1, #0x2e - ldrsh r0, [r2, r1] - adds r0, #4 - ldr r1, _08067C14 @ =gPlayerEntity - movs r4, #0x2e - ldrsh r1, [r1, r4] - cmp r0, r1 - bge _08067C12 - movs r0, #0x40 - orrs r0, r3 -_08067C10: - strb r0, [r2, #0x18] -_08067C12: - pop {r4, pc} - .align 2, 0 -_08067C14: .4byte gPlayerEntity - - thumb_func_start sub_08067C18 -sub_08067C18: @ 0x08067C18 - push {lr} - movs r1, #6 - strb r1, [r0, #0xc] - bl InitAnimationForceUpdate - pop {pc} - - thumb_func_start sub_08067C24 -sub_08067C24: @ 0x08067C24 - push {r4, lr} - adds r4, r0, #0 - movs r0, #7 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #0x14 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08067DDC - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - pop {r4, pc} - - thumb_func_start sub_08067C44 -sub_08067C44: @ 0x08067C44 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08067C6C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - rsbs r0, r0, #0 - lsrs r5, r0, #0x1f - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - cmp r5, r0 - beq _08067C7C - cmp r5, #0 - bne _08067C70 - adds r0, r4, #0 - bl sub_08078778 - b _08067C7C - .align 2, 0 -_08067C6C: .4byte gPlayerState -_08067C70: - adds r0, r4, #0 - adds r0, #0x68 - ldrb r1, [r0] - adds r0, r4, #0 - bl sub_080787A8 -_08067C7C: - adds r0, r4, #0 - adds r0, #0x69 - strb r5, [r0] - subs r0, #0x30 - movs r1, #0 - ldrsb r1, [r0, r1] - adds r5, r0, #0 - cmp r1, #0 - beq _08067D1C - ldr r1, _08067CB4 @ =gPlayerEntity - adds r0, r4, #0 - bl sub_0806FCA0 - adds r2, r0, #0 - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0 - beq _08067CA6 - cmp r0, #3 - beq _08067CB8 -_08067CA6: - cmp r2, #2 - bne _08067CDA - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate - b _08067CEC - .align 2, 0 -_08067CB4: .4byte gPlayerEntity -_08067CB8: - cmp r2, #1 - bne _08067CC4 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - b _08067CD4 -_08067CC4: - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x19 - lsrs r0, r0, #0x1f - cmp r0, #3 - bne _08067CD6 - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 -_08067CD4: - strb r0, [r4, #0x18] -_08067CD6: - cmp r2, #2 - beq _08067CE4 -_08067CDA: - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _08067CEC -_08067CE4: - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_08067CEC: - movs r0, #0 - ldrsb r0, [r5, r0] - cmp r0, #2 - bne _08067D00 - movs r0, #8 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0806F118 - b _08067D12 -_08067D00: - movs r0, #4 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_08067790 - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 -_08067D12: - movs r0, #0 - strb r0, [r5] - movs r0, #0xd2 - bl SoundReq -_08067D1C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08067D20 -sub_08067D20: @ 0x08067D20 - push {r4, r5, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x75 - ldrb r0, [r1] - cmp r0, #0 - beq _08067D34 - subs r0, #1 - strb r0, [r1] - b _08067D70 -_08067D34: - movs r0, #2 - bl sub_08049DF4 - adds r2, r0, #0 - cmp r2, #0 - beq _08067D70 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x19 - movs r3, #0x28 - cmp r0, #0 - bge _08067D4C - movs r3, #0x10 -_08067D4C: - movs r0, #0x2e - ldrsh r1, [r2, r0] - movs r5, #0x2e - ldrsh r0, [r4, r5] - subs r0, r0, r3 - subs r1, r1, r0 - cmp r1, #0x30 - bhi _08067D70 - movs r1, #0x32 - ldrsh r0, [r2, r1] - adds r0, #4 - movs r2, #0x32 - ldrsh r1, [r4, r2] - subs r0, r0, r1 - cmp r0, #0x38 - bhi _08067D70 - movs r0, #1 - b _08067D72 -_08067D70: - movs r0, #0 -_08067D72: - pop {r4, r5, pc} - - thumb_func_start sub_08067D74 -sub_08067D74: @ 0x08067D74 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #5 - beq _08067DC8 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08067D88 - subs r0, #1 - strb r0, [r4, #0xe] -_08067D88: - movs r0, #2 - bl sub_08049DF4 - adds r2, r0, #0 - cmp r2, #0 - beq _08067DC8 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x19 - movs r3, #0x18 - cmp r0, #0 - bge _08067DA0 - movs r3, #8 -_08067DA0: - movs r0, #0x2e - ldrsh r1, [r2, r0] - movs r5, #0x2e - ldrsh r0, [r4, r5] - subs r0, r0, r3 - subs r1, r1, r0 - cmp r1, #0x1e - bhi _08067DC8 - movs r1, #0x32 - ldrsh r0, [r2, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - subs r0, r0, r1 - cmp r0, #0x16 - bhi _08067DC8 - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _08067DC8 - movs r0, #1 - b _08067DCA -_08067DC8: - movs r0, #0 -_08067DCA: - pop {r4, r5, pc} - - thumb_func_start sub_08067DCC -sub_08067DCC: @ 0x08067DCC - push {lr} - adds r2, r0, #0 - adds r2, #0x71 - strb r1, [r2] - bl InitAnimationForceUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_08067DDC -sub_08067DDC: @ 0x08067DDC - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - movs r1, #0 - strb r0, [r2, #0x10] - adds r0, r2, #0 - adds r0, #0x41 - strb r1, [r0] - subs r0, #4 - strb r1, [r0] - ldr r0, _08067DF8 @ =gUnk_08110EF0 - str r0, [r2, #0x48] - bx lr - .align 2, 0 -_08067DF8: .4byte gUnk_08110EF0 - - thumb_func_start Cat_Fusion -Cat_Fusion: @ 0x08067DFC - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _08067E22 - adds r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - movs r1, #5 - bl InitAnimationForceUpdate - b _08067E28 -_08067E22: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_08067E28: - pop {pc} - .align 2, 0 diff --git a/asm/dog.s b/asm/dog.s deleted file mode 100644 index 5dddb0a4..00000000 --- a/asm/dog.s +++ /dev/null @@ -1,887 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Dog -Dog: @ 0x08069B1C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08069B40 @ =gUnk_08111D88 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0806ED78 - adds r0, r4, #0 - bl sub_08069FE8 - pop {r4, pc} - .align 2, 0 -_08069B40: .4byte gUnk_08111D88 - - thumb_func_start sub_08069B44 -sub_08069B44: @ 0x08069B44 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_08069EF0 - cmp r0, #0 - beq _08069C30 - adds r0, r5, #0 - bl sub_0805ACC0 - cmp r0, #0 - bne _08069B64 - movs r0, #0x2e - ldrsh r1, [r5, r0] - movs r2, #0x32 - ldrsh r4, [r5, r2] - b _08069B68 -_08069B64: - lsrs r1, r0, #0x10 - adds r4, r0, #0 -_08069B68: - ldrb r0, [r5, #0xe] - movs r3, #0x20 - cmp r0, #0 - beq _08069B72 - adds r3, r0, #0 -_08069B72: - subs r0, r1, r3 - adds r2, r5, #0 - adds r2, #0x6e - strh r0, [r2] - adds r1, r1, r3 - adds r0, r5, #0 - adds r0, #0x6c - strh r1, [r0] - adds r1, r4, #0 - subs r1, #8 - adds r0, #4 - strh r1, [r0] - adds r0, r4, #0 - adds r0, #8 - adds r2, #4 - strh r0, [r2] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - movs r0, #0x1e - strb r0, [r5, #0xe] - movs r4, #2 - strb r4, [r5, #0x14] - adds r1, r5, #0 - adds r1, #0x6a - movs r0, #0xff - strb r0, [r1] - adds r0, r5, #0 - bl sub_0801E99C - adds r1, r5, #0 - adds r1, #0x74 - strb r0, [r1] - adds r0, r5, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r5, #0 - movs r1, #0xa - bl InitAnimationForceUpdate - ldrb r0, [r5, #0x10] - ands r4, r0 - cmp r4, #0 - beq _08069BD2 - adds r0, r5, #0 - bl sub_0807DD50 -_08069BD2: - ldrb r0, [r5, #0xa] - cmp r0, #0 - bne _08069BF2 - ldr r0, _08069C34 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08069BF2 - movs r0, #0x36 - bl GetInventoryValue - cmp r0, #2 - beq _08069BF2 - movs r0, #4 - strb r0, [r5, #0xc] -_08069BF2: - ldrb r0, [r5, #0xa] - cmp r0, #2 - bne _08069C30 - movs r0, #0xcf - bl CheckLocalFlag - cmp r0, #0 - bne _08069C30 - ldr r0, _08069C38 @ =0x00004072 - movs r6, #0x2e - ldrsh r1, [r5, r6] - ldr r3, _08069C3C @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - adds r3, #8 - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile -_08069C30: - pop {r4, r5, r6, pc} - .align 2, 0 -_08069C34: .4byte gPlayerState -_08069C38: .4byte 0x00004072 -_08069C3C: .4byte gRoomControls - - thumb_func_start sub_08069C40 -sub_08069C40: @ 0x08069C40 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_08069F90 - cmp r0, #0 - beq _08069C80 - ldr r0, _08069C68 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08069C6C - adds r0, r4, #0 - bl sub_08069CB8 - b _08069C7A - .align 2, 0 -_08069C68: .4byte gPlayerState -_08069C6C: - adds r0, r4, #0 - bl GetAnimationState - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_08069D00 -_08069C7A: - movs r0, #0x1e - strb r0, [r4, #0xe] - b _08069CB2 -_08069C80: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08069CB2 - movs r0, #2 - strb r0, [r4, #0xc] - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x1e - strb r0, [r4, #0xe] - bl Random - ldr r2, _08069CB4 @ =gUnk_08111DA8 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_08069F6C -_08069CB2: - pop {r4, pc} - .align 2, 0 -_08069CB4: .4byte gUnk_08111DA8 - - thumb_func_start sub_08069CB8 -sub_08069CB8: @ 0x08069CB8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _08069CF8 @ =gPlayerEntity - bl GetFacingDirection - ldr r2, _08069CFC @ =gUnk_08111DB0 - ldrb r1, [r4, #0x14] - lsls r1, r1, #5 - adds r0, r0, r1 - adds r0, r0, r2 - ldrb r1, [r0] - lsrs r0, r1, #6 - strb r0, [r4, #0x14] - movs r0, #0x3f - ands r1, r0 - adds r5, r4, #0 - adds r5, #0x6b - strb r1, [r5] - adds r0, r4, #0 - bl sub_0806A028 - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - ldrb r1, [r5] - cmp r0, r1 - beq _08069CF6 - ldrb r1, [r5] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_08069CF6: - pop {r4, r5, pc} - .align 2, 0 -_08069CF8: .4byte gPlayerEntity -_08069CFC: .4byte gUnk_08111DB0 - - thumb_func_start sub_08069D00 -sub_08069D00: @ 0x08069D00 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x6b - movs r7, #8 - strb r7, [r5] - bl sub_0806A028 - adds r6, r4, #0 - adds r6, #0x58 - ldrb r0, [r6] - cmp r0, #0x1f - bls _08069D2A - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08069D4E - strb r7, [r5] -_08069D2A: - bl Random - ldr r1, _08069D50 @ =0x000001FF - ands r1, r0 - cmp r1, #2 - bhi _08069D3C - adds r0, r4, #0 - bl sub_08069FBC -_08069D3C: - ldrb r2, [r6] - ldrb r1, [r5] - ldrb r0, [r4, #0x14] - adds r1, r1, r0 - cmp r2, r1 - beq _08069D4E - adds r0, r4, #0 - bl InitAnimationForceUpdate -_08069D4E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08069D50: .4byte 0x000001FF - - thumb_func_start sub_08069D54 -sub_08069D54: @ 0x08069D54 - push {r4, lr} - adds r4, r0, #0 - bl sub_08069F90 - cmp r0, #0 - bne _08069DD8 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _08069DD8 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl ProcessMovement - ldrh r1, [r4, #0x2a] - movs r0, #0x2e - ldrsh r2, [r4, r0] - adds r0, r4, #0 - adds r0, #0x6e - ldrh r0, [r0] - cmp r2, r0 - bge _08069D92 - adds r0, #1 - strh r0, [r4, #0x2e] - movs r1, #0xe0 - lsls r1, r1, #4 - b _08069DA4 -_08069D92: - adds r0, r4, #0 - adds r0, #0x6c - ldrh r0, [r0] - cmp r2, r0 - ble _08069DA4 - subs r0, #1 - strh r0, [r4, #0x2e] - movs r1, #0xe0 - lsls r1, r1, #8 -_08069DA4: - movs r0, #0x32 - ldrsh r2, [r4, r0] - adds r0, r4, #0 - adds r0, #0x70 - ldrh r0, [r0] - cmp r2, r0 - bge _08069DBA - adds r0, #1 - strh r0, [r4, #0x32] - movs r1, #0xe - b _08069DCA -_08069DBA: - adds r0, r4, #0 - adds r0, #0x72 - ldrh r0, [r0] - cmp r2, r0 - ble _08069DCA - subs r0, #1 - strh r0, [r4, #0x32] - movs r1, #0xe0 -_08069DCA: - adds r0, r4, #0 - bl sub_0800417E - adds r0, r4, #0 - bl sub_08069F6C - b _08069DF6 -_08069DD8: - adds r0, r4, #0 - bl sub_08069F90 - cmp r0, #0 - beq _08069DE6 - movs r0, #1 - b _08069DE8 -_08069DE6: - movs r0, #3 -_08069DE8: - strb r0, [r4, #0xc] - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x1e - strb r0, [r4, #0xe] -_08069DF6: - pop {r4, pc} - - thumb_func_start sub_08069DF8 -sub_08069DF8: @ 0x08069DF8 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_08069F90 - cmp r0, #0 - beq _08069E0E - movs r0, #1 - b _08069E34 -_08069E0E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _08069E22 - adds r0, r4, #0 - bl sub_08069D00 - b _08069E42 -_08069E22: - bl Random - movs r1, #0xff - ands r1, r0 - cmp r1, #0x2f - bhi _08069E32 - movs r0, #2 - b _08069E34 -_08069E32: - movs r0, #3 -_08069E34: - strb r0, [r4, #0xc] - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x1e - strb r0, [r4, #0xe] -_08069E42: - pop {r4, pc} - - thumb_func_start sub_08069E44 -sub_08069E44: @ 0x08069E44 - push {lr} - movs r1, #0 - bl sub_0807DD94 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08069E50 -sub_08069E50: @ 0x08069E50 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - bl GetAnimationState - strb r0, [r4, #0x14] - adds r5, r4, #0 - adds r5, #0x6b - movs r7, #8 - strb r7, [r5] - adds r0, r4, #0 - bl sub_0806A028 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r6, r4, #0 - adds r6, #0x58 - ldrb r0, [r6] - cmp r0, #0x1f - bls _08069E88 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08069EC8 - strb r7, [r5] -_08069E88: - adds r0, r4, #0 - bl sub_08069FBC - ldrb r2, [r6] - ldrb r1, [r5] - ldrb r0, [r4, #0x14] - adds r1, r1, r0 - cmp r2, r1 - beq _08069EA0 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_08069EA0: - movs r0, #0x36 - bl GetInventoryValue - cmp r0, #2 - bne _08069EC8 - movs r0, #7 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0x29 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_080788E0 - movs r0, #0xd1 - bl EnqueueSFX - movs r0, #0xcd - bl EnqueueSFX -_08069EC8: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08069ECC -sub_08069ECC: @ 0x08069ECC - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _08069EDC - movs r0, #1 - strb r0, [r4, #0xc] -_08069EDC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08069EE0 -sub_08069EE0: @ 0x08069EE0 - push {lr} - bl UpdateAnimationSingleFrame - pop {pc} - - thumb_func_start sub_08069EE8 -sub_08069EE8: @ 0x08069EE8 - movs r1, #5 - strb r1, [r0, #0xc] - bx lr - .align 2, 0 - - thumb_func_start sub_08069EF0 -sub_08069EF0: @ 0x08069EF0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - lsls r1, r0, #1 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _08069F20 @ =gUnk_08111D58 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08069F28 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r1, _08069F24 @ =gUnk_08111E30 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - movs r0, #1 - b _08069F2A - .align 2, 0 -_08069F20: .4byte gUnk_08111D58 -_08069F24: .4byte gUnk_08111E30 -_08069F28: - movs r0, #0 -_08069F2A: - pop {r4, pc} - - thumb_func_start Dog_Head -Dog_Head: @ 0x08069F2C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - cmp r2, #0 - beq _08069F46 - adds r0, r4, #0 - adds r0, #0x68 - ldrh r0, [r0] - adds r2, r2, r0 -_08069F46: - subs r2, #1 - 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} - - thumb_func_start sub_08069F6C -sub_08069F6C: @ 0x08069F6C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0x15] - bl sub_0806F5A4 - strb r0, [r4, #0x14] - ldrb r0, [r4, #0x14] - adds r1, r0, #4 - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r1, r0 - beq _08069F8C - adds r0, r4, #0 - bl InitAnimationForceUpdate -_08069F8C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08069F90 -sub_08069F90: @ 0x08069F90 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #2 - bne _08069FA8 - movs r0, #0xcf - bl CheckLocalFlag - cmp r0, #0 - bne _08069FA8 - movs r0, #1 - b _08069FB4 -_08069FA8: - ldr r1, _08069FB8 @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #0x14 - movs r3, #0x14 - bl sub_080041A0 -_08069FB4: - pop {r4, pc} - .align 2, 0 -_08069FB8: .4byte gPlayerEntity - - thumb_func_start sub_08069FBC -sub_08069FBC: @ 0x08069FBC - push {lr} - adds r2, r0, #0 - ldr r0, _08069FE4 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - movs r1, #0x20 - cmp r0, #0 - beq _08069FD0 - movs r1, #0x24 -_08069FD0: - ldrb r0, [r2, #0x14] - cmp r0, #1 - beq _08069FDA - cmp r0, #3 - bne _08069FE0 -_08069FDA: - adds r0, r2, #0 - adds r0, #0x6b - strb r1, [r0] -_08069FE0: - pop {pc} - .align 2, 0 -_08069FE4: .4byte gPlayerState - - thumb_func_start sub_08069FE8 -sub_08069FE8: @ 0x08069FE8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _0806A010 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - rsbs r0, r0, #0 - lsrs r5, r0, #0x1f - adds r0, r4, #0 - adds r0, #0x6a - ldrb r0, [r0] - cmp r5, r0 - beq _0806A020 - cmp r5, #0 - bne _0806A014 - adds r0, r4, #0 - bl sub_08078778 - b _0806A020 - .align 2, 0 -_0806A010: .4byte gPlayerState -_0806A014: - adds r0, r4, #0 - adds r0, #0x74 - ldrb r1, [r0] - adds r0, r4, #0 - bl sub_080787A8 -_0806A020: - adds r0, r4, #0 - adds r0, #0x6a - strb r5, [r0] - pop {r4, r5, pc} - - thumb_func_start sub_0806A028 -sub_0806A028: @ 0x0806A028 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x39 - movs r2, #0 - ldrsb r2, [r0, r2] - cmp r2, #0 - beq _0806A07E - ldr r0, _0806A054 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0806A060 - cmp r2, #2 - bne _0806A058 - movs r0, #6 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0806F118 - b _0806A076 - .align 2, 0 -_0806A054: .4byte gPlayerState -_0806A058: - adds r0, r4, #0 - bl sub_0806A080 - b _0806A076 -_0806A060: - adds r0, r4, #0 - bl sub_08069FBC - adds r0, r4, #0 - bl sub_0806A080 - movs r0, #0xd1 - bl SoundReq - bl sub_080791D0 -_0806A076: - adds r1, r4, #0 - adds r1, #0x39 - movs r0, #0 - strb r0, [r1] -_0806A07E: - pop {r4, pc} - - thumb_func_start sub_0806A080 -sub_0806A080: @ 0x0806A080 - push {lr} - ldrb r2, [r0, #0xb] - lsls r1, r2, #2 - adds r1, r1, r2 - lsls r1, r1, #4 - ldr r2, _0806A09C @ =gSave - ldrb r2, [r2, #8] - lsls r2, r2, #3 - ldr r3, _0806A0A0 @ =gUnk_08111E34 - adds r2, r2, r3 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806A09C: .4byte gSave -_0806A0A0: .4byte gUnk_08111E34 - - thumb_func_start sub_0806A0A4 -sub_0806A0A4: @ 0x0806A0A4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, _0806A0F8 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0806A100 - movs r5, #4 - movs r0, #0xcf - bl CheckLocalFlag - cmp r0, #0 - bne _0806A120 - movs r5, #3 - movs r0, #0xcf - bl SetLocalFlag - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _0806A0FC @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r6, #0x32 - ldrsh r1, [r4, r6] - ldrh r2, [r2, #8] - adds r2, #8 - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - b _0806A120 - .align 2, 0 -_0806A0F8: .4byte gPlayerState -_0806A0FC: .4byte gRoomControls -_0806A100: - movs r5, #2 - movs r0, #0xcf - bl CheckLocalFlag - cmp r0, #0 - bne _0806A120 - movs r5, #1 - movs r0, #0xdb - bl CheckLocalFlag - cmp r0, #0 - bne _0806A120 - movs r5, #0 - movs r0, #0xdb - bl SetLocalFlag -_0806A120: - ldr r2, _0806A13C @ =gUnk_08111F74 - ldr r0, _0806A140 @ =gSave - ldrb r1, [r0, #8] - lsls r0, r1, #2 - adds r0, r0, r1 - adds r0, r0, r5 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - adds r1, r4, #0 - bl TextboxNoOverlap - pop {r4, r5, r6, pc} - .align 2, 0 -_0806A13C: .4byte gUnk_08111F74 -_0806A140: .4byte gSave - - thumb_func_start sub_0806A144 -sub_0806A144: @ 0x0806A144 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #4 - ldr r0, _0806A18C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0806A17A - movs r4, #3 - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _0806A17A - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - beq _0806A17A - movs r0, #0x85 - bl CheckLocalFlag - movs r4, #2 - cmp r0, #0 - bne _0806A17A - movs r4, #1 -_0806A17A: - ldr r0, _0806A190 @ =gUnk_08111FD8 - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_0806A18C: .4byte gPlayerState -_0806A190: .4byte gUnk_08111FD8 - - thumb_func_start Dog_Fusion -Dog_Fusion: @ 0x0806A194 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806A1CE - adds r0, r4, #0 - bl sub_08069EF0 - cmp r0, #0 - beq _0806A1D4 - 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, #0x23 - bl InitializeAnimation - b _0806A1D4 -_0806A1CE: - adds r0, r4, #0 - bl GetNextFrame -_0806A1D4: - pop {r4, pc} - .align 2, 0 diff --git a/asm/festari.s b/asm/festari.s deleted file mode 100644 index ea917d79..00000000 --- a/asm/festari.s +++ /dev/null @@ -1,106 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805FF2C -sub_0805FF2C: @ 0x0805FF2C - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldr r0, [r5, #8] - ldr r1, _0805FF60 @ =0xFFF00004 - ands r1, r0 - eors r0, r1 - str r0, [r5, #8] - cmp r1, #0 - beq _0805FF94 - movs r6, #0x80 - lsls r6, r6, #0xd - adds r3, r4, #0 - adds r3, #0x80 -_0805FF48: - mvns r0, r1 - adds r2, r0, #1 - ands r2, r1 - eors r1, r2 - cmp r2, r6 - beq _0805FF8C - cmp r2, r6 - bhi _0805FF64 - cmp r2, #4 - beq _0805FF76 - b _0805FF90 - .align 2, 0 -_0805FF60: .4byte 0xFFF00004 -_0805FF64: - movs r0, #0x80 - lsls r0, r0, #0xe - cmp r2, r0 - beq _0805FF7A - movs r0, #0x80 - lsls r0, r0, #0xf - cmp r2, r0 - beq _0805FF7E - b _0805FF90 -_0805FF76: - movs r0, #9 - b _0805FF8E -_0805FF7A: - movs r0, #0xa - b _0805FF8E -_0805FF7E: - ldrb r0, [r4, #0x14] - cmp r0, #2 - bne _0805FF88 - movs r0, #0xb - b _0805FF8E -_0805FF88: - movs r0, #0xc - b _0805FF8E -_0805FF8C: - movs r0, #8 -_0805FF8E: - strh r0, [r3] -_0805FF90: - cmp r1, #0 - bne _0805FF48 -_0805FF94: - adds r0, r4, #0 - adds r1, r5, #0 - bl HandlePostScriptActions - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start Festari_Fusion -Festari_Fusion: @ 0x0805FFA0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805FFCE - 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, #8 - bl InitAnimationForceUpdate - b _0805FFD4 -_0805FFCE: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_0805FFD4: - pop {r4, pc} - .align 2, 0 diff --git a/asm/fusionMenuNPC.s b/asm/fusionMenuNPC.s deleted file mode 100644 index dee904fa..00000000 --- a/asm/fusionMenuNPC.s +++ /dev/null @@ -1,53 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start FusionMenuNPC -FusionMenuNPC: @ 0x0806E8CC - push {lr} - adds r3, r0, #0 - ldr r2, _0806E8EC @ =gNPCFunctions - ldrb r1, [r3, #0xf] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r2, #8 - adds r0, r0, r2 - ldr r1, [r0] - cmp r1, #0 - beq _0806E8F0 - adds r0, r3, #0 - bl _call_via_r1 - b _0806E8F4 - .align 2, 0 -_0806E8EC: .4byte gNPCFunctions -_0806E8F0: - bl DeleteThisEntity -_0806E8F4: - pop {pc} - .align 2, 0 - - thumb_func_start FusionMenuNPC_Head -FusionMenuNPC_Head: @ 0x0806E8F8 - push {lr} - adds r3, r0, #0 - ldr r2, _0806E918 @ =gNPCFunctions - ldrb r1, [r3, #0xf] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r2, #4 - adds r0, r0, r2 - ldr r1, [r0] - cmp r1, #0 - beq _0806E916 - adds r0, r3, #0 - bl _call_via_r1 -_0806E916: - pop {pc} - .align 2, 0 -_0806E918: .4byte gNPCFunctions diff --git a/asm/gina.s b/asm/gina.s deleted file mode 100644 index f6471f82..00000000 --- a/asm/gina.s +++ /dev/null @@ -1,110 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Gina -Gina: @ 0x0806C13C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0806C182 - cmp r0, #1 - bgt _0806C150 - cmp r0, #0 - beq _0806C156 - b _0806C1D2 -_0806C150: - cmp r0, #2 - beq _0806C1BE - b _0806C1D2 -_0806C156: - 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] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - adds r0, r4, #0 - bl sub_0807DD50 - b _0806C1D2 -_0806C182: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _0806C1B4 - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - ldr r1, _0806C1B0 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 - b _0806C1D2 - .align 2, 0 -_0806C1B0: .4byte gPlayerEntity -_0806C1B4: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - b _0806C1D2 -_0806C1BE: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806C1D2 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x88 - bl SetLocalFlag -_0806C1D2: - pop {r4, pc} - - thumb_func_start Gina_Fusion -Gina_Fusion: @ 0x0806C1D4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _0806C1FA - adds r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - movs r1, #2 - bl InitAnimationForceUpdate - b _0806C200 -_0806C1FA: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_0806C200: - pop {pc} - .align 2, 0 diff --git a/asm/goronMerchant.s b/asm/goronMerchant.s deleted file mode 100644 index 6f9d3259..00000000 --- a/asm/goronMerchant.s +++ /dev/null @@ -1,61 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08069718 -sub_08069718: @ 0x08069718 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r7, r1, #0 - bl sub_080696BC - adds r6, r0, #0 - ldr r0, _08069754 @ =gSave - adds r0, #0xc0 - ldrh r0, [r0] - cmp r6, r0 - bgt _08069764 - ldr r5, _08069758 @ =gRoomVars - ldrb r0, [r5, #7] - bl sub_0801E7D0 - cmp r0, #0x62 - bhi _0806975C - rsbs r0, r6, #0 - bl ModRupees - ldrb r1, [r5, #7] - movs r0, #0x5c - movs r2, #0 - bl sub_080A7C18 - movs r0, #0 - strb r0, [r5, #6] - strb r0, [r5, #7] - movs r0, #1 - b _0806976E - .align 2, 0 -_08069754: .4byte gSave -_08069758: .4byte gRoomVars -_0806975C: - ldr r0, _08069760 @ =0x00002C1F - b _08069766 - .align 2, 0 -_08069760: .4byte 0x00002C1F -_08069764: - ldr r0, _0806977C @ =0x00002C1E -_08069766: - adds r1, r4, #0 - bl TextboxNoOverlap - movs r0, #0 -_0806976E: - str r0, [r7, #0x14] - ldr r2, _08069780 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0806977C: .4byte 0x00002C1E -_08069780: .4byte gActiveScriptInfo diff --git a/asm/kingGustaf.s b/asm/kingGustaf.s deleted file mode 100644 index 290e3d09..00000000 --- a/asm/kingGustaf.s +++ /dev/null @@ -1,79 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start KingGustaf -KingGustaf: @ 0x0806C0B0 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - adds r5, r0, #0 - cmp r5, #0 - bne _0806C104 - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x19] - movs r0, #0xd - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD50 - ldr r1, _0806C100 @ =gScreen - adds r2, r1, #0 - adds r2, #0x66 - movs r0, #0xfd - lsls r0, r0, #6 - strh r0, [r2] - adds r1, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - strh r0, [r4, #0x24] - str r5, [r4, #0x20] - b _0806C134 - .align 2, 0 -_0806C100: .4byte gScreen -_0806C104: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - movs r1, #0x24 - ldrsh r0, [r4, r1] - lsls r3, r0, #8 - ldr r0, [r4, #0x20] - adds r3, r3, r0 - asrs r3, r3, #0x10 - cmp r3, #0x10 - ble _0806C11E - movs r3, #0x10 -_0806C11E: - cmp r3, #3 - bgt _0806C124 - movs r3, #4 -_0806C124: - ldr r2, _0806C138 @ =gScreen - lsls r1, r3, #8 - movs r0, #0x10 - subs r0, r0, r3 - orrs r1, r0 - adds r2, #0x68 - strh r1, [r2] - strh r1, [r4, #0x24] -_0806C134: - pop {r4, r5, pc} - .align 2, 0 -_0806C138: .4byte gScreen diff --git a/asm/npc/cat.s b/asm/npc/cat.s deleted file mode 100644 index 75890472..00000000 --- a/asm/npc/cat.s +++ /dev/null @@ -1,26 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08067790 -sub_08067790: @ 0x08067790 - push {lr} - ldrb r2, [r0, #0xa] - lsls r1, r2, #2 - adds r1, r1, r2 - lsls r1, r1, #4 - ldr r2, _080677AC @ =gSave - ldrb r2, [r2, #8] - lsls r2, r2, #3 - ldr r3, _080677B0 @ =gUnk_08110EF8 - adds r2, r2, r3 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_080677AC: .4byte gSave -_080677B0: .4byte gUnk_08110EF8 diff --git a/asm/npc26.s b/asm/npc26.s deleted file mode 100644 index 76b61e45..00000000 --- a/asm/npc26.s +++ /dev/null @@ -1,137 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start NPC26 -NPC26: @ 0x08066978 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0806699C - ldr r0, _08066998 @ =gUnk_081106E0 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _080669B2 - .align 2, 0 -_08066998: .4byte gUnk_081106E0 -_0806699C: - ldr r0, _080669B4 @ =gUnk_081106D4 - 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 -_080669B2: - pop {r4, pc} - .align 2, 0 -_080669B4: .4byte gUnk_081106D4 - - thumb_func_start sub_080669B8 -sub_080669B8: @ 0x080669B8 - 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 InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_08078778 - pop {r4, pc} - - thumb_func_start sub_080669DC -sub_080669DC: @ 0x080669DC - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x28 - movs r2, #0x28 - bl sub_0806ED9C - adds r1, r0, #0 - cmp r1, #0 - bge _080669F2 - movs r1, #2 - b _08066A08 -_080669F2: - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _080669FE - movs r0, #0x10 - strb r0, [r4, #0xf] - b _08066A08 -_080669FE: - subs r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x58 - ldrb r1, [r0] -_08066A08: - adds r0, r4, #0 - bl sub_0806F078 - cmp r0, #0 - bne _08066A18 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08066A18: - adds r2, r4, #0 - adds r2, #0x39 - movs r0, #0 - ldrsb r0, [r2, r0] - cmp r0, #0 - beq _08066A2C - movs r1, #0 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r2] -_08066A2C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08066A30 -sub_08066A30: @ 0x08066A30 - movs r1, #1 - strb r1, [r0, #0xc] - bx lr - .align 2, 0 - - thumb_func_start sub_08066A38 -sub_08066A38: @ 0x08066A38 - push {lr} - movs r3, #1 - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x18] - subs r1, #5 - ands r1, r2 - orrs r1, r3 - strb r1, [r0, #0x18] - bl sub_0807DD50 - pop {pc} - - thumb_func_start sub_08066A50 -sub_08066A50: @ 0x08066A50 - push {lr} - movs r1, #0 - bl sub_0807DD94 - pop {pc} - .align 2, 0 diff --git a/asm/npc4E.s b/asm/npc4E.s deleted file mode 100644 index 53931b77..00000000 --- a/asm/npc4E.s +++ /dev/null @@ -1,35 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start NPC4F -NPC4F: @ 0x0806DD44 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806DD5A - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0xa] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_0806DD5A: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r4, #0x59 - ldrb r0, [r4] - cmp r0, #0xfe - bne _0806DD74 - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x14 - strb r0, [r4] -_0806DD74: - pop {r4, pc} - .align 2, 0 diff --git a/asm/smallTownMinish.s b/asm/smallTownMinish.s deleted file mode 100644 index b7d208bb..00000000 --- a/asm/smallTownMinish.s +++ /dev/null @@ -1,82 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start SmallTownMinish -SmallTownMinish: @ 0x0806E278 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806E2A8 - adds r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0806E2A0 @ =gUnk_081142FC - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_0807DD50 - ldr r3, _0806E2A4 @ =gUnk_08114304 - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl sub_08078850 - b _0806E2B0 - .align 2, 0 -_0806E2A0: .4byte gUnk_081142FC -_0806E2A4: .4byte gUnk_08114304 -_0806E2A8: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 -_0806E2B0: - ldr r0, _0806E2CC @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0806E2D0 - ldrb r0, [r4, #0x18] - subs r1, #0x84 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r4, #0x18] - b _0806E2DA - .align 2, 0 -_0806E2CC: .4byte gPlayerState -_0806E2D0: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_0806E2DA: - pop {r4, pc} - - thumb_func_start sub_0806E2DC -sub_0806E2DC: @ 0x0806E2DC - push {lr} - adds r3, r0, #0 - ldr r0, _0806E300 @ =gSave - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _0806E2EC - movs r0, #0 -_0806E2EC: - ldrb r1, [r3, #0xb] - lsls r1, r1, #6 - lsls r0, r0, #3 - ldr r2, _0806E304 @ =gUnk_08114308 - adds r0, r0, r2 - adds r1, r1, r0 - adds r0, r3, #0 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806E300: .4byte gSave -_0806E304: .4byte gUnk_08114308 diff --git a/data/animations/npc/kingGustav.s b/data/animations/npc/kingGustaf.s similarity index 100% rename from data/animations/npc/kingGustav.s rename to data/animations/npc/kingGustaf.s diff --git a/data/animations/npc/npc4f.s b/data/animations/npc/npc4F.s similarity index 100% rename from data/animations/npc/npc4f.s rename to data/animations/npc/npc4F.s diff --git a/data/const/npc/bladeBrothers.s b/data/const/npc/bladeBrothers.s index eba691a7..a2265099 100644 --- a/data/const/npc/bladeBrothers.s +++ b/data/const/npc/bladeBrothers.s @@ -12,7 +12,7 @@ gUnk_081115C0:: @ 081115C0 gUnk_081115D0:: @ 081115D0 .4byte sub_08068AFC - .4byte FUN_08068b2c + .4byte sub_08068b2c .4byte sub_08068B70 gUnk_081115DC:: @ 081115DC diff --git a/data/const/npc/goronMerchant.s b/data/const/npc/goronMerchant.s deleted file mode 100644 index b2c8b139..00000000 --- a/data/const/npc/goronMerchant.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08111B88:: @ 08111B88 - .4byte sub_08069584 - .4byte sub_080695AC - .4byte sub_080695E8 - .4byte sub_0806961C - -gUnk_08111B98:: @ 08111B98 - .4byte sub_0806963C - .4byte sub_08069654 - -gUnk_08111BA0:: @ 08111BA0 - .incbin "baserom.gba", 0x111BA0, 0x000001E diff --git a/data/const/npc/npc26.s b/data/const/npc/npc26.s deleted file mode 100644 index 255dfa71..00000000 --- a/data/const/npc/npc26.s +++ /dev/null @@ -1,14 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081106D4:: @ 081106D4 - .4byte sub_080669B8 - .4byte sub_080669DC - .4byte sub_08066A30 - -gUnk_081106E0:: @ 081106E0 - .4byte sub_08066A38 - .4byte sub_08066A50 diff --git a/data/data_080FC8A4.s b/data/data_080FC8A4.s index 41fbfa1c..4ae5d7cd 100644 --- a/data/data_080FC8A4.s +++ b/data/data_080FC8A4.s @@ -48,7 +48,7 @@ gUnk_080FC9B0:: @ 080FC9B0 .4byte sub_0805141C gUnk_080FC9BC:: @ 080FC9BC - .4byte FUN_080515c8 + .4byte sub_080515c8 .4byte sub_080515D4 .4byte sub_080516E0 diff --git a/data/scripts/script_08010264.inc b/data/scripts/script_08010264.inc index 08c027a3..7e020262 100644 --- a/data/scripts/script_08010264.inc +++ b/data/scripts/script_08010264.inc @@ -487,7 +487,7 @@ script_08010860: _0807EA94 _0807E3E8 JumpIfNot script_080108B2 - Call sub_08069718 + Call GoronMerchant_TryToBuyKinstone JumpIfNot script_080108B2 WaitPlayerAction8 _0807EA94 diff --git a/linker.ld b/linker.ld index 15fda49a..fc72936e 100644 --- a/linker.ld +++ b/linker.ld @@ -551,7 +551,6 @@ SECTIONS { /* npcs */ src/npc/gentari.o(.text); src/npc/festari.o(.text); - asm/festari.o(.text); src/npc/forestMinish.o(.text); src/npc/postman.o(.text); asm/postman.o(.text); @@ -588,16 +587,13 @@ SECTIONS { asm/npc23.o(.text); asm/kingDaltus.o(.text); asm/ministerPotho.o(.text); - asm/npc26.o(.text); + src/npc/npc26.o(.text); asm/vaati.o(.text); src/npc/zelda.o(.text); src/npc/mutoh.o(.text); src/npc/carpenter.o(.text); - asm/carpenter.o(.text); asm/castorWildsStatue.o(.text); - asm/npc/cat.o(.text); src/npc/cat.o(.text); - asm/cat.o(.text); asm/mountainMinish.o(.text); src/npc/zeldaFollower.o(.text); asm/zeldaFollower.o(.text); @@ -606,9 +602,8 @@ SECTIONS { src/npc/cow.o(.text); src/npc/goron.o(.text); src/npc/goronMerchant.o(.text); - asm/goronMerchant.o(.text); asm/gorman.o(.text); - asm/dog.o(.text); + src/npc/dog.o(.text); src/npc/syrup.o(.text); asm/syrup.o(.text); src/npc/rem.o(.text); @@ -624,8 +619,8 @@ SECTIONS { src/npc/carlov.o(.text); src/npc/dampe.o(.text); asm/drLeft.o(.text); - asm/kingGustaf.o(.text); - asm/gina.o(.text); + src/npc/kingGustaf.o(.text); + src/npc/gina.o(.text); src/npc/simon.o(.text); src/npc/anju.o(.text); asm/mama.o(.text); @@ -638,15 +633,16 @@ SECTIONS { src/npc/bigGoron.o(.text); asm/bigGoron.o(.text); src/npc/ezloCap.o(.text); - asm/npc4E.o(.text); + src/npc/npc4E.o(.text); + src/npc/npc4F.o(.text); src/npc/clothesRack.o(.text); asm/clothesRack.o(.text); asm/picolyteBottles.o(.text); - asm/smallTownMinish.o(.text); + src/npc/smallTownMinish.o(.text); asm/hurdyGurdyMan.o(.text); asm/cucco.o(.text); asm/cuccoChick.o(.text); - asm/fusionMenuNPC.o(.text); + src/npc/fusionMenuNPC.o(.text); asm/phonograph.o(.text); asm/npc58.o(.text); /* END npcs */ @@ -1294,7 +1290,7 @@ SECTIONS { data/animations/npc/kingDaltus.o(.rodata); data/const/npc/ministerPotho.o(.rodata); data/animations/npc/ministerPotho.o(.rodata); - data/const/npc/npc26.o(.rodata); + src/npc/npc26.o(.rodata); data/animations/npc/npc26.o(.rodata); data/const/npc/vaati.o(.rodata); data/animations/npc/vaati.o(.rodata); @@ -1317,7 +1313,7 @@ SECTIONS { data/animations/npc/cow.o(.rodata); data/const/npc/goron.o(.rodata); data/animations/npc/goron.o(.rodata); - data/const/npc/goronMerchant.o(.rodata); + src/npc/goronMerchant.o(.rodata); data/animations/npc/goronMerchant.o(.rodata); data/const/npc/gorman.o(.rodata); data/animations/npc/gorman.o(.rodata); @@ -1346,7 +1342,7 @@ SECTIONS { data/animations/npc/dampe.o(.rodata); data/const/npc/drLeft.o(.rodata); data/animations/npc/drLeft.o(.rodata); - data/animations/npc/kingGustav.o(.rodata); + data/animations/npc/kingGustaf.o(.rodata); data/animations/npc/gina.o(.rodata); data/animations/npc/simon.o(.rodata); data/animations/npc/anju.o(.rodata); @@ -1363,7 +1359,9 @@ SECTIONS { data/animations/npc/mayorHagen.o(.rodata); data/const/npc/bigGoron.o(.rodata); src/npc/ezloCap.o(.rodata); - data/animations/npc/npc4f.o(.rodata); + src/npc/npc4E.o(.rodata); + src/npc/npc4F.o(.rodata); + data/animations/npc/npc4F.o(.rodata); data/const/npc/clothesRack.o(.rodata); data/animations/npc/clothesRack.o(.rodata); data/const/npc/picolyteBottle.o(.rodata); diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c index 30f0000e..a6fa26a4 100644 --- a/src/enemy/businessScrub.c +++ b/src/enemy/businessScrub.c @@ -469,7 +469,7 @@ bool32 sub_0802915C(Entity* this) { return TRUE; break; case 0x1c: - if (CheckGlobalFlag(0x5a) == 0) + if (CheckGlobalFlag(AKINDO_BOTTLE_SELL) == 0) return TRUE; break; case 0x5c: @@ -486,7 +486,7 @@ bool32 sub_08029198(const struct SalesOffering* offer) { if ((offer->field_0x0 & 0xfc) != 0xc) { switch (offer->field_0x8) { case 0x1c: - tmp = CheckGlobalFlag(0x5a); + tmp = CheckGlobalFlag(AKINDO_BOTTLE_SELL); break; case 0x9: case 0x44: diff --git a/src/fileScreen.c b/src/fileScreen.c index f048b296..925e1f54 100644 --- a/src/fileScreen.c +++ b/src/fileScreen.c @@ -1009,7 +1009,7 @@ void HandleFileDelete(void) { sub_08050A64(gUnk_02019EE0.unk6); } -void FUN_080515c8(void) { +void sub_080515c8(void) { sub_080A7114(1); } diff --git a/src/game.c b/src/game.c index 2b9e9e32..49fe233f 100644 --- a/src/game.c +++ b/src/game.c @@ -247,7 +247,7 @@ void InitializePlayer(void) { MemClear((void*)pl, 0x88); gRoomControls.cameraTarget = pl; gPlayerState.playerAction = gUnk_080FCAC8[gScreenTransition.field_0xf]; - if (!CheckGlobalFlag(0x14)) { + if (!CheckGlobalFlag(EZERO_1ST)) { gPlayerState.flags.all |= 8; } switch (gScreenTransition.field_0xf) { diff --git a/src/gba/m4a.c b/src/gba/m4a.c index 82dbb39e..2049ba5c 100644 --- a/src/gba/m4a.c +++ b/src/gba/m4a.c @@ -1673,4 +1673,4 @@ void ply_xswee(MusicPlayerInfo* mplayInfo, MusicPlayerTrack* track) { } void nullsub_544() { -} \ No newline at end of file +} diff --git a/src/npc/bladeBrothers.c b/src/npc/bladeBrothers.c index 7bb1fdc3..37067485 100644 --- a/src/npc/bladeBrothers.c +++ b/src/npc/bladeBrothers.c @@ -119,7 +119,7 @@ void sub_08068AFC(Entity* this) { sub_0807DD50(this); } -void FUN_08068b2c(Entity* this) { +void sub_08068b2c(Entity* this) { u32 uVar1; if (this->interactType == '\x02') { diff --git a/src/npc/carpenter.c b/src/npc/carpenter.c index 21f8db14..9b1e5606 100644 --- a/src/npc/carpenter.c +++ b/src/npc/carpenter.c @@ -5,9 +5,15 @@ #include "npc.h" #include "functions.h" #include "script.h" +#include "flags.h" +#include "textbox.h" extern SpriteLoadData gUnk_08110CA8[]; +extern u16 gUnk_08110CE8[]; + +extern Dialog gUnk_08110D00; + void Carpenter(Entity* this) { if (*(u32*)&this->cutsceneBeh == 0) { DeleteThisEntity(); @@ -63,3 +69,35 @@ void Carpenter_Head(Entity* this) { void sub_080672B0(Entity* this, ScriptExecutionContext* context) { InitializeAnimation(this, context->intVariable + (this->animationState >> 1) + this->type * 8); } + +void sub_080672C8(Entity* this) { + u32 dialog = 0; + u32 tmp; + if (GetInventoryValue(0x11) == 0) { + tmp = CheckGlobalFlag(TABIDACHI); + dialog = BOOLCAST(tmp); + } + TextboxNoOverlap(gUnk_08110CE8[(dialog * 2 + this->type * 6) / 2], this); +} + +void sub_08067304(Entity* this) { + ShowNPCDialogue(this, &gUnk_08110D00); +} + +void sub_08067314(Entity* this) { + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); +} + +void Carpenter_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110CA8[this->type * 4]) != 0) { + this->action = this->action + 1; + this->spriteSettings.b.draw = 1; + sub_0805E3A0(this, 2); + InitializeAnimation(this, (u32)this->type * 8 + 2); + } + } else { + GetNextFrame(this); + } +} diff --git a/src/npc/cat.c b/src/npc/cat.c index c00a41ef..b08369a0 100644 --- a/src/npc/cat.c +++ b/src/npc/cat.c @@ -1,11 +1,54 @@ #include "global.h" #include "entity.h" +#include "functions.h" +#include "save.h" +#include "player.h" +#include "random.h" +#include "textbox.h" +#include "npc.h" +#include "audio.h" -extern void sub_0806ED78(); extern void sub_08067C44(); extern void (*gCat[9])(Entity*); +extern Dialog gUnk_08110EF8; + +extern Hitbox gUnk_08110EF0; +extern void sub_08067B08(Entity*); + +extern u32 sub_08067D20(); +extern void sub_08067AAC(Entity*); +extern void sub_08067B34(Entity*); +extern void sub_08067B80(Entity*, u32); + +extern void sub_08067B70(Entity*); + +extern void sub_08067C24(Entity*); +extern void sub_08067BD4(Entity*); +extern u32 sub_08067D74(Entity*); +extern void sub_08067C18(Entity*); + +extern Hitbox* gUnk_08111154[8]; +extern void sub_08067DDC(Entity*); + +extern u16 gUnk_081110FC[4]; +extern void sub_08067DCC(Entity*, u32); + +extern u8 gUnk_0811110C[2]; +extern u32 gUnk_0811110F; +extern void sub_08078850(Entity*, u32, u8, u32*); + +extern u16 gUnk_08111104[]; + +extern u32 sub_0806FCA0(Entity*, Entity*); + +extern Entity* sub_08049DF4(u32); + +void sub_08067790(Entity* this) { + ShowNPCDialogue(this, &gUnk_08110EF8 + this->type * 10 + gSave.unk8); +} + // Main void Cat(Entity* ent) { gCat[ent->action](ent); @@ -14,3 +57,342 @@ void Cat(Entity* ent) { sub_0806ED78(ent); } } + +void sub_080677EC(Entity* this) { + u8 bVar1; + u32 uVar2; + + this->spriteSettings.b.draw = 1; + this->direction = 8; + this->speed = 0x80; + this->field_0x3c = 7; + this->field_0x40 = 0x48; + this->damageType = -0x58; + this->flags2 = 1; + this->field_0x68.HALF.HI = 0xff; + if (this->x.HALF.HI < gPlayerEntity.x.HALF.HI) { + this->spriteSettings.b.flipX = 1; + } else { + this->spriteSettings.b.flipX = 0; + } + + this->field_0x68.HALF.LO = sub_0801E99C(this); + this->hitbox = &gUnk_08110EF0; + uVar2 = sub_0805ACC0(this); + if (uVar2 == 0) { + uVar2 = this->x.HALF.HI; + } else { + uVar2 >>= 0x10; + } + this->field_0x6c.HWORD = uVar2; + this->field_0x6e.HWORD = this->actionDelay + uVar2; + this->actionDelay = 0; + this->field_0x74.HALF.HI = 0; + this->field_0x74.HALF.LO = (Random() & 0x7f) + 0x1e; + this->field_0x68.HALF.HI = 0xff; + sub_08067B08(this); +} + +void sub_080678AC(Entity* this) { + u32 iVar1; + u16* psVar2; + + iVar1 = sub_08067D20(); + if (iVar1 != 0) { + sub_08067B80(this, 5); + } else { + psVar2 = (u16*)&this->field_0x70.HALF.HI; + if (*psVar2 != 0) { + *psVar2 = *psVar2 - 1; + } + if ((this->frames.all == 1) && (*psVar2 == 0)) { + sub_08067AAC(this); + } else { + UpdateAnimationSingleFrame(this); + if ((this->frames.all & 0x80) != 0) { + sub_08067B34(this); + } + } + } +} + +void sub_08067904(Entity* this) { + if (sub_08067D20() != 0) { + sub_08067B80(this, 8); + return; + } + + this->field_0x70.HALF.HI -= 1; + if (this->field_0x70.HALF.HI == 0) { + sub_08067B70(this); + return; + } + if (this->direction == 8) { + if (this->x.HALF.HI > this->field_0x6e.HWORD) { + this->direction = 0x18; + this->spriteSettings.b.flipX = 0; + } + } else { + if (this->x.HALF.HI < this->field_0x6c.HWORD) { + this->direction = 8; + this->spriteSettings.b.flipX = 1; + } + } + sub_0806F69C(this); + UpdateAnimationSingleFrame(this); +} + +void sub_0806797C(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.b.f3 != 0) { + sub_08067B08(this); + } +} + +void sub_0806799C(Entity* this) { + UpdateAnimationSingleFrame(this); + if ((gTextBox.doTextBox & 0x7f) == 0) { + sub_08067B08(this); + sub_0805E3A0(this, 1); + } +} + +void sub_080679C4(Entity* this) { + if (this->field_0x74.HALF.LO == 0 || --this->field_0x74.HALF.LO == 0 || sub_08067D20(this) == 0) { + sub_08067C24(this); + } else { + UpdateAnimationSingleFrame(this); + sub_08067BD4(this); + if (sub_08067D74(this) != 0) { + sub_08067C18(this); + } + } +} + +void sub_08067A0C(Entity* this) { + u8 tmp; + + UpdateAnimationSingleFrame(this); + if (this->frames.b.f3 != 0) { + if (sub_08067D20(this) != 0) { + sub_08067B80(this, 5); + this->actionDelay = this->actionDelay + 0x14; + } else { + sub_08067C24(this); + } + } else { + tmp = (this->frames.all & 7); + if (tmp != 0) { + this->flags = this->flags | 0x80; + this->hitbox = gUnk_08111154[tmp - 1 + ((this->spriteSettings.b.flipX << 2))]; + } else { + sub_08067DDC(this); + } + } +} + +void sub_08067A78(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.b.f3 != 0) { + sub_08067AAC(this); + } +} + +void sub_08067A98(Entity* this) { + if (UpdateFuseInteraction(this) != 0) { + sub_08067B08(this); + } +} + +void sub_08067AAC(Entity* this) { + this->action = 2; + this->field_0x70.HALF.HI = gUnk_081110FC[(Random() & 3)]; + + this->spriteSettings.b.flipX = this->direction >> 4 ^ 1; + + sub_08067DCC(this, 3); + sub_08078850(this, 0, gUnk_0811110C[2], &gUnk_0811110F); +} + +void sub_08067B08(Entity* this) { + this->action = 1; + this->field_0x70.HALF.HI = gUnk_08111104[Random() & 3]; + sub_08067B34(this); +} + +void sub_08067B34(Entity* this) { + sub_08067DCC(this, 0); + this->frameDuration = (Random() & 0x30) + 0xb4; + sub_08078850(this, 0, gUnk_0811110C[this->spriteSettings.b.flipX], &gUnk_0811110F); +} + +void sub_08067B70(Entity* this) { + this->action = 3; + sub_08067DCC(this, 4); +} + +void sub_08067B80(Entity* this, u32 param) { + this->action = 5; + this->actionDelay = 0x14; + this->field_0x74.HALF.LO = (Random() & 0x7f) + 0x1e; + InitAnimationForceUpdate(this, param); + sub_08067DDC(this); + if (this->x.HALF.HI < gPlayerEntity.x.HALF.HI) { + this->spriteSettings.b.flipX = 1; + } else { + this->spriteSettings.b.flipX = 0; + } +} + +void sub_08067BD4(Entity* this) { + if (this->spriteSettings.b.flipX > 0) { + if (this->x.HALF.HI - 4 > gPlayerEntity.x.HALF.HI) { + this->spriteSettings.b.flipX = 0; + } + } else { + if (this->x.HALF.HI + 4 < gPlayerEntity.x.HALF.HI) { + this->spriteSettings.b.flipX = 1; + } + } +} + +void sub_08067C18(Entity* this) { + this->action = 6; + InitAnimationForceUpdate(this, 6); +} + +void sub_08067C24(Entity* this) { + this->action = 7; + this->field_0x74.HALF.HI = 0x14; + sub_08067DDC(this); + InitAnimationForceUpdate(this, 7); +} + +void sub_08067C44(Entity* this) { + s32 iVar4; + u32 uVar5; + + uVar5 = -((s32) - (gPlayerState.flags.all & 0x80) >> 0x1f); + if (uVar5 != this->field_0x68.HALF.HI) { + if (uVar5 == 0) { + sub_08078778(this); + } else { + sub_080787A8(this, this->field_0x68.HALF.LO); + } + } + + this->field_0x68.HALF.HI = uVar5; + + if (this->interactType == 0) { + return; + } + + iVar4 = sub_0806FCA0(this, &gPlayerEntity); + switch (this->animIndex) { + case 0: + default: + if (iVar4 == 2) { + InitAnimationForceUpdate(this, 2); + } else { + InitAnimationForceUpdate(this, 1); + } + break; + case 3: + if (iVar4 == 1) { + this->spriteSettings.b.flipX = 1; + } else { + if (this->spriteSettings.b.flipX == 3) { // TODO 3 ??? + this->spriteSettings.b.flipX = 0; + } + } + if (iVar4 != 2) { + InitAnimationForceUpdate(this, 1); + } else { + InitAnimationForceUpdate(this, 2); + } + break; + } + + if (this->interactType == 2) { + this->action = 8; + sub_0806F118(this); + } else { + this->action = 4; + sub_08067790(this); + sub_0805E3A0(this, 2); + } + this->interactType = 0; + SoundReq(SFX_VO_CAT); +} + +u32 sub_08067D20(Entity* this) { + s32 tmp; + Entity* entity; + int iVar4; + if (this->field_0x74.HALF.HI != 0) { + this->field_0x74.HALF.HI -= 1; + } else { + entity = sub_08049DF4(2); + if (entity != NULL) { + tmp = this->spriteSettings.raw * 0x2000000; // TODO maybe convert to ternary? + iVar4 = 0x28; + if (tmp < 0) { + iVar4 = 0x10; + } + + if (((u32)(entity->x.HALF.HI - (this->x.HALF.HI - iVar4)) < 0x31) && + ((((u32)entity->y.HALF.HI) - (this->y.HALF.HI - 4)) < 0x39)) { + return 1; + } + } + } + return 0; +} + +u32 sub_08067D74(Entity* this) { + Entity* entity; + int iVar2; + s32 tmp; + + if (this->type != 5) { + if (this->actionDelay != 0) { + this->actionDelay -= 1; + } + entity = sub_08049DF4(2); + if (entity != NULL) { + tmp = (this->spriteSettings.raw * 0x2000000); // TODO convert to ternary? + iVar2 = 0x18; + if (tmp < 0) { + iVar2 = 8; + } + if ((((u32)(entity->x.HALF.HI - (this->x.HALF.HI - iVar2)) < 0x1f) && + ((u32)(entity->y.HALF.HI - this->y.HALF.HI) < 0x17)) && + (this->actionDelay == 0)) { + return 1; + } + } + } + return 0; +} + +void sub_08067DCC(Entity* this, u32 param) { + this->field_0x70.BYTES.byte1 = param; + InitAnimationForceUpdate(this, param); +} + +void sub_08067DDC(Entity* this) { + this->flags = this->flags & 0x7f; + this->bitfield = 0; + this->iframes = 0; + this->hitbox = &gUnk_08110EF0; +} + +void Cat_Fusion(Entity* this) { + if (this->action == 0) { + this->action += 1; + this->spriteSettings.b.draw = 1; + InitAnimationForceUpdate(this, 5); + } else { + UpdateAnimationSingleFrame(this); + } +} diff --git a/src/npc/dog.c b/src/npc/dog.c new file mode 100644 index 00000000..378117ce --- /dev/null +++ b/src/npc/dog.c @@ -0,0 +1,360 @@ +#include "entity.h" +#include "functions.h" +#include "script.h" +#include "flags.h" +#include "random.h" +#include "npc.h" +#include "audio.h" +#include "save.h" +#include "textbox.h" + +extern void (*gUnk_08111D88[])(Entity*); +void sub_08069FE8(Entity*); +u32 sub_08069EF0(); + +extern u8 gUnk_08111DA8[]; +u32 sub_08069F90(Entity*); +void sub_08069F6C(Entity*); +void sub_08069D00(Entity*); +void sub_08069CB8(Entity*); + +extern u8 gUnk_08111DB0[]; +void sub_0806A028(Entity*); + +void sub_08069FBC(Entity*); + +extern SpriteLoadData gUnk_08111D58[]; +extern u8 gUnk_08111E30[]; + +void sub_0806A080(Entity*); + +extern Dialog gUnk_08111E34[]; + +extern u16 gUnk_08111F74[]; + +extern u16 gUnk_08111FD8[]; + +void Dog(Entity* this) { + gUnk_08111D88[this->action](this); + sub_0806ED78(this); + sub_08069FE8(this); +} + +void sub_08069B44(Entity* this) { + u32 uVar2; + u32 sVar3; + u32 uVar4; + u32 uVar5; + if (sub_08069EF0() != 0) { + uVar5 = sub_0805ACC0(this); + if (uVar5 == 0) { + sVar3 = this->x.HALF.HI; + uVar2 = this->y.HALF.HI; + } else { + sVar3 = uVar5 >> 0x10; + uVar2 = uVar5; + } + + uVar4 = this->actionDelay == 0 ? 0x20 : this->actionDelay; + + this->field_0x6e.HWORD = sVar3 - uVar4; + this->field_0x6c.HWORD = sVar3 + uVar4; + this->field_0x70.HALF.LO = uVar2 - 8; + this->field_0x70.HALF.HI = uVar2 + 8; + this->speed = 0x100; + this->actionDelay = 0x1e; + this->animationState = 2; + this->field_0x6a.HALF.LO = 0xff; + this->field_0x74.HALF.LO = sub_0801E99C(this); + sub_0805E3A0(this, 2); + InitAnimationForceUpdate(this, 10); + if ((this->flags & 2) != 0) { + sub_0807DD50(this); + } + if (((this->type == 0) && ((gPlayerState.flags.all & 0x80) == 0)) && (GetInventoryValue(0x36) != 2)) { + this->action = 4; + } + if ((this->type == 2) && (CheckLocalFlag(0xcf) == 0)) { + SetTile(0x4072, TILE(this->x.HALF.HI, this->y.HALF.HI - 8), this->collisionLayer); + } + } +} + +void sub_08069C40(Entity* this) { + UpdateAnimationSingleFrame(this); + if (sub_08069F90(this) != 0) { + if ((gPlayerState.flags.all & 0x80) != 0) { + sub_08069CB8(this); + } else { + this->animationState = GetAnimationState(this); + sub_08069D00(this); + } + this->actionDelay = 0x1e; + } else { + this->actionDelay -= 1; + if (this->actionDelay == 0) { + this->action = 2; + this->actionDelay = (Random() & 0x1f) + 0x1e; + this->direction = gUnk_08111DA8[Random() & 7]; + sub_08069F6C(this); + } + } +} + +void sub_08069CB8(Entity* this) { + u32 direction; + u32 animState; + + direction = GetFacingDirection(this, &gPlayerEntity); + animState = gUnk_08111DB0[direction + this->animationState * 0x20]; + this->animationState = animState >> 6; + this->field_0x6a.HALF.HI = animState & 0x3f; + sub_0806A028(this); + if (this->animIndex != this->field_0x6a.HALF.HI) { + InitAnimationForceUpdate(this, this->field_0x6a.HALF.HI); + } +} + +void sub_08069D00(Entity* this) { + this->field_0x6a.HALF.HI = 8; + sub_0806A028(this); + if (0x1f < this->animIndex) { + if ((this->frames.all & 0x80) == 0) { + return; + } + this->field_0x6a.HALF.HI = 8; + } + if ((Random() & 0x1ff) < 3) { + sub_08069FBC(this); + } + if (this->animIndex != this->field_0x6a.HALF.HI + this->animationState) { + InitAnimationForceUpdate(this, this->field_0x6a.HALF.HI + this->animationState); + } +} + +void sub_08069D54(Entity* this) { + u16 collisions; + if (sub_08069F90(this) == 0) { + this->actionDelay -= 1; + if (this->actionDelay != 0) { + UpdateAnimationSingleFrame(this); + ProcessMovement(this); + collisions = this->collisions; + + if (this->x.HALF.HI < this->field_0x6e.HWORD) { + this->x.HALF.HI = this->field_0x6e.HWORD + 1; + collisions = 0xe00; + } else if (this->x.HALF.HI > this->field_0x6c.HWORD) { + this->x.HALF.HI = this->field_0x6c.HWORD - 1; + collisions = 0xe000; + } + if (this->y.HALF.HI < this->field_0x70.HALF_U.LO) { + this->y.HALF.HI = this->field_0x70.HALF_U.LO + 1; + collisions = 0xe; + } else if (this->y.HALF.HI > this->field_0x70.HALF_U.HI) { + this->y.HALF.HI = this->field_0x70.HALF_U.HI - 1; + collisions = 0xe0; + } + sub_0800417E(this, collisions); + sub_08069F6C(this); + return; + } + } + if (sub_08069F90(this) != 0) { + this->action = 1; + } else { + this->action = 3; + } + this->actionDelay = (Random() & 0x1f) + 0x1e; +} + +void sub_08069DF8(Entity* this) { + UpdateAnimationSingleFrame(this); + if (sub_08069F90(this) != 0) { + this->action = 1; + } else { + this->actionDelay -= 1; + if (this->actionDelay != 0) { + sub_08069D00(this); + return; + } + if ((Random() & 0xff) < 0x30) { + this->action = 2; + } else { + this->action = 3; + } + } + this->actionDelay = (Random() & 0x1f) + 0x1e; +} + +void sub_08069E44(Entity* this) { + sub_0807DD94(this, NULL); +} + +void sub_08069E50(Entity* this) { + this->animationState = GetAnimationState(this); + this->field_0x6a.HALF.HI = 8; + sub_0806A028(this); + UpdateAnimationSingleFrame(this); + if (this->animIndex > 0x1f) { + if ((this->frames.all & 0x80) == 0) { + return; + } + this->field_0x6a.HALF.HI = 8; + } + sub_08069FBC(this); + if (this->animIndex != this->field_0x6a.HALF.HI + this->animationState) { + InitAnimationForceUpdate(this, this->field_0x6a.HALF.HI + this->animationState); + } + if (GetInventoryValue(0x36) == 2) { + this->action = 7; + InitAnimationForceUpdate(this, 0x29); + sub_080788E0(this); + EnqueueSFX(0xd1); + EnqueueSFX(0xcd); + } +} + +void sub_08069ECC(Entity* this) { + if (UpdateFuseInteraction(this) != 0) { + this->action = 1; + } +} + +void sub_08069EE0(Entity* this) { + UpdateAnimationSingleFrame(this); +} + +void sub_08069EE8(Entity* this) { + this->action = 5; +} + +u32 sub_08069EF0(Entity* this) { + if (LoadExtraSpriteData(this, &gUnk_08111D58[this->type * 3]) == 0) { + return 0; + } + this->action = 1; + this->field_0x68.HWORD = gUnk_08111E30[this->type]; + return 1; +} + +void Dog_Head(Entity* this) { + u32 frame; + frame = this->frames.all & 0xffffff7f; + if (frame != 0) { + frame = frame + this->field_0x68.HWORD; + } + SetExtraSpriteFrame(this, 0, frame - 1); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); +} + +void sub_08069F6C(Entity* this) { + this->animationState = sub_0806F5A4(this->direction); + if (this->animationState + 4 != this->animIndex) { + InitAnimationForceUpdate(this, this->animationState + 4); + } +} + +u32 sub_08069F90(Entity* this) { + if ((this->type == 2) && (CheckLocalFlag(0xcf) == 0)) { + return 1; + } else { + return sub_080041A0(this, &gPlayerEntity, 0x14, 0x14); + } +} + +void sub_08069FBC(Entity* this) { + u32 tmp = (gPlayerState.flags.all & 0x80) != 0 ? 0x24 : 0x20; + if ((this->animationState == 1) || (this->animationState == 3)) { + this->field_0x6a.HALF.HI = tmp; + } +} + +void sub_08069FE8(Entity* this) { + u32 tmp = -((s32) - (gPlayerState.flags.all & 0x80) >> 0x1f); + if (tmp != this->field_0x6a.HALF.LO) { + if (tmp == 0) { + sub_08078778(this); + } else { + sub_080787A8(this, this->field_0x74.HALF.LO); + } + } + this->field_0x6a.HALF.LO = tmp; +} + +void sub_0806A028(Entity* this) { + if (this->interactType != 0) { + if ((gPlayerState.flags.all & 0x80) != 0) { + if (this->interactType == 2) { + this->action = 6; + sub_0806F118(this); + } else { + sub_0806A080(this); + } + } else { + sub_08069FBC(this); + sub_0806A080(this); + SoundReq(SFX_VO_DOG); + sub_080791D0(); + } + this->interactType = 0; + } +} + +void sub_0806A080(Entity* this) { + ShowNPCDialogue(this, (Dialog*)&gUnk_08111E34 + this->type2 * 10 + gSave.unk8); +} + +void sub_0806A0A4(Entity* this) { + s32 dialog; + + if ((gPlayerState.flags.all & 0x80) != 0) { + dialog = 4; + if (CheckLocalFlag(0xcf) == 0) { + dialog = 3; + SetLocalFlag(0xcf); + sub_0807BA8C(TILE(this->x.HALF.HI, this->y.HALF.HI - 8), (u32)this->collisionLayer); + } + } else { + + dialog = 2; + if (CheckLocalFlag(0xcf) == 0) { + dialog = 1; + if (CheckLocalFlag(0xdb) == 0) { + dialog = 0; + SetLocalFlag(0xdb); + } + } + } + TextboxNoOverlap(gUnk_08111F74[(u32)gSave.unk8 * 5 + dialog], this); +} + +void sub_0806A144(Entity* this) { + s32 dialog = 4; + if ((gPlayerState.flags.all & 0x80) != 0) { + dialog = 3; + if ((GetInventoryValue(0x46) == 0) && (CheckGlobalFlag(0x29) != 0)) { + if (CheckLocalFlag(0x85) == 0) { + dialog = 1; + } else { + dialog = 2; + } + } + } + TextboxNoOverlap(gUnk_08111FD8[dialog], this); +} + +void Dog_Fusion(Entity* this) { + if (this->action == 0) { + if (sub_08069EF0(this) != 0) { + this->action += 1; + this->spriteSettings.b.draw = 1; + sub_0805E3A0(this, 2); + InitializeAnimation(this, 0x23); + } + } else { + GetNextFrame(this); + } +} diff --git a/src/npc/ezloCap.c b/src/npc/ezloCap.c index 655ad588..6f1a16bd 100644 --- a/src/npc/ezloCap.c +++ b/src/npc/ezloCap.c @@ -1,33 +1,11 @@ #include "global.h" #include "entity.h" -#include "flags.h" -#include "save.h" #include "script.h" #include "audio.h" -#include "object.h" #include "functions.h" -extern Hitbox gUnk_080FD170; -extern void script_08016030; // Cutscene data type? -extern void script_0801606C; // Cutscene data type? - -extern void sub_0809623C(Entity*); -extern void sub_08096260(Entity*); - const u8 gUnk_08114134[]; const u8 gUnk_08114144[]; -const Hitbox gUnk_08114154; -const u8 gUnk_0811415C[]; -const ScreenTransitionData* const gUnk_081141A4[]; -const u8 gUnk_081141E4[]; -const u16 gUnk_081141F4[]; - -typedef struct { - u32 unk_00; - s8 unk_04; -} gUnk_0810C89C_struct; - -extern void sub_08078850(Entity*, u32, u8 /* TODO this is a s8 in beedle.c*/, gUnk_0810C89C_struct*); // Ezlo as a cap in the Minish Woods, is destroyed as soon as link wears ezlo void EzloCap(Entity* this) { @@ -93,211 +71,6 @@ void sub_0806D9A4(Entity* this) { gPlayerEntity.animationState = 4; } -// NPC4E is created when link enters minish woods for the first time and -// destroyed once he wears ezlo. Also exists when entering hyrule for the second time -// and fusing kinstones. Is destroyed as soon as the kinstone is fused. -void NPC4E(Entity* this) { - if (this->action == 0) { - this->action = 1; - this->spriteSettings.b.draw = 4; - this->hitbox = &gUnk_080FD170; - sub_0807DD50(this); - } else { - sub_0807DD94(this, 0); - } -} - -void sub_0806DA04(Entity* this, ScriptExecutionContext* context) { - // TODO gUnk_0811415C should be a gUnk_0810C89C_struct[], but then a lot of bytes everywhere are wrong? - gUnk_0810C89C_struct* a = (gUnk_0810C89C_struct*)&( - (gUnk_0810C89C_struct*)gUnk_0811415C)[context->intVariable]; // cast necessary to no longer make it a const* ? - sub_08078850(this, 1, a->unk_04, a); -} - -void sub_0806DA1C(Entity* this, ScriptExecutionContext* context) { - sub_0808091C((ScreenTransitionData*)(gUnk_081141A4)[context->intVariable], - (u32)(gUnk_081141E4[context->intVariable])); -} - -// Returns the kinstone id? -u8 sub_0806DA3C(Entity* this) { - u32 result; - - switch (this->type) { - default: - result = 0; - break; - case 1: - result = 1; - break; - case 2: - result = 2; - break; - case 3: - result = 3; - break; - case 4: - result = 4; - break; - case 5: - result = 5; - break; - case 11: - result = 9; - break; - case 6: - case 7: - case 8: - case 9: - case 10: - result = sub_0801E99C(this); - break; - } - return result; -} - -// Check whether a kinstone fusion is possible and store the result somewhere in param_2? -void sub_0806DAAC(Entity* this, ScriptExecutionContext* context) { - context->condition = CheckKinstoneFused(sub_0806DA3C(this)); - gActiveScriptInfo.flags |= 1; -} - -// maybe actually execute the kinstone fusion? -void sub_0806DAD0(Entity* this) { - sub_08078790(this, sub_0806DA3C(this)); -} - -void sub_0806DAE8(Entity* this) { - switch (this->type - 1) { - case 0: - SetLocalFlag(0xee); - break; - case 1: - SetLocalFlag(0xef); - break; - case 2: - SetLocalFlag(0xf0); - break; - case 3: - SetLocalFlag(0xf1); - break; - case 4: - SetLocalFlag(0xf2); - break; - } - - SoundReq(SFX_TASK_COMPLETE); -} - -void sub_0806DB44(Entity* this, ScriptExecutionContext* context) { - context->condition = 0; - - if (CheckLocalFlag(0xee) != 0 && CheckLocalFlag(0xef) != 0 && CheckLocalFlag(0xf0) != 0 && - CheckLocalFlag(0xf1) != 0 && CheckLocalFlag(0xf2) != 0) { - context->condition = 1; - } -} - -void sub_0806DB84(Entity* this, ScriptExecutionContext* context) { - Entity* ent; - this->hitbox = (Hitbox*)&gUnk_08114154; - ent = CreateObject(OBJECT_3E, 4, 0); - if (ent != NULL) { - PositionRelative(this, ent, -0x80000, 0); - *(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_08016030); - } - ent = CreateObject(OBJECT_3E, 5, 0); - if (ent != NULL) { - PositionRelative(this, ent, 0x80000, 0); - *(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_0801606C); - } -} - -u32 sub_0806DBF4(u32 param_1) { - switch (param_1) { - case 1: - case 2: - case 3: - case 4: - case 6: - param_1 = 1; - if (GetInventoryValue(2) != 0) { - param_1 = 2; - } - if (GetInventoryValue(3) != 0) { - param_1 = 3; - } - if (GetInventoryValue(4) != 0) { - param_1 = 4; - } - if (GetInventoryValue(6) != 0) { - param_1 = 6; - } - break; - } - return param_1; -} - -void sub_0806DC3C(Entity* this) { - this->field_0x68.HALF.LO = gSave.stats.itemOnA; - this->field_0x68.HALF.HI = gSave.stats.itemOnB; -} - -void sub_0806DC58(Entity* this) { - ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.LO), 0); - ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.HI), 1); -} - -void sub_0806DC7C() { - const u16* tiles = gUnk_081141F4; - while (*tiles != 0) { - u32 tile = *tiles; - tiles = tiles + 1; - SetTileType(0x4072, tile, 1); - } -} - -void sub_0806DCA0() { - u16 uVar1; - const u16* tiles = gUnk_081141F4; - while (*tiles != 0) { - u32 tile = *tiles; - tiles = tiles + 1; - sub_0807BA8C(tile, 1); - } -} - -void sub_0806DCC0() { - gScreenTransition.field_0x20 = 0x7c8; - gScreenTransition.field_0x22 = 0xf8; -} - -void NPC4E_Fusion(Entity* this) { - if (this->action == 0) { - this->action += 1; - switch (this->type) { - case 1: - case 2: - case 3: - case 4: - case 5: - sub_0809623C(this); - break; - case 6: - case 7: - case 8: - case 9: - case 10: - sub_08096260(this); - break; - case 11: - sub_0806DB84(this, 0); - this->hitbox = NULL; - break; - } - } -} - // animation states const u8 gUnk_08114134[] = { 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x00 }; @@ -305,38 +78,3 @@ const u8 gUnk_08114134[] = { 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, // animation states const u8 gUnk_08114144[] = { 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x00 }; - -const Hitbox gUnk_08114154 = { 0, -8, 0, 0, 0, 0, 24, 8 }; - -const u8 gUnk_0811415C[] = { 0x00, 0x00, 0x08, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x08, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x08, 0x0e, 0x00, 0x00, 0x00 }; -extern ScreenTransitionData gUnk_0813AB6C; -extern ScreenTransitionData gUnk_0813ABBC; -extern ScreenTransitionData gUnk_0813ABE4; -extern ScreenTransitionData gUnk_0813ABF8; -extern ScreenTransitionData gUnk_0813AC0C; -extern ScreenTransitionData gUnk_0813AC20; -extern ScreenTransitionData gUnk_0813AC5C; -extern ScreenTransitionData gUnk_0813AC70; -extern ScreenTransitionData gUnk_0813AC84; -extern ScreenTransitionData gUnk_0813AC98; -extern ScreenTransitionData gUnk_0813ACAC; -extern ScreenTransitionData gUnk_0813ACC0; -extern ScreenTransitionData gUnk_0813ACD4; -extern ScreenTransitionData gUnk_0813ACE8; -extern ScreenTransitionData gUnk_0813ACFC; -// Array of pointers to ScreenTransitionData -const ScreenTransitionData* const gUnk_081141A4[] = { &gUnk_0813AB6C, &gUnk_0813ABBC, &gUnk_0813ABE4, &gUnk_0813ABF8, - &gUnk_0813AC0C, &gUnk_0813AC20, &gUnk_0813AC5C, &gUnk_0813AC70, - &gUnk_0813AC84, &gUnk_0813AC98, &gUnk_0813ACAC, &gUnk_0813ACC0, - &gUnk_0813ACD4, &gUnk_0813ACE8, &gUnk_0813AC5C, &gUnk_0813ACFC }; - -// param_2 for the call to sub_0808091C, same indices as gUnk_081141A4 -const u8 gUnk_081141E4[] = { 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x09, 0x02, - 0x02, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02 }; - -// tiles that are changed? -const u16 gUnk_081141F4[] = { 0x047a, 0x047b, 0x05af, 0x05ef, 0x0738, 0x0739, 0x073a, 0x073b, 0x0000, 0x0000 }; diff --git a/src/npc/festari.c b/src/npc/festari.c index e7bb336d..4d63805f 100644 --- a/src/npc/festari.c +++ b/src/npc/festari.c @@ -5,10 +5,12 @@ #include "player.h" #include "script.h" -extern void sub_0805FF2C(Entity*, void*); +extern void sub_0805FF2C(Entity*, ScriptExecutionContext*); extern void (*const gUnk_08109BBC[])(Entity*); +extern void HandlePostScriptActions(Entity*, ScriptExecutionContext*); + void Festari(Entity* this) { gUnk_08109BBC[this->action](this); } @@ -35,7 +37,7 @@ void sub_0805FE48(Entity* this) { sub_0806F118(this); } else { ExecuteScript(this, *(ScriptExecutionContext**)&this->cutsceneBeh); - sub_0805FF2C(this, *(void**)&this->cutsceneBeh); + sub_0805FF2C(this, *(ScriptExecutionContext**)&this->cutsceneBeh); uVar4 = this->field_0x80.HWORD; if (uVar4 < 8) { if ((this->field_0x82.HWORD & 1) != 0) { @@ -71,3 +73,49 @@ void sub_0805FF18(Entity* this) { this->action = 1; } } + +void sub_0805FF2C(Entity* this, ScriptExecutionContext* context) { + u32 actions; + u32 bit; + + // Handle some postScriptActions already before calling HandlePostScriptActions + actions = context->postScriptActions & 0xfff00004; + context->postScriptActions = context->postScriptActions ^ actions; + if (actions != 0) { + while (actions != 0) { + bit = (~actions + 1) & actions; + actions ^= bit; + switch (bit) { + case 4: + this->field_0x80.HWORD = 9; + break; + + case 0x200000: + this->field_0x80.HWORD = 10; + break; + case 0x400000: + if (this->animationState == 2) { + this->field_0x80.HWORD = 0xb; + } else { + this->field_0x80.HWORD = 0xc; + } + break; + case 0x100000: + this->field_0x80.HWORD = 8; + break; + } + } + } + HandlePostScriptActions(this, context); +} + +void Festari_Fusion(Entity* this) { + if (this->action == 0) { + this->action += 1; + this->spriteSettings.b.draw = 1; + sub_0805E3A0(this, 2); + InitAnimationForceUpdate(this, 8); + } else { + UpdateAnimationSingleFrame(this); + } +} diff --git a/src/npc/fusionMenuNPC.c b/src/npc/fusionMenuNPC.c new file mode 100644 index 00000000..5f2128ed --- /dev/null +++ b/src/npc/fusionMenuNPC.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "entity.h" +#include "npc.h" + +void FusionMenuNPC(Entity* this) { + if (gNPCFunctions[this->field_0xf][2] != NULL) { + gNPCFunctions[this->field_0xf][2](this); + } else { + DeleteThisEntity(); + } +} + +void FusionMenuNPC_Head(Entity* this) { + if (gNPCFunctions[this->field_0xf][1] != NULL) { + gNPCFunctions[this->field_0xf][1](this); + } +} diff --git a/src/npc/gina.c b/src/npc/gina.c new file mode 100644 index 00000000..5d0dea86 --- /dev/null +++ b/src/npc/gina.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "entity.h" +#include "player.h" +#include "npc.h" +#include "flags.h" +#include "functions.h" +#include "script.h" + +void Gina(Entity* this) { + switch (this->action) { + case 0: + this->action = 1; + this->spriteSettings.b.draw = 1; + + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); + sub_0807DD50(this); + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity))); + sub_0806F118(this); + } else { + sub_0807DD94(this, NULL); + } + break; + case 2: + if (UpdateFuseInteraction(this) != 0) { + this->action = 1; + SetLocalFlag(0x88); + } + break; + } +} + +void Gina_Fusion(Entity* this) { + if (this->action == 0) { + this->action += 1; + this->spriteSettings.b.draw = 1; + InitAnimationForceUpdate(this, 2); + } else { + UpdateAnimationSingleFrame(this); + } +} diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c index 5329bd15..a34046b7 100644 --- a/src/npc/goronMerchant.c +++ b/src/npc/goronMerchant.c @@ -6,13 +6,16 @@ #include "room.h" #include "flags.h" #include "script.h" +#include "save.h" -extern u32 sub_080696BC(Entity*); +extern u32 GoronMerchant_GetSalePrice(Entity*); extern void (*const gUnk_08111B88[])(Entity*); extern void (*const gUnk_08111B98[])(Entity*); -extern u16 gUnk_08111BA0[]; +const u16 GoronMerchant_KinstonePrices[]; + +extern u32 sub_0801E7D0(u32); void GoronMerchant(Entity* this) { if ((this->flags & 2) != 0) { @@ -78,7 +81,7 @@ void sub_08069660(Entity* this) { u32 uVar1; TextboxNoOverlap(0x2c1c, this); - gTextBox.field_0x10 = (u16)sub_080696BC(this); + gTextBox.field_0x10 = (u16)GoronMerchant_GetSalePrice(this); } void sub_08069684(void) { @@ -98,33 +101,86 @@ void sub_080696B0(void) { gRoomVars.itemForSaleIndex = 0; } -u32 sub_080696BC(Entity* this) { - u32 uVar1; +u32 GoronMerchant_GetSalePrice(Entity* this) { + u32 restockCount; u32 temp; - u32 iVar3; - s32 temp2; + u32 kinstoneType; + s32 itemForSale; - temp2 = gRoomVars.field_0x7; - if (temp2 > 0x70) { - iVar3 = 1; + itemForSale = gRoomVars.field_0x7; + if (itemForSale > 0x70) { + kinstoneType = 1; } else { - iVar3 = 0; + kinstoneType = 0; } - if (temp2 > 0x72) { - iVar3 = 2; + if (itemForSale > 0x72) { + kinstoneType = 2; } - temp = CheckGlobalFlag(0x3e); - uVar1 = BOOLCAST(temp); + temp = CheckGlobalFlag(GORON_KAKERA_LV2); + restockCount = BOOLCAST(temp); - if (CheckGlobalFlag(0x3f)) { - uVar1 = 2; + if (CheckGlobalFlag(GORON_KAKERA_LV3)) { + restockCount = 2; } - if (CheckGlobalFlag(0x40)) { - uVar1 = 3; + if (CheckGlobalFlag(GORON_KAKERA_LV4)) { + restockCount = 3; } - if (CheckGlobalFlag(0x41)) { - uVar1 = 4; + if (CheckGlobalFlag(GORON_KAKERA_LV5)) { + restockCount = 4; } - return gUnk_08111BA0[uVar1 * 3 + iVar3]; + return GoronMerchant_KinstonePrices[restockCount * 3 + kinstoneType]; } + +void GoronMerchant_TryToBuyKinstone(Entity* this, ScriptExecutionContext* context) { + s32 salePrice = GoronMerchant_GetSalePrice(this); + if (salePrice <= gSave.stats.rupees) { + if (sub_0801E7D0(gRoomVars.field_0x7) < 99) { + ModRupees(-salePrice); + sub_080A7C18(0x5c, gRoomVars.field_0x7, 0); + gRoomVars.itemForSaleIndex = 0; + gRoomVars.field_0x7 = 0; + context->condition = 1; + } else { + TextboxNoOverlap(0x2c1f, this); + context->condition = 0; + } + } else { + TextboxNoOverlap(0x2c1e, this); + context->condition = 0; + } + gActiveScriptInfo.flags = gActiveScriptInfo.flags | 1; +} + +void (*const gUnk_08111B88[])(Entity*) = { + sub_08069584, + sub_080695AC, + sub_080695E8, + sub_0806961C, +}; +void (*const gUnk_08111B98[])(Entity*) = { + sub_0806963C, + sub_08069654, +}; + +const u16 GoronMerchant_KinstonePrices[] = { + 300, + 200, + 50, + // prices after restock 1 + 300, + 200, + 50, + // prices after restock 2 + 300, + 200, + 50, + // prices after restock 3 + 300, + 200, + 50, + // prices after restock 4 + 300, + 200, + 50, +}; diff --git a/src/npc/kingGustaf.c b/src/npc/kingGustaf.c new file mode 100644 index 00000000..cd0d3722 --- /dev/null +++ b/src/npc/kingGustaf.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "script.h" +#include "screen.h" + +void KingGustaf(Entity* this) { + s32 speed; + + if (this->action == 0) { + this->action += 1; + this->spriteRendering.alphaBlend = 1; + this->collisionLayer = 2; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + gScreen.controls.layerFXControl = 0x3f40; + gScreen.controls.alphaBlend = 0x1000; + this->speed = 0x1000; + this->field_0x20 = 0; + } else { + sub_0807DD94(this, 0); + speed = 0x100; + speed *= this->speed; + speed += this->field_0x20; + speed >>= 0x10; + if (speed > 0x10) { + speed = 0x10; + } + if (speed < 4) { + speed = 4; + } + gScreen.controls.alphaBlend = (speed << 8) | (0x10 - speed); + this->speed = gScreen.controls.alphaBlend; + } +} diff --git a/src/npc/librari.c b/src/npc/librari.c index ce6fbefc..992a920c 100644 --- a/src/npc/librari.c +++ b/src/npc/librari.c @@ -43,7 +43,7 @@ void sub_0806B260(Entity* this, ScriptExecutionContext* context) { context->condition = 0; // flippers if (!GetInventoryValue(0x46)) { - if (CheckGlobalFlag(0x29)) { + if (CheckGlobalFlag(MIZUKAKI_START)) { index = 2; context->condition = 1; } else if (!CheckLocalFlag(0x7a)) { diff --git a/src/npc/npc26.c b/src/npc/npc26.c new file mode 100644 index 00000000..e3517992 --- /dev/null +++ b/src/npc/npc26.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "script.h" + +static void (*const gUnk_081106D4[])(Entity*); +static void (*const gUnk_081106E0[])(Entity*); + +void NPC26(Entity* this) { + if ((this->flags & 2) != 0) { + gUnk_081106E0[this->action](this); + } else { + gUnk_081106D4[this->action](this); + sub_0806ED78(this); + } +} + +static void sub_080669B8(Entity* this) { + this->action = 1; + this->spriteSettings.b.draw = 1; + InitAnimationForceUpdate(this, 2); + sub_08078778(this); +} + +static void sub_080669DC(Entity* this) { + s32 sVar1; + s32 sVar2; + + sVar1 = sub_0806ED9C(this, 0x28, 0x28); + if (sVar1 < 0) { + sVar1 = 2; + } else { + if (this->field_0xf == 0) { + this->field_0xf = 0x10; + } else { + this->field_0xf = this->field_0xf - 1; + sVar1 = this->animIndex; + } + } + sVar2 = sub_0806F078(this, sVar1); + if (sVar2 == 0) { + UpdateAnimationSingleFrame(this); + } + if (this->interactType != 0) { + this->action = 2; + this->interactType = 0; + } +} + +static void sub_08066A30(Entity* this) { + this->action = 1; +} + +static void sub_08066A38(Entity* this) { + this->action = 1; + this->spriteSettings.b.draw = 1; + sub_0807DD50(this); +} + +static void sub_08066A50(Entity* this) { + sub_0807DD94(this, NULL); +} + +static void (*const gUnk_081106D4[])(Entity*) = { sub_080669B8, sub_080669DC, sub_08066A30 }; + +static void (*const gUnk_081106E0[])(Entity*) = { sub_08066A38, sub_08066A50 }; diff --git a/src/npc/npc4E.c b/src/npc/npc4E.c new file mode 100644 index 00000000..0adc5744 --- /dev/null +++ b/src/npc/npc4E.c @@ -0,0 +1,273 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "script.h" +#include "functions.h" +#include "audio.h" +#include "save.h" +#include "flags.h" +#include "object.h" + +extern Hitbox gUnk_080FD170; +typedef struct { + u32 unk_00; + s8 unk_04; +} gUnk_0810C89C_struct; + +extern void sub_08078850(Entity*, u32, u8 /* TODO this is a s8 in beedle.c*/, gUnk_0810C89C_struct*); + +extern void script_08016030; // Cutscene data type? +extern void script_0801606C; // Cutscene data type? + +const Hitbox gUnk_08114154; +const u8 gUnk_0811415C[]; +const ScreenTransitionData* const gUnk_081141A4[]; +const u8 gUnk_081141E4[]; +const u16 gUnk_081141F4[]; + +extern void sub_0809623C(Entity*); +extern void sub_08096260(Entity*); + +// NPC4E is created when link enters minish woods for the first time and +// destroyed once he wears ezlo. Also exists when entering hyrule for the second time +// and fusing kinstones. Is destroyed as soon as the kinstone is fused. +void NPC4E(Entity* this) { + if (this->action == 0) { + this->action = 1; + this->spriteSettings.b.draw = 4; + this->hitbox = &gUnk_080FD170; + sub_0807DD50(this); + } else { + sub_0807DD94(this, 0); + } +} + +void sub_0806DA04(Entity* this, ScriptExecutionContext* context) { + // TODO gUnk_0811415C should be a gUnk_0810C89C_struct[], but then a lot of bytes everywhere are wrong? + gUnk_0810C89C_struct* a = (gUnk_0810C89C_struct*)&( + (gUnk_0810C89C_struct*)gUnk_0811415C)[context->intVariable]; // cast necessary to no longer make it a const* ? + sub_08078850(this, 1, a->unk_04, a); +} + +void sub_0806DA1C(Entity* this, ScriptExecutionContext* context) { + sub_0808091C((ScreenTransitionData*)(gUnk_081141A4)[context->intVariable], + (u32)(gUnk_081141E4[context->intVariable])); +} + +// Returns the kinstone id? +u8 sub_0806DA3C(Entity* this) { + u32 result; + + switch (this->type) { + default: + result = 0; + break; + case 1: + result = 1; + break; + case 2: + result = 2; + break; + case 3: + result = 3; + break; + case 4: + result = 4; + break; + case 5: + result = 5; + break; + case 11: + result = 9; + break; + case 6: + case 7: + case 8: + case 9: + case 10: + result = sub_0801E99C(this); + break; + } + return result; +} + +// Check whether a kinstone fusion is possible and store the result somewhere in param_2? +void sub_0806DAAC(Entity* this, ScriptExecutionContext* context) { + context->condition = CheckKinstoneFused(sub_0806DA3C(this)); + gActiveScriptInfo.flags |= 1; +} + +// maybe actually execute the kinstone fusion? +void sub_0806DAD0(Entity* this) { + sub_08078790(this, sub_0806DA3C(this)); +} + +void sub_0806DAE8(Entity* this) { + switch (this->type - 1) { + case 0: + SetLocalFlag(0xee); + break; + case 1: + SetLocalFlag(0xef); + break; + case 2: + SetLocalFlag(0xf0); + break; + case 3: + SetLocalFlag(0xf1); + break; + case 4: + SetLocalFlag(0xf2); + break; + } + + SoundReq(SFX_TASK_COMPLETE); +} + +void sub_0806DB44(Entity* this, ScriptExecutionContext* context) { + context->condition = 0; + + if (CheckLocalFlag(0xee) != 0 && CheckLocalFlag(0xef) != 0 && CheckLocalFlag(0xf0) != 0 && + CheckLocalFlag(0xf1) != 0 && CheckLocalFlag(0xf2) != 0) { + context->condition = 1; + } +} + +void sub_0806DB84(Entity* this, ScriptExecutionContext* context) { + Entity* ent; + this->hitbox = (Hitbox*)&gUnk_08114154; + ent = CreateObject(OBJECT_3E, 4, 0); + if (ent != NULL) { + PositionRelative(this, ent, -0x80000, 0); + *(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_08016030); + } + ent = CreateObject(OBJECT_3E, 5, 0); + if (ent != NULL) { + PositionRelative(this, ent, 0x80000, 0); + *(ScriptExecutionContext**)&ent->cutsceneBeh = StartCutscene(ent, &script_0801606C); + } +} + +u32 sub_0806DBF4(u32 param_1) { + switch (param_1) { + case 1: + case 2: + case 3: + case 4: + case 6: + param_1 = 1; + if (GetInventoryValue(2) != 0) { + param_1 = 2; + } + if (GetInventoryValue(3) != 0) { + param_1 = 3; + } + if (GetInventoryValue(4) != 0) { + param_1 = 4; + } + if (GetInventoryValue(6) != 0) { + param_1 = 6; + } + break; + } + return param_1; +} + +void sub_0806DC3C(Entity* this) { + this->field_0x68.HALF.LO = gSave.stats.itemOnA; + this->field_0x68.HALF.HI = gSave.stats.itemOnB; +} + +void sub_0806DC58(Entity* this) { + ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.LO), 0); + ForceEquipItem(sub_0806DBF4(this->field_0x68.HALF.HI), 1); +} + +void sub_0806DC7C() { + const u16* tiles = gUnk_081141F4; + while (*tiles != 0) { + u32 tile = *tiles; + tiles = tiles + 1; + SetTileType(0x4072, tile, 1); + } +} + +void sub_0806DCA0() { + u16 uVar1; + const u16* tiles = gUnk_081141F4; + while (*tiles != 0) { + u32 tile = *tiles; + tiles = tiles + 1; + sub_0807BA8C(tile, 1); + } +} + +void sub_0806DCC0() { + gScreenTransition.field_0x20 = 0x7c8; + gScreenTransition.field_0x22 = 0xf8; +} + +void NPC4E_Fusion(Entity* this) { + if (this->action == 0) { + this->action += 1; + switch (this->type) { + case 1: + case 2: + case 3: + case 4: + case 5: + sub_0809623C(this); + break; + case 6: + case 7: + case 8: + case 9: + case 10: + sub_08096260(this); + break; + case 11: + sub_0806DB84(this, 0); + this->hitbox = NULL; + break; + } + } +} + +const Hitbox gUnk_08114154 = { 0, -8, 0, 0, 0, 0, 24, 8 }; + +const u8 gUnk_0811415C[] = { // + 0x00, 0x00, 0x08, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0x18, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x08, 0x0e, 0x00, 0x00, 0x00 +}; +extern ScreenTransitionData gUnk_0813AB6C; +extern ScreenTransitionData gUnk_0813ABBC; +extern ScreenTransitionData gUnk_0813ABE4; +extern ScreenTransitionData gUnk_0813ABF8; +extern ScreenTransitionData gUnk_0813AC0C; +extern ScreenTransitionData gUnk_0813AC20; +extern ScreenTransitionData gUnk_0813AC5C; +extern ScreenTransitionData gUnk_0813AC70; +extern ScreenTransitionData gUnk_0813AC84; +extern ScreenTransitionData gUnk_0813AC98; +extern ScreenTransitionData gUnk_0813ACAC; +extern ScreenTransitionData gUnk_0813ACC0; +extern ScreenTransitionData gUnk_0813ACD4; +extern ScreenTransitionData gUnk_0813ACE8; +extern ScreenTransitionData gUnk_0813ACFC; + +// Array of pointers to ScreenTransitionData +const ScreenTransitionData* const gUnk_081141A4[] = { // + &gUnk_0813AB6C, &gUnk_0813ABBC, &gUnk_0813ABE4, &gUnk_0813ABF8, &gUnk_0813AC0C, &gUnk_0813AC20, + &gUnk_0813AC5C, &gUnk_0813AC70, &gUnk_0813AC84, &gUnk_0813AC98, &gUnk_0813ACAC, &gUnk_0813ACC0, + &gUnk_0813ACD4, &gUnk_0813ACE8, &gUnk_0813AC5C, &gUnk_0813ACFC +}; + +// param_2 for the call to sub_0808091C, same indices as gUnk_081141A4 +const u8 gUnk_081141E4[] = { // + 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x09, 0x02, 0x02, 0x04, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02 +}; + +// tiles that are changed? +const u16 gUnk_081141F4[] = { 0x047a, 0x047b, 0x05af, 0x05ef, 0x0738, 0x0739, 0x073a, 0x073b, 0x0000, 0x0000 }; diff --git a/src/npc/npc4F.c b/src/npc/npc4F.c new file mode 100644 index 00000000..07e05132 --- /dev/null +++ b/src/npc/npc4F.c @@ -0,0 +1,14 @@ +#include "global.h" +#include "entity.h" +#include "random.h" + +void NPC4F(Entity* this) { + if (this->action == 0) { + this->action += 1; + InitAnimationForceUpdate(this, this->type); + } + UpdateAnimationSingleFrame(this); + if (this->frameDuration == 0xfe) { + this->frameDuration = (Random() & 0x1f) + 0x14; + } +} diff --git a/src/npc/smallTownMinish.c b/src/npc/smallTownMinish.c new file mode 100644 index 00000000..a51772c1 --- /dev/null +++ b/src/npc/smallTownMinish.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "entity.h" +#include "player.h" +#include "script.h" +#include "save.h" +#include "functions.h" + +extern Hitbox gUnk_081142FC; +extern void sub_08078850(Entity*, u32, u32, u32*); +extern u32 gUnk_08114304; + +extern Dialog gUnk_08114308[]; + +void SmallTownMinish(Entity* this) { + if (this->action == 0) { + this->action += 1; + this->hitbox = &gUnk_081142FC; + sub_0807DD50(this); + sub_08078850(this, 1, 0, &gUnk_08114304); + } else { + sub_0807DD94(this, NULL); + } + if ((gPlayerState.flags.all & 0x80) != 0) { + this->spriteSettings.b.draw = 1; + } else { + this->spriteSettings.b.draw = 0; + } +} + +void sub_0806E2DC(Entity* this) { + s32 dialog = gSave.unk8 - 2; + if (dialog < 0) { + dialog = 0; + } + ShowNPCDialogue(this, gUnk_08114308 + this->type2 * 8 + dialog); +} diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c index df2d8fe3..79f35176 100644 --- a/src/npc/townMinish.c +++ b/src/npc/townMinish.c @@ -256,7 +256,7 @@ void sub_0806AFE8(Entity* this, ScriptExecutionContext* context) { void sub_0806B004(Entity* this, ScriptExecutionContext* context) { int idx = 0; - if (CheckGlobalFlag(0x29)) { + if (CheckGlobalFlag(MIZUKAKI_START)) { if (CheckLocalFlag(0x73)) { if (GetInventoryValue(0x46) == 0) { idx = 3; @@ -279,7 +279,7 @@ void sub_0806B004(Entity* this, ScriptExecutionContext* context) { void sub_0806B064(Entity* this) { int idx = 0; - if (CheckGlobalFlag(0x29)) { + if (CheckGlobalFlag(MIZUKAKI_START)) { idx = 1; if (CheckLocalFlag(0x73)) { idx = 2; @@ -294,8 +294,8 @@ void sub_0806B098(Entity* this) { if (GetInventoryValue(0x46) == 0) { idx = 1; - if (CheckGlobalFlag(0x29)) { - f = CheckGlobalFlag(0x2a); + if (CheckGlobalFlag(MIZUKAKI_START)) { + f = CheckGlobalFlag(MIZUKAKI_HARIFALL); idx = BOOLCAST(f); } } diff --git a/src/player.c b/src/player.c index c501409f..364e7821 100644 --- a/src/player.c +++ b/src/player.c @@ -1779,7 +1779,7 @@ NONMATCH("asm/non_matching/player/sub_08072D54.s", void sub_08072D54(Entity* thi } sub_08008790(this, 7); if (gPlayerState.field_0x14 != 0) { - if (!sub_08008B22() != 0) { + if (sub_08008B22() == 0) { gPlayerState.field_0x10[1] = 7; if (!(gPlayerState.flags.all & 0x80)) { sub_080791BC(); diff --git a/src/room.c b/src/room.c index 18ca4e10..682a6935 100644 --- a/src/room.c +++ b/src/room.c @@ -1003,13 +1003,13 @@ extern EntityData gUnk_080D9108; extern EntityData gUnk_080D9098; void sub_0804C018(void) { - if (!CheckGlobalFlag(0x20)) { + if (!CheckGlobalFlag(HAKA_KEY_LOST)) { // graveyard key if (GetInventoryValue(0x3c) == 1) { LoadRoomEntityList(&gUnk_080D90C8); LoadRoomEntityList(&gUnk_080D9108); } - } else if (!CheckGlobalFlag(0x21)) + } else if (!CheckGlobalFlag(HAKA_KEY_FOUND)) LoadRoomEntityList(&gUnk_080D9108); if (GetInventoryValue(0x3c) != 2) {