diff --git a/asm/ballChainSoldier.s b/asm/ballChainSoldier.s index 0f897b81..9cec92cf 100644 --- a/asm/ballChainSoldier.s +++ b/asm/ballChainSoldier.s @@ -356,7 +356,7 @@ _0803E7A0: strb r0, [r2, #0xe] movs r0, #8 movs r1, #0 - bl sub_08080964 + bl InitScreenShake _0803E7B0: pop {pc} .align 2, 0 diff --git a/asm/chuchuBoss.s b/asm/chuchuBoss.s index d3f20d5a..b2b3b1d9 100644 --- a/asm/chuchuBoss.s +++ b/asm/chuchuBoss.s @@ -1033,7 +1033,7 @@ sub_0802647C: @ 0x0802647C bne _080264A6 movs r0, #0x10 movs r1, #0 - bl sub_08080964 + bl InitScreenShake ldr r0, _080264A8 @ =0x000001A1 bl SoundReq adds r0, r4, #0 @@ -1561,7 +1561,7 @@ sub_0802686C: @ 0x0802686C _08026888: movs r0, #0x10 movs r1, #0 - bl sub_08080964 + bl InitScreenShake movs r0, #5 strb r0, [r4, #0xd] adds r0, r4, #0 @@ -1852,7 +1852,7 @@ _08026A7C: strh r0, [r1] movs r0, #0x20 movs r1, #0 - bl sub_08080964 + bl InitScreenShake ldr r0, _08026B24 @ =0x0000010B bl SoundReq adds r0, r6, #0 @@ -2126,7 +2126,7 @@ _08026A98: strh r0, [r1] movs r0, #0x20 movs r1, #0 - bl sub_08080964 + bl InitScreenShake ldr r0, _08026B24 @ =0x0000010B bl SoundReq adds r0, r6, #0 diff --git a/asm/code_080043E8.s b/asm/code_080043E8.s index 4a962130..817ddf9a 100644 --- a/asm/code_080043E8.s +++ b/asm/code_080043E8.s @@ -99,8 +99,8 @@ EnqueueSFX: @ 0x08004488 _0800449A: bx lr - thumb_func_start sub_0800449C -sub_0800449C: @ 0x0800449C + thumb_func_start SoundReqClipped +SoundReqClipped: @ 0x0800449C push {r1, lr} bl CheckOnScreen cmp r0, #0 diff --git a/asm/code_0800857C.s b/asm/code_0800857C.s index c4a611b9..cd443b88 100644 --- a/asm/code_0800857C.s +++ b/asm/code_0800857C.s @@ -464,7 +464,7 @@ _0800890C: .byte 0x00, 0xFA, 0x06, 0x00, 0x13, 0x12, 0x12, 0x10, 0x10, 0x11, 0x11, 0x13 _0800891C: push {r0} - bl sub_08078F60 + bl ResetPlayerVelocity pop {r0} _08008924: pop {pc} diff --git a/asm/code_0801967C.s b/asm/code_0801967C.s index 69ea4740..27351a84 100644 --- a/asm/code_0801967C.s +++ b/asm/code_0801967C.s @@ -1260,7 +1260,7 @@ _08019FDA: ands r7, r0 movs r4, #0 movs r6, #0 - ldr r5, _0801A088 @ =gUnk_03004040 + ldr r5, _0801A088 @ =gPlayerClones mov sb, r5 _08019FEC: mov r1, sb @@ -1340,7 +1340,7 @@ _0801A02A: _0801A07C: .4byte gPlayerState _0801A080: .4byte 0x0000FFFF _0801A084: .4byte 0x00000FFF -_0801A088: .4byte gUnk_03004040 +_0801A088: .4byte gPlayerClones _0801A08C: .4byte gPlayerEntity _0801A090: .4byte gRoomControls _0801A094: @@ -1465,7 +1465,7 @@ _0801A166: b _0801A2A4 _0801A174: movs r4, #0 - ldr r5, _0801A194 @ =gUnk_03004040 + ldr r5, _0801A194 @ =gPlayerClones _0801A178: ldr r0, [r5] movs r1, #0 @@ -1481,7 +1481,7 @@ _0801A186: b _0801A2A4 .align 2, 0 _0801A190: .4byte gPlayerState -_0801A194: .4byte gUnk_03004040 +_0801A194: .4byte gPlayerClones _0801A198: subs r7, #0x40 _0801A19A: @@ -1499,7 +1499,7 @@ _0801A1A6: cmp r0, #9 ble _0801A2A4 movs r4, #0 - ldr r5, _0801A1D0 @ =gUnk_03004040 + ldr r5, _0801A1D0 @ =gPlayerClones _0801A1B6: ldr r0, [r5] movs r1, #6 @@ -1513,7 +1513,7 @@ _0801A1B6: b _0801A2A4 .align 2, 0 _0801A1CC: .4byte gPlayerState -_0801A1D0: .4byte gUnk_03004040 +_0801A1D0: .4byte gPlayerClones _0801A1D4: movs r0, #2 ands r0, r1 diff --git a/asm/code_080732D0.s b/asm/code_080732D0.s deleted file mode 100644 index ad91468f..00000000 --- a/asm/code_080732D0.s +++ /dev/null @@ -1,4332 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080732D0 -sub_080732D0: @ 0x080732D0 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_080002B8 - cmp r0, #0x28 - beq _080732EE - movs r0, #0 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F69C - b _08073328 -_080732EE: - ldrb r0, [r4, #0xd] - adds r0, #1 - movs r1, #0 - strb r0, [r4, #0xd] - strh r1, [r4, #0x30] - adds r0, r4, #0 - movs r1, #0x70 - movs r2, #1 - movs r3, #0 - bl CreateObjectWithParent - ldr r0, _08073318 @ =gPlayerState - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #7 - bne _08073320 - ldr r0, _0807331C @ =0x00000187 - bl SoundReq - b _08073328 - .align 2, 0 -_08073318: .4byte gPlayerState -_0807331C: .4byte 0x00000187 -_08073320: - movs r0, #0xc4 - lsls r0, r0, #1 - bl SoundReq -_08073328: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807332C -sub_0807332C: @ 0x0807332C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldr r0, _08073344 @ =gPlayerState - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #7 - bne _08073348 - movs r0, #0 - b _0807334A - .align 2, 0 -_08073344: .4byte gPlayerState -_08073348: - movs r0, #0x1c -_0807334A: - strb r0, [r4, #0x15] - ldrh r1, [r4, #0x2e] - movs r0, #0xf - ands r0, r1 - cmp r0, #0xf - beq _08073386 - ldr r0, _08073368 @ =gPlayerState - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #7 - bne _0807336C - movs r0, #2 - strb r0, [r4, #0x14] - movs r0, #4 - b _0807337C - .align 2, 0 -_08073368: .4byte gPlayerState -_0807336C: - movs r0, #6 - strb r0, [r4, #0x14] - ldrb r0, [r4, #0x15] - cmp r0, #0x18 - bls _0807337E - subs r0, #1 - movs r1, #0x1f - ands r0, r1 -_0807337C: - strb r0, [r4, #0x15] -_0807337E: - adds r0, r4, #0 - bl sub_0806F69C - b _080733B6 -_08073386: - ldr r0, _0807339C @ =gPlayerState - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #0 - beq _080733A4 - ldr r0, _080733A0 @ =gRoomControls - str r4, [r0, #0x30] - bl sub_080791BC - b _080733B6 - .align 2, 0 -_0807339C: .4byte gPlayerState -_080733A0: .4byte gRoomControls -_080733A4: - ldr r0, _080733B8 @ =gMain - movs r1, #3 - strb r1, [r0, #4] - movs r1, #1 - strb r1, [r0, #0xb] - movs r0, #5 - movs r1, #8 - bl DoFade -_080733B6: - pop {r4, pc} - .align 2, 0 -_080733B8: .4byte gMain - - thumb_func_start sub_080733BC -sub_080733BC: @ 0x080733BC - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrh r1, [r4, #0x2e] - movs r0, #0xf - ands r0, r1 - cmp r0, #8 - bne _080733FC - movs r0, #0x10 - strb r0, [r4, #0x15] - movs r0, #4 - strb r0, [r4, #0x14] - ldr r0, [r4, #0x54] - cmp r0, #0 - beq _080733FC - bl DeleteEntity - movs r0, #0 - str r0, [r4, #0x54] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _080733F6 - adds r0, r4, #0 - bl sub_0807AABC - b _080733FC -_080733F6: - adds r0, r4, #0 - bl sub_0807AA80 -_080733FC: - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - adds r0, #0x7e - ldrh r1, [r0] - movs r2, #0x32 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08073418 - ldr r0, _0807341C @ =gRoomControls - str r4, [r0, #0x30] - bl sub_0807921C -_08073418: - pop {r4, pc} - .align 2, 0 -_0807341C: .4byte gRoomControls - - thumb_func_start PlayerParachute -PlayerParachute: @ 0x08073420 - push {r4, lr} - adds r4, r0, #0 - bl sub_08078EFC - cmp r0, #0 - bne _0807345E - bl UpdateFloorType - ldrb r2, [r4, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - orrs r0, r2 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0x19] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x19] - ldr r0, _08073460 @ =gPlayerState - adds r0, #0xa8 - movs r1, #8 - strb r1, [r0] - ldr r1, _08073464 @ =gUnk_0811BC08 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 -_0807345E: - pop {r4, pc} - .align 2, 0 -_08073460: .4byte gPlayerState -_08073464: .4byte gUnk_0811BC08 - - thumb_func_start sub_08073468 -sub_08073468: @ 0x08073468 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _080734CC @ =gPlayerState - movs r1, #0 - movs r0, #0xe0 - lsls r0, r0, #3 - strh r0, [r5, #8] - strb r1, [r5, #2] - ldr r0, _080734D0 @ =0xFFFF0000 - str r0, [r4, #0x20] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - movs r0, #0xf0 - lsls r0, r0, #1 - str r0, [r4, #0x7c] - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] - ldr r1, [r5, #0x30] - movs r2, #0x80 - lsls r2, r2, #0x11 - adds r0, r1, #0 - ands r0, r2 - cmp r0, #0 - bne _080734AC - orrs r1, r2 - str r1, [r5, #0x30] - adds r0, r4, #0 - movs r1, #0x61 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent -_080734AC: - bl ResetPlayer - ldr r0, [r4, #0x20] - cmp r0, #0 - bgt _080734C0 - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _080734C8 -_080734C0: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] -_080734C8: - pop {r4, r5, pc} - .align 2, 0 -_080734CC: .4byte gPlayerState -_080734D0: .4byte 0xFFFF0000 - - thumb_func_start sub_080734D4 -sub_080734D4: @ 0x080734D4 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _080734FC @ =0xFFFFF000 - bl GravityUpdate - ldr r0, [r4, #0x20] - cmp r0, #0 - bgt _080734EE - ldr r0, _08073500 @ =gPlayerState - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _080734FA -_080734EE: - movs r0, #0x92 - lsls r0, r0, #0xb - str r0, [r4, #0x20] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] -_080734FA: - pop {r4, pc} - .align 2, 0 -_080734FC: .4byte 0xFFFFF000 -_08073500: .4byte gPlayerState - - thumb_func_start sub_08073504 -sub_08073504: @ 0x08073504 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x20] - movs r1, #0x80 - lsls r1, r1, #7 - cmp r0, #0 - bge _08073516 - movs r1, #0x80 - lsls r1, r1, #4 -_08073516: - adds r0, r4, #0 - bl GravityUpdate - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _08073576 - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #0x20 - rsbs r0, r0, #0 - cmp r1, r0 - ble _08073576 - ldrb r0, [r4, #0xd] - adds r0, #1 - movs r2, #0 - strb r0, [r4, #0xd] - adds r1, r4, #0 - adds r1, #0x80 - ldrb r0, [r4, #0x15] - lsls r0, r0, #8 - str r0, [r1] - adds r0, r4, #0 - adds r0, #0x87 - strb r2, [r0] - subs r0, #1 - strb r2, [r0] - ldr r0, _08073580 @ =gPlayerState - movs r1, #0xe1 - lsls r1, r1, #3 - strh r1, [r0, #8] - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _08073576 - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #6 - strb r0, [r4, #0xd] - movs r0, #0x10 - strh r0, [r4, #0x24] - movs r0, #0x1e - strb r0, [r4, #0xe] - movs r0, #0xa9 - lsls r0, r0, #1 - bl SoundReq -_08073576: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 -_08073580: .4byte gPlayerState - - thumb_func_start sub_08073584 -sub_08073584: @ 0x08073584 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r2, _080735DC @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r5, #0x80 - adds r0, r5, #0 - ands r0, r1 - adds r6, r2, #0 - cmp r0, #0 - bne _080735C0 - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bgt _080735C0 - adds r0, r6, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _080735C0 - ldr r0, [r6, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x11 - ands r0, r1 - cmp r0, #0 - bne _080735E0 -_080735C0: - ldrb r0, [r6, #2] - movs r1, #0x40 - orrs r1, r0 - strb r1, [r6, #2] - bl sub_0807921C - adds r0, r4, #0 - bl sub_08073904 - movs r0, #0xe6 - lsls r0, r0, #3 - strh r0, [r6, #8] - b _08073794 - .align 2, 0 -_080735DC: .4byte gPlayerState -_080735E0: - ldr r0, _0807360C @ =gUnk_0200AF00 - adds r0, #0x2f - movs r1, #1 - strb r1, [r0] - movs r0, #0 - bl sub_0807A2F8 - cmp r0, #0 - beq _08073610 - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x14] - movs r0, #6 - ands r0, r1 - lsls r0, r0, #2 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - b _08073794 - .align 2, 0 -_0807360C: .4byte gUnk_0200AF00 -_08073610: - ldr r0, _08073620 @ =gArea - ldrb r0, [r0, #1] - cmp r0, #0x10 - bne _08073624 - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - b _08073626 - .align 2, 0 -_08073620: .4byte gArea -_08073624: - strh r5, [r4, #0x24] -_08073626: - ldr r3, _08073650 @ =gPlayerState - ldrb r1, [r3, #0xd] - movs r0, #0x80 - ands r0, r1 - adds r2, r4, #0 - adds r2, #0x80 - cmp r0, #0 - bne _0807365A - ldrb r0, [r4, #0x15] - cmp r0, r1 - beq _0807365A - ldrb r1, [r3, #0xd] - subs r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - cmp r0, #0xf - bgt _08073654 - ldr r0, [r2] - subs r0, #0x20 - b _08073658 - .align 2, 0 -_08073650: .4byte gPlayerState -_08073654: - ldr r0, [r2] - adds r0, #0x20 -_08073658: - str r0, [r2] -_0807365A: - ldr r0, [r2] - lsrs r0, r0, #8 - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] - bl sub_08079E08 - ldrb r2, [r4, #0x14] - lsls r3, r2, #2 - ldrb r1, [r4, #0x15] - cmp r2, #0 - bne _0807367C - adds r3, #8 - movs r0, #0x1f - ands r3, r0 - adds r1, #8 - ands r1, r0 -_0807367C: - subs r0, r3, #7 - cmp r0, r1 - bls _08073686 - subs r3, r2, #2 - b _0807368E -_08073686: - adds r0, r3, #7 - cmp r0, r1 - bhs _08073694 - adds r3, r2, #2 -_0807368E: - movs r0, #7 - ands r3, r0 - b _08073696 -_08073694: - adds r3, r2, #0 -_08073696: - movs r0, #0x87 - adds r0, r0, r4 - mov ip, r0 - ldrb r1, [r4, #0x14] - cmp r3, r1 - beq _080736A8 - movs r0, #0x14 - mov r2, ip - strb r0, [r2] -_080736A8: - strb r3, [r4, #0x14] - movs r5, #0 - ldr r1, _080736E4 @ =gPlayerState - ldrb r2, [r1, #0xd] - lsrs r3, r2, #2 - mov r6, ip - ldrb r0, [r6] - adds r6, r1, #0 - cmp r0, #0 - beq _080736CA - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - bne _08073736 - ldrb r0, [r4, #0x14] - cmp r0, r3 - beq _08073736 -_080736CA: - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - bne _080736FA - ldrb r2, [r4, #0x14] - cmp r2, r3 - beq _080736FA - movs r0, #4 - eors r0, r3 - cmp r2, r0 - bne _080736E8 - movs r5, #2 - b _080736FA - .align 2, 0 -_080736E4: .4byte gPlayerState -_080736E8: - movs r0, #6 - ands r0, r3 - adds r0, #2 - movs r1, #7 - ands r0, r1 - movs r5, #3 - cmp r2, r0 - bne _080736FA - movs r5, #1 -_080736FA: - ldr r1, _0807371C @ =gUnk_0811BC28 - lsls r0, r5, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrh r1, [r6, #8] - cmp r0, r1 - bne _0807372C - ldr r0, _08073720 @ =gArea - ldrb r0, [r0, #1] - cmp r0, #0x10 - bne _08073724 - adds r0, r4, #0 - movs r1, #2 - bl sub_080042BA - b _0807372E - .align 2, 0 -_0807371C: .4byte gUnk_0811BC28 -_08073720: .4byte gArea -_08073724: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _0807372E -_0807372C: - strh r0, [r6, #8] -_0807372E: - adds r0, r4, #0 - adds r0, #0x86 - strb r5, [r0] - b _08073762 -_08073736: - mov r2, ip - ldrb r0, [r2] - subs r0, #1 - strb r0, [r2] - ldr r1, _0807375C @ =gUnk_0811BC30 - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrh r1, [r6, #8] - cmp r0, r1 - bne _08073760 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _08073762 - .align 2, 0 -_0807375C: .4byte gUnk_0811BC30 -_08073760: - strh r0, [r6, #8] -_08073762: - ldr r0, [r4, #0x7c] - subs r1, r0, #1 - str r1, [r4, #0x7c] - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - bne _08073784 - ldr r2, _08073780 @ =gPlayerState - ldrb r1, [r2, #2] - movs r0, #0x40 - orrs r0, r1 - strb r0, [r2, #2] - bl sub_0807921C - b _08073794 - .align 2, 0 -_08073780: .4byte gPlayerState -_08073784: - adds r0, r1, #0 - movs r1, #0x14 - bl __divsi3 - ldr r2, _08073798 @ =0x0000FFF8 - adds r1, r2, #0 - subs r1, r1, r0 - strh r1, [r4, #0x36] -_08073794: - pop {r4, r5, r6, pc} - .align 2, 0 -_08073798: .4byte 0x0000FFF8 - - thumb_func_start sub_0807379C -sub_0807379C: @ 0x0807379C - push {lr} - adds r2, r0, #0 - ldrh r3, [r2, #0x36] - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #0x20 - rsbs r0, r0, #0 - cmp r1, r0 - ble _080737B4 - subs r0, r3, #1 - strh r0, [r2, #0x36] - b _080737BA -_080737B4: - ldrb r0, [r2, #0xd] - adds r0, #1 - strb r0, [r2, #0xd] -_080737BA: - pop {pc} - - thumb_func_start sub_080737BC -sub_080737BC: @ 0x080737BC - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0806F69C - ldr r0, [r4, #0x34] - movs r1, #0x98 - lsls r1, r1, #7 - adds r0, r0, r1 - str r0, [r4, #0x34] - ldrb r1, [r4, #0x15] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080737E2 - ldrh r1, [r4, #0x2e] - b _080737E4 -_080737E2: - ldrh r1, [r4, #0x32] -_080737E4: - movs r0, #0xf - ands r0, r1 - cmp r0, #8 - bne _08073804 - adds r0, r4, #0 - bl sub_080002D0 - cmp r0, #0 - bne _08073804 - ldr r2, _08073808 @ =gPlayerState - ldrb r1, [r2, #2] - movs r0, #0x40 - orrs r0, r1 - strb r0, [r2, #2] - bl sub_0807921C -_08073804: - pop {r4, pc} - .align 2, 0 -_08073808: .4byte gPlayerState - - thumb_func_start sub_0807380C -sub_0807380C: @ 0x0807380C - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08073854 @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0807382A - ldrb r0, [r4, #0x14] - adds r0, #2 - movs r1, #6 - ands r0, r1 - strb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] -_0807382A: - ldr r2, _08073858 @ =gPlayerState - ldr r1, _0807385C @ =gUnk_0811BC38 - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #8] - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #0x10 - rsbs r0, r0, #0 - cmp r1, r0 - bge _08073860 - movs r1, #0x80 - lsls r1, r1, #2 - adds r0, r4, #0 - bl GravityUpdate - b _0807387A - .align 2, 0 -_08073854: .4byte gScreenTransition -_08073858: .4byte gPlayerState -_0807385C: .4byte gUnk_0811BC38 -_08073860: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0807387A - movs r0, #7 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r4, #0x20] -_0807387A: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08073884 -sub_08073884: @ 0x08073884 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080738DC @ =gScreenTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _080738A2 - ldrb r0, [r4, #0x14] - adds r0, #2 - movs r1, #6 - ands r0, r1 - strb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] -_080738A2: - ldr r2, _080738E0 @ =gPlayerState - ldr r1, _080738E4 @ =gUnk_0811BC40 - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #8] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080738F0 - adds r1, r2, #0 - adds r1, #0x39 - ldrb r0, [r1] - cmp r0, #0xff - beq _080738EC - adds r1, r0, #0 - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080738E8 @ =gUnk_0813AD88 - adds r0, r0, r1 - bl DoExitTransition - b _080738F0 - .align 2, 0 -_080738DC: .4byte gScreenTransition -_080738E0: .4byte gPlayerState -_080738E4: .4byte gUnk_0811BC40 -_080738E8: .4byte gUnk_0813AD88 -_080738EC: - bl InitParachuteRoom -_080738F0: - ldr r1, _08073900 @ =0xFFFFE800 - adds r0, r4, #0 - bl GravityUpdate - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 -_08073900: .4byte 0xFFFFE800 - - thumb_func_start sub_08073904 -sub_08073904: @ 0x08073904 - push {lr} - ldr r3, _0807391C @ =gUnk_0811BC48 - ldr r1, _08073920 @ =gPlayerState - ldrb r2, [r1, #2] - movs r1, #7 - ands r1, r2 - lsls r1, r1, #2 - adds r1, r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807391C: .4byte gUnk_0811BC48 -_08073920: .4byte gPlayerState - - thumb_func_start sub_08073924 -sub_08073924: @ 0x08073924 - push {r4, lr} - adds r4, r0, #0 - ldr r2, _08073964 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xb - ands r0, r1 - cmp r0, #0 - bne _08073962 - movs r1, #0x36 - ldrsh r0, [r4, r1] - movs r1, #0x80 - lsls r1, r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08073962 - ldrb r0, [r2, #0xa] - cmp r0, #0 - bne _08073962 - movs r0, #0x40 - strb r0, [r2, #2] - movs r0, #0xff - strb r0, [r2, #0xd] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r4, #0x15] - bl sub_08077B20 - adds r0, r4, #0 - bl sub_08073968 -_08073962: - pop {r4, pc} - .align 2, 0 -_08073964: .4byte gPlayerState - - thumb_func_start sub_08073968 -sub_08073968: @ 0x08073968 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _08073998 @ =gPlayerState - ldrb r1, [r4, #2] - movs r0, #0xc0 - ands r0, r1 - cmp r0, #0 - bne _0807397C - ldrb r0, [r4, #0xd] - strb r0, [r5, #0x15] -_0807397C: - bl sub_08078F24 - ldrb r1, [r4, #5] - ldrb r0, [r4, #0xb] - orrs r0, r1 - cmp r0, #0 - bne _080739D4 - ldr r1, [r4, #0x30] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080739A0 - ldr r0, _0807399C @ =0x0000041C - b _080739BA - .align 2, 0 -_08073998: .4byte gPlayerState -_0807399C: .4byte 0x0000041C -_080739A0: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _080739BC - movs r0, #0x80 - lsls r0, r0, #0x13 - ands r1, r0 - cmp r1, #0 - beq _080739B8 - movs r0, #0x81 - lsls r0, r0, #4 - b _080739BA -_080739B8: - ldr r0, _080739E4 @ =0x0000080C -_080739BA: - strh r0, [r4, #8] -_080739BC: - ldr r0, _080739E8 @ =gPlayerState - ldrb r1, [r0, #2] - movs r0, #0xc0 - ands r0, r1 - cmp r0, #0 - bne _080739CE - adds r0, r5, #0 - bl sub_0806F948 -_080739CE: - movs r0, #0x7c - bl SoundReq -_080739D4: - ldr r2, _080739E8 @ =gPlayerState - ldrb r1, [r2, #2] - movs r0, #0xf8 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2, #2] - pop {r4, r5, pc} - .align 2, 0 -_080739E4: .4byte 0x0000080C -_080739E8: .4byte gPlayerState - - thumb_func_start sub_080739EC -sub_080739EC: @ 0x080739EC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _08073A14 @ =gPlayerState - ldrb r2, [r1, #2] - movs r0, #0xc0 - ands r0, r2 - adds r5, r1, #0 - cmp r0, #0 - beq _08073A18 - ldrb r0, [r4, #0x15] - strb r0, [r5, #0xd] - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - beq _08073A0E - movs r0, #0 - strh r0, [r4, #0x2a] -_08073A0E: - movs r2, #0x80 - lsls r2, r2, #6 - b _08073A48 - .align 2, 0 -_08073A14: .4byte gPlayerState -_08073A18: - movs r2, #0xc - rsbs r2, r2, #0 - adds r0, r4, #0 - movs r1, #0 - bl sub_0806F854 - lsls r0, r0, #0x10 - cmp r0, #0 - beq _08073A38 - ldrb r1, [r5, #2] - movs r0, #8 - orrs r0, r1 - strb r0, [r5, #2] - movs r2, #0x80 - lsls r2, r2, #7 - b _08073A48 -_08073A38: - movs r2, #0x80 - lsls r2, r2, #6 - ldrb r1, [r5, #2] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08073A48 - lsrs r2, r2, #1 -_08073A48: - ldrb r1, [r5, #2] - movs r0, #0xc0 - ands r0, r1 - cmp r0, #0 - bne _08073A7E - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08073A7E - ldr r0, [r4, #0x20] - cmp r0, #0 - bne _08073A7E - movs r0, #0xa0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - movs r0, #0xa - strb r0, [r4, #0xe] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r0, r1, #2 - strb r0, [r5, #2] - movs r0, #0xba - lsls r0, r0, #1 - strh r0, [r5, #8] - bl sub_08078F60 - b _08073A90 -_08073A7E: - adds r0, r4, #0 - adds r1, r2, #0 - bl GravityUpdate - cmp r0, #0 - bne _08073A90 - adds r0, r4, #0 - bl sub_08073AD4 -_08073A90: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08073A94 -sub_08073A94: @ 0x08073A94 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08073AAE - adds r0, r4, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - beq _08073AB4 -_08073AAE: - adds r0, r4, #0 - bl sub_08073B60 -_08073AB4: - ldr r0, _08073ACC @ =gPlayerEntity - ldr r0, [r0, #0x34] - cmp r0, #0 - beq _08073AC8 - ldr r1, _08073AD0 @ =gPlayerState - movs r0, #0 - strb r0, [r1, #2] - adds r0, r4, #0 - bl sub_08073924 -_08073AC8: - pop {r4, pc} - .align 2, 0 -_08073ACC: .4byte gPlayerEntity -_08073AD0: .4byte gPlayerState - - thumb_func_start sub_08073AD4 -sub_08073AD4: @ 0x08073AD4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x38 - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08073AFA - ldrb r2, [r4, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x80 - orrs r0, r2 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0x19] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x19] -_08073AFA: - ldr r6, _08073B48 @ =gPlayerState - ldrb r5, [r6, #2] - movs r0, #0xc1 - rsbs r0, r0, #0 - ands r5, r0 - ldrb r0, [r4, #0xc] - cmp r0, #0xa - beq _08073B32 - bl sub_0807A2B8 - movs r0, #0 - strb r0, [r6, #2] - bl UpdateFloorType - ldrb r0, [r6, #0xc] - cmp r0, #0 - bne _08073B5C - adds r0, r6, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _08073B5C - ldrb r0, [r6, #4] - cmp r0, #0 - beq _08073B32 - adds r0, r4, #0 - bl sub_08073B60 -_08073B32: - ldr r2, _08073B48 @ =gPlayerState - adds r0, r5, #1 - strb r0, [r2, #2] - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08073B50 - ldr r0, _08073B4C @ =0x00000424 - b _08073B54 - .align 2, 0 -_08073B48: .4byte gPlayerState -_08073B4C: .4byte 0x00000424 -_08073B50: - movs r0, #0x82 - lsls r0, r0, #4 -_08073B54: - strh r0, [r2, #8] - movs r0, #0x7d - bl SoundReq -_08073B5C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08073B60 -sub_08073B60: @ 0x08073B60 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _08073B88 @ =gPlayerState - movs r0, #0 - strb r0, [r4, #0x1b] - strb r0, [r4, #4] - strb r0, [r4, #2] - bl sub_08079938 - adds r0, r5, #0 - bl sub_080085B0 - ldr r0, [r4, #0x30] - movs r1, #0x20 - ands r0, r1 - cmp r0, #0 - bne _08073B86 - bl sub_080791BC -_08073B86: - pop {r4, r5, pc} - .align 2, 0 -_08073B88: .4byte gPlayerState - - thumb_func_start sub_08073B8C -sub_08073B8C: @ 0x08073B8C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08073BCC @ =gPlayerState - ldrb r0, [r5, #4] - cmp r0, #0 - beq _08073C04 - movs r2, #0xc - rsbs r2, r2, #0 - adds r0, r4, #0 - movs r1, #0 - bl sub_0806F854 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08073BB8 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08073BB8: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08073BD0 - subs r0, #1 - strb r0, [r4, #0xe] - b _08073C28 - .align 2, 0 -_08073BCC: .4byte gPlayerState -_08073BD0: - movs r1, #0x80 - lsls r1, r1, #7 - adds r0, r4, #0 - bl GravityUpdate - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #8 - rsbs r0, r0, #0 - cmp r1, r0 - blt _08073C28 - ldrb r0, [r5, #0x14] - cmp r0, #0 - bne _08073C0C - bl sub_0807A2B8 - cmp r0, #0 - bne _08073BFC - bl sub_08079D48 - cmp r0, #0 - bne _08073C0C -_08073BFC: - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_08073C04: - adds r0, r4, #0 - bl sub_08073B60 - b _08073C28 -_08073C0C: - ldr r1, _08073C2C @ =gPlayerState - ldrb r0, [r1, #2] - adds r0, #1 - strb r0, [r1, #2] - movs r0, #0xf - strb r0, [r4, #0xe] - movs r0, #0x10 - movs r1, #0 - bl sub_08080964 - movs r0, #0xa6 - lsls r0, r0, #1 - bl SoundReq -_08073C28: - pop {r4, r5, pc} - .align 2, 0 -_08073C2C: .4byte gPlayerState - - thumb_func_start sub_08073C30 -sub_08073C30: @ 0x08073C30 - push {lr} - adds r2, r0, #0 - ldr r0, _08073C54 @ =gPlayerState - ldrb r0, [r0, #4] - cmp r0, #0 - beq _08073C4A - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08073C58 -_08073C4A: - adds r0, r2, #0 - bl sub_08073B60 - b _08073C66 - .align 2, 0 -_08073C54: .4byte gPlayerState -_08073C58: - ldrb r0, [r2, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_08073C66: - pop {pc} - - thumb_func_start PlayerMinish -PlayerMinish: @ 0x08073C68 - push {lr} - ldr r2, _08073C7C @ =gUnk_0811BC60 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08073C7C: .4byte gUnk_0811BC60 - - thumb_func_start sub_08073C80 -sub_08073C80: @ 0x08073C80 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r2, _08073D00 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - orrs r0, r1 - str r0, [r2, #0x30] - movs r5, #0 - ldr r0, _08073D04 @ =0x00000C18 - strh r0, [r2, #8] - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, #0x18] - movs r0, #0x31 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x19] - movs r7, #4 - rsbs r7, r7, #0 - adds r0, r7, #0 - ands r0, r1 - strb r0, [r4, #0x19] - ldr r0, _08073D08 @ =gUnk_0811BC80 - str r0, [r4, #0x48] - strb r5, [r4, #0xe] - movs r6, #2 - strb r6, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x42 - strb r5, [r0] - movs r0, #1 - strb r0, [r4, #0xd] - adds r0, r4, #0 - movs r1, #1 - movs r2, #2 - bl LoadSwapGFX - ldr r0, _08073D0C @ =gRoomControls - str r4, [r0, #0x30] - bl sub_080809D4 - ldr r1, _08073D10 @ =gScreenTransition - ldrb r0, [r1, #0xf] - cmp r0, #9 - bne _08073D14 - strb r5, [r1, #0xf] - ldrb r1, [r4, #0x18] - adds r0, r7, #0 - ands r0, r1 - strb r0, [r4, #0x18] - strb r6, [r4, #0xd] - b _08073D1E - .align 2, 0 -_08073D00: .4byte gPlayerState -_08073D04: .4byte 0x00000C18 -_08073D08: .4byte gUnk_0811BC80 -_08073D0C: .4byte gRoomControls -_08073D10: .4byte gScreenTransition -_08073D14: - movs r0, #4 - movs r1, #0 - movs r2, #0 - bl CreateObject -_08073D1E: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08073D20 -sub_08073D20: @ 0x08073D20 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - ldr r5, _08073D70 @ =gPlayerState - movs r0, #0xa8 - adds r0, r0, r5 - mov r8, r0 - movs r0, #0 - mov r1, r8 - strb r0, [r1] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x39 - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x40 - movs r0, #1 - strb r0, [r1] - bl sub_08078F60 - adds r7, r5, #0 - adds r7, #0x26 - ldrb r0, [r7] - cmp r0, #0 - bne _08073D60 - movs r0, #0xc0 - strh r0, [r4, #0x24] -_08073D60: - bl sub_08079B24 - cmp r0, #0 - bne _08073D74 - adds r0, r4, #0 - bl sub_08079708 - b _08073EFC - .align 2, 0 -_08073D70: .4byte gPlayerState -_08073D74: - bl sub_08078EFC - adds r6, r0, #0 - cmp r6, #0 - beq _08073D80 - b _08073EFC -_08073D80: - adds r0, r4, #0 - bl sub_08073904 - bl UpdateFloorType - ldrb r0, [r5, #2] - cmp r0, #0 - beq _08073D96 - movs r0, #0x14 - mov r1, r8 - strb r0, [r1] -_08073D96: - ldrb r0, [r5, #0x12] - subs r0, #0x18 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bls _08073DB0 - strb r6, [r7] - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] -_08073DB0: - bl sub_08078EFC - cmp r0, #0 - beq _08073DBA - b _08073EFC -_08073DBA: - ldrb r0, [r4, #0xd] - cmp r0, #2 - bne _08073DC2 - b _08073EFC -_08073DC2: - ldr r0, [r5, #0x30] - movs r1, #0x40 - ands r0, r1 - cmp r0, #0 - bne _08073E10 - adds r0, r4, #0 - bl sub_080085B0 - bl sub_080792D8 - ldrb r0, [r5, #0xa] - cmp r0, #0 - bne _08073DE6 - bl sub_08079550 - cmp r0, #0 - beq _08073DE6 - b _08073EFC -_08073DE6: - adds r0, r4, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - beq _08073DFA - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - strb r0, [r4, #0x15] - b _08073EFC -_08073DFA: - bl sub_080782C0 - cmp r0, #0 - beq _08073E08 - bl sub_08078EFC - b _08073EFC -_08073E08: - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_08073E10: - bl sub_08019840 - cmp r0, #0 - bne _08073EFC - adds r0, r4, #0 - bl sub_08077698 - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - adds r1, r0, #0 - cmp r1, #0 - bne _08073E32 - ldr r0, _08073E74 @ =gPlayerState - strb r1, [r0, #2] -_08073E32: - ldr r2, _08073E74 @ =gPlayerState - ldrb r1, [r2, #7] - movs r3, #0x80 - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - bne _08073EFC - ldrb r0, [r2, #0xa] - cmp r0, #0 - bne _08073EFC - adds r0, r4, #0 - adds r0, #0x3d - movs r1, #0 - ldrsb r1, [r0, r1] - adds r6, r0, #0 - cmp r1, #8 - bgt _08073E90 - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08073E78 - adds r1, r2, #0 - adds r1, #0xa8 - movs r0, #7 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0807ACCC - bl sub_08079E08 - b _08073E90 - .align 2, 0 -_08073E74: .4byte gPlayerState -_08073E78: - ldrb r1, [r2, #0xd] - strb r1, [r4, #0x15] - adds r0, r3, #0 - ands r0, r1 - cmp r0, #0 - bne _08073E90 - adds r1, r2, #0 - adds r1, #0xa8 - movs r0, #1 - strb r0, [r1] - bl sub_08079E08 -_08073E90: - ldr r5, _08073EF0 @ =gPlayerState - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _08073E9E - adds r0, r4, #0 - bl sub_0806F948 -_08073E9E: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0807B068 - movs r0, #0x10 - bl sub_080793E4 - cmp r0, #0 - beq _08073EDC - movs r0, #0x14 - strb r0, [r6] - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #4 - strb r0, [r1] - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - movs r1, #0x10 - eors r0, r1 - adds r1, r4, #0 - adds r1, #0x3e - strb r0, [r1] - movs r0, #2 - rsbs r0, r0, #0 - bl ModHealth - movs r0, #0x7a - bl SoundReq -_08073EDC: - ldr r0, [r5, #0x30] - movs r1, #0x40 - ands r0, r1 - cmp r0, #0 - bne _08073EF4 - adds r0, r4, #0 - bl sub_08008AC6 - b _08073EFC - .align 2, 0 -_08073EF0: .4byte gPlayerState -_08073EF4: - adds r1, r5, #0 - adds r1, #0xa8 - movs r0, #0xd - strb r0, [r1] -_08073EFC: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08073F04 -sub_08073F04: @ 0x08073F04 - push {lr} - adds r3, r0, #0 - adds r3, #0x29 - ldrb r2, [r3] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #0x10 - orrs r1, r2 - strb r1, [r3] - ldrb r2, [r0, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r2 - strb r1, [r0, #0x18] - ldrb r1, [r0, #0xd] - adds r1, #1 - strb r1, [r0, #0xd] - movs r1, #0xa0 - lsls r1, r1, #0xa - str r1, [r0, #0x20] - movs r1, #0x80 - lsls r1, r1, #1 - strh r1, [r0, #0x24] - ldr r2, _08073F48 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x81 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r2, #0x30] - bl ResetPlayer - pop {pc} - .align 2, 0 -_08073F48: .4byte gPlayerState - - thumb_func_start sub_08073F4C -sub_08073F4C: @ 0x08073F4C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08073F84 @ =gArea - ldrh r3, [r0, #0x12] - ldrh r5, [r0, #0x14] - movs r0, #0x2e - ldrsh r2, [r4, r0] - cmp r2, r3 - bne _08073F66 - movs r1, #0x32 - ldrsh r0, [r4, r1] - cmp r0, r5 - beq _08073F88 -_08073F66: - 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] - adds r0, r4, #0 - bl sub_0806F69C - b _08073FC6 - .align 2, 0 -_08073F84: .4byte gArea -_08073F88: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #0x1e - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - adds r0, #0x80 - movs r1, #0x90 - lsls r1, r1, #3 - str r1, [r0] - adds r0, #4 - str r1, [r0] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - bl sub_08074018 - ldr r1, _08073FC8 @ =gPlayerState - ldr r0, _08073FCC @ =0x0000073C - strh r0, [r1, #8] -_08073FC6: - pop {r4, r5, pc} - .align 2, 0 -_08073FC8: .4byte gPlayerState -_08073FCC: .4byte 0x0000073C - - thumb_func_start sub_08073FD0 -sub_08073FD0: @ 0x08073FD0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08073FF8 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08074016 - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x1e - cmp r0, #0 - bne _08073FF8 - movs r0, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0x7c - bl SoundReq -_08073FF8: - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - ldr r0, [r4, #0x20] - cmp r0, #0 - bne _08074016 - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - movs r0, #0xb8 - lsls r0, r0, #1 - bl SoundReq -_08074016: - pop {r4, pc} - - thumb_func_start sub_08074018 -sub_08074018: @ 0x08074018 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x80 - ldr r0, [r1] - movs r3, #0x80 - lsls r3, r3, #1 - cmp r0, r3 - bls _0807402E - subs r0, #0x20 - str r0, [r1] -_0807402E: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - adds r2, r0, #0 - cmp r1, r3 - bls _08074042 - adds r0, r1, #0 - subs r0, #0x20 - str r0, [r2] - b _08074048 -_08074042: - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] -_08074048: - adds r0, r4, #0 - adds r0, #0x80 - ldr r1, [r0] - ldr r2, [r2] - adds r0, r4, #0 - movs r3, #0 - bl sub_0805EC9C - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - - thumb_func_start sub_08074060 -sub_08074060: @ 0x08074060 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x80 - lsls r1, r1, #6 - bl GravityUpdate - cmp r0, #0 - bne _080740D0 - ldr r0, _080740C4 @ =gPlayerHitbox - str r0, [r4, #0x48] - movs r3, #0x10 - movs r0, #0x10 - strb r0, [r4, #0x15] - movs r0, #4 - strb r0, [r4, #0x14] - movs r2, #0 - adds r0, #0xfc - strh r0, [r4, #0x24] - movs r0, #0x29 - adds r0, r0, r4 - mov ip, r0 - ldrb r1, [r0] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - mov r1, ip - strb r0, [r1] - ldrb r1, [r4, #0x18] - movs r0, #0x31 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r4, #0x18] - strb r2, [r4, #0xf] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldr r1, _080740C8 @ =gPlayerState - ldr r0, _080740CC @ =0x0000080C - strh r0, [r1, #8] - adds r0, r4, #0 - bl sub_0805EC60 - b _080740D6 - .align 2, 0 -_080740C4: .4byte gPlayerHitbox -_080740C8: .4byte gPlayerState -_080740CC: .4byte 0x0000080C -_080740D0: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_080740D6: - pop {r4, pc} - - thumb_func_start sub_080740D8 -sub_080740D8: @ 0x080740D8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _080740EA - ldrb r0, [r4, #0x15] - b _080740F0 -_080740EA: - ldrb r1, [r4, #0x15] - movs r0, #0x10 - eors r0, r1 -_080740F0: - cmp r0, #8 - beq _08074128 - cmp r0, #8 - bhi _080740FE - cmp r0, #0 - beq _08074168 - b _0807418C -_080740FE: - cmp r0, #0x10 - beq _08074148 - cmp r0, #0x18 - bne _0807418C - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, [r4, #0x48] - ldrb r0, [r2, #2] - subs r1, r1, r0 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - ldr r3, _08074124 @ =gRoomControls - ldrh r0, [r3, #6] - subs r6, r1, r0 - movs r1, #0x32 - ldrsh r0, [r4, r1] - b _08074182 - .align 2, 0 -_08074124: .4byte gRoomControls -_08074128: - ldr r2, [r4, #0x48] - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldrb r1, [r2, #2] - adds r0, r0, r1 - movs r1, #0 - ldrsb r1, [r2, r1] - adds r0, r0, r1 - ldr r3, _08074144 @ =gRoomControls - ldrh r1, [r3, #6] - subs r6, r0, r1 - movs r1, #0x32 - ldrsh r0, [r4, r1] - b _08074182 - .align 2, 0 -_08074144: .4byte gRoomControls -_08074148: - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, [r4, #0x48] - movs r0, #0 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - ldr r3, _08074164 @ =gRoomControls - ldrh r0, [r3, #6] - subs r6, r1, r0 - movs r1, #0x32 - ldrsh r0, [r4, r1] - ldrb r1, [r2, #5] - adds r0, r0, r1 - b _08074182 - .align 2, 0 -_08074164: .4byte gRoomControls -_08074168: - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, [r4, #0x48] - movs r0, #0 - ldrsb r0, [r2, r0] - adds r1, r1, r0 - ldr r3, _080741A4 @ =gRoomControls - ldrh r0, [r3, #6] - subs r6, r1, r0 - movs r1, #0x32 - ldrsh r0, [r4, r1] - ldrb r1, [r2, #5] - subs r0, r0, r1 -_08074182: - movs r1, #1 - ldrsb r1, [r2, r1] - adds r0, r0, r1 - ldrh r1, [r3, #8] - subs r5, r0, r1 -_0807418C: - ldr r2, _080741A8 @ =gUnk_080082DC - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_080086B4 - cmp r0, #0 - beq _080741AC - adds r0, r4, #0 - bl sub_0806F69C - b _080741B0 - .align 2, 0 -_080741A4: .4byte gRoomControls -_080741A8: .4byte gUnk_080082DC -_080741AC: - movs r0, #1 - strb r0, [r4, #0xf] -_080741B0: - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - bne _080741C2 - bl sub_0807921C -_080741C2: - pop {r4, r5, r6, pc} - - thumb_func_start sub_080741C4 -sub_080741C4: @ 0x080741C4 - push {lr} - ldr r0, _080741F0 @ =gPlayerState - ldrb r1, [r0, #2] - adds r2, r0, #0 - cmp r1, #0 - beq _080741D8 - movs r0, #7 - ands r0, r1 - cmp r0, #3 - bne _080741E0 -_080741D8: - ldr r0, _080741F4 @ =gPlayerEntity - ldr r0, [r0, #0x34] - cmp r0, #0 - beq _080741F8 -_080741E0: - movs r1, #0 - strb r1, [r2, #0x11] - adds r0, r2, #0 - adds r0, #0x37 - strb r1, [r0] - movs r0, #1 - b _080741FA - .align 2, 0 -_080741F0: .4byte gPlayerState -_080741F4: .4byte gPlayerEntity -_080741F8: - movs r0, #0 -_080741FA: - pop {pc} - - thumb_func_start nullsub_112 -nullsub_112: @ 0x080741FC - bx lr - .align 2, 0 - - thumb_func_start sub_08074200 -sub_08074200: @ 0x08074200 - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074226 - adds r0, r4, #0 - bl sub_08079C30 - cmp r0, #0 - beq _08074226 - ldrb r0, [r4, #0xc] - cmp r0, #3 - beq _08074226 - bl ResetPlayer - ldr r1, _08074228 @ =gPlayerState - movs r0, #3 - strb r0, [r1, #0xc] -_08074226: - pop {r4, pc} - .align 2, 0 -_08074228: .4byte gPlayerState - - thumb_func_start sub_0807422C -sub_0807422C: @ 0x0807422C - push {lr} - movs r1, #8 - movs r2, #0x18 - bl sub_08074244 - pop {pc} - - thumb_func_start sub_08074238 -sub_08074238: @ 0x08074238 - push {lr} - movs r1, #0 - movs r2, #0x10 - bl sub_08074244 - pop {pc} - - thumb_func_start sub_08074244 -sub_08074244: @ 0x08074244 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r6, r1, #0 - adds r7, r2, #0 - ldr r5, _0807428C @ =gPlayerState - ldrb r0, [r5, #0x12] - subs r0, #0x28 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bls _08074278 - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] - ldrb r2, [r4, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - orrs r0, r2 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0x19] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x19] -_08074278: - bl sub_080741C4 - cmp r0, #0 - bne _080742A6 - ldrb r0, [r5, #0x1e] - cmp r0, #0 - bne _08074290 - ldrb r0, [r5, #0xd] - b _08074294 - .align 2, 0 -_0807428C: .4byte gPlayerState -_08074290: - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 -_08074294: - cmp r6, r0 - bne _0807429C - cmp r7, r0 - beq _080742A6 -_0807429C: - ldr r1, _080742A8 @ =gPlayerState - adds r1, #0x80 - ldrh r0, [r1] - subs r0, #0x50 - strh r0, [r1] -_080742A6: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080742A8: .4byte gPlayerState - - thumb_func_start sub_080742AC -sub_080742AC: @ 0x080742AC - push {lr} - adds r2, r0, #0 - ldr r0, _080742E0 @ =gPlayerState - adds r1, r0, #0 - adds r1, #0x26 - ldrb r0, [r1] - cmp r0, #0 - beq _080742C0 - movs r0, #0 - strb r0, [r1] -_080742C0: - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r3] - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - pop {pc} - .align 2, 0 -_080742E0: .4byte gPlayerState - - thumb_func_start sub_080742E4 -sub_080742E4: @ 0x080742E4 - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _0807430E - ldr r2, _08074310 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0807430E - ldrb r0, [r2, #0x11] - cmp r0, #0xf - bne _0807430E - adds r0, r4, #0 - movs r1, #0xe - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent -_0807430E: - pop {r4, pc} - .align 2, 0 -_08074310: .4byte gPlayerState - - thumb_func_start sub_08074314 -sub_08074314: @ 0x08074314 - push {lr} - adds r2, r0, #0 - ldrh r1, [r2, #0x32] - movs r0, #0xf - ands r0, r1 - cmp r0, #0xd - bgt _08074330 - movs r0, #0xcc - lsls r0, r0, #7 - strh r0, [r2, #0x2a] - adds r0, r2, #0 - bl sub_080743A4 - b _08074336 -_08074330: - adds r0, r2, #0 - bl sub_0807A298 -_08074336: - pop {pc} - - thumb_func_start sub_08074338 -sub_08074338: @ 0x08074338 - push {lr} - adds r2, r0, #0 - ldrh r1, [r2, #0x32] - movs r0, #0xf - ands r0, r1 - cmp r0, #1 - ble _08074354 - movs r0, #0xcc - lsls r0, r0, #7 - strh r0, [r2, #0x2a] - adds r0, r2, #0 - bl sub_080743A4 - b _0807435A -_08074354: - adds r0, r2, #0 - bl sub_0807A298 -_0807435A: - pop {pc} - - thumb_func_start sub_0807435C -sub_0807435C: @ 0x0807435C - push {lr} - adds r2, r0, #0 - ldrh r1, [r2, #0x2e] - movs r0, #0xf - ands r0, r1 - cmp r0, #0xb - bgt _08074376 - movs r0, #0x66 - strh r0, [r2, #0x2a] - adds r0, r2, #0 - bl sub_080743A4 - b _0807437C -_08074376: - adds r0, r2, #0 - bl sub_0807A298 -_0807437C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08074380 -sub_08074380: @ 0x08074380 - push {lr} - adds r2, r0, #0 - ldrh r1, [r2, #0x2e] - movs r0, #0xf - ands r0, r1 - cmp r0, #4 - ble _0807439A - movs r0, #0x66 - strh r0, [r2, #0x2a] - adds r0, r2, #0 - bl sub_080743A4 - b _080743A0 -_0807439A: - adds r0, r2, #0 - bl sub_0807A298 -_080743A0: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080743A4 -sub_080743A4: @ 0x080743A4 - push {lr} - ldr r3, _080743D0 @ =gPlayerState - ldr r1, [r3, #0x30] - movs r2, #0x40 - orrs r1, r2 - str r1, [r3, #0x30] - movs r3, #0 - movs r1, #0x80 - strb r1, [r0, #0xb] - ldrb r2, [r0, #0x18] - subs r1, #0x84 - ands r1, r2 - strb r1, [r0, #0x18] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - adds r0, #0x42 - strb r3, [r0] - bl ResetPlayer - pop {pc} - .align 2, 0 -_080743D0: .4byte gPlayerState - - thumb_func_start sub_080743D4 -sub_080743D4: @ 0x080743D4 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074416 - adds r0, r5, #0 - bl sub_08079C30 - cmp r0, #0 - beq _08074416 - adds r0, r5, #0 - bl sub_0807AABC - adds r0, r5, #0 - bl sub_08074808 - movs r0, #0x24 - ldrsh r4, [r5, r0] - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r5, #0x24] - movs r0, #0x10 - strb r0, [r5, #0x15] - ldr r2, _08074418 @ =gPlayerState - ldrb r1, [r2, #0xa] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0xa] - adds r0, r5, #0 - bl sub_0806F69C - strh r4, [r5, #0x24] -_08074416: - pop {r4, r5, pc} - .align 2, 0 -_08074418: .4byte gPlayerState - - thumb_func_start sub_0807441C -sub_0807441C: @ 0x0807441C - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldr r0, _08074440 @ =gPlayerState - adds r0, #0xa0 - ldrb r0, [r0] - cmp r0, #4 - bne _08074502 - ldr r6, _08074444 @ =gSave - adds r4, r6, #0 - adds r4, #0xb4 - ldrb r0, [r4] - bl ItemIsSword - cmp r0, #0 - beq _08074448 - ldrb r0, [r4] - b _0807444E - .align 2, 0 -_08074440: .4byte gPlayerState -_08074444: .4byte gSave -_08074448: - adds r0, r6, #0 - adds r0, #0xb5 - ldrb r0, [r0] -_0807444E: - subs r0, #1 - cmp r0, #5 - bhi _0807448A - lsls r0, r0, #2 - ldr r1, _08074460 @ =_08074464 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08074460: .4byte _08074464 -_08074464: @ jump table - .4byte _0807447C @ case 0 - .4byte _0807447C @ case 1 - .4byte _08074480 @ case 2 - .4byte _08074484 @ case 3 - .4byte _0807448A @ case 4 - .4byte _08074488 @ case 5 -_0807447C: - movs r5, #0 - b _0807448A -_08074480: - movs r5, #1 - b _0807448A -_08074484: - movs r5, #2 - b _0807448A -_08074488: - movs r5, #3 -_0807448A: - movs r4, #0 - cmp r4, r5 - bhs _080744A6 - ldr r1, _08074494 @ =gUnk_03004040 - b _080744A0 - .align 2, 0 -_08074494: .4byte gUnk_03004040 -_08074498: - adds r1, #4 - adds r4, #1 - cmp r4, r5 - bhs _080744A6 -_080744A0: - ldr r0, [r1] - cmp r0, #0 - bne _08074498 -_080744A6: - cmp r5, r4 - bls _080744D4 - adds r0, r7, #0 - movs r1, #0x10 - adds r2, r4, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r3, r0, #0 - ldr r1, _080744D0 @ =gUnk_03004040 - lsls r0, r4, #2 - adds r0, r0, r1 - str r3, [r0] - cmp r3, #0 - beq _08074502 - adds r0, r7, #0 - adds r1, r3, #0 - bl CopyPosition - b _08074502 - .align 2, 0 -_080744D0: .4byte gUnk_03004040 -_080744D4: - ldr r2, _08074504 @ =gPlayerState - ldrb r1, [r2, #0x1b] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1b] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xf - orrs r0, r1 - str r0, [r2, #0x30] - ldr r0, [r7, #0x2c] - ldr r2, _08074508 @ =0xFFF00000 - ands r0, r2 - movs r1, #0x80 - lsls r1, r1, #0xc - orrs r0, r1 - str r0, [r7, #0x2c] - ldr r0, [r7, #0x30] - ands r0, r2 - orrs r0, r1 - str r0, [r7, #0x30] - bl sub_08077AEC -_08074502: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08074504: .4byte gPlayerState -_08074508: .4byte 0xFFF00000 - - thumb_func_start sub_0807450C -sub_0807450C: @ 0x0807450C - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _0807457A - ldr r7, _0807457C @ =gPlayerState - ldrb r0, [r7, #0x14] - cmp r0, #0 - bne _0807457A - adds r4, r6, #0 - adds r4, #0x3d - movs r0, #0 - ldrsb r0, [r4, r0] - cmp r0, #0 - bne _08074568 - movs r0, #2 - rsbs r0, r0, #0 - bl ModHealth - movs r0, #0x7a - bl SoundReq - movs r0, #0x18 - strb r0, [r4] - adds r1, r6, #0 - adds r1, #0x42 - movs r0, #4 - strb r0, [r1] - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldr r5, _08074580 @ =0x0000FFF0 - adds r0, r2, #0 - ands r0, r5 - movs r4, #8 - orrs r0, r4 - movs r1, #0x32 - ldrsh r3, [r6, r1] - adds r1, r3, #0 - ands r1, r5 - orrs r1, r4 - bl sub_080045D4 - adds r1, r6, #0 - adds r1, #0x3e - strb r0, [r1] -_08074568: - ldr r0, [r7, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0807457A - adds r0, r6, #0 - movs r1, #7 - bl sub_08008790 -_0807457A: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807457C: .4byte gPlayerState -_08074580: .4byte 0x0000FFF0 - - thumb_func_start sub_08074584 -sub_08074584: @ 0x08074584 - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _080745AC - ldr r0, _080745B0 @ =gPlayerState - adds r0, #0x35 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080745A8 - adds r0, r4, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - beq _080745AC -_080745A8: - bl sub_08078F60 -_080745AC: - pop {r4, pc} - .align 2, 0 -_080745B0: .4byte gPlayerState - - thumb_func_start sub_080745B4 -sub_080745B4: @ 0x080745B4 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074636 - ldr r0, _080745E4 @ =gPlayerState - mov ip, r0 - ldr r3, [r0, #0x30] - movs r0, #0x80 - ands r3, r0 - cmp r3, #0 - beq _080745E8 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0xb9 - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_0807479C - b _08074636 - .align 2, 0 -_080745E4: .4byte gPlayerState -_080745E8: - mov r5, ip - adds r5, #0x26 - ldrb r0, [r5] - cmp r0, #0 - beq _08074618 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - subs r2, #0x13 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - strb r3, [r5] -_08074618: - mov r0, ip - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0xf0 - lsls r0, r0, #4 - ands r0, r1 - cmp r0, #0 - bne _08074630 - mov r1, ip - ldrb r0, [r1, #0x11] - cmp r0, #1 - bne _08074636 -_08074630: - movs r0, #0x83 - bl SoundReq -_08074636: - pop {r4, r5, pc} - - thumb_func_start sub_08074638 -sub_08074638: @ 0x08074638 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08074674 @ =gPlayerState - adds r5, r0, #0 - adds r5, #0x26 - ldrb r0, [r5] - cmp r0, #0 - beq _08074670 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - movs r3, #0 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - subs r2, #0x13 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - strb r3, [r5] -_08074670: - pop {r4, r5, pc} - .align 2, 0 -_08074674: .4byte gPlayerState - - thumb_func_start sub_08074678 -sub_08074678: @ 0x08074678 - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - beq _08074690 - ldr r0, _0807468C @ =gPlayerState - movs r1, #0 - strb r1, [r0, #0x11] - b _080746CE - .align 2, 0 -_0807468C: .4byte gPlayerState -_08074690: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _0807476C - adds r0, r4, #0 - bl sub_08079C30 - adds r1, r0, #0 - cmp r1, #0 - bne _080746B0 - ldr r0, _080746AC @ =gPlayerState - strb r1, [r0, #0x11] - b _080746CE - .align 2, 0 -_080746AC: .4byte gPlayerState -_080746B0: - ldr r3, _080746D4 @ =gPlayerState - ldr r1, [r3, #0x30] - movs r0, #0x80 - ands r1, r0 - cmp r1, #0 - bne _0807476C - ldrb r2, [r3, #0x1e] - cmp r2, #0 - beq _080746D8 - movs r0, #0x40 - ands r0, r2 - cmp r0, #0 - beq _080746DC - strb r1, [r3, #0x11] - adds r0, r3, #0 -_080746CE: - adds r0, #0x37 - strb r1, [r0] - b _08074792 - .align 2, 0 -_080746D4: .4byte gPlayerState -_080746D8: - bl sub_08077B20 -_080746DC: - ldr r1, _08074700 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x37 - ldrb r0, [r0] - cmp r0, #1 - bne _08074704 - adds r0, r4, #0 - movs r1, #0x70 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r0, r4, #0 - movs r1, #0x52 - movs r2, #0 - bl CreateFx - b _08074714 - .align 2, 0 -_08074700: .4byte gPlayerState -_08074704: - adds r0, r1, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0xf0 - lsls r0, r0, #4 - ands r0, r1 - cmp r0, #0 - beq _08074720 -_08074714: - ldr r0, _0807471C @ =0x00000161 - bl SoundReq - b _08074732 - .align 2, 0 -_0807471C: .4byte 0x00000161 -_08074720: - ldr r0, _08074760 @ =gScreenTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _08074732 - ldr r0, _08074764 @ =0x00000161 - bl SoundReq -_08074732: - ldr r2, _08074768 @ =gPlayerState - adds r1, r2, #0 - adds r1, #0x80 - ldrh r0, [r1] - subs r0, #0xf0 - strh r0, [r1] - adds r1, #0x28 - movs r0, #0x1b - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x37 - ldrb r0, [r0] - lsls r3, r0, #0x18 - lsrs r0, r3, #0x18 - cmp r0, #0xef - bhi _0807476C - subs r1, #0x69 - lsrs r0, r3, #0x1d - adds r0, #4 - ldrb r2, [r1] - adds r0, r0, r2 - strb r0, [r1] - b _08074792 - .align 2, 0 -_08074760: .4byte gScreenTransition -_08074764: .4byte 0x00000161 -_08074768: .4byte gPlayerState -_0807476C: - ldr r2, _08074794 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _08074798 @ =0xFFFBFFFF - ands r0, r1 - str r0, [r2, #0x30] - adds r0, r4, #0 - movs r1, #0x52 - movs r2, #0 - bl CreateFx - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0x20 - strb r0, [r1] - subs r0, #0x24 - bl ModHealth - bl RespawnPlayer -_08074792: - pop {r4, pc} - .align 2, 0 -_08074794: .4byte gPlayerState -_08074798: .4byte 0xFFFBFFFF - - thumb_func_start sub_0807479C -sub_0807479C: @ 0x0807479C - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - adds r2, r0, #0 - cmp r2, #0 - bne _08074804 - ldr r1, _080747C0 @ =gPlayerState - ldrb r0, [r1, #0x14] - adds r3, r1, #0 - cmp r0, #0 - bne _080747C4 - adds r1, #0x3f - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - b _080747E6 - .align 2, 0 -_080747C0: .4byte gPlayerState -_080747C4: - adds r0, r3, #0 - adds r0, #0x26 - strb r2, [r0] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - adds r2, #0x13 - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] -_080747E6: - adds r0, r3, #0 - adds r0, #0x26 - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - bne _080747FE - adds r0, r4, #0 - bl sub_08079C30 - cmp r0, #0 - beq _08074804 -_080747FE: - adds r0, r4, #0 - bl sub_08074808 -_08074804: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08074808 -sub_08074808: @ 0x08074808 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - bl sub_08077AEC - movs r0, #0x46 - bl GetInventoryValue - adds r3, r0, #0 - cmp r3, #1 - bne _080748B8 - ldr r1, _08074838 @ =gPlayerState - adds r2, r1, #0 - adds r2, #0x26 - ldrb r0, [r2] - cmp r0, #0 - bne _0807486C - ldr r0, [r1, #0x30] - movs r1, #0x80 - lsls r1, r1, #9 - ands r0, r1 - cmp r0, #0 - beq _0807483C - strb r3, [r2] - b _08074840 - .align 2, 0 -_08074838: .4byte gPlayerState -_0807483C: - movs r0, #8 - strb r0, [r2] -_08074840: - movs r1, #0 - movs r0, #0 - strh r0, [r6, #0x24] - ldr r0, _080748AC @ =gPlayerState - adds r2, r0, #0 - adds r2, #0x89 - strb r1, [r2] - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08074862 - adds r0, r6, #0 - movs r1, #0xb - movs r2, #0 - bl CreateFx -_08074862: - ldr r0, _080748B0 @ =0x000001A5 - bl SoundReq - bl ResetPlayer -_0807486C: - ldr r5, _080748AC @ =gPlayerState - adds r4, r5, #0 - adds r4, #0x26 - ldrb r1, [r4] - movs r7, #0xf - adds r0, r7, #0 - ands r0, r1 - cmp r0, #1 - beq _0807488A - adds r0, r6, #0 - bl sub_08079744 - ldrb r0, [r4] - subs r0, #1 - strb r0, [r4] -_0807488A: - ldr r0, [r5, #0x30] - ldr r1, _080748B4 @ =0xFFFFF3FF - ands r0, r1 - str r0, [r5, #0x30] - movs r1, #0x80 - lsls r1, r1, #7 - ands r0, r1 - cmp r0, #0 - beq _080748BE - adds r1, r6, #0 - adds r1, #0x7a - ldrh r0, [r1] - cmp r0, #0xe - bhi _080748BE - strh r7, [r1] - b _080748BE - .align 2, 0 -_080748AC: .4byte gPlayerState -_080748B0: .4byte 0x000001A5 -_080748B4: .4byte 0xFFFFF3FF -_080748B8: - ldr r1, _080748C0 @ =gPlayerState - movs r0, #0x14 - strb r0, [r1, #0xc] -_080748BE: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080748C0: .4byte gPlayerState - - thumb_func_start sub_080748C4 -sub_080748C4: @ 0x080748C4 - ldr r1, _080748D0 @ =gPlayerState - adds r1, #0x3f - ldrb r0, [r1] - subs r0, #2 - strb r0, [r1] - bx lr - .align 2, 0 -_080748D0: .4byte gPlayerState - - thumb_func_start sub_080748D4 -sub_080748D4: @ 0x080748D4 - push {lr} - bl sub_080741C4 - pop {pc} - - thumb_func_start sub_080748DC -sub_080748DC: @ 0x080748DC - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074910 - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - beq _0807490A - ldrh r0, [r4, #0x32] - adds r0, #0xc - strh r0, [r4, #0x32] - ldr r0, _08074914 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0807490A - ldrh r0, [r4, #0x36] - subs r0, #0xc - strh r0, [r4, #0x36] -_0807490A: - adds r0, r4, #0 - bl sub_0807AABC -_08074910: - pop {r4, pc} - .align 2, 0 -_08074914: .4byte gPlayerState - - thumb_func_start sub_08074918 -sub_08074918: @ 0x08074918 - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074934 - adds r0, r4, #0 - bl sub_08079C30 - cmp r0, #0 - beq _08074934 - ldr r1, _08074938 @ =gPlayerState - movs r0, #0x11 - strb r0, [r1, #0xc] -_08074934: - pop {r4, pc} - .align 2, 0 -_08074938: .4byte gPlayerState - - thumb_func_start sub_0807493C -sub_0807493C: @ 0x0807493C - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x44 - bl GetInventoryValue - cmp r0, #1 - bne _08074952 - adds r0, r4, #0 - bl sub_0807496C - b _08074966 -_08074952: - ldrh r1, [r4, #0x32] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0xf - movs r2, #0 - orrs r0, r1 - strh r0, [r4, #0x32] - ldr r0, _08074968 @ =gPlayerState - strb r2, [r0, #0x12] -_08074966: - pop {r4, pc} - .align 2, 0 -_08074968: .4byte gPlayerState - - thumb_func_start sub_0807496C -sub_0807496C: @ 0x0807496C - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - adds r3, r0, #0 - cmp r3, #0 - bne _080749A2 - ldr r0, _080749A4 @ =gPlayerState - strb r3, [r0, #2] - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - orrs r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r4, #0x1b] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x1b] - strb r3, [r4, #0x14] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] - bl ResetPlayer -_080749A2: - pop {r4, pc} - .align 2, 0 -_080749A4: .4byte gPlayerState - - thumb_func_start sub_080749A8 -sub_080749A8: @ 0x080749A8 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x44 - bl GetInventoryValue - cmp r0, #1 - bne _080749BE - adds r0, r4, #0 - bl sub_080749D4 - b _080749CE -_080749BE: - ldrh r1, [r4, #0x32] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0 - strh r0, [r4, #0x32] - ldr r0, _080749D0 @ =gPlayerState - strb r1, [r0, #0x12] -_080749CE: - pop {r4, pc} - .align 2, 0 -_080749D0: .4byte gPlayerState - - thumb_func_start sub_080749D4 -sub_080749D4: @ 0x080749D4 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_080741C4 - adds r3, r0, #0 - cmp r3, #0 - bne _08074A40 - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - orrs r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r4, #0x1b] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x1b] - strb r3, [r4, #0x14] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] - ldr r5, _08074A2C @ =gPlayerState - adds r0, r5, #0 - adds r0, #0x26 - strb r3, [r0] - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - ldrh r1, [r4, #0x32] - movs r0, #0xf - ands r0, r1 - cmp r0, #7 - bgt _08074A34 - ldr r0, _08074A30 @ =0x000002D3 - strh r0, [r5, #8] - movs r0, #0x10 - strb r0, [r4, #0x15] - b _08074A3C - .align 2, 0 -_08074A2C: .4byte gPlayerState -_08074A30: .4byte 0x000002D3 -_08074A34: - movs r1, #0 - ldr r0, _08074A44 @ =0x000002D6 - strh r0, [r5, #8] - strb r1, [r4, #0x15] -_08074A3C: - bl ResetPlayer -_08074A40: - pop {r4, r5, pc} - .align 2, 0 -_08074A44: .4byte 0x000002D6 - - thumb_func_start sub_08074A48 -sub_08074A48: @ 0x08074A48 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08074A90 @ =gPlayerState - adds r0, r5, #0 - adds r0, #0x26 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08074A86 - ldr r0, _08074A94 @ =gPlayerEntity - movs r1, #0 - movs r2, #0x54 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _08074A86 - movs r0, #1 - strb r0, [r1, #0xe] - adds r0, r1, #0 - bl UpdateSpriteForCollisionLayer - ldrh r1, [r5, #0x22] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r2, [r0] - movs r0, #0x39 - bl sub_08000152 -_08074A86: - adds r0, r4, #0 - bl sub_0807479C - pop {r4, r5, pc} - .align 2, 0 -_08074A90: .4byte gPlayerState -_08074A94: .4byte gPlayerEntity - - thumb_func_start nullsub_504 -nullsub_504: @ 0x08074A98 - bx lr - .align 2, 0 - - thumb_func_start sub_08074A9C -sub_08074A9C: @ 0x08074A9C - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074AF0 - ldr r2, _08074AE0 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x80 - ldrh r1, [r0] - subs r1, #0x80 - strh r1, [r0] - ldrb r0, [r2, #0x11] - cmp r0, #1 - beq _08074ACA - adds r0, r2, #0 - adds r0, #0x92 - ldrh r1, [r0] - movs r0, #0xf0 - lsls r0, r0, #4 - ands r0, r1 - cmp r0, #0 - beq _08074AF0 -_08074ACA: - ldrb r0, [r2, #0x12] - cmp r0, #0x25 - bne _08074AE4 - adds r0, r4, #0 - movs r1, #0x21 - movs r2, #1 - movs r3, #0 - bl CreateObjectWithParent - b _08074AF0 - .align 2, 0 -_08074AE0: .4byte gPlayerState -_08074AE4: - adds r0, r4, #0 - movs r1, #0x21 - movs r2, #1 - movs r3, #1 - bl CreateObjectWithParent -_08074AF0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08074AF4 -sub_08074AF4: @ 0x08074AF4 - push {lr} - adds r3, r0, #0 - ldr r1, _08074B04 @ =gPlayerState - ldrb r0, [r1, #0x1e] - cmp r0, #0 - bne _08074B08 - ldrb r2, [r1, #0xd] - b _08074B0C - .align 2, 0 -_08074B04: .4byte gPlayerState -_08074B08: - ldrb r0, [r3, #0x14] - lsls r2, r0, #2 -_08074B0C: - adds r0, r3, #0 - adds r1, r2, #0 - bl sub_08074244 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08074B18 -sub_08074B18: @ 0x08074B18 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _08074B40 @ =gPlayerState - ldrb r0, [r4, #0x14] - cmp r0, #0 - bne _08074B48 - bl sub_080741C4 - cmp r0, #0 - bne _08074B48 - ldr r0, [r4, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08074B44 - adds r0, r5, #0 - bl sub_08074200 - b _08074B48 - .align 2, 0 -_08074B40: .4byte gPlayerState -_08074B44: - movs r0, #0x1a - strb r0, [r4, #0xc] -_08074B48: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08074B4C -sub_08074B4C: @ 0x08074B4C - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074B6E - ldr r0, _08074B70 @ =gPlayerState - ldr r1, [r0, #0x30] - movs r0, #0x80 - ands r1, r0 - cmp r1, #0 - bne _08074B6E - strb r1, [r4, #0x14] - strb r1, [r4, #0x15] - adds r0, r4, #0 - bl sub_08074BF8 -_08074B6E: - pop {r4, pc} - .align 2, 0 -_08074B70: .4byte gPlayerState - - thumb_func_start sub_08074B74 -sub_08074B74: @ 0x08074B74 - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074B9A - ldr r0, _08074B9C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08074B9A - movs r0, #4 - strb r0, [r4, #0x14] - movs r0, #0x10 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_08074BF8 -_08074B9A: - pop {r4, pc} - .align 2, 0 -_08074B9C: .4byte gPlayerState - - thumb_func_start sub_08074BA0 -sub_08074BA0: @ 0x08074BA0 - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074BC6 - ldr r0, _08074BC8 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08074BC6 - movs r0, #6 - strb r0, [r4, #0x14] - movs r0, #0x18 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_08074BF8 -_08074BC6: - pop {r4, pc} - .align 2, 0 -_08074BC8: .4byte gPlayerState - - thumb_func_start sub_08074BCC -sub_08074BCC: @ 0x08074BCC - push {r4, lr} - adds r4, r0, #0 - bl sub_080741C4 - cmp r0, #0 - bne _08074BF2 - ldr r0, _08074BF4 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08074BF2 - movs r0, #2 - strb r0, [r4, #0x14] - movs r0, #8 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_08074BF8 -_08074BF2: - pop {r4, pc} - .align 2, 0 -_08074BF4: .4byte gPlayerState - - thumb_func_start sub_08074BF8 -sub_08074BF8: @ 0x08074BF8 - push {r4, lr} - adds r4, r0, #0 - bl ResetPlayer - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - movs r0, #0xa0 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - ldr r1, _08074C40 @ =gPlayerState - ldr r0, [r1, #0x30] - movs r2, #0x80 - lsls r2, r2, #0x12 - orrs r0, r2 - str r0, [r1, #0x30] - ldrb r2, [r1, #0xa] - movs r0, #0x80 - orrs r2, r0 - strb r2, [r1, #0xa] - ldrb r2, [r1, #0x1a] - orrs r0, r2 - strb r0, [r1, #0x1a] - adds r1, #0x27 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0806F69C - pop {r4, pc} - .align 2, 0 -_08074C40: .4byte gPlayerState - - thumb_func_start sub_08074C44 -sub_08074C44: @ 0x08074C44 - push {r4, lr} - adds r4, r0, #0 - bl sub_08078EFC - cmp r0, #0 - bne _08074C60 - ldr r0, _08074C64 @ =gUnk_0811BC88 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_08074C60: - pop {r4, pc} - .align 2, 0 -_08074C64: .4byte gUnk_0811BC88 - - thumb_func_start sub_08074C68 -sub_08074C68: @ 0x08074C68 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x68 - movs r2, #0 - strb r2, [r6] - ldr r5, _08074CA0 @ =gPlayerState - adds r0, r5, #0 - adds r0, #0x38 - ldrb r3, [r0] - cmp r3, #1 - beq _08074CA8 - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - ldr r0, _08074CA4 @ =gPlayerScriptExecutionContext - cmp r1, r0 - bne _08074CF2 - movs r0, #1 - strb r0, [r4, #0xd] - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - bl sub_08074CF8 - b _08074CF2 - .align 2, 0 -_08074CA0: .4byte gPlayerState -_08074CA4: .4byte gPlayerScriptExecutionContext -_08074CA8: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - strb r2, [r4, #0x14] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - movs r0, #2 - strb r0, [r4, #0xd] - strb r3, [r6] - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r5, #0 - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _08074CE4 - ldr r0, _08074CE0 @ =0x0000073A - b _08074CE6 - .align 2, 0 -_08074CE0: .4byte 0x0000073A -_08074CE4: - ldr r0, _08074CF4 @ =0x00000736 -_08074CE6: - strh r0, [r5, #8] - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl DoFade -_08074CF2: - pop {r4, r5, r6, pc} - .align 2, 0 -_08074CF4: .4byte 0x00000736 - - thumb_func_start sub_08074CF8 -sub_08074CF8: @ 0x08074CF8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r6, [r5, #0x14] - adds r4, r5, #0 - adds r4, #0x84 - ldr r1, [r4] - bl ExecuteScript - ldr r1, [r4] - adds r0, r5, #0 - bl sub_08074D34 - adds r0, r5, #0 - adds r0, #0x82 - ldrh r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08074D20 - strb r6, [r5, #0x14] -_08074D20: - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r5, #0 - bl GravityUpdate - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08074D34 -sub_08074D34: @ 0x08074D34 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - adds r6, r1, #0 - ldr r0, [r6, #8] - cmp r0, #0 - bne _08074D46 - b _08074EF8 -_08074D46: - movs r7, #0x80 - lsls r7, r7, #1 - adds r5, r4, #0 - adds r5, #0x82 -_08074D4E: - ldr r1, [r6, #8] - mvns r0, r1 - adds r2, r0, #1 - ands r2, r1 - eors r1, r2 - str r1, [r6, #8] - cmp r2, r7 - bne _08074D60 - b _08074E82 -_08074D60: - cmp r2, r7 - bhi _08074D90 - cmp r2, #8 - beq _08074E2C - cmp r2, #8 - bhi _08074D7C - cmp r2, #2 - beq _08074E08 - cmp r2, #2 - bls _08074D76 - b _08074EF0 -_08074D76: - cmp r2, #1 - beq _08074DEC - b _08074EF0 -_08074D7C: - cmp r2, #0x20 - beq _08074E62 - cmp r2, #0x20 - bhi _08074D8A - cmp r2, #0x10 - beq _08074E54 - b _08074EF0 -_08074D8A: - cmp r2, #0x80 - beq _08074E70 - b _08074EF0 -_08074D90: - movs r0, #0x80 - lsls r0, r0, #7 - cmp r2, r0 - bne _08074D9A - b _08074EAE -_08074D9A: - cmp r2, r0 - bhi _08074DBE - movs r0, #0x80 - lsls r0, r0, #5 - cmp r2, r0 - beq _08074E96 - cmp r2, r0 - bhi _08074DB4 - movs r0, #0x80 - lsls r0, r0, #2 - cmp r2, r0 - beq _08074E90 - b _08074EF0 -_08074DB4: - movs r0, #0x80 - lsls r0, r0, #6 - cmp r2, r0 - beq _08074EA8 - b _08074EF0 -_08074DBE: - movs r0, #0x80 - lsls r0, r0, #0xa - cmp r2, r0 - bne _08074DC8 - b _08074EBE -_08074DC8: - cmp r2, r0 - bhi _08074DD6 - movs r0, #0x80 - lsls r0, r0, #8 - cmp r2, r0 - beq _08074EB4 - b _08074EF0 -_08074DD6: - movs r0, #0x80 - lsls r0, r0, #0xd - cmp r2, r0 - bne _08074DE0 - b _08074ED8 -_08074DE0: - movs r0, #0x80 - lsls r0, r0, #0xe - cmp r2, r0 - bne _08074DEA - b _08074EE4 -_08074DEA: - b _08074EF0 -_08074DEC: - ldr r2, _08074E00 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08074E04 - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r2, #8] - b _08074EF0 - .align 2, 0 -_08074E00: .4byte gPlayerState -_08074E04: - strh r7, [r2, #8] - b _08074EF0 -_08074E08: - ldr r2, _08074E1C @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08074E24 - ldr r0, _08074E20 @ =0x00000404 - strh r0, [r2, #8] - b _08074EF0 - .align 2, 0 -_08074E1C: .4byte gPlayerState -_08074E20: .4byte 0x00000404 -_08074E24: - movs r0, #0x82 - lsls r0, r0, #1 - strh r0, [r2, #8] - b _08074EF0 -_08074E2C: - ldr r1, _08074E3C @ =gPlayerState - ldr r0, [r1, #0x30] - ands r0, r2 - cmp r0, #0 - beq _08074E44 - ldr r0, _08074E40 @ =0x0000041C - b _08074E46 - .align 2, 0 -_08074E3C: .4byte gPlayerState -_08074E40: .4byte 0x0000041C -_08074E44: - ldr r0, _08074E50 @ =0x0000080C -_08074E46: - strh r0, [r1, #8] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r4, #0x20] - b _08074EF0 - .align 2, 0 -_08074E50: .4byte 0x0000080C -_08074E54: - adds r0, r4, #0 - movs r1, #8 - movs r2, #0x18 - rsbs r2, r2, #0 - bl CreateSpeechBubbleExclamationMark - b _08074EF0 -_08074E62: - adds r0, r4, #0 - movs r1, #8 - movs r2, #0x18 - rsbs r2, r2, #0 - bl CreateSpeechBubbleQuestionMark - b _08074EF0 -_08074E70: - ldrb r0, [r4, #0x18] - movs r2, #4 - rsbs r2, r2, #0 - adds r1, r2, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - b _08074EF0 -_08074E82: - ldrb r0, [r4, #0x18] - movs r3, #4 - rsbs r3, r3, #0 - adds r1, r3, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _08074EF0 -_08074E90: - movs r0, #0 - strh r0, [r5] - b _08074EF0 -_08074E96: - ldrh r0, [r5] - ldr r2, _08074EA4 @ =0x0000FFFE - adds r1, r2, #0 - ands r0, r1 - strh r0, [r5] - b _08074EF0 - .align 2, 0 -_08074EA4: .4byte 0x0000FFFE -_08074EA8: - ldrh r0, [r5] - movs r1, #1 - b _08074EB8 -_08074EAE: - ldrh r0, [r5] - movs r1, #8 - b _08074EB8 -_08074EB4: - ldrh r0, [r5] - movs r1, #4 -_08074EB8: - orrs r0, r1 - strh r0, [r5] - b _08074EF0 -_08074EBE: - ldrb r2, [r4, #0x18] - lsls r0, r2, #0x19 - lsrs r0, r0, #0x1f - movs r1, #1 - eors r0, r1 - lsls r0, r0, #6 - movs r3, #0x41 - rsbs r3, r3, #0 - adds r1, r3, #0 - ands r2, r1 - orrs r2, r0 - strb r2, [r4, #0x18] - b _08074EF0 -_08074ED8: - movs r1, #2 - strb r1, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x68 - strb r1, [r0] - b _08074EF0 -_08074EE4: - movs r0, #0 - movs r1, #3 - strb r1, [r4, #0xd] - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] -_08074EF0: - ldr r0, [r6, #8] - cmp r0, #0 - beq _08074EF8 - b _08074D4E -_08074EF8: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08074F00 -sub_08074F00: @ 0x08074F00 - push {lr} - ldr r2, _08074F18 @ =gUnk_0811BC98 - adds r1, r0, #0 - adds r1, #0x68 - ldrb r1, [r1] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08074F18: .4byte gUnk_0811BC98 - - thumb_func_start sub_08074F1C -sub_08074F1C: @ 0x08074F1C - adds r2, r0, #0 - adds r2, #0x68 - movs r3, #0 - movs r1, #1 - strb r1, [r2] - strb r3, [r0, #0x14] - bx lr - .align 2, 0 - - thumb_func_start sub_08074F2C -sub_08074F2C: @ 0x08074F2C - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x84 - ldr r1, [r5] - bl ExecuteScript - ldr r1, [r5] - adds r0, r4, #0 - bl sub_08074D34 - pop {r4, r5, pc} - - thumb_func_start sub_08074F44 -sub_08074F44: @ 0x08074F44 - push {lr} - adds r0, #0x68 - ldrb r1, [r0] - adds r1, #1 - strb r1, [r0] - ldr r0, _08074F74 @ =gPlayerEntity - ldr r0, [r0, #0x6c] - cmp r0, #0 - beq _08074F5A - bl DeleteEntity -_08074F5A: - ldr r2, _08074F78 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _08074F80 - ldr r0, _08074F7C @ =0x0000073B - strh r0, [r2, #8] - ldr r0, [r2, #0x30] - movs r1, #8 - orrs r0, r1 - str r0, [r2, #0x30] - b _08074F84 - .align 2, 0 -_08074F74: .4byte gPlayerEntity -_08074F78: .4byte gPlayerState -_08074F7C: .4byte 0x0000073B -_08074F80: - ldr r0, _08074F88 @ =0x00000737 - strh r0, [r2, #8] -_08074F84: - pop {pc} - .align 2, 0 -_08074F88: .4byte 0x00000737 - - thumb_func_start sub_08074F8C -sub_08074F8C: @ 0x08074F8C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r3, r4, #0 - adds r3, #0x5a - ldrb r0, [r3] - cmp r0, #1 - bne _08074FAC - movs r0, #0 - strb r0, [r3] - ldr r2, _08074FDC @ =gActiveScriptInfo - ldr r0, [r2] - movs r1, #4 - orrs r0, r1 - str r0, [r2] -_08074FAC: - ldrb r1, [r3] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08074FEA - adds r1, r4, #0 - adds r1, #0x68 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - movs r0, #8 - strb r0, [r4, #0xe] - movs r0, #4 - strb r0, [r4, #0x14] - ldr r1, _08074FE0 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _08074FE4 - movs r0, #0x80 - lsls r0, r0, #3 - b _08074FE8 - .align 2, 0 -_08074FDC: .4byte gActiveScriptInfo -_08074FE0: .4byte gPlayerState -_08074FE4: - movs r0, #0x80 - lsls r0, r0, #1 -_08074FE8: - strh r0, [r1, #8] -_08074FEA: - pop {r4, pc} - - thumb_func_start sub_08074FEC -sub_08074FEC: @ 0x08074FEC - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08075016 - adds r1, r4, #0 - adds r1, #0x68 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - movs r0, #4 - strb r0, [r4, #0xe] - ldr r0, _08075018 @ =gPlayerState - adds r0, #0x3a - ldrb r0, [r0] - strb r0, [r4, #0x14] -_08075016: - pop {r4, pc} - .align 2, 0 -_08075018: .4byte gPlayerState - - thumb_func_start sub_0807501C -sub_0807501C: @ 0x0807501C - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08075086 - ldr r1, _08075044 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3a - ldrb r0, [r0] - strb r0, [r2, #0x14] - adds r0, r1, #0 - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _0807504C - ldr r0, _08075048 @ =0x0000041C - b _0807504E - .align 2, 0 -_08075044: .4byte gPlayerState -_08075048: .4byte 0x0000041C -_0807504C: - ldr r0, _08075088 @ =0x0000080C -_0807504E: - strh r0, [r1, #8] - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r3] - ldrb r0, [r2, #0x14] - lsls r0, r0, #2 - strb r0, [r2, #0x15] - movs r0, #0xc8 - strh r0, [r2, #0x24] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r2, #0x20] - movs r0, #8 - strb r0, [r2, #0xe] - adds r1, r2, #0 - adds r1, #0x68 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - movs r0, #0x7c - bl SoundReq -_08075086: - pop {pc} - .align 2, 0 -_08075088: .4byte 0x0000080C - - thumb_func_start sub_0807508C -sub_0807508C: @ 0x0807508C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - beq _080750AA - adds r0, r4, #0 - bl sub_0806F69C - b _080750F2 -_080750AA: - ldr r2, _080750BC @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _080750C0 - movs r0, #0x80 - lsls r0, r0, #3 - b _080750CE - .align 2, 0 -_080750BC: .4byte gPlayerState -_080750C0: - ldr r0, [r2, #0x30] - movs r1, #9 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r2, #0x30] - movs r0, #0x80 - lsls r0, r0, #1 -_080750CE: - strh r0, [r2, #8] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _080750F2 - movs r0, #4 - strb r0, [r4, #0x14] - movs r0, #1 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x68 - strb r1, [r0] - movs r0, #0x7d - bl SoundReq -_080750F2: - pop {r4, pc} - - thumb_func_start sub_080750F4 -sub_080750F4: @ 0x080750F4 - push {lr} - ldr r2, _0807510C @ =gUnk_0811BCB4 - adds r1, r0, #0 - adds r1, #0x68 - ldrb r1, [r1] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0807510C: .4byte gUnk_0811BCB4 - - thumb_func_start sub_08075110 -sub_08075110: @ 0x08075110 - adds r2, r0, #0 - adds r2, #0x68 - ldrb r1, [r2] - adds r1, #1 - movs r3, #0 - strb r1, [r2] - ldrb r1, [r0, #0x14] - strb r1, [r0, #0xf] - strb r3, [r0, #0x14] - ldr r2, _08075134 @ =gPlayerState - ldr r0, _08075138 @ =0x00000734 - strh r0, [r2, #8] - ldr r0, [r2, #0x30] - movs r1, #9 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r2, #0x30] - bx lr - .align 2, 0 -_08075134: .4byte gPlayerState -_08075138: .4byte 0x00000734 - - thumb_func_start sub_0807513C -sub_0807513C: @ 0x0807513C - push {r4, r5, lr} - adds r5, r0, #0 - bl UpdateAnimationSingleFrame - adds r4, r5, #0 - adds r4, #0x5a - ldrb r0, [r4] - cmp r0, #1 - bne _08075158 - movs r0, #0 - strb r0, [r4] - movs r0, #0x7c - bl SoundReq -_08075158: - ldrb r0, [r4] - cmp r0, #2 - bne _0807516E - movs r0, #0 - strb r0, [r4] - ldr r0, _08075188 @ =0x0000014B - bl SoundReq - movs r0, #0x7a - bl SoundReq -_0807516E: - ldrb r1, [r4] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08075186 - adds r0, r5, #0 - adds r0, #0x68 - ldrb r1, [r0] - adds r1, #1 - strb r1, [r0] - movs r0, #0x3c - strb r0, [r5, #0xe] -_08075186: - pop {r4, r5, pc} - .align 2, 0 -_08075188: .4byte 0x0000014B - - thumb_func_start sub_0807518C -sub_0807518C: @ 0x0807518C - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080751AA - adds r1, #0x68 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - ldr r1, _080751AC @ =gPlayerState - ldr r0, _080751B0 @ =0x000003C9 - strh r0, [r1, #8] -_080751AA: - pop {pc} - .align 2, 0 -_080751AC: .4byte gPlayerState -_080751B0: .4byte 0x000003C9 - - thumb_func_start sub_080751B4 -sub_080751B4: @ 0x080751B4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080751E2 - movs r1, #0 - movs r0, #4 - strb r0, [r4, #0x14] - movs r0, #1 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x68 - strb r1, [r0] - ldr r1, _080751E4 @ =gPlayerState - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1, #8] -_080751E2: - pop {r4, pc} - .align 2, 0 -_080751E4: .4byte gPlayerState - - thumb_func_start sub_080751E8 -sub_080751E8: @ 0x080751E8 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - ldr r4, _08075230 @ =gPlayerScriptExecutionContext - adds r0, r4, #0 - movs r1, #0x24 - bl MemClear - str r6, [r4] - ldr r0, _08075234 @ =gPlayerEntity - adds r0, #0x84 - str r4, [r0] - ldr r2, _08075238 @ =gPlayerState - movs r1, #0 - movs r0, #0x1c - strb r0, [r2, #0xc] - adds r0, r2, #0 - adds r0, #0x38 - movs r4, #1 - strb r4, [r0] - adds r3, r2, #0 - adds r3, #0x39 - strb r1, [r3] - adds r0, #2 - strb r5, [r0] - ldr r0, [r2, #0x30] - movs r1, #8 - orrs r0, r1 - str r0, [r2, #0x30] - cmp r7, #0 - bne _08075240 - strb r7, [r3] - ldr r6, _0807523C @ =script_08009ECC - b _08075244 - .align 2, 0 -_08075230: .4byte gPlayerScriptExecutionContext -_08075234: .4byte gPlayerEntity -_08075238: .4byte gPlayerState -_0807523C: .4byte script_08009ECC -_08075240: - strb r4, [r3] - ldr r6, _08075290 @ =script_08009EF0 -_08075244: - ldr r0, _08075294 @ =gPlayerState - adds r0, #0x39 - ldrb r0, [r0] - movs r1, #0 - cmp r0, #0 - bne _08075252 - movs r1, #2 -_08075252: - movs r0, #0x5b - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08075270 - ldr r0, _08075298 @ =gPlayerEntity - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - adds r1, r6, #0 - bl StartCutscene -_08075270: - ldr r4, _08075298 @ =gPlayerEntity - movs r1, #0xe - rsbs r1, r1, #0 - movs r2, #0x1c - rsbs r2, r2, #0 - adds r0, r4, #0 - bl CreateSpeechBubbleSleep - str r0, [r4, #0x6c] - cmp r0, #0 - beq _0807528C - movs r1, #3 - bl SetDefaultPriority -_0807528C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08075290: .4byte script_08009EF0 -_08075294: .4byte gPlayerState -_08075298: .4byte gPlayerEntity - - thumb_func_start sub_0807529C -sub_0807529C: @ 0x0807529C - push {lr} - movs r2, #0x20 - rsbs r2, r2, #0 - movs r1, #8 - bl CreateSpeechBubbleQuestionMark - pop {pc} - .align 2, 0 - - thumb_func_start sub_080752AC -sub_080752AC: @ 0x080752AC - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - bl sub_0806F69C - ldrb r0, [r4, #0x18] - cmp r0, #0 - bne _080752D0 - adds r0, r5, #0 - bl sub_080002B8 - cmp r0, #0x29 - beq _080752DC - movs r0, #1 - strb r0, [r4, #0x18] - movs r0, #6 - strb r0, [r4, #0x19] - b _080752DC -_080752D0: - ldrb r0, [r4, #0x19] - subs r0, #1 - strb r0, [r4, #0x19] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _080752E2 -_080752DC: - ldr r1, _080752E4 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_080752E2: - pop {r4, r5, pc} - .align 2, 0 -_080752E4: .4byte gActiveScriptInfo - - thumb_func_start sub_080752E8 -sub_080752E8: @ 0x080752E8 - push {lr} - ldr r3, _080752FC @ =gItemFunctions - ldrb r2, [r0, #1] - lsls r2, r2, #2 - adds r2, r2, r3 - ldr r2, [r2] - bl _call_via_r2 - pop {pc} - .align 2, 0 -_080752FC: .4byte gItemFunctions diff --git a/asm/code_08078778.s b/asm/code_08078778.s index 973db1ec..61f876d3 100644 --- a/asm/code_08078778.s +++ b/asm/code_08078778.s @@ -862,8 +862,8 @@ sub_08078EE4: @ 0x08078EE4 _08078EF4: .4byte gPlayerEntity _08078EF8: .4byte gPlayerState - thumb_func_start sub_08078EFC -sub_08078EFC: @ 0x08078EFC + thumb_func_start RunQueuedAction +RunQueuedAction: @ 0x08078EFC push {lr} ldr r3, _08078F18 @ =gPlayerState ldrb r2, [r3, #0xc] @@ -894,7 +894,7 @@ sub_08078F24: @ 0x08078F24 ands r0, r3 cmp r0, #0 beq _08078F3C - bl sub_08078F60 + bl ResetPlayerVelocity b _08078F5A .align 2, 0 _08078F38: .4byte gPlayerState @@ -919,8 +919,8 @@ _08078F5A: .align 2, 0 _08078F5C: .4byte gSineTable - thumb_func_start sub_08078F60 -sub_08078F60: @ 0x08078F60 + thumb_func_start ResetPlayerVelocity +ResetPlayerVelocity: @ 0x08078F60 ldr r0, _08078F70 @ =gPlayerState adds r1, r0, #0 adds r1, #0x8c @@ -3282,7 +3282,7 @@ _0807A104: thumb_func_start sub_0807A108 sub_0807A108: @ 0x0807A108 push {lr} - ldr r1, _0807A148 @ =gUnk_03004040 + ldr r1, _0807A148 @ =gPlayerClones movs r0, #0 str r0, [r1] str r0, [r1, #4] @@ -3315,7 +3315,7 @@ _0807A130: _0807A144: pop {pc} .align 2, 0 -_0807A148: .4byte gUnk_03004040 +_0807A148: .4byte gPlayerClones _0807A14C: .4byte gPlayerState _0807A150: .4byte 0xFFBFFFFF _0807A154: .4byte gPlayerEntity @@ -3483,8 +3483,8 @@ _0807A28C: .4byte gPlayerEntity _0807A290: .4byte gPlayerState _0807A294: .4byte gUnk_08007CAC - thumb_func_start sub_0807A298 -sub_0807A298: @ 0x0807A298 + thumb_func_start EnablePlayerDraw +EnablePlayerDraw: @ 0x0807A298 movs r1, #0 strb r1, [r0, #0xb] ldrb r1, [r0, #0x18] diff --git a/asm/crenalBeanSprout.s b/asm/crenalBeanSprout.s index 1085ea32..19ed952e 100644 --- a/asm/crenalBeanSprout.s +++ b/asm/crenalBeanSprout.s @@ -535,7 +535,7 @@ sub_08096740: @ 0x08096740 adds r4, r0, #0 movs r0, #0x10 movs r1, #0 - bl sub_08080964 + bl InitScreenShake movs r1, #0 movs r0, #1 strb r0, [r4, #0xc] diff --git a/asm/enemy4D.s b/asm/enemy4D.s index 669274fd..f7b116a9 100644 --- a/asm/enemy4D.s +++ b/asm/enemy4D.s @@ -284,7 +284,7 @@ _0803EDC0: strb r0, [r2, #0xe] movs r0, #8 movs r1, #0 - bl sub_08080964 + bl InitScreenShake _0803EDD0: pop {pc} .align 2, 0 diff --git a/asm/enemy50.s b/asm/enemy50.s index cdab7151..d43aaafe 100644 --- a/asm/enemy50.s +++ b/asm/enemy50.s @@ -854,7 +854,7 @@ sub_08041134: @ 0x08041134 movs r0, #0x25 strb r0, [r1] movs r5, #0 - ldr r0, _08041168 @ =gUnk_03004040 + ldr r0, _08041168 @ =gPlayerClones ldr r0, [r0] cmp r0, #0 beq _08041150 @@ -872,7 +872,7 @@ _08041150: strh r0, [r1] pop {r4, r5, pc} .align 2, 0 -_08041168: .4byte gUnk_03004040 +_08041168: .4byte gPlayerClones _0804116C: .4byte gUnk_080D0E18 thumb_func_start sub_08041170 diff --git a/asm/enemy62.s b/asm/enemy62.s index d9e780b5..17c90185 100644 --- a/asm/enemy62.s +++ b/asm/enemy62.s @@ -105,7 +105,7 @@ _08048E48: bl SoundReq movs r0, #0x28 movs r1, #0 - bl sub_08080964 + bl InitScreenShake _08048E5C: adds r2, r5, #0 adds r2, #0x3d diff --git a/asm/ghini.s b/asm/ghini.s index 2a43603a..5ffffb3e 100644 --- a/asm/ghini.s +++ b/asm/ghini.s @@ -851,7 +851,7 @@ sub_0803F630: @ 0x0803F630 movs r0, #0x25 strb r0, [r1] movs r5, #0 - ldr r0, _0803F664 @ =gUnk_03004040 + ldr r0, _0803F664 @ =gPlayerClones ldr r0, [r0] cmp r0, #0 beq _0803F64C @@ -869,7 +869,7 @@ _0803F64C: strh r0, [r1] pop {r4, r5, pc} .align 2, 0 -_0803F664: .4byte gUnk_03004040 +_0803F664: .4byte gPlayerClones _0803F668: .4byte gUnk_080D0980 thumb_func_start sub_0803F66C @@ -937,7 +937,7 @@ sub_0803F6C0: @ 0x0803F6C0 bl ModHealth adds r0, r4, #0 movs r1, #0x7a - bl sub_0800449C + bl SoundReqClipped pop {r4, pc} .align 2, 0 _0803F6E8: .4byte gPlayerEntity diff --git a/asm/gleerok.s b/asm/gleerok.s index 32779e12..2ba8ead0 100644 --- a/asm/gleerok.s +++ b/asm/gleerok.s @@ -900,7 +900,7 @@ sub_0802D6F0: @ 0x0802D6F0 str r0, [r2, #0x7c] movs r0, #0x96 movs r1, #0 - bl sub_08080964 + bl InitScreenShake _0802D712: pop {pc} @@ -2496,7 +2496,7 @@ _0802E23A: movs r0, #0xf0 strh r0, [r7] movs r1, #0 - bl sub_08080964 + bl InitScreenShake b _0802E2E4 .align 2, 0 _0802E280: .4byte gPlayerEntity @@ -2545,7 +2545,7 @@ _0802E29E: strh r0, [r1] movs r0, #0x1e movs r1, #0 - bl sub_08080964 + bl InitScreenShake _0802E2E4: movs r0, #5 strb r0, [r5, #0xb] diff --git a/asm/gyorgBossObject.s b/asm/gyorgBossObject.s index bf2efd4e..99359f15 100644 --- a/asm/gyorgBossObject.s +++ b/asm/gyorgBossObject.s @@ -399,7 +399,7 @@ sub_080A189C: @ 0x080A189C bl SoundReq movs r0, #0x96 movs r1, #1 - bl sub_08080964 + bl InitScreenShake _080A18E6: ldr r2, _080A1904 @ =gPlayerState ldr r1, _080A1908 @ =gRoomControls @@ -521,7 +521,7 @@ sub_080A1990: @ 0x080A1990 bl SoundReq movs r0, #0x96 movs r1, #1 - bl sub_08080964 + bl InitScreenShake _080A19D6: ldr r2, _080A19F4 @ =gPlayerState ldr r1, _080A19F8 @ =gRoomControls @@ -640,7 +640,7 @@ sub_080A1A80: @ 0x080A1A80 bl SoundReq movs r0, #0x96 movs r1, #1 - bl sub_08080964 + bl InitScreenShake _080A1AC0: ldr r2, _080A1AE0 @ =gPlayerState ldr r1, _080A1AE4 @ =gRoomControls @@ -728,7 +728,7 @@ sub_080A1B4C: @ 0x080A1B4C beq _080A1B80 movs r0, #0x2d movs r1, #1 - bl sub_08080964 + bl InitScreenShake movs r0, #0x94 lsls r0, r0, #1 bl SoundReq @@ -860,7 +860,7 @@ _080A1C76: movs r0, #0xb4 lsls r0, r0, #2 movs r1, #2 - bl sub_08080964 + bl InitScreenShake b _080A1C9A _080A1C8A: movs r0, #0x94 @@ -868,7 +868,7 @@ _080A1C8A: bl SoundReq movs r0, #0x4b movs r1, #1 - bl sub_08080964 + bl InitScreenShake _080A1C9A: pop {r4, pc} @@ -1418,7 +1418,7 @@ _080A20A4: bne _080A20B4 movs r0, #0x1e movs r1, #0 - bl sub_08080964 + bl InitScreenShake b _080A20B4 _080A20B2: strb r0, [r4] diff --git a/asm/gyorgFemale.s b/asm/gyorgFemale.s index 3d90df67..2b113b5c 100644 --- a/asm/gyorgFemale.s +++ b/asm/gyorgFemale.s @@ -813,7 +813,7 @@ _08046498: beq _0804650E movs r0, #8 movs r1, #0 - bl sub_08080964 + bl InitScreenShake adds r1, r4, #0 adds r1, #0x82 ldrb r0, [r1] @@ -965,7 +965,7 @@ _080466D0: beq _08046746 movs r0, #8 movs r1, #0 - bl sub_08080964 + bl InitScreenShake adds r1, r4, #0 adds r1, #0x82 ldrb r0, [r1] diff --git a/asm/hittableLever.s b/asm/hittableLever.s index f3cb73c2..0efb82fb 100644 --- a/asm/hittableLever.s +++ b/asm/hittableLever.s @@ -121,7 +121,7 @@ _0808A7C2: _0808A7C8: ldr r1, _0808A7D4 @ =0x00000117 adds r0, r5, #0 - bl sub_0800449C + bl SoundReqClipped _0808A7D0: pop {r4, r5, pc} .align 2, 0 diff --git a/asm/ladderUp.s b/asm/ladderUp.s index 1eaecf27..cd53a0b7 100644 --- a/asm/ladderUp.s +++ b/asm/ladderUp.s @@ -101,7 +101,7 @@ _0808D4E8: _0808D4FE: movs r0, #0x1e movs r1, #0 - bl sub_08080964 + bl InitScreenShake ldr r0, _0808D514 @ =0x0000010B bl SoundReq movs r0, #2 @@ -358,7 +358,7 @@ _0808DBF8: _0808DC0E: movs r0, #0x1e movs r1, #0 - bl sub_08080964 + bl InitScreenShake ldr r0, _0808DC28 @ =0x0000010B bl SoundReq movs r0, #2 diff --git a/asm/lilypadLarge.s b/asm/lilypadLarge.s index a9158fe8..045a9be9 100644 --- a/asm/lilypadLarge.s +++ b/asm/lilypadLarge.s @@ -1380,7 +1380,7 @@ sub_08085F48: @ 0x08085F48 ldrb r0, [r5, #0x12] cmp r0, #0x17 bne _08085F6A - bl sub_08078F60 + bl ResetPlayerVelocity movs r0, #0x19 strb r0, [r5, #0x12] _08085F6A: diff --git a/asm/macroBook.s b/asm/macroBook.s index 3b3396a4..2e6a0704 100644 --- a/asm/macroBook.s +++ b/asm/macroBook.s @@ -132,7 +132,7 @@ _0809A85C: beq _0809A87C subs r0, #1 strb r0, [r4, #0xe] - ldr r0, _0809A878 @ =gUnk_03004040 + ldr r0, _0809A878 @ =gPlayerClones ldr r1, [r0] cmp r1, #0 bne _0809A8A0 @@ -142,7 +142,7 @@ _0809A870: strb r1, [r4, #0xe] b _0809A8A0 .align 2, 0 -_0809A878: .4byte gUnk_03004040 +_0809A878: .4byte gPlayerClones _0809A87C: adds r0, r4, #0 adds r0, #0x5a @@ -241,7 +241,7 @@ _0809A92A: adds r0, r4, #0 movs r2, #1 bl sub_0809AA9C - ldr r0, _0809A954 @ =gUnk_03004040 + ldr r0, _0809A954 @ =gPlayerClones ldr r1, [r0] cmp r1, #0 beq _0809A94E @@ -252,7 +252,7 @@ _0809A94E: pop {r4, pc} .align 2, 0 _0809A950: .4byte gPlayerEntity -_0809A954: .4byte gUnk_03004040 +_0809A954: .4byte gPlayerClones thumb_func_start sub_0809A958 sub_0809A958: @ 0x0809A958 @@ -408,7 +408,7 @@ _0809AA5C: adds r1, r4, #0 movs r2, #1 bl sub_0809AA9C - ldr r0, _0809AA98 @ =gUnk_03004040 + ldr r0, _0809AA98 @ =gPlayerClones ldr r4, [r0] cmp r4, #0 beq _0809AA8E @@ -422,7 +422,7 @@ _0809AA8E: pop {r4, r5, r6, r7, pc} .align 2, 0 _0809AA94: .4byte gPlayerEntity -_0809AA98: .4byte gUnk_03004040 +_0809AA98: .4byte gPlayerClones thumb_func_start sub_0809AA9C sub_0809AA9C: @ 0x0809AA9C diff --git a/asm/non_matching/pesto/sub_08024E4C.inc b/asm/non_matching/pesto/sub_08024E4C.inc index affeab56..b3d6d0e9 100644 --- a/asm/non_matching/pesto/sub_08024E4C.inc +++ b/asm/non_matching/pesto/sub_08024E4C.inc @@ -123,7 +123,7 @@ _08024ECC: bl ModHealth adds r0, r6, #0 movs r1, #0x7a - bl sub_0800449C + bl SoundReqClipped _08024F46: pop {r4, r5, r6, r7, pc} .align 2, 0 diff --git a/asm/non_matching/player/PlayerNormal.inc b/asm/non_matching/player/PlayerNormal.inc index 17b2e5e8..514075d5 100644 --- a/asm/non_matching/player/PlayerNormal.inc +++ b/asm/non_matching/player/PlayerNormal.inc @@ -99,7 +99,7 @@ _08070852: adds r0, r5, #0 adds r0, #0x40 strb r4, [r0] - bl sub_08078EFC + bl RunQueuedAction cmp r0, #0 beq _08070868 b _08070BE4 @@ -156,7 +156,7 @@ _080708AC: bne _080708C4 bl UpdateFloorType _080708C4: - bl sub_08078EFC + bl RunQueuedAction cmp r0, #0 beq _080708CE b _08070BE4 @@ -195,7 +195,7 @@ _08070902: b _08070BE4 _0807090C: bl UpdateFloorType - bl sub_08078EFC + bl RunQueuedAction b _08070BE4 .align 2, 0 _08070918: .4byte gPlayerState @@ -296,7 +296,7 @@ _080709D8: _080709FC: adds r0, r5, #0 bl sub_08077698 - bl sub_08078EFC + bl RunQueuedAction cmp r0, #0 beq _08070A0C b _08070BE4 @@ -321,7 +321,7 @@ _08070A26: _08070A32: adds r0, r5, #0 bl sub_08073904 - bl sub_08078EFC + bl RunQueuedAction cmp r0, #0 beq _08070A42 b _08070BE4 @@ -432,7 +432,7 @@ _08070B00: _08070B0E: cmp r0, #1 bne _08070B18 - bl sub_08078F60 + bl ResetPlayerVelocity b _08070B1E _08070B18: adds r0, r5, #0 diff --git a/asm/non_matching/player/sub_08070DC4.inc b/asm/non_matching/player/sub_08070DC4.inc index 5f9b8e7e..8d544d6b 100644 --- a/asm/non_matching/player/sub_08070DC4.inc +++ b/asm/non_matching/player/sub_08070DC4.inc @@ -6,7 +6,7 @@ bl sub_080085B0 bl sub_08079E08 bl UpdateFloorType - bl sub_08078EFC + bl RunQueuedAction cmp r0, #0 bne _08070E76 movs r1, #0x80 @@ -17,7 +17,7 @@ bne _08070E76 ldr r6, _08070E18 @ =gPlayerState strb r0, [r6, #2] - bl sub_08078EFC + bl RunQueuedAction adds r5, r0, #0 cmp r5, #0 bne _08070E76 diff --git a/asm/non_matching/player/sub_08073584.inc b/asm/non_matching/player/sub_08073584.inc new file mode 100644 index 00000000..43ee516b --- /dev/null +++ b/asm/non_matching/player/sub_08073584.inc @@ -0,0 +1,280 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldr r2, _080735DC @ =gPlayerState + adds r0, r2, #0 + adds r0, #0x92 + ldrh r1, [r0] + movs r5, #0x80 + adds r0, r5, #0 + ands r0, r1 + adds r6, r2, #0 + cmp r0, #0 + bne _080735C0 + adds r0, r4, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bgt _080735C0 + adds r0, r6, #0 + adds r0, #0x3c + ldrb r0, [r0] + cmp r0, #0 + bne _080735C0 + ldr r0, [r6, #0x30] + movs r1, #0x80 + lsls r1, r1, #0x11 + ands r0, r1 + cmp r0, #0 + bne _080735E0 +_080735C0: + ldrb r0, [r6, #2] + movs r1, #0x40 + orrs r1, r0 + strb r1, [r6, #2] + bl sub_0807921C + adds r0, r4, #0 + bl sub_08073904 + movs r0, #0xe6 + lsls r0, r0, #3 + strh r0, [r6, #8] + b _08073794 + .align 2, 0 +_080735DC: .4byte gPlayerState +_080735E0: + ldr r0, _0807360C @ =gUnk_0200AF00 + adds r0, #0x2f + movs r1, #1 + strb r1, [r0] + movs r0, #0 + bl sub_0807A2F8 + cmp r0, #0 + beq _08073610 + ldrb r0, [r4, #0xd] + adds r0, #1 + strb r0, [r4, #0xd] + ldrb r1, [r4, #0x14] + movs r0, #6 + ands r0, r1 + lsls r0, r0, #2 + strb r0, [r4, #0x15] + ldrb r1, [r4, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r4, #0x10] + b _08073794 + .align 2, 0 +_0807360C: .4byte gUnk_0200AF00 +_08073610: + ldr r0, _08073620 @ =gArea + ldrb r0, [r0, #1] + cmp r0, #0x10 + bne _08073624 + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r4, #0x24] + b _08073626 + .align 2, 0 +_08073620: .4byte gArea +_08073624: + strh r5, [r4, #0x24] +_08073626: + ldr r3, _08073650 @ =gPlayerState + ldrb r1, [r3, #0xd] + movs r0, #0x80 + ands r0, r1 + adds r2, r4, #0 + adds r2, #0x80 + cmp r0, #0 + bne _0807365A + ldrb r0, [r4, #0x15] + cmp r0, r1 + beq _0807365A + ldrb r1, [r3, #0xd] + subs r0, r0, r1 + movs r1, #0x1f + ands r0, r1 + cmp r0, #0xf + bgt _08073654 + ldr r0, [r2] + subs r0, #0x20 + b _08073658 + .align 2, 0 +_08073650: .4byte gPlayerState +_08073654: + ldr r0, [r2] + adds r0, #0x20 +_08073658: + str r0, [r2] +_0807365A: + ldr r0, [r2] + lsrs r0, r0, #8 + movs r1, #0x1f + ands r0, r1 + strb r0, [r4, #0x15] + bl sub_08079E08 + ldrb r2, [r4, #0x14] + lsls r3, r2, #2 + ldrb r1, [r4, #0x15] + cmp r2, #0 + bne _0807367C + adds r3, #8 + movs r0, #0x1f + ands r3, r0 + adds r1, #8 + ands r1, r0 +_0807367C: + subs r0, r3, #7 + cmp r0, r1 + bls _08073686 + subs r3, r2, #2 + b _0807368E +_08073686: + adds r0, r3, #7 + cmp r0, r1 + bhs _08073694 + adds r3, r2, #2 +_0807368E: + movs r0, #7 + ands r3, r0 + b _08073696 +_08073694: + adds r3, r2, #0 +_08073696: + movs r0, #0x87 + adds r0, r0, r4 + mov ip, r0 + ldrb r1, [r4, #0x14] + cmp r3, r1 + beq _080736A8 + movs r0, #0x14 + mov r2, ip + strb r0, [r2] +_080736A8: + strb r3, [r4, #0x14] + movs r5, #0 + ldr r1, _080736E4 @ =gPlayerState + ldrb r2, [r1, #0xd] + lsrs r3, r2, #2 + mov r6, ip + ldrb r0, [r6] + adds r6, r1, #0 + cmp r0, #0 + beq _080736CA + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + bne _08073736 + ldrb r0, [r4, #0x14] + cmp r0, r3 + beq _08073736 +_080736CA: + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + bne _080736FA + ldrb r2, [r4, #0x14] + cmp r2, r3 + beq _080736FA + movs r0, #4 + eors r0, r3 + cmp r2, r0 + bne _080736E8 + movs r5, #2 + b _080736FA + .align 2, 0 +_080736E4: .4byte gPlayerState +_080736E8: + movs r0, #6 + ands r0, r3 + adds r0, #2 + movs r1, #7 + ands r0, r1 + movs r5, #3 + cmp r2, r0 + bne _080736FA + movs r5, #1 +_080736FA: + ldr r1, _0807371C @ =gUnk_0811BC28 + lsls r0, r5, #1 + adds r0, r0, r1 + ldrh r0, [r0] + ldrh r1, [r6, #8] + cmp r0, r1 + bne _0807372C + ldr r0, _08073720 @ =gArea + ldrb r0, [r0, #1] + cmp r0, #0x10 + bne _08073724 + adds r0, r4, #0 + movs r1, #2 + bl sub_080042BA + b _0807372E + .align 2, 0 +_0807371C: .4byte gUnk_0811BC28 +_08073720: .4byte gArea +_08073724: + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + b _0807372E +_0807372C: + strh r0, [r6, #8] +_0807372E: + adds r0, r4, #0 + adds r0, #0x86 + strb r5, [r0] + b _08073762 +_08073736: + mov r2, ip + ldrb r0, [r2] + subs r0, #1 + strb r0, [r2] + ldr r1, _0807375C @ =gUnk_0811BC30 + adds r0, r4, #0 + adds r0, #0x86 + ldrb r0, [r0] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + ldrh r1, [r6, #8] + cmp r0, r1 + bne _08073760 + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + b _08073762 + .align 2, 0 +_0807375C: .4byte gUnk_0811BC30 +_08073760: + strh r0, [r6, #8] +_08073762: + ldr r0, [r4, #0x7c] + subs r1, r0, #1 + str r1, [r4, #0x7c] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08073784 + ldr r2, _08073780 @ =gPlayerState + ldrb r1, [r2, #2] + movs r0, #0x40 + orrs r0, r1 + strb r0, [r2, #2] + bl sub_0807921C + b _08073794 + .align 2, 0 +_08073780: .4byte gPlayerState +_08073784: + adds r0, r1, #0 + movs r1, #0x14 + bl __divsi3 + ldr r2, _08073798 @ =0x0000FFF8 + adds r1, r2, #0 + subs r1, r1, r0 + strh r1, [r4, #0x36] +_08073794: + pop {r4, r5, r6, pc} + .align 2, 0 +_08073798: .4byte 0x0000FFF8 + .syntax divided diff --git a/asm/non_matching/player/sub_080740D8.inc b/asm/non_matching/player/sub_080740D8.inc new file mode 100644 index 00000000..f24b687f --- /dev/null +++ b/asm/non_matching/player/sub_080740D8.inc @@ -0,0 +1,123 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + bl UpdateAnimationSingleFrame + ldrb r0, [r4, #0xf] + cmp r0, #0 + bne _080740EA + ldrb r0, [r4, #0x15] + b _080740F0 +_080740EA: + ldrb r1, [r4, #0x15] + movs r0, #0x10 + eors r0, r1 +_080740F0: + cmp r0, #8 + beq _08074128 + cmp r0, #8 + bhi _080740FE + cmp r0, #0 + beq _08074168 + b _0807418C +_080740FE: + cmp r0, #0x10 + beq _08074148 + cmp r0, #0x18 + bne _0807418C + movs r0, #0x2e + ldrsh r1, [r4, r0] + ldr r2, [r4, #0x48] + ldrb r0, [r2, #2] + subs r1, r1, r0 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + ldr r3, _08074124 @ =gRoomControls + ldrh r0, [r3, #6] + subs r6, r1, r0 + movs r1, #0x32 + ldrsh r0, [r4, r1] + b _08074182 + .align 2, 0 +_08074124: .4byte gRoomControls +_08074128: + ldr r2, [r4, #0x48] + movs r1, #0x2e + ldrsh r0, [r4, r1] + ldrb r1, [r2, #2] + adds r0, r0, r1 + movs r1, #0 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + ldr r3, _08074144 @ =gRoomControls + ldrh r1, [r3, #6] + subs r6, r0, r1 + movs r1, #0x32 + ldrsh r0, [r4, r1] + b _08074182 + .align 2, 0 +_08074144: .4byte gRoomControls +_08074148: + movs r0, #0x2e + ldrsh r1, [r4, r0] + ldr r2, [r4, #0x48] + movs r0, #0 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + ldr r3, _08074164 @ =gRoomControls + ldrh r0, [r3, #6] + subs r6, r1, r0 + movs r1, #0x32 + ldrsh r0, [r4, r1] + ldrb r1, [r2, #5] + adds r0, r0, r1 + b _08074182 + .align 2, 0 +_08074164: .4byte gRoomControls +_08074168: + movs r0, #0x2e + ldrsh r1, [r4, r0] + ldr r2, [r4, #0x48] + movs r0, #0 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + ldr r3, _080741A4 @ =gRoomControls + ldrh r0, [r3, #6] + subs r6, r1, r0 + movs r1, #0x32 + ldrsh r0, [r4, r1] + ldrb r1, [r2, #5] + subs r0, r0, r1 +_08074182: + movs r1, #1 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + ldrh r1, [r3, #8] + subs r5, r0, r1 +_0807418C: + ldr r2, _080741A8 @ =gUnk_080082DC + adds r0, r6, #0 + adds r1, r5, #0 + bl sub_080086B4 + cmp r0, #0 + beq _080741AC + adds r0, r4, #0 + bl sub_0806F69C + b _080741B0 + .align 2, 0 +_080741A4: .4byte gRoomControls +_080741A8: .4byte gUnk_080082DC +_080741AC: + movs r0, #1 + strb r0, [r4, #0xf] +_080741B0: + movs r1, #0x80 + lsls r1, r1, #6 + adds r0, r4, #0 + bl GravityUpdate + cmp r0, #0 + bne _080741C2 + bl sub_0807921C +_080741C2: + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/non_matching/player/sub_08074678.inc b/asm/non_matching/player/sub_08074678.inc new file mode 100644 index 00000000..3a3206b0 --- /dev/null +++ b/asm/non_matching/player/sub_08074678.inc @@ -0,0 +1,146 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + bl sub_080741C4 + cmp r0, #0 + beq _08074690 + ldr r0, _0807468C @ =gPlayerState + movs r1, #0 + strb r1, [r0, #0x11] + b _080746CE + .align 2, 0 +_0807468C: .4byte gPlayerState +_08074690: + adds r0, r4, #0 + adds r0, #0x45 + ldrb r0, [r0] + cmp r0, #0 + beq _0807476C + adds r0, r4, #0 + bl sub_08079C30 + adds r1, r0, #0 + cmp r1, #0 + bne _080746B0 + ldr r0, _080746AC @ =gPlayerState + strb r1, [r0, #0x11] + b _080746CE + .align 2, 0 +_080746AC: .4byte gPlayerState +_080746B0: + ldr r3, _080746D4 @ =gPlayerState + ldr r1, [r3, #0x30] + movs r0, #0x80 + ands r1, r0 + cmp r1, #0 + bne _0807476C + ldrb r2, [r3, #0x1e] + cmp r2, #0 + beq _080746D8 + movs r0, #0x40 + ands r0, r2 + cmp r0, #0 + beq _080746DC + strb r1, [r3, #0x11] + adds r0, r3, #0 +_080746CE: + adds r0, #0x37 + strb r1, [r0] + b _08074792 + .align 2, 0 +_080746D4: .4byte gPlayerState +_080746D8: + bl sub_08077B20 +_080746DC: + ldr r1, _08074700 @ =gPlayerState + adds r0, r1, #0 + adds r0, #0x37 + ldrb r0, [r0] + cmp r0, #1 + bne _08074704 + adds r0, r4, #0 + movs r1, #0x70 + movs r2, #0 + movs r3, #0 + bl CreateObjectWithParent + adds r0, r4, #0 + movs r1, #0x52 + movs r2, #0 + bl CreateFx + b _08074714 + .align 2, 0 +_08074700: .4byte gPlayerState +_08074704: + adds r0, r1, #0 + adds r0, #0x92 + ldrh r1, [r0] + movs r0, #0xf0 + lsls r0, r0, #4 + ands r0, r1 + cmp r0, #0 + beq _08074720 +_08074714: + ldr r0, _0807471C @ =0x00000161 + bl SoundReq + b _08074732 + .align 2, 0 +_0807471C: .4byte 0x00000161 +_08074720: + ldr r0, _08074760 @ =gScreenTransition + ldr r0, [r0] + movs r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _08074732 + ldr r0, _08074764 @ =0x00000161 + bl SoundReq +_08074732: + ldr r2, _08074768 @ =gPlayerState + adds r1, r2, #0 + adds r1, #0x80 + ldrh r0, [r1] + subs r0, #0xf0 + strh r0, [r1] + adds r1, #0x28 + movs r0, #0x1b + strb r0, [r1] + adds r0, r2, #0 + adds r0, #0x37 + ldrb r0, [r0] + lsls r3, r0, #0x18 + lsrs r0, r3, #0x18 + cmp r0, #0xef + bhi _0807476C + subs r1, #0x69 + lsrs r0, r3, #0x1d + adds r0, #4 + ldrb r2, [r1] + adds r0, r0, r2 + strb r0, [r1] + b _08074792 + .align 2, 0 +_08074760: .4byte gScreenTransition +_08074764: .4byte 0x00000161 +_08074768: .4byte gPlayerState +_0807476C: + ldr r2, _08074794 @ =gPlayerState + ldr r0, [r2, #0x30] + ldr r1, _08074798 @ =0xFFFBFFFF + ands r0, r1 + str r0, [r2, #0x30] + adds r0, r4, #0 + movs r1, #0x52 + movs r2, #0 + bl CreateFx + adds r1, r4, #0 + adds r1, #0x3d + movs r0, #0x20 + strb r0, [r1] + subs r0, #0x24 + bl ModHealth + bl RespawnPlayer +_08074792: + pop {r4, pc} + .align 2, 0 +_08074794: .4byte gPlayerState +_08074798: .4byte 0xFFFBFFFF + .syntax divided diff --git a/asm/non_matching/player/sub_080751E8.inc b/asm/non_matching/player/sub_080751E8.inc new file mode 100644 index 00000000..6140893a --- /dev/null +++ b/asm/non_matching/player/sub_080751E8.inc @@ -0,0 +1,84 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r7, r0, #0 + adds r5, r1, #0 + adds r6, r2, #0 + ldr r4, _08075230 @ =gPlayerScriptExecutionContext + adds r0, r4, #0 + movs r1, #0x24 + bl MemClear + str r6, [r4] + ldr r0, _08075234 @ =gPlayerEntity + adds r0, #0x84 + str r4, [r0] + ldr r2, _08075238 @ =gPlayerState + movs r1, #0 + movs r0, #0x1c + strb r0, [r2, #0xc] + adds r0, r2, #0 + adds r0, #0x38 + movs r4, #1 + strb r4, [r0] + adds r3, r2, #0 + adds r3, #0x39 + strb r1, [r3] + adds r0, #2 + strb r5, [r0] + ldr r0, [r2, #0x30] + movs r1, #8 + orrs r0, r1 + str r0, [r2, #0x30] + cmp r7, #0 + bne _08075240 + strb r7, [r3] + ldr r6, _0807523C @ =script_08009ECC + b _08075244 + .align 2, 0 +_08075230: .4byte gPlayerScriptExecutionContext +_08075234: .4byte gPlayerEntity +_08075238: .4byte gPlayerState +_0807523C: .4byte script_08009ECC +_08075240: + strb r4, [r3] + ldr r6, _08075290 @ =script_08009EF0 +_08075244: + ldr r0, _08075294 @ =gPlayerState + adds r0, #0x39 + ldrb r0, [r0] + movs r1, #0 + cmp r0, #0 + bne _08075252 + movs r1, #2 +_08075252: + movs r0, #0x5b + movs r2, #0 + bl CreateObject + adds r4, r0, #0 + cmp r4, #0 + beq _08075270 + ldr r0, _08075298 @ =gPlayerEntity + adds r1, r4, #0 + bl CopyPosition + adds r0, r4, #0 + adds r1, r6, #0 + bl StartCutscene +_08075270: + ldr r4, _08075298 @ =gPlayerEntity + movs r1, #0xe + rsbs r1, r1, #0 + movs r2, #0x1c + rsbs r2, r2, #0 + adds r0, r4, #0 + bl CreateSpeechBubbleSleep + str r0, [r4, #0x6c] + cmp r0, #0 + beq _0807528C + movs r1, #3 + bl SetDefaultPriority +_0807528C: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08075290: .4byte script_08009EF0 +_08075294: .4byte gPlayerState +_08075298: .4byte gPlayerEntity + .syntax divided diff --git a/asm/non_matching/playerItemSword/sub_080A7A84.inc b/asm/non_matching/playerItemSword/sub_080A7A84.inc index b9593ac8..319ab249 100644 --- a/asm/non_matching/playerItemSword/sub_080A7A84.inc +++ b/asm/non_matching/playerItemSword/sub_080A7A84.inc @@ -88,7 +88,7 @@ _080A7AEC: bne _080A7B4C ldr r0, _080A7B44 @ =gPlayerEntity ldr r1, _080A7B48 @ =0x00000119 - bl sub_0800449C + bl SoundReqClipped b _080A7B54 .align 2, 0 _080A7B44: .4byte gPlayerEntity @@ -96,7 +96,7 @@ _080A7B48: .4byte 0x00000119 _080A7B4C: ldr r0, _080A7B90 @ =gPlayerEntity movs r1, #0x74 - bl sub_0800449C + bl SoundReqClipped _080A7B54: movs r0, #0xf movs r1, #0x1a diff --git a/asm/non_matching/sub_0804BF38.inc b/asm/non_matching/sub_0804BF38.inc index 76232201..0072ac3b 100644 --- a/asm/non_matching/sub_0804BF38.inc +++ b/asm/non_matching/sub_0804BF38.inc @@ -96,7 +96,7 @@ _0804BFE0: _0804BFE8: ldrh r0, [r4, #0xa] ldrh r1, [r4, #0xc] - bl sub_08080964 + bl InitScreenShake ldrh r0, [r4, #0xe] bl SoundReq pop {r3, r4, r5} diff --git a/asm/object10.s b/asm/object10.s index b1aad4e8..33333b8e 100644 --- a/asm/object10.s +++ b/asm/object10.s @@ -142,7 +142,7 @@ sub_080848C8: @ 0x080848C8 lsls r0, r1, #0x10 cmp r0, #0 beq _0808493C - ldr r0, _0808498C @ =gUnk_03004040 + ldr r0, _0808498C @ =gPlayerClones ldrb r1, [r4, #0xa] lsls r1, r1, #2 adds r1, r1, r0 @@ -182,7 +182,7 @@ _0808496A: _08084980: .4byte gPlayerState _08084984: .4byte gUnk_08120574 _08084988: .4byte gPlayerEntity -_0808498C: .4byte gUnk_03004040 +_0808498C: .4byte gPlayerClones _08084990: .4byte 0x00000315 _08084994: cmp r0, #4 @@ -195,7 +195,7 @@ _08084994: adds r2, #0x38 ldrb r2, [r2] bl sub_08000152 - ldr r1, _080849C0 @ =gUnk_03004040 + ldr r1, _080849C0 @ =gPlayerClones ldrb r0, [r4, #0xa] lsls r0, r0, #2 adds r0, r0, r1 @@ -205,7 +205,7 @@ _08084994: b _080849D6 .align 2, 0 _080849BC: .4byte 0x00000315 -_080849C0: .4byte gUnk_03004040 +_080849C0: .4byte gPlayerClones _080849C4: ldrb r2, [r4, #0x18] lsls r1, r2, #0x1e @@ -246,7 +246,7 @@ _080849F6: beq _08084A04 b _08084AF8 _08084A04: - ldr r0, _08084A40 @ =gUnk_03004040 + ldr r0, _08084A40 @ =gPlayerClones ldrb r1, [r4, #0xa] lsls r1, r1, #2 adds r1, r1, r0 @@ -276,7 +276,7 @@ _08084A04: b _08084AF8 .align 2, 0 _08084A3C: .4byte gPlayerState -_08084A40: .4byte gUnk_03004040 +_08084A40: .4byte gPlayerClones _08084A44: .4byte gPlayerEntity _08084A48: adds r0, r4, #0 @@ -585,7 +585,7 @@ _08084CA8: .4byte gPlayerState sub_08084CAC: @ 0x08084CAC push {r4, r5, r6, r7, lr} adds r5, r0, #0 - ldr r6, _08084D18 @ =gUnk_03004040 + ldr r6, _08084D18 @ =gPlayerClones ldrb r0, [r5, #0xa] lsls r0, r0, #2 adds r0, r0, r6 @@ -636,7 +636,7 @@ sub_08084CAC: @ 0x08084CAC orrs r0, r1 b _08084D30 .align 2, 0 -_08084D18: .4byte gUnk_03004040 +_08084D18: .4byte gPlayerClones _08084D1C: .4byte gUnk_080B4468 _08084D20: .4byte gRoomControls _08084D24: diff --git a/asm/pressurePlate.s b/asm/pressurePlate.s index a001c65a..37a2339d 100644 --- a/asm/pressurePlate.s +++ b/asm/pressurePlate.s @@ -250,7 +250,7 @@ _080889CA: ands r0, r1 cmp r0, #0 beq _08088A3A - ldr r6, _08088A4C @ =gUnk_03004040 + ldr r6, _08088A4C @ =gPlayerClones ldr r1, [r6] adds r0, r4, #0 bl sub_080177A0 @@ -305,4 +305,4 @@ _08088A3A: _08088A40: .4byte gPlayerEntity _08088A44: .4byte gUnk_08120BEC _08088A48: .4byte gPlayerState -_08088A4C: .4byte gUnk_03004040 +_08088A4C: .4byte gPlayerClones diff --git a/asm/stairsInteract.s b/asm/stairsInteract.s deleted file mode 100644 index 025c0ec3..00000000 --- a/asm/stairsInteract.s +++ /dev/null @@ -1,129 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080731D8 -sub_080731D8: @ 0x080731D8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - movs r2, #0 - strb r0, [r4, #0x10] - movs r1, #0 - movs r0, #0x40 - strh r0, [r4, #0x24] - strb r1, [r4, #0x14] - ldrh r1, [r4, #0x2e] - movs r5, #0x10 - rsbs r5, r5, #0 - adds r0, r5, #0 - ands r0, r1 - movs r7, #8 - orrs r0, r7 - strh r0, [r4, #0x2e] - strh r2, [r4, #0x2c] - ldr r6, _08073214 @ =gPlayerState - adds r0, r6, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #0 - bne _08073218 - movs r0, #1 - strb r0, [r4, #0xd] - b _0807329A - .align 2, 0 -_08073214: .4byte gPlayerState -_08073218: - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #3 - strb r0, [r4, #0xd] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x7e - strh r0, [r1] - ldrh r0, [r4, #0x32] - subs r0, #0x10 - strh r0, [r4, #0x32] - adds r0, r4, #0 - movs r1, #0x70 - movs r2, #1 - movs r3, #0 - bl CreateObjectWithParent - str r0, [r4, #0x54] - adds r0, r6, #0 - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #7 - bne _08073270 - ldrh r1, [r4, #0x32] - adds r0, r5, #0 - ands r0, r1 - adds r0, #8 - strh r0, [r4, #0x32] - ldrh r1, [r4, #0x2e] - adds r0, r5, #0 - ands r0, r1 - strh r0, [r4, #0x2e] - strb r7, [r4, #0x15] - movs r0, #2 - strb r0, [r4, #0x14] - ldr r0, _0807326C @ =0x00000187 - bl SoundReq - b _08073294 - .align 2, 0 -_0807326C: .4byte 0x00000187 -_08073270: - ldrh r1, [r4, #0x32] - adds r0, r5, #0 - ands r0, r1 - adds r0, #2 - strh r0, [r4, #0x32] - ldrh r1, [r4, #0x2e] - adds r0, r5, #0 - ands r0, r1 - adds r0, #0xf - strh r0, [r4, #0x2e] - movs r0, #0x18 - strb r0, [r4, #0x15] - movs r0, #6 - strb r0, [r4, #0x14] - movs r0, #0xc4 - lsls r0, r0, #1 - bl SoundReq -_08073294: - adds r0, r4, #0 - bl sub_08066DE4 -_0807329A: - ldr r2, _080732AC @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _080732B4 - ldr r0, _080732B0 @ =0x00000404 - b _080732B8 - .align 2, 0 -_080732AC: .4byte gPlayerState -_080732B0: .4byte 0x00000404 -_080732B4: - movs r0, #0x82 - lsls r0, r0, #1 -_080732B8: - strh r0, [r2, #8] - ldr r1, _080732CC @ =gRoomControls - movs r0, #0 - str r0, [r1, #0x30] - bl sub_0807A108 - bl ResetPlayer - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080732CC: .4byte gRoomControls diff --git a/data/data_0811B9E0.s b/data/data_0811B9E0.s deleted file mode 100644 index fed89541..00000000 --- a/data/data_0811B9E0.s +++ /dev/null @@ -1,69 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0811BC08:: @ 0811BC08 - .4byte sub_08073468 - .4byte sub_080734D4 - .4byte sub_08073504 - .4byte sub_08073584 - .4byte sub_0807379C - .4byte sub_080737BC - .4byte sub_0807380C - .4byte sub_08073884 - -gUnk_0811BC28:: @ 0811BC28 - .incbin "data_0811B9E0/gUnk_0811BC28.bin" - -gUnk_0811BC30:: @ 0811BC30 - .incbin "data_0811B9E0/gUnk_0811BC30.bin" - -gUnk_0811BC38:: @ 0811BC38 - .incbin "data_0811B9E0/gUnk_0811BC38.bin" - -gUnk_0811BC40:: @ 0811BC40 - .incbin "data_0811B9E0/gUnk_0811BC40.bin" - -gUnk_0811BC48:: @ 0811BC48 - .4byte sub_08073924 - .4byte sub_08073968 - .4byte sub_080739EC - .4byte sub_08073A94 - .4byte sub_08073B8C - .4byte sub_08073C30 - -gUnk_0811BC60:: @ 0811BC60 - .4byte sub_08073C80 - .4byte sub_08073D20 - .4byte sub_08073F04 - .4byte sub_08073F4C - .4byte sub_08073FD0 - .4byte sub_08074018 - .4byte sub_08074060 - .4byte sub_080740D8 - -gUnk_0811BC80:: @ 0811BC80 - .incbin "data_0811B9E0/gUnk_0811BC80.bin" - -gUnk_0811BC88:: @ 0811BC88 - .4byte sub_08074C68 - .4byte sub_08074CF8 - .4byte sub_08074F00 - .4byte sub_080750F4 - -gUnk_0811BC98:: @ 0811BC98 - .4byte sub_08074F1C - .4byte sub_08074F2C - .4byte sub_08074F44 - .4byte sub_08074F8C - .4byte sub_08074FEC - .4byte sub_0807501C - .4byte sub_0807508C - -gUnk_0811BCB4:: @ 0811BCB4 - .4byte sub_08075110 - .4byte sub_0807513C - .4byte sub_0807518C - .4byte sub_080751B4 diff --git a/data/data_0811BE38.s b/data/data_0811BE38.s index 2dc78e95..5a8aebd2 100644 --- a/data/data_0811BE38.s +++ b/data/data_0811BE38.s @@ -90,52 +90,52 @@ gUnk_0811C118:: @ 0811C118 .incbin "data_0811BE38/gUnk_0811C118.bin" gUnk_0811C120:: @ 0811C120 - .4byte nullsub_112 - .4byte sub_08074200 + .4byte SurfaceAction_DoNothing + .4byte SurfaceAction_Pit .4byte 00000000 .4byte 00000000 - .4byte sub_0807422C - .4byte sub_08074238 - .4byte sub_080742AC - .4byte sub_080742E4 - .4byte sub_08074314 - .4byte sub_08074338 - .4byte sub_0807435C - .4byte sub_08074380 - .4byte sub_08074638 - .4byte sub_08074B4C - .4byte sub_08074B74 - .4byte sub_08074BA0 - .4byte sub_08074BCC - .4byte sub_08074678 - .4byte nullsub_112 - .4byte nullsub_112 - .4byte sub_080743D4 - .4byte sub_0807441C - .4byte sub_0807450C - .4byte sub_08074584 - .4byte sub_080745B4 - .4byte sub_0807479C - .4byte sub_080748C4 - .4byte sub_080748DC - .4byte sub_08074918 + .4byte SurfaceAction_SlopeGndGndVertical + .4byte SurfaceAction_SlopeGndGndHorizontal + .4byte SurfaceAction_6 + .4byte SurfaceAction_7 + .4byte SurfaceAction_MinishDoorFront + .4byte SurfaceAction_MinishDoorBack + .4byte SurfaceAction_A + .4byte SurfaceAction_B + .4byte SurfaceAction_SlopeGndWater + .4byte SurfaceAction_D + .4byte SurfaceAction_E + .4byte SurfaceAction_F + .4byte SurfaceAction_10 + .4byte SurfaceAction_Swamp + .4byte SurfaceAction_DoNothing + .4byte SurfaceAction_DoNothing + .4byte SurfaceAction_14 + .4byte SurfaceAction_CloneTile + .4byte SurfaceAction_16 + .4byte SurfaceAction_Ice + .4byte SurfaceAction_ShallowWater + .4byte SurfaceAction_Water + .4byte SurfaceAction_Button + .4byte SurfaceAction_1B + .4byte SurfaceAction_1C .4byte 00000000 - .4byte sub_0807496C + .4byte SurfaceAction_Ladder .4byte 00000000 - .4byte sub_08074A48 - .4byte sub_0807450C - .4byte nullsub_504 - .4byte sub_080742AC - .4byte sub_080742AC - .4byte sub_08074A9C - .4byte sub_08074AF4 - .4byte sub_08074B18 - .4byte sub_0807422C - .4byte sub_08074238 - .4byte sub_080749D4 - .4byte sub_0807493C - .4byte sub_080749A8 - .4byte sub_08074A9C + .4byte SurfaceAction_20 + .4byte SurfaceAction_16 + .4byte SurfaceAction_22 + .4byte SurfaceAction_6 + .4byte SurfaceAction_6 + .4byte SurfaceAction_Dust + .4byte SurfaceAction_26 + .4byte SurfaceAction_Hole + .4byte SurfaceAction_SlopeGndGndVertical + .4byte SurfaceAction_SlopeGndGndHorizontal + .4byte SurfaceAction_AutoLadder + .4byte SurfaceAction_ClimbWall + .4byte SurfaceAction_2C + .4byte SurfaceAction_Dust gUnk_0811C1D8:: @ 0811C1D8 .4byte gUnk_0811C240 diff --git a/include/asm.h b/include/asm.h index 99ad082a..360c0fb1 100644 --- a/include/asm.h +++ b/include/asm.h @@ -6,8 +6,9 @@ struct Entity_; extern u32 Random(void); -extern void sub_08000152(u32); +extern void sub_08000152(u32, u32, u32); extern void SetTile(u32 index, u32 position, u32 layer); +extern u32 sub_080002D0(struct Entity_*); extern void sub_08001242(struct Entity_*); extern void sub_08001290(struct Entity_*, u32); extern void sub_08001324(struct Entity_*); @@ -15,11 +16,12 @@ extern u32 sub_08002632(struct Entity_*); extern u32 GravityUpdate(struct Entity_*, u32); extern u32 sub_080043E8(struct Entity_*); extern void sub_08004484(struct Entity_*, struct Entity_*); -extern u32 sub_080045D4(s16, s16, u32, u32); +extern u32 sub_080045D4(u32, u32, u32, u32); extern u32 sub_080045DA(s32, s32); extern void sub_08004596(struct Entity_*, u32); extern u32 sub_080045B4(struct Entity_*, u32, u32); extern u32 EntityInRectRadius(struct Entity_*, struct Entity_*, u32, u32); extern void UpdateAnimationVariableFrames(struct Entity_*, u32); +extern u32 sub_080086B4(u32, u32, u8*); #endif // ASM_H diff --git a/include/functions.h b/include/functions.h index 23e0a7cc..536b36ed 100644 --- a/include/functions.h +++ b/include/functions.h @@ -145,7 +145,7 @@ extern bool32 LoadSwapGFX(Entity*, u16, u32); extern u32 sub_08016A30(Entity*); extern void sub_08077728(); extern void sub_0807AEE4(); -extern u32 sub_08078EFC(); +extern u32 RunQueuedAction(); extern void sub_0807921C(); extern void UpdateFloorType(); extern void sub_08079938(); diff --git a/include/player.h b/include/player.h index 943d7f5e..f664b6f3 100644 --- a/include/player.h +++ b/include/player.h @@ -34,7 +34,7 @@ enum PlayerActions { PLAYER_INHOLE, PLAYER_08072C9C, PLAYER_08074C44, - PLAYER_08072F34, + PLAYER_CLIMB, PLAYER_USEENTRANCE, PLAYER_PARACHUTE, }; @@ -99,12 +99,23 @@ enum PlayerFlags { PL_DROWNING = (1 << 2), PL_NO_CAP = (1 << 3), PL_USE_PORTAL = (1 << 5), + PL_HIDDEN = (1 << 6), PL_MINISH = (1 << 7), + PL_FALLING = (1 << 9), PL_BURNING = (1 << 10), + PL_FROZEN = (1 << 11), + PL_DRUGGED = (1 << 14), PL_ROLLING = (1 << 18), + PL_TRAPPED = (1 << 19), PL_IN_HOLE = (1 << 20), + PL_RELEASED = (1 << 21), + PL_CLONING = (1 << 22), PL_USE_LANTERN = (1 << 23), + PL_PARACHUTE = (1 << 24), + PL_MINECART = (1 << 26), + PL_SWORD_THRUST = (1 << 27), PL_USE_OCARINA = (1 << 28), + PL_CLIMBING = (1 << 29), }; enum SurfaceType { @@ -125,7 +136,7 @@ enum SurfaceType { SURFACE_E, SURFACE_F, SURFACE_10, - SURFACE_11, + SURFACE_SWAMP, SURFACE_DOOR, SURFACE_DOOR_13, SURFACE_14, @@ -137,9 +148,9 @@ enum SurfaceType { SURFACE_BUTTON, SURFACE_1B, SURFACE_1C, - SURFACE_1D, + SURFACE_1D, // nulled SURFACE_LADDER, - SURFACE_1F, + SURFACE_1F, // nulled SURFACE_20, SURFACE_21, SURFACE_22, @@ -165,7 +176,7 @@ typedef struct { /*0x08*/ u16 animation; /*0x0a*/ u8 field_0xa; /*0x0b*/ u8 keepFacing; - /*0x0c*/ u8 playerAction; + /*0x0c*/ u8 queued_action; /*0x0d*/ u8 field_0xd; /*0x0e*/ u8 field_0xe; /*0x0f*/ u8 hurtBlinkSpeed; @@ -188,7 +199,8 @@ typedef struct { /*0x2c*/ Entity* item; /*0x30*/ u32 flags; /*0x34*/ u8 field_0x34[2]; - /*0x36*/ s16 field_0x36; + /*0x36*/ u8 field_0x36; + /*0x37*/ u8 field_0x37; /*0x38*/ u8 field_0x38; /*0x39*/ u8 field_0x39; /*0x3a*/ u8 field_0x3a; diff --git a/include/room.h b/include/room.h index 8a837b91..64729622 100644 --- a/include/room.h +++ b/include/room.h @@ -173,7 +173,7 @@ typedef enum { } TileEntityType; extern void SetTileType(u32, u32, u32); -extern void sub_08080964(u32 time, u32 magnitude); // shake screen +extern void InitScreenShake(u32 time, u32 magnitude); extern void* GetCurrentRoomProperty(u32); extern void LoadRoomTileEntities(); diff --git a/linker.ld b/linker.ld index 6e10500c..225731fc 100644 --- a/linker.ld +++ b/linker.ld @@ -225,7 +225,7 @@ SECTIONS { . = 0x00004010; gUnk_03004010 = .; . = 0x00004020; gUnk_03004020 = .; . = 0x00004030; gUnk_03004030 = .; - . = 0x00004040; gUnk_03004040 = .; + . = 0x00004040; gPlayerClones = .; . = 0x0000404C; SoundMainRAM_Buffer = .; . = 0x0000404D; gUnk_0300404D = .; . = 0x000043D0; gSoundInfo = .; @@ -657,8 +657,7 @@ SECTIONS { src/playerItem/playerItemPacciCane.o(.text); asm/code_0807059C.o(.text); src/player.o(.text); - asm/stairsInteract.o(.text); - asm/code_080732D0.o(.text); + src/item.o(.text); src/item/itemDebug.o(.text); src/item/itemSword.o(.text); src/item/itemLantern.o(.text); @@ -1382,7 +1381,6 @@ SECTIONS { data/const/playerItem/playerItem12.o(.rodata); data/const/playerItem/playerItemPacciCane.o(.rodata); src/player.o(.rodata); - data/data_0811B9E0.o(.rodata); src/item.o(.rodata); data/const/item/itemSword.o(.rodata); data/const/item/itemLantern.o(.rodata); diff --git a/src/code_0808091C.c b/src/code_0808091C.c index ab3ceb11..2b4dceb0 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -55,7 +55,7 @@ u32* GetLayerByIndex(u32 param_1) { } } -void sub_08080964(u32 time, u32 magnitude) { +void InitScreenShake(u32 time, u32 magnitude) { gRoomControls.screenShakeTime = time; gRoomControls.screenShakeMagnitude = magnitude & 7; } diff --git a/src/collision.c b/src/collision.c index 3dac2783..1c22f7d6 100644 --- a/src/collision.c +++ b/src/collision.c @@ -7,6 +7,7 @@ #include "functions.h" #include "enemy.h" #include "effects.h" +#include "object.h" extern u8 gCollidableCount; extern u8 gUnk_080B3740[]; @@ -30,7 +31,7 @@ extern ColSettings gCollisionMtx[173 * 34]; extern void gDoCollision(void); u32 sub_08081420(Entity*); -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); s32 sub_08018308(Entity*, Entity*, u32, ColSettings*); void sub_08079D84(void); void sub_080180BC(Entity*, Entity*); @@ -232,7 +233,7 @@ s32 sub_08017874(Entity* a, Entity* b) { if (newDmg <= 0) newDmg = 1; v5 = ModHealth(-newDmg); - sub_0800449C(a, 122); + SoundReqClipped(a, 122); } else { v6 = b->damage; if (b->kind == 8) { @@ -248,9 +249,9 @@ s32 sub_08017874(Entity* a, Entity* b) { v5 = a->health - v6; if (a->kind == 3) { if ((a->field_0x6c.HALF.HI & 1) != 0) - sub_0800449C(a, 295); + SoundReqClipped(a, 295); else - sub_0800449C(a, 254); + SoundReqClipped(a, 254); } } if (v5 <= 0) { @@ -389,11 +390,11 @@ s32 sub_08017B58(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) } s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { - if ((gPlayerState.flags & (0x1 | 0x80 | 0x400 | 0x1000)) == 0) { - Entity* e = CreateObject(66, 1, 0); + if ((gPlayerState.flags & (PL_BUSY | PL_MINISH | PL_BURNING | 0x1000)) == 0) { + Entity* e = CreateObject(OBJECT_42, 1, 0); if (e != NULL) { e->child = org; - gPlayerState.flags |= 0x400; + gPlayerState.flags |= PL_BURNING; org->animationState = (direction ^ 0x10) >> 2; } } @@ -408,12 +409,12 @@ s32 sub_08017BBC(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) } s32 sub_08017C40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { - if ((gPlayerState.flags & (0x1 | 0x80 | 0x800 | 0x1000)) == 0 && gPlayerState.playerAction == 0) { + if ((gPlayerState.flags & (PL_BUSY | PL_MINISH | PL_FROZEN | 0x1000)) == 0 && gPlayerState.queued_action == 0) { if (org->action == 1 || org->action == 24) { tgt->damage = 4; org->health = sub_08017874(org, tgt); - gPlayerState.flags = 0x800; - gPlayerState.playerAction = 13; + gPlayerState.flags = PL_FROZEN; + gPlayerState.queued_action = PLAYER_FROZEN; } } org->knockbackDuration = 12; @@ -533,7 +534,7 @@ s32 sub_08017F40(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) if (org == &gPlayerEntity) { if (sub_08079F8C() && #ifdef EU - (gPlayerState.flags & 0x81) == 0 && + (gPlayerState.flags & (PL_MINISH | PL_BUSY)) == 0 && #else (gPlayerState.flags & PL_MINISH) == 0 && #endif @@ -622,18 +623,18 @@ s32 sub_080180E8(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) s32 sub_08018168(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) { if (tgt->field_0x43 == 0) { if (org == &gPlayerEntity) { - if (((sub_08079F8C() != 0) && + if (sub_08079F8C() && #ifdef EU - ((gPlayerState.flags & 0x81) == 0)) && + (gPlayerState.flags & (PL_MINISH | PL_BUSY)) == 0 && #else - ((gPlayerState.flags & 0x40080) == 0)) && + (gPlayerState.flags & (PL_MINISH | PL_ROLLING)) == 0 && #endif - (gPlayerState.swimState == 0)) { + gPlayerState.swimState == 0) { gPlayerState.field_0x1a[0] |= 0x80; gPlayerState.field_0xa |= 0x80; gPlayerState.flags |= 0x100; gPlayerState.jumpStatus = 0; - gPlayerEntity.flags &= ~0x80; + COLLISION_OFF(&gPlayerEntity); gPlayerEntity.spriteRendering.b3 = tgt->spriteRendering.b3; gPlayerEntity.spriteOrientation.flipY = tgt->spriteOrientation.flipY; gPlayerEntity.iframes = 0xff; @@ -749,7 +750,7 @@ s32 sub_08018308(Entity* org, Entity* tgt, u32 direction, ColSettings* settings) } } else if (org->id == 3) { if (settings->_9) { - sub_0800449C(tgt, 254); + SoundReqClipped(tgt, 254); } } else if (org->id == 5) { gPlayerEntity.iframes = 0x80; diff --git a/src/enemy/beetle.c b/src/enemy/beetle.c index b6988f6c..de27657c 100644 --- a/src/enemy/beetle.c +++ b/src/enemy/beetle.c @@ -213,7 +213,7 @@ void sub_08021AD8(Entity* this) { } void sub_08021B64(Entity* this) { - if (gPlayerState.flags & 4) { + if (gPlayerState.flags & PL_DROWNING) { this->action = 3; this->z.WORD = 0; InitializeAnimation(this, 2); diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c index 912f0f61..7102f85d 100644 --- a/src/enemy/gibdo.c +++ b/src/enemy/gibdo.c @@ -21,7 +21,7 @@ void sub_08037A14(); extern void sub_0804A4E4(Entity*, Entity*); extern Entity* sub_08049DF4(u32); u32 sub_0804A044(Entity*, Entity*, u32); -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern void (*const gGibdo[6])(Entity*); extern void (*const gUnk_080CF2AC[9])(Entity*); @@ -347,8 +347,8 @@ void sub_08037A58(Entity* this) { } void sub_08037ACC(Entity* this) { - gPlayerState.flags &= 0xFFFFFEFF; - gPlayerEntity.flags |= 0x80; + gPlayerState.flags &= ~0x100; + COLLISION_ON(&gPlayerEntity); gPlayerEntity.iframes = 0x1e; gPlayerEntity.knockbackDirection = DirectionFromAnimationState(this->animationState); gPlayerEntity.knockbackDuration = 4; @@ -359,7 +359,7 @@ void sub_08037B10(Entity* this) { u32 h; gPlayerEntity.iframes = 0xc; h = ModHealth(-8); - sub_0800449C(&gPlayerEntity, 0x7a); + SoundReqClipped(&gPlayerEntity, 0x7a); if (h == 0) { sub_08037A58(this); this->field_0x76.HALF.LO = 0xf0; diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c index 494b577b..9539b36d 100644 --- a/src/enemy/helmasaur.c +++ b/src/enemy/helmasaur.c @@ -186,7 +186,7 @@ void sub_0802BE18(Entity* this) { void sub_0802BE48(Entity* this) { if (!sub_080AEFE0(this)) { sub_0802C218(this); - sub_08080964(8, 0); + InitScreenShake(8, 0); } else { GetNextFrame(this); sub_0802C1CC(this); diff --git a/src/enemy/lakituCloud.c b/src/enemy/lakituCloud.c index f391c5ee..bb9e6b76 100644 --- a/src/enemy/lakituCloud.c +++ b/src/enemy/lakituCloud.c @@ -11,7 +11,7 @@ extern void (*const gUnk_080D0418[6])(Entity*); extern void (*const gUnk_080D0430[3])(Entity*); extern void (*const gUnk_080D043C[3])(Entity*); -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern void sub_0803CE14(Entity*); extern void sub_0803CE3C(Entity*); extern void sub_08079D84(void); @@ -56,7 +56,7 @@ void sub_0803CD40(Entity* this) { ModHealth(-2); - sub_0800449C(&gPlayerEntity, 122); + SoundReqClipped(&gPlayerEntity, 122); sub_08079D84(); sub_0803CE3C(this); diff --git a/src/enemy/mazaalBracelet.c b/src/enemy/mazaalBracelet.c index 2adfed33..584dd185 100644 --- a/src/enemy/mazaalBracelet.c +++ b/src/enemy/mazaalBracelet.c @@ -20,7 +20,7 @@ void sub_0803B798(void); void sub_0803BA8C(Entity*, u32); void sub_0803B724(Entity*); -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); void sub_0803A170(Entity*); void sub_0803A188(Entity*); @@ -434,7 +434,7 @@ void sub_0803A740(Entity* this) { this->actionDelay = 10; this->parent->field_0x7c.BYTES.byte1 |= 0x40; sub_0803B8E8(this, 0x13); - sub_08080964(10, 0); + InitScreenShake(10, 0); SoundReq(SFX_158); } } @@ -713,7 +713,7 @@ void sub_0803ACC0(Entity* this) { this->z.HALF.HI = 0; this->actionDelay = 0xc; this->subAction = 3; - sub_08080964(8, 0); + InitScreenShake(8, 0); SoundReq(SFX_158); sub_0803B804(this); } @@ -735,7 +735,7 @@ void sub_0803ACC0(Entity* this) { this->z.HALF.HI = 0; this->action = 0x1a; this->actionDelay = 0x3c; - sub_08080964(0x1e, 0); + InitScreenShake(0x1e, 0); SoundReq(SFX_158); sub_0803B804(this); return; @@ -859,7 +859,7 @@ void sub_0803AFE0(Entity* this) { this->actionDelay = 0xf0; *(u8*)&this->cutsceneBeh = 3; this->z.HALF.HI = 0; - sub_08080964(0xa0, 0); + InitScreenShake(0xa0, 0); SoundReq(SFX_158); } } @@ -931,7 +931,7 @@ void sub_0803B144(Entity* this) { this->action = 0x2a; InitializeAnimation(this, 0x16); sub_0803B8E8(this, 0x14); - sub_08080964(8, 0); + InitScreenShake(8, 0); } } @@ -1238,7 +1238,7 @@ void sub_0803B798(void) { void sub_0803B804(Entity* this) { gPlayerEntity.iframes = 30; ModHealth(-4); - sub_0800449C(&gPlayerEntity, 0x7a); + SoundReqClipped(&gPlayerEntity, 0x7a); } void sub_0803B824(Entity* this) { diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c index 553d5053..2b59e960 100644 --- a/src/enemy/mazaalHead.c +++ b/src/enemy/mazaalHead.c @@ -320,7 +320,7 @@ void sub_080342C8(Entity* this) { this->field_0x7c.HALF.HI = 0x708; this->field_0x7c.BYTES.byte1 = 0; this->field_0x80.HALF.HI = 0; - sub_08080964(0x1e, 0); + InitScreenShake(0x1e, 0); SoundReq(SFX_1A1); } } diff --git a/src/enemy/mazaalMacro.c b/src/enemy/mazaalMacro.c index ed28d6c8..64a25711 100644 --- a/src/enemy/mazaalMacro.c +++ b/src/enemy/mazaalMacro.c @@ -195,7 +195,7 @@ void sub_08034F70(Entity* this) { void sub_08034FA0(Entity* this) { if (0 < this->iframes) { this->child->iframes = this->iframes; - sub_08080964(0xc, 1); + InitScreenShake(0xc, 1); } switch (this->type2) { case 0: diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c index 9ffd49fa..3a0425ef 100644 --- a/src/enemy/moldworm.c +++ b/src/enemy/moldworm.c @@ -1,7 +1,7 @@ #include "enemy.h" #include "functions.h" -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern bool32 sub_08023A38(u32); extern void sub_08023990(Entity*, u32, u32); extern void sub_08023A88(Entity*, u32); @@ -263,7 +263,7 @@ void sub_0802351C(Entity* this) { if (this->field_0x7c.BYTES.byte3 == 0) { if (this->type2 == 0) { gPlayerEntity.animationState = this->animationState & 7; - gPlayerState.flags |= 0x80000; + gPlayerState.flags |= PL_TRAPPED; PositionRelative(this, &gPlayerEntity, 0, gUnk_080CBC90[this->animationState & 7] << 0x10); gPlayerEntity.spriteOffsetY = -gUnk_080CBC90[this->animationState & 7]; } @@ -398,14 +398,14 @@ void sub_08023894(Entity* this) { this->parent->field_0x7c.BYTES.byte3 = 1; InitializeAnimation(this, this->animationState); if (this->parent->type2 == 0) { - gPlayerState.flags |= 0x200000; + gPlayerState.flags |= PL_RELEASED; gPlayerEntity.x.HALF.HI = this->x.HALF.HI; gPlayerEntity.y.HALF.HI = this->y.HALF.HI; gPlayerEntity.direction = DirectionRoundUp(GetFacingDirection(*(Entity**)&this->field_0x74, this)); gPlayerEntity.animationState = gPlayerEntity.direction >> 2; gPlayerEntity.iframes = 12; ModHealth(-0x10); - sub_0800449C(&gPlayerEntity, 0x7a); + SoundReqClipped(&gPlayerEntity, 0x7a); } } } diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c index 23dca6d4..fb16b706 100644 --- a/src/enemy/octorokBoss.c +++ b/src/enemy/octorokBoss.c @@ -811,7 +811,7 @@ void OctorokBoss_Action1_ChargeAttack(Entity* this) { this->knockbackDirection = this->direction ^ 0x10; GET_HELPER(this)->fallingStonesTimer += 0x3c; OctorokBoss_SetAttackTimer(this); - sub_08080964(0x3c, 0); + InitScreenShake(0x3c, 0); SoundReq(SFX_158); SoundReq(SFX_14C); } @@ -946,7 +946,7 @@ void OctorokBoss_ExecuteAttackVacuum(Entity* this) { } } } else { - gPlayerState.flags &= 0xfffff7ff; + gPlayerState.flags &= ~PL_FROZEN; } } } @@ -1077,7 +1077,7 @@ void OctorokBoss_Burning_SubAction1(Entity* this) { this->field_0x46 = 0x200; this->knockbackDirection = this->direction ^ 0x10; GET_HELPER(this)->fallingStonesTimer += 0x1e; - sub_08080964(0x1e, 0); + InitScreenShake(0x1e, 0); SoundReq(SFX_158); SoundReq(SFX_14C); } diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c index 54f43381..fc987dd7 100644 --- a/src/enemy/pesto.c +++ b/src/enemy/pesto.c @@ -5,7 +5,7 @@ #include "save.h" extern u32 sub_080002E0(u16, u32); -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern u32 sub_08049F1C(Entity*, Entity*, u32); extern u32 PlayerInRange(Entity*, u32, u32); extern void sub_080AEFB4(Entity*); @@ -809,7 +809,7 @@ NONMATCH("asm/non_matching/pesto/sub_08024E4C.inc", void sub_08024E4C(Entity* th ResetPlayer(); gPlayerState.flags |= 0x100; gPlayerState.field_0xa |= 0x80; - gPlayerState.playerAction = 0xe; + gPlayerState.queued_action = PLAYER_0807204C; gPlayerState.field_0x38 = 0x14; gPlayerState.field_0x39 = 1; *(u8*)&gPlayerState.field_0x3a = 0; @@ -821,7 +821,7 @@ NONMATCH("asm/non_matching/pesto/sub_08024E4C.inc", void sub_08024E4C(Entity* th this->field_0x86.HALF.HI++; player->iframes = 8; ModHealth(-2); - sub_0800449C(player, 0x7a); + SoundReqClipped(player, 0x7a); } } } @@ -830,10 +830,10 @@ END_NONMATCH void sub_08024F50(Entity* this) { gPlayerState.field_0xa = 0; - gPlayerState.flags &= 0xfffffeff; + gPlayerState.flags &= ~0x100; CopyPosition(this, &gPlayerEntity); gPlayerEntity.action = 1; - gPlayerEntity.flags |= 0x80; + COLLISION_ON(&gPlayerEntity); gPlayerEntity.iframes = -0x3c; gPlayerEntity.direction = gPlayerEntity.animationState << 2; gPlayerEntity.speed = 0; diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c index 926648bf..ee274ac7 100644 --- a/src/enemy/rupeeLike.c +++ b/src/enemy/rupeeLike.c @@ -233,7 +233,7 @@ void sub_080296C8(Entity* this) { void sub_080296D8(Entity* this) { gPlayerState.jumpStatus = 0x41; - gPlayerState.flags &= 0xffffffef; + gPlayerState.flags &= ~0x10; gPlayerEntity.flags |= 0x80; gPlayerEntity.zVelocity = 0x18000; gPlayerEntity.iframes = 0xa6; diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c index c8f97752..f3ccf3bb 100644 --- a/src/enemy/vaatiRebornEnemy.c +++ b/src/enemy/vaatiRebornEnemy.c @@ -662,7 +662,7 @@ void VaatiRebornEnemyType1PreAction(Entity* this) { } if (0 < this->iframes) { SoundReq(0x127); - sub_08080964(0xc, 1); + InitScreenShake(0xc, 1); if (this->actionDelay == 0) this->actionDelay = 0x48; } diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c index c9198d08..8c80bbbd 100644 --- a/src/enemy/vaatiTransfigured.c +++ b/src/enemy/vaatiTransfigured.c @@ -266,7 +266,7 @@ void VaatiTransfiguredType0Action3(Entity* this) { this->actionDelay = 0xc0; COLLISION_ON(this); SoundReq(SFX_14C); - sub_08080964(0x14, 4); + InitScreenShake(0x14, 4); break; case 1: if (--this->actionDelay == 0) { @@ -321,7 +321,7 @@ void VaatiTransfiguredType0Action3(Entity* this) { this->field_0x86.HALF.LO = 0; sub_080408EC(this); SoundReq(SFX_14C); - sub_08080964(0x1e, 4); + InitScreenShake(0x1e, 4); } else { if (this->field_0xf != 0) { if (--this->field_0xf == 0) { @@ -399,7 +399,7 @@ void VaatiTransfiguredType0Action4(Entity* this) { this->field_0xf = 1; } SoundReq(SFX_14C); - sub_08080964(0x1e, 4); + InitScreenShake(0x1e, 4); break; case 2: if (--this->actionDelay == 0) { @@ -1069,7 +1069,7 @@ void sub_080409B0(Entity* this) { } } else { if (((this->bitfield & 0x80) != 0) && (0 < this->iframes)) { - sub_08080964(0xc, 1); + InitScreenShake(0xc, 1); SoundReq(SFX_BOSS_HIT); } if ((this->bitfield == 0x8a) && (gPlayerState.field_0xa0[0] == 5)) { diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c index d216ba7f..eef8e73e 100644 --- a/src/enemy/vaatiWrath.c +++ b/src/enemy/vaatiWrath.c @@ -475,7 +475,7 @@ void VaatiWrathType0ActionB(Entity* this) { this->actionDelay = 0xf0; this->health = 8; this->hitType = 0x38; - sub_08080964(0x14, 0); + InitScreenShake(0x14, 0); InitAnimationForceUpdate(this, 6); InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x16); } @@ -709,7 +709,7 @@ void sub_08041E78(Entity* this) { fx->x.HALF.HI += *temp++; fx->y.HALF.HI += *temp; fx->spritePriority.b0 = 3; - sub_08080964(4, 0); + InitScreenShake(4, 0); } } } diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c index 111e4f04..6b399d2d 100644 --- a/src/enemy/wisp.c +++ b/src/enemy/wisp.c @@ -32,7 +32,7 @@ void sub_08033564(Entity* this) { this->spriteSettings.draw = FALSE; COLLISION_OFF(this); this->field_0x7c.HALF.LO = 0x27c; - gPlayerState.flags |= 0x4000; + gPlayerState.flags |= PL_DRUGGED; gSave.stats.effect = this->type + 1; gSave.stats.effectTimer = 600; if (this->type == 0) { diff --git a/src/enemyUtils.c b/src/enemyUtils.c index 6d8acd97..956ba639 100644 --- a/src/enemyUtils.c +++ b/src/enemyUtils.c @@ -1,6 +1,7 @@ #include "entity.h" #include "definitions.h" #include "functions.h" +#include "object.h" extern EnemyDefinition gEnemyDefinitions[]; @@ -46,7 +47,7 @@ bool32 EnemyInit(Entity* this) { if ((this->field_0x6c.HALF.HI & 0x20) != 0) { u32 uVar4 = gUnk_080D3E74[this->id >> 3] >> ((this->id & 7) << 1) & 3; if (uVar4 != 0) { - Entity* object = CreateObject(0xa9, uVar4 - 1, 0); + Entity* object = CreateObject(OBJECT_A9, uVar4 - 1, 0); if (object != NULL) { object->actionDelay = this->flags; object->field_0xf = this->spriteSettings.draw; diff --git a/src/interrupts.c b/src/interrupts.c index 0e42d94d..c2855c46 100644 --- a/src/interrupts.c +++ b/src/interrupts.c @@ -21,7 +21,7 @@ extern u16* gUnk_0200B650; extern u8 gUpdateVisibleTiles; extern u8 gUnk_03003DF0[]; extern u8 gUnk_03003BE0; -extern Entity* gUnk_03004040[3]; +extern Entity* gPlayerClones[3]; extern u16 gUnk_080B2CD8[]; extern u32 gUnk_03000FBC; @@ -181,16 +181,16 @@ void WaitForNextFrame(void) { void PlayerUpdate(Entity* this) { if (gSave.stats.effect != 0) - gPlayerState.flags |= 0x4000; + gPlayerState.flags |= PL_DRUGGED; else - gPlayerState.flags &= ~0x4000; + gPlayerState.flags &= ~PL_DRUGGED; if (CheckDontUpdate(this) == 0) { - if ((gPlayerState.flags & 0x80000) != 0) { + if (gPlayerState.flags & PL_TRAPPED) { sub_08077B20(); - if ((gPlayerState.flags & 0x200000) != 0) { - gPlayerState.playerAction = PLAYER_ROLL; - gPlayerState.flags &= ~0x80000; + if (gPlayerState.flags & PL_RELEASED) { + gPlayerState.queued_action = PLAYER_ROLL; + gPlayerState.flags &= ~PL_TRAPPED; gPlayerState.hurtBlinkSpeed = 240; COLLISION_ON(this); } else { @@ -223,10 +223,10 @@ void HandlePlayerLife(Entity* this) { if ((gPlayerEntity.bitfield & 0x80) && (gPlayerEntity.iframes > 0)) SoundReq(SFX_86); - gPlayerState.flags &= ~(0x2000000 | 0x200); + gPlayerState.flags &= ~(0x2000000 | PL_FALLING); if (gPlayerState.flags & PL_BURNING) ResetPlayer(); - if ((gPlayerState.flags & 0x400000) && !gPlayerState.field_0xa0[0]) + if ((gPlayerState.flags & PL_CLONING) && !gPlayerState.field_0xa0[0]) sub_0807A108(); if (sub_08079B24() == 0) sub_08079708(this); @@ -300,7 +300,7 @@ void sub_080171F0(void) { gPlayerState.flags &= ~2; sub_080028E0(&gPlayerEntity); - if (gPlayerState.flags & 0x400000) + if (gPlayerState.flags & PL_CLONING) gUnk_0200AF00.filler25[10] = 1; sub_08078180(); @@ -315,13 +315,13 @@ void sub_080171F0(void) { gPlayerState.field_0x3f = 0; sub_0807B0C8(); - if (gPlayerState.flags & 0x400000) - gUnk_03004040[0]->spriteOffsetY = gUnk_03004040[1]->spriteOffsetY = gUnk_03004040[2]->spriteOffsetY = 0; + if (gPlayerState.flags & PL_CLONING) + gPlayerClones[0]->spriteOffsetY = gPlayerClones[1]->spriteOffsetY = gPlayerClones[2]->spriteOffsetY = 0; - if (gPlayerEntity.action == PLAYER_08072F34) - gPlayerState.flags |= 0x20000000; + if (gPlayerEntity.action == PLAYER_CLIMB) + gPlayerState.flags |= PL_CLIMBING; else - gPlayerState.flags &= ~0x20000000; + gPlayerState.flags &= ~PL_CLIMBING; sub_0807A8D8(&gPlayerEntity); if (gPlayerState.jumpStatus & 0xc0) diff --git a/src/item.c b/src/item.c index 8ba2e848..a88ae226 100644 --- a/src/item.c +++ b/src/item.c @@ -10,3 +10,7 @@ void (*const gItemFunctions[])(ItemBehavior*, u32) = { ItemPegasusBoots, ItemDebug, ItemOcarina, ItemDebug, ItemDebug, ItemDebug, ItemTryPickupObject, ItemJarEmpty, ItemJarEmpty, ItemJarEmpty, ItemJarEmpty, }; + +void sub_080752E8(ItemBehavior* behavior, u32 arg1) { + gItemFunctions[behavior->behaviorID](behavior, arg1); +} diff --git a/src/item/itemBoomerang.c b/src/item/itemBoomerang.c index b443d6fb..a5505136 100644 --- a/src/item/itemBoomerang.c +++ b/src/item/itemBoomerang.c @@ -3,7 +3,7 @@ extern void (*const gUnk_0811BD78[])(ItemBehavior*, u32); -extern void sub_08078F60(void); +extern void ResetPlayerVelocity(void); void ItemBoomerang(ItemBehavior* this, u32 arg1) { gUnk_0811BD78[this->stateID](this, arg1); @@ -24,7 +24,7 @@ void sub_08075D2C(ItemBehavior* this, u32 arg1) { void sub_08075D88(ItemBehavior* this, u32 arg1) { if ((gPlayerState.field_0x3[1] & 0x80) == 0) { if (((this->behaviorID == 0xc) && ((gPlayerState.field_0xa & 0x80) != 0)) && ((this->field_0x5[9] & 2) != 0)) { - sub_08078F60(); + ResetPlayerVelocity(); return; } UpdateItemAnim(this); diff --git a/src/item/itemLantern.c b/src/item/itemLantern.c index 2903b2de..88245ad8 100644 --- a/src/item/itemLantern.c +++ b/src/item/itemLantern.c @@ -1,6 +1,7 @@ #include "item.h" #include "functions.h" #include "audio.h" +#include "object.h" extern void (*const gUnk_0811BD68[])(ItemBehavior*, u32); @@ -20,22 +21,21 @@ void sub_08075A0C(ItemBehavior* this, u32 arg1) { u32 itemSlot; s8* tmp; itemSlot = IsItemEquipped(this->behaviorID); - if (gPlayerState.heldObject != 0 || gPlayerState.playerAction == 0x18 || gPlayerState.jumpStatus != 0 || + if (gPlayerState.heldObject != 0 || gPlayerState.queued_action == PLAYER_ROLL || gPlayerState.jumpStatus != 0 || gPlayerState.item != NULL || (gPlayerState.flags & PL_MINISH) != 0) { ForceEquipItem(0xf, itemSlot); - gPlayerState.flags &= 0xff7fffff; + gPlayerState.flags &= ~PL_USE_LANTERN; ForceEquipItem(0xf, itemSlot); sub_08077E78(this, arg1); } else { - this->field_0x5[4] |= 0x80; sub_08077D38(this, arg1); sub_08077BD4(this); sub_0806F948(&gPlayerEntity); this->behaviorID = 0x10; - ForceEquipItem(0x10, itemSlot); + ForceEquipItem(ITEM_LANTERN_ON, itemSlot); tmp = &gUnk_08126EEC[gPlayerEntity.animationState & 6]; - object = CreateObjectWithParent(&gPlayerEntity, 0x45, 1, 0); + object = CreateObjectWithParent(&gPlayerEntity, OBJECT_45, 1, 0); if (object != NULL) { object->spriteVramOffset = gPlayerEntity.spriteVramOffset; object->x.HALF.HI = tmp[0] + object->x.HALF.HI; @@ -54,7 +54,7 @@ void sub_08075ADC(ItemBehavior* this, u32 arg1) { sub_08079D48() == 0) { this->field_0xf = 0; this->stateID += 1; - gPlayerState.flags |= 0x800000; + gPlayerState.flags |= PL_USE_LANTERN; bVar1 = 8 >> arg1; gPlayerState.field_0x3[1] = gPlayerState.field_0x3[1] & ~((bVar1 << 4) | bVar1); bVar1 = ~bVar1; @@ -77,11 +77,11 @@ void sub_08075B54(ItemBehavior* this, u32 arg1) { itemSlot = IsItemEquipped(this->behaviorID); if (!(((sub_08077F10(this) == 0) && (itemSlot < 2)) || (gPlayerState.jumpStatus != 0))) { ForceEquipItem(0xf, itemSlot); - gPlayerState.flags &= 0xff7fffff; + gPlayerState.flags &= ~PL_USE_LANTERN; sub_08077E78(this, arg1); SoundReq(SFX_ITEM_LANTERN_OFF); } else { - if (((gPlayerState.playerAction != 0x18) && (gPlayerEntity.frameIndex < 0x37)) && + if (((gPlayerState.queued_action != PLAYER_ROLL) && (gPlayerEntity.frameIndex < 0x37)) && ((u16)gPlayerEntity.spriteIndex == 6)) { tmp = &gUnk_08126EEC[gPlayerEntity.animationState & 6]; @@ -91,7 +91,7 @@ void sub_08075B54(ItemBehavior* this, u32 arg1) { this->field_0xf = 0xf; this->stateID += 1; gPlayerEntity.field_0x7a.HWORD = 2; - object = CreateObjectWithParent(&gPlayerEntity, 0x45, 1, 0); + object = CreateObjectWithParent(&gPlayerEntity, OBJECT_45, 1, 0); if (object != NULL) { object->spriteVramOffset = gPlayerEntity.spriteVramOffset; object->x.HALF.HI = tmp[0] + object->x.HALF.HI; diff --git a/src/item/itemOcarina.c b/src/item/itemOcarina.c index 7b705446..1f418627 100644 --- a/src/item/itemOcarina.c +++ b/src/item/itemOcarina.c @@ -4,7 +4,7 @@ extern void (*const gOcarinaStates[4])(ItemBehavior*, u32); -extern void sub_08078F60(void); +extern void ResetPlayerVelocity(void); extern void SetPlayerEventPriority(void); extern void CreateBird(void); @@ -16,7 +16,7 @@ void ItemOcarina(ItemBehavior* this, u32 arg1) { } void OcarinaUse(ItemBehavior* this, u32 arg1) { - if (gPlayerState.playerAction == 0x18) { + if (gPlayerState.queued_action == PLAYER_ROLL) { sub_08077E78(this, arg1); } else { this->field_0x5[4] |= 0xf; @@ -24,12 +24,12 @@ void OcarinaUse(ItemBehavior* this, u32 arg1) { gPlayerEntity.spriteSettings.flipX = 0; gPlayerEntity.flags &= 0x7f; gPlayerEntity.field_0x7a.HWORD = 2; - gPlayerState.flags |= 0x10000000; + gPlayerState.flags |= PL_USE_OCARINA; gPlayerState.field_0x27[0] = -1; gUnk_02034490[0] = 1; gPlayerState.field_0xa = (8 >> arg1) | gPlayerState.field_0xa; gPlayerState.keepFacing = (8 >> arg1) | gPlayerState.keepFacing; - sub_08078F60(); + ResetPlayerVelocity(); sub_08077D38(this, arg1); SoundReq(SFX_216); SetPlayerEventPriority(); @@ -41,7 +41,7 @@ NONMATCH("asm/non_matching/ocarina/OcarinaUpdate.inc", void OcarinaUpdate(ItemBe UpdateItemAnim(this); if ((this->field_0x5[9] & 0x80) != 0) { gPlayerEntity.flags |= 0x80; - gPlayerState.flags &= 0xefffffff; + gPlayerState.flags &= ~PL_USE_OCARINA; gPlayerState.field_0x27[0] = 0; gUnk_02034490[0] = 0; CreateBird(); diff --git a/src/item/itemPegasusBoots.c b/src/item/itemPegasusBoots.c index a12e31f3..e60d820c 100644 --- a/src/item/itemPegasusBoots.c +++ b/src/item/itemPegasusBoots.c @@ -24,7 +24,7 @@ void ItemPegasusBoots(ItemBehavior* this, u32 arg1) { SoundReq(SFX_PLY_LAND); } if (((gPlayerState.flags & PL_MINISH) == 0) && ((this->field_0x5[2] & 7) == 0)) { - if (gPlayerState.floor_type == SURFACE_11) { + if (gPlayerState.floor_type == SURFACE_SWAMP) { if (gPlayerEntity.spriteOffsetY == 0) { CreateFx(&gPlayerEntity, FX_GREEN_SPLASH, 0); } diff --git a/src/item/itemSword.c b/src/item/itemSword.c index 45441f72..37a91ef4 100644 --- a/src/item/itemSword.c +++ b/src/item/itemSword.c @@ -72,9 +72,9 @@ void sub_0807564C(ItemBehavior* this, u32 arg1) { void sub_08075694(ItemBehavior* this, u32 arg1) { this->field_0x5[2] = 1; - if ((gPlayerState.flags & 0x8000000) != 0) { - gPlayerState.flags &= 0xf7ffffff; - gPlayerState.flags &= 0xfffbffff; + if (gPlayerState.flags & PL_SWORD_THRUST) { + gPlayerState.flags &= ~PL_SWORD_THRUST; + gPlayerState.flags &= ~PL_ROLLING; sub_08077DF4(this, 300); } else { gPlayerState.field_0xab = 1; @@ -86,7 +86,7 @@ void sub_08075694(ItemBehavior* this, u32 arg1) { gPlayerEntity.hurtType = 0x1e; gPlayerState.field_0x1a[1] |= 0x40; gPlayerState.field_0x1a[1] &= 0xdf; - if ((gPlayerState.field_0xa0[0] == 0x04) && ((gPlayerState.flags & 0x400000) == 0)) { + if ((gPlayerState.field_0xa0[0] == 0x04) && ((gPlayerState.flags & PL_CLONING) == 0)) { gPlayerState.field_0xa0[0] = 0x01; sub_0807A108(); } @@ -124,7 +124,7 @@ void sub_080759B8(ItemBehavior* this, u32 arg1) { if ((gPlayerState.flags & PL_MINISH) == 0) { gPlayerEntity.hurtType = 0; } - gPlayerState.flags &= 0xf7ffffff; + gPlayerState.flags &= ~PL_SWORD_THRUST; gPlayerState.field_0x1a[1] = 0; gPlayerState.item = NULL; sub_08077E78(this, arg1); diff --git a/src/manager/manager15.c b/src/manager/manager15.c index b73beba0..8dc10a8f 100644 --- a/src/manager/manager15.c +++ b/src/manager/manager15.c @@ -315,8 +315,8 @@ void sub_0805A76C(Manager15* this) { } void sub_0805A7E4(Manager15* this) { - if (gPlayerState.playerAction != PLAYER_WARP) { - gPlayerState.playerAction = PLAYER_WARP; + if (gPlayerState.queued_action != PLAYER_WARP) { + gPlayerState.queued_action = PLAYER_WARP; gPlayerState.field_0x38 = 0; gPlayerState.field_0x39 = 0; } diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index dc09ea5f..b188ef08 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -137,7 +137,7 @@ void sub_0805B168(Manager1A* this) { u32 sub_0805B1CC(Manager1A* this) { u32 re = 0; if (CheckPlayerProximity(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) { - if ((gPlayerState.flags & 0x4) && (gPlayerState.flags & 0x1)) { + if ((gPlayerState.flags & PL_DROWNING) && (gPlayerState.flags & PL_BUSY)) { gPlayerState.flags |= 0x8000; } else if (gPlayerState.flags & 0x8000) { re = 1; diff --git a/src/manager/manager34.c b/src/manager/manager34.c index 6ca4773c..a3f83418 100644 --- a/src/manager/manager34.c +++ b/src/manager/manager34.c @@ -39,11 +39,11 @@ void sub_0805DBF0(Manager34* this) { sub_0805DC70(); } else { if (this->field_0x20 == 0x78) { - sub_08080964(0x78, 2); + InitScreenShake(0x78, 2); } else if (this->field_0x20 == 0xd2) { - sub_08080964(0x5a, 1); + InitScreenShake(0x5a, 1); } else if (this->field_0x20 == 0x12c) { - sub_08080964(0x5a, 0); + InitScreenShake(0x5a, 0); } if (this->field_0x20 < 0x78) { diff --git a/src/manager/managerA.c b/src/manager/managerA.c index fbaf30ff..1d68eadc 100644 --- a/src/manager/managerA.c +++ b/src/manager/managerA.c @@ -117,7 +117,7 @@ static u32 PlayerStateValid(ManagerA* this) { static void sub_08058514(ManagerA* this) { switch (this->manager.unk_0d) { case 1: - if (gPlayerState.flags & (PL_BUSY | PL_DROWNING | PL_USE_PORTAL | 0x1210)) + if (gPlayerState.flags & (PL_BUSY | PL_DROWNING | PL_USE_PORTAL | PL_FALLING | 0x1010)) return; if (gPlayerEntity.z.HALF.HI != 0) return; diff --git a/src/manager/managerC.c b/src/manager/managerC.c index 2583ce98..1dae3225 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -156,7 +156,7 @@ void sub_08058A04(ManagerC* this) { s32 tmp2 = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY; if ((this->unk_20 - 0x118 < 0xDu) && CheckGlobalFlag(LV1TARU_OPEN) && (tmp - 0x6d < 0x17u) && (tmp2 - 0x45 < 0x17u) && (gPlayerEntity.z.HALF.HI == 0)) { - gPlayerState.playerAction = 3; + gPlayerState.queued_action = PLAYER_FALL; gPlayerState.field_0x38 = 0; gPlayerEntity.x.HALF.HI = gRoomControls.roomOriginX + 0x78; gPlayerEntity.y.HALF.HI = gRoomControls.roomOriginY + 0x50; diff --git a/src/npc/carlov.c b/src/npc/carlov.c index dd25013a..83402406 100644 --- a/src/npc/carlov.c +++ b/src/npc/carlov.c @@ -15,7 +15,7 @@ void Carlov(Entity* this) { if ((this->frame & 0x10) != 0) { this->frame = this->frame & 0xef; EnqueueSFX(0x104); - sub_08080964(0x10, 0); + InitScreenShake(0x10, 0); } if ((this->frame & 0x20) != 0) { this->frame = this->frame & 0xdf; diff --git a/src/npc/castorWildsStatue.c b/src/npc/castorWildsStatue.c index 884a4289..b621b86f 100644 --- a/src/npc/castorWildsStatue.c +++ b/src/npc/castorWildsStatue.c @@ -97,7 +97,7 @@ void sub_08067534(Entity* this) { } } EnqueueSFX(0x14c); - sub_08080964(0x28, 4); + InitScreenShake(0x28, 4); } void sub_0806757C(Entity* this) { diff --git a/src/npc/rem.c b/src/npc/rem.c index d3ab32d0..cef24033 100644 --- a/src/npc/rem.c +++ b/src/npc/rem.c @@ -131,7 +131,7 @@ void sub_0806A550(Entity* this) { } else { if (this->frame == 1) { this->frame = 0; - sub_08080964(8, 2); + InitScreenShake(8, 2); gActiveScriptInfo.unk_00 |= 0x100; SoundReq(SFX_CHEST_OPEN); } diff --git a/src/npc/zelda.c b/src/npc/zelda.c index 4cb5a1ae..4631a31e 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -85,7 +85,7 @@ void sub_08066D94(Entity* this) { DeleteThisEntity(); } -void sub_08066DE4(Entity* this) { +void SetZeldaFollowTarget(Entity* this) { Entity* pEVar1; pEVar1 = DeepFindEntityByID(7, 0x2E); diff --git a/src/object/bakerOven.c b/src/object/bakerOven.c index ffe11cd9..c7f21f7c 100644 --- a/src/object/bakerOven.c +++ b/src/object/bakerOven.c @@ -1,6 +1,6 @@ #include "object.h" -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern u32 sub_0806FC80(Entity*, Entity*, s32); extern void sub_0809CDF0(Entity*); @@ -61,7 +61,7 @@ void sub_0809CD0C(Entity* this) { sub_0806FC80(this, &gPlayerEntity, 4)) { this->field_0xf++; ModHealth(-2); - sub_0800449C(&gPlayerEntity, 0x7a); + SoundReqClipped(&gPlayerEntity, 0x7a); gPlayerEntity.iframes = 16; gPlayerEntity.knockbackDirection = 16; gPlayerEntity.knockbackDuration = 12; diff --git a/src/object/bigVortex.c b/src/object/bigVortex.c index 5e7f87eb..9118cb67 100644 --- a/src/object/bigVortex.c +++ b/src/object/bigVortex.c @@ -67,7 +67,7 @@ void sub_08098DC4(Entity* this) { sub_08004542(&gPlayerEntity); gPlayerEntity.collisionLayer = 1; ResolveEntityOnTop(this, &gPlayerEntity); - gPlayerState.playerAction = 0x1f; + gPlayerState.queued_action = PLAYER_PARACHUTE; gPlayerState.field_0x34[4] = 1; gPlayerState.field_0x34[5] = this->type2; this->action = 4; diff --git a/src/object/book.c b/src/object/book.c index 9a99b928..25faf3ab 100644 --- a/src/object/book.c +++ b/src/object/book.c @@ -92,8 +92,8 @@ void sub_0809B4A8(Entity* this) { this->direction = 16; gPlayerState.pushedObject = 0x9e; - gPlayerState.playerAction = 5; - gPlayerState.flags |= 1; + gPlayerState.queued_action = PLAYER_PUSH; + gPlayerState.flags |= PL_BUSY; gPlayerEntity.x.HALF.LO = 0; gPlayerEntity.y.HALF.LO = 0; diff --git a/src/object/button.c b/src/object/button.c index 76b48da8..1db2cafb 100644 --- a/src/object/button.c +++ b/src/object/button.c @@ -138,7 +138,7 @@ u32 sub_08081D28(Entity* this) { } extern u32 sub_080002E0(u32, u32); -extern Entity* gUnk_03004040[3]; +extern Entity* gPlayerClones[3]; u32 sub_08081E0C(Entity*); Entity* sub_08081D74(Entity* this) { @@ -152,13 +152,13 @@ Entity* sub_08081D74(Entity* this) { ent = &gPlayerEntity; } } else { - if (gPlayerState.flags & 0x400000) { - if (EntityInRectRadius(this, gUnk_03004040[0], 5, 6)) { - ent = gUnk_03004040[0]; - } else if (EntityInRectRadius(this, gUnk_03004040[1], 5, 6)) { - ent = gUnk_03004040[1]; - } else if (EntityInRectRadius(this, gUnk_03004040[2], 5, 6)) { - ent = gUnk_03004040[2]; + if (gPlayerState.flags & PL_CLONING) { + if (EntityInRectRadius(this, gPlayerClones[0], 5, 6)) { + ent = gPlayerClones[0]; + } else if (EntityInRectRadius(this, gPlayerClones[1], 5, 6)) { + ent = gPlayerClones[1]; + } else if (EntityInRectRadius(this, gPlayerClones[2], 5, 6)) { + ent = gPlayerClones[2]; } } } @@ -272,8 +272,8 @@ void sub_08081FF8(Entity* this) { direction = GetFacingDirection(this->child, this); sub_080044AE(this->child, 0x200, direction); for (i = 0; i < 3; i++) { - if (gUnk_03004040[i]) { - sub_080044AE(gUnk_03004040[i], 0x200, direction); + if (gPlayerClones[i]) { + sub_080044AE(gPlayerClones[i], 0x200, direction); } } } diff --git a/src/object/itemOnGround.c b/src/object/itemOnGround.c index 78d8c881..c062d75b 100644 --- a/src/object/itemOnGround.c +++ b/src/object/itemOnGround.c @@ -17,7 +17,6 @@ void sub_080813BC(Entity*); void sub_080810FC(Entity*); bool32 CheckShouldPlayItemGetCutscene(Entity*); -extern u32 sub_080002D0(Entity*); extern u32 sub_080177A0(Entity*, Entity*); extern void GiveItem(u32, u32); diff --git a/src/object/jarPortal.c b/src/object/jarPortal.c index 8adb45e7..89142cbc 100644 --- a/src/object/jarPortal.c +++ b/src/object/jarPortal.c @@ -108,7 +108,7 @@ void sub_0808C01C(Entity* this, u32 r1) { type = 2; gArea.curPortalType = type; if (r1 == 1) { - if (((gPlayerState.flags & 0x20) != 0) && (gPlayerState.jumpStatus == 0)) { + if ((gPlayerState.flags & PL_USE_PORTAL) && (gPlayerState.jumpStatus == 0)) { gArea.field_0x18 = 2; } else { if (sub_08057810() != 0) { diff --git a/src/object/minecart.c b/src/object/minecart.c index 8f5e9360..619e1a7b 100644 --- a/src/object/minecart.c +++ b/src/object/minecart.c @@ -55,7 +55,6 @@ void sub_080916EC(Entity* this) { } void sub_080917DC(Entity* this) { - if ((this->bitfield & 0x7f) == 0x1d) { this->zVelocity = 0x2a000; this->action = 7; @@ -63,8 +62,8 @@ void sub_080917DC(Entity* this) { SoundReq(SFX_13B); } else { if (sub_0800445C(this) != 0) { - if (((gPlayerState.flags & 0x40080) == 0) && (gPlayerState.field_0x1c == 0) && - (gPlayerState.heldObject == 0) && (gPlayerState.jumpStatus == 0)) { + if (!((gPlayerState.flags & (PL_MINISH | PL_ROLLING)) || gPlayerState.field_0x1c || + gPlayerState.heldObject || gPlayerState.jumpStatus)) { this->actionDelay++; } else { this->actionDelay = 0; @@ -73,13 +72,13 @@ void sub_080917DC(Entity* this) { this->actionDelay = 0; } if (this->type2 == 0) { - if (8 < this->actionDelay) { - this->action = this->action + 1; + if (this->actionDelay > 8) { + this->action++; gPlayerState.jumpStatus = 0x81; - gPlayerState.flags |= 0x4000000; + gPlayerState.flags |= PL_MINECART; gPlayerEntity.zVelocity = 0x20000; gPlayerEntity.speed = 0x100; - gPlayerEntity.flags &= 0x7f; + gPlayerEntity.flags &= ~PL_MINISH; ResetPlayer(); sub_0807A108(); SoundReq(SFX_PLY_JUMP); @@ -95,11 +94,11 @@ void sub_080918A4(Entity* this) { gPlayerEntity.x.HALF.HI = this->x.HALF.HI; gPlayerEntity.y.HALF.HI = this->y.HALF.HI; if (gPlayerEntity.z.HALF.HI > -0x10) { - if ((s32)gPlayerEntity.zVelocity > -1) { + if (gPlayerEntity.zVelocity >= 0) { return; } gPlayerEntity.animationState = this->animationState << 1; - gPlayerState.flags = (gPlayerState.flags ^ 0x4000000) | 0x1000; + gPlayerState.flags = (gPlayerState.flags ^ PL_MINECART) | 0x1000; this->action++; this->field_0xf = 1; this->flags |= ENT_20; @@ -158,7 +157,7 @@ void sub_080919AC(Entity* this) { gUnk_081223C8[this->animationState * 2 + 1]); iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]); if (iVar2 == 0) { - this->direction = this->direction ^ 0x10; + this->direction = DirectionTurnAround(this->direction); this->animationState = this->animationState ^ 2; } else { switch (uVar3) { @@ -171,12 +170,12 @@ void sub_080919AC(Entity* this) { this->action = 6; sub_08017744(this); gPlayerState.jumpStatus = 0x41; - gPlayerState.flags = (gPlayerState.flags ^ 0x1000) | 0x4000000; + gPlayerState.flags = (gPlayerState.flags ^ 0x1000) | PL_MINECART; gPlayerEntity.zVelocity = 0x20000; gPlayerEntity.speed = 0x200; gPlayerEntity.animationState = this->animationState << 1; gPlayerEntity.direction = this->direction; - gPlayerEntity.flags |= 0x80; + gPlayerEntity.flags |= PL_MINISH; sub_08004168(this); InitAnimationForceUpdate(this, this->animationState + 0xc); SoundReq(SFX_PLY_VO4); diff --git a/src/object/object6A.c b/src/object/object6A.c index d0063f60..11dcfc48 100644 --- a/src/object/object6A.c +++ b/src/object/object6A.c @@ -398,7 +398,7 @@ void sub_08094FA8(Object6AEntity* this) { super->interactType = 0; super->action = 2; sub_080788E0(super); - gPlayerState.playerAction = 12; + gPlayerState.queued_action = PLAYER_EMPTYBOTTLE; gPlayerState.field_0x38 = 54; #ifndef EU SetPlayerControl(2); diff --git a/src/object/object86.c b/src/object/object86.c index b5c9e60b..62d30b6b 100644 --- a/src/object/object86.c +++ b/src/object/object86.c @@ -69,7 +69,7 @@ void nullsub_534(Entity* this) { void sub_08099ECC(Entity* this) { this->subAction = 1; CopyPosition(this, &gPlayerEntity); - gPlayerState.playerAction = 3; + gPlayerState.queued_action = PLAYER_FALL; gPlayerState.field_0x34[4] = 0; gPlayerState.flags |= 0x8000; } diff --git a/src/overworld.c b/src/overworld.c index 997ce29d..ff90afc8 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -351,7 +351,7 @@ void InitializePlayer(void) { pl = &gPlayerEntity; gRoomControls.cameraTarget = pl; - gPlayerState.playerAction = sPlayerSpawnStates[gScreenTransition.player_status.spawn_type]; + gPlayerState.queued_action = sPlayerSpawnStates[gScreenTransition.player_status.spawn_type]; if (!CheckGlobalFlag(EZERO_1ST)) { gPlayerState.flags |= PL_NO_CAP; } @@ -607,7 +607,7 @@ static u32 StairsAreValid(void) { for (i = sStairTypes; i[0] != 0; i += 2) { if (tgt == i[0]) { - gPlayerState.playerAction = 30; + gPlayerState.queued_action = PLAYER_USEENTRANCE; gPlayerState.field_0x38 = 0; gPlayerState.field_0x39 = i[1]; if (!gScreenTransition.player_status.spawn_type) @@ -666,7 +666,7 @@ u32 sub_08052B24(void) { gUnk_0200AF00.filler0[1]) return 0; - if ((gPlayerState.flags & 0x118) || (gPlayerState.framestate_last > tmp) || gPlayerState.item || + if ((gPlayerState.flags & (PL_NO_CAP | 0x110)) || (gPlayerState.framestate_last > tmp) || gPlayerState.item || gPlayerEntity.field_0x7a.HWORD) return 0; diff --git a/src/player.c b/src/player.c index ead93d25..0ead68bc 100644 --- a/src/player.c +++ b/src/player.c @@ -15,11 +15,10 @@ #include "hitbox.h" #include "overworld.h" #include "screen.h" +#include "main.h" typedef void(EntityAction)(Entity*); -static EntityAction* const sPlayerActions[]; - static EntityAction PlayerInit; static EntityAction PlayerNormal; static EntityAction PlayerInit; @@ -29,7 +28,7 @@ static EntityAction PlayerPush; static EntityAction PlayerBounce; static EntityAction sub_08070E9C; static EntityAction PlayerItemGet; -EntityAction PlayerMinish; +static EntityAction PlayerMinish; static EntityAction PlayerMinishDie; static EntityAction sub_08071DB8; static EntityAction PlayerEmptyBottle; @@ -48,10 +47,10 @@ static EntityAction PlayerRoll; static EntityAction sub_080728AC; static EntityAction PlayerInHole; static EntityAction sub_08072C9C; -EntityAction sub_08074C44; -static EntityAction sub_08072F34; +static EntityAction sub_08074C44; +static EntityAction PlayerClimb; static EntityAction PlayerUseEntrance; -EntityAction PlayerParachute; +static EntityAction PlayerParachute; // PLAYER_FALL static EntityAction PlayerFallInit; @@ -163,28 +162,86 @@ static EntityAction sub_08072CFC; static EntityAction sub_08072D54; static EntityAction sub_08072F14; -// PLAYER_08072F34 +// PLAYER_CLIMB static EntityAction sub_08072F94; static EntityAction sub_08073094; // PLAYER_USEENTRANCE -EntityAction sub_080731D8; -EntityAction sub_080732D0; -EntityAction sub_0807332C; -EntityAction sub_080733BC; +static EntityAction sub_080731D8; +static EntityAction sub_080732D0; +static EntityAction sub_0807332C; +static EntityAction sub_080733BC; + +// PLAYER_PARACHUTE +static EntityAction sub_08073468; +static EntityAction sub_080734D4; +static EntityAction sub_08073504; +static EntityAction sub_08073584; +static EntityAction sub_0807379C; +static EntityAction sub_080737BC; +static EntityAction sub_0807380C; +static EntityAction sub_08073884; + +// sub_08073904... ? +static EntityAction sub_08073924; +static EntityAction sub_08073968; +static EntityAction sub_080739EC; +static EntityAction sub_08073A94; +static EntityAction sub_08073B8C; +static EntityAction sub_08073C30; + +// PLAYER_MINISH +static EntityAction sub_08073C80; +static EntityAction sub_08073D20; +static EntityAction sub_08073F04; +static EntityAction sub_08073F4C; +static EntityAction sub_08073FD0; +static EntityAction sub_08074018; +static EntityAction sub_08074060; +static EntityAction sub_080740D8; + +// PLAYER_08074C44 +static EntityAction sub_08074C68; +static EntityAction sub_08074CF8; +static EntityAction sub_08074F00; +static EntityAction sub_080750F4; +// ... +static EntityAction sub_08074F1C; +static EntityAction sub_08074F2C; +static EntityAction sub_08074F44; +static EntityAction sub_08074F8C; +static EntityAction sub_08074FEC; +static EntityAction sub_0807501C; +static EntityAction sub_0807508C; +// ... +static EntityAction sub_08075110; +static EntityAction sub_0807513C; +static EntityAction sub_0807518C; +static EntityAction sub_080751B4; static void sub_080717F8(Entity*); static void ResetPlayerPriority(); static void sub_080728AC(Entity*); static void BreakOut(); +static void sub_08073AD4(); +static void sub_08073B60(Entity*); +static void sub_08074244(Entity*, u32, u32); +static void hide(Entity*); +static void sub_08074BF8(Entity*); +static void sub_08074D34(Entity*, ScriptExecutionContext*); + +// exports +void SurfaceAction_Water(Entity*); +void SurfaceAction_Ladder(Entity*); +void SurfaceAction_AutoLadder(Entity*); extern void RespawnPlayer(); extern void sub_080797EC(); extern void sub_08079E08(); -extern void sub_08078F60(); +extern void ResetPlayerVelocity(); extern void sub_08077698(); extern void sub_08079258(); -extern void sub_0807A298(); +extern void EnablePlayerDraw(); extern u32 sub_08079B24(); extern void sub_08079708(); extern void sub_080792D8(); @@ -208,8 +265,25 @@ extern u32 sub_08007DD6(); extern u32 GetSurfaceCalcType(); extern void sub_08074808(); extern void sub_08073904(Entity*); +extern void SetZeldaFollowTarget(Entity*); +extern u32 ItemIsSword(u32); +extern u32 sub_0807A2B8(); +extern u32 sub_08079550(u32); +extern u32 sub_080782C0(); +extern u32 sub_080793E4(u32); +extern void sub_08008AC6(Entity*); +extern u32 sub_08079C30(Entity*); +extern void sub_08077AEC(); extern ScreenTransitionData gUnk_0813AB58; +extern ScreenTransitionData gUnk_0813AD88[]; +extern u8 gUnk_080082DC[]; + +extern u16 script_08009ECC; +extern u16 script_08009EF0; + +extern Entity* gPlayerClones[]; +extern ScriptExecutionContext gPlayerScriptExecutionContext; void DoPlayerAction(Entity* this) { static void (*const sPlayerActions[])(Entity*) = { @@ -242,7 +316,7 @@ void DoPlayerAction(Entity* this) { [PLAYER_INHOLE] = PlayerInHole, [PLAYER_08072C9C] = sub_08072C9C, [PLAYER_08074C44] = sub_08074C44, - [PLAYER_08072F34] = sub_08072F34, + [PLAYER_CLIMB] = PlayerClimb, [PLAYER_USEENTRANCE] = PlayerUseEntrance, [PLAYER_PARACHUTE] = PlayerParachute, }; @@ -278,7 +352,7 @@ static void PlayerInit(Entity* this) { sub_0807A108(); sub_0807AEE4(); - if (sub_08078EFC() == 0) { + if (RunQueuedAction() == 0) { sub_0807921C(); UpdateFloorType(); if (gPlayerState.swimState != 0) { @@ -329,9 +403,9 @@ static void PlayerFallInit(Entity* this) { gPlayerState.jumpStatus = 0; - if ((gPlayerState.flags & PL_MINISH) != 0) + if (gPlayerState.flags & PL_MINISH) gPlayerState.animation = 0x1ba; - else if ((gPlayerState.flags & 8) != 0) + else if (gPlayerState.flags & PL_NO_CAP) gPlayerState.animation = 0x458; else gPlayerState.animation = 0x1b8; @@ -382,7 +456,7 @@ static void PlayerBounceInit(Entity* this) { if ((gPlayerState.flags & PL_MINISH) == 0) { this->zVelocity = 0x20000; gPlayerState.animation = 0x114; - sub_08080964(16, 0); + InitScreenShake(16, 0); } else { gPlayerState.animation = 0xc18; this->zVelocity = 0x18000; @@ -391,7 +465,7 @@ static void PlayerBounceInit(Entity* this) { gPlayerState.jumpStatus = 0x80; SoundReq(SFX_14C); ResetPlayer(); - sub_08078F60(); + ResetPlayerVelocity(); } // minor regalloc @@ -401,12 +475,12 @@ static NONMATCH("asm/non_matching/player/sub_08070DC4.inc", void PlayerBounceUpd sub_08079E08(); UpdateFloorType(); - if (sub_08078EFC() || GravityUpdate(this, 0x2000)) + if (RunQueuedAction() || GravityUpdate(this, 0x2000)) return; gPlayerState.jumpStatus = 0; - if (sub_08078EFC() || sub_08079D48()) + if (RunQueuedAction() || sub_08079D48()) return; if (gPlayerState.swimState != 0) { @@ -451,7 +525,7 @@ static void sub_08070E9C(Entity* this) { sub_08070f24, }; - if (sub_08078EFC() != 0) { + if (RunQueuedAction() != 0) { MessageClose(); } else { gPlayerState.field_0x27[0] = 4; @@ -531,7 +605,7 @@ static void PlayerItemGetInit(Entity* this) { this->subAction = 1; ResetPlayer(); - sub_08078F60(); + ResetPlayerVelocity(); } static void PlayerItemGetUpdate(Entity* this) { @@ -543,7 +617,7 @@ static void PlayerItemGetUpdate(Entity* this) { static void sub_08071038(Entity* this) { UpdateAnimationSingleFrame(this); - if (sub_08078EFC() || (gMessage.doTextBox & 0x7f)) + if (RunQueuedAction() || (gMessage.doTextBox & 0x7f)) return; if (this->frame & 0x80) { @@ -572,9 +646,9 @@ static void PlayerJumpInit(Entity* this) { this->subAction++; gPlayerState.flags |= PL_BUSY; - gPlayerState.flags &= ~(PL_BURNING | 0x800); + gPlayerState.flags &= ~(PL_BURNING | PL_FROZEN); - gPlayerState.playerAction = 0; + gPlayerState.queued_action = 0; if ((gPlayerState.heldObject | gPlayerState.field_0x1a[1]) == 0) { if ((gPlayerState.flags & PL_MINISH) == 0) { @@ -602,8 +676,7 @@ static void PlayerJumpInit(Entity* this) { } static void sub_08071130(Entity* this) { - - if (sub_08078EFC(this)) + if (RunQueuedAction(this)) return; if (gPlayerState.field_0x1a[1] == 0) { @@ -631,7 +704,7 @@ static void sub_08071130(Entity* this) { UpdateFloorType(); - if (sub_08078EFC()) + if (RunQueuedAction()) return; if ((sub_08079D48() == 0) || (gPlayerState.swimState != 0)) { @@ -652,7 +725,7 @@ static void sub_08071130(Entity* this) { } this->subAction++; - sub_08078F60(); + ResetPlayerVelocity(); this->knockbackDuration = 0; SoundReq(SFX_PLY_LAND); } @@ -940,7 +1013,7 @@ static void PlayerTalkEzlo(Entity* this) { sub_08071A4C, }; - if (sub_08078EFC()) { + if (RunQueuedAction()) { MessageClose(); ResetPlayerPriority(); } else { @@ -1111,7 +1184,7 @@ static void PlayerPushUpdate(Entity* this) { static void sub_08071B60(Entity* this) { gPlayerState.pushedObject = 2; - gPlayerState.flags &= ~0x1; + gPlayerState.flags &= ~PL_BUSY; this->type = 0; this->knockbackDuration = 0; sub_080728AC(this); @@ -1150,11 +1223,11 @@ static void PlayerMinishDieInit(Entity* this) { return; } - gPlayerState.playerAction = 0; + gPlayerState.queued_action = 0; if (gPlayerState.flags & PL_MINISH) { if (gPlayerState.floor_type == SURFACE_MINISH_DOOR_FRONT || gPlayerState.floor_type == SURFACE_MINISH_DOOR_BACK || gPlayerState.floor_type == SURFACE_A) { - sub_0807A298(this); + EnablePlayerDraw(this); RespawnPlayer(); this->action = 10; } @@ -1164,7 +1237,7 @@ static void PlayerMinishDieInit(Entity* this) { } gPlayerState.animation = temp; - gPlayerState.flags &= ~(0x1000000 | 0x200000 | 0x40000 | 0x800 | 0x400 | 0x100 | PL_BUSY); + gPlayerState.flags &= ~(PL_PARACHUTE | PL_RELEASED | PL_ROLLING | PL_FROZEN | PL_BURNING | 0x100 | PL_BUSY); this->subAction = 1; this->animationState = IdleSouth; this->spritePriority.b1 = 1; @@ -1181,7 +1254,7 @@ static void sub_08071CAC(Entity* this) { if (this->frame & 0x80) { u32 temp; if ((gPlayerState.flags & PL_MINISH) == 0) - temp = (gPlayerState.flags & 8) ? 0x45a : 0x2bd; + temp = (gPlayerState.flags & PL_NO_CAP) ? 0x45a : 0x2bd; else temp = 0xc1b; gPlayerState.animation = temp; @@ -1262,7 +1335,7 @@ static void sub_08071E04(Entity* this) { UpdateFloorType(); if (gPlayerState.floor_type == SURFACE_PIT) { gPlayerState.field_0x11 = 7; - gPlayerState.flags |= 0x200; + gPlayerState.flags |= PL_FALLING; sub_080791BC(); return; } @@ -1366,7 +1439,7 @@ static void PlayerFrozenUpdate(Entity* this) { if (sub_08079B24() == 0) { sub_08079708(this); } else { - if (gPlayerState.flags & 0x800) { + if (gPlayerState.flags & PL_FROZEN) { if (sub_0807953C() != 0) { this->actionDelay -= 3; this->spriteOffsetX = 2; @@ -1386,7 +1459,7 @@ static void BreakOut(Entity* this) { this->knockbackDuration = 0; COLLISION_ON(this); this->spriteOffsetX = 0; - gPlayerState.flags &= ~(0x800 | PL_BUSY); + gPlayerState.flags &= ~(PL_FROZEN | PL_BUSY); CreateFx(this, FX_ICE, 0); sub_080791BC(); } @@ -1429,7 +1502,7 @@ static void sub_080720DC(Entity* this) { sub_08072168, }; - if (sub_08078EFC() == 0) + if (RunQueuedAction() == 0) gUnk_0811BB60[this->subAction](this); } @@ -1686,7 +1759,7 @@ static void PlayerRoll(Entity* this) { static void PlayerRollInit(Entity* this) { u32 temp; - if ((gPlayerState.flags & 0x200000) == 0) { + if ((gPlayerState.flags & PL_RELEASED) == 0) { sub_0806F948(&gPlayerEntity); this->direction = Direction8FromAnimationState(this->animationState); } @@ -1715,11 +1788,13 @@ static void PlayerRollInit(Entity* this) { } static void PlayerRollUpdate(Entity* this) { - if (((gPlayerState.flags & (PL_ROLLING | 0x80000)) != PL_ROLLING) || - (!(gPlayerState.flags & 0x200000) && (this->iframes != 0) && (this->bitfield & 0x80))) { + if (((gPlayerState.flags & (PL_ROLLING | PL_TRAPPED)) != PL_ROLLING) || + ((gPlayerState.flags & PL_RELEASED) == 0 && (this->iframes != 0) && (this->bitfield & 0x80))) { gPlayerState.flags &= ~PL_ROLLING; - if (!sub_08078EFC()) - sub_080728AC(this); + if (RunQueuedAction()) + return; + + sub_080728AC(this); return; } @@ -1731,12 +1806,12 @@ static void PlayerRollUpdate(Entity* this) { if ((gPlayerState.flags & 2) == 0) { UpdateFloorType(); } - if (sub_08078EFC()) { + if (RunQueuedAction()) { gPlayerState.flags &= ~PL_ROLLING; return; } - if ((gPlayerState.flags & 0x80000) != 0) { + if (gPlayerState.flags & PL_TRAPPED) { gPlayerState.flags &= ~PL_ROLLING; return; } @@ -1745,7 +1820,7 @@ static void PlayerRollUpdate(Entity* this) { return; } - if (gPlayerState.flags & (0x200 | 0x40 | 0x10)) { + if (gPlayerState.flags & (PL_FALLING | PL_HIDDEN | 0x10)) { gPlayerState.flags &= ~PL_ROLLING; sub_080728AC(this); return; @@ -1778,14 +1853,14 @@ static void PlayerRollUpdate(Entity* this) { // dont take damage this->hurtType = 0; } - if ((this->frame & 0x40) != 0) { + if (this->frame & 0x40) { sub_08077698(this); } - if (((this->frame & 0x80) != 0) || (gPlayerState.field_0x3[1] != 0)) { + if ((this->frame & 0x80) || (gPlayerState.field_0x3[1] != 0)) { sub_080791D0(); } - if ((this->frame & 0x80) != 0) { - gPlayerState.flags &= ~(0x200000 | PL_ROLLING); + if (this->frame & 0x80) { + gPlayerState.flags &= ~(PL_RELEASED | PL_ROLLING); } UpdateAnimationSingleFrame(this); } @@ -1795,17 +1870,17 @@ static void sub_080728AC(Entity* this) { if (gPlayerState.flags & PL_MINISH) sub_0807B068(this); else - sub_08078F60(); + ResetPlayerVelocity(); if (gPlayerState.swimState != 0) this->speed = 0; - if ((gPlayerState.flags & 0x40) == 0) + if ((gPlayerState.flags & PL_HIDDEN) == 0) gPlayerEntity.spriteSettings.draw = 3; if ((gPlayerState.flags & PL_MINISH) == 0) gPlayerEntity.spritePriority.b1 = 1; if ((gRoomControls.unk6 & 4) == 0) { - if (gPlayerState.flags & 0x40) + if (gPlayerState.flags & PL_HIDDEN) COLLISION_ON(this); sub_080791D0(); } @@ -2092,20 +2167,20 @@ static void sub_08072F14(Entity* this) { } } -static void sub_08072F34(Entity* this) { - static EntityAction* const gUnk_0811BBE4[] = { +static void PlayerClimb(Entity* this) { + static EntityAction* const sPlayerClimbStates[] = { sub_08072F94, sub_08073094, }; - if (!sub_08078EFC()) { + if (!RunQueuedAction()) { gPlayerState.framestate = PL_STATE_CLIMB; gPlayerState.floor_type = GetSurfaceCalcType(this, 0, 0); - gUnk_0811BBE4[this->subAction](this); + sPlayerClimbStates[this->subAction](this); if (this->knockbackDuration != 0) { sub_080792D8(); if (this->knockbackDuration == 0) { - this->action = 0x1d; + this->action = PLAYER_CLIMB; this->subAction = 0; this->y.HALF.LO = 0; gPlayerState.animation = 0x2cf; @@ -2183,16 +2258,16 @@ static void sub_08073094(Entity* this) { UpdateFloorType(); } - if (sub_08078EFC() == 0) { + if (RunQueuedAction() == 0) { switch (gPlayerState.floor_type) { case SURFACE_AUTO_LADDER: case SURFACE_2C: this->knockbackDuration = 0; - gPlayerState.flags |= 0x20000000; + gPlayerState.flags |= PL_CLIMBING; UpdateAnimationSingleFrame(this); - if ((this->frame & 0x40) != 0) { + if (this->frame & 0x40) { UpdateFloorType(); - if (!sub_08078EFC()) { + if (!RunQueuedAction()) { this->subAction--; } } @@ -2207,9 +2282,9 @@ static void sub_08073094(Entity* this) { case SURFACE_LADDER: case SURFACE_CLIMB_WALL: UpdateAnimationSingleFrame(this); - if ((this->frame & 0x40) != 0) { + if (this->frame & 0x40) { UpdateFloorType(); - if (!sub_08078EFC()) { + if (!RunQueuedAction()) { this->subAction--; } } @@ -2231,3 +2306,1496 @@ static void PlayerUseEntrance(Entity* this) { RequestPriorityDuration(NULL, 8); sPlayerUseEntranceStates[this->subAction](this); } + +static void sub_080731D8(Entity* this) { + COLLISION_OFF(this); + this->speed = 0x40; + this->animationState = IdleNorth; + this->x.HALF.HI = (this->x.HALF.HI & ~0xF) | 8; + this->x.HALF.LO = 0; + if (gPlayerState.field_0x38 == 0) { + this->subAction = 1; + } else { + this->spriteSettings.draw = 3; + this->subAction = 3; + this->field_0x7c.HALF.HI = this->y.HALF.HI; + this->y.HALF.HI -= 16; + this->child = CreateObjectWithParent(this, OBJECT_70, 1, 0); + if (gPlayerState.field_0x39 == 7) { + this->y.HALF.HI = (this->y.HALF.HI & ~0xF) + 8; + this->x.HALF.HI &= ~0xF; + this->direction = DirectionEast; + this->animationState = IdleEast; + SoundReq(SFX_STAIRS_ASCEND); + } else { + this->y.HALF.HI = (this->y.HALF.HI & ~0xF) + 2; + this->x.HALF.HI = (this->x.HALF.HI & ~0xF) + 15; + this->direction = DirectionWest; + this->animationState = IdleWest; + SoundReq(SFX_STAIRS_DESCEND); + } + SetZeldaFollowTarget(this); + } + if (gPlayerState.flags & PL_NO_CAP) { + gPlayerState.animation = 1028; + } else { + gPlayerState.animation = 260; + } + gRoomControls.cameraTarget = NULL; + sub_0807A108(); + ResetPlayer(); +} + +static void sub_080732D0(Entity* this) { + UpdateAnimationSingleFrame(this); + if (sub_080002B8(this) != 40) { + this->direction = DirectionNorth; + sub_0806F69C(this); + } else { + this->subAction++; + this->y.HALF.LO = 0; + CreateObjectWithParent(this, OBJECT_70, 1, 0); + if (gPlayerState.field_0x39 == 7) { + SoundReq(SFX_STAIRS_ASCEND); + } else { + SoundReq(SFX_STAIRS_DESCEND); + } + } +} + +static void sub_0807332C(Entity* this) { + UpdateAnimationSingleFrame(this); + if (gPlayerState.field_0x39 == 7) { + this->direction = IdleNorth; + } else { + this->direction = 28; + } + if ((this->x.HALF.HI & 0xF) != 0xF) { + if (gPlayerState.field_0x39 == 7) { + this->animationState = IdleEast; + this->direction = 4; + } else { + this->animationState = 6; + if (this->direction <= DirectionWest) { + sub_0806F69C(this); + return; + } + this->direction = (this->direction - 1) & 0x1F; + } + sub_0806F69C(this); + return; + } + if (gPlayerState.field_0x38 != 0) { + gRoomControls.cameraTarget = this; + sub_080791BC(); + } else { + gMain.transition = 3; + *(&gMain.pauseInterval + 1) = 1; + DoFade(5, 8); + } +} + +static void sub_080733BC(Entity* this) { + UpdateAnimationSingleFrame(this); + if ((this->x.HALF.HI & 0xF) == 8) { + Entity* c; + this->direction = DirectionSouth; + this->animationState = IdleSouth; + c = this->child; + if (c != NULL) { + DeleteEntity(c); + this->child = NULL; + if (this->collisionLayer == 1) { + sub_0807AABC(this); + } else { + sub_0807AA80(this); + } + } + } + sub_0806F69C(this); + if (this->field_0x7c.HALF_U.HI == this->y.HALF.HI) { + gRoomControls.cameraTarget = this; + sub_0807921C(); + } +} + +static void PlayerParachute(Entity* this) { + static EntityAction* const sPlayerParachuteStates[] = { + sub_08073468, sub_080734D4, sub_08073504, sub_08073584, sub_0807379C, sub_080737BC, sub_0807380C, sub_08073884, + }; + + if (!RunQueuedAction()) { + UpdateFloorType(); + this->spriteOrientation.flipY = 1; + this->spriteRendering.b3 = 1; + gPlayerState.framestate = PL_STATE_PARACHUTE; + sPlayerParachuteStates[this->subAction](this); + } +} + +static void sub_08073468(Entity* this) { + gPlayerState.animation = 1792; + gPlayerState.jumpStatus = 0; + this->zVelocity = -0x10000; + this->subAction++; + this->field_0x7c.WORD = 480; + this->direction = Direction8FromAnimationState(this->animationState); + if ((gPlayerState.flags & PL_PARACHUTE) == 0) { + gPlayerState.flags |= PL_PARACHUTE; + CreateObjectWithParent(this, OBJECT_61, 0, 0); + } + ResetPlayer(); + if (this->zVelocity > 0 || gPlayerState.field_0x38 == 1) + COLLISION_OFF(this); +} + +static void sub_080734D4(Entity* this) { + GravityUpdate(this, -0x1000); + if (this->zVelocity > 0 || gPlayerState.field_0x38 == 1) { + this->zVelocity = 0x49000; + this->subAction++; + } +} + +static void sub_08073504(Entity* this) { + GravityUpdate(this, this->zVelocity < 0 ? 0x800 : 0x4000); + if (this->zVelocity < 0 && this->z.HALF.HI > -32) { + this->subAction++; + *((u32*)&this->field_0x80.HWORD) = this->direction << 8; + this->field_0x86.HALF.HI = 0; + this->field_0x86.HALF.LO = 0; + gPlayerState.animation = 1800; + if (gPlayerState.field_0x38 == 1) { + COLLISION_OFF(this); + this->subAction = 6; + this->speed = 16; + this->actionDelay = 30; + SoundReq(SFX_NEAR_PORTAL); + } + } + UpdateAnimationSingleFrame(this); +} + +static const u16 gUnk_0811BC28[] = { + 0x0708, + 0x071C, + 0x0718, + 0x0714, +}; + +static const u16 gUnk_0811BC30[] = { + 0x0708, + 0x0728, + 0x0724, + 0x0720, +}; + +static NONMATCH("asm/non_matching/player/sub_08073584.inc", void sub_08073584(Entity* this)) { + u32 state, dir, tmp, tmp2, idx; + + if ((gPlayerState.field_0x90.HALF.HI & 0x80) || this->iframes > 0 || gPlayerState.field_0x3c[0] || + (gPlayerState.flags & PL_PARACHUTE) == 0) { + gPlayerState.jumpStatus |= 0x40; + sub_0807921C(); + sub_08073904(this); + gPlayerState.animation = 1840; + return; + } + gUnk_0200AF00.filler25[10] = 1; + if (sub_0807A2F8(0)) { + this->subAction++; + this->direction = 4 * (this->animationState & 6); + COLLISION_OFF(this); + return; + } + if (gArea.locationIndex == 16) + this->speed = 256; + else + this->speed = 128; + if ((gPlayerState.field_0xd & 0x80) == 0) { + if (this->direction != gPlayerState.field_0xd) { + if (((this->direction - gPlayerState.field_0xd) & 0x1F) <= 0xF) + *(u32*)&this->field_0x80 -= 32; + else + *(u32*)&this->field_0x80 += 32; + } + } + this->direction = (*(u32*)&this->field_0x80 >> 8) & 0x1F; + sub_08079E08(); + state = 4 * this->animationState; + dir = this->direction; + if (this->animationState == 0) { + state = (state + 8) & 0x1F; + dir = (dir + 8) & 0x1F; + } + if (state - 7 > dir) { + tmp = (this->animationState - 2) & 7; + } else if (state + 7 < dir) { + tmp = (this->animationState + 2) & 7; + } else { + tmp = this->animationState; + } + if (tmp != this->animationState) { + this->field_0x86.HALF.HI = 20; + } + this->animationState = tmp; + idx = 0; + tmp2 = gPlayerState.field_0xd >> 2; + if (!this->field_0x86.HALF.HI || ((gPlayerState.field_0xd & 0x80) == 0 && this->animationState != tmp2)) { + if ((gPlayerState.field_0xd & 0x80) == 0) { + if (this->animationState != tmp2) { + if (this->animationState == (tmp2 ^ 4)) { + idx = 2; + } else { + if (this->animationState == (((tmp2 & 6) + 2) & 7)) { + idx = 1; + } else { + idx = 3; + } + } + } + } + if (gUnk_0811BC28[idx] == gPlayerState.animation) { + if (gArea.locationIndex == 16) + sub_080042BA(this, 2); + else + UpdateAnimationSingleFrame(this); + } else { + gPlayerState.animation = gUnk_0811BC28[idx]; + } + this->field_0x86.HALF.LO = idx; + } else { + + this->field_0x86.HALF.HI--; + if (gUnk_0811BC30[this->field_0x86.HALF.LO] == gPlayerState.animation) + UpdateAnimationSingleFrame(this); + else + gPlayerState.animation = gUnk_0811BC30[this->field_0x86.HALF.LO]; + } + if (--this->field_0x7c.WORD == -1) { + gPlayerState.jumpStatus |= 0x40; + sub_0807921C(); + } else { + u32 di = (this->field_0x7c.WORD / 20); + this->z.HALF.HI = -8 - di; + } +} +END_NONMATCH + +static void sub_0807379C(Entity* this) { + if (this->z.HALF.HI > -32) { + this->z.HALF.HI--; + } else { + this->subAction++; + } +} + +static void sub_080737BC(Entity* this) { + u16 pos; + u32 tmp; + + UpdateAnimationSingleFrame(this); + sub_0806F69C(this); + this->z.WORD += 0x4C00; + if (DirectionIsHorizontal(this->direction)) + pos = this->x.HALF.HI; + else + pos = this->y.HALF.HI; + tmp = 0xf; + tmp &= pos; + if (tmp == 8 && !sub_080002D0(this)) { + gPlayerState.jumpStatus |= 0x40; + sub_0807921C(); + } +} + +static void sub_0807380C(Entity* this) { + static const u16 sAnims[] = { + 0x0708, + 0x071C, + 0x0718, + 0x0714, + }; + + if ((gScreenTransition.frameCount & 3) == 0) { + u32 tmp = (this->animationState + 2) & 6; + this->animationState = tmp; + this->direction = 4 * tmp; + } + gPlayerState.animation = sAnims[this->animationState >> 1]; + if (this->z.HALF.HI < -16) { + GravityUpdate(this, 0x200); + } else { + if (--this->actionDelay == 0) { + this->subAction = 7; + this->actionDelay = 60; + this->zVelocity = 0x20000; + } + } + UpdateAnimationSingleFrame(this); +} + +void sub_08073884(Entity* this) { + static const u16 sAnims[] = { + 0x0708, + 0x071C, + 0x0718, + 0x0714, + }; + + if ((gScreenTransition.frameCount & 1) == 0) { + u32 tmp = (this->animationState + 2) & 6; + this->animationState = tmp; + this->direction = 4 * tmp; + } + gPlayerState.animation = sAnims[this->animationState >> 1]; + if (--this->actionDelay == 0) { + if (gPlayerState.field_0x39 != 0xff) + DoExitTransition(&gUnk_0813AD88[gPlayerState.field_0x39]); + else + InitParachuteRoom(); + } + GravityUpdate(this, -0x1800); + UpdateAnimationSingleFrame(this); +} + +void sub_08073904(Entity* this) { + static EntityAction* const sStates[] = { + sub_08073924, sub_08073968, sub_080739EC, sub_08073A94, sub_08073B8C, sub_08073C30, + }; + + sStates[gPlayerState.jumpStatus & 7](this); +} + +void sub_08073924(Entity* this) { + if ((gPlayerState.flags & PL_ROLLING) == 0 && (this->z.HALF.HI & 0x8000) && !gPlayerState.field_0xa) { + gPlayerState.jumpStatus = 0x40; + gPlayerState.field_0xd = 0xff; + this->direction = 0xff; + sub_08077B20(); + sub_08073968(this); + } +} + +static void sub_08073968(Entity* this) { + if ((gPlayerState.jumpStatus & 0xC0) == 0) { + this->direction = gPlayerState.field_0xd; + } + sub_08078F24(); + if ((gPlayerState.heldObject | gPlayerState.keepFacing) == 0) { + if (gPlayerState.flags & PL_NO_CAP) { + gPlayerState.animation = 1052; + } else { + if ((gPlayerState.flags & PL_MINISH) == 0) { + if (gPlayerState.flags & PL_MINECART) { + gPlayerState.animation = 2064; + } else { + gPlayerState.animation = 2060; + } + } + } + if ((gPlayerState.jumpStatus & 0xC0) == 0) { + sub_0806F948(this); + } + SoundReq(SFX_PLY_JUMP); + } + gPlayerState.jumpStatus = (gPlayerState.jumpStatus & ~7) | 2; +} + +static void sub_080739EC(Entity* this) { + u32 v; + + if ((gPlayerState.jumpStatus & 0xC0) != 0) { + gPlayerState.field_0xd = this->direction; + if (gPlayerState.jumpStatus & 0x80) + this->collisions = 0; + v = 0x2000; + } else { + if ((u16)sub_0806F854(this, 0, -12)) { + gPlayerState.jumpStatus |= 8; + v = 0x4000; + } else { + v = 0x2000; + if (gPlayerState.jumpStatus & 0x10) + v /= 2; + } + } + if ((gPlayerState.jumpStatus & 0xC0) == 0) { + if ((gPlayerState.jumpStatus & 0x20) && this->zVelocity == 0) { + this->zVelocity = 0x28000; + this->actionDelay = 10; + this->direction = 0xff; + gPlayerState.jumpStatus += 2; + gPlayerState.animation = 372; + ResetPlayerVelocity(); + return; + } + } + if (!GravityUpdate(this, v)) + sub_08073AD4(this); +} + +void sub_08073A94(Entity* this) { + if ((this->frame & 0x80) || this->knockbackDuration != 0) { + sub_08073B60(this); + } + if (gPlayerEntity.z.WORD != 0) { + gPlayerState.jumpStatus = 0; + sub_08073924(this); + } +} + +static void sub_08073AD4(Entity* this) { + u32 tmp; + + if ((this->collisionLayer & 2) == 0) { + this->spriteOrientation.flipY = 2; + this->spriteRendering.b3 = 2; + } + tmp = (gPlayerState.jumpStatus & ~0xC0); + if (this->action != PLAYER_MINISHDIE) { + sub_0807A2B8(); + gPlayerState.jumpStatus = 0; + UpdateFloorType(); + if (gPlayerState.queued_action != 0 || gPlayerState.swimState != 0) { + return; + } + if (gPlayerState.field_0x3[1]) + sub_08073B60(this); + } + gPlayerState.jumpStatus = tmp + 1; + if (gPlayerState.flags & PL_NO_CAP) + gPlayerState.animation = 1060; + else + gPlayerState.animation = 2080; + SoundReq(SFX_PLY_LAND); +} + +static void sub_08073B60(Entity* this) { + gPlayerState.field_0x1a[1] = 0; + gPlayerState.field_0x3[1] = 0; + gPlayerState.jumpStatus = 0; + sub_08079938(); + sub_080085B0(this); + if ((gPlayerState.flags & PL_USE_PORTAL) == 0) { + sub_080791BC(); + } +} + +void sub_08073B8C(Entity* this) { + if (!gPlayerState.field_0x3[1]) { + sub_08073B60(this); + return; + } + sub_0806F854(this, 0, -12); + if ((this->frame & 1) == 0) + UpdateAnimationSingleFrame(this); + COLLISION_OFF(this); + if (this->actionDelay != 0) { + --this->actionDelay; + return; + } + GravityUpdate(this, 0x4000); + if (this->z.HALF.HI >= -8) { + if (!gPlayerState.field_0x14 && (sub_0807A2B8() || !sub_08079D48())) { + COLLISION_ON(this); + sub_08073B60(this); + return; + } + gPlayerState.jumpStatus++; + this->actionDelay = 15; + InitScreenShake(0x10, 0); + SoundReq(SFX_14C); + } +} + +void sub_08073C30(Entity* this) { + if (!gPlayerState.field_0x3[1] || --this->actionDelay == 0xFF) { + sub_08073B60(this); + } else { + COLLISION_ON(this); + UpdateAnimationSingleFrame(this); + } +} + +static void PlayerMinish(Entity* this) { + static EntityAction* const sPlayerMinishStates[] = { + sub_08073C80, sub_08073D20, sub_08073F04, sub_08073F4C, sub_08073FD0, sub_08074018, sub_08074060, sub_080740D8, + }; + sPlayerMinishStates[this->subAction](this); +} + +extern Hitbox gUnk_0811BC80; + +static void sub_08073C80(Entity* this) { + static const Hitbox sMinishHitbox = { 0, -1, { 3, 2, 2, 3 }, 2, 2 }; + + gPlayerState.flags |= PL_MINISH; + gPlayerState.animation = 3096; + this->spriteSettings.draw = 3; + this->spritePriority.b1 = 3; + this->spriteSettings.shadow = 0; + this->spriteRendering.b0 = 0; + this->hitbox = (Hitbox*)&sMinishHitbox; + this->actionDelay = 0; + this->field_0xf = 2; + this->knockbackDuration = 0; + this->subAction = 1; + LoadSwapGFX(this, 1, 2); + gRoomControls.cameraTarget = this; + sub_080809D4(); + if (gScreenTransition.player_status.spawn_type == PL_SPAWN_9) { + gScreenTransition.player_status.spawn_type = PL_SPAWN_DEFAULT; + this->spriteSettings.draw = 0; + this->subAction = 2; + } else { + CreateObject(MINISH_EMOTICON, 0, 0); + } +} + +static void sub_08073D20(Entity* this) { + gPlayerState.framestate = PL_STATE_IDLE; + this->spritePriority.b1 = 3; + this->hurtType = 1; + ResetPlayerVelocity(); + if (!gPlayerState.swimState) + this->speed = 0xC0; + if (!sub_08079B24()) { + sub_08079708(this); + return; + } + if (!RunQueuedAction()) { + sub_08073904(this); + UpdateFloorType(); + if (gPlayerState.jumpStatus) + gPlayerState.framestate = PL_STATE_CAPE; + if (gPlayerState.floor_type != SURFACE_SHALLOW_WATER && gPlayerState.floor_type != SURFACE_WATER) { + gPlayerState.swimState = 0; + this->field_0x3c &= 0xFBu; + } + if (!RunQueuedAction() && this->subAction != 2) { + if ((gPlayerState.flags & PL_HIDDEN) == 0) { + sub_080085B0(this); + sub_080792D8(); + if (!gPlayerState.field_0xa && sub_08079550(gPlayerState.field_0xa)) + return; + if (this->knockbackDuration) { + this->direction = this->knockbackDirection; + return; + } + if (sub_080782C0()) { + RunQueuedAction(); + return; + } + COLLISION_ON(this); + } + if (!sub_08019840()) { + sub_08077698(this); + if (!GravityUpdate(this, 0x2000)) + gPlayerState.jumpStatus = 0; + if ((gPlayerState.field_0x7 & 0x80) == 0 && !gPlayerState.field_0xa) { + if (this->iframes <= 8) { + if (gPlayerState.swimState) { + gPlayerState.framestate = PL_STATE_SWIM; + sub_0807ACCC(this); + sub_08079E08(); + } else { + this->direction = gPlayerState.field_0xd; + if ((gPlayerState.field_0xd & 0x80) == 0) { + gPlayerState.framestate = PL_STATE_WALK; + sub_08079E08(1); + } + } + } + if (!gPlayerState.keepFacing) + sub_0806F948(this); + UpdateAnimationSingleFrame(this); + sub_0807B068(this); + if (sub_080793E4(16)) { + this->iframes = 20; + this->knockbackDuration = 4; + this->knockbackDirection = + DirectionTurnAround(Direction8FromAnimationState(this->animationState)); + ModHealth(-2); + SoundReq(SFX_PLY_VO6); + } + if ((gPlayerState.flags & PL_HIDDEN) == 0) + sub_08008AC6(this); + else + gPlayerState.framestate = PL_STATE_D; + } + } + } + } +} + +static void sub_08073F04(Entity* this) { + this->spritePriority.b1 = 2; + this->spriteSettings.draw = 0; + this->subAction++; + this->zVelocity = 0x28000; + this->speed = 0x100; + gPlayerState.flags &= ~PL_MINISH; + ResetPlayer(); +} + +static void sub_08073F4C(Entity* this) { + u32 x = gArea.curPortalX; + u32 y = gArea.curPortalY; + if (this->x.HALF.HI != x || this->y.HALF.HI != y) { + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gArea.curPortalX, gArea.curPortalY); + this->speed = 0x100; + sub_0806F69C(this); + } else { + COLLISION_OFF(this); + this->actionDelay = 30; + this->subAction++; + this->spriteSettings.flipX = 0; + *(u32*)&this->field_0x80.HWORD = 1152; + *(u32*)&this->cutsceneBeh.HWORD = 1152; + this->spriteRendering.b0 = 3; + sub_08074018(this); + gPlayerState.animation = 1852; + } +} + +static void sub_08073FD0(Entity* this) { + if (this->actionDelay != 0) { + if (--this->actionDelay != 0) { + return; + } + if (this->spriteSettings.draw == 0) { + this->spriteSettings.draw = 3; + SoundReq(SFX_PLY_JUMP); + } + } + GravityUpdate(this, 0x2000); + if (this->zVelocity == 0) { + this->subAction++; + SoundReq(SFX_PLY_GROW); + } +} + +static void sub_08074018(Entity* this) { + if (*(u32*)&this->field_0x80 > 0x100) + *(u32*)&this->field_0x80 -= 32; + if (*(u32*)&this->cutsceneBeh > 0x100) + *(u32*)&this->cutsceneBeh -= 32; + else + this->subAction++; + sub_0805EC9C(this, *(u32*)&this->field_0x80, *(u32*)&this->cutsceneBeh, 0); + UpdateAnimationSingleFrame(this); +} + +static void sub_08074060(Entity* this) { + if (!GravityUpdate(this, 0x2000)) { + this->hitbox = (Hitbox*)&gPlayerHitbox; + this->direction = DirectionSouth; + this->animationState = IdleSouth; + this->speed = 0x100; + this->spritePriority.b1 = 1; + this->spriteSettings.shadow = 1; + this->field_0xf = 0; + this->subAction++; + this->zVelocity = 0x20000; + gPlayerState.animation = 2060; + sub_0805EC60(this); + } else { + UpdateAnimationSingleFrame(this); + } +} + +static NONMATCH("asm/non_matching/player/sub_080740D8.inc", void sub_080740D8(Entity* this)) { + int v1; // r5 + int v2; // r6 + unsigned int v4; // r0 + Hitbox* v5; // r2 + int v6; // r0 + + UpdateAnimationSingleFrame(this); + if (!this->field_0xf) + v4 = this->direction; + else + v4 = this->direction ^ 0x10; + switch (v4) { + case 24: + v5 = this->hitbox; + v2 = this->x.HALF.HI - v5->unk2[0] + v5->offset_x - gRoomControls.roomOriginX; + v6 = this->y.HALF.HI; + v1 = v6 + v5->offset_y - gRoomControls.roomOriginY; + break; + case 8: + v5 = this->hitbox; + v2 = this->x.HALF.HI + v5->unk2[0] + v5->offset_x - gRoomControls.roomOriginX; + v6 = this->y.HALF.HI; + v1 = v6 + v5->offset_y - gRoomControls.roomOriginY; + break; + case 16: + v5 = this->hitbox; + v2 = this->x.HALF.HI + v5->offset_x - gRoomControls.roomOriginX; + v6 = this->y.HALF.HI + v5->unk2[3]; + v1 = v6 + v5->offset_y - gRoomControls.roomOriginY; + break; + case 0: + v5 = this->hitbox; + v2 = this->x.HALF.HI + v5->unk2[0] + v5->offset_x - gRoomControls.roomOriginX; + v6 = this->y.HALF.HI; + v1 = v6 + v5->offset_y - gRoomControls.roomOriginY; + break; + } + + if (sub_080086B4(v2, v1, gUnk_080082DC)) + sub_0806F69C(this); + else + this->field_0xf = 1; + if (!GravityUpdate(this, 0x2000)) + sub_0807921C(); +} +END_NONMATCH + +u32 sub_080741C4() { + if ((gPlayerState.jumpStatus && (gPlayerState.jumpStatus & 7) != 3) || gPlayerEntity.z.WORD != 0) { + gPlayerState.field_0x11 = 0; + gPlayerState.field_0x37 = 0; + return 1; + } + return 0; +} + +void SurfaceAction_DoNothing(Entity* this) { +} + +void SurfaceAction_Pit(Entity* this) { + if (!sub_080741C4() && sub_08079C30(this)) { + if (this->action != PLAYER_FALL) { + ResetPlayer(); + gPlayerState.queued_action = PLAYER_FALL; + } + } +} + +void SurfaceAction_SlopeGndGndVertical(Entity* this) { + sub_08074244(this, 8, 0x18); +} + +void SurfaceAction_SlopeGndGndHorizontal(Entity* this) { + sub_08074244(this, 0, 0x10); +} + +static void sub_08074244(Entity* this, u32 a1, u32 a2) { + if (gPlayerState.floor_type != SURFACE_LIGHT_GRADE && gPlayerState.floor_type != SURFACE_29) { + this->collisionLayer = 3; + this->spriteOrientation.flipY = 1; + this->spriteRendering.b3 = 1; + } + if (!sub_080741C4()) { + u32 tmp; + if (gPlayerState.dash_state == 0) { + tmp = gPlayerState.field_0xd; + } else { + tmp = 4 * this->animationState; + } + if (a1 != tmp || a2 != tmp) { + gPlayerState.field_0x80 -= 80; + } + } +} + +void SurfaceAction_6(Entity* this) { + if (gPlayerState.swimState != 0) { + gPlayerState.swimState = 0; + } + this->spritePriority.b0 = 4; + this->field_0x3c &= ~4; +} + +void SurfaceAction_7(Entity* this) { + if (!sub_080741C4() && (gPlayerState.flags & PL_MINISH) == 0 && gPlayerState.field_0x11 == 15) { + CreateObjectWithParent(this, OBJECT_E, 0, 0); + } +} + +void SurfaceAction_MinishDoorFront(Entity* this) { + if ((this->y.HALF.HI & 0xF) <= 0xD) { + this->collisions = 0x6600; + hide(this); + } else { + EnablePlayerDraw(this); + } +} + +void SurfaceAction_MinishDoorBack(Entity* this) { + if ((this->y.HALF.HI & 0xF) > 1) { + this->collisions = 0x6600; + hide(this); + } else { + EnablePlayerDraw(this); + } +} + +void SurfaceAction_A(Entity* this) { + if ((this->x.HALF.HI & 0xF) < 12) { + this->collisions = 0x66; + hide(this); + } else { + EnablePlayerDraw(this); + } +} + +void SurfaceAction_B(Entity* this) { + if ((this->x.HALF.HI & 0xF) > 4) { + this->collisions = 0x66; + hide(this); + } else { + EnablePlayerDraw(this); + } +} + +static void hide(Entity* this) { + gPlayerState.flags |= PL_HIDDEN; + this->type2 = 0x80; + this->spriteSettings.draw = 0; + COLLISION_OFF(this); + this->knockbackDuration = 0; + ResetPlayer(); +} + +void SurfaceAction_14(Entity* this) { + if (!sub_080741C4()) { + if (sub_08079C30(this)) { + u32 spd; + sub_0807AABC(this); + sub_08074808(this); + spd = this->speed; + this->speed = 0x300; + this->direction = 16; + gPlayerState.field_0xa |= 0x80; + sub_0806F69C(this); + this->speed = spd; + } + } +} + +void SurfaceAction_CloneTile(Entity* this) { + if (gPlayerState.field_0xa0[0] == 4) { + u32 item, n, i; + if (ItemIsSword(gSave.stats.itemOnA)) { + item = gSave.stats.itemOnA; + } else { + item = gSave.stats.itemOnB; + } + switch (item) { + case 1: + case 2: + n = 0; + break; + case 3: + n = 1; + break; + case 4: + n = 2; + break; + case 6: + n = 3; + break; + default: + break; + } + for (i = 0; i < n; ++i) { + if (gPlayerClones[i] == 0) + break; + } + if (n > i) { + Entity* e = CreateObjectWithParent(this, 0x10, i, 0); + gPlayerClones[i] = e; + if (e != NULL) { + CopyPosition(this, e); + } + } else { + gPlayerState.field_0x1a[1] |= 0x80; + gPlayerState.flags |= PL_CLONING; + this->x.WORD = (this->x.WORD & ~0xFFFFF) | 0x80000; + this->y.WORD = (this->y.WORD & ~0xFFFFF) | 0x80000; + sub_08077AEC(); + } + } +} + +void SurfaceAction_16(Entity* this) { + if (!sub_080741C4() && !gPlayerState.field_0x14) { + if (this->iframes == 0) { + ModHealth(-2); + SoundReq(SFX_PLY_VO6); + this->iframes = 24; + this->knockbackDuration = 4; + this->knockbackDirection = sub_080045D4((this->x.HALF.HI & 0xFFF0) | 8, (this->y.HALF.HI & 0xFFF0) | 8, + this->x.HALF.HI, this->y.HALF.HI); + } + if ((gPlayerState.flags & PL_MINISH) == 0) + sub_08008790(this, 7); + } +} + +void SurfaceAction_Ice(Entity* this) { + if (!sub_080741C4() && ((gPlayerState.field_0x34[1] & 0x80) == 0 || this->knockbackDuration != 0)) { + ResetPlayerVelocity(); + } +} + +void SurfaceAction_ShallowWater(Entity* this) { + if (!sub_080741C4()) { + if (gPlayerState.flags & PL_MINISH) { + this->spritePriority.b1 = 0; + SurfaceAction_Water(this); + } else { + if (gPlayerState.swimState) { + COLLISION_ON(this); + this->field_0x3c &= ~4; + this->spritePriority.b0 = 4; + gPlayerState.swimState = 0; + } + if ((gPlayerState.field_0x90.HALF.HI & 0xF00) || gPlayerState.field_0x11 == 1) + SoundReq(SFX_WATER_WALK); + } + } +} + +void SurfaceAction_SlopeGndWater(Entity* this) { + if (gPlayerState.swimState) { + COLLISION_ON(this); + this->field_0x3c &= ~4; + this->spritePriority.b0 = 4; + gPlayerState.swimState = 0; + } +} + +ASM_FUNC("asm/non_matching/player/sub_08074678.inc", void SurfaceAction_Swamp(Entity* this)); + +void SurfaceAction_Water(Entity* this) { + if (!sub_080741C4()) { + if (gPlayerState.field_0x14 == 0) { + gPlayerState.field_0x3f += 2; + } else { + gPlayerState.swimState = 0; + this->spritePriority.b0 = 4; + this->field_0x3c &= ~4; + } + if ((gPlayerState.swimState & 0xF) || sub_08079C30(this)) { + sub_08074808(this); + } + } +} + +void sub_08074808(Entity* this) { + sub_08077AEC(this); + if (GetInventoryValue(ITEM_FLIPPERS) == 1) { + if (!gPlayerState.swimState) { + if ((gPlayerState.flags & 0x10000) != 0) + gPlayerState.swimState = 1; + else + gPlayerState.swimState = 8; + this->speed = 0; + gPlayerState.field_0x82[7] = 0; + if ((gPlayerState.flags & PL_MINISH) == 0) + CreateFx(this, FX_WATER_SPLASH, 0); + SoundReq(SFX_1A5); + ResetPlayer(); + } + if ((gPlayerState.swimState & 0xF) != 1) { + sub_08079744(this); + --gPlayerState.swimState; + } + gPlayerState.flags &= ~(PL_BURNING | PL_FROZEN); + if ((gPlayerState.flags & PL_DRUGGED) != 0 && this->field_0x7a.HWORD <= 0xEu) + this->field_0x7a.HWORD = 15; + } else { + gPlayerState.queued_action = PLAYER_DROWN; + } +} + +void SurfaceAction_Button(Entity* this) { + gPlayerState.field_0x3f -= 2; +} + +void sub_080748D4() { + sub_080741C4(); +} + +void SurfaceAction_1B(Entity* this) { + if (!sub_080741C4()) { + if (this->collisionLayer != 1) { + this->y.HALF.HI += 12; + if ((gPlayerState.flags & PL_MINISH) == 0) + this->z.HALF.HI -= 12; + } + sub_0807AABC(this); + } +} + +void SurfaceAction_1C(Entity* this) { + if (!sub_080741C4()) { + if (sub_08079C30(this)) { + gPlayerState.queued_action = PLAYER_LAVA; + } + } +} + +void SurfaceAction_ClimbWall(Entity* this) { + if (GetInventoryValue(ITEM_GRIP_RING) == 1) { + SurfaceAction_Ladder(this); + } else { + this->y.HALF.HI = (this->y.HALF.HI & 0xFFF0) | 0xF; + gPlayerState.floor_type = SURFACE_NORMAL; + } +} + +void SurfaceAction_Ladder(Entity* this) { + if (!sub_080741C4()) { + gPlayerState.jumpStatus = 0; + this->spriteRendering.b3 = 1; + this->spriteOrientation.flipY = 1; + this->animationState = IdleNorth; + this->collisionLayer = 3; + ResetPlayer(); + } +} + +void SurfaceAction_2C(Entity* this) { + if (GetInventoryValue(68) == 1) { + SurfaceAction_AutoLadder(this); + } else { + this->y.HALF.HI &= 0xFFF0; + gPlayerState.floor_type = SURFACE_NORMAL; + } +} + +void SurfaceAction_AutoLadder(Entity* this) { + if (!sub_080741C4()) { + this->spriteRendering.b3 = 1; + this->spriteOrientation.flipY = 1; + this->animationState = IdleNorth; + this->collisionLayer = 3; + gPlayerState.swimState = 0; + this->field_0x3c &= ~4; + if ((this->y.HALF.HI & 0xF) <= 7) { + gPlayerState.animation = 723; + this->direction = DirectionSouth; + } else { + gPlayerState.animation = 726; + this->direction = DirectionNorth; + } + ResetPlayer(); + } +} + +void SurfaceAction_20(Entity* this) { + if (gPlayerState.swimState & 0x80) { + Entity* e = CreateObjectWithParent(&gPlayerEntity, GROUND_ITEM, ITEM_RUPEE1, 0); + if (e != NULL) { + e->actionDelay = 1; + UpdateSpriteForCollisionLayer(e); + sub_08000152(57, gPlayerState.field_0x22[0], this->collisionLayer); + } + } + SurfaceAction_Water(this); +} + +void SurfaceAction_22(Entity* this) { +} + +void SurfaceAction_Dust(Entity* this) { + if (!sub_080741C4()) { + gPlayerState.field_0x80 -= 128; + if (gPlayerState.field_0x11 == 1 || (gPlayerState.field_0x90.HALF.HI & 0xF00) != 0) { + if (gPlayerState.floor_type == SURFACE_DUST) + CreateObjectWithParent(this, OBJECT_21, 1, 0); + else + CreateObjectWithParent(this, OBJECT_21, 1, 1); + } + } +} + +void SurfaceAction_26(Entity* this) { + u32 v1; + + if (gPlayerState.dash_state == 0) + v1 = gPlayerState.field_0xd; + else + v1 = 4 * this->animationState; + sub_08074244(this, v1, v1); +} + +void SurfaceAction_Hole(Entity* this) { + if (!gPlayerState.field_0x14 && !sub_080741C4()) { + if (gPlayerState.flags & PL_MINISH) + SurfaceAction_Pit(this); + else + gPlayerState.queued_action = PLAYER_INHOLE; + } +} + +void SurfaceAction_D(Entity* this) { + if (!sub_080741C4() && (gPlayerState.flags & PL_MINISH) == 0) { + this->animationState = IdleNorth; + this->direction = DirectionNorth; + sub_08074BF8(this); + } +} + +void SurfaceAction_E(Entity* this) { + if (!sub_080741C4() && (gPlayerState.flags & PL_MINISH) == 0) { + this->animationState = IdleSouth; + this->direction = DirectionSouth; + sub_08074BF8(this); + } +} + +void SurfaceAction_F(Entity* this) { + if (!sub_080741C4() && (gPlayerState.flags & PL_MINISH) == 0) { + this->animationState = IdleWest; + this->direction = DirectionWest; + sub_08074BF8(this); + } +} + +void SurfaceAction_10(Entity* this) { + if (!sub_080741C4() && (gPlayerState.flags & PL_MINISH) == 0) { + this->animationState = IdleEast; + this->direction = DirectionEast; + sub_08074BF8(this); + } +} + +static void sub_08074BF8(Entity* this) { + ResetPlayer(); + this->spritePriority.b1 = 0; + this->speed = 320; + gPlayerState.flags |= 0x2000000; + gPlayerState.field_0xa |= 0x80; + gPlayerState.field_0x1a[0] |= 0x80; + gPlayerState.field_0x27[0]++; + sub_0806F69C(this); +} + +static void sub_08074C44(Entity* this) { + static EntityAction* const gUnk_0811BC88[] = { + sub_08074C68, + sub_08074CF8, + sub_08074F00, + sub_080750F4, + }; + + if (!RunQueuedAction()) + gUnk_0811BC88[this->subAction](this); +} + +static void sub_08074C68(Entity* this) { + this->field_0x68.HALF.LO = 0; + if (gPlayerState.field_0x38 != 1) { + if (*(ScriptExecutionContext**)&this->cutsceneBeh.HWORD == &gPlayerScriptExecutionContext) { + this->subAction = 1; + sub_0807DD64(this); + sub_08074CF8(this); + } + } else { + this->spriteSettings.draw = 1; + this->animationState = 0; + this->spritePriority.b1 = 0; + this->subAction = 2; + this->field_0x68.HALF.LO = 1; + sub_0807DD64(this); + if (!gPlayerState.field_0x39) + gPlayerState.animation = 1850; + else + gPlayerState.animation = 1846; + DoFade(5, 0x100); + } +} + +static void sub_08074CF8(Entity* this) { + u32 v3; + + v3 = this->animationState; + ExecuteScript(this, *(ScriptExecutionContext**)&this->cutsceneBeh.HWORD); + sub_08074D34(this, *(ScriptExecutionContext**)&this->cutsceneBeh.HWORD); + if ((this->field_0x82.HWORD & 1) != 0) + this->animationState = v3; + GravityUpdate(this, 0x2000); + UpdateAnimationSingleFrame(this); +} + +void sub_08074D34(Entity* this, ScriptExecutionContext* ctx) { + while (ctx->postScriptActions) { + u32 bit = (~ctx->postScriptActions + 1) & ctx->postScriptActions; + ctx->postScriptActions ^= bit; + switch (bit) { + case 0x1: + if (gPlayerState.flags & PL_NO_CAP) + gPlayerState.animation = 0x400; + else + gPlayerState.animation = 0x100; + break; + case 0x2: + if (gPlayerState.flags & PL_NO_CAP) + gPlayerState.animation = 1028; + else + gPlayerState.animation = 260; + break; + case 0x4: + break; + case 0x8: + if (gPlayerState.flags & PL_NO_CAP) + gPlayerState.animation = 1052; + else + gPlayerState.animation = 2060; + this->zVelocity = 0x18000; + break; + case 0x10: + CreateSpeechBubbleExclamationMark(this, 8, -24); + break; + case 0x20: + CreateSpeechBubbleQuestionMark(this, 8, -24); + break; + case 0x80: + this->spriteSettings.draw = 1; + break; + case 0x100: + this->spriteSettings.draw = 0; + break; + case 0x200: + this->field_0x82.HWORD = 0; + break; + case 0x1000: + this->field_0x82.HWORD &= ~1; + break; + case 0x2000: + this->field_0x82.HWORD |= 1; + break; + case 0x4000: + this->field_0x82.HWORD |= 8; + break; + case 0x8000: + this->field_0x82.HWORD |= 4; + break; + case 0x20000: + this->spriteSettings.flipX ^= 1; + break; + case 0x100000: + this->subAction = 2; + this->field_0x68.HALF.LO = 2; + break; + case 0x200000: + this->subAction = 3; + this->field_0x68.HALF.LO = 0; + break; + } + } +} + +static void sub_08074F00(Entity* this) { + static EntityAction* const gUnk_0811BC98[] = { + sub_08074F1C, sub_08074F2C, sub_08074F44, sub_08074F8C, sub_08074FEC, sub_0807501C, sub_0807508C, + }; + + gUnk_0811BC98[this->field_0x68.HALF.LO](this); +} + +void sub_08074F1C(Entity* this) { + this->field_0x68.HALF.LO = 1; + this->animationState = IdleNorth; +} + +void sub_08074F2C(Entity* this) { + ExecuteScript(this, *(ScriptExecutionContext**)&this->cutsceneBeh.HWORD); + sub_08074D34(this, *(ScriptExecutionContext**)&this->cutsceneBeh.HWORD); +} + +void sub_08074F44(Entity* this) { + typedef struct { + u8 fill[0x6c]; + Entity* e; + } fixme; + + this->field_0x68.HALF.LO++; + if (((fixme*)&gPlayerEntity)->e) + DeleteEntity(((fixme*)&gPlayerEntity)->e); + if (!gPlayerState.field_0x39) { + gPlayerState.animation = 1851; + gPlayerState.flags |= PL_NO_CAP; + } else { + gPlayerState.animation = 1847; + } +} + +void sub_08074F8C(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frame == 1) { + this->frame = 0; + gActiveScriptInfo.unk_00 |= 4; + } + if (this->frame & 0x80) { + this->field_0x68.HALF.LO++; + this->actionDelay = 8; + this->animationState = IdleSouth; + if (!gPlayerState.field_0x39) { + gPlayerState.animation = 1024; + } else { + gPlayerState.animation = 256; + } + } +} + +void sub_08074FEC(Entity* this) { + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0) { + this->field_0x68.HALF.LO++; + this->actionDelay = 4; + this->animationState = gPlayerState.field_0x3a; + } +} + +void sub_0807501C(Entity* this) { + if (--this->actionDelay == 0) { + this->animationState = gPlayerState.field_0x3a; + if (!gPlayerState.field_0x39) { + gPlayerState.animation = 1052; + } else { + gPlayerState.animation = 2060; + } + this->spritePriority.b1 = 1; + this->direction = Direction8FromAnimationState(this->animationState); + this->speed = 200; + this->zVelocity = 0x20000; + this->actionDelay = 8; + this->field_0x68.HALF.LO++; + SoundReq(SFX_PLY_JUMP); + } +} + +void sub_0807508C(Entity* this) { + UpdateAnimationSingleFrame(this); + if (GravityUpdate(this, 0x2000)) { + sub_0806F69C(this); + } else { + if (!gPlayerState.field_0x39) { + gPlayerState.animation = 1024; + } else { + gPlayerState.flags &= ~PL_NO_CAP; + gPlayerState.animation = 256; + } + if (--this->actionDelay == 0) { + this->animationState = IdleSouth; + this->subAction = 1; + this->field_0x68.HALF.LO = 0; + SoundReq(SFX_PLY_LAND); + } + } +} + +void sub_080750F4(Entity* this) { + static EntityAction* const gUnk_0811BCB4[] = { + sub_08075110, + sub_0807513C, + sub_0807518C, + sub_080751B4, + }; + gUnk_0811BCB4[this->field_0x68.HALF.LO](this); +} + +void sub_08075110(Entity* this) { + this->field_0x68.HALF.LO++; + this->field_0xf = this->animationState; + this->animationState = 0; + gPlayerState.animation = 1844; + gPlayerState.flags &= ~PL_NO_CAP; +} + +void sub_0807513C(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frame == 1) { + this->frame = 0; + SoundReq(SFX_PLY_JUMP); + } + if (this->frame == 2) { + this->frame = 0; + SoundReq(SFX_14B); + SoundReq(SFX_PLY_VO6); + } + if (this->frame & 0x80) { + this->field_0x68.HALF.LO++; + this->actionDelay = 60; + } +} + +void sub_0807518C(Entity* this) { + if (--this->actionDelay == 0) { + this->field_0x68.HALF.LO++; + gPlayerState.animation = 969; + } +} + +void sub_080751B4(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frame & 0x80) { + this->animationState = IdleSouth; + this->subAction = 1; + this->field_0x68.HALF.LO = 0; + gPlayerState.animation = 256; + } +} + +// regalloc +NONMATCH("asm/non_matching/player/sub_080751E8.inc", void sub_080751E8(u32 a1, u32 a2, void* script)) { + void* tmp; + Entity* e; + Entity* e2; + + typedef struct { + u8 filler[0x84]; + ScriptExecutionContext* ctx; + } fixme; + + MemClear(&gPlayerScriptExecutionContext, sizeof(ScriptExecutionContext)); + gPlayerScriptExecutionContext.scriptInstructionPointer = script; + ((fixme*)&gPlayerEntity)->ctx = &gPlayerScriptExecutionContext; + gPlayerState.queued_action = PLAYER_08074C44; + gPlayerState.field_0x38 = 1; + gPlayerState.field_0x39 = 0; + gPlayerState.field_0x3a = a2; + gPlayerState.flags |= 8; + if (!a1) { + gPlayerState.field_0x39 = 0; + tmp = &script_08009ECC; + } else { + gPlayerState.field_0x39 = 1; + tmp = &script_08009EF0; + } + e = CreateObject(0x5B, !gPlayerState.field_0x39 ? 2 : 0, 0); + if (e != NULL) { + CopyPosition(&gPlayerEntity, e); + StartCutscene(e, tmp); + } + e2 = CreateSpeechBubbleSleep(&gPlayerEntity, -14, -28); + *(Entity**)&gPlayerEntity.field_0x6c.HWORD = e2; + if (e2 != NULL) { + SetDefaultPriority(e2, 3); + } +} +END_NONMATCH + +void sub_0807529C(Entity* this) { + CreateSpeechBubbleQuestionMark(this, 8, -32); +} + +void sub_080752AC(Entity* this, ScriptExecutionContext* ctx) { + sub_0806F69C(this); + if (!ctx->unk_18) { + if (sub_080002B8(this) != 41) { + ctx->unk_18 = 1; + ctx->unk_19 = 6; + } + } else if (--ctx->unk_19 == 0) { + return; + } + gActiveScriptInfo.commandSize = 0; +} diff --git a/src/projectile/lakituCloudProjectile.c b/src/projectile/lakituCloudProjectile.c index 39c6f65f..9fff58bd 100644 --- a/src/projectile/lakituCloudProjectile.c +++ b/src/projectile/lakituCloudProjectile.c @@ -4,7 +4,7 @@ #include "player.h" #include "effects.h" -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern void sub_08079D84(void); extern void (*const LakituCloudProjectile_Functions[])(Entity*); @@ -44,7 +44,7 @@ void LakituCloudProjectile_SubAction2(Entity* this) { if (sub_0806F3E4(this) != 0) { if (this->hitType == 0xa6) { ModHealth(-2); - sub_0800449C(&gPlayerEntity, 0x7a); + SoundReqClipped(&gPlayerEntity, 0x7a); sub_08079D84(); } CreateFx(this, FX_DEATH, 0); diff --git a/src/projectile/v1DarkMagicProjectile.c b/src/projectile/v1DarkMagicProjectile.c index 76097b4d..2cbc6dd2 100644 --- a/src/projectile/v1DarkMagicProjectile.c +++ b/src/projectile/v1DarkMagicProjectile.c @@ -6,7 +6,7 @@ #include "functions.h" #include "asm.h" -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern void (*const V1DarkMagicProjectile_Functions[])(Entity*); extern void (*const V1DarkMagicProjectile_Actions[])(Entity*); @@ -173,7 +173,7 @@ void sub_080AAF74(Entity* this) { this->actionDelay = 0x1e; gPlayerEntity.iframes = 8; ModHealth(-4); - sub_0800449C(&gPlayerEntity, 0x7a); + SoundReqClipped(&gPlayerEntity, 0x7a); if (gPlayerEntity.health == 0) { this->health = 0; } diff --git a/src/projectile/v2Projectile.c b/src/projectile/v2Projectile.c index b3574211..0ed8e9cf 100644 --- a/src/projectile/v2Projectile.c +++ b/src/projectile/v2Projectile.c @@ -12,7 +12,7 @@ extern void (*const gUnk_0812A7F8[])(Entity*); extern void (*const gUnk_0812A800[])(Entity*); extern void (*const gUnk_0812A808[])(Entity*); -extern void sub_0800449C(Entity*, u32); +extern void SoundReqClipped(Entity*, u32); extern void sub_08079D84(void); extern s32 sub_080AF090(Entity*); @@ -43,7 +43,7 @@ void nullsub_542(Entity* this) { void sub_080ABC90(Entity* this) { if (sub_0806F3E4(this) != 0) { ModHealth(-2); - sub_0800449C(&gPlayerEntity, 0x7a); + SoundReqClipped(&gPlayerEntity, 0x7a); sub_08079D84(); CreateFx(this, FX_DEATH, 0); DeleteThisEntity(); diff --git a/src/roomInit.c b/src/roomInit.c index e553a20f..fc0a2ff2 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -1010,7 +1010,7 @@ void sub_0804BF38(u32 arg0, struct_0804BF38* arg1) } } - sub_08080964(gUnk_080D8E50[iVar3].shakeTime, gUnk_080D8E50[iVar3].shakeMag); + InitScreenShake(gUnk_080D8E50[iVar3].shakeTime, gUnk_080D8E50[iVar3].shakeMag); SoundReq(gUnk_080D8E50[iVar2].sfx); } #else @@ -4819,7 +4819,7 @@ void sub_StateChange_HouseInteriors2_LinksHouseBedroom(void) { gArea.musicIndex = gArea.pMusicIndex; SoundReq(SONG_PLAY_VOL_RESET | BGM_MINISH_CAP); } - if ((gPlayerState.flags & 8) == 0) { + if ((gPlayerState.flags & PL_NO_CAP) == 0) { LoadRoomEntityList(&gUnk_080F31D8); } } diff --git a/src/script.c b/src/script.c index 2a28188e..c771df3e 100644 --- a/src/script.c +++ b/src/script.c @@ -223,7 +223,7 @@ void StartPlayerScript(u16* script) { gPlayerScriptExecutionContext.scriptInstructionPointer = script; player = &gPlayerEntity; *(ScriptExecutionContext**)&player->cutsceneBeh = &gPlayerScriptExecutionContext; - gPlayerState.playerAction = 0x1c; + gPlayerState.queued_action = PLAYER_08074C44; gPlayerState.field_0x3a = 0; gPlayerState.field_0x39 = 0; gPlayerState.field_0x38 = 0; @@ -1072,7 +1072,7 @@ void ScriptCommand_0807E888(Entity* entity, ScriptExecutionContext* context) { void ScriptCommand_SetPlayerAction(Entity* entity, ScriptExecutionContext* context) { u32 tmp = GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer); - gPlayerState.playerAction = tmp; + gPlayerState.queued_action = tmp; gPlayerState.field_0x38 = tmp >> 8; gPlayerState.field_0x39 = tmp >> 0x10; gPlayerState.field_0x3a = tmp >> 0x18; @@ -1527,7 +1527,7 @@ void ScriptCommand_0807F0B4(Entity* entity, ScriptExecutionContext* context) { } void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context) { - sub_08080964(context->scriptInstructionPointer[1], context->scriptInstructionPointer[2]); + InitScreenShake(context->scriptInstructionPointer[1], context->scriptInstructionPointer[2]); } extern u8 gUnk_0811E750[]; diff --git a/src/sub_0807B820.c b/src/sub_0807B820.c index 7d2441c3..6d3f516b 100644 --- a/src/sub_0807B820.c +++ b/src/sub_0807B820.c @@ -5,7 +5,7 @@ extern void sub_0807B778(u32, u32); void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) { if (param_1 == 53) { - sub_08000152(53); + sub_08000152(53, param_2, param_3); sub_0807B778(param_2, param_3); sub_0807B778(param_2 + 1, param_3); sub_0807B778(param_2 - 1, param_3);