diff --git a/asm/townMinish.s b/asm/townMinish.s deleted file mode 100644 index 18494800..00000000 --- a/asm/townMinish.s +++ /dev/null @@ -1,740 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0806AC3C -sub_0806AC3C: @ 0x0806AC3C - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #3 - bhi _0806ACBA - ldr r4, _0806AC6C @ =gPlayerEntity - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0x18 - movs r3, #0x18 - bl sub_080041A0 - cmp r0, #0 - beq _0806AC70 - adds r0, r5, #0 - adds r1, r4, #0 - bl GetFacingDirection - adds r2, r0, #0 - movs r0, #0x1e - ands r2, r0 - b _0806AC74 - .align 2, 0 -_0806AC6C: .4byte gPlayerEntity -_0806AC70: - ldrb r0, [r5, #0x14] - lsls r2, r0, #2 -_0806AC74: - adds r0, r5, #0 - adds r0, #0x69 - ldrb r3, [r0] - adds r4, r0, #0 - cmp r2, r3 - beq _0806AC9A - subs r0, r2, r3 - movs r1, #0x1f - ands r0, r1 - cmp r0, #0xf - bgt _0806AC8E - subs r0, r3, #1 - b _0806AC90 -_0806AC8E: - adds r0, r3, #1 -_0806AC90: - strb r0, [r4] - ldrb r1, [r4] - movs r0, #0x1f - ands r0, r1 - strb r0, [r4] -_0806AC9A: - ldrb r1, [r4] - movs r0, #7 - ands r0, r1 - cmp r0, #0 - bne _0806ACBA - ldrb r0, [r4] - bl sub_0806F5B0 - strb r0, [r5, #0x14] - ldrb r1, [r5, #0x14] - lsrs r1, r1, #1 - movs r0, #2 - eors r1, r0 - adds r0, r5, #0 - bl InitializeAnimation -_0806ACBA: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0806ACC4 -sub_0806ACC4: @ 0x0806ACC4 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r5, [r4, #0xc] - cmp r5, #1 - beq _0806AD28 - cmp r5, #1 - bgt _0806ACD8 - cmp r5, #0 - beq _0806ACE4 - b _0806ADEA -_0806ACD8: - cmp r5, #2 - beq _0806ADB8 - cmp r5, #3 - bne _0806ACE2 - b _0806ADDC -_0806ACE2: - b _0806ADEA -_0806ACE4: - ldrb r1, [r4, #0xa] - lsls r1, r1, #4 - ldr r0, _0806AD24 @ =gUnk_08112674 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - bne _0806ACF8 - b _0806ADFA -_0806ACF8: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x6a - strb r0, [r1] - lsls r0, r0, #1 - strb r0, [r4, #0x14] - strb r5, [r4, #0xe] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807DD50 - ldrb r1, [r4, #0x14] - lsrs r1, r1, #1 - adds r1, #8 - b _0806ADCE - .align 2, 0 -_0806AD24: .4byte gUnk_08112674 -_0806AD28: - adds r5, r4, #0 - adds r5, #0x39 - movs r0, #0 - ldrsb r0, [r5, r0] - cmp r0, #2 - bne _0806AD44 - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xc] - strb r1, [r5] - adds r0, r4, #0 - bl sub_0806F118 - b _0806ADEA -_0806AD44: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DDAC - adds r0, r4, #0 - bl sub_0806AEA8 - ldrb r0, [r4, #0xb] - cmp r0, #0xa - bne _0806AD8A - movs r0, #0 - ldrsb r0, [r5, r0] - cmp r0, #0 - beq _0806AD8A - movs r1, #0 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r5] - ldr r1, _0806ADAC @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r1, #8 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - adds r0, r4, #0 - bl sub_0806AFE8 -_0806AD8A: - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _0806ADEA - ldr r0, _0806ADAC @ =gPlayerEntity - ldrb r3, [r0, #0x14] - lsrs r3, r3, #1 - ldr r0, _0806ADB0 @ =gUnk_081126E4 - adds r0, r3, r0 - ldrb r2, [r0] - lsls r3, r3, #2 - ldr r0, _0806ADB4 @ =gUnk_081126D4 - adds r3, r3, r0 - adds r0, r4, #0 - movs r1, #1 - bl sub_08078850 - b _0806ADEA - .align 2, 0 -_0806ADAC: .4byte gPlayerEntity -_0806ADB0: .4byte gUnk_081126E4 -_0806ADB4: .4byte gUnk_081126D4 -_0806ADB8: - ldr r0, _0806ADD8 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0806ADEA - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x14] - lsrs r1, r1, #1 - adds r1, #4 -_0806ADCE: - adds r0, r4, #0 - bl InitializeAnimation - b _0806ADEA - .align 2, 0 -_0806ADD8: .4byte gTextBox -_0806ADDC: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806ADEA - movs r0, #1 - strb r0, [r4, #0xc] -_0806ADEA: - adds r0, r4, #0 - adds r0, #0x59 - ldrb r0, [r0] - cmp r0, #0xff - beq _0806ADFA - adds r0, r4, #0 - bl GetNextFrame -_0806ADFA: - pop {r4, r5, pc} - - thumb_func_start sub_0806ADFC -sub_0806ADFC: @ 0x0806ADFC - push {lr} - adds r1, r0, #0 - adds r1, #0x68 - ldrb r1, [r1] - bl sub_08078784 - pop {pc} - .align 2, 0 - - thumb_func_start TownMinish_Head -TownMinish_Head: @ 0x0806AE0C - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _0806AE62 - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - lsrs r2, r0, #1 - adds r0, r4, #0 - adds r0, #0x5b - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0806AE3C - adds r2, #0x1c - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - b _0806AE46 -_0806AE3C: - adds r0, r4, #0 - movs r1, #0 - movs r2, #0xff - bl SetExtraSpriteFrame -_0806AE46: - 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 - b _0806AEA4 -_0806AE62: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r2, [r0] - cmp r2, #0xff - beq _0806AE72 - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 -_0806AE72: - adds r0, r4, #0 - adds r0, #0x5b - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _0806AE82 - movs r2, #0xff -_0806AE82: - 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 -_0806AEA4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0806AEA8 -sub_0806AEA8: @ 0x0806AEA8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x82 - ldrh r5, [r6] - ldr r0, _0806AED4 @ =0x0000FFDF - ands r0, r5 - strh r0, [r6] - movs r0, #0x20 - ands r0, r5 - cmp r0, #0 - beq _0806AECA - movs r1, #0x80 - lsls r1, r1, #7 - adds r0, r4, #0 - bl sub_08003FC4 -_0806AECA: - adds r0, r4, #0 - bl sub_0807DDE4 - strh r5, [r6] - pop {r4, r5, r6, pc} - .align 2, 0 -_0806AED4: .4byte 0x0000FFDF - - thumb_func_start sub_0806AED8 -sub_0806AED8: @ 0x0806AED8 - push {lr} - movs r1, #0 - strb r1, [r0, #0xe] - bl sub_0806AEE4 - pop {pc} - - thumb_func_start sub_0806AEE4 -sub_0806AEE4: @ 0x0806AEE4 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - adds r7, r0, #0 - cmp r7, #0 - beq _0806AEF6 - subs r0, #1 - strb r0, [r4, #0xe] - b _0806AF5A -_0806AEF6: - movs r0, #2 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0x20 - movs r2, #0x20 - bl sub_0806EDD8 - adds r3, r0, #0 - cmp r3, #0 - bge _0806AF16 - adds r0, r4, #0 - adds r0, #0x6a - ldrb r1, [r0] - lsls r0, r1, #1 - strb r0, [r4, #0x14] - lsls r3, r1, #3 -_0806AF16: - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #5 - asrs r1, r3, #1 - lsls r1, r1, #1 - ldr r2, _0806AF5C @ =gUnk_081125F4 - adds r1, r1, r2 - adds r0, r0, r1 - ldrb r6, [r0] - ldrb r5, [r0, #1] - movs r0, #0x80 - ands r0, r5 - cmp r0, #0 - beq _0806AF3A - adds r0, r3, #0 - bl sub_0806F5B0 - strb r0, [r4, #0x14] -_0806AF3A: - movs r0, #0x7f - ands r5, r0 - adds r0, r4, #0 - adds r0, #0x5a - strb r6, [r0] - strb r5, [r4, #0x1e] - adds r1, r4, #0 - adds r1, #0x5b - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x58 - strb r7, [r0] - subs r1, #2 - movs r0, #0xff - strb r0, [r1] -_0806AF5A: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0806AF5C: .4byte gUnk_081125F4 - - thumb_func_start sub_0806AF60 -sub_0806AF60: @ 0x0806AF60 - push {lr} - ldrb r2, [r0, #0x14] - lsrs r2, r2, #1 - ldr r1, [r1, #4] - adds r1, r1, r2 - bl InitializeAnimation - pop {pc} - - thumb_func_start sub_0806AF70 -sub_0806AF70: @ 0x0806AF70 - movs r1, #0x90 - lsls r1, r1, #0xa - str r1, [r0, #0x20] - bx lr - - thumb_func_start sub_0806AF78 -sub_0806AF78: @ 0x0806AF78 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r1, #0xc0 - lsls r1, r1, #5 - bl sub_08003FC4 - ldr r0, [r4, #0x34] - cmp r0, #0 - blt _0806AF9E - ldr r0, [r4, #0x20] - cmp r0, #0 - bgt _0806AF9E - movs r0, #0 - str r0, [r4, #0x34] - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0806AF70 -_0806AF9E: - pop {r4, r5, pc} - - thumb_func_start sub_0806AFA0 -sub_0806AFA0: @ 0x0806AFA0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806ED78 - cmp r0, #0 - beq _0806AFBA - movs r0, #0x24 - ldrsh r1, [r4, r0] - rsbs r1, r1, #0 - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C -_0806AFBA: - pop {r4, pc} - - thumb_func_start sub_0806AFBC -sub_0806AFBC: @ 0x0806AFBC - push {lr} - adds r3, r0, #0 - ldr r0, _0806AFE0 @ =gUnk_02002A40 - ldrb r0, [r0, #8] - subs r0, #2 - cmp r0, #0 - bge _0806AFCC - movs r0, #0 -_0806AFCC: - ldrb r1, [r3, #0xb] - lsls r1, r1, #6 - lsls r0, r0, #3 - ldr r2, _0806AFE4 @ =gUnk_081126F0 - adds r0, r0, r2 - adds r1, r1, r0 - adds r0, r3, #0 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_0806AFE0: .4byte gUnk_02002A40 -_0806AFE4: .4byte gUnk_081126F0 - - thumb_func_start sub_0806AFE8 -sub_0806AFE8: @ 0x0806AFE8 - push {lr} - movs r2, #0 - str r2, [r1, #0x14] - ldr r3, _0806B000 @ =gUnk_08112BF0 - ldrb r2, [r0, #0xb] - lsls r2, r2, #2 - adds r2, r2, r3 - ldr r2, [r2] - bl _call_via_r2 - pop {pc} - .align 2, 0 -_0806B000: .4byte gUnk_08112BF0 - - thumb_func_start sub_0806B004 -sub_0806B004: @ 0x0806B004 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - movs r4, #0 - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - beq _0806B050 - movs r0, #0x73 - bl CheckLocalFlag - cmp r0, #0 - beq _0806B048 - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _0806B044 - movs r4, #3 - movs r0, #0x78 - bl CheckLocalFlag - cmp r0, #0 - bne _0806B050 - movs r4, #2 - movs r0, #1 - str r0, [r5, #0x14] - movs r0, #0x78 - bl SetLocalFlag - b _0806B050 -_0806B044: - movs r4, #4 - b _0806B050 -_0806B048: - movs r4, #1 - movs r0, #0x6a - bl SetLocalFlag -_0806B050: - ldr r0, _0806B060 @ =gUnk_08112C40 - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r6, #0 - bl TextboxNoOverlap - pop {r4, r5, r6, pc} - .align 2, 0 -_0806B060: .4byte gUnk_08112C40 - - thumb_func_start sub_0806B064 -sub_0806B064: @ 0x0806B064 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - beq _0806B082 - movs r4, #1 - movs r0, #0x73 - bl CheckLocalFlag - cmp r0, #0 - beq _0806B082 - movs r4, #2 -_0806B082: - ldr r0, _0806B094 @ =gUnk_08112C4A - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_0806B094: .4byte gUnk_08112C4A - - thumb_func_start sub_0806B098 -sub_0806B098: @ 0x0806B098 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #2 - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _0806B0C0 - movs r4, #1 - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - beq _0806B0C0 - movs r0, #0x2a - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f -_0806B0C0: - ldr r2, _0806B0DC @ =gUnk_08112C50 - ldrb r1, [r5, #0xb] - subs r1, #7 - lsls r0, r1, #1 - adds r0, r0, r1 - adds r0, r0, r4 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_0806B0DC: .4byte gUnk_08112C50 - - thumb_func_start sub_0806B0E0 -sub_0806B0E0: @ 0x0806B0E0 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #0 - movs r0, #0x38 - movs r1, #0xb8 - movs r2, #1 - bl sub_080002C0 - cmp r0, #0x57 - bne _0806B120 - movs r0, #0x48 - movs r1, #0xb8 - movs r2, #1 - bl sub_080002C0 - cmp r0, #0x57 - bne _0806B120 - movs r0, #0x38 - movs r1, #0xc8 - movs r2, #1 - bl sub_080002C0 - cmp r0, #0x57 - bne _0806B120 - movs r0, #0x48 - movs r1, #0xc8 - movs r2, #1 - bl sub_080002C0 - cmp r0, #0x57 - bne _0806B120 - movs r5, #1 -_0806B120: - ldr r0, _0806B130 @ =gUnk_08112C5C - lsls r1, r5, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r4, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_0806B130: .4byte gUnk_08112C5C - - thumb_func_start sub_0806B134 -sub_0806B134: @ 0x0806B134 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x45 - bl GetInventoryValue - cmp r0, #0 - beq _0806B158 - movs r4, #2 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - bne _0806B160 - movs r4, #1 - movs r0, #0x7b - bl SetLocalFlag - b _0806B160 -_0806B158: - movs r4, #0 - movs r0, #0x4a - bl SetGlobalFlag -_0806B160: - ldr r0, _0806B17C @ =gUnk_02002A40 - ldrb r0, [r0, #8] - cmp r0, #5 - bls _0806B16A - movs r4, #3 -_0806B16A: - ldr r0, _0806B180 @ =gUnk_08112C60 - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_0806B17C: .4byte gUnk_02002A40 -_0806B180: .4byte gUnk_08112C60 - - thumb_func_start TownMinish_Fusion -TownMinish_Fusion: @ 0x0806B184 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0806B1C4 - ldrb r1, [r4, #0xa] - lsls r1, r1, #4 - ldr r0, _0806B1C0 @ =gUnk_08112674 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806B1CA - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #6 - bl InitializeAnimation - b _0806B1CA - .align 2, 0 -_0806B1C0: .4byte gUnk_08112674 -_0806B1C4: - adds r0, r4, #0 - bl GetNextFrame -_0806B1CA: - pop {r4, pc} diff --git a/include/functions.h b/include/functions.h index 11382f48..585d8518 100644 --- a/include/functions.h +++ b/include/functions.h @@ -13,7 +13,7 @@ // Identified - to be sorted into header files extern u32 Random(void); extern void PlaySFX(u32); -extern void ShowNPCDialogue(Entity*, u32*); +extern void ShowNPCDialogue(Entity*, Dialog*); extern u32 UpdateFuseInteraction(); extern void DeleteEntity(Entity*); extern u32 __modsi3(u32, u32); @@ -46,7 +46,7 @@ extern void ExecuteScriptCommandSet(Entity*, void *); extern void _DmaFill32(u32, void*, u32); // Unidentified -extern void sub_0806ED78(Entity*); +extern u32 sub_0806ED78(Entity*); extern void sub_0806920C(Entity*); extern u32 sub_0805ACC0(Entity*); extern u32 sub_0801E99C(Entity*); @@ -78,7 +78,6 @@ extern s32 sub_0806ED9C(Entity*, u32, u32); extern void sub_0807000C(Entity*); extern void sub_0805E47C(Entity*); extern void sub_0805E584(Entity*); -extern void sub_0806ED78(Entity*); extern void sub_08068BEC(Entity*, u32); extern void sub_08078778(Entity*); extern s32 sub_0806ED9C(Entity*, u32, u32); @@ -103,7 +102,7 @@ extern u32 sub_08049EE4(Entity*); extern Entity *sub_0804A98C(Entity *, u32, u32); extern u32 sub_080544DC(u8); extern void sub_08077E54(Entity*); -extern void sub_080042BA(Entity*); +extern void sub_080042BA(Entity*, u32); extern void _DmaZero(void*, u32); extern void sub_08077F24(ItemBehavior*, u32); extern void sub_08079184(); diff --git a/include/npc.h b/include/npc.h index 4551b756..b6288ff2 100644 --- a/include/npc.h +++ b/include/npc.h @@ -171,7 +171,6 @@ extern void NPC58(Entity*); extern void NPC58_Head(Entity*); extern u32 UpdateFuseInteraction(Entity*); -extern void ShowNPCDialogue(Entity*, u32*); #endif \ No newline at end of file diff --git a/include/structures.h b/include/structures.h index 01456a44..b6d348a9 100644 --- a/include/structures.h +++ b/include/structures.h @@ -23,7 +23,7 @@ typedef struct { } struct_0807D1C4; #define gUnk_02000000 ((struct_02000000*)(0x2000000)) -//extern struct_02000000 gUnk_02000000; +// extern struct_02000000 gUnk_02000000; typedef struct { u8 filler0[0x4]; @@ -57,7 +57,7 @@ typedef struct { extern SaveFile gUnk_02002A40; typedef struct { - u32 frameCount; // regular frame count? does anything reset it? + u32 frameCount; // regular frame count? does anything reset it? u8 field_0x4[0x4]; bool8 transitioningOut; u8 transitionType; // transition when changing areas @@ -123,7 +123,7 @@ typedef struct { u8 field_0x2; u8 field_0x3; u32 field_0x4; - u16 fadeType; // fade in or out, are there others? + u16 fadeType; // fade in or out, are there others? u16 fadeSpeed; // subtracted from duration u16 fadeDuration; u16 field_0xe; @@ -160,4 +160,18 @@ typedef struct { } struct_02034480; extern struct_02034480 gUnk_02034480; +typedef struct { + u32 flag : 12; + u32 flagType : 4; + u32 type : 4; + u32 unk : 1; + union { + struct { + u16 a; + u16 b; + } indices; + void (*func)(Entity*); + } data; +} Dialog; + #endif diff --git a/linker.ld b/linker.ld index 46227a68..a51f596e 100644 --- a/linker.ld +++ b/linker.ld @@ -601,7 +601,6 @@ SECTIONS { src/npc/rem.o(.text); asm/rem.o(.text); src/npc/townMinish.o(.text); - asm/townMinish.o(.text); src/npc/librari.o(.text); src/npc/percy.o(.text); asm/percy.o(.text); diff --git a/src/code_08077DF4.c b/src/code_08077DF4.c index 1f6d9246..69dd5820 100644 --- a/src/code_08077DF4.c +++ b/src/code_08077DF4.c @@ -29,9 +29,9 @@ void UpdateItemAnim(Entity *ent) sub_08077E54(ent); } -void sub_08077E3C(Entity *ent) +void sub_08077E3C(Entity *ent, u32 idx) { - sub_080042BA(&gPlayerEntity); + sub_080042BA(&gPlayerEntity, idx); sub_08077E54(ent); } diff --git a/src/npc/cow.c b/src/npc/cow.c index 9c62c898..54500e02 100644 --- a/src/npc/cow.c +++ b/src/npc/cow.c @@ -1,21 +1,19 @@ #include "global.h" #include "entity.h" #include "player.h" +#include "functions.h" -extern void sub_0806ED78(Entity*); extern void sub_0806920C(Entity*); extern u32 sub_0805ACC0(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_0806924C(Entity*); -extern void sub_080AEF88(Entity*); -extern void ShowNPCDialogue(Entity*, u32*); extern void sub_08078778(Entity*); extern void sub_080787A8(Entity*, u32); extern void sub_0806F118(Entity*); extern void sub_080791D0(); extern void (*gUnk_08111914[])(Entity*); extern void (*gUnk_08111928[])(Entity*); -extern u32 gUnk_08111938[]; +extern Dialog gUnk_08111938[]; extern void PlaySFX(u32); extern u32 Random(); extern u32 UpdateFuseInteraction(Entity*); @@ -184,9 +182,7 @@ void sub_080691E0(Entity* ent) { // Show dialogue void Cow_ShowDialogue(Entity* ent) { - u32 var0 = ent->entityType.form; - u32* var1 = gUnk_08111938 + (var0 * 2); - ShowNPCDialogue(ent, var1); + ShowNPCDialogue(ent, &gUnk_08111938[ent->entityType.form]); } void sub_0806920C(Entity* ent) { diff --git a/src/npc/epona.c b/src/npc/epona.c index 89c18204..69368bc3 100644 --- a/src/npc/epona.c +++ b/src/npc/epona.c @@ -8,7 +8,7 @@ void sub_08065A64(Entity* this); void sub_08065AA4(Entity*); extern void (*gUnk_0811006C[])(Entity*); -extern u32 gUnk_08110080[]; +extern Dialog gUnk_08110080[]; void Epona(Entity* this) { gUnk_0811006C[this->action](this); @@ -50,7 +50,7 @@ void sub_08065A34(Entity* this) { } void sub_08065A50(Entity* this) { - ShowNPCDialogue(this, &gUnk_08110080[this->entityType.form * 2]); + ShowNPCDialogue(this, &gUnk_08110080[this->entityType.form]); } void sub_08065A64(Entity* this) { diff --git a/src/npc/festari.c b/src/npc/festari.c index 3a86130c..dccde267 100644 --- a/src/npc/festari.c +++ b/src/npc/festari.c @@ -10,7 +10,6 @@ extern void sub_0807DD50(Entity*); extern void sub_0806F118(Entity*); extern void ExecuteScriptCommandSet(Entity*, void *); extern void sub_0805FF2C(Entity*, void*); -extern void sub_0806ED78(Entity*); extern void (*const gUnk_08109BBC[])(Entity*); diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index 7c2d214d..5dc80dce 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -5,9 +5,8 @@ #include "textbox.h" #include "player.h" #include "structures.h" +#include "functions.h" -extern void sub_0805E3A0(Entity*, u32); -extern void StartCutscene(Entity*, void*); extern void sub_0807DD50(Entity*); extern void sub_0806F118(Entity*); extern void sub_0807DDAC(Entity*, u32); @@ -16,7 +15,6 @@ extern void sub_080600F0(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_08078784(Entity*, u32); extern void sub_0807000C(Entity*); -extern void sub_080042BA(Entity*, u32); extern void sub_08060158(Entity*); extern u32 CheckKinstoneFused(u32); extern Entity* FindEntityInListBySubtype(u32, u32, u32); @@ -26,10 +24,10 @@ extern u32 Random(void); extern void ModBombs(s32); extern SpriteLoadData gUnk_0810A348; -extern void* gUnk_08109D18[]; +extern u8* gUnk_08109D18[]; extern u8 gUnk_08109C98[]; extern u16 gUnk_0810A354[]; -extern u32 gUnk_08109DC8[]; +extern Dialog gUnk_08109DC8[]; extern u16 gUnk_0810A35A[]; extern u16 gUnk_0810A362[]; @@ -165,141 +163,125 @@ void sub_080601D4(Entity* this) { TextboxNoOverlap(gUnk_0810A354[uVar2], this); } -void sub_08060208(Entity *this) -{ - ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]); +void sub_08060208(Entity* this) { + ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x4]); } -void sub_0806021C(Entity *this) -{ - u32 uVar1; - u32 uVar2; +void sub_0806021C(Entity* this) { + u32 uVar1; + u32 uVar2; - //jabber nut - uVar1 = GetInventoryValue(0x5B); - uVar2 = (-uVar1 | uVar1) >> 0x1f; + // jabber nut + uVar1 = GetInventoryValue(0x5B); + uVar2 = (-uVar1 | uVar1) >> 0x1f; - //earth element - if (GetInventoryValue(0x40)) { - uVar2 = 2; - } - - //mole mitts - if (GetInventoryValue(0x13)) { - uVar2 = 3; - } - ShowNPCDialogue(this, gUnk_08109DC8 + this->entityType.parameter * 0x8 + uVar2 * 2); -} - -void sub_0806025C(Entity *this) -{ - ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]); -} - -void sub_08060270(Entity *this) -{ - u32 index; - - //flippers - if (GetInventoryValue(0x46) == 0) { - index = 1; - if (CheckGlobalFlag(MIZUKAKI_START) == 0) { - index = 0; - SetGlobalFlag(MIZUKAKI_START); + // earth element + if (GetInventoryValue(0x40)) { + uVar2 = 2; } - } - else { - index = 3; - if (CheckLocalFlag(0x76) == 0) { - index = 2; - SetLocalFlag(0x76); + + // mole mitts + if (GetInventoryValue(0x13)) { + uVar2 = 3; } - } - TextboxNoOverlap(gUnk_0810A35A[index], this); + ShowNPCDialogue(this, gUnk_08109DC8 + this->entityType.parameter * 0x4 + uVar2); } -void sub_080602BC(Entity *this) -{ - u32 index; - - //spin attack +void sub_0806025C(Entity* this) { + ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x4]); +} + +void sub_08060270(Entity* this) { + u32 index; + + // flippers + if (GetInventoryValue(0x46) == 0) { + index = 1; + if (CheckGlobalFlag(MIZUKAKI_START) == 0) { + index = 0; + SetGlobalFlag(MIZUKAKI_START); + } + } else { + index = 3; + if (CheckLocalFlag(0x76) == 0) { + index = 2; + SetLocalFlag(0x76); + } + } + TextboxNoOverlap(gUnk_0810A35A[index], this); +} + +void sub_080602BC(Entity* this) { + u32 index; + + // spin attack if (GetInventoryValue(0x48) != 0) { - index = (Random() & 1) + 2; + index = (Random() & 1) + 2; + } else { + if (gUnk_02002A40.stats.bombCount < gBombBagSizes[gUnk_02002A40.stats.bombBagType]) { + index = 1; + } else { + index = 0; + } } - else { - if (gUnk_02002A40.stats.bombCount < gBombBagSizes[gUnk_02002A40.stats.bombBagType]) { - index = 1; - } - else { - index = 0; - } - } - TextboxNoOverlap(gUnk_0810A362[index], this); + TextboxNoOverlap(gUnk_0810A362[index], this); } -void sub_0806030C(Entity* this, u32 *arg1) -{ +void sub_0806030C(Entity* this, u32* arg1) { ModBombs(*(arg1 + 1)); } -void sub_08060318(void) -{ - Entity *ent; - int i; - - for (i = 2; i >= 0; i--) { - ent = FindEntityInListBySubtype(8, 2, 2); - if (ent != NULL) { - sub_080A29BC(ent); - DeleteEntity(ent); +void sub_08060318(void) { + Entity* ent; + int i; + + for (i = 2; i >= 0; i--) { + ent = FindEntityInListBySubtype(8, 2, 2); + if (ent != NULL) { + sub_080A29BC(ent); + DeleteEntity(ent); + } } - } } -void sub_08060340(void) -{ - gUnk_02002A40.unk490 = gUnk_02002A40.unk50; +void sub_08060340(void) { + gUnk_02002A40.unk490 = gUnk_02002A40.unk50; } -u32 sub_08060354(void) -{ - u32 iVar1; - s32 iVar2; - - iVar2 = gUnk_02002A40.unk50 - gUnk_02002A40.unk490; - if (CheckGlobalFlag(DRUG_1) == 0) { - if (4 < iVar2) { - return 0x8444; +u32 sub_08060354(void) { + u32 iVar1; + s32 iVar2; + + iVar2 = gUnk_02002A40.unk50 - gUnk_02002A40.unk490; + if (CheckGlobalFlag(DRUG_1) == 0) { + if (4 < iVar2) { + return 0x8444; + } + } else { + if (CheckGlobalFlag(DRUG_2) == 0) { + if (iVar2 > 9) { + return 0x8444; + } + } else { + if (CheckGlobalFlag(DRUG_3) == 0) { + if (iVar2 > 14) { + return 0x8444; + } + } + } } - } - else { - if (CheckGlobalFlag(DRUG_2) == 0) { - if (iVar2 > 9) { - return 0x8444; - } - } - else { - if (CheckGlobalFlag(DRUG_3) == 0) { - if (iVar2 > 14) { - return 0x8444; - } - } - } - } - return 0; + return 0; } -void ForestMinish_Fusion(Entity *this) -{ - if (this->action == 0) { - if (LoadExtraSpriteData(this, &gUnk_0810A348)) { - this->action++; - this->spriteSettings.b.draw = TRUE; - sub_0805E3A0(this, 2); - InitializeAnimation(this, 6); +void ForestMinish_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_0810A348)) { + this->action++; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + InitializeAnimation(this, 6); + } + } else { + GetNextFrame(this); } - } - else { - GetNextFrame(this); - } } \ No newline at end of file diff --git a/src/npc/goron.c b/src/npc/goron.c index 0fa725e4..08ddcc5a 100644 --- a/src/npc/goron.c +++ b/src/npc/goron.c @@ -3,9 +3,10 @@ #include "functions.h" #include "textbox.h" +extern u8 gUnk_02033280[]; extern void (*gUnk_08111A80[])(Entity*); extern void (*gUnk_08111A8C[])(Entity*); -extern u8 gUnk_02033280[]; +extern Dialog gUnk_08111A94[]; void Goron(Entity* this) { if (this->flags & 2) { @@ -72,7 +73,7 @@ void sub_080693D0(Entity* this) { } if (this->frames.all == 2) { this->frames.all = 0; - sub_08069428(this, 0x80<<12, createFx65); + sub_08069428(this, 0x80 << 12, createFx65); } } } @@ -110,16 +111,16 @@ void sub_080694B0(Entity* this) { } } -extern u64 gUnk_08111A94[]; //array of unknown 64 bit structure type void sub_080694D8(Entity* this) { - ShowNPCDialogue(this, (u32*)&gUnk_08111A94[this->entityType.form]); + ShowNPCDialogue(this, &gUnk_08111A94[this->entityType.form]); } void sub_080694EC(Entity* this) { u32 anim; this->animationState = 4; anim = 2; - if (!CheckKinstoneFused(47)) anim = 8; + if (!CheckKinstoneFused(47)) + anim = 8; InitAnimationForceUpdate(this, anim); this->field_0x80.HWORD = anim; } diff --git a/src/npc/mayorHagen.c b/src/npc/mayorHagen.c index 222ec32c..63bc5e7a 100644 --- a/src/npc/mayorHagen.c +++ b/src/npc/mayorHagen.c @@ -7,33 +7,30 @@ #include "textbox.h" #include "npc.h" #include "structures.h" +#include "functions.h" extern void sub_0807DD50(Entity*); extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); -extern u32 sub_0801E99C(); -extern void sub_08078784(Entity*,u32); -extern void sub_0807DDAC(Entity*,u32); -extern void sub_0805E3A0(Entity*,u32); +extern void sub_08078784(Entity*, u32); +extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern void sub_08078850(); extern u32 gUnk_08113F44; -extern u32 gUnk_08113F48; +extern Dialog gUnk_08113F48[]; extern u32 GetInventoryValue(u32); extern u32 CheckLocalFlag(u32); extern void SetLocalFlag(); -extern void ShowNPCDialogue(); -void MayorHagen(Entity *this) -{ +void MayorHagen(Entity* this) { u32 v; switch (this->action) { case 0: - this->action = 1; - this->field_0x68.HALF.HI = 0; - this->field_0x68.HALF.LO = sub_0801E99C(this); - sub_0805E3A0(this, 2); - sub_0807DD50(this); + this->action = 1; + this->field_0x68.HALF.HI = 0; + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_0805E3A0(this, 2); + sub_0807DD50(this); break; case 1: v = this->interactType; @@ -41,11 +38,11 @@ void MayorHagen(Entity *this) this->action = v; this->interactType = 0; this->field_0x68.HALF.HI = this->animIndex; - InitAnimationForceUpdate(this,4 + sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity))); + InitAnimationForceUpdate(this, 4 + sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity))); sub_0806F118(this); break; } - sub_0807DDAC(this,0); + sub_0807DDAC(this, 0); sub_0807DDE4(this); UpdateAnimationSingleFrame(this); break; @@ -57,49 +54,43 @@ void MayorHagen(Entity *this) } } -void sub_0806CE5C(Entity *this) -{ - sub_08078784(this,sub_0801E99C()); - sub_08078850(this,1,0,&gUnk_08113F44); +void sub_0806CE5C(Entity* this) { + sub_08078784(this, sub_0801E99C(this)); + sub_08078850(this, 1, 0, &gUnk_08113F44); } -void sub_0806CE80(Entity *this) -{ +void sub_0806CE80(Entity* this) { u32 v; u32 v2; v = gUnk_02002A40.unk8; - if (v == 5) { - //flippers - if (GetInventoryValue(0x46) == 0) { - if (CheckLocalFlag(0x70) != 0) { - v2 = CheckLocalFlag(0x71); - if (v2 == 0) { - v = 0xb; - SetLocalFlag(0x71); - } - else { - v = 0xc; - } - } - else { + if (v == 5) { + // flippers + if (GetInventoryValue(0x46) == 0) { + if (CheckLocalFlag(0x70) != 0) { + v2 = CheckLocalFlag(0x71); + if (v2 == 0) { + v = 0xb; + SetLocalFlag(0x71); + } else { + v = 0xc; + } + } else { v = 0xa; } - } - else { - v2 = CheckLocalFlag(0x89); - if (v2 == 0) { - v = 0xd; - SetLocalFlag(0x89); - } - else { - v = 0xe; - } + } else { + v2 = CheckLocalFlag(0x89); + if (v2 == 0) { + v = 0xd; + SetLocalFlag(0x89); + } else { + v = 0xe; + } + } } - } - ShowNPCDialogue(this,&gUnk_08113F48 + 2*v); + ShowNPCDialogue(this, &gUnk_08113F48[v]); } -void MayorHagen_Fusion(Entity *this) { +void MayorHagen_Fusion(Entity* this) { if (this->action == 0) { this->action++; this->spriteSettings.b.draw = 1; diff --git a/src/npc/melari.c b/src/npc/melari.c index a50d4aad..87afe16c 100644 --- a/src/npc/melari.c +++ b/src/npc/melari.c @@ -4,7 +4,6 @@ #include "textbox.h" #include "functions.h" -extern void sub_0806ED78(Entity*); extern void sub_08068780(Entity*); extern void sub_08078778(Entity*); extern u32 Random(void); diff --git a/src/npc/mutoh.c b/src/npc/mutoh.c index b0e95a36..c0f5fda0 100644 --- a/src/npc/mutoh.c +++ b/src/npc/mutoh.c @@ -5,8 +5,8 @@ #include "textbox.h" #include "npc.h" #include "structures.h" +#include "functions.h" -extern void sub_0805E3A0(Entity*, u32); extern void sub_0807DD50(Entity*); extern u32 GetFacingDirection(Entity*, Entity*); extern u32 sub_0806F5A4(u32); @@ -19,10 +19,9 @@ extern void sub_08078784(Entity*, u32); extern SpriteLoadData gUnk_08110C00; extern u16 gUnk_08110C0C[]; -extern u32 gUnk_08110C10[]; +extern Dialog gUnk_08110C10[]; -void Mutoh(Entity* this) -{ +void Mutoh(Entity* this) { if (*(u32*)&this->cutsceneBeh == 0) { DeleteThisEntity(); } @@ -30,11 +29,11 @@ void Mutoh(Entity* this) switch (this->action) { case 0: if (LoadExtraSpriteData(this, &gUnk_08110C00)) { - this->action = 1; - this->spriteSettings.b.draw = TRUE; - sub_0805E3A0(this, 2); - sub_0807DD50(this); - } + this->action = 1; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + } break; case 1: if (this->interactType == 2) { @@ -53,48 +52,42 @@ void Mutoh(Entity* this) } } -void Mutoh_Head(Entity *this) -{ - SetExtraSpriteFrame(this, 0, (this->frames.all & -0x81)); - SetExtraSpriteFrame(this, 1, this->frameIndex); - SetSpriteSubEntryOffsetData1(this,1,0); - sub_0807000C(this); +void Mutoh_Head(Entity* this) { + SetExtraSpriteFrame(this, 0, (this->frames.all & -0x81)); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); } -void sub_080670B4(Entity *this) -{ - u32 uVar1; - u32 uVar2; - - uVar2 = 0; - if (GetInventoryValue(0x11) == 0) { - uVar1 = CheckGlobalFlag(TABIDACHI); - uVar2 = (-uVar1 | uVar1) >> 0x1f; - } - TextboxNoOverlap(gUnk_08110C0C[uVar2],this); -} +void sub_080670B4(Entity* this) { + u32 uVar1; + u32 uVar2; -void sub_080670E4(Entity *this) -{ - ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk8 * 2]); -} - -void sub_08067100(Entity *this) -{ - this->field_0x68.HALF.LO = sub_0801E99C(this); - sub_08078784(this, this->field_0x68.HALF.LO); -} - -void Mutoh_Fusion(Entity *this) -{ - if (this->action == 0) { - if (LoadExtraSpriteData(this, &gUnk_08110C00) != 0) { - this->action++; - this->spriteSettings.b.draw = TRUE; - InitializeAnimation(this, 2); + uVar2 = 0; + if (GetInventoryValue(0x11) == 0) { + uVar1 = CheckGlobalFlag(TABIDACHI); + uVar2 = (-uVar1 | uVar1) >> 0x1f; + } + TextboxNoOverlap(gUnk_08110C0C[uVar2], this); +} + +void sub_080670E4(Entity* this) { + ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk8]); +} + +void sub_08067100(Entity* this) { + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); +} + +void Mutoh_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110C00) != 0) { + this->action++; + this->spriteSettings.b.draw = TRUE; + InitializeAnimation(this, 2); + } + } else { + GetNextFrame(this); } - } - else { - GetNextFrame(this); - } } \ No newline at end of file diff --git a/src/npc/postman.c b/src/npc/postman.c index f3d9bd96..f7b6395d 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -18,7 +18,6 @@ extern void sub_0806EE04(Entity*, void*, u32); extern void sub_080604DC(Entity*); extern s32 sub_0806ED9C(Entity*, u32, u32); extern void sub_0806EE20(Entity*); -extern void sub_0806ED78(Entity*); extern u32 sub_080040A8(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_0807DD50(Entity*); @@ -43,7 +42,7 @@ extern Coords16 gUnk_0810A66C[]; extern s8* gUnk_0810A918[]; extern void (*const gUnk_0810AA24[])(Entity*); -extern u32 gUnk_0810AA30[]; +extern Dialog gUnk_0810AA30[]; extern struct_02033280 gUnk_02033280; void Postman(Entity* this) { @@ -205,13 +204,13 @@ void sub_080606C0(Entity *this) void sub_080606D8(Entity* this) { - s32 iVar1; + s32 index; - iVar1 = gUnk_02002A40.unk8 - 2; - if (iVar1 < 0) { - iVar1 = 0; + index = gUnk_02002A40.unk8 - 2; + if (index < 0) { + index = 0; } - ShowNPCDialogue(this, &gUnk_0810AA30[iVar1 * 2]); + ShowNPCDialogue(this, &gUnk_0810AA30[index]); } void sub_08060700(Entity *entity, u32 arg1) diff --git a/src/npc/rem.c b/src/npc/rem.c index b183f687..6d17b95d 100644 --- a/src/npc/rem.c +++ b/src/npc/rem.c @@ -4,7 +4,6 @@ extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); -extern void sub_0806ED78(Entity*); extern void PlaySFX(u32); extern void sub_0806A8C8(Entity*); extern void sub_0807DD94(Entity*, u32); diff --git a/src/npc/smith.c b/src/npc/smith.c index dc222709..171ccad2 100644 --- a/src/npc/smith.c +++ b/src/npc/smith.c @@ -1,30 +1,22 @@ #include "global.h" #include "entity.h" #include "textbox.h" - -typedef struct { - u8 filler[8]; - u8 unk; -} SaveFile; +#include "functions.h" extern u32 GetFacingDirection(Entity*, Entity*); extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); -extern void sub_0806ED78(Entity*); extern Entity* CreateFx(Entity*, u32, u32); extern void PlaySFX(u32); extern u32 Random(void); extern void sub_0807000C(Entity*); extern u32 sub_0801E99C(Entity*); -extern u32 sub_0806ED9C(Entity*, u32, u32); -extern u32 sub_0806F078(Entity*, u32); extern void sub_0807DD50(Entity*); extern void sub_0807DD94(Entity*, u32); extern void sub_0807DDAC(Entity*, u32); extern void sub_0807DDE4(Entity*); extern u32 UpdateFuseInteraction(Entity*); extern u32 GetAnimationState(Entity*); -extern void ShowNPCDialogue(Entity*, u32*); extern void sub_08078850(u32, u32, u32, u32*); extern void sub_08078784(Entity*, u32); @@ -33,193 +25,170 @@ extern void (*const gUnk_0811036C[])(Entity*); extern u16 gUnk_08110380[]; extern SpriteLoadData gUnk_08110354; -extern SaveFile gUnk_02002A40; -extern u32 gUnk_08110390[]; +extern Dialog gUnk_08110390[]; extern u16 gUnk_081103D0[]; extern u32 gUnk_081103E0; -#if NON_MATCHING //reg-alloc -void Smith(Entity *this) -{ - u32 iVar2; - u32 iVar4; - - if ((this->flags & 2) != 0) { - if (this->interactType == 2) { - this->action = 4; - this->interactType = 0; - iVar4 = (this->animIndex == 0xc) ? 8 : 0; - iVar2 = sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)); - InitAnimationForceUpdate(this, iVar2 + iVar4); - sub_0806F118(this); +#if NON_MATCHING // reg-alloc +void Smith(Entity* this) { + u32 iVar2; + u32 iVar4; + + if ((this->flags & 2) != 0) { + if (this->interactType == 2) { + this->action = 4; + this->interactType = 0; + iVar4 = (this->animIndex == 0xc) ? 8 : 0; + iVar2 = sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)); + InitAnimationForceUpdate(this, iVar2 + iVar4); + sub_0806F118(this); + } + gUnk_0811036C[this->action](this); + } else { + gUnk_08110360[this->action](this); + sub_0806ED78(this); + } + if (this->animIndex == 0xc) { + this->spritePriority.b1 = 0; + } else { + this->spritePriority.b1 = 1; + } + if ((this->frames.all & 1) != 0) { + this->frames.all &= 0xfe; + CreateFx(this, 0x3d, 0x20); + PlaySFX(gUnk_08110380[(Random() & 7)]); } - gUnk_0811036C[this->action](this); - } - else { - gUnk_08110360[this->action](this); - sub_0806ED78(this); - } - if (this->animIndex == 0xc) { - this->spritePriority.b1 = 0; - } - else { - this->spritePriority.b1 = 1; - } - if ((this->frames.all & 1) != 0) { - this->frames.all &= 0xfe; - CreateFx(this, 0x3d, 0x20); - PlaySFX(gUnk_08110380[(Random() & 7)]); - } } #else NAKED -void Smith(Entity *this) { +void Smith(Entity* this) { asm(".include \"asm/non_matching/smith/smith.inc\""); } #endif -void Smith_Head(Entity *this) -{ - u8 bVar1; - - bVar1 = this->frames.all; - SetExtraSpriteFrame(this, 0, this->frameIndex); - if ((bVar1 & 0x40) != 0) { - SetExtraSpriteFrame(this, 1, 0x16); - } - else { - SetExtraSpriteFrame(this, 1, 0xff); - } - SetSpriteSubEntryOffsetData1(this,0,1); - sub_0807000C(this); +void Smith_Head(Entity* this) { + u8 bVar1; + + bVar1 = this->frames.all; + SetExtraSpriteFrame(this, 0, this->frameIndex); + if ((bVar1 & 0x40) != 0) { + SetExtraSpriteFrame(this, 1, 0x16); + } else { + SetExtraSpriteFrame(this, 1, 0xff); + } + SetSpriteSubEntryOffsetData1(this, 0, 1); + sub_0807000C(this); } -void sub_080660EC(Entity *this) -{ +void sub_080660EC(Entity* this) { if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { - this->action = 1; - this->field_0x68.HALF.LO = sub_0801E99C(this); - InitAnimationForceUpdate(this, 2); - } -} - -void sub_08066118(Entity *this) -{ - s32 uVar1; - u32 iVar2; - - uVar1 = sub_0806ED9C(this, 0x28, 0x28); - if (uVar1 < 0) { - uVar1 = 2; - } - else { - if (this->field_0xf == 0) { - this->field_0xf = 0x10; + this->action = 1; + this->field_0x68.HALF.LO = sub_0801E99C(this); + InitAnimationForceUpdate(this, 2); } - else { - --this->field_0xf; - uVar1 = this->animIndex; +} + +void sub_08066118(Entity* this) { + s32 uVar1; + u32 iVar2; + + uVar1 = sub_0806ED9C(this, 0x28, 0x28); + if (uVar1 < 0) { + uVar1 = 2; + } else { + if (this->field_0xf == 0) { + this->field_0xf = 0x10; + } else { + --this->field_0xf; + uVar1 = this->animIndex; + } + } + if (sub_0806F078(this, uVar1) == 0) { + UpdateAnimationSingleFrame(this); + } + if (this->interactType != 0) { + this->action = 2; + TextboxNoOverlapFollow(0); } - } - if (sub_0806F078(this, uVar1) == 0) { - UpdateAnimationSingleFrame(this); - } - if (this->interactType != 0) { - this->action = 2; - TextboxNoOverlapFollow(0); - } } -void sub_08066170(Entity *this) -{ +void sub_08066170(Entity* this) { this->action = 1; } -void sub_08066178(Entity *this) -{ - if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { - this->action = 1; - this->spriteSettings.b.draw = 1; - this->field_0x68.HALF.LO = sub_0801E99C(this); - sub_0807DD50(this); - } +void sub_08066178(Entity* this) { + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action = 1; + this->spriteSettings.b.draw = 1; + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_0807DD50(this); + } } -void sub_080661B0(Entity *this) -{ +void sub_080661B0(Entity* this) { sub_0807DD94(this, 0); } -void sub_080661BC(Entity *this) -{ - u32 sVar1; - - if (this->animIndex == 0xc) { - UpdateAnimationSingleFrame(this); - if ((this->frames.b.f3) != 0) { - this->field_0x80.HWORD = GetAnimationState(this) + 8; - InitAnimationForceUpdate(this, this->field_0x80.HWORD); +void sub_080661BC(Entity* this) { + u32 sVar1; + + if (this->animIndex == 0xc) { + UpdateAnimationSingleFrame(this); + if ((this->frames.b.f3) != 0) { + this->field_0x80.HWORD = GetAnimationState(this) + 8; + InitAnimationForceUpdate(this, this->field_0x80.HWORD); + } + } else { + sub_0807DD94(this, 0); } - } - else { - sub_0807DD94(this,0); - } } -void sub_08066200(Entity *this) -{ - sub_0807DDAC(this, 0); - sub_0807DDE4(this); - UpdateAnimationSingleFrame(this); -} - -void sub_08066218(Entity *this) -{ - if (UpdateFuseInteraction(this) != 0) { - this->action = 1; - } -} - -void sub_0806622C(Entity *this) -{ - u32 iVar1; - - if (gUnk_02002A40.unk - 2 < 0) { - iVar1 = 0; - } - else { - iVar1 = gUnk_02002A40.unk - 2; - } - ShowNPCDialogue(this, &gUnk_08110390[iVar1 * 2]); -} - -void nullsub_501(Entity* this) {} - -void sub_08066258(void) -{ - PlaySFX(gUnk_081103D0[Random() & 7]); -} - -void sub_08066274(u32 arg0) -{ - sub_08078850(arg0, 1, 0, &gUnk_081103E0); -} - -void sub_08066288(Entity *arg0) -{ - sub_08078784(arg0, arg0->field_0x68.HALF.LO); -} - -void Smith_Fusion(Entity *this) -{ - if (this->action == 0) { - if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { - this->action++; - this->spriteSettings.b.draw = 1; - InitAnimationForceUpdate(this, 6); - } - } - else { +void sub_08066200(Entity* this) { + sub_0807DDAC(this, 0); + sub_0807DDE4(this); UpdateAnimationSingleFrame(this); - } +} + +void sub_08066218(Entity* this) { + if (UpdateFuseInteraction(this) != 0) { + this->action = 1; + } +} + +void sub_0806622C(Entity* this) { + u32 index; + + if (gUnk_02002A40.unk8 - 2 < 0) { + index = 0; + } else { + index = gUnk_02002A40.unk8 - 2; + } + ShowNPCDialogue(this, &gUnk_08110390[index]); +} + +void nullsub_501(Entity* this) { +} + +void sub_08066258(void) { + PlaySFX(gUnk_081103D0[Random() & 7]); +} + +void sub_08066274(u32 arg0) { + sub_08078850(arg0, 1, 0, &gUnk_081103E0); +} + +void sub_08066288(Entity* arg0) { + sub_08078784(arg0, arg0->field_0x68.HALF.LO); +} + +void Smith_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) { + this->action++; + this->spriteSettings.b.draw = 1; + InitAnimationForceUpdate(this, 6); + } + } else { + UpdateAnimationSingleFrame(this); + } } \ No newline at end of file diff --git a/src/npc/stamp.c b/src/npc/stamp.c index db1d7310..f77b1fdd 100644 --- a/src/npc/stamp.c +++ b/src/npc/stamp.c @@ -1,24 +1,21 @@ #include "global.h" #include "entity.h" #include "textbox.h" +#include "functions.h" extern void sub_08078778(Entity*); extern void sub_0805E47C(Entity*); -extern void sub_0806ED78(Entity*); extern void sub_0805E584(); extern void sub_0807DD64(); extern void sub_08062CA4(); extern void sub_0807DDAC(); extern void sub_0807DDE4(); extern u32 CheckKinstoneFused(); -extern void ShowNPCDialogue(); extern void (*gStampBehaviors1[4])(Entity*); extern void (*gStampBehaviors2[2])(Entity*); -extern u32 gUnk_0810C2E4; - - +extern Dialog gUnk_0810C2E4[2]; void Stamp(Entity* ent) { if ((ent->flags & 2) != 0) { @@ -80,7 +77,7 @@ void sub_08062CBC(Entity* ent) { u32 uVar1; uVar1 = CheckKinstoneFused(44); - ShowNPCDialogue(ent, &gUnk_0810C2E4 + ((-uVar1 | uVar1) >> 31) * 2); + ShowNPCDialogue(ent, &gUnk_0810C2E4[(-uVar1 | uVar1) >> 31]); } void sub_08062CE0(Entity* ent) { diff --git a/src/npc/teachers.c b/src/npc/teachers.c index 53d4a11a..09bab83d 100644 --- a/src/npc/teachers.c +++ b/src/npc/teachers.c @@ -1,27 +1,19 @@ #include "global.h" #include "entity.h" #include "player.h" - -typedef struct { - u8 filler[8]; - u8 unk; -} SaveFile; +#include "functions.h" extern SpriteLoadData gUnk_08113910[]; -extern void sub_0805E3A0(Entity*, u32); extern void sub_0807DD50(Entity*); extern u32 GetFacingDirection(Entity*, Entity*); extern u32 sub_0806F5A4(u32); extern void sub_0806F118(Entity*); extern void sub_0807DD94(Entity*, u32); -extern u32 sub_0801E99C(); extern void sub_08078784(Entity*, u32); extern u32 UpdateFuseInteraction(Entity*); extern void sub_0807000C(Entity*); -extern void ShowNPCDialogue(Entity*, u16*); -extern SaveFile gUnk_02002A40; -extern u16 gUnk_08113930[]; +extern Dialog gUnk_08113930[]; void Teachers(Entity* this) { switch (this->action) { @@ -55,59 +47,52 @@ void Teachers(Entity* this) { } } -void sub_0806C674(Entity *this) -{ - this->field_0x68.HALF.LO = sub_0801E99C(); +void sub_0806C674(Entity* this) { + this->field_0x68.HALF.LO = sub_0801E99C(this); sub_08078784(this, this->field_0x68.HALF.LO); } -void Teachers_Head(Entity *this) -{ - u8 bVar1; - u8 bVar2; - u32 uVar3; +void Teachers_Head(Entity* this) { + u8 bVar1; + u8 bVar2; + u32 uVar3; - - uVar3 = this->frames.all & -0x81; - bVar1 = this->frameIndex; - bVar2 = this->frameSpriteSettings & 0x3f; - if ((this->entityType).form == 0) { - SetExtraSpriteFrame(this,0, (uVar3 + 3)); - SetExtraSpriteFrame(this,1, bVar1); - SetSpriteSubEntryOffsetData1(this, 1, 0); - sub_0807000C(this); - } - else { - SetExtraSpriteFrame(this, 0, (uVar3 + 6)); - SetExtraSpriteFrame(this, 1, ((bVar2) + 3)); - SetExtraSpriteFrame(this, 2, bVar1); - SetSpriteSubEntryOffsetData1(this, 2, 1); - SetSpriteSubEntryOffsetData2(this, 2, 0); - sub_0807000C(this); - } -} - -void sub_0806C70C(Entity *this) -{ - int offset; - - offset = gUnk_02002A40.unk - 2; - if (offset < 0) { - offset = 0; - } - ShowNPCDialogue(this, gUnk_08113930 + this->entityType.form * 0x20 + offset * 4); -} - -void Teachers_Fusion(Entity *this) -{ - if (this->action == 0) { - if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) { - this->action++; - this->spriteSettings.b.draw = TRUE; - InitializeAnimation(this, 2); + uVar3 = this->frames.all & -0x81; + bVar1 = this->frameIndex; + bVar2 = this->frameSpriteSettings & 0x3f; + if ((this->entityType).form == 0) { + SetExtraSpriteFrame(this, 0, (uVar3 + 3)); + SetExtraSpriteFrame(this, 1, bVar1); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); + } else { + SetExtraSpriteFrame(this, 0, (uVar3 + 6)); + SetExtraSpriteFrame(this, 1, ((bVar2) + 3)); + SetExtraSpriteFrame(this, 2, bVar1); + SetSpriteSubEntryOffsetData1(this, 2, 1); + SetSpriteSubEntryOffsetData2(this, 2, 0); + sub_0807000C(this); + } +} + +void sub_0806C70C(Entity* this) { + int offset; + + offset = gUnk_02002A40.unk8 - 2; + if (offset < 0) + offset = 0; + + ShowNPCDialogue(this, gUnk_08113930 + this->entityType.form * 8 + offset); +} + +void Teachers_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) { + this->action++; + this->spriteSettings.b.draw = TRUE; + InitializeAnimation(this, 2); + } + } else { + GetNextFrame(this); } - } - else { - GetNextFrame(this); - } } \ No newline at end of file diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c index 80d207ef..0ef4098e 100644 --- a/src/npc/townMinish.c +++ b/src/npc/townMinish.c @@ -1,35 +1,49 @@ #include "global.h" #include "entity.h" #include "npc.h" +#include "functions.h" +#include "textbox.h" +#include "flags.h" -extern void InitializeAnimation(Entity *, u32); +extern void InitializeAnimation(Entity*, u32); +extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); -extern void sub_0806ED78(Entity *); +extern u32 sub_080002C0(); +extern void sub_0806ACC4(Entity*); +extern void sub_0806AEA8(); +extern void sub_0806AEE4(Entity*); +extern void sub_0806AFE8(Entity*, s32*); +extern s32 sub_0806EDD8(Entity*, u32, u32); +extern u32 sub_0806F5B0(u32); +extern void sub_0806F62C(Entity*, s32, s32); +extern void sub_08078784(Entity*, u32); +extern void sub_08078850(Entity*, u32, u32, u32*); -extern void (*gUnk_081126E8[])(); -extern void sub_0806ACC4(Entity *); - -extern u32 LoadExtraSpriteData(Entity *, SpriteLoadData *); +extern u8 gUnk_081125F4[12]; extern SpriteLoadData gUnk_08112674[]; +extern u32 gUnk_081126D4[4]; +extern u8 gUnk_081126E4[4]; +extern void (*gUnk_081126E8[])(); +extern Dialog gUnk_081126F0[0x10]; +extern void (*gUnk_08112BF0[])(Entity*, s32*); +extern u16 gUnk_08112C40[5]; +extern u16 gUnk_08112C4A[3]; +extern u16 gUnk_08112C50[6]; +extern u16 gUnk_08112C5C[2]; +extern u16 gUnk_08112C60[4]; -void TownMinish(Entity *this) -{ +void TownMinish(Entity* this) { if ((this->flags & 2) == 0) { - (*gUnk_081126E8[this->action])(this); + gUnk_081126E8[this->action](this); sub_0806ED78(this); - } - else { + } else { sub_0806ACC4(this); } } -void sub_0806ABFC(Entity *this) -{ - u8 animationState; - - SpriteLoadData* SpriteLoadData = &gUnk_08112674[this->entityType.form << 2]; - if (!LoadExtraSpriteData(this, SpriteLoadData)) - { +void sub_0806ABFC(Entity* this) { + SpriteLoadData* SpriteLoadData = &gUnk_08112674[this->entityType.form * 4]; + if (!LoadExtraSpriteData(this, SpriteLoadData)) { return; } @@ -38,47 +52,298 @@ void sub_0806ABFC(Entity *this) this->field_0x6a.HALF.LO = this->actionDelay; this->animationState = this->field_0x6a.HALF.LO << 1; - animationState = this->animationState; - this->field_0x68.HALF.HI = animationState << 2; + this->field_0x68.HALF.HI = this->animationState * 4; this->actionDelay = 0; } -// Not matching yet, not 100% sure it's functionally identical -/*void sub_0806AC3C(Entity *this) { - if (this->field_0x58 <= 3) { +void sub_0806AC3C(Entity* this) { + if (this->animIndex <= 3) { s32 unk; - u8 field_0x68; - - Entity *link = &gPlayerEntity; + Entity* link = &gPlayerEntity; if (sub_080041A0(this, link, 0x18, 0x18)) { - unk = GetFacingDirection(this, link) & (u8)0x1e; - } - else { - unk = this->animationState << 2; + unk = GetFacingDirection(this, link) & 0x1e; + } else { + unk = this->animationState * 4; } - field_0x68.HALF.HI = this->field_0x68.HALF.HI; - - if (unk != field_0x68.HALF.HI) { + if (unk != this->field_0x68.HALF.HI) { s32 temp; - if (((unk - field_0x68.HALF.HI) & 0x1f) <= 0xf) { - field_0x68.HALF.HI--; - } - else { - field_0x68.HALF.HI++; + if (((unk - this->field_0x68.HALF.HI) & 0x1f) <= 0xf) { + this->field_0x68.HALF.HI--; + } else { + this->field_0x68.HALF.HI++; } - temp = field_0x68.HALF.HI; - this->field_0x68.HALF.HI = temp & 0x1f; + this->field_0x68.HALF.HI &= 0x1f; } if (!(this->field_0x68.HALF.HI & 7)) { this->animationState = sub_0806F5B0(this->field_0x68.HALF.HI); - UpdateSprite(this, (this->animationState >> 1) ^ 2); + InitializeAnimation(this, (this->animationState / 2) ^ 2); } } - sub_080042B8(this); -}*/ + UpdateAnimationSingleFrame(this); +} + +void sub_0806ACC4(Entity* this) { + u8 delay; + switch (this->action) { + case 0: + if (LoadExtraSpriteData(this, &gUnk_08112674[this->entityType.form * 4]) == 0) + return; + + this->action = 1; + delay = this->actionDelay; + this->field_0x6a.HALF.LO = delay; + this->animationState = delay * 2; + this->actionDelay = 0; + + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_0807DD50(this); + InitializeAnimation(this, (this->animationState / 2) + 8); + break; + case 1: + if (this->interactType == 2) { + this->action = 3; + this->interactType = 0; + sub_0806F118(this); + } else { + sub_0807DDAC(this, 0); + sub_0806AEA8(this); + if (this->entityType.parameter == 10 && this->interactType) { + this->action = 2; + this->interactType = 0; + InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)) + 8); + sub_0806AFE8(this, *(s32**)&this->cutsceneBeh); + } + if (this->entityType.form == 1) { + u8 idx = gPlayerEntity.animationState >> 1; + sub_08078850(this, 1, gUnk_081126E4[idx], &gUnk_081126D4[idx]); + } + } + break; + case 2: + if (gTextBox.doTextBox & 0x7f) + break; + + this->action = 1; + InitializeAnimation(this, this->animationState / 2 + 4); + break; + case 3: + if (UpdateFuseInteraction(this)) + this->action = 1; + break; + } + + if (this->frameDuration != 0xff) { + GetNextFrame(this); + } +} + +void sub_0806ADFC(Entity* this) { + sub_08078784(this, this->field_0x68.HALF.LO); +} + +void TownMinish_Head(Entity* this) { + u32 frames; + + if ((this->flags & 2) == 0) { + frames = this->field_0x68.HALF.HI / 2; + if ((this->frameSpriteSettings & 1)) { + SetExtraSpriteFrame(this, 0, frames + 0x1c); + } else { + SetExtraSpriteFrame(this, 0, 0xff); + } + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); + } else { + frames = this->frames.all; + if (frames != 0xff) { + frames &= ~0x80; + } + if ((this->frameSpriteSettings & 1) == 0) { + frames = 0xff; + } + SetExtraSpriteFrame(this, 0, frames); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, 1, 0); + sub_0807000C(this); + } +} + +void sub_0806AEA8(Entity* this) { + int old = this->field_0x82.HWORD; + this->field_0x82.HWORD &= ~0x20; + if (old & 0x20) { + sub_08003FC4(this, 0x4000); + } + sub_0807DDE4(this); + this->field_0x82.HWORD = old; +} + +void sub_0806AED8(Entity* this) { + this->actionDelay = 0; + sub_0806AEE4(this); +} + +void sub_0806AEE4(Entity* this) { + int index; + u8* idx3; + u8 tmp1, tmp2; + + if (this->actionDelay) { + this->actionDelay--; + } else { + this->actionDelay = 2; + index = sub_0806EDD8(this, 0x20, 0x20); + if (index < 0) { + int state = this->field_0x6a.HALF.LO; + this->animationState = state * 2; + index = state * 8; + } + + idx3 = gUnk_081125F4 + (this->animationState / 2) * 0x20 + (index >> 1) * 2; + tmp1 = idx3[0]; + tmp2 = idx3[1]; + + if (tmp2 & 0x80) { + this->animationState = sub_0806F5B0(index); + } + tmp2 &= 0x7f; + this->frames.all = tmp1; + this->frameIndex = tmp2; + this->frameSpriteSettings = 1; + this->animIndex = 0; + this->frameDuration = 0xff; + } +} + +void sub_0806AF60(Entity* this, int* idx) { + InitializeAnimation(this, idx[1] + (this->animationState / 2)); +} + +void sub_0806AF70(Entity* this, u32 arg1) { + this->field_0x20 = 0x24000; +} + +void sub_0806AF78(Entity* this, u32 arg1) { + sub_08003FC4(this, 0x1800); + if (0 <= this->height.WORD && this->field_0x20 < 1) { + this->height.WORD = 0; + sub_0806AF70(this, arg1); + } +} + +void sub_0806AFA0(Entity* this) { + if (sub_0806ED78(this)) { + sub_0806F62C(this, -this->nonPlanarMovement, this->direction); + } +} + +void sub_0806AFBC(Entity* this) { + int idx = gUnk_02002A40.unk8 - 2; + if (idx < 0) + idx = 0; + + ShowNPCDialogue(this, gUnk_081126F0 + this->entityType.parameter * 8 + idx); +} + +void sub_0806AFE8(Entity* this, s32* unk) { + unk[5] = 0; + gUnk_08112BF0[this->entityType.parameter](this, unk); +} + +void sub_0806B004(Entity* this, int* unk) { + int idx = 0; + + if (CheckGlobalFlag(0x29)) { + if (CheckLocalFlag(0x73)) { + if (GetInventoryValue(0x46) == 0) { + idx = 3; + if (CheckLocalFlag(0x78) == 0) { + idx = 2; + unk[5] = 1; + SetLocalFlag(0x78); + } + } else { + idx = 4; + } + } else { + idx = 1; + SetLocalFlag(0x6a); + } + } + TextboxNoOverlap(gUnk_08112C40[idx], this); +} + +void sub_0806B064(Entity* this) { + int idx = 0; + + if (CheckGlobalFlag(0x29)) { + idx = 1; + if (CheckLocalFlag(0x73)) { + idx = 2; + } + } + TextboxNoOverlap(gUnk_08112C4A[idx], this); +} + +void sub_0806B098(Entity* this) { + u32 f; + int idx = 2; + + if (GetInventoryValue(0x46) == 0) { + idx = 1; + if (CheckGlobalFlag(0x29)) { + f = CheckGlobalFlag(0x2a); + idx = (-f | f) >> 0x1f; + } + } + TextboxNoOverlap(gUnk_08112C50[(this->entityType.parameter - 7) * 3 + idx], this); +} + +void sub_0806B0E0(Entity* this) { + int idx = 0; + + if (sub_080002C0(0x38, 0xb8, 1) == 0x57 && sub_080002C0(0x48, 0xb8, 1) == 0x57 && + sub_080002C0(0x38, 200, 1) == 0x57 && sub_080002C0(0x48, 200, 1) == 0x57) { + idx = 1; + } + + TextboxNoOverlap(gUnk_08112C5C[idx], this); +} + +void sub_0806B134(Entity* this) { + int idx; + + if (GetInventoryValue(0x45)) { + idx = 2; + if (CheckLocalFlag(0x7b) == 0) { + idx = 1; + SetLocalFlag(0x7b); + } + } else { + idx = 0; + SetGlobalFlag(0x4a); + } + if (5 < gUnk_02002A40.unk8) { + idx = 3; + } + TextboxNoOverlap(gUnk_08112C60[idx], this); +} + +void TownMinish_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08112674[this->entityType.form * 4])) { + this->action++; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 6); + } + } else { + GetNextFrame(this); + } +} diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c index 7fe6e64a..436dc186 100644 --- a/src/npc/townsperson.c +++ b/src/npc/townsperson.c @@ -5,6 +5,7 @@ #include "textbox.h" #include "flags.h" #include "structures.h" +#include "functions.h" typedef struct { u8 frame1; @@ -21,8 +22,6 @@ typedef struct { extern void (*const gUnk_0810B774[])(Entity*); extern void (*const gUnk_0810B77C[])(Entity*); extern void sub_08061CB4(Entity*, u32); -extern u32 sub_0806ED9C(Entity*, u32, u32); -extern void sub_0806ED78(Entity*); extern u32 sub_0805ACC0(Entity*); extern u32 sub_0801E99C(Entity*); extern void sub_0807DD64(Entity*); @@ -36,7 +35,6 @@ extern void sub_08062048(Entity*); extern void sub_08078784(Entity*, u32); extern void sub_08078778(Entity*); extern u32 sub_0806F5B0(u32); -extern void sub_080AEF88(Entity*); extern u32 Random(void); extern void ResolveEntityOnTop(Entity*, Entity*); extern void sub_08078850(Entity*, u32, u8, u32*); @@ -50,7 +48,7 @@ extern u8 gUnk_0810B748[]; extern u32 gUnk_0810B740[]; extern u16 gUnk_0810B790[]; extern u16 gUnk_0810B7BA[]; -extern u32 gUnk_0810B7C0[]; +extern Dialog gUnk_0810B7C0[]; void Townsperson(Entity* this) { if ((this->flags & 2) != 0) { @@ -296,30 +294,27 @@ void sub_0806200C(Entity* this) { TextboxNoOverlap(gUnk_0810B7BA[index], this); } -void sub_08062048(Entity *this) -{ - int iVar1; - - if ((this->entityType).subtype == 6) { - iVar1 = gUnk_02002A40.unk8 - 2; - if (iVar1 < 0) { - iVar1 = 0; +void sub_08062048(Entity* this) { + int iVar1; + + if ((this->entityType).subtype == 6) { + iVar1 = gUnk_02002A40.unk8 - 2; + if (iVar1 < 0) { + iVar1 = 0; + } + ShowNPCDialogue(this, gUnk_0810B7C0 + this->entityType.form * 0x8 + iVar1); + } else { + TextboxNoOverlap(0, this); } - ShowNPCDialogue(this, gUnk_0810B7C0 + this->entityType.form * 0x10 + iVar1 * 2); - } - else { - TextboxNoOverlap(0, this); - } } -void Townsperson_Fusion(Entity *this) -{ - if (this->action == 0) { - if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form]) == 0) { - return; +void Townsperson_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form]) == 0) { + return; + } + this->action++; + this->spriteSettings.b.draw = TRUE; } - this->action++; - this->spriteSettings.b.draw = TRUE; - } - sub_08061CB4(this, 6); + sub_08061CB4(this, 6); } \ No newline at end of file diff --git a/src/npc/windTribespeople.c b/src/npc/windTribespeople.c index 620483b3..4f8b4d97 100644 --- a/src/npc/windTribespeople.c +++ b/src/npc/windTribespeople.c @@ -4,6 +4,7 @@ #include "textbox.h" #include "flags.h" #include "structures.h" +#include "functions.h" extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void sub_0807DD50(Entity*); @@ -23,7 +24,7 @@ extern void (*const gUnk_08113A8C[])(Entity*, Entity*); extern SpriteLoadData gUnk_08113A1C[]; extern u32 gUnk_08014A80; -extern u32 gUnk_08113ABC[]; +extern Dialog gUnk_08113ABC[]; extern u16 gUnk_08113B0C[]; void WindTribespeople(Entity* this) { @@ -74,73 +75,65 @@ void sub_0806C85C(Entity* this) { } } -void sub_0806C870(Entity *this) -{ - u8 bVar1; - - bVar1 = sub_0801E99C(); - this->field_0x68.HALF.LO = bVar1; - sub_08078784(this, this->field_0x68.HALF.LO); +void sub_0806C870(Entity* this) { + u8 bVar1; + + bVar1 = sub_0801E99C(this); + this->field_0x68.HALF.LO = bVar1; + sub_08078784(this, this->field_0x68.HALF.LO); } -void WindTribespeople_Head(Entity *this) -{ - u32 uVar1; - u32 uVar2; - u8 pbVar3; - - pbVar3 = (this->frames.all & 0x3F); - if (this->entityType.form == 4) { - SetExtraSpriteFrame(this, 0, 9); - SetExtraSpriteFrame(this, 1, pbVar3); - SetExtraSpriteFrame(this, 2, this->frameIndex); - SetSpriteSubEntryOffsetData2(this, 2, 0); - SetSpriteSubEntryOffsetData1(this, 2, 1); - sub_0807000C(this); - } - else { - if (this->frames.b.f2 != 0) { - uVar2 = 1; - uVar1 = 0; +void WindTribespeople_Head(Entity* this) { + u32 uVar1; + u32 uVar2; + u8 pbVar3; + + pbVar3 = (this->frames.all & 0x3F); + if (this->entityType.form == 4) { + SetExtraSpriteFrame(this, 0, 9); + SetExtraSpriteFrame(this, 1, pbVar3); + SetExtraSpriteFrame(this, 2, this->frameIndex); + SetSpriteSubEntryOffsetData2(this, 2, 0); + SetSpriteSubEntryOffsetData1(this, 2, 1); + sub_0807000C(this); + } else { + if (this->frames.b.f2 != 0) { + uVar2 = 1; + uVar1 = 0; + } else { + uVar2 = 0; + uVar1 = 1; + } + SetExtraSpriteFrame(this, uVar2, pbVar3); + SetExtraSpriteFrame(this, uVar1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this, uVar1, uVar2); + sub_0807000C(this); } - else { - uVar2 = 0; - uVar1 = 1; +} + +// body and head entities? +void sub_0806C90C(Entity* param_1, Entity* param_2) { + *(u32*)¶m_2->animationState = 0; + gUnk_08113A8C[param_1->entityType.parameter](param_1, param_2); +} + +void sub_0806C928(Entity* this) { + ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk8]); +} + +void sub_0806C944(Entity* this) { + int iVar1; + int iVar2; + + iVar1 = CheckGlobalFlag(WARP_EVENT_END); + if (iVar1 == 0) { + iVar2 = 0; + } else { + iVar1 = CheckLocalFlag(0x63); + iVar2 = 2; + if (iVar1 != 0) { + iVar2 = 1; + } } - SetExtraSpriteFrame(this, uVar2, pbVar3); - SetExtraSpriteFrame(this, uVar1, this->frameIndex); - SetSpriteSubEntryOffsetData1(this, uVar1, uVar2); - sub_0807000C(this); - } -} - -//body and head entities? -void sub_0806C90C(Entity *param_1,Entity *param_2) -{ - *(u32 *)¶m_2->animationState = 0; - gUnk_08113A8C[param_1->entityType.parameter](param_1, param_2); -} - -void sub_0806C928(Entity *this) -{ - ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk8 * 2]); -} - -void sub_0806C944(Entity *this) -{ - int iVar1; - int iVar2; - - iVar1 = CheckGlobalFlag(WARP_EVENT_END); - if (iVar1 == 0) { - iVar2 = 0; - } - else { - iVar1 = CheckLocalFlag(0x63); - iVar2 = 2; - if (iVar1 != 0) { - iVar2 = 1; - } - } - TextboxNoOverlap(gUnk_08113B0C[iVar2], this); + TextboxNoOverlap(gUnk_08113B0C[iVar2], this); } \ No newline at end of file