diff --git a/asm/code_08070698.s b/asm/code_08070698.s deleted file mode 100644 index 69452e1c..00000000 --- a/asm/code_08070698.s +++ /dev/null @@ -1,2487 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PlayerEmptyBottle -PlayerEmptyBottle: @ 0x08071E98 - push {lr} - ldr r2, _08071EAC @ =gUnk_0811BB48 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08071EAC: .4byte gUnk_0811BB48 - - thumb_func_start sub_08071EB0 -sub_08071EB0: @ 0x08071EB0 - push {r4, lr} - adds r4, r0, #0 - bl ResetPlayer - adds r0, r4, #0 - movs r1, #0xe - bl CreatePlayerBomb - cmp r0, #0 - beq _08071F12 - ldr r3, _08071EE4 @ =gPlayerState - adds r2, r3, #0 - adds r2, #0x38 - ldrb r1, [r2] - adds r0, #0x68 - strb r1, [r0] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - ldrb r0, [r2] - cmp r0, #0x20 - bne _08071EEC - ldr r0, _08071EE8 @ =0x00000614 - strh r0, [r3, #8] - b _08071F12 - .align 2, 0 -_08071EE4: .4byte gPlayerState -_08071EE8: .4byte 0x00000614 -_08071EEC: - cmp r0, #0x20 - blt _08071F00 - cmp r0, #0x25 - bgt _08071F00 - ldr r0, _08071EFC @ =0x000002DF - strh r0, [r3, #8] - b _08071F12 - .align 2, 0 -_08071EFC: .4byte 0x000002DF -_08071F00: - movs r0, #0xc2 - lsls r0, r0, #3 - strh r0, [r3, #8] - adds r0, r3, #0 - adds r0, #0x38 - ldrb r0, [r0] - movs r1, #2 - bl sub_0807CAA0 -_08071F12: - pop {r4, pc} - - thumb_func_start sub_08071F14 -sub_08071F14: @ 0x08071F14 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r4, #0x5a - ldrb r1, [r4] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08071F32 - ldr r1, _08071F34 @ =gPlayerState - movs r0, #0 - str r0, [r1, #0x2c] - bl sub_0807921C -_08071F32: - pop {r4, pc} - .align 2, 0 -_08071F34: .4byte gPlayerState - - thumb_func_start PlayerFrozen -PlayerFrozen: @ 0x08071F38 - push {lr} - ldr r2, _08071F4C @ =gUnk_0811BB50 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08071F4C: .4byte gUnk_0811BB50 - - thumb_func_start sub_08071F50 -sub_08071F50: @ 0x08071F50 - push {lr} - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - movs r1, #0x78 - strb r1, [r0, #0xe] - ldrb r1, [r0, #0xd] - adds r1, #1 - strb r1, [r0, #0xd] - ldr r1, _08071F78 @ =gPlayerState - movs r0, #0xa5 - lsls r0, r0, #2 - strh r0, [r1, #8] - bl sub_08077B20 - ldr r0, _08071F7C @ =0x00000195 - bl SoundReq - pop {pc} - .align 2, 0 -_08071F78: .4byte gPlayerState -_08071F7C: .4byte 0x00000195 - - thumb_func_start sub_08071F80 -sub_08071F80: @ 0x08071F80 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0x80 - lsls r1, r1, #6 - bl sub_08003FC4 - adds r5, r0, #0 - cmp r5, #0 - bne _08071FB8 - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r0, _08071FB4 @ =gPlayerState - strb r5, [r0, #2] - ldrb r0, [r0, #0x14] - cmp r0, #0 - bne _08071FB8 - bl sub_08079D48 - cmp r0, #0 - bne _08071FB8 - adds r0, r4, #0 - bl sub_08072008 - b _08072004 - .align 2, 0 -_08071FB4: .4byte gPlayerState -_08071FB8: - bl sub_08079B24 - cmp r0, #0 - bne _08071FC8 - adds r0, r4, #0 - bl sub_08079708 - b _08071FFE -_08071FC8: - ldr r0, _08071FEC @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - lsls r1, r1, #4 - ands r0, r1 - cmp r0, #0 - beq _08071FFE - bl sub_0807953C - cmp r0, #0 - beq _08071FF0 - ldrb r0, [r4, #0xe] - subs r0, #3 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x62 - movs r0, #2 - b _08071FF4 - .align 2, 0 -_08071FEC: .4byte gPlayerState -_08071FF0: - adds r1, r4, #0 - adds r1, #0x62 -_08071FF4: - strb r0, [r1] - movs r0, #0xe - ldrsb r0, [r4, r0] - cmp r0, #0 - bgt _08072004 -_08071FFE: - adds r0, r4, #0 - bl sub_08072008 -_08072004: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08072008 -sub_08072008: @ 0x08072008 - push {lr} - adds r3, r0, #0 - adds r1, r3, #0 - adds r1, #0x3d - movs r2, #0 - movs r0, #0xa0 - strb r0, [r1] - adds r0, r3, #0 - adds r0, #0x42 - strb r2, [r0] - ldrb r1, [r3, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r3, #0x10] - adds r0, r3, #0 - adds r0, #0x62 - strb r2, [r0] - ldr r2, _08072044 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _08072048 @ =0xFFFFF7FE - ands r0, r1 - str r0, [r2, #0x30] - adds r0, r3, #0 - movs r1, #0xd - movs r2, #0 - bl CreateFx - bl sub_080791BC - pop {pc} - .align 2, 0 -_08072044: .4byte gPlayerState -_08072048: .4byte 0xFFFFF7FE - - thumb_func_start sub_0807204C -sub_0807204C: @ 0x0807204C - push {lr} - ldr r2, _08072060 @ =gUnk_0811BB58 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08072060: .4byte gUnk_0811BB58 - - thumb_func_start sub_08072064 -sub_08072064: @ 0x08072064 - push {lr} - movs r1, #1 - strb r1, [r0, #0xd] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - ldr r2, _08072094 @ =gPlayerState - adds r1, r2, #0 - adds r1, #0x3a - ldrb r1, [r1] - strb r1, [r0, #0xe] - adds r0, r2, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, #1 - ldrb r0, [r0] - lsls r0, r0, #8 - orrs r1, r0 - strh r1, [r2, #8] - bl ResetPlayer - pop {pc} - .align 2, 0 -_08072094: .4byte gPlayerState - - thumb_func_start sub_08072098 -sub_08072098: @ 0x08072098 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _080720B4 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _080720D8 - b _080720C2 -_080720B4: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080720D8 -_080720C2: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _080720D4 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_080720D4: - bl sub_080791BC -_080720D8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080720DC -sub_080720DC: @ 0x080720DC - push {r4, lr} - adds r4, r0, #0 - bl sub_08078EFC - cmp r0, #0 - bne _080720F8 - ldr r0, _080720FC @ =gUnk_0811BB60 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_080720F8: - pop {r4, pc} - .align 2, 0 -_080720FC: .4byte gUnk_0811BB60 - - thumb_func_start sub_08072100 -sub_08072100: @ 0x08072100 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0xa0 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - ldr r0, _08072148 @ =gUnk_08114F88 - str r0, [r4, #0x48] - ldr r2, _0807214C @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x38 - ldrb r0, [r0] - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r2, #0 - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - beq _0807213A - movs r0, #0xff - strb r0, [r4, #0x15] -_0807213A: - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08072154 - ldr r0, _08072150 @ =0x00000404 - b _08072158 - .align 2, 0 -_08072148: .4byte gUnk_08114F88 -_0807214C: .4byte gPlayerState -_08072150: .4byte 0x00000404 -_08072154: - movs r0, #0x82 - lsls r0, r0, #1 -_08072158: - strh r0, [r2, #8] - bl ResetPlayer - adds r0, r4, #0 - bl sub_08072168 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08072168 -sub_08072168: @ 0x08072168 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - movs r2, #0xc - rsbs r2, r2, #0 - adds r0, r4, #0 - movs r1, #0 - bl sub_0806F854 - lsls r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #6 - cmp r0, #0 - beq _0807218A - movs r1, #0x80 - lsls r1, r1, #7 -_0807218A: - adds r0, r4, #0 - bl sub_08003FC4 - ldr r0, _080721A4 @ =gPlayerState - adds r0, #0x3a - ldrb r0, [r0] - cmp r0, #0 - beq _080721A8 - adds r0, r4, #0 - bl sub_0806F69C - b _080721AC - .align 2, 0 -_080721A4: .4byte gPlayerState -_080721A8: - bl sub_08079E08 -_080721AC: - ldr r1, _080721E0 @ =gPlayerState - ldrb r0, [r4, #0x15] - strb r0, [r1, #0xd] - bl sub_08019840 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _080721DE - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - bl sub_080791BC -_080721DE: - pop {r4, pc} - .align 2, 0 -_080721E0: .4byte gPlayerState - - thumb_func_start PlayerPull -PlayerPull: @ 0x080721E4 - push {lr} - ldr r1, _08072208 @ =gPlayerState - adds r1, #0xa8 - movs r2, #0x1a - strb r2, [r1] - ldr r2, _0807220C @ =gUnk_0811BB68 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - ldr r0, _08072210 @ =gUnk_0200AF00 - adds r0, #0x2e - movs r1, #8 - strb r1, [r0] - pop {pc} - .align 2, 0 -_08072208: .4byte gPlayerState -_0807220C: .4byte gUnk_0811BB68 -_08072210: .4byte gUnk_0200AF00 - - thumb_func_start sub_08072214 -sub_08072214: @ 0x08072214 - push {lr} - adds r3, r0, #0 - movs r0, #1 - strb r0, [r3, #0xd] - movs r0, #0x80 - strh r0, [r3, #0x24] - ldr r2, _08072244 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0x38 - ldrb r0, [r0] - strb r0, [r3, #0xe] - ldrb r0, [r3, #0x14] - movs r1, #4 - eors r0, r1 - lsls r0, r0, #2 - strb r0, [r3, #0x15] - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - bne _08072248 - movs r0, #0xd3 - lsls r0, r0, #2 - b _0807224A - .align 2, 0 -_08072244: .4byte gPlayerState -_08072248: - ldr r0, _0807225C @ =0x00000944 -_0807224A: - strh r0, [r2, #8] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - adds r0, r3, #0 - bl sub_08072260 - pop {pc} - .align 2, 0 -_0807225C: .4byte 0x00000944 - - thumb_func_start sub_08072260 -sub_08072260: @ 0x08072260 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0807229C @ =gPlayerState - adds r1, r5, #0 - adds r1, #0x80 - movs r0, #0 - strh r0, [r1] - bl sub_08079E08 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080722B0 - ldr r0, [r5, #0x30] - movs r1, #2 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r5, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - bne _080722A0 - movs r0, #0xd3 - lsls r0, r0, #2 - b _080722A2 - .align 2, 0 -_0807229C: .4byte gPlayerState -_080722A0: - ldr r0, _080722B4 @ =0x00000944 -_080722A2: - strh r0, [r5, #8] - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - bl sub_080791BC -_080722B0: - pop {r4, r5, pc} - .align 2, 0 -_080722B4: .4byte 0x00000944 - - thumb_func_start PlayerLava -PlayerLava: @ 0x080722B8 - push {lr} - ldr r1, _080722D4 @ =gPlayerState - adds r1, #0xa8 - movs r2, #0xa - strb r2, [r1] - ldr r2, _080722D8 @ =gUnk_0811BB70 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080722D4: .4byte gPlayerState -_080722D8: .4byte gUnk_0811BB70 - - thumb_func_start sub_080722DC -sub_080722DC: @ 0x080722DC - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldr r2, _08072318 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - adds r5, r2, #0 - cmp r0, #0 - bne _0807231C - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0xa0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - movs r0, #0x42 - movs r2, #0 - bl CreateObject - cmp r0, #0 - beq _0807230E - str r4, [r0, #0x54] -_0807230E: - movs r0, #0x8a - lsls r0, r0, #1 - strh r0, [r5, #8] - b _08072332 - .align 2, 0 -_08072318: .4byte gPlayerState -_0807231C: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - movs r0, #3 - strb r0, [r4, #0xd] - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0xa - strb r0, [r1] -_08072332: - ldr r0, [r5, #0x30] - ldr r1, _08072350 @ =0x00000401 - orrs r0, r1 - str r0, [r5, #0x30] - bl ResetPlayer - movs r0, #0x92 - lsls r0, r0, #1 - bl SoundReq - movs r0, #0x7a - bl SoundReq - pop {r4, r5, pc} - .align 2, 0 -_08072350: .4byte 0x00000401 - - thumb_func_start sub_08072354 -sub_08072354: @ 0x08072354 - push {r4, lr} - adds r4, r0, #0 - movs r2, #0xc - rsbs r2, r2, #0 - movs r1, #0 - bl sub_0806F854 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_08079744 - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - adds r3, r0, #0 - cmp r3, #0 - bne _080723C0 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x42 - strb r3, [r0] - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r2, _080723C4 @ =gPlayerState - ldr r0, _080723C8 @ =0x000002C1 - strh r0, [r2, #8] - ldr r0, [r2, #0x30] - ldr r1, _080723CC @ =0xFFFFFBFF - ands r0, r1 - str r0, [r2, #0x30] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - movs r1, #0xc - movs r2, #0 - bl CreateFx - movs r0, #0xd3 - lsls r0, r0, #1 - bl SoundReq -_080723C0: - pop {r4, pc} - .align 2, 0 -_080723C4: .4byte gPlayerState -_080723C8: .4byte 0x000002C1 -_080723CC: .4byte 0xFFFFFBFF - - thumb_func_start sub_080723D0 -sub_080723D0: @ 0x080723D0 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0807240A - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0x14 - strb r0, [r1] - subs r0, #0x16 - bl ModHealth - bl RespawnPlayer -_0807240A: - pop {r4, pc} - - thumb_func_start sub_0807240C -sub_0807240C: @ 0x0807240C - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x42 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08072448 - ldrb r0, [r2, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r1, r2, #0 - adds r1, #0x3d - movs r0, #0x14 - strb r0, [r1] - ldr r2, _0807244C @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _08072450 @ =0xFFFFFBFF - ands r0, r1 - str r0, [r2, #0x30] - movs r0, #2 - rsbs r0, r0, #0 - bl ModHealth - bl RespawnPlayer -_08072448: - pop {pc} - .align 2, 0 -_0807244C: .4byte gPlayerState -_08072450: .4byte 0xFFFFFBFF - - thumb_func_start sub_08072454 -sub_08072454: @ 0x08072454 - push {lr} - ldr r2, _08072468 @ =gUnk_0811BB80 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08072468: .4byte gUnk_0811BB80 - - thumb_func_start sub_0807246C -sub_0807246C: @ 0x0807246C - push {lr} - movs r1, #1 - strb r1, [r0, #0xd] - ldr r2, _0807248C @ =gPlayerState - adds r1, r2, #0 - adds r1, #0x38 - ldrb r1, [r1] - strb r1, [r0, #0xe] - movs r0, #0xf0 - lsls r0, r0, #2 - strh r0, [r2, #8] - movs r0, #0x7b - bl SoundReq - pop {pc} - .align 2, 0 -_0807248C: .4byte gPlayerState - - thumb_func_start sub_08072490 -sub_08072490: @ 0x08072490 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _080724AE - adds r0, r1, #0 - bl UpdateAnimationSingleFrame - bl sub_08079E08 - b _080724C2 -_080724AE: - adds r0, r1, #0 - adds r0, #0x3d - movs r1, #0x3c - strb r1, [r0] - movs r0, #8 - rsbs r0, r0, #0 - bl ModHealth - bl sub_080791D0 -_080724C2: - pop {pc} - - thumb_func_start PlayerRoomTransition -PlayerRoomTransition: @ 0x080724C4 - push {lr} - ldr r2, _080724D8 @ =gUnk_0811BB88 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080724D8: .4byte gUnk_0811BB88 - - thumb_func_start sub_080724DC -sub_080724DC: @ 0x080724DC - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - bl sub_0807A108 - adds r0, r4, #0 - bl sub_080002B8 - cmp r0, #0x29 - beq _0807254C - ldr r1, _08072530 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x89 - ldrb r0, [r0] - cmp r0, #0 - bne _08072512 - adds r0, r1, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08072512 - adds r0, r4, #0 - bl sub_0807AE20 -_08072512: - ldr r0, _08072534 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _08072538 - ldrb r0, [r4, #0x11] - lsrs r2, r0, #4 - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x11] - adds r0, r4, #0 - bl sub_080728AC - b _08072588 - .align 2, 0 -_08072530: .4byte gPlayerState -_08072534: .4byte gRoomControls -_08072538: - ldr r0, _08072548 @ =gPlayerState - ldrb r0, [r0, #0x1c] - cmp r0, #0 - bne _08072588 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _08072588 - .align 2, 0 -_08072548: .4byte gPlayerState -_0807254C: - ldrb r0, [r4, #0x18] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #1 - strb r0, [r4, #0xd] - ldr r0, _08072570 @ =gRoomVars - ldrb r0, [r0] - cmp r0, #0 - bne _08072588 - ldr r2, _08072574 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807257C - ldr r0, _08072578 @ =0x00000C18 - b _08072580 - .align 2, 0 -_08072570: .4byte gRoomVars -_08072574: .4byte gPlayerState -_08072578: .4byte 0x00000C18 -_0807257C: - movs r0, #0x82 - lsls r0, r0, #1 -_08072580: - strh r0, [r2, #8] - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] -_08072588: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807258C -sub_0807258C: @ 0x0807258C - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080725D0 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _08072604 - adds r0, r4, #0 - bl sub_0807A894 - cmp r0, #0x29 - bne _080725E4 - bl sub_08079E08 - bl sub_080797C4 - cmp r0, #0 - beq _080725DC - ldr r2, _080725D4 @ =gPlayerState - ldr r1, _080725D8 @ =gPlayerEntity - ldrh r0, [r1, #0x2e] - strh r0, [r2, #0x16] - ldrh r0, [r1, #0x32] - strh r0, [r2, #0x18] - ldrb r1, [r4, #0x11] - lsrs r2, r1, #4 - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x11] - adds r0, r4, #0 - bl sub_080728AC - b _08072604 - .align 2, 0 -_080725D0: .4byte gRoomControls -_080725D4: .4byte gPlayerState -_080725D8: .4byte gPlayerEntity -_080725DC: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _08072604 -_080725E4: - ldr r2, _08072624 @ =gPlayerState - ldr r1, _08072628 @ =gPlayerEntity - ldrh r0, [r1, #0x2e] - strh r0, [r2, #0x16] - ldrh r0, [r1, #0x32] - strh r0, [r2, #0x18] - ldrb r1, [r4, #0x11] - lsrs r2, r1, #4 - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x11] - adds r0, r4, #0 - bl sub_080728AC -_08072604: - ldr r1, _08072624 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x89 - ldrb r0, [r0] - cmp r0, #0 - bne _08072620 - adds r0, r1, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08072620 - adds r0, r4, #0 - bl sub_0807AE20 -_08072620: - pop {r4, pc} - .align 2, 0 -_08072624: .4byte gPlayerState -_08072628: .4byte gPlayerEntity - - thumb_func_start PlayerRoll -PlayerRoll: @ 0x0807262C - push {lr} - ldr r1, _08072648 @ =gPlayerState - adds r1, #0xa8 - movs r2, #9 - strb r2, [r1] - ldr r2, _0807264C @ =gUnk_0811BB90 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08072648: .4byte gPlayerState -_0807264C: .4byte gUnk_0811BB90 - - thumb_func_start sub_08072650 -sub_08072650: @ 0x08072650 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08072698 @ =gPlayerState - ldr r0, [r5, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xe - ands r0, r1 - cmp r0, #0 - bne _0807266E - ldr r0, _0807269C @ =gPlayerEntity - bl sub_0806F948 - ldrb r0, [r4, #0x14] - lsls r0, r0, #2 - strb r0, [r4, #0x15] -_0807266E: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xd] - strb r1, [r4, #0xe] - bl ResetPlayer - ldr r3, [r5, #0x30] - movs r0, #0x80 - ands r0, r3 - cmp r0, #0 - beq _080726A4 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - ldr r0, _080726A0 @ =0x00000C08 - b _080726BE - .align 2, 0 -_08072698: .4byte gPlayerState -_0807269C: .4byte gPlayerEntity -_080726A0: .4byte 0x00000C08 -_080726A4: - adds r0, r4, #0 - adds r0, #0x40 - movs r1, #0x1e - strb r1, [r0] - movs r0, #8 - ands r3, r0 - cmp r3, #0 - beq _080726BA - movs r0, #0x87 - lsls r0, r0, #3 - b _080726BE -_080726BA: - movs r0, #0xab - lsls r0, r0, #2 -_080726BE: - strh r0, [r5, #8] - ldr r2, _080726E0 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xb - orrs r0, r1 - str r0, [r2, #0x30] - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _080726E4 - movs r0, #0x79 - bl SoundReq - b _080726EA - .align 2, 0 -_080726E0: .4byte gPlayerState -_080726E4: - movs r0, #0x78 - bl SoundReq -_080726EA: - movs r0, #0x7e - bl SoundReq - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080726F4 -sub_080726F4: @ 0x080726F4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r3, _08072744 @ =gPlayerState - ldr r2, [r3, #0x30] - movs r0, #0xc0 - lsls r0, r0, #0xc - ands r0, r2 - movs r1, #0x80 - lsls r1, r1, #0xb - cmp r0, r1 - bne _08072730 - movs r0, #0x80 - lsls r0, r0, #0xe - ands r0, r2 - cmp r0, #0 - bne _0807274C - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0807274C - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807274C -_08072730: - ldr r0, _08072748 @ =0xFFFBFFFF - ands r2, r0 - str r2, [r3, #0x30] - bl sub_08078EFC - cmp r0, #0 - beq _08072740 - b _080728A0 -_08072740: - b _080727E0 - .align 2, 0 -_08072744: .4byte gPlayerState -_08072748: .4byte 0xFFFBFFFF -_0807274C: - ldrb r1, [r4, #0x14] - movs r0, #6 - ands r0, r1 - lsls r0, r0, #2 - strb r0, [r4, #0x15] - ldr r0, _080727A0 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0807277E - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0807277E - ldr r0, _080727A4 @ =gPlayerEntity - movs r1, #0x11 - movs r2, #0x40 - bl CreateFx - movs r0, #4 - strb r0, [r4, #0xe] -_0807277E: - ldr r5, _080727A0 @ =gPlayerState - ldr r0, [r5, #0x30] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - bne _0807278E - bl sub_0807A1B8 -_0807278E: - bl sub_08078EFC - cmp r0, #0 - beq _080727AC - ldr r0, [r5, #0x30] - ldr r1, _080727A8 @ =0xFFFBFFFF - ands r0, r1 - str r0, [r5, #0x30] - b _080728A0 - .align 2, 0 -_080727A0: .4byte gPlayerState -_080727A4: .4byte gPlayerEntity -_080727A8: .4byte 0xFFFBFFFF -_080727AC: - ldr r1, [r5, #0x30] - movs r0, #0x80 - lsls r0, r0, #0xc - ands r0, r1 - cmp r0, #0 - beq _080727C4 - ldr r0, _080727C0 @ =0xFFFBFFFF - ands r1, r0 - str r1, [r5, #0x30] - b _080728A0 - .align 2, 0 -_080727C0: .4byte 0xFFFBFFFF -_080727C4: - adds r0, r4, #0 - bl sub_0807AC54 - cmp r0, #0 - bne _080728A0 - ldr r1, [r5, #0x30] - movs r3, #0x94 - lsls r3, r3, #2 - ands r3, r1 - cmp r3, #0 - beq _080727EC - ldr r0, _080727E8 @ =0xFFFBFFFF - ands r1, r0 - str r1, [r5, #0x30] -_080727E0: - adds r0, r4, #0 - bl sub_080728AC - b _080728A0 - .align 2, 0 -_080727E8: .4byte 0xFFFBFFFF -_080727EC: - ldrb r0, [r5, #0x12] - cmp r0, #0x17 - bne _080727FE - adds r0, r4, #0 - bl sub_0800892E - adds r5, r4, #0 - adds r5, #0x5a - b _08072844 -_080727FE: - adds r1, r4, #0 - adds r1, #0x5a - ldrb r0, [r1] - movs r2, #0xf - ands r2, r0 - adds r5, r1, #0 - cmp r2, #1 - beq _0807282A - cmp r2, #1 - bgt _08072818 - cmp r2, #0 - beq _08072822 - b _0807283C -_08072818: - cmp r2, #2 - beq _08072832 - cmp r2, #3 - beq _0807283A - b _0807283C -_08072822: - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - b _0807283C -_0807282A: - ldrh r0, [r4, #0x24] - adds r0, #0x20 - strh r0, [r4, #0x24] - b _0807283C -_08072832: - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - b _0807283C -_0807283A: - strh r3, [r4, #0x24] -_0807283C: - bl sub_08078F24 - bl sub_08079E08 -_08072844: - ldrb r1, [r5] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - bne _08072860 - ldr r0, _080728A4 @ =gPlayerState - ldr r1, [r0, #0x30] - movs r0, #0x80 - ands r1, r0 - cmp r1, #0 - bne _08072860 - adds r0, r4, #0 - adds r0, #0x40 - strb r1, [r0] -_08072860: - ldrb r1, [r5] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08072870 - adds r0, r4, #0 - bl sub_08077698 -_08072870: - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08072882 - ldr r0, _080728A4 @ =gPlayerState - ldrb r0, [r0, #4] - cmp r0, #0 - beq _08072886 -_08072882: - bl sub_080791D0 -_08072886: - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0807289A - ldr r0, _080728A4 @ =gPlayerState - ldr r1, [r0, #0x30] - ldr r2, _080728A8 @ =0xFFDBFFFF - ands r1, r2 - str r1, [r0, #0x30] -_0807289A: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_080728A0: - pop {r4, r5, pc} - .align 2, 0 -_080728A4: .4byte gPlayerState -_080728A8: .4byte 0xFFDBFFFF - - thumb_func_start sub_080728AC -sub_080728AC: @ 0x080728AC - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_08079938 - ldr r0, _080728C8 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080728CC - adds r0, r4, #0 - bl sub_0807B068 - b _080728D0 - .align 2, 0 -_080728C8: .4byte gPlayerState -_080728CC: - bl sub_08078F60 -_080728D0: - ldr r1, _08072940 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _080728E0 - movs r0, #0 - strh r0, [r4, #0x24] -_080728E0: - ldr r0, [r1, #0x30] - movs r5, #0x40 - ands r5, r0 - adds r3, r0, #0 - cmp r5, #0 - bne _080728F6 - ldr r0, _08072944 @ =gPlayerEntity - ldrb r1, [r0, #0x18] - movs r2, #3 - orrs r1, r2 - strb r1, [r0, #0x18] -_080728F6: - movs r0, #0x80 - ands r0, r3 - cmp r0, #0 - bne _08072910 - ldr r2, _08072944 @ =gPlayerEntity - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] -_08072910: - ldr r0, _08072948 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _0807292C - cmp r5, #0 - beq _08072928 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_08072928: - bl sub_080791D0 -_0807292C: - ldr r0, _08072940 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - bne _0807293C - bl sub_0807A1B8 -_0807293C: - pop {r4, r5, pc} - .align 2, 0 -_08072940: .4byte gPlayerState -_08072944: .4byte gPlayerEntity -_08072948: .4byte gRoomControls - - thumb_func_start PlayerInHole -PlayerInHole: @ 0x0807294C - push {lr} - ldr r1, _08072968 @ =gPlayerState - adds r1, #0xa8 - movs r2, #0x17 - strb r2, [r1] - ldr r2, _0807296C @ =gUnk_0811BB98 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08072968: .4byte gPlayerState -_0807296C: .4byte gUnk_0811BB98 - - thumb_func_start sub_08072970 -sub_08072970: @ 0x08072970 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _08072A4C - movs r7, #1 - strb r7, [r5, #0xd] - ldrh r2, [r5, #0x2e] - movs r1, #0x10 - rsbs r1, r1, #0 - adds r0, r1, #0 - ands r0, r2 - movs r2, #8 - orrs r0, r2 - strh r0, [r5, #0x2e] - ldrh r0, [r5, #0x32] - ands r1, r0 - movs r0, #0xa - movs r3, #0 - orrs r1, r0 - strh r1, [r5, #0x32] - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - movs r1, #0x39 - rsbs r1, r1, #0 - ands r0, r1 - strb r0, [r2] - strb r3, [r5, #0xe] - ldr r2, _080729D8 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xd - orrs r0, r1 - str r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _080729DC - movs r0, #0x95 - lsls r0, r0, #4 - strh r0, [r2, #8] - adds r6, r5, #0 - adds r6, #0x38 - b _08072A14 - .align 2, 0 -_080729D8: .4byte gPlayerState -_080729DC: - ldr r0, _08072A50 @ =0x0000061C - strh r0, [r2, #8] - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _08072A54 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r4, #0x32 - ldrsh r1, [r5, r4] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r4, r5, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl sub_080001DA - ldr r1, _08072A58 @ =0x00004020 - adds r6, r4, #0 - cmp r0, r1 - bne _08072A14 - strb r7, [r5, #0xe] -_08072A14: - ldr r0, _08072A5C @ =0x00004070 - movs r7, #0x2e - ldrsh r1, [r5, r7] - ldr r3, _08072A54 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r7, #0x32 - ldrsh r2, [r5, r7] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r6] - bl SetTile - bl ResetPlayer - adds r0, r5, #0 - bl sub_08072A60 - movs r0, #0x81 - bl SoundReq -_08072A4C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08072A50: .4byte 0x0000061C -_08072A54: .4byte gRoomControls -_08072A58: .4byte 0x00004020 -_08072A5C: .4byte 0x00004070 - - thumb_func_start sub_08072A60 -sub_08072A60: @ 0x08072A60 - push {lr} - adds r2, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08072AC4 - ldrb r0, [r2, #0xe] - cmp r0, #1 - bne _08072A9C - movs r0, #3 - strb r0, [r2, #0xd] - movs r0, #0x28 - strb r0, [r2, #0xe] - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x61 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - ldr r1, _08072A94 @ =gPlayerState - ldr r0, _08072A98 @ =0x00000624 - strh r0, [r1, #8] - b _08072ACA - .align 2, 0 -_08072A94: .4byte gPlayerState -_08072A98: .4byte 0x00000624 -_08072A9C: - movs r0, #2 - strb r0, [r2, #0xd] - ldr r2, _08072AB4 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08072ABC - ldr r0, _08072AB8 @ =0x00000954 - strh r0, [r2, #8] - b _08072ACA - .align 2, 0 -_08072AB4: .4byte gPlayerState -_08072AB8: .4byte 0x00000954 -_08072ABC: - movs r0, #0xc4 - lsls r0, r0, #3 - strh r0, [r2, #8] - b _08072ACA -_08072AC4: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_08072ACA: - pop {pc} - - thumb_func_start sub_08072ACC -sub_08072ACC: @ 0x08072ACC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08072AE0 @ =gPlayerState - ldrb r3, [r5, #0xd] - lsls r2, r3, #0x18 - lsrs r0, r2, #0x18 - cmp r0, #0xff - bne _08072AE4 - movs r0, #0 - b _08072B56 - .align 2, 0 -_08072AE0: .4byte gPlayerState -_08072AE4: - ldrb r1, [r4, #0xf] - cmp r1, #7 - bls _08072B50 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - strb r3, [r4, #0x15] - movs r0, #0xd0 - lsls r0, r0, #9 - str r0, [r4, #0x20] - movs r0, #0x78 - strh r0, [r4, #0x24] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x80 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - movs r1, #0x39 - rsbs r1, r1, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - movs r0, #0x41 - strb r0, [r5, #2] - bl sub_0807921C - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _08072B4C @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r5, #0x32 - ldrsh r1, [r4, r5] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - b _08072B58 - .align 2, 0 -_08072B4C: .4byte gRoomControls -_08072B50: - lsrs r0, r2, #0x1a - strb r0, [r4, #0x14] - adds r0, r1, #1 -_08072B56: - strb r0, [r4, #0xf] -_08072B58: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08072B5C -sub_08072B5C: @ 0x08072B5C - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - movs r1, #0x28 - subs r1, r1, r0 - asrs r1, r1, #4 - adds r1, #1 - adds r0, r5, #0 - bl sub_080042BA - adds r0, r5, #0 - bl sub_0806F948 - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _08072B82 - subs r0, #1 - strb r0, [r5, #0xe] - b _08072C40 -_08072B82: - ldr r0, _08072C04 @ =0x00004021 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _08072C08 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - ldrb r0, [r5, #0x14] - lsls r0, r0, #2 - strb r0, [r5, #0x15] - movs r0, #1 - bl sub_0807A2F8 - adds r4, r0, #0 - cmp r4, #0 - bne _08072C10 - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - adds r2, r5, #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] - movs r0, #0x40 - strh r0, [r5, #0x24] - movs r0, #0xe4 - lsls r0, r0, #0xa - str r0, [r5, #0x20] - ldr r0, [r5, #0x34] - subs r0, #1 - str r0, [r5, #0x34] - ldr r1, _08072C0C @ =gPlayerState - movs r0, #0x41 - strb r0, [r1, #2] - movs r2, #0xc - rsbs r2, r2, #0 - adds r0, r5, #0 - movs r1, #0 - bl sub_0806F854 - bl sub_0807921C - b _08072C40 - .align 2, 0 -_08072C04: .4byte 0x00004021 -_08072C08: .4byte gRoomControls -_08072C0C: .4byte gPlayerState -_08072C10: - bl sub_08052620 - cmp r0, #0 - bne _08072C1E - adds r0, r5, #0 - bl sub_08004542 -_08072C1E: - ldrb r0, [r5, #0xd] - adds r0, #1 - strb r0, [r5, #0xd] - lsls r4, r4, #4 - subs r4, #4 - lsls r4, r4, #0xc - str r4, [r5, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - ldr r1, _08072C44 @ =gPlayerState - movs r0, #0x81 - lsls r0, r0, #4 - strh r0, [r1, #8] - movs r0, #0x7c - bl SoundReq -_08072C40: - pop {r4, r5, r6, pc} - .align 2, 0 -_08072C44: .4byte gPlayerState - - thumb_func_start sub_08072C48 -sub_08072C48: @ 0x08072C48 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0806F69C - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08072C98 - adds r0, r4, #0 - movs r1, #7 - bl sub_08008790 - ldr r4, _08072C90 @ =gPlayerState - ldrb r0, [r4, #0x14] - cmp r0, #0 - beq _08072C94 - bl sub_08008B22 - cmp r0, #0 - beq _08072C98 - movs r0, #7 - strb r0, [r4, #0x11] - ldr r0, [r4, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08072C98 - bl sub_080791BC - b _08072C98 - .align 2, 0 -_08072C90: .4byte gPlayerState -_08072C94: - bl sub_0807921C -_08072C98: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08072C9C -sub_08072C9C: @ 0x08072C9C - push {lr} - ldr r1, _08072CB8 @ =gPlayerState - adds r1, #0xa8 - movs r2, #0x11 - strb r2, [r1] - ldr r2, _08072CBC @ =gUnk_0811BBAC - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08072CB8: .4byte gPlayerState -_08072CBC: .4byte gUnk_0811BBAC - - thumb_func_start sub_08072CC0 -sub_08072CC0: @ 0x08072CC0 - movs r1, #1 - strb r1, [r0, #0xd] - ldrb r2, [r0, #0x10] - movs r1, #0x7f - ands r1, r2 - strb r1, [r0, #0x10] - ldr r3, _08072CF4 @ =gPlayerState - adds r1, r3, #0 - adds r1, #0x3a - ldrb r1, [r1] - lsrs r1, r1, #2 - adds r1, #1 - strb r1, [r0, #0xf] - adds r1, r3, #0 - adds r1, #0x39 - ldrb r1, [r1] - strb r1, [r0, #0x15] - movs r2, #0 - movs r1, #0x80 - lsls r1, r1, #3 - strh r1, [r0, #0x24] - ldr r0, _08072CF8 @ =0x00000524 - strh r0, [r3, #8] - strb r2, [r3, #5] - bx lr - .align 2, 0 -_08072CF4: .4byte gPlayerState -_08072CF8: .4byte 0x00000524 - - thumb_func_start sub_08072CFC -sub_08072CFC: @ 0x08072CFC - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - bl sub_080042BA - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _08072D1C - adds r0, r4, #0 - bl sub_0806F69C - b _08072D4E -_08072D1C: - movs r0, #2 - strb r0, [r4, #0xd] - ldr r2, _08072D50 @ =gPlayerState - adds r1, r2, #0 - adds r1, #0x38 - ldrb r0, [r1] - cmp r0, #7 - bhi _08072D30 - movs r0, #8 - strb r0, [r1] -_08072D30: - ldrb r0, [r1] - lsls r0, r0, #0xc - str r0, [r4, #0x20] - movs r1, #0 - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - movs r0, #0x81 - lsls r0, r0, #4 - strh r0, [r2, #8] - movs r0, #5 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - bl ResetPlayer -_08072D4E: - pop {r4, pc} - .align 2, 0 -_08072D50: .4byte gPlayerState - - thumb_func_start sub_08072D54 -sub_08072D54: @ 0x08072D54 - push {r4, r5, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - movs r2, #0xc - rsbs r2, r2, #0 - adds r0, r4, #0 - movs r1, #0 - bl sub_0806F854 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08072D7A - adds r0, r4, #0 - bl sub_0806F69C - ldrb r0, [r4, #0xe] - subs r0, #1 - b _08072E80 -_08072D7A: - adds r0, r4, #0 - bl sub_0806F730 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileType - adds r2, r0, #0 - ldrb r5, [r4, #0xf] - cmp r5, #1 - beq _08072DD0 - cmp r5, #1 - bgt _08072D9C - cmp r5, #0 - beq _08072DA6 - b _08072E6C -_08072D9C: - cmp r5, #2 - beq _08072DFA - cmp r5, #3 - beq _08072E30 - b _08072E6C -_08072DA6: - ldr r1, _08072DC8 @ =gUnk_0811BBD4 - ldr r0, _08072DCC @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072E6C - movs r0, #1 - strb r0, [r4, #0xe] - strb r0, [r4, #0xf] - b _08072E6C - .align 2, 0 -_08072DC8: .4byte gUnk_0811BBD4 -_08072DCC: .4byte gPlayerEntity -_08072DD0: - ldr r1, _08072DEC @ =gUnk_0811BBD4 - ldr r0, _08072DF0 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072DF4 - strb r5, [r4, #0xe] - b _08072E6C - .align 2, 0 -_08072DEC: .4byte gUnk_0811BBD4 -_08072DF0: .4byte gPlayerEntity -_08072DF4: - movs r0, #2 - strb r0, [r4, #0xf] - b _08072E6C -_08072DFA: - ldrb r0, [r4, #0x14] - movs r5, #4 - eors r0, r5 - strb r0, [r4, #0x14] - ldr r1, _08072E28 @ =gUnk_0811BBD4 - ldr r0, _08072E2C @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072E22 - movs r0, #1 - strb r0, [r4, #0xe] - movs r0, #3 - strb r0, [r4, #0xf] -_08072E22: - ldrb r0, [r4, #0x14] - eors r0, r5 - b _08072E6A - .align 2, 0 -_08072E28: .4byte gUnk_0811BBD4 -_08072E2C: .4byte gPlayerEntity -_08072E30: - ldrb r0, [r4, #0x14] - movs r1, #4 - eors r0, r1 - strb r0, [r4, #0x14] - ldr r1, _08072E58 @ =gUnk_0811BBD4 - ldr r0, _08072E5C @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072E60 - movs r0, #1 - strb r0, [r4, #0xe] - b _08072E64 - .align 2, 0 -_08072E58: .4byte gUnk_0811BBD4 -_08072E5C: .4byte gPlayerEntity -_08072E60: - movs r0, #4 - strb r0, [r4, #0xf] -_08072E64: - ldrb r0, [r4, #0x14] - movs r1, #4 - eors r0, r1 -_08072E6A: - strb r0, [r4, #0x14] -_08072E6C: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08072E7A - adds r0, r4, #0 - bl sub_0806F69C - b _08072E7E -_08072E7A: - bl sub_08079E08 -_08072E7E: - movs r0, #0 -_08072E80: - strb r0, [r4, #0xe] - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08072F10 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _08072EAA - adds r0, r4, #0 - bl sub_0800455E - b _08072EB0 -_08072EAA: - adds r0, r4, #0 - bl sub_08004542 -_08072EB0: - adds r0, r4, #0 - movs r1, #7 - bl sub_08008790 - ldr r5, _08072EDC @ =gPlayerState - ldrb r0, [r5, #0x14] - cmp r0, #0 - beq _08072EE0 - bl sub_08008B22 - cmp r0, #0 - beq _08072F10 - movs r0, #7 - strb r0, [r5, #0x11] - ldr r0, [r5, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08072F10 - bl sub_080791BC - b _08072F10 - .align 2, 0 -_08072EDC: .4byte gPlayerState -_08072EE0: - ldr r0, [r5, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08072EF4 - ldr r0, _08072EF0 @ =0x00000424 - b _08072EF8 - .align 2, 0 -_08072EF0: .4byte 0x00000424 -_08072EF4: - movs r0, #0x82 - lsls r0, r0, #4 -_08072EF8: - strh r0, [r5, #8] - movs r1, #0 - movs r0, #6 - strb r0, [r4, #0xe] - movs r0, #3 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x42 - strb r1, [r0] - movs r0, #0x7d - bl SoundReq -_08072F10: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08072F14 -sub_08072F14: @ 0x08072F14 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _08072F2C - bl sub_0807921C - b _08072F32 -_08072F2C: - adds r0, r1, #0 - bl UpdateAnimationSingleFrame -_08072F32: - pop {pc} - - thumb_func_start sub_08072F34 -sub_08072F34: @ 0x08072F34 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl sub_08078EFC - cmp r0, #0 - bne _08072F86 - ldr r6, _08072F88 @ =gPlayerState - adds r1, r6, #0 - adds r1, #0xa8 - movs r0, #0x18 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0 - movs r2, #0 - bl sub_0807A1E8 - strb r0, [r6, #0x12] - ldr r1, _08072F8C @ =gUnk_0811BBE4 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r5, r4, #0 - adds r5, #0x42 - ldrb r0, [r5] - cmp r0, #0 - beq _08072F86 - bl sub_080792D8 - ldrb r1, [r5] - cmp r1, #0 - bne _08072F86 - movs r0, #0x1d - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - strh r1, [r4, #0x30] - ldr r0, _08072F90 @ =0x000002CF - strh r0, [r6, #8] -_08072F86: - pop {r4, r5, r6, pc} - .align 2, 0 -_08072F88: .4byte gPlayerState -_08072F8C: .4byte gUnk_0811BBE4 -_08072F90: .4byte 0x000002CF - - thumb_func_start sub_08072F94 -sub_08072F94: @ 0x08072F94 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08072FB4 @ =gPlayerState - ldrb r1, [r0, #0x12] - adds r3, r0, #0 - cmp r1, #0x1e - beq _08072FB8 - cmp r1, #0x1e - blt _08072FAE - cmp r1, #0x2c - bgt _08072FAE - cmp r1, #0x2a - bge _08072FB8 -_08072FAE: - bl sub_0807921C - b _0807308C - .align 2, 0 -_08072FB4: .4byte gPlayerState -_08072FB8: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - strb r1, [r2] - adds r2, r3, #0 - ldrb r1, [r2, #0xd] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08073072 - strb r1, [r4, #0x15] - ldrb r0, [r2, #0xd] - cmp r0, #8 - beq _08072FDE - cmp r0, #0x18 - bne _08073008 -_08072FDE: - ldrb r0, [r2, #0x12] - cmp r0, #0x1e - beq _0807308C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08072FF8 - movs r0, #0xb5 - lsls r0, r0, #2 - b _08072FFA -_08072FF8: - ldr r0, _08073004 @ =0x000002D5 -_08072FFA: - strh r0, [r2, #8] - adds r0, r4, #0 - bl sub_08073094 - b _0807306A - .align 2, 0 -_08073004: .4byte 0x000002D5 -_08073008: - ldrb r0, [r2, #0x12] - cmp r0, #0x1e - bne _08073020 - movs r0, #7 - ands r0, r1 - cmp r0, #0 - beq _08073020 - adds r0, r1, #0 - adds r0, #8 - movs r1, #0x10 - ands r0, r1 - strb r0, [r4, #0x15] -_08073020: - ldrb r1, [r4, #0x15] - movs r2, #0x10 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _0807304C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _08073044 - ldr r0, _08073040 @ =0x000002D1 - b _08073068 - .align 2, 0 -_08073040: .4byte 0x000002D1 -_08073044: - ldr r0, _08073048 @ =0x000002D2 - b _08073068 - .align 2, 0 -_08073048: .4byte 0x000002D2 -_0807304C: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _08073064 - ldr r0, _08073060 @ =0x000002CF - b _08073068 - .align 2, 0 -_08073060: .4byte 0x000002CF -_08073064: - movs r0, #0xb4 - lsls r0, r0, #2 -_08073068: - strh r0, [r3, #8] -_0807306A: - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - b _0807308C -_08073072: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08073088 - movs r0, #0xb5 - lsls r0, r0, #2 - strh r0, [r2, #8] - b _0807308C -_08073088: - ldr r0, _08073090 @ =0x000002D5 - strh r0, [r3, #8] -_0807308C: - pop {r4, pc} - .align 2, 0 -_08073090: .4byte 0x000002D5 - - thumb_func_start sub_08073094 -sub_08073094: @ 0x08073094 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - ldr r2, _080730FC @ =gUnk_0811BBEC - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - strh r0, [r4, #0x24] - bl sub_08079E08 - bl sub_08019840 - cmp r0, #0 - bne _080731A4 - ldr r0, _08073100 @ =gPlayerState - ldrb r1, [r0, #6] - movs r2, #0x80 - eors r1, r2 - strb r1, [r0, #6] - ldrb r0, [r0, #0x12] - cmp r0, #0x2a - beq _080730DE - cmp r0, #0x2c - beq _080730DE - bl sub_0807A1B8 -_080730DE: - bl sub_08078EFC - cmp r0, #0 - bne _080731A4 - ldr r1, _08073100 @ =gPlayerState - ldrb r0, [r1, #0x12] - subs r0, #0x19 - adds r2, r1, #0 - cmp r0, #0x13 - bhi _08073178 - lsls r0, r0, #2 - ldr r1, _08073104 @ =_08073108 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080730FC: .4byte gUnk_0811BBEC -_08073100: .4byte gPlayerState -_08073104: .4byte _08073108 -_08073108: @ jump table - .4byte _0807316C @ case 0 - .4byte _08073178 @ case 1 - .4byte _08073178 @ case 2 - .4byte _08073178 @ case 3 - .4byte _08073178 @ case 4 - .4byte _0807317E @ case 5 - .4byte _08073178 @ case 6 - .4byte _08073178 @ case 7 - .4byte _08073178 @ case 8 - .4byte _08073178 @ case 9 - .4byte _08073178 @ case 10 - .4byte _08073178 @ case 11 - .4byte _08073178 @ case 12 - .4byte _08073178 @ case 13 - .4byte _08073178 @ case 14 - .4byte _08073178 @ case 15 - .4byte _08073178 @ case 16 - .4byte _08073158 @ case 17 - .4byte _0807317E @ case 18 - .4byte _08073158 @ case 19 -_08073158: - adds r1, r4, #0 - adds r1, #0x42 - movs r0, #0 - strb r0, [r1] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x16 - orrs r0, r1 - str r0, [r2, #0x30] - b _0807317E -_0807316C: - adds r0, r4, #0 - bl sub_08074808 - bl sub_080791D0 - b _080731A4 -_08073178: - bl sub_0807921C - b _080731A4 -_0807317E: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _080731A4 - bl sub_0807A1B8 - bl sub_08078EFC - cmp r0, #0 - bne _080731A4 - ldrb r0, [r4, #0xd] - subs r0, #1 - strb r0, [r4, #0xd] -_080731A4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start PlayerUseEntrance -PlayerUseEntrance: @ 0x080731A8 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080731D0 @ =gPlayerState - adds r0, #0xa8 - movs r1, #0x1c - strb r1, [r0] - movs r0, #0 - movs r1, #8 - bl sub_0805E4E0 - ldr r1, _080731D4 @ =gUnk_0811BBF8 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_080731D0: .4byte gPlayerState -_080731D4: .4byte gUnk_0811BBF8 diff --git a/asm/non_matching/player/sub_08072D54.s b/asm/non_matching/player/sub_08072D54.s new file mode 100644 index 00000000..ce770b44 --- /dev/null +++ b/asm/non_matching/player/sub_08072D54.s @@ -0,0 +1,222 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + bl UpdateAnimationSingleFrame + movs r2, #0xc + rsbs r2, r2, #0 + adds r0, r4, #0 + movs r1, #0 + bl sub_0806F854 + ldrb r0, [r4, #0xe] + cmp r0, #0 + beq _08072D7A + adds r0, r4, #0 + bl sub_0806F69C + ldrb r0, [r4, #0xe] + subs r0, #1 + b _08072E80 +_08072D7A: + adds r0, r4, #0 + bl sub_0806F730 + adds r1, r4, #0 + adds r1, #0x38 + ldrb r1, [r1] + bl GetTileType + adds r2, r0, #0 + ldrb r5, [r4, #0xf] + cmp r5, #1 + beq _08072DD0 + cmp r5, #1 + bgt _08072D9C + cmp r5, #0 + beq _08072DA6 + b _08072E6C +_08072D9C: + cmp r5, #2 + beq _08072DFA + cmp r5, #3 + beq _08072E30 + b _08072E6C +_08072DA6: + ldr r1, _08072DC8 @ =gUnk_0811BBD4 + ldr r0, _08072DCC @ =gPlayerEntity + ldrb r0, [r0, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r2, #0 + bl sub_08007DD6 + cmp r0, #0 + beq _08072E6C + movs r0, #1 + strb r0, [r4, #0xe] + strb r0, [r4, #0xf] + b _08072E6C + .align 2, 0 +_08072DC8: .4byte gUnk_0811BBD4 +_08072DCC: .4byte gPlayerEntity +_08072DD0: + ldr r1, _08072DEC @ =gUnk_0811BBD4 + ldr r0, _08072DF0 @ =gPlayerEntity + ldrb r0, [r0, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r2, #0 + bl sub_08007DD6 + cmp r0, #0 + beq _08072DF4 + strb r5, [r4, #0xe] + b _08072E6C + .align 2, 0 +_08072DEC: .4byte gUnk_0811BBD4 +_08072DF0: .4byte gPlayerEntity +_08072DF4: + movs r0, #2 + strb r0, [r4, #0xf] + b _08072E6C +_08072DFA: + ldrb r0, [r4, #0x14] + movs r5, #4 + eors r0, r5 + strb r0, [r4, #0x14] + ldr r1, _08072E28 @ =gUnk_0811BBD4 + ldr r0, _08072E2C @ =gPlayerEntity + ldrb r0, [r0, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r2, #0 + bl sub_08007DD6 + cmp r0, #0 + beq _08072E22 + movs r0, #1 + strb r0, [r4, #0xe] + movs r0, #3 + strb r0, [r4, #0xf] +_08072E22: + ldrb r0, [r4, #0x14] + eors r0, r5 + b _08072E6A + .align 2, 0 +_08072E28: .4byte gUnk_0811BBD4 +_08072E2C: .4byte gPlayerEntity +_08072E30: + ldrb r0, [r4, #0x14] + movs r1, #4 + eors r0, r1 + strb r0, [r4, #0x14] + ldr r1, _08072E58 @ =gUnk_0811BBD4 + ldr r0, _08072E5C @ =gPlayerEntity + ldrb r0, [r0, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r2, #0 + bl sub_08007DD6 + cmp r0, #0 + beq _08072E60 + movs r0, #1 + strb r0, [r4, #0xe] + b _08072E64 + .align 2, 0 +_08072E58: .4byte gUnk_0811BBD4 +_08072E5C: .4byte gPlayerEntity +_08072E60: + movs r0, #4 + strb r0, [r4, #0xf] +_08072E64: + ldrb r0, [r4, #0x14] + movs r1, #4 + eors r0, r1 +_08072E6A: + strb r0, [r4, #0x14] +_08072E6C: + ldrb r0, [r4, #0xe] + cmp r0, #0 + beq _08072E7A + adds r0, r4, #0 + bl sub_0806F69C + b _08072E7E +_08072E7A: + bl sub_08079E08 +_08072E7E: + movs r0, #0 +_08072E80: + strb r0, [r4, #0xe] + movs r1, #0x80 + lsls r1, r1, #6 + adds r0, r4, #0 + bl sub_08003FC4 + cmp r0, #0 + bne _08072F10 + ldrb r1, [r4, #0x10] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r4, #0x10] + adds r0, r4, #0 + adds r0, #0x38 + ldrb r0, [r0] + cmp r0, #1 + bne _08072EAA + adds r0, r4, #0 + bl sub_0800455E + b _08072EB0 +_08072EAA: + adds r0, r4, #0 + bl sub_08004542 +_08072EB0: + adds r0, r4, #0 + movs r1, #7 + bl sub_08008790 + ldr r5, _08072EDC @ =gPlayerState + ldrb r0, [r5, #0x14] + cmp r0, #0 + beq _08072EE0 + bl sub_08008B22 + cmp r0, #0 + beq _08072F10 + movs r0, #7 + strb r0, [r5, #0x11] + ldr r0, [r5, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08072F10 + bl sub_080791BC + b _08072F10 + .align 2, 0 +_08072EDC: .4byte gPlayerState +_08072EE0: + ldr r0, [r5, #0x30] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + beq _08072EF4 + ldr r0, _08072EF0 @ =0x00000424 + b _08072EF8 + .align 2, 0 +_08072EF0: .4byte 0x00000424 +_08072EF4: + movs r0, #0x82 + lsls r0, r0, #4 +_08072EF8: + strh r0, [r5, #8] + movs r1, #0 + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #3 + strb r0, [r4, #0xd] + adds r0, r4, #0 + adds r0, #0x42 + strb r1, [r0] + movs r0, #0x7d + bl SoundReq +_08072F10: + pop {r4, r5, pc} + .align 2, 0 + .syntax divided diff --git a/linker.ld b/linker.ld index e281d0ce..15fda49a 100644 --- a/linker.ld +++ b/linker.ld @@ -659,7 +659,6 @@ SECTIONS { asm/playerItem/playerItemPacciCane.o(.text); asm/code_0807059C.o(.text); src/player.o(.text); - asm/code_08070698.o(.text); asm/stairsInteract.o(.text); asm/code_080732D0.o(.text); asm/item/itemDebug.o(.text); diff --git a/src/player.c b/src/player.c index 232b5d21..4db7a974 100644 --- a/src/player.c +++ b/src/player.c @@ -8,6 +8,7 @@ #include "save.h" #include "game.h" #include "functions.h" +#include "object.h" static void (*const sPlayerActions[])(Entity*); extern void (*const gUnk_0811BA60[])(Entity*); @@ -40,6 +41,32 @@ extern void sub_0807A298(); extern u32 sub_08079B24(); extern void sub_08079708(); extern void sub_080792D8(); +extern Entity* CreatePlayerBomb(); +extern void sub_08072008(); +extern void sub_080791BC(); +extern void sub_08072168(); +extern u32 sub_0806F854(); +extern u32 sub_08019840(); +extern void sub_08072260(); +extern void sub_08079744(); +extern void sub_0807AE20(); +extern u32 sub_0807A894(); +extern u32 sub_080797C4(); +extern u32 Random(); +extern u32 sub_0807AC54(); +extern void sub_0800892E(); +extern void sub_08078F24(); +extern void sub_0807B068(); +extern u32 sub_080001DA(); +extern void sub_08072A60(); +extern u32 sub_0807A2F8(); +extern u32 sub_08052620(); +extern u32 sub_0806F730(); +extern u32 sub_08007DD6(); +extern u32 sub_0807A1E8(); +extern void sub_08073094(); +extern void sub_08074808(); +extern void sub_0805E4E0(); typedef struct { u8 frame; @@ -746,7 +773,7 @@ void sub_0807193C(Entity* this) { UpdateAnimationSingleFrame(this); if (this->frames.all & 0x80) { this->subAction++; - child = CreateObjectWithParent(this, 6, 0, 0); + child = CreateObjectWithParent(this, OBJECT_6, 0, 0); this->attachedEntity = child; if (child != NULL) { if (this->animationState == 2) @@ -1027,6 +1054,887 @@ void sub_08071E74(Entity* this) { sub_080791BC(); } +extern void (*const gUnk_0811BB48[])(Entity*); + +void PlayerEmptyBottle(Entity* this) { + gUnk_0811BB48[this->subAction](this); +} + +void sub_08071EB0(Entity* this) { + Entity* ent; + + ResetPlayer(); + ent = CreatePlayerBomb(this, 0xe); + if (ent != NULL) { + ent->field_0x68.HALF.LO = gPlayerState.field_0x38; + this->subAction++; + switch (gPlayerState.field_0x38) { + case 0x20: + gPlayerState.field_0x8 = 0x614; + break; + case 0x21 ... 0x25: + gPlayerState.field_0x8 = 0x2df; + break; + default: + gPlayerState.field_0x8 = 0x610; + sub_0807CAA0(gPlayerState.field_0x38, 2); + break; + } + } +} + +void sub_08071F14(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->frames.all & 0x80) { + gPlayerState.field_0x2c = NULL; + sub_0807921C(); + } +} + +extern void (*const gUnk_0811BB50[])(Entity*); + +void PlayerFrozen(Entity* this) { + gUnk_0811BB50[this->subAction](this); +} + +void sub_08071F50(Entity* this) { + this->flags &= ~0x80; + this->actionDelay = 0x78; + this->subAction++; + gPlayerState.field_0x8 = 0x294; + sub_08077B20(); + SoundReq(SFX_195); +} + +void sub_08071F80(Entity* this) { + if (sub_08003FC4(this, 0x2000) == 0) { + UpdateSpriteForCollisionLayer(this); + gPlayerState.jumpStatus = 0; + if (gPlayerState.field_0x14 == 0) { + if (sub_08079D48() == 0) { + sub_08072008(this); + return; + } + } + } + if (sub_08079B24() == 0) { + sub_08079708(this); + } else { + if (gPlayerState.flags.all & 0x800) { + if (sub_0807953C() != 0) { + this->actionDelay -= 3; + this->spriteOffsetX = 2; + } else { + this->spriteOffsetX = 0; + } + if ((s8)this->actionDelay > 0) { + return; + } + } + } + sub_08072008(this); +} + +void sub_08072008(Entity* this) { + this->iframes = 160; + this->field_0x42 = 0; + this->flags |= 0x80; + this->spriteOffsetX = 0; + gPlayerState.flags.all &= ~(0x800 | 0x1); + CreateFx(this, 0xd, 0); + sub_080791BC(); +} + +extern void (*const gUnk_0811BB58[])(Entity*); + +void sub_0807204C(Entity* this) { + gUnk_0811BB58[this->subAction](this); +} + +void sub_08072064(Entity* this) { + this->subAction = 1; + this->flags &= ~0x80; + this->actionDelay = gPlayerState.field_0x3a; + gPlayerState.field_0x8 = gPlayerState.field_0x38 | (gPlayerState.field_0x39 << 8); + ResetPlayer(); +} + +void sub_08072098(Entity* this) { + UpdateAnimationSingleFrame(this); + if (this->actionDelay != 0) + if (--this->actionDelay != 0xFF) + return; + else + ; + else if ((this->frames.all & 0x80) == 0) + return; + + if (this->currentHealth != 0) + this->flags |= 0x80; + sub_080791BC(); +} + +extern void (*const gUnk_0811BB60[])(Entity*); + +void sub_080720DC(Entity* this) { + if (sub_08078EFC() == 0) + gUnk_0811BB60[this->subAction](this); +} + +void sub_08072100(Entity* this) { + this->spriteSettings.b.draw = 3; + this->speed = 0x140; + this->hitbox = &gUnk_08114F88; + this->actionDelay = gPlayerState.field_0x38; + this->subAction = 1; + this->flags &= ~0x80; + if (gPlayerState.field_0x39) + this->direction = 0xff; + + if ((gPlayerState.flags.all & 8)) { + gPlayerState.field_0x8 = 0x404; + } else { + gPlayerState.field_0x8 = 0x104; + } + ResetPlayer(); + sub_08072168(this); +} + +void sub_08072168(Entity* this) { + u32 i; + + UpdateAnimationSingleFrame(this); + i = (u16)sub_0806F854(this, 0, -12) ? 0x4000 : 0x2000; + sub_08003FC4(this, i); + if (gPlayerState.field_0x3a) { + sub_0806F69C(this); + } else { + sub_08079E08(); + } + gPlayerState.field_0xd = this->direction; + sub_08019840(); + if (--this->actionDelay == 0xff) { + this->field_0x42 = 0; + this->flags |= 0x80; + UpdateSpriteForCollisionLayer(this); + sub_080791BC(); + } +} + +extern void (*const gUnk_0811BB68[])(Entity*); + +void PlayerPull(Entity* this) { + gPlayerState.field_0xa8 = 0x1a; + gUnk_0811BB68[this->subAction](this); + gUnk_0200AF00.filler25[9] = 8; +} + +void sub_08072214(Entity* this) { + this->subAction = 1; + this->speed = 128; + this->actionDelay = gPlayerState.field_0x38; + this->direction = (this->animationState ^ 4) << 2; + if (!(gPlayerState.flags.all & 8)) { + gPlayerState.field_0x8 = 0x34c; + } else { + gPlayerState.field_0x8 = 0x944; + } + gPlayerState.flags.all |= 1; + sub_08072260(this); +} + +void sub_08072260(Entity* this) { + gPlayerState.field_0x80 = 0; + sub_08079E08(); + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0) { + gPlayerState.flags.all &= ~0x1; + if (!(gPlayerState.flags.all & 8)) { + gPlayerState.field_0x8 = 0x34c; + } else { + gPlayerState.field_0x8 = 0x944; + } + this->field_0x42 = 0; + sub_080791BC(); + } +} + +extern void (*const gUnk_0811BB70[])(Entity*); + +void PlayerLava(Entity* this) { + gPlayerState.field_0xa8 = 10; + gUnk_0811BB70[this->subAction](this); +} + +void sub_080722DC(Entity* this) { + Entity* ent; + + this->flags &= ~0x80; + if (!(gPlayerState.flags.all & 0x80)) { + this->subAction = 1; + this->field_0x20 = 0x28000; + ent = CreateObject(OBJECT_42, 0x80, 0); + if (ent != NULL) { + ent->attachedEntity = this; + } + gPlayerState.field_0x8 = 0x114; + } else { + this->spriteSettings.b.draw = 0; + this->subAction = 3; + this->field_0x42 = 10; + } + gPlayerState.flags.all |= (0x400 | 0x1); + ResetPlayer(); + SoundReq(SFX_124); + SoundReq(SFX_PLY_VO6); +} + +void sub_08072354(Entity* this) { + sub_0806F854(this, 0, -12); + UpdateAnimationSingleFrame(this); + sub_08079744(this); + if (sub_08003FC4(this, 0x2000)) + return; + + this->spritePriority.b1 = 0; + this->field_0x42 = 0; + this->subAction = 2; + this->actionDelay = 0x3c; + gPlayerState.field_0x8 = 0x2c1; + gPlayerState.flags.all &= ~0x400; + UpdateSpriteForCollisionLayer(this); + CreateFx(this, 0xc, 0); + SoundReq(SFX_1A6); +} + +void sub_080723D0(Entity* this) { + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0xff) { + this->spritePriority.b1 = 1; + this->iframes = 0x14; + ModHealth(-2); + RespawnPlayer(); + } +} + +void sub_0807240C(Entity* this) { + if (--this->field_0x42 == 0xff) { + this->spriteSettings.b.draw = 3; + this->iframes = 0x14; + gPlayerState.flags.all &= ~0x400; + ModHealth(-2); + RespawnPlayer(); + } +} + +extern void (*const gUnk_0811BB80[])(Entity*); + +void sub_08072454(Entity* this) { + gUnk_0811BB80[this->subAction](this); +} + +void sub_0807246C(Entity* this) { + this->subAction = 1; + this->actionDelay = gPlayerState.field_0x38; + gPlayerState.field_0x8 = 0x3c0; + SoundReq(0x7b); +} + +void sub_08072490(Entity* this) { + if (--this->actionDelay != 0xff) { + UpdateAnimationSingleFrame(this); + sub_08079E08(); + } else { + this->iframes = 60; + ModHealth(-8); + sub_080791D0(); + } +} + +extern void (*const gUnk_0811BB88[])(Entity*); + +void PlayerRoomTransition(Entity* this) { + gUnk_0811BB88[this->subAction](this); +} + +void sub_080724DC(Entity* this) { + this->field_0x42 = 0; + sub_0807A108(); + if (sub_080002B8(this) != 0x29) { + if ((gPlayerState.field_0x82[7] == 0) && (gPlayerState.swimState != 0)) { + sub_0807AE20(this); + } + if (gRoomControls.unk2 == 0) { + this->scriptedScene = this->scriptedScene2; + sub_080728AC(this); + } else if (gPlayerState.field_0x1c == 0) { + UpdateAnimationSingleFrame(this); + } + } else { + this->spriteSettings.b.draw = 3; + this->subAction = 1; + if (gRoomVars.filler[0] == 0) { + if (gPlayerState.flags.all & 0x80) { + gPlayerState.field_0x8 = 0xc18; + } else { + gPlayerState.field_0x8 = 0x104; + } + this->direction = this->animationState << 2; + } + } +} + +void sub_0807258C(Entity* this) { + if (gRoomControls.unk2 == 0) { + if (sub_0807A894(this) == 0x29) { + sub_08079E08(); + if (sub_080797C4() != 0) { + gPlayerState.startPosX = gPlayerEntity.x.HALF.HI; + gPlayerState.startPosY = gPlayerEntity.y.HALF.HI; + this->scriptedScene = this->scriptedScene2; + sub_080728AC(this); + } else { + UpdateAnimationSingleFrame(this); + } + } else { + gPlayerState.startPosX = gPlayerEntity.x.HALF.HI; + gPlayerState.startPosY = gPlayerEntity.y.HALF.HI; + this->scriptedScene = this->scriptedScene2; + sub_080728AC(this); + } + } + if ((gPlayerState.field_0x82[7] == 0) && (gPlayerState.swimState != 0)) { + sub_0807AE20(this); + } +} + +extern void (*const gUnk_0811BB90[])(Entity*); + +void PlayerRoll(Entity* this) { + gPlayerState.field_0xa8 = 9; + gUnk_0811BB90[this->subAction](this); +} + +void sub_08072650(Entity* this) { + u32 temp; + + if ((gPlayerState.flags.all & 0x200000) == 0) { + sub_0806F948(&gPlayerEntity); + this->direction = this->animationState << 2; + } + this->subAction = 1; + this->actionDelay = 0; + ResetPlayer(); + temp = gPlayerState.flags.all; + if (gPlayerState.flags.all & 0x80) { + this->spritePriority.b1 = 0; + gPlayerState.field_0x8 = 0xc08; + } else { + *(u8*)&this->field_0x40 = 0x1e; + if (temp & 8) { + gPlayerState.field_0x8 = 0x438; + } else { + gPlayerState.field_0x8 = 0x2ac; + } + } + gPlayerState.flags.all |= 0x40000; + if (Random() & 1) { + SoundReq(SFX_PLY_VO5); + } else { + SoundReq(SFX_PLY_VO4); + } + SoundReq(SFX_7E); +} + +void sub_080726F4(Entity* this) { + if (((gPlayerState.flags.all & (0x40000 | 0x80000)) != 0x40000) || + (!(gPlayerState.flags.all & 0x200000) && (this->iframes != 0) && (this->bitfield & 0x80))) { + gPlayerState.flags.all &= ~0x40000; + if (!sub_08078EFC()) + sub_080728AC(this); + return; + } + + this->direction = (this->animationState & 6) << 2; + if (((gPlayerState.flags.all & 0x80) == 0) && (--this->actionDelay == 0xff)) { + CreateFx(&gPlayerEntity, 0x11, 0x40); + this->actionDelay = 4; + } + if ((gPlayerState.flags.all & 2) == 0) { + sub_0807A1B8(); + } + if (sub_08078EFC()) { + gPlayerState.flags.all &= ~0x40000; + return; + } + + if ((gPlayerState.flags.all & 0x80000) != 0) { + gPlayerState.flags.all &= ~0x40000; + return; + } + + if (sub_0807AC54(this)) { + return; + } + + if (gPlayerState.flags.all & 0x250) { + gPlayerState.flags.all &= ~0x40000; + sub_080728AC(this); + return; + } + + if (gPlayerState.field_0x10[2] == 0x17) { + sub_0800892E(this); + } else { + switch (this->frames.all & 0xf) { + case 0: + if ((this->frames.all & 0xf) == 0) { + this->speed = 0x200; + } + break; + case 1: + this->speed += 0x20; + break; + case 2: + this->speed = 0x300; + break; + case 3: + this->speed = 0; + break; + } + sub_08078F24(); + sub_08079E08(); + } + if (((this->frames.all & 0x10) == 0) && ((gPlayerState.flags.all & 0x80) == 0)) { + *(u8*)&this->field_0x40 = 0; + } + if ((this->frames.all & 0x40) != 0) { + sub_08077698(this); + } + if (((this->frames.all & 0x80) != 0) || (gPlayerState.field_0x3[1] != 0)) { + sub_080791D0(); + } + if ((this->frames.all & 0x80) != 0) { + gPlayerState.flags.all &= ~(0x200000 | 0x40000); + } + UpdateAnimationSingleFrame(this); +} + +void sub_080728AC(Entity* this) { + sub_08079938(); + if (gPlayerState.flags.all & 0x80) + sub_0807B068(this); + else + sub_08078F60(); + + if (gPlayerState.swimState != 0) + this->speed = 0; + if (!(gPlayerState.flags.all & 0x40)) + gPlayerEntity.spriteSettings.b.draw = 3; + if (!(gPlayerState.flags.all & 0x80)) + gPlayerEntity.spritePriority.b1 = 1; + + if (!(gRoomControls.unk6 & 4)) { + if ((gPlayerState.flags.all & 0x40)) + this->flags |= 0x80; + sub_080791D0(); + } + if (!(gPlayerState.flags.all & 2)) { + sub_0807A1B8(); + } +} + +extern void (*const gUnk_0811BB98[])(Entity*); + +void PlayerInHole(Entity* this) { + gPlayerState.field_0xa8 = 0x17; + gUnk_0811BB98[this->subAction](this); +} + +void sub_08072970(Entity* this) { + if (this->currentHealth != 0) { + this->subAction = 1; + this->x.HALF.HI = (this->x.HALF.HI & ~0xF) | 8; + this->y.HALF.HI = (this->y.HALF.HI & ~0XF) | 10; + this->flags &= ~0x80; + this->spritePriority.b0 = 7; + this->spritePriority.b1 = 0; + this->actionDelay = 0; + gPlayerState.flags.all |= 0x100000; + if (gPlayerState.flags.all & 8) { + gPlayerState.field_0x8 = 0x950; + } else { + gPlayerState.field_0x8 = 0x61c; + if (sub_080001DA(COORD_TO_TILE(this), this->collisionLayer) == 0x4020) { + this->actionDelay = 1; + } + } + SetTile(0x4070, COORD_TO_TILE(this), this->collisionLayer); + ResetPlayer(); + sub_08072A60(this); + SoundReq(0x81); + } +} + +void sub_08072A60(Entity* this) { + if (this->frames.all & 0x80) { + if (this->actionDelay == 1) { + this->subAction = 3; + this->actionDelay = 0x28; + this->spritePriority.b1 = 1; + gPlayerState.field_0x8 = 0x624; + return; + } + + this->subAction = 2; + if (gPlayerState.flags.all & 8) { + gPlayerState.field_0x8 = 0x954; + } else { + gPlayerState.field_0x8 = 0x620; + } + } else { + UpdateAnimationSingleFrame(this); + } +} + +void sub_08072ACC(Entity* this) { + if (gPlayerState.field_0xd == 0xff) { + this->field_0xf = 0; + } else if (this->field_0xf > 7) { + this->flags |= 0x80; + this->direction = gPlayerState.field_0xd; + this->field_0x20 = 0x1a000; + this->speed = 0x78; + this->spritePriority.b0 = 4; + this->spritePriority.b1 = 1; + gPlayerState.jumpStatus = 0x41; + sub_0807921C(); + sub_0807BA8C(COORD_TO_TILE(this), this->collisionLayer); + } else { + this->animationState = gPlayerState.field_0xd >> 2; + this->field_0xf++; + } +} + +void sub_08072B5C(Entity* this) { + u32 temp; + + sub_080042BA(this, ((0x28 - this->actionDelay) >> 4) + 1); + sub_0806F948(this); + if (this->actionDelay != 0) { + this->actionDelay--; + return; + } + + SetTile(0x4021, COORD_TO_TILE(this), this->collisionLayer); + this->direction = this->animationState << 2; + temp = sub_0807A2F8(1); + if (!temp) { + this->flags |= 0x80; + this->spritePriority.b0 = 4; + this->speed = 0x40; + this->field_0x20 = 0x39000; + this->height.WORD--; + gPlayerState.jumpStatus = 0x41; + sub_0806F854(this, 0, -12); + sub_0807921C(); + return; + } + + if (!sub_08052620()) { + sub_08004542(this); + } + this->subAction++; + temp <<= 4; + temp -= 4; + temp <<= 12; + this->field_0x20 = temp; + this->speed = 0x100; + gPlayerState.field_0x8 = 0x810; + SoundReq(0x7c); +} + +void sub_08072C48(Entity* this) { + UpdateAnimationSingleFrame(this); + sub_0806F69C(this); + if (sub_08003FC4(this, 0x2000)) + return; + + sub_08008790(this, 7); + if (gPlayerState.field_0x14) { + if (sub_08008B22()) { + gPlayerState.field_0x10[1] = 7; + if (!(gPlayerState.flags.all & 0x80)) { + sub_080791BC(); + } + } + } else { + sub_0807921C(); + } +} + +extern void (*const gUnk_0811BBAC[])(Entity*); + +void sub_08072C9C(Entity* this) { + gPlayerState.field_0xa8 = 0x11; + gUnk_0811BBAC[this->subAction](this); +} + +void sub_08072CC0(Entity* this) { + this->subAction = 1; + this->flags &= ~0x80; + this->field_0xf = (gPlayerState.field_0x3a >> 2) + 1; + this->direction = gPlayerState.field_0x39; + this->speed = 0x400; + gPlayerState.field_0x8 = 0x524; + gPlayerState.heldObject = 0; +} + +void sub_08072CFC(Entity* this) { + sub_080042BA(this, 2); + if (--this->field_0xf != 0xff) { + sub_0806F69C(this); + return; + } + + this->subAction = 2; + if (gPlayerState.field_0x38 < 8) { + gPlayerState.field_0x38 = 8; + } + this->field_0x20 = gPlayerState.field_0x38 << 0xc; + this->speed = 0x200; + gPlayerState.field_0x8 = 0x810; + this->actionDelay = 5; + this->field_0xf = 0; + ResetPlayer(); +} + +extern const u16* gUnk_0811BBD4[]; + +NONMATCH("asm/non_matching/player/sub_08072D54.s", void sub_08072D54(Entity* this)) { + u32 bVar1; + u32 uVar2; + u32 iVar3; + + UpdateAnimationSingleFrame(this); + sub_0806F854(this, 0, -12); + if (this->actionDelay != 0) { + sub_0806F69C(this); + } else { + uVar2 = sub_0806F730(this); + uVar2 = GetTileType(uVar2, this->collisionLayer); + switch (this->field_0xf) { + case 0: + if (sub_08007DD6(uVar2, gUnk_0811BBD4[gPlayerEntity.animationState >> 1])) { + this->actionDelay = 1; + this->field_0xf = 1; + } + break; + case 1: + if (sub_08007DD6(uVar2, gUnk_0811BBD4[gPlayerEntity.animationState >> 1])) { + this->actionDelay = 1; + this->field_0xf = 1; + } + break; + case 3: + if (this->actionDelay == 0) { + sub_08079E08(); + } else { + sub_0806F69C(this); + } + break; + case 2: + this->animationState ^= 4; + if (sub_08007DD6(uVar2, gUnk_0811BBD4[gPlayerEntity.animationState >> 1]) != 0) { + this->actionDelay = 1; + this->field_0xf = 3; + } + break; + default: + this->animationState ^= 4; + if (sub_08007DD6(uVar2, gUnk_0811BBD4[gPlayerEntity.animationState >> 1])) { + this->field_0xf = 4; + } else { + this->actionDelay = 1; + } + break; + } + + if (this->actionDelay != 0) { + sub_0806F69C(this); + } else { + sub_08079E08(); + } + this->actionDelay = 0; + } + + this->actionDelay = bVar1; + if (!sub_08003FC4(this, 0x2000)) { + this->flags |= 0x80; + if (this->collisionLayer == 1) { + sub_0800455E(this); + } else { + sub_08004542(this); + } + sub_08008790(this, 7); + if (gPlayerState.field_0x14 != 0) { + if (!sub_08008B22() != 0) { + gPlayerState.field_0x10[1] = 7; + if (!(gPlayerState.flags.all & 0x80)) { + sub_080791BC(); + } + } + } else { + if ((gPlayerState.flags.all & 8)) { + gPlayerState.field_0x8 = 0x424; + } else { + gPlayerState.field_0x8 = 0x820; + } + this->actionDelay = 6; + this->subAction = 3; + this->field_0x42 = 0; + SoundReq(0x7d); + } + } +} +END_NONMATCH + +void sub_08072F14(Entity* this) { + if (--this->actionDelay != 0xff) { + sub_0807921C(); + } else { + UpdateAnimationSingleFrame(this); + } +} + +extern void (*const gUnk_0811BBE4[])(Entity*); + +void sub_08072F34(Entity* this) { + if (!sub_08078EFC()) { + gPlayerState.field_0xa8 = 0x18; + gPlayerState.field_0x10[2] = sub_0807A1E8(this, 0, 0); + gUnk_0811BBE4[this->subAction](this); + if (this->field_0x42 != 0) { + sub_080792D8(); + if (this->field_0x42 == 0) { + this->action = 0x1d; + this->subAction = 0; + this->y.HALF.LO = 0; + gPlayerState.field_0x8 = 0x2cf; + } + } + } +} + +void sub_08072F94(Entity* this) { + u32 bVar1; + + switch (gPlayerState.field_0x10[2]) { + default: + sub_0807921C(); + break; + case 0x1E: + case 0x2A ... 0x2C: + this->spritePriority.b1 = 0; + bVar1 = gPlayerState.field_0xd; + if ((gPlayerState.field_0xd & 0x80) == 0) { + this->direction = gPlayerState.field_0xd; + if ((gPlayerState.field_0xd == 8) || (gPlayerState.field_0xd == 0x18)) { + if (gPlayerState.field_0x10[2] == 0x1e) { + return; + } + if ((this->frames.all & 0x10)) { + gPlayerState.field_0x8 = 0x2d4; + } else { + gPlayerState.field_0x8 = 0x2d5; + } + sub_08073094(this); + } else { + if ((gPlayerState.field_0x10[2] == 0x1e) && ((bVar1 & 7) != 0)) { + this->direction = (bVar1 + 8) & 0x10; + } + if (this->direction & 0x10) { + if (this->frames.all & 0x10) { + gPlayerState.field_0x8 = 0x2d1; + } else { + gPlayerState.field_0x8 = 0x2d2; + } + } else { + if (this->frames.all & 0x10) { + gPlayerState.field_0x8 = 0x2cf; + } else { + gPlayerState.field_0x8 = 0x2d0; + } + } + } + this->subAction++; + } else { + if (this->frames.all & 0x10) { + gPlayerState.field_0x8 = 0x2d4; + } else { + gPlayerState.field_0x8 = 0x2d5; + } + } + break; + } +} + +extern const u16 gUnk_0811BBEC[]; + +void sub_08073094(Entity* this) { + this->spritePriority.b1 = 0; + this->speed = gUnk_0811BBEC[this->frames.all & 0xf]; + sub_08079E08(); + if (!sub_08019840()) { + gPlayerState.pushedObject = gPlayerState.pushedObject ^ 0x80; + if ((gPlayerState.field_0x10[2] != 0x2a) && (gPlayerState.field_0x10[2] != 0x2c)) { + sub_0807A1B8(); + } + + if (sub_08078EFC() == 0) { + switch (gPlayerState.field_0x10[2]) { + case 0x2a: + case 0x2c: + this->field_0x42 = 0; + gPlayerState.flags.all |= 0x20000000; + UpdateAnimationSingleFrame(this); + if ((this->frames.all & 0x40) != 0) { + sub_0807A1B8(); + if (!sub_08078EFC()) { + this->subAction--; + } + } + break; + case 0x19: + sub_08074808(this); + sub_080791D0(); + break; + default: + sub_0807921C(); + break; + case 0x1e: + case 0x2b: + UpdateAnimationSingleFrame(this); + if ((this->frames.all & 0x40) != 0) { + sub_0807A1B8(); + if (!sub_08078EFC()) { + this->subAction--; + } + } + break; + } + } + } +} + +extern void (*const gUnk_0811BBF8[])(Entity*); + +void PlayerUseEntrance(Entity* this) { + gPlayerState.field_0xa8 = 0x1c; + sub_0805E4E0(NULL, 8); + gUnk_0811BBF8[this->subAction](this); +} + void PlayerInit(Entity*); void PlayerNormal(Entity*); void PlayerInit(Entity*);