diff --git a/asm/code_08070698.s b/asm/code_08070698.s index ce1b6779..0b19e971 100644 --- a/asm/code_08070698.s +++ b/asm/code_08070698.s @@ -6,1681 +6,6 @@ .text - thumb_func_start sub_08070794 -sub_08070794: @ 0x08070794 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldr r6, _080707F0 @ =gPlayerState - adds r3, r6, #0 - adds r3, #0xa8 - movs r4, #0 - strb r4, [r3] - ldr r1, [r6, #0x30] - movs r7, #0x10 - adds r0, r1, #0 - ands r0, r7 - mov ip, r6 - cmp r0, #0 - beq _08070818 - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x42 - strb r4, [r0] - movs r0, #0xa0 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - movs r0, #0x80 - strb r0, [r6, #6] - strb r7, [r3] - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - adds r0, #0x5c - adds r1, r5, #0 - adds r1, #0x58 - ldrb r1, [r1] - cmp r0, r1 - bne _080707F8 - ldrh r0, [r5, #0x12] - cmp r0, #2 - bne _080707F8 - ldr r0, _080707F4 @ =gPlayerEntity - bl UpdateAnimationSingleFrame - b _08070800 - .align 2, 0 -_080707F0: .4byte gPlayerState -_080707F4: .4byte gPlayerEntity -_080707F8: - movs r0, #0x97 - lsls r0, r0, #2 - mov r1, ip - strh r0, [r1, #8] -_08070800: - ldr r0, _08070814 @ =gPlayerEntity - bl sub_0806F948 - bl ResetPlayer - adds r0, r5, #0 - bl sub_08077698 - b _08070BE4 - .align 2, 0 -_08070814: .4byte gPlayerEntity -_08070818: - movs r0, #0x80 - lsls r0, r0, #5 - ands r0, r1 - cmp r0, #0 - beq _08070842 - adds r1, r5, #0 - adds r1, #0x40 - movs r0, #0x1e - strb r0, [r1] - movs r0, #0xc - strb r0, [r3] - movs r1, #0 - movs r2, #0x24 - ldrsh r0, [r5, r2] - cmp r0, #0 - bne _0807083A - movs r1, #1 -_0807083A: - adds r0, r5, #0 - bl sub_08070BEC - b _08070BE4 -_08070842: - movs r4, #0x80 - lsls r4, r4, #0xc - ands r4, r1 - cmp r4, #0 - beq _08070852 - bl sub_08079938 - b _08070BE4 -_08070852: - adds r0, r5, #0 - bl sub_080085B0 - adds r0, r5, #0 - adds r0, #0x40 - strb r4, [r0] - bl sub_08078EFC - cmp r0, #0 - beq _08070868 - b _08070BE4 -_08070868: - adds r0, r6, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _080708AC - ldrb r1, [r6, #2] - movs r2, #0xc0 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _080708AC - ldrb r0, [r6, #3] - cmp r0, #0 - bne _0807088E - adds r0, r6, #0 - adds r0, #0x21 - ldrb r0, [r0] - cmp r0, #0 - beq _08070892 -_0807088E: - strh r2, [r5, #0x24] - b _080708AC -_08070892: - ldrb r0, [r6, #0x1b] - cmp r0, #0 - beq _0807089C - movs r0, #0xe0 - b _080708AA -_0807089C: - ldrb r0, [r6, #0x1c] - cmp r0, #0 - beq _080708A6 - movs r0, #0x80 - b _080708AA -_080708A6: - movs r0, #0xa0 - lsls r0, r0, #1 -_080708AA: - strh r0, [r5, #0x24] -_080708AC: - ldr r4, _08070918 @ =gPlayerState - ldrb r0, [r4, #6] - movs r1, #0x80 - orrs r1, r0 - strb r1, [r4, #6] - ldr r0, [r4, #0x30] - ldr r6, _0807091C @ =0x10000002 - ands r0, r6 - cmp r0, #0 - bne _080708C4 - bl sub_0807A1B8 -_080708C4: - bl sub_08078EFC - cmp r0, #0 - beq _080708CE - b _08070BE4 -_080708CE: - ldrb r0, [r4, #2] - cmp r0, #0 - beq _080708D6 - b _080709D8 -_080708D6: - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #3 - ands r0, r1 - cmp r0, #0 - beq _080708E4 - b _080709D8 -_080708E4: - adds r0, r5, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - bne _08070924 - bl sub_080782C0 - cmp r0, #0 - beq _08070924 - ldr r0, _08070920 @ =gRoomVars - ldrb r0, [r0, #6] - cmp r0, #0 - bne _08070902 - bl ResetPlayer -_08070902: - ldr r0, [r4, #0x30] - ands r0, r6 - cmp r0, #0 - beq _0807090C - b _08070BE4 -_0807090C: - bl sub_0807A1B8 - bl sub_08078EFC - b _08070BE4 - .align 2, 0 -_08070918: .4byte gPlayerState -_0807091C: .4byte 0x10000002 -_08070920: .4byte gRoomVars -_08070924: - ldr r0, _0807094C @ =gPlayerState - ldr r1, [r0, #0x30] - ldr r2, _08070950 @ =0x00041635 - ands r1, r2 - adds r0, #0xaa - ldrb r0, [r0] - orrs r1, r0 - cmp r1, #0 - bne _080709D8 - bl sub_08019840 - cmp r0, #0xf - bls _08070940 - b _08070BE4 -_08070940: - lsls r0, r0, #2 - ldr r1, _08070954 @ =_08070958 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807094C: .4byte gPlayerState -_08070950: .4byte 0x00041635 -_08070954: .4byte _08070958 -_08070958: @ jump table - .4byte _08070998 @ case 0 - .4byte _08070BE4 @ case 1 - .4byte _08070BE4 @ case 2 - .4byte _080709A8 @ case 3 - .4byte _080709C2 @ case 4 - .4byte _08070BE4 @ case 5 - .4byte _08070BE4 @ case 6 - .4byte _08070BE4 @ case 7 - .4byte _08070BE4 @ case 8 - .4byte _08070BE4 @ case 9 - .4byte _08070BE4 @ case 10 - .4byte _08070BE4 @ case 11 - .4byte _08070BE4 @ case 12 - .4byte _08070BE4 @ case 13 - .4byte _08070BE4 @ case 14 - .4byte _080709B4 @ case 15 -_08070998: - ldr r0, _080709A4 @ =gPlayerState - ldrb r1, [r0, #6] - movs r2, #0x80 - eors r1, r2 - strb r1, [r0, #6] - b _080709D8 - .align 2, 0 -_080709A4: .4byte gPlayerState -_080709A8: - ldr r1, _080709B0 @ =gPlayerState - movs r0, #0x80 - strb r0, [r1, #6] - b _080709D8 - .align 2, 0 -_080709B0: .4byte gPlayerState -_080709B4: - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - bl sub_080797EC - b _08070BE4 -_080709C2: - ldr r0, _080709D4 @ =gPlayerState - ldrb r1, [r0, #6] - movs r2, #0x80 - eors r1, r2 - strb r1, [r0, #6] - bl sub_080797EC - b _08070BE4 - .align 2, 0 -_080709D4: .4byte gPlayerState -_080709D8: - adds r1, r5, #0 - adds r1, #0x3c - movs r0, #0 - strb r0, [r1] - adds r6, r5, #0 - adds r6, #0x29 - ldrb r1, [r6] - subs r0, #8 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r6] - adds r0, r5, #0 - bl sub_0807AC54 - cmp r0, #0 - beq _080709FC - b _08070BE4 -_080709FC: - adds r0, r5, #0 - bl sub_08077698 - bl sub_08078EFC - cmp r0, #0 - beq _08070A0C - b _08070BE4 -_08070A0C: - bl sub_080792D8 - ldr r4, _08070A78 @ =gPlayerState - ldrb r1, [r4, #2] - ldrb r0, [r4, #0xa] - orrs r0, r1 - cmp r0, #0 - bne _08070A32 - bl sub_08079550 - cmp r0, #0 - beq _08070A26 - b _08070BE4 -_08070A26: - adds r0, r5, #0 - bl sub_08078F74 - cmp r0, #0 - beq _08070A32 - b _08070BE4 -_08070A32: - adds r0, r5, #0 - bl sub_08073904 - bl sub_08078EFC - cmp r0, #0 - beq _08070A42 - b _08070BE4 -_08070A42: - ldrb r2, [r4, #2] - cmp r2, #0 - beq _08070AAC - adds r1, r4, #0 - adds r1, #0xa8 - movs r0, #0x14 - strb r0, [r1] - movs r0, #0xc0 - ands r0, r2 - cmp r0, #0 - bne _08070A80 - movs r0, #7 - ands r0, r2 - cmp r0, #3 - beq _08070A7C - movs r0, #0x20 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _08070A7C - strh r0, [r5, #0x24] - adds r0, r5, #0 - bl sub_08008926 - b _08070A80 - .align 2, 0 -_08070A78: .4byte gPlayerState -_08070A7C: - movs r0, #0xff - strb r0, [r5, #0x15] -_08070A80: - bl sub_08079E08 - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08070A94 - b _08070BE4 -_08070A94: - ldr r0, _08070AA8 @ =gPlayerState - ldrb r0, [r0, #4] - cmp r0, #0 - beq _08070A9E - b _08070BE4 -_08070A9E: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - b _08070BE4 - .align 2, 0 -_08070AA8: .4byte gPlayerState -_08070AAC: - adds r0, r5, #0 - adds r0, #0x42 - ldrb r1, [r0] - adds r7, r0, #0 - cmp r1, #0 - beq _08070ABA - b _08070BBC -_08070ABA: - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08070AD4 - adds r1, r4, #0 - adds r1, #0xa8 - movs r0, #7 - strb r0, [r1] - adds r0, r5, #0 - bl sub_0807ACCC - b _08070B56 -_08070AD4: - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x12 - ands r0, r1 - cmp r0, #0 - bne _08070AEE - ldrb r0, [r6] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #8 - orrs r1, r0 - strb r1, [r6] -_08070AEE: - ldrb r1, [r4, #0x1e] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08070B00 - adds r0, r5, #0 - bl sub_08008AA0 - b _08070B1E -_08070B00: - ldrb r0, [r4, #0x12] - cmp r0, #0x17 - bne _08070B0E - adds r0, r5, #0 - bl sub_08008926 - b _08070B1E -_08070B0E: - cmp r0, #1 - bne _08070B18 - bl sub_08078F60 - b _08070B1E -_08070B18: - adds r0, r5, #0 - bl sub_08008AA0 -_08070B1E: - ldr r2, _08070BB8 @ =gPlayerState - ldrb r1, [r2, #0x1b] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - bne _08070B56 - ldrb r3, [r2, #0xd] - strb r3, [r5, #0x15] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #3 - ands r0, r1 - cmp r0, #0 - beq _08070B56 - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r5, #0x24] - movs r0, #0x80 - ands r0, r3 - cmp r0, #0 - beq _08070B52 - ldrb r1, [r5, #0x14] - movs r0, #0xe - ands r0, r1 - lsls r0, r0, #2 - strb r0, [r5, #0x15] -_08070B52: - bl sub_0807A108 -_08070B56: - movs r4, #0 - ldr r3, _08070BB8 @ =gPlayerState - ldrb r2, [r3, #7] - ldrb r0, [r5, #0x15] - orrs r0, r2 - movs r1, #0x80 - ands r0, r1 - ldrb r1, [r3, #0xa] - orrs r0, r1 - cmp r0, #0 - bne _08070B8E - movs r0, #0x10 - ands r0, r2 - cmp r0, #0 - bne _08070B8E - movs r4, #1 - ldrb r0, [r7] - cmp r0, #0 - bne _08070B8E - ldrb r1, [r3, #0x1e] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - bne _08070B8C - ldrb r0, [r3, #0x12] - cmp r0, #0x17 - beq _08070B8E -_08070B8C: - movs r4, #3 -_08070B8E: - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_08070BEC - adds r0, r5, #0 - bl sub_08008AC6 - ldrb r0, [r7] - cmp r0, #0 - bne _08070BE4 - ldr r1, _08070BB8 @ =gPlayerState - ldrb r0, [r1, #0xb] - cmp r0, #0 - bne _08070BE4 - ldrb r0, [r1, #0x12] - cmp r0, #0x1e - beq _08070BE4 - adds r0, r5, #0 - bl sub_0806F948 - b _08070BE4 - .align 2, 0 -_08070BB8: .4byte gPlayerState -_08070BBC: - ldr r0, [r4, #0x2c] - cmp r0, #0 - bne _08070BC8 - adds r0, r5, #0 - bl UpdateAnimationSingleFrame -_08070BC8: - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08070BE4 - ldr r0, _08070BE8 @ =gScreenTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _08070BE4 - adds r0, r5, #0 - bl CreateWaterTrace -_08070BE4: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08070BE8: .4byte gScreenTransition - - thumb_func_start sub_08070BEC -sub_08070BEC: @ 0x08070BEC - push {r4, lr} - adds r4, r1, #0 - movs r0, #1 - ands r0, r4 - cmp r0, #0 - beq _08070BFE - bl sub_080797EC - b _08070C02 -_08070BFE: - bl sub_08079938 -_08070C02: - movs r0, #2 - ands r0, r4 - cmp r0, #0 - beq _08070C0E - bl sub_08079E08 -_08070C0E: - pop {r4, pc} - - thumb_func_start sub_08070C10 -sub_08070C10: @ 0x08070C10 - push {lr} - ldr r2, _08070C34 @ =gPlayerState - movs r1, #0xff - strb r1, [r2, #0xd] - movs r1, #0x80 - strb r1, [r2, #6] - adds r2, #0xa8 - movs r1, #0xa - strb r1, [r2] - ldr r2, _08070C38 @ =gUnk_0811BA60 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08070C34: .4byte gPlayerState -_08070C38: .4byte gUnk_0811BA60 - - thumb_func_start sub_08070C3C -sub_08070C3C: @ 0x08070C3C - push {r4, lr} - adds r4, r0, #0 - bl sub_08004168 - ldr r2, _08070C64 @ =gPlayerState - ldr r1, [r2, #0x30] - movs r0, #5 - orrs r1, r0 - ldr r0, _08070C68 @ =0xFFFFFBFF - ands r1, r0 - str r1, [r2, #0x30] - movs r0, #0 - strb r0, [r2, #2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08070C6C - movs r0, #0xdd - lsls r0, r0, #1 - b _08070C7E - .align 2, 0 -_08070C64: .4byte gPlayerState -_08070C68: .4byte 0xFFFFFBFF -_08070C6C: - movs r0, #8 - ands r1, r0 - cmp r1, #0 - beq _08070C7A - movs r0, #0x8b - lsls r0, r0, #3 - b _08070C7E -_08070C7A: - movs r0, #0xdc - lsls r0, r0, #1 -_08070C7E: - strh r0, [r2, #8] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - bl ResetPlayer - bl sub_0807A108 - movs r0, #0x7b - bl PlaySFX - movs r0, #0x85 - bl PlaySFX - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08070CB4 -sub_08070CB4: @ 0x08070CB4 - push {r4, r5, lr} - adds r5, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08070D1A - ldr r0, _08070CF4 @ =gUnk_02002A40 - adds r0, #0xaa - ldrb r0, [r0] - ldr r4, _08070CF8 @ =gPlayerState - cmp r0, #0 - beq _08070CFC - ldr r1, [r4, #0x30] - movs r0, #0x80 - lsls r0, r0, #8 - ands r0, r1 - cmp r0, #0 - beq _08070CFC - movs r0, #6 - rsbs r0, r0, #0 - ands r1, r0 - str r1, [r4, #0x30] - ldrb r1, [r5, #0x18] - adds r0, #2 - ands r0, r1 - strb r0, [r5, #0x18] - b _08070D1A - .align 2, 0 -_08070CF4: .4byte gUnk_02002A40 -_08070CF8: .4byte gPlayerState -_08070CFC: - ldr r0, [r4, #0x30] - ldr r1, _08070D1C @ =0xFFFF7FFB - ands r0, r1 - str r0, [r4, #0x30] - bl sub_08079458 - movs r0, #0 - strb r0, [r4, #0xa] - adds r1, r5, #0 - adds r1, #0x3d - movs r0, #0x20 - strb r0, [r1] - subs r0, #0x22 - bl ModHealth -_08070D1A: - pop {r4, r5, pc} - .align 2, 0 -_08070D1C: .4byte 0xFFFF7FFB - - thumb_func_start sub_08070D20 -sub_08070D20: @ 0x08070D20 - push {lr} - ldr r2, _08070D34 @ =gUnk_0811BA68 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08070D34: .4byte gUnk_0811BA68 - - thumb_func_start sub_08070D38 -sub_08070D38: @ 0x08070D38 - push {r4, lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x14] - movs r0, #0xe - ands r0, r1 - lsls r0, r0, #2 - movs r1, #0x10 - eors r0, r1 - strb r0, [r2, #0x15] - movs r4, #0 - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r2, #0x24] - adds r0, r2, #0 - adds r0, #0x42 - strb r4, [r0] - ldrb r0, [r2, #0xd] - adds r0, #1 - strb r0, [r2, #0xd] - ldr r3, _08070D94 @ =gPlayerState - adds r0, r3, #0 - adds r0, #0x38 - ldrb r0, [r0] - strb r0, [r2, #0xe] - movs r0, #1 - strh r0, [r2, #0x12] - ldr r0, [r3, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08070D98 - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r2, #0x20] - movs r0, #0x8a - lsls r0, r0, #1 - strh r0, [r3, #8] - movs r0, #0x10 - movs r1, #0 - bl sub_08080964 - b _08070DA2 - .align 2, 0 -_08070D94: .4byte gPlayerState -_08070D98: - ldr r0, _08070DBC @ =0x00000C18 - strh r0, [r3, #8] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r2, #0x20] -_08070DA2: - ldr r0, _08070DC0 @ =gPlayerState - movs r1, #0x80 - strb r1, [r0, #2] - movs r0, #0xa6 - lsls r0, r0, #1 - bl PlaySFX - bl ResetPlayer - bl sub_08078F60 - pop {r4, pc} - .align 2, 0 -_08070DBC: .4byte 0x00000C18 -_08070DC0: .4byte gPlayerState - - thumb_func_start sub_08070DC4 -sub_08070DC4: @ 0x08070DC4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_080085B0 - bl sub_08079E08 - bl sub_0807A1B8 - bl sub_08078EFC - cmp r0, #0 - bne _08070E76 - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08070E76 - ldr r6, _08070E18 @ =gPlayerState - strb r0, [r6, #2] - bl sub_08078EFC - adds r5, r0, #0 - cmp r5, #0 - bne _08070E76 - bl sub_08079D48 - cmp r0, #0 - bne _08070E10 - adds r0, r6, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08070E1C -_08070E10: - strb r5, [r6, #2] - bl sub_080791D0 - b _08070E76 - .align 2, 0 -_08070E18: .4byte gPlayerState -_08070E1C: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _08070E32 - movs r0, #0x80 - lsls r0, r0, #9 - str r0, [r4, #0x20] - b _08070E76 -_08070E32: - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r6, #0x14] - cmp r0, #0 - bne _08070E56 - bl sub_08008B22 - cmp r0, #0 - beq _08070E56 - movs r0, #7 - strb r0, [r6, #0x11] - bl sub_08079938 - bl sub_080791BC - b _08070E76 -_08070E56: - movs r0, #1 - strh r0, [r4, #0x12] - movs r0, #8 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - ldr r2, _08070E78 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08070E76 - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r2, #8] -_08070E76: - pop {r4, r5, r6, pc} - .align 2, 0 -_08070E78: .4byte gPlayerState - - thumb_func_start sub_08070E7C -sub_08070E7C: @ 0x08070E7C - push {lr} - ldrb r1, [r0, #0xe] - subs r1, #1 - strb r1, [r0, #0xe] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #0 - bne _08070E94 - ldr r0, _08070E98 @ =gPlayerState - strb r1, [r0, #2] - bl sub_080791D0 -_08070E94: - pop {pc} - .align 2, 0 -_08070E98: .4byte gPlayerState - - thumb_func_start sub_08070E9C -sub_08070E9C: @ 0x08070E9C - push {r4, lr} - adds r4, r0, #0 - bl sub_08078EFC - cmp r0, #0 - beq _08070EAE - bl sub_08056360 - b _08070ED2 -_08070EAE: - ldr r1, _08070ED4 @ =gPlayerState - adds r2, r1, #0 - adds r2, #0x27 - movs r0, #4 - strb r0, [r2] - adds r1, #0xa8 - movs r0, #0x13 - strb r0, [r1] - bl sub_0807A1B8 - ldr r1, _08070ED8 @ =gUnk_0811BA74 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 -_08070ED2: - pop {r4, pc} - .align 2, 0 -_08070ED4: .4byte gPlayerState -_08070ED8: .4byte gUnk_0811BA74 - - thumb_func_start sub_08070EDC -sub_08070EDC: @ 0x08070EDC - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2, #0x11] - ldr r0, _08070F10 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - beq _08070EFE - movs r0, #1 - strb r0, [r2, #0xd] -_08070EFE: - ldr r2, _08070F14 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08070F18 - bl sub_08079938 - b _08070F1C - .align 2, 0 -_08070F10: .4byte gTextBox -_08070F14: .4byte gPlayerState -_08070F18: - ldr r0, _08070F20 @ =0x00000C18 - strh r0, [r2, #8] -_08070F1C: - pop {pc} - .align 2, 0 -_08070F20: .4byte 0x00000C18 - - thumb_func_start sub_08070F24 -sub_08070F24: @ 0x08070F24 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldr r0, _08070F4C @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08070F4A - ldrb r0, [r4, #0x11] - lsrs r2, r0, #4 - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x11] - bl sub_080791D0 -_08070F4A: - pop {r4, pc} - .align 2, 0 -_08070F4C: .4byte gTextBox - - thumb_func_start sub_08070F50 -sub_08070F50: @ 0x08070F50 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08070F9C @ =gPlayerState - adds r0, #0xa8 - movs r1, #0x15 - strb r1, [r0] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldr r1, _08070FA0 @ =gUnk_0811BA7C - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r5, [r4, #0x54] - cmp r5, #0 - beq _08070F9A - adds r0, r4, #0 - adds r1, r5, #0 - bl PositionEntityOnTop - ldrh r0, [r4, #0x12] - ldrb r1, [r4, #0x1e] - bl GetSpriteSubEntryOffsetDataPointer - ldrb r1, [r0] - adds r2, r5, #0 - adds r2, #0x62 - strb r1, [r2] - ldrb r1, [r0, #1] - adds r0, r5, #0 - adds r0, #0x63 - strb r1, [r0] -_08070F9A: - pop {r4, r5, pc} - .align 2, 0 -_08070F9C: .4byte gPlayerState -_08070FA0: .4byte gUnk_0811BA7C - - thumb_func_start sub_08070FA4 -sub_08070FA4: @ 0x08070FA4 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - movs r1, #0 - movs r0, #4 - strb r0, [r4, #0x14] - ldr r3, _08070FE8 @ =gPlayerState - ldr r2, [r3, #0x30] - movs r0, #1 - orrs r2, r0 - str r2, [r3, #0x30] - strb r1, [r3, #2] - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - bne _08071008 - movs r0, #8 - ands r2, r0 - cmp r2, #0 - beq _08070FF0 - adds r0, r3, #0 - adds r0, #0x38 - ldrb r0, [r0] - bl sub_080542AC - ldr r1, _08070FEC @ =0x0000045B - cmp r0, #0 - beq _08071004 - adds r1, #3 - b _08071004 - .align 2, 0 -_08070FE8: .4byte gPlayerState -_08070FEC: .4byte 0x0000045B -_08070FF0: - adds r0, r3, #0 - adds r0, #0x38 - ldrb r0, [r0] - bl sub_080542AC - ldr r1, _08071018 @ =0x000001B9 - cmp r0, #0 - beq _08071004 - movs r1, #0xb8 - lsls r1, r1, #2 -_08071004: - ldr r0, _0807101C @ =gPlayerState - strh r1, [r0, #8] -_08071008: - movs r0, #1 - strb r0, [r4, #0xd] - bl ResetPlayer - bl sub_08078F60 - pop {r4, pc} - .align 2, 0 -_08071018: .4byte 0x000001B9 -_0807101C: .4byte gPlayerState - - thumb_func_start sub_08071020 -sub_08071020: @ 0x08071020 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - beq _08071036 - movs r0, #2 - strb r0, [r4, #0xd] -_08071036: - pop {r4, pc} - - thumb_func_start sub_08071038 -sub_08071038: @ 0x08071038 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - bl sub_08078EFC - cmp r0, #0 - bne _08071078 - ldr r0, _0807107C @ =gTextBox - ldrb r0, [r0] - movs r2, #0x7f - ands r2, r0 - cmp r2, #0 - bne _08071078 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08071078 - str r2, [r4, #0x54] - adds r0, r4, #0 - adds r0, #0x42 - strb r2, [r0] - subs r0, #5 - movs r1, #0xf8 - strb r1, [r0] - ldr r0, _08071080 @ =gPlayerState - strb r2, [r0, #2] - bl sub_080791D0 -_08071078: - pop {r4, pc} - .align 2, 0 -_0807107C: .4byte gTextBox -_08071080: .4byte gPlayerState - - thumb_func_start sub_08071084 -sub_08071084: @ 0x08071084 - push {lr} - ldr r1, _080710A0 @ =gPlayerState - adds r1, #0xa8 - movs r2, #0xb - strb r2, [r1] - ldr r2, _080710A4 @ =gUnk_0811BA88 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080710A0: .4byte gPlayerState -_080710A4: .4byte gUnk_0811BA88 - - thumb_func_start sub_080710A8 -sub_080710A8: @ 0x080710A8 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xd] - adds r0, #1 - movs r2, #0 - strb r0, [r4, #0xd] - ldr r1, _080710EC @ =gPlayerState - ldr r3, [r1, #0x30] - movs r0, #1 - orrs r3, r0 - ldr r0, _080710F0 @ =0xFFFFF3FF - ands r3, r0 - str r3, [r1, #0x30] - strb r2, [r1, #0xc] - ldrb r2, [r1, #5] - ldrb r0, [r1, #0x1b] - orrs r0, r2 - adds r5, r1, #0 - cmp r0, #0 - bne _080710FA - movs r0, #0x80 - ands r3, r0 - cmp r3, #0 - bne _080710FA - bl ResetPlayer - ldr r0, [r5, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _080710F4 - movs r0, #0x84 - lsls r0, r0, #3 - b _080710F8 - .align 2, 0 -_080710EC: .4byte gPlayerState -_080710F0: .4byte 0xFFFFF3FF -_080710F4: - movs r0, #0x81 - lsls r0, r0, #4 -_080710F8: - strh r0, [r5, #8] -_080710FA: - movs r0, #0 - strb r0, [r5, #0x1e] - ldrb r1, [r4, #0x14] - movs r0, #0xe - ands r0, r1 - lsls r0, r0, #2 - strb r0, [r4, #0x15] - movs r0, #1 - bl sub_08079FC4 - lsls r0, r0, #4 - subs r0, #4 - lsls r0, r0, #0xc - str r0, [r4, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - bl sub_0807A108 - movs r0, #0x7c - bl PlaySFX - movs r0, #0x78 - bl PlaySFX - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08071130 -sub_08071130: @ 0x08071130 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_08078EFC - cmp r0, #0 - bne _08071206 - ldr r6, _080711B4 @ =gPlayerState - ldrb r0, [r6, #0x1b] - cmp r0, #0 - bne _08071158 - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08071206 -_08071158: - adds r0, r5, #0 - bl sub_0806F69C - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r5, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08071206 - strb r0, [r6, #2] - adds r0, r5, #0 - bl sub_0800455E - ldr r0, [r5, #0x74] - cmp r0, #0 - beq _0807117E - bl sub_0800455E -_0807117E: - adds r0, r5, #0 - movs r1, #7 - bl sub_08008790 - ldrb r0, [r6, #0x14] - cmp r0, #0 - bne _08071206 - bl sub_0807A1B8 - bl sub_08078EFC - adds r4, r0, #0 - cmp r4, #0 - bne _08071206 - bl sub_08079D48 - cmp r0, #0 - beq _080711AC - adds r0, r6, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _080711B8 -_080711AC: - strb r4, [r6, #2] - bl sub_080791D0 - b _08071206 - .align 2, 0 -_080711B4: .4byte gPlayerState -_080711B8: - movs r0, #6 - strb r0, [r5, #0xe] - ldrb r1, [r6, #5] - ldrb r0, [r6, #0xb] - orrs r0, r1 - cmp r0, #0 - bne _080711EE - ldr r1, [r6, #0x30] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080711EE - movs r0, #8 - ands r1, r0 - cmp r1, #0 - beq _080711E0 - ldr r0, _080711DC @ =0x00000424 - b _080711E4 - .align 2, 0 -_080711DC: .4byte 0x00000424 -_080711E0: - movs r0, #0x82 - lsls r0, r0, #4 -_080711E4: - strh r0, [r6, #8] - adds r1, r5, #0 - adds r1, #0x58 - movs r0, #0xff - strb r0, [r1] -_080711EE: - ldrb r0, [r5, #0xd] - adds r0, #1 - movs r4, #0 - strb r0, [r5, #0xd] - bl sub_08078F60 - adds r0, r5, #0 - adds r0, #0x42 - strb r4, [r0] - movs r0, #0x7d - bl PlaySFX -_08071206: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08071208 -sub_08071208: @ 0x08071208 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _08071244 @ =gPlayerState - ldrb r1, [r2, #5] - ldrb r0, [r2, #0xb] - orrs r0, r1 - cmp r0, #0 - bne _08071228 - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08071228 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08071228: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08071240 - ldr r1, _08071244 @ =gPlayerState - movs r0, #0 - strb r0, [r1, #2] - bl sub_080791D0 -_08071240: - pop {r4, pc} - .align 2, 0 -_08071244: .4byte gPlayerState - - thumb_func_start sub_08071248 -sub_08071248: @ 0x08071248 - push {lr} - ldr r3, _08071274 @ =gPlayerState - adds r2, r3, #0 - adds r2, #0xa8 - movs r1, #0x16 - strb r1, [r2] - ldr r1, [r3, #0x30] - movs r2, #4 - orrs r1, r2 - str r1, [r3, #0x30] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - ldr r2, _08071278 @ =gUnk_0811BA94 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08071274: .4byte gPlayerState -_08071278: .4byte gUnk_0811BA94 - - thumb_func_start sub_0807127C -sub_0807127C: @ 0x0807127C - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xd] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x3a - ands r0, r1 - strb r0, [r2] - ldr r5, _080712AC @ =gPlayerState - ldr r1, [r5, #0x30] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080712B4 - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r0, _080712B0 @ =0x00000C19 - strh r0, [r5, #8] - movs r0, #0x84 - bl PlaySFX - b _080712E4 - .align 2, 0 -_080712AC: .4byte gPlayerState -_080712B0: .4byte 0x00000C19 -_080712B4: - movs r0, #0x80 - lsls r0, r0, #9 - ands r1, r0 - cmp r1, #0 - bne _080712C4 - adds r0, r4, #0 - bl sub_08004168 -_080712C4: - adds r0, r4, #0 - movs r1, #0xb - movs r2, #0 - bl CreateFx - ldr r0, [r5, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - bne _080712E0 - ldr r0, _080712DC @ =0x0000072C - b _080712E2 - .align 2, 0 -_080712DC: .4byte 0x0000072C -_080712E0: - ldr r0, _080712EC @ =0x0000044C -_080712E2: - strh r0, [r5, #8] -_080712E4: - bl ResetPlayer - pop {r4, r5, pc} - .align 2, 0 -_080712EC: .4byte 0x0000044C - - thumb_func_start sub_080712F0 -sub_080712F0: @ 0x080712F0 - push {r4, r5, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - movs r5, #0 - ldr r3, _08071314 @ =gPlayerState - ldr r0, [r3, #0x30] - movs r2, #0x80 - ands r0, r2 - cmp r0, #0 - beq _08071318 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0807133E - b _08071342 - .align 2, 0 -_08071314: .4byte gPlayerState -_08071318: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _0807133E - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0xce - beq _0807133C - ldr r0, _08071338 @ =0x000002CE - strh r0, [r3, #8] - b _0807133E - .align 2, 0 -_08071338: .4byte 0x000002CE -_0807133C: - movs r5, #1 -_0807133E: - cmp r5, #0 - beq _0807137A -_08071342: - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - subs r1, #5 - movs r0, #0x20 - strb r0, [r1] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x59 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r2, _0807137C @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #5 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r2, #0x30] - bl sub_08079458 -_0807137A: - pop {r4, r5, pc} - .align 2, 0 -_0807137C: .4byte gPlayerState - - thumb_func_start sub_08071380 -sub_08071380: @ 0x08071380 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _080713E8 @ =gPlayerState - adds r1, r5, #0 - adds r1, #0xa8 - movs r0, #0xe - strb r0, [r1] - ldr r1, _080713EC @ =gUnk_0811BA9C - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0xd] - cmp r0, #7 - beq _080713FC - cmp r0, #2 - bls _080713FC - ldr r0, [r5, #0x30] - movs r1, #0x20 - ands r0, r1 - cmp r0, #0 - beq _080713FC - ldr r0, _080713F0 @ =gUnk_03000FF0 - ldrh r1, [r0, #2] - movs r0, #0x81 - lsls r0, r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080713FC - bl CheckIsDungeon - cmp r0, #0 - bne _080713D0 - ldr r0, _080713F4 @ =gArea - ldrb r0, [r0, #0x17] - cmp r0, #3 - bne _080713F8 -_080713D0: - movs r0, #7 - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] - movs r0, #7 - movs r1, #0x10 - bl DoFade - movs r0, #0xf8 - bl PlaySFX - b _080713FC - .align 2, 0 -_080713E8: .4byte gPlayerState -_080713EC: .4byte gUnk_0811BA9C -_080713F0: .4byte gUnk_03000FF0 -_080713F4: .4byte gArea -_080713F8: - bl sub_0804ACF8 -_080713FC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08071400 -sub_08071400: @ 0x08071400 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - movs r1, #0 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x42 - strb r1, [r0] - ldr r0, _0807149C @ =gArea - ldrh r3, [r0, #0x12] - ldrh r5, [r0, #0x14] - movs r0, #0x2e - ldrsh r2, [r4, r0] - cmp r2, r3 - bne _0807142A - movs r1, #0x32 - ldrsh r0, [r4, r1] - cmp r0, r5 - beq _08071444 -_0807142A: - movs r0, #0x32 - ldrsh r1, [r4, r0] - adds r0, r2, #0 - adds r2, r3, #0 - adds r3, r5, #0 - bl sub_080045D4 - strb r0, [r4, #0x15] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - bl sub_08079E08 -_08071444: - adds r0, r4, #0 - bl sub_08073904 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r2, _080714A0 @ =gPlayerState - ldrb r0, [r2, #2] - cmp r0, #0 - bne _0807147C - ldr r0, [r2, #0x30] - movs r1, #0x20 - orrs r0, r1 - str r0, [r2, #0x30] - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #4 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x18] - subs r0, #0x45 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, _0807149C @ =gArea - ldrb r0, [r0, #0x17] - cmp r0, #4 - bne _0807147C - ldr r0, _080714A4 @ =0x0000052C - strh r0, [r2, #8] -_0807147C: - movs r0, #8 - strb r0, [r4, #0xe] - ldr r0, _0807149C @ =gArea - ldrb r0, [r0, #0x17] - cmp r0, #3 - beq _0807149A - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] -_0807149A: - pop {r4, r5, pc} - .align 2, 0 -_0807149C: .4byte gArea -_080714A0: .4byte gPlayerState -_080714A4: .4byte 0x0000052C - thumb_func_start sub_080714A8 sub_080714A8: @ 0x080714A8 push {r4, lr} diff --git a/asm/non_matching/player/sub_08070794.s b/asm/non_matching/player/sub_08070794.s new file mode 100644 index 00000000..a1555771 --- /dev/null +++ b/asm/non_matching/player/sub_08070794.s @@ -0,0 +1,544 @@ + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + ldr r6, _080707F0 @ =gPlayerState + adds r3, r6, #0 + adds r3, #0xa8 + movs r4, #0 + strb r4, [r3] + ldr r1, [r6, #0x30] + movs r7, #0x10 + adds r0, r1, #0 + ands r0, r7 + mov ip, r6 + cmp r0, #0 + beq _08070818 + adds r2, r5, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #0x39 + rsbs r0, r0, #0 + ands r0, r1 + strb r0, [r2] + adds r0, r5, #0 + adds r0, #0x42 + strb r4, [r0] + movs r0, #0xa0 + lsls r0, r0, #1 + strh r0, [r5, #0x24] + movs r0, #0x80 + strb r0, [r6, #6] + strb r7, [r3] + ldrb r0, [r5, #0x14] + lsrs r0, r0, #1 + adds r0, #0x5c + adds r1, r5, #0 + adds r1, #0x58 + ldrb r1, [r1] + cmp r0, r1 + bne _080707F8 + ldrh r0, [r5, #0x12] + cmp r0, #2 + bne _080707F8 + ldr r0, _080707F4 @ =gPlayerEntity + bl UpdateAnimationSingleFrame + b _08070800 + .align 2, 0 +_080707F0: .4byte gPlayerState +_080707F4: .4byte gPlayerEntity +_080707F8: + movs r0, #0x97 + lsls r0, r0, #2 + mov r1, ip + strh r0, [r1, #8] +_08070800: + ldr r0, _08070814 @ =gPlayerEntity + bl sub_0806F948 + bl ResetPlayer + adds r0, r5, #0 + bl sub_08077698 + b _08070BE4 + .align 2, 0 +_08070814: .4byte gPlayerEntity +_08070818: + movs r0, #0x80 + lsls r0, r0, #5 + ands r0, r1 + cmp r0, #0 + beq _08070842 + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #0x1e + strb r0, [r1] + movs r0, #0xc + strb r0, [r3] + movs r1, #0 + movs r2, #0x24 + ldrsh r0, [r5, r2] + cmp r0, #0 + bne _0807083A + movs r1, #1 +_0807083A: + adds r0, r5, #0 + bl sub_08070BEC + b _08070BE4 +_08070842: + movs r4, #0x80 + lsls r4, r4, #0xc + ands r4, r1 + cmp r4, #0 + beq _08070852 + bl sub_08079938 + b _08070BE4 +_08070852: + adds r0, r5, #0 + bl sub_080085B0 + adds r0, r5, #0 + adds r0, #0x40 + strb r4, [r0] + bl sub_08078EFC + cmp r0, #0 + beq _08070868 + b _08070BE4 +_08070868: + adds r0, r6, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + bne _080708AC + ldrb r1, [r6, #2] + movs r2, #0xc0 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _080708AC + ldrb r0, [r6, #3] + cmp r0, #0 + bne _0807088E + adds r0, r6, #0 + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + beq _08070892 +_0807088E: + strh r2, [r5, #0x24] + b _080708AC +_08070892: + ldrb r0, [r6, #0x1b] + cmp r0, #0 + beq _0807089C + movs r0, #0xe0 + b _080708AA +_0807089C: + ldrb r0, [r6, #0x1c] + cmp r0, #0 + beq _080708A6 + movs r0, #0x80 + b _080708AA +_080708A6: + movs r0, #0xa0 + lsls r0, r0, #1 +_080708AA: + strh r0, [r5, #0x24] +_080708AC: + ldr r4, _08070918 @ =gPlayerState + ldrb r0, [r4, #6] + movs r1, #0x80 + orrs r1, r0 + strb r1, [r4, #6] + ldr r0, [r4, #0x30] + ldr r6, _0807091C @ =0x10000002 + ands r0, r6 + cmp r0, #0 + bne _080708C4 + bl sub_0807A1B8 +_080708C4: + bl sub_08078EFC + cmp r0, #0 + beq _080708CE + b _08070BE4 +_080708CE: + ldrb r0, [r4, #2] + cmp r0, #0 + beq _080708D6 + b _080709D8 +_080708D6: + ldr r0, [r4, #0x30] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _080708E4 + b _080709D8 +_080708E4: + adds r0, r5, #0 + adds r0, #0x42 + ldrb r0, [r0] + cmp r0, #0 + bne _08070924 + bl sub_080782C0 + cmp r0, #0 + beq _08070924 + ldr r0, _08070920 @ =gRoomVars + ldrb r0, [r0, #6] + cmp r0, #0 + bne _08070902 + bl ResetPlayer +_08070902: + ldr r0, [r4, #0x30] + ands r0, r6 + cmp r0, #0 + beq _0807090C + b _08070BE4 +_0807090C: + bl sub_0807A1B8 + bl sub_08078EFC + b _08070BE4 + .align 2, 0 +_08070918: .4byte gPlayerState +_0807091C: .4byte 0x10000002 +_08070920: .4byte gRoomVars +_08070924: + ldr r0, _0807094C @ =gPlayerState + ldr r1, [r0, #0x30] + ldr r2, _08070950 @ =0x00041635 + ands r1, r2 + adds r0, #0xaa + ldrb r0, [r0] + orrs r1, r0 + cmp r1, #0 + bne _080709D8 + bl sub_08019840 + cmp r0, #0xf + bls _08070940 + b _08070BE4 +_08070940: + lsls r0, r0, #2 + ldr r1, _08070954 @ =_08070958 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0807094C: .4byte gPlayerState +_08070950: .4byte 0x00041635 +_08070954: .4byte _08070958 +_08070958: @ jump table + .4byte _08070998 @ case 0 + .4byte _08070BE4 @ case 1 + .4byte _08070BE4 @ case 2 + .4byte _080709A8 @ case 3 + .4byte _080709C2 @ case 4 + .4byte _08070BE4 @ case 5 + .4byte _08070BE4 @ case 6 + .4byte _08070BE4 @ case 7 + .4byte _08070BE4 @ case 8 + .4byte _08070BE4 @ case 9 + .4byte _08070BE4 @ case 10 + .4byte _08070BE4 @ case 11 + .4byte _08070BE4 @ case 12 + .4byte _08070BE4 @ case 13 + .4byte _08070BE4 @ case 14 + .4byte _080709B4 @ case 15 +_08070998: + ldr r0, _080709A4 @ =gPlayerState + ldrb r1, [r0, #6] + movs r2, #0x80 + eors r1, r2 + strb r1, [r0, #6] + b _080709D8 + .align 2, 0 +_080709A4: .4byte gPlayerState +_080709A8: + ldr r1, _080709B0 @ =gPlayerState + movs r0, #0x80 + strb r0, [r1, #6] + b _080709D8 + .align 2, 0 +_080709B0: .4byte gPlayerState +_080709B4: + ldrb r1, [r5, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r5, #0x10] + bl sub_080797EC + b _08070BE4 +_080709C2: + ldr r0, _080709D4 @ =gPlayerState + ldrb r1, [r0, #6] + movs r2, #0x80 + eors r1, r2 + strb r1, [r0, #6] + bl sub_080797EC + b _08070BE4 + .align 2, 0 +_080709D4: .4byte gPlayerState +_080709D8: + adds r1, r5, #0 + adds r1, #0x3c + movs r0, #0 + strb r0, [r1] + adds r6, r5, #0 + adds r6, #0x29 + ldrb r1, [r6] + subs r0, #8 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + strb r0, [r6] + adds r0, r5, #0 + bl sub_0807AC54 + cmp r0, #0 + beq _080709FC + b _08070BE4 +_080709FC: + adds r0, r5, #0 + bl sub_08077698 + bl sub_08078EFC + cmp r0, #0 + beq _08070A0C + b _08070BE4 +_08070A0C: + bl sub_080792D8 + ldr r4, _08070A78 @ =gPlayerState + ldrb r1, [r4, #2] + ldrb r0, [r4, #0xa] + orrs r0, r1 + cmp r0, #0 + bne _08070A32 + bl sub_08079550 + cmp r0, #0 + beq _08070A26 + b _08070BE4 +_08070A26: + adds r0, r5, #0 + bl sub_08078F74 + cmp r0, #0 + beq _08070A32 + b _08070BE4 +_08070A32: + adds r0, r5, #0 + bl sub_08073904 + bl sub_08078EFC + cmp r0, #0 + beq _08070A42 + b _08070BE4 +_08070A42: + ldrb r2, [r4, #2] + cmp r2, #0 + beq _08070AAC + adds r1, r4, #0 + adds r1, #0xa8 + movs r0, #0x14 + strb r0, [r1] + movs r0, #0xc0 + ands r0, r2 + cmp r0, #0 + bne _08070A80 + movs r0, #7 + ands r0, r2 + cmp r0, #3 + beq _08070A7C + movs r0, #0x20 + ands r0, r2 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0 + bne _08070A7C + strh r0, [r5, #0x24] + adds r0, r5, #0 + bl sub_08008926 + b _08070A80 + .align 2, 0 +_08070A78: .4byte gPlayerState +_08070A7C: + movs r0, #0xff + strb r0, [r5, #0x15] +_08070A80: + bl sub_08079E08 + adds r0, r5, #0 + adds r0, #0x5a + ldrb r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08070A94 + b _08070BE4 +_08070A94: + ldr r0, _08070AA8 @ =gPlayerState + ldrb r0, [r0, #4] + cmp r0, #0 + beq _08070A9E + b _08070BE4 +_08070A9E: + adds r0, r5, #0 + bl UpdateAnimationSingleFrame + b _08070BE4 + .align 2, 0 +_08070AA8: .4byte gPlayerState +_08070AAC: + adds r0, r5, #0 + adds r0, #0x42 + ldrb r1, [r0] + adds r7, r0, #0 + cmp r1, #0 + beq _08070ABA + b _08070BBC +_08070ABA: + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + beq _08070AD4 + adds r1, r4, #0 + adds r1, #0xa8 + movs r0, #7 + strb r0, [r1] + adds r0, r5, #0 + bl sub_0807ACCC + b _08070B56 +_08070AD4: + ldr r0, [r4, #0x30] + movs r1, #0x80 + lsls r1, r1, #0x12 + ands r0, r1 + cmp r0, #0 + bne _08070AEE + ldrb r0, [r6] + movs r1, #0x39 + rsbs r1, r1, #0 + ands r1, r0 + movs r0, #8 + orrs r1, r0 + strb r1, [r6] +_08070AEE: + ldrb r1, [r4, #0x1e] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + beq _08070B00 + adds r0, r5, #0 + bl sub_08008AA0 + b _08070B1E +_08070B00: + ldrb r0, [r4, #0x12] + cmp r0, #0x17 + bne _08070B0E + adds r0, r5, #0 + bl sub_08008926 + b _08070B1E +_08070B0E: + cmp r0, #1 + bne _08070B18 + bl sub_08078F60 + b _08070B1E +_08070B18: + adds r0, r5, #0 + bl sub_08008AA0 +_08070B1E: + ldr r2, _08070BB8 @ =gPlayerState + ldrb r1, [r2, #0x1b] + movs r0, #0x10 + ands r0, r1 + cmp r0, #0 + bne _08070B56 + ldrb r3, [r2, #0xd] + strb r3, [r5, #0x15] + ldr r0, [r2, #0x30] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08070B56 + movs r0, #0xc0 + lsls r0, r0, #2 + strh r0, [r5, #0x24] + movs r0, #0x80 + ands r0, r3 + cmp r0, #0 + beq _08070B52 + ldrb r1, [r5, #0x14] + movs r0, #0xe + ands r0, r1 + lsls r0, r0, #2 + strb r0, [r5, #0x15] +_08070B52: + bl sub_0807A108 +_08070B56: + movs r4, #0 + ldr r3, _08070BB8 @ =gPlayerState + ldrb r2, [r3, #7] + ldrb r0, [r5, #0x15] + orrs r0, r2 + movs r1, #0x80 + ands r0, r1 + ldrb r1, [r3, #0xa] + orrs r0, r1 + cmp r0, #0 + bne _08070B8E + movs r0, #0x10 + ands r0, r2 + cmp r0, #0 + bne _08070B8E + movs r4, #1 + ldrb r0, [r7] + cmp r0, #0 + bne _08070B8E + ldrb r1, [r3, #0x1e] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + bne _08070B8C + ldrb r0, [r3, #0x12] + cmp r0, #0x17 + beq _08070B8E +_08070B8C: + movs r4, #3 +_08070B8E: + adds r0, r5, #0 + adds r1, r4, #0 + bl sub_08070BEC + adds r0, r5, #0 + bl sub_08008AC6 + ldrb r0, [r7] + cmp r0, #0 + bne _08070BE4 + ldr r1, _08070BB8 @ =gPlayerState + ldrb r0, [r1, #0xb] + cmp r0, #0 + bne _08070BE4 + ldrb r0, [r1, #0x12] + cmp r0, #0x1e + beq _08070BE4 + adds r0, r5, #0 + bl sub_0806F948 + b _08070BE4 + .align 2, 0 +_08070BB8: .4byte gPlayerState +_08070BBC: + ldr r0, [r4, #0x2c] + cmp r0, #0 + bne _08070BC8 + adds r0, r5, #0 + bl UpdateAnimationSingleFrame +_08070BC8: + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + beq _08070BE4 + ldr r0, _08070BE8 @ =gScreenTransition + ldr r0, [r0] + movs r1, #7 + ands r0, r1 + cmp r0, #0 + bne _08070BE4 + adds r0, r5, #0 + bl CreateWaterTrace +_08070BE4: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08070BE8: .4byte gScreenTransition + .syntax divided diff --git a/asm/non_matching/player/sub_08070DC4.s b/asm/non_matching/player/sub_08070DC4.s new file mode 100644 index 00000000..0b73a553 --- /dev/null +++ b/asm/non_matching/player/sub_08070DC4.s @@ -0,0 +1,87 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + bl UpdateAnimationSingleFrame + adds r0, r4, #0 + bl sub_080085B0 + bl sub_08079E08 + bl sub_0807A1B8 + bl sub_08078EFC + cmp r0, #0 + bne _08070E76 + movs r1, #0x80 + lsls r1, r1, #6 + adds r0, r4, #0 + bl sub_08003FC4 + cmp r0, #0 + bne _08070E76 + ldr r6, _08070E18 @ =gPlayerState + strb r0, [r6, #2] + bl sub_08078EFC + adds r5, r0, #0 + cmp r5, #0 + bne _08070E76 + bl sub_08079D48 + cmp r0, #0 + bne _08070E10 + adds r0, r6, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + beq _08070E1C +_08070E10: + strb r5, [r6, #2] + bl sub_080791D0 + b _08070E76 + .align 2, 0 +_08070E18: .4byte gPlayerState +_08070E1C: + ldrb r0, [r4, #0xe] + subs r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xff + beq _08070E32 + movs r0, #0x80 + lsls r0, r0, #9 + str r0, [r4, #0x20] + b _08070E76 +_08070E32: + ldrb r0, [r4, #0x10] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r4, #0x10] + ldrb r0, [r6, #0x14] + cmp r0, #0 + bne _08070E56 + bl sub_08008B22 + cmp r0, #0 + beq _08070E56 + movs r0, #7 + strb r0, [r6, #0x11] + bl sub_08079938 + bl sub_080791BC + b _08070E76 +_08070E56: + movs r0, #1 + strh r0, [r4, #0x12] + movs r0, #8 + strb r0, [r4, #0xe] + ldrb r0, [r4, #0xd] + adds r0, #1 + strb r0, [r4, #0xd] + ldr r2, _08070E78 @ =gPlayerState + ldr r0, [r2, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08070E76 + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r2, #8] +_08070E76: + pop {r4, r5, r6, pc} + .align 2, 0 +_08070E78: .4byte gPlayerState + .syntax divided diff --git a/include/functions.h b/include/functions.h index abb22ffb..b2f73c87 100644 --- a/include/functions.h +++ b/include/functions.h @@ -307,5 +307,18 @@ extern void sub_08078AA8(u32, u32); extern void sub_08078B48(void); extern void sub_0807919C(); extern void sub_0807CAA0(u32, u32); -extern void sub_08080964(u16, u32); +extern void sub_080085B0(Entity*); +extern u32 sub_08079D48(); +extern u32 sub_08008B22(); +extern void sub_080791BC9(); +extern void sub_080791BC(); +extern void sub_08056360(); +extern u32 sub_080542AC(u32); +extern void sub_0807A108(); +extern u32 sub_08079FC4(u32); +extern void sub_0800455E(Entity*); +extern void sub_08008790(Entity*, u32); +extern u32 CheckIsDungeon(); +extern void sub_0804ACF8(); +extern void sub_08073904(Entity*); #endif diff --git a/include/global.h b/include/global.h index 3b2e0446..146dfc14 100644 --- a/include/global.h +++ b/include/global.h @@ -49,6 +49,26 @@ #define static_assert(cond) extern char assertion[(cond) ? 1 : -1] +#if NON_MATCHING +#define asmfunc(prologue, path) +#else +#define asmfunc(prologue, path) \ + NAKED prologue { \ + asm(".include " #path); \ + } +#endif + +#if NON_MATCHING +#define NONMATCH(prologue, path) prologue +#define END_NONMATCH +#else +#define NONMATCH(path, prologue) \ + NAKED prologue { \ + asm(".include " #path); \ + if (0) +#define END_NONMATCH } +#endif + typedef union { s32 WORD; struct { @@ -76,6 +96,4 @@ union SplitHWord { } PACKED HALF; } PACKED; - - #endif // GUARD_GLOBAL_H diff --git a/include/room.h b/include/room.h index f0cbd8db..8b869d69 100644 --- a/include/room.h +++ b/include/room.h @@ -79,5 +79,6 @@ extern RoomControls gRoomControls; extern RoomVars gRoomVars; extern void SetTileType(u32, u32, u32); +extern void sub_08080964(u32 time, u32 magnitude); // shake screen #endif diff --git a/linker.ld b/linker.ld index c785e9bc..2c9e5126 100644 --- a/linker.ld +++ b/linker.ld @@ -648,7 +648,7 @@ SECTIONS { src/sub_0806FA04.o(.text); src/position.o(.text); asm/code_0806FA6C.o(.text); - src/sub_08070680.o(.text); + src/player.o(.text); asm/code_08070698.o(.text); asm/stairsInteract.o(.text); asm/code_080732D0.o(.text); diff --git a/src/code_0808091C.c b/src/code_0808091C.c index cdd7504a..74caf177 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -62,7 +62,7 @@ u32* GetLayerByIndex(u32 param_1) { } } -void sub_08080964(u16 time, u32 magnitude) { +void sub_08080964(u32 time, u32 magnitude) { gRoomControls.screenShakeTime = time; gRoomControls.screenShakeMagnitude = magnitude & 7; return; diff --git a/src/npc/carlov.c b/src/npc/carlov.c index 1d17ee4c..d3824e78 100644 --- a/src/npc/carlov.c +++ b/src/npc/carlov.c @@ -11,7 +11,6 @@ extern void sub_0807DD50(Entity*); extern void sub_0807DD94(Entity*, u32); extern void EnqueueSFX(u32); -extern void sub_08080964(u32, u32); void Carlov(Entity* this) { if (this->action == 0) { diff --git a/src/player.c b/src/player.c new file mode 100644 index 00000000..1192f6be --- /dev/null +++ b/src/player.c @@ -0,0 +1,546 @@ +#include "global.h" +#include "entity.h" +#include "player.h" +#include "textbox.h" +#include "functions.h" +#include "readKeyInput.h" +#include "area.h" + +extern const void (*const gUnk_0811B9E0[])(Entity*); +extern const void (*const gUnk_0811BA60[])(Entity*); +extern const void (*const gUnk_0811BA68[])(Entity*); +extern const void (*const gUnk_0811BA74[])(Entity*); +extern const void (*const gUnk_0811BA7C[])(Entity*); +extern const void (*const gUnk_0811BA88[])(Entity*); +extern const void (*const gUnk_0811BA94[])(Entity*); +extern const void (*const gUnk_0811BA9C[])(Entity*); + +extern void sub_08079458(); +extern void sub_080797EC(); +extern void sub_08079E08(); +extern void sub_08078F60(); + +extern BoundingBox gUnk_08114F88; + +// inject +void sub_08070680(Entity* this) { + gUnk_0811B9E0[this->action](this); +} + +void sub_08070698(Entity* this) { + Entity* ent; + + gPlayerState.field_0x0[0] = 0xff; + gPlayerState.field_0x16[0] = gPlayerEntity.x.HALF.HI; + gPlayerState.field_0x16[1] = gPlayerEntity.y.HALF.HI; + this->flags = this->flags | 0x80; + this->spritePriority.b0 = 0xc; + this->spritePriority.b1 = 1; + this->spriteSettings.b.shadow = 1; + this->field_0x16 = 0x20; + this->flags2 = 8; + this->damageType = 0x79; + this->boundingBox = &gUnk_08114F88; + this->spriteIndex = 1; + gPlayerState.field_0x8 = 0x100; + sub_0806FDA0(this); + sub_080AE008(this, 1, 2); + InitAnimationForceUpdate(this, 2); + if (this->collisionLayer == 0) { + sub_08016A30(this); + } + + if (IsItemEquipped(0x10) != 2) { + sub_08077728(); + } + sub_0807A108(); + sub_0807AEE4(); + + if (sub_08078EFC() == 0) { + sub_0807921C(); + sub_0807A1B8(); + if (gPlayerState.swimState != 0) { + gPlayerState.swimState = 1; + sub_08079938(); + gPlayerState.field_0xa8 = 7; + sub_0807ACCC(this); + ent = FindEntityInListByForm(0x6, 0xf, 0x6, 0xb, 0x0); + if (ent != NULL) { + DeleteEntity(ent); + } + } + } +} + +// PlayerState.flags need to be 100% before this one can reasonably be done +NONMATCH("asm/non_matching/player/sub_08070794.s", void sub_08070794(Entity* this)) { +} +END_NONMATCH + +void sub_08070BEC(Entity* this, u32 r0) { + if (r0 & 1) + sub_080797EC(); + else + sub_08079938(); + + if (r0 & 2) + sub_08079E08(); +} + +void sub_08070C10(Entity* this) { + gPlayerState.field_0xd[0] = 0xFF; + gPlayerState.pushedObject = 0x80; + gPlayerState.field_0xa8 = 10; + + gUnk_0811BA60[this->previousActionFlag](this); +} + +void sub_08070C3C(Entity* this) { + sub_08004168(this); + + gPlayerState.flags.all |= 0x1 | 0x4; + gPlayerState.flags.all &= ~0x400; + + gPlayerState.jumpStatus = 0; + + if ((gPlayerState.flags.all & 0x80) != 0) + gPlayerState.field_0x8 = 0x1ba; + else if ((gPlayerState.flags.all & 8) != 0) + gPlayerState.field_0x8 = 0x458; + else + gPlayerState.field_0x8 = 0x1b8; + + this->previousActionFlag++; + this->flags &= ~0x80; + this->spritePriority.b1 = 0; + ResetPlayer(); + sub_0807A108(); + PlaySFX(0x7b); + PlaySFX(0x85); +} + +void sub_08070CB4(Entity* this) { + UpdateAnimationSingleFrame(this); + if ((this->frames.all & 0x80) != 0) { + if ((gUnk_02002A40.stats.health != 0) && ((gPlayerState.flags.all & 0x8000) != 0)) { + gPlayerState.flags.all &= ~(0x1 | 0x4); + this->spriteSettings.b.draw = 0; + } else { + gPlayerState.flags.all &= ~(0x4 | 0x8000); + sub_08079458(); + gPlayerState.field_0xa = 0; + this->hurtBlinkTime = 0x20; + ModHealth(-2); + } + } +} + +void sub_08070D20(Entity* this) { + gUnk_0811BA68[this->previousActionFlag](this); +} + +void sub_08070D38(Entity* this) { + this->flags &= ~0x80; + this->direction = ((this->animationState & 0xe) << 2) ^ 0x10; + this->nonPlanarMovement = 0x100; + this->field_0x42 = 0; + this->previousActionFlag++; + this->actionDelay = gPlayerState.field_0x38; + this->spriteIndex = 1; + + if ((gPlayerState.flags.all & 0x80) == 0) { + this->field_0x20 = 0x20000; + gPlayerState.field_0x8 = 0x114; + sub_08080964(16, 0); + } else { + gPlayerState.field_0x8 = 0xc18; + this->field_0x20 = 0x18000; + } + + gPlayerState.jumpStatus = 0x80; + PlaySFX(0x14c); + ResetPlayer(); + sub_08078F60(); +} + +// minor regalloc +NONMATCH("asm/non_matching/player/sub_08070DC4.s", void sub_08070DC4(Entity* this)) { + UpdateAnimationSingleFrame(this); + sub_080085B0(this); + sub_08079E08(); + sub_0807A1B8(); + + if (sub_08078EFC() || sub_08003FC4(this, 0x2000)) + return; + + gPlayerState.jumpStatus = 0; + + if (sub_08078EFC() || sub_08079D48()) + return; + + if (gPlayerState.swimState != 0) { + gPlayerState.jumpStatus = 0; + sub_080791D0(); + return; + } + + if (--this->actionDelay != 0xFF) { + this->field_0x20 = 0x10000; + return; + } + + this->flags |= 0x80; + + if ((gPlayerState.field_0x14 == 0) && sub_08008B22()) { + gPlayerState.field_0x10[1] = 7; + sub_08079938(); + sub_080791BC(); + return; + } + + this->spriteIndex = 1; + this->actionDelay = 8; + this->previousActionFlag++; + + if ((gPlayerState.flags.all & 0x80) == 0) + gPlayerState.field_0x8 = 0x100; +} +END_NONMATCH + +void sub_08070E7C(Entity* this) { + u8 timer = --this->actionDelay; + + if (timer == 0) { + gPlayerState.jumpStatus = timer; + sub_080791D0(); + } +} + +void sub_08070E9C(Entity* this) { + if (sub_08078EFC() != 0) { + sub_08056360(); + } else { + gPlayerState.field_0x27[0] = 4; + gPlayerState.field_0xa8 = 0x13; + sub_0807A1B8(); + gUnk_0811BA74[this->previousActionFlag](this); + } +} + +void sub_08070EDC(Entity* this) { + this->scriptedScene = 2; + + if ((gTextBox.doTextBox & 0x7f) != 0) + this->previousActionFlag = 1; + + if ((gPlayerState.flags.all & 0x80) == 0) + sub_08079938(); + else + gPlayerState.field_0x8 = 0xc18; +} + +void sub_08070f24(Entity* this) { + UpdateAnimationSingleFrame(this); + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->scriptedScene = this->scriptedScene2; + sub_080791D0(); + } +} + +void sub_08070F50(Entity* this) { + Entity* child; + u8* temp; // todo: retype + + gPlayerState.field_0xa8 = 0x15; + this->flags &= ~(0x80); + gUnk_0811BA7C[this->previousActionFlag](this); + + child = this->attachedEntity; + if (child != NULL) { + PositionEntityOnTop(this, child); + temp = GetSpriteSubEntryOffsetDataPointer((u16)this->spriteIndex, this->frameIndex); + child->spriteOffsetX = *temp; + child->spriteOffsetY = temp[1]; + } +} + +void sub_08070FA4(Entity* this) { + u16 temp; + + this->spriteSettings.b.flipX = FALSE; + this->animationState = 4; + + gPlayerState.flags.all |= 1; + gPlayerState.jumpStatus = 0; + + if ((gPlayerState.flags.all & 0x80) == 0) { + if ((gPlayerState.flags.all & 0x8) != 0) { + if (sub_080542AC(gPlayerState.field_0x38)) { + temp = 0x45e; + } else { + temp = 0x45b; + } + } else { + if (sub_080542AC(gPlayerState.field_0x38)) { + temp = 0x2e0; + } else { + temp = 0x1b9; + } + } + gPlayerState.field_0x8 = temp; + } + + this->previousActionFlag = 1; + ResetPlayer(); + sub_08078F60(); +} + +void sub_08071020(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all != 0) { + this->previousActionFlag = 2; + } +} + +void sub_08071038(Entity* this) { + + UpdateAnimationSingleFrame(this); + + if (sub_08078EFC() || (gTextBox.doTextBox & 0x7f)) + return; + + if ((this->frames.all & 0x80) != 0) { + this->attachedEntity = 0; + this->field_0x42 = 0; + this->hurtBlinkTime = 0xf8; + gPlayerState.jumpStatus = 0; + sub_080791D0(); + } +} + +void sub_08071084(Entity* this) { + gPlayerState.field_0xa8 = 0xb; + gUnk_0811BA88[this->previousActionFlag](this); +} + +void sub_080710A8(Entity* this) { + u32 temp; + + this->previousActionFlag++; + + gPlayerState.flags.all |= 1; + gPlayerState.flags.all &= ~(0x400 | 0x800); + + gPlayerState.playerAction = 0; + + if ((gPlayerState.heldObject | gPlayerState.field_0x1a[1]) == 0) { + if ((gPlayerState.flags.all & 0x80) == 0) { + ResetPlayer(); + + if ((gPlayerState.flags.all & 0x8) != 0) { + gPlayerState.field_0x8 = 0x420; + } else { + gPlayerState.field_0x8 = 0x810; + } + } + } + + gPlayerState.field_0x1d[1] = 0; + this->direction = ((this->animationState & 0xe) << 2); + + temp = sub_08079FC4(1); + asm("lsl r0, r0, #0x4"); + this->field_0x20 = (temp - 4) * 64 * 64; + + this->nonPlanarMovement = 0x100; + sub_0807A108(); + PlaySFX(0x7c); + PlaySFX(0x78); +} + +void sub_08071130(Entity* this) { + + if (sub_08078EFC(this)) + return; + + if (gPlayerState.field_0x1a[1] == 0) { + UpdateAnimationSingleFrame(this); + + if ((this->frames.all & 1)) + return; + } + + sub_0806F69C(this); + + if (sub_08003FC4(this, 0x2000)) + return; + + gPlayerState.jumpStatus = 0; + sub_0800455E(this); + + if (*(Entity**)&this->field_0x74 != NULL) + sub_0800455E(*(Entity**)&this->field_0x74); + + sub_08008790(this, 7); + + if (gPlayerState.field_0x14) + return; + + sub_0807A1B8(); + + if (sub_08078EFC()) + return; + + if ((sub_08079D48() == 0) || (gPlayerState.swimState != 0)) { + gPlayerState.jumpStatus = 0; + sub_080791D0(); + return; + } + + this->actionDelay = 6; + + if (((gPlayerState.heldObject | gPlayerState.keepFacing) == 0) && ((gPlayerState.flags.all & 0x80) == 0)) { + if ((gPlayerState.flags.all & 0x8) != 0) { + gPlayerState.field_0x8 = 0x424; + } else { + gPlayerState.field_0x8 = 0x820; + } + this->animIndex = 0xff; + } + + this->previousActionFlag++; + sub_08078F60(); + this->field_0x42 = 0; + PlaySFX(0x7d); +} + +void sub_08071208(Entity* this) { + if ((gPlayerState.heldObject | gPlayerState.keepFacing) == 0) { + if ((gPlayerState.flags.all & 0x80) == 0) { + UpdateAnimationSingleFrame(this); + } + } + + if (--this->actionDelay == 0xff) { + gPlayerState.jumpStatus = 0; + sub_080791D0(); + } +} + +void sub_08071248(Entity* this) { + gPlayerState.field_0xa8 = 0x16; + gPlayerState.flags.all |= 4; + this->flags &= ~0x80; + gUnk_0811BA94[this->previousActionFlag](this); +} + +void sub_0807127C(Entity* this) { + this->previousActionFlag = 1; + this->spritePriority.b1 = 0; + + if ((gPlayerState.flags.all & 0x80) != 0) { + this->actionDelay = 0x3c; + gPlayerState.field_0x8 = 0xc19; + PlaySFX(0x84); + } else { + if ((gPlayerState.flags.all & 0x10000) == 0) { + sub_08004168(this); + } + + CreateFx(this, 11, 0); + + if ((gPlayerState.flags.all & 8) == 0) { + gPlayerState.field_0x8 = 0x72c; + } else { + gPlayerState.field_0x8 = 0x44c; + } + } + ResetPlayer(); +} + +void sub_080712F0(Entity* this) { + u32 temp; + + UpdateAnimationSingleFrame(this); + + temp = FALSE; + + if ((gPlayerState.flags.all & 0x80) != 0) { + if (--this->actionDelay == 0) + temp = TRUE; + } else if ((this->frames.all & 0x80) != 0) { + if (this->animIndex != 0xce) + gPlayerState.field_0x8 = 0x2ce; + else + temp = TRUE; + } + + if (temp == FALSE) + return; + + this->field_0x42 = 0; + this->hurtBlinkTime = 0x20; + this->spritePriority.b1 = 1; + this->spriteSettings.b.draw = FALSE; + gPlayerState.flags.all &= ~(0x4); + sub_08079458(); +} + +void sub_08071380(Entity *this) { + gPlayerState.field_0xa8 = 0xe; + gUnk_0811BA9C[this->previousActionFlag](this); + + if ((this->previousActionFlag == 7) || (this->previousActionFlag < 3)) + return; + + if ((gPlayerState.flags.all & 0x20) == 0) + return; + + if ((gUnk_03000FF0.newKeys & 0x102) == 0) + return; + + if (CheckIsDungeon() || gArea.field_0x17 == 3) { + this->previousActionFlag = 7; + this->actionDelay = 30; + DoFade(7, 16); + PlaySFX(0xf8); + } else { + sub_0804ACF8(); + } +} + +void sub_08071400(Entity* this) { + u16 x; + u16 y; + + this->flags &= ~(0x80); + this->field_0x42 = 0; + + x = gArea.field_0x12; + y = gArea.field_0x14; + + if ((this->x.HALF.HI != x) || (this->y.HALF.HI != y)) { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.field_0x12, gArea.field_0x14); + this->nonPlanarMovement = 0x100; + sub_08079E08(); + } + + sub_08073904(this); + UpdateAnimationSingleFrame(this); + + if (gPlayerState.jumpStatus == 0) { + gPlayerState.flags.all |= 0x20; + this->previousActionFlag = 1; + this->animationState = 4; + this->spriteSettings.b.flipX = FALSE; + if (gArea.field_0x17 == 4) { + gPlayerState.field_0x8 = 0x52c; + } + } + + this->actionDelay = 8; + + if (gArea.field_0x17 != 3) { + this->spritePriority.b0 = 3; + } +} diff --git a/src/sub_08070680.c b/src/sub_08070680.c deleted file mode 100644 index a7717ff3..00000000 --- a/src/sub_08070680.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "global.h" -#include "entity.h" -#include "player.h" -#include "functions.h" - -extern void (*gUnk_0811B9E0[])(Entity*); - -extern BoundingBox gUnk_08114F88; - -// inject -void sub_08070680(Entity* this) { - gUnk_0811B9E0[this->action](this); -} - -void sub_08070698(Entity* this) { - u32 uVar1; - int iVar2; - Entity* ent; - - gPlayerState.field_0x0[0] = 0xff; - gPlayerState.field_0x16[0] = gPlayerEntity.x.HALF.HI; - gPlayerState.field_0x16[1] = gPlayerEntity.y.HALF.HI; - this->flags = this->flags | 0x80; - this->spritePriority.b0 = 0xc; - this->spritePriority.b1 = 1; - this->spriteSettings.b.shadow = 1; - this->field_0x16 = 0x20; - this->flags2 = 8; - this->damageType = 0x79; - this->boundingBox = &gUnk_08114F88; - this->spriteIndex = 1; - gPlayerState.field_0x8 = 0x100; - sub_0806FDA0(this); - sub_080AE008(this, 1, 2); - InitAnimationForceUpdate(this, 2); - if (this->collisionLayer == 0) { - sub_08016A30(this); - } - uVar1 = IsItemEquipped(0x10); - if (uVar1 != 2) { - sub_08077728(); - } - sub_0807A108(); - sub_0807AEE4(); - iVar2 = sub_08078EFC(); - if (iVar2 == 0) { - sub_0807921C(); - sub_0807A1B8(); - if (gPlayerState.swimState != 0) { - gPlayerState.swimState = 1; - sub_08079938(); - gPlayerState.field_0xa8 = 7; - sub_0807ACCC(this); - ent = FindEntityInListByForm(0x6, 0xf, 0x6, 0xb, 0x0); - if (ent != NULL) { - DeleteEntity(ent); - } - } - } -}