diff --git a/asm/code_0808091C.s b/asm/code_0808091C.s new file mode 100755 index 00000000..8e1eb210 --- /dev/null +++ b/asm/code_0808091C.s @@ -0,0 +1,436 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_08080A40 +sub_08080A40: @ 0x08080A40 + push {r4, r5, r6, r7, lr} + ldr r7, _08080A70 @ =gRoomControls + ldr r1, [r7, #0x30] + ldr r0, _08080A74 @ =gPlayerEntity + adds r2, r7, #0 + cmp r1, r0 + beq _08080A50 + b _08080B5C +_08080A50: + ldr r0, _08080A78 @ =gPlayerState + ldrb r0, [r0, #2] + cmp r0, #0 + beq _08080A5A + b _08080B5C +_08080A5A: + ldrb r0, [r1, #0xc] + subs r0, #1 + cmp r0, #0x1c + bls _08080A64 + b _08080B5C +_08080A64: + lsls r0, r0, #2 + ldr r1, _08080A7C @ =_08080A80 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08080A70: .4byte gRoomControls +_08080A74: .4byte gPlayerEntity +_08080A78: .4byte gPlayerState +_08080A7C: .4byte _08080A80 +_08080A80: @ jump table + .4byte _08080AFA @ case 0 + .4byte _08080B5C @ case 1 + .4byte _08080B5C @ case 2 + .4byte _08080B5C @ case 3 + .4byte _08080B5C @ case 4 + .4byte _08080B5C @ case 5 + .4byte _08080B5C @ case 6 + .4byte _08080B5C @ case 7 + .4byte _08080AFA @ case 8 + .4byte _08080B5C @ case 9 + .4byte _08080B5C @ case 10 + .4byte _08080B5C @ case 11 + .4byte _08080B5C @ case 12 + .4byte _08080B5C @ case 13 + .4byte _08080AF4 @ case 14 + .4byte _08080B5C @ case 15 + .4byte _08080B5C @ case 16 + .4byte _08080B5C @ case 17 + .4byte _08080B5C @ case 18 + .4byte _08080B5C @ case 19 + .4byte _08080B5C @ case 20 + .4byte _08080B5C @ case 21 + .4byte _08080B5C @ case 22 + .4byte _08080AFA @ case 23 + .4byte _08080B5C @ case 24 + .4byte _08080B5C @ case 25 + .4byte _08080B5C @ case 26 + .4byte _08080B5C @ case 27 + .4byte _08080AFA @ case 28 +_08080AF4: + ldrb r0, [r2, #4] + cmp r0, #0x48 + beq _08080B5C +_08080AFA: + ldr r3, [r7, #0x30] + movs r0, #0x32 + ldrsh r1, [r3, r0] + ldrh r0, [r7, #8] + subs r6, r1, r0 + movs r0, #0x2e + ldrsh r1, [r3, r0] + ldrh r0, [r7, #6] + subs r5, r1, r0 + asrs r0, r5, #4 + movs r2, #0x3f + ands r0, r2 + asrs r1, r6, #4 + ands r1, r2 + lsls r1, r1, #6 + orrs r0, r1 + adds r3, #0x38 + ldrb r1, [r3] + bl sub_080002C8 + adds r4, r0, #0 + ldr r0, [r7, #0x30] + adds r0, #0x38 + ldrb r2, [r0] + adds r0, r5, #0 + adds r1, r6, #0 + bl sub_080002A8 + ldr r1, _08080B48 @ =gScreenTransition + strh r0, [r1, #0xa] + cmp r4, #0x3f + beq _08080B50 + cmp r4, #0x3f + bhi _08080B4C + cmp r4, #0x29 + bhi _08080B5C + cmp r4, #0x28 + blo _08080B5C + b _08080B50 + .align 2, 0 +_08080B48: .4byte gScreenTransition +_08080B4C: + cmp r4, #0xf1 + bne _08080B5C +_08080B50: + adds r0, r5, #0 + adds r1, r6, #0 + movs r2, #0xff + movs r3, #0xa + bl sub_080806BC +_08080B5C: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + + thumb_func_start sub_08080B60 +sub_08080B60: @ 0x08080B60 + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r1, _08080B90 @ =0x00005004 + adds r4, r0, r1 + ldr r2, _08080B94 @ =gUnk_080B37A0 + mov r8, r2 + movs r3, #0 + ldr r1, _08080B98 @ =0x00003FFF + mov ip, r1 + ldr r7, _08080B9C @ =gUnk_080B7910 + ldr r2, _08080BA0 @ =0x0000B004 + adds r1, r0, r2 + adds r2, r0, #4 + ldr r6, _08080BA4 @ =0xFFFFC000 + ldr r5, _08080BA8 @ =0x00000FFF +_08080B80: + ldrh r0, [r2] + cmp r0, ip + bhi _08080BAC + lsls r0, r0, #1 + adds r0, r0, r4 + ldrh r0, [r0] + add r0, r8 + b _08080BB0 + .align 2, 0 +_08080B90: .4byte 0x00005004 +_08080B94: .4byte gUnk_080B37A0 +_08080B98: .4byte 0x00003FFF +_08080B9C: .4byte gUnk_080B7910 +_08080BA0: .4byte 0x0000B004 +_08080BA4: .4byte 0xFFFFC000 +_08080BA8: .4byte 0x00000FFF +_08080BAC: + adds r0, r0, r6 + adds r0, r0, r7 +_08080BB0: + ldrb r0, [r0] + strb r0, [r1] + adds r1, #1 + adds r2, #2 + adds r3, #1 + cmp r3, r5 + bls _08080B80 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + + thumb_func_start sub_08080BC4 +sub_08080BC4: @ 0x08080BC4 + push {r4, r5, r6, lr} + ldr r3, _08080C40 @ =gRoomControls + movs r0, #0xa + ldrsh r1, [r3, r0] + ldrh r0, [r3, #6] + subs r5, r1, r0 + movs r2, #0xf + ands r5, r2 + movs r1, #0xc + ldrsh r0, [r3, r1] + ldrh r1, [r3, #8] + subs r0, r0, r1 + ands r0, r2 + adds r6, r0, #0 + adds r6, #8 + ldrh r2, [r3, #0x16] + adds r4, r2, #0 + cmp r4, #0 + beq _08080C50 + subs r2, #1 + strh r2, [r3, #0x16] + ldrb r0, [r3, #0x14] + lsls r0, r0, #4 + movs r1, #0xe + ands r2, r1 + adds r0, r0, r2 + ldr r1, _08080C44 @ =gUnk_080169A4 + adds r2, r0, r1 + ldr r4, _08080C48 @ =gUnk_02025EB0 + ldr r1, [r4] + cmp r1, #0 + beq _08080C16 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r0, r0, r5 + strh r0, [r1, #2] + ldr r1, [r4] + movs r0, #1 + ldrsb r0, [r2, r0] + adds r0, r0, r6 + strh r0, [r1, #4] +_08080C16: + ldr r4, _08080C4C @ =gUnk_0200B650 + ldr r1, [r4] + cmp r1, #0 + beq _08080C30 + movs r0, #0 + ldrsb r0, [r2, r0] + adds r0, r0, r5 + strh r0, [r1, #2] + ldr r1, [r4] + movs r0, #1 + ldrsb r0, [r2, r0] + adds r0, r0, r6 + strh r0, [r1, #4] +_08080C30: + ldrb r1, [r2] + adds r0, r3, #0 + adds r0, #0x24 + strb r1, [r0] + ldrb r1, [r2, #1] + adds r0, #1 + strb r1, [r0] + b _08080C76 + .align 2, 0 +_08080C40: .4byte gRoomControls +_08080C44: .4byte gUnk_080169A4 +_08080C48: .4byte gUnk_02025EB0 +_08080C4C: .4byte gUnk_0200B650 +_08080C50: + ldr r0, _08080C78 @ =gUnk_02025EB0 + ldr r1, [r0] + cmp r1, #0 + beq _08080C5E + strh r5, [r1, #2] + ldr r0, [r0] + strh r6, [r0, #4] +_08080C5E: + ldr r0, _08080C7C @ =gUnk_0200B650 + ldr r1, [r0] + cmp r1, #0 + beq _08080C6C + strh r5, [r1, #2] + ldr r0, [r0] + strh r6, [r0, #4] +_08080C6C: + adds r0, r3, #0 + adds r0, #0x24 + strb r4, [r0] + adds r0, #1 + strb r4, [r0] +_08080C76: + pop {r4, r5, r6, pc} + .align 2, 0 +_08080C78: .4byte gUnk_02025EB0 +_08080C7C: .4byte gUnk_0200B650 + + thumb_func_start sub_08080C80 +sub_08080C80: @ 0x08080C80 + push {r4, lr} + bl sub_080197D4 + ldr r0, _08080CA8 @ =gMapDataBottom + ldr r4, _08080CAC @ =gRoomControls + ldrh r1, [r4, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r4, #0x20] + lsrs r2, r2, #4 + bl sub_0807C8B0 + ldr r0, _08080CB0 @ =gMapDataTop + ldrh r1, [r4, #0x1e] + lsrs r1, r1, #4 + ldrh r2, [r4, #0x20] + lsrs r2, r2, #4 + bl sub_0807C8B0 + pop {r4, pc} + .align 2, 0 +_08080CA8: .4byte gMapDataBottom +_08080CAC: .4byte gRoomControls +_08080CB0: .4byte gMapDataTop + + thumb_func_start sub_08080CB4 +sub_08080CB4: @ 0x08080CB4 + push {r4, r5, lr} + adds r4, r0, #0 + adds r1, r4, #0 + adds r1, #0x58 + ldrb r0, [r4, #0xa] + ldrb r1, [r1] + cmp r0, r1 + beq _08080CF0 + adds r1, r0, #0 + adds r0, r4, #0 + bl InitAnimationForceUpdate + ldrb r0, [r4, #0xa] + cmp r0, #0x5c + beq _08080CD4 + b _08080E00 +_08080CD4: + ldrb r0, [r4, #0xb] + lsls r0, r0, #3 + ldr r1, _08080CEC @ =gUnk_080C9CBC + adds r0, r0, r1 + ldrb r0, [r0] + movs r1, #0xf + ands r1, r0 + lsls r0, r0, #4 + orrs r0, r1 + strb r0, [r4, #0x1a] + b _08080E00 + .align 2, 0 +_08080CEC: .4byte gUnk_080C9CBC +_08080CF0: + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + ldrb r0, [r4, #0x18] + lsls r0, r0, #0x1e + cmp r0, #0 + bne _08080D00 + b _08080E00 +_08080D00: + ldrb r0, [r4, #0xa] + subs r0, #0x40 + cmp r0, #0x22 + bhi _08080E00 + lsls r0, r0, #2 + ldr r1, _08080D14 @ =_08080D18 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08080D14: .4byte _08080D18 +_08080D18: @ jump table + .4byte _08080DEE @ case 0 + .4byte _08080DEE @ case 1 + .4byte _08080DEE @ case 2 + .4byte _08080DEE @ case 3 + .4byte _08080E00 @ case 4 + .4byte _08080E00 @ case 5 + .4byte _08080E00 @ case 6 + .4byte _08080E00 @ case 7 + .4byte _08080E00 @ case 8 + .4byte _08080E00 @ case 9 + .4byte _08080E00 @ case 10 + .4byte _08080E00 @ case 11 + .4byte _08080E00 @ case 12 + .4byte _08080E00 @ case 13 + .4byte _08080E00 @ case 14 + .4byte _08080E00 @ case 15 + .4byte _08080E00 @ case 16 + .4byte _08080E00 @ case 17 + .4byte _08080E00 @ case 18 + .4byte _08080E00 @ case 19 + .4byte _08080E00 @ case 20 + .4byte _08080E00 @ case 21 + .4byte _08080E00 @ case 22 + .4byte _08080E00 @ case 23 + .4byte _08080E00 @ case 24 + .4byte _08080E00 @ case 25 + .4byte _08080E00 @ case 26 + .4byte _08080E00 @ case 27 + .4byte _08080DEE @ case 28 + .4byte _08080E00 @ case 29 + .4byte _08080E00 @ case 30 + .4byte _08080E00 @ case 31 + .4byte _08080DA4 @ case 32 + .4byte _08080E00 @ case 33 + .4byte _08080DEE @ case 34 +_08080DA4: + adds r5, r4, #0 + adds r5, #0x6a + ldrb r0, [r5] + cmp r0, #0 + beq _08080DB4 + subs r0, #1 + strb r0, [r5] + b _08080E00 +_08080DB4: + bl Random + movs r1, #0x1f + ands r0, r1 + adds r0, #0xa + strb r0, [r5] + adds r0, r4, #0 + movs r1, #7 + movs r2, #0 + bl CreateFx + adds r1, r0, #0 + cmp r1, #0 + beq _08080E00 + adds r0, r4, #0 + adds r0, #0x62 + ldrb r0, [r0] + adds r2, r1, #0 + adds r2, #0x62 + strb r0, [r2] + adds r0, r4, #0 + adds r0, #0x63 + ldrb r0, [r0] + adds r2, #1 + strb r0, [r2] + adds r0, r4, #0 + bl ResolveEntityOnTop + b _08080E00 +_08080DEE: + ldr r0, _08080E04 @ =gScreenTransition + ldr r0, [r0] + movs r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _08080E00 + adds r0, r4, #0 + bl CreateSparkle +_08080E00: + pop {r4, r5, pc} + .align 2, 0 +_08080E04: .4byte gScreenTransition \ No newline at end of file diff --git a/asm/itemOnGround.s b/asm/itemOnGround.s deleted file mode 100644 index 19b8d65f..00000000 --- a/asm/itemOnGround.s +++ /dev/null @@ -1,1593 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08080974 -sub_08080974: @ 0x08080974 - push {r4, lr} - adds r3, r0, #0 - adds r4, r1, #0 - ldr r1, _0808098C @ =gRoomControls - ldrh r2, [r1, #6] - adds r0, r2, #0 - adds r0, #0x78 - cmp r3, r0 - bhi _08080990 - strh r2, [r1, #0xa] - b _080809A2 - .align 2, 0 -_0808098C: .4byte gRoomControls -_08080990: - ldrh r0, [r1, #0x1e] - adds r2, r2, r0 - adds r0, r2, #0 - subs r0, #0x78 - cmp r3, r0 - bhs _0808099E - adds r0, r3, #0 -_0808099E: - subs r0, #0x78 - strh r0, [r1, #0xa] -_080809A2: - ldrh r2, [r1, #8] - adds r0, r2, #0 - adds r0, #0x50 - cmp r4, r0 - bhi _080809B0 - strh r2, [r1, #0xc] - b _080809C2 -_080809B0: - ldrh r0, [r1, #0x20] - adds r2, r2, r0 - adds r0, r2, #0 - subs r0, #0x50 - cmp r4, r0 - bhs _080809BE - adds r0, r4, #0 -_080809BE: - subs r0, #0x50 - strh r0, [r1, #0xc] -_080809C2: - bl sub_080809D4 - ldr r1, _080809D0 @ =gUnk_02000070 - movs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 -_080809D0: .4byte gUnk_02000070 - - thumb_func_start sub_080809D4 -sub_080809D4: @ 0x080809D4 - push {r4, lr} - ldr r2, _080809F4 @ =gRoomControls - ldrb r0, [r2, #0xf] - movs r1, #0xfb - ands r1, r0 - strb r1, [r2, #0xf] - ldr r4, [r2, #0x30] - movs r0, #0x2e - ldrsh r3, [r4, r0] - ldrh r1, [r2, #6] - adds r0, r1, #0 - adds r0, #0x78 - cmp r3, r0 - bgt _080809F8 - strh r1, [r2, #0xa] - b _08080A0A - .align 2, 0 -_080809F4: .4byte gRoomControls -_080809F8: - ldrh r0, [r2, #0x1e] - adds r1, r1, r0 - adds r0, r1, #0 - subs r0, #0x78 - cmp r3, r0 - bge _08080A06 - ldrh r0, [r4, #0x2e] -_08080A06: - subs r0, #0x78 - strh r0, [r2, #0xa] -_08080A0A: - ldr r4, [r2, #0x30] - movs r0, #0x32 - ldrsh r3, [r4, r0] - ldrh r1, [r2, #8] - adds r0, r1, #0 - adds r0, #0x50 - cmp r3, r0 - bgt _08080A1E - strh r1, [r2, #0xc] - b _08080A30 -_08080A1E: - ldrh r0, [r2, #0x20] - adds r1, r1, r0 - adds r0, r1, #0 - subs r0, #0x50 - cmp r3, r0 - bge _08080A2C - ldrh r0, [r4, #0x32] -_08080A2C: - subs r0, #0x50 - strh r0, [r2, #0xc] -_08080A30: - bl sub_08080BC4 - ldr r1, _08080A3C @ =gUnk_02000070 - movs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 -_08080A3C: .4byte gUnk_02000070 - - thumb_func_start sub_08080A40 -sub_08080A40: @ 0x08080A40 - push {r4, r5, r6, r7, lr} - ldr r7, _08080A70 @ =gRoomControls - ldr r1, [r7, #0x30] - ldr r0, _08080A74 @ =gPlayerEntity - adds r2, r7, #0 - cmp r1, r0 - beq _08080A50 - b _08080B5C -_08080A50: - ldr r0, _08080A78 @ =gPlayerState - ldrb r0, [r0, #2] - cmp r0, #0 - beq _08080A5A - b _08080B5C -_08080A5A: - ldrb r0, [r1, #0xc] - subs r0, #1 - cmp r0, #0x1c - bls _08080A64 - b _08080B5C -_08080A64: - lsls r0, r0, #2 - ldr r1, _08080A7C @ =_08080A80 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080A70: .4byte gRoomControls -_08080A74: .4byte gPlayerEntity -_08080A78: .4byte gPlayerState -_08080A7C: .4byte _08080A80 -_08080A80: @ jump table - .4byte _08080AFA @ case 0 - .4byte _08080B5C @ case 1 - .4byte _08080B5C @ case 2 - .4byte _08080B5C @ case 3 - .4byte _08080B5C @ case 4 - .4byte _08080B5C @ case 5 - .4byte _08080B5C @ case 6 - .4byte _08080B5C @ case 7 - .4byte _08080AFA @ case 8 - .4byte _08080B5C @ case 9 - .4byte _08080B5C @ case 10 - .4byte _08080B5C @ case 11 - .4byte _08080B5C @ case 12 - .4byte _08080B5C @ case 13 - .4byte _08080AF4 @ case 14 - .4byte _08080B5C @ case 15 - .4byte _08080B5C @ case 16 - .4byte _08080B5C @ case 17 - .4byte _08080B5C @ case 18 - .4byte _08080B5C @ case 19 - .4byte _08080B5C @ case 20 - .4byte _08080B5C @ case 21 - .4byte _08080B5C @ case 22 - .4byte _08080AFA @ case 23 - .4byte _08080B5C @ case 24 - .4byte _08080B5C @ case 25 - .4byte _08080B5C @ case 26 - .4byte _08080B5C @ case 27 - .4byte _08080AFA @ case 28 -_08080AF4: - ldrb r0, [r2, #4] - cmp r0, #0x48 - beq _08080B5C -_08080AFA: - ldr r3, [r7, #0x30] - movs r0, #0x32 - ldrsh r1, [r3, r0] - ldrh r0, [r7, #8] - subs r6, r1, r0 - movs r0, #0x2e - ldrsh r1, [r3, r0] - ldrh r0, [r7, #6] - subs r5, r1, r0 - asrs r0, r5, #4 - movs r2, #0x3f - ands r0, r2 - asrs r1, r6, #4 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - adds r3, #0x38 - ldrb r1, [r3] - bl sub_080002C8 - adds r4, r0, #0 - ldr r0, [r7, #0x30] - adds r0, #0x38 - ldrb r2, [r0] - adds r0, r5, #0 - adds r1, r6, #0 - bl sub_080002A8 - ldr r1, _08080B48 @ =gScreenTransition - strh r0, [r1, #0xa] - cmp r4, #0x3f - beq _08080B50 - cmp r4, #0x3f - bhi _08080B4C - cmp r4, #0x29 - bhi _08080B5C - cmp r4, #0x28 - blo _08080B5C - b _08080B50 - .align 2, 0 -_08080B48: .4byte gScreenTransition -_08080B4C: - cmp r4, #0xf1 - bne _08080B5C -_08080B50: - adds r0, r5, #0 - adds r1, r6, #0 - movs r2, #0xff - movs r3, #0xa - bl sub_080806BC -_08080B5C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08080B60 -sub_08080B60: @ 0x08080B60 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r1, _08080B90 @ =0x00005004 - adds r4, r0, r1 - ldr r2, _08080B94 @ =gUnk_080B37A0 - mov r8, r2 - movs r3, #0 - ldr r1, _08080B98 @ =0x00003FFF - mov ip, r1 - ldr r7, _08080B9C @ =gUnk_080B7910 - ldr r2, _08080BA0 @ =0x0000B004 - adds r1, r0, r2 - adds r2, r0, #4 - ldr r6, _08080BA4 @ =0xFFFFC000 - ldr r5, _08080BA8 @ =0x00000FFF -_08080B80: - ldrh r0, [r2] - cmp r0, ip - bhi _08080BAC - lsls r0, r0, #1 - adds r0, r0, r4 - ldrh r0, [r0] - add r0, r8 - b _08080BB0 - .align 2, 0 -_08080B90: .4byte 0x00005004 -_08080B94: .4byte gUnk_080B37A0 -_08080B98: .4byte 0x00003FFF -_08080B9C: .4byte gUnk_080B7910 -_08080BA0: .4byte 0x0000B004 -_08080BA4: .4byte 0xFFFFC000 -_08080BA8: .4byte 0x00000FFF -_08080BAC: - adds r0, r0, r6 - adds r0, r0, r7 -_08080BB0: - ldrb r0, [r0] - strb r0, [r1] - adds r1, #1 - adds r2, #2 - adds r3, #1 - cmp r3, r5 - bls _08080B80 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08080BC4 -sub_08080BC4: @ 0x08080BC4 - push {r4, r5, r6, lr} - ldr r3, _08080C40 @ =gRoomControls - movs r0, #0xa - ldrsh r1, [r3, r0] - ldrh r0, [r3, #6] - subs r5, r1, r0 - movs r2, #0xf - ands r5, r2 - movs r1, #0xc - ldrsh r0, [r3, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - ands r0, r2 - adds r6, r0, #0 - adds r6, #8 - ldrh r2, [r3, #0x16] - adds r4, r2, #0 - cmp r4, #0 - beq _08080C50 - subs r2, #1 - strh r2, [r3, #0x16] - ldrb r0, [r3, #0x14] - lsls r0, r0, #4 - movs r1, #0xe - ands r2, r1 - adds r0, r0, r2 - ldr r1, _08080C44 @ =gUnk_080169A4 - adds r2, r0, r1 - ldr r4, _08080C48 @ =gUnk_02025EB0 - ldr r1, [r4] - cmp r1, #0 - beq _08080C16 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r0, r0, r5 - strh r0, [r1, #2] - ldr r1, [r4] - movs r0, #1 - ldrsb r0, [r2, r0] - adds r0, r0, r6 - strh r0, [r1, #4] -_08080C16: - ldr r4, _08080C4C @ =gUnk_0200B650 - ldr r1, [r4] - cmp r1, #0 - beq _08080C30 - movs r0, #0 - ldrsb r0, [r2, r0] - adds r0, r0, r5 - strh r0, [r1, #2] - ldr r1, [r4] - movs r0, #1 - ldrsb r0, [r2, r0] - adds r0, r0, r6 - strh r0, [r1, #4] -_08080C30: - ldrb r1, [r2] - adds r0, r3, #0 - adds r0, #0x24 - strb r1, [r0] - ldrb r1, [r2, #1] - adds r0, #1 - strb r1, [r0] - b _08080C76 - .align 2, 0 -_08080C40: .4byte gRoomControls -_08080C44: .4byte gUnk_080169A4 -_08080C48: .4byte gUnk_02025EB0 -_08080C4C: .4byte gUnk_0200B650 -_08080C50: - ldr r0, _08080C78 @ =gUnk_02025EB0 - ldr r1, [r0] - cmp r1, #0 - beq _08080C5E - strh r5, [r1, #2] - ldr r0, [r0] - strh r6, [r0, #4] -_08080C5E: - ldr r0, _08080C7C @ =gUnk_0200B650 - ldr r1, [r0] - cmp r1, #0 - beq _08080C6C - strh r5, [r1, #2] - ldr r0, [r0] - strh r6, [r0, #4] -_08080C6C: - adds r0, r3, #0 - adds r0, #0x24 - strb r4, [r0] - adds r0, #1 - strb r4, [r0] -_08080C76: - pop {r4, r5, r6, pc} - .align 2, 0 -_08080C78: .4byte gUnk_02025EB0 -_08080C7C: .4byte gUnk_0200B650 - - thumb_func_start sub_08080C80 -sub_08080C80: @ 0x08080C80 - push {r4, lr} - bl sub_080197D4 - ldr r0, _08080CA8 @ =gMapDataBottom - ldr r4, _08080CAC @ =gRoomControls - ldrh r1, [r4, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r4, #0x20] - lsrs r2, r2, #4 - bl sub_0807C8B0 - ldr r0, _08080CB0 @ =gMapDataTop - ldrh r1, [r4, #0x1e] - lsrs r1, r1, #4 - ldrh r2, [r4, #0x20] - lsrs r2, r2, #4 - bl sub_0807C8B0 - pop {r4, pc} - .align 2, 0 -_08080CA8: .4byte gMapDataBottom -_08080CAC: .4byte gRoomControls -_08080CB0: .4byte gMapDataTop - - thumb_func_start sub_08080CB4 -sub_08080CB4: @ 0x08080CB4 - push {r4, r5, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x58 - ldrb r0, [r4, #0xa] - ldrb r1, [r1] - cmp r0, r1 - beq _08080CF0 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - ldrb r0, [r4, #0xa] - cmp r0, #0x5c - beq _08080CD4 - b _08080E00 -_08080CD4: - ldrb r0, [r4, #0xb] - lsls r0, r0, #3 - ldr r1, _08080CEC @ =gUnk_080C9CBC - adds r0, r0, r1 - ldrb r0, [r0] - movs r1, #0xf - ands r1, r0 - lsls r0, r0, #4 - orrs r0, r1 - strb r0, [r4, #0x1a] - b _08080E00 - .align 2, 0 -_08080CEC: .4byte gUnk_080C9CBC -_08080CF0: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _08080D00 - b _08080E00 -_08080D00: - ldrb r0, [r4, #0xa] - subs r0, #0x40 - cmp r0, #0x22 - bhi _08080E00 - lsls r0, r0, #2 - ldr r1, _08080D14 @ =_08080D18 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080D14: .4byte _08080D18 -_08080D18: @ jump table - .4byte _08080DEE @ case 0 - .4byte _08080DEE @ case 1 - .4byte _08080DEE @ case 2 - .4byte _08080DEE @ case 3 - .4byte _08080E00 @ case 4 - .4byte _08080E00 @ case 5 - .4byte _08080E00 @ case 6 - .4byte _08080E00 @ case 7 - .4byte _08080E00 @ case 8 - .4byte _08080E00 @ case 9 - .4byte _08080E00 @ case 10 - .4byte _08080E00 @ case 11 - .4byte _08080E00 @ case 12 - .4byte _08080E00 @ case 13 - .4byte _08080E00 @ case 14 - .4byte _08080E00 @ case 15 - .4byte _08080E00 @ case 16 - .4byte _08080E00 @ case 17 - .4byte _08080E00 @ case 18 - .4byte _08080E00 @ case 19 - .4byte _08080E00 @ case 20 - .4byte _08080E00 @ case 21 - .4byte _08080E00 @ case 22 - .4byte _08080E00 @ case 23 - .4byte _08080E00 @ case 24 - .4byte _08080E00 @ case 25 - .4byte _08080E00 @ case 26 - .4byte _08080E00 @ case 27 - .4byte _08080DEE @ case 28 - .4byte _08080E00 @ case 29 - .4byte _08080E00 @ case 30 - .4byte _08080E00 @ case 31 - .4byte _08080DA4 @ case 32 - .4byte _08080E00 @ case 33 - .4byte _08080DEE @ case 34 -_08080DA4: - adds r5, r4, #0 - adds r5, #0x6a - ldrb r0, [r5] - cmp r0, #0 - beq _08080DB4 - subs r0, #1 - strb r0, [r5] - b _08080E00 -_08080DB4: - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0xa - strb r0, [r5] - adds r0, r4, #0 - movs r1, #7 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08080E00 - adds r0, r4, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r2, r1, #0 - adds r2, #0x62 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x63 - ldrb r0, [r0] - adds r2, #1 - strb r0, [r2] - adds r0, r4, #0 - bl ResolveEntityOnTop - b _08080E00 -_08080DEE: - ldr r0, _08080E04 @ =gScreenTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _08080E00 - adds r0, r4, #0 - bl CreateSparkle -_08080E00: - pop {r4, r5, pc} - .align 2, 0 -_08080E04: .4byte gScreenTransition - - thumb_func_start ItemOnGround -ItemOnGround: @ 0x08080E08 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08080EDE - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x1e - bhi _08080EDE - lsls r0, r0, #2 - ldr r1, _08080E2C @ =_08080E30 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080E2C: .4byte _08080E30 -_08080E30: @ jump table - .4byte _08080ED8 @ case 0 - .4byte _08080ED8 @ case 1 - .4byte _08080EDE @ case 2 - .4byte _08080EDE @ case 3 - .4byte _08080ED8 @ case 4 - .4byte _08080ED8 @ case 5 - .4byte _08080ED8 @ case 6 - .4byte _08080EDE @ case 7 - .4byte _08080ED8 @ case 8 - .4byte _08080ED8 @ case 9 - .4byte _08080ED8 @ case 10 - .4byte _08080ED8 @ case 11 - .4byte _08080ED8 @ case 12 - .4byte _08080EDE @ case 13 - .4byte _08080EDE @ case 14 - .4byte _08080EDE @ case 15 - .4byte _08080EDE @ case 16 - .4byte _08080EDE @ case 17 - .4byte _08080EDE @ case 18 - .4byte _08080EDE @ case 19 - .4byte _08080EAC @ case 20 - .4byte _08080EDE @ case 21 - .4byte _08080EDE @ case 22 - .4byte _08080EDE @ case 23 - .4byte _08080EDE @ case 24 - .4byte _08080EDE @ case 25 - .4byte _08080EDE @ case 26 - .4byte _08080EDE @ case 27 - .4byte _08080EDE @ case 28 - .4byte _08080EDE @ case 29 - .4byte _08080ED8 @ case 30 -_08080EAC: - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0x10 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4, #0x4c] - str r0, [r4, #0x54] - b _08080EDE -_08080ED8: - adds r0, r4, #0 - bl sub_08081598 -_08080EDE: - adds r0, r4, #0 - bl sub_0806F520 - cmp r0, #0 - beq _08080EF0 - adds r0, r4, #0 - bl sub_080813BC - b _08080F00 -_08080EF0: - ldr r0, _08080F18 @ =gUnk_0811E7D4 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_08080F00: - ldrb r0, [r4, #0xa] - cmp r0, #0x5c - bne _08080F0E - ldr r1, _08080F1C @ =gRoomVars - ldrb r0, [r1, #4] - adds r0, #1 - strb r0, [r1, #4] -_08080F0E: - adds r0, r4, #0 - bl sub_08080CB4 - pop {r4, pc} - .align 2, 0 -_08080F18: .4byte gUnk_0811E7D4 -_08080F1C: .4byte gRoomVars - - thumb_func_start sub_08080F20 -sub_08080F20: @ 0x08080F20 - push {r4, r5, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x86 - ldrh r0, [r1] - cmp r0, #0 - beq _08080F3A - bl CheckFlags - cmp r0, #0 - beq _08080F3A - bl DeleteThisEntity -_08080F3A: - ldrb r0, [r4, #0xa] - cmp r0, #0x60 - bne _08080F42 - b _0808107C -_08080F42: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds 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] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #7 - strb r0, [r1] - subs r1, #3 - movs r0, #0x47 - strb r0, [r1] - adds r1, #4 - movs r0, #0x44 - strb r0, [r1] - adds r1, #5 - movs r0, #0xff - strb r0, [r1] - ldr r0, _08080F9C @ =gUnk_080FD1A8 - str r0, [r4, #0x48] - ldrb r0, [r4, #0xa] - subs r0, #0x3f - cmp r0, #0x20 - bhi _08081030 - lsls r0, r0, #2 - ldr r1, _08080FA0 @ =_08080FA4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080F9C: .4byte gUnk_080FD1A8 -_08080FA0: .4byte _08080FA4 -_08080FA4: @ jump table - .4byte _08081028 @ case 0 - .4byte _08081030 @ case 1 - .4byte _08081030 @ case 2 - .4byte _08081030 @ case 3 - .4byte _08081030 @ case 4 - .4byte _08081030 @ case 5 - .4byte _08081030 @ case 6 - .4byte _08081030 @ case 7 - .4byte _08081030 @ case 8 - .4byte _08081030 @ case 9 - .4byte _08081030 @ case 10 - .4byte _08081030 @ case 11 - .4byte _08081030 @ case 12 - .4byte _08081030 @ case 13 - .4byte _08081030 @ case 14 - .4byte _08081030 @ case 15 - .4byte _08081030 @ case 16 - .4byte _08081030 @ case 17 - .4byte _08081030 @ case 18 - .4byte _08081030 @ case 19 - .4byte _08081030 @ case 20 - .4byte _08081028 @ case 21 - .4byte _08081028 @ case 22 - .4byte _08081028 @ case 23 - .4byte _08081028 @ case 24 - .4byte _08081028 @ case 25 - .4byte _08081030 @ case 26 - .4byte _08081030 @ case 27 - .4byte _08081030 @ case 28 - .4byte _08081028 @ case 29 - .4byte _08081028 @ case 30 - .4byte _08081028 @ case 31 - .4byte _08081028 @ case 32 -_08081028: - adds r1, r4, #0 - adds r1, #0x3b - movs r0, #0x17 - b _08081036 -_08081030: - adds r1, r4, #0 - adds r1, #0x3b - movs r0, #0x11 -_08081036: - strb r0, [r1] - ldrb r0, [r4, #0xe] - adds r5, r4, #0 - adds r5, #0x69 - movs r2, #0 - strb r0, [r5] - adds r0, r4, #0 - adds r0, #0x6a - strb r2, [r0] - adds r0, #2 - movs r1, #0 - strh r2, [r0] - subs r0, #4 - strb r1, [r0] - strb r1, [r4, #0xe] - adds r0, r4, #0 - movs r1, #3 - bl sub_0805E3A0 - ldrb r0, [r4, #0xa] - bl sub_0808147C - strb r0, [r4, #0x1c] - ldr r1, _08081078 @ =gUnk_0811E7E8 - ldrb r0, [r5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - b _080810A4 - .align 2, 0 -_08081078: .4byte gUnk_0811E7E8 -_0808107C: - movs r0, #0x40 - movs r1, #0x60 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _080810A4 - movs r0, #0 - strb r0, [r1, #0xe] - ldrb r0, [r4, #0xe] - cmp r0, #1 - bne _0808109A - movs r0, #2 - strb r0, [r1, #0xb] -_0808109A: - adds r0, r4, #0 - bl CopyPosition - bl DeleteThisEntity -_080810A4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080810A8 -sub_080810A8: @ 0x080810A8 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_080814A4 - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080810D6 - movs r0, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] - movs r1, #0x24 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _080810DC - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - b _080810DC -_080810D6: - movs r0, #0xff - orrs r0, r1 - strb r0, [r4, #0x15] -_080810DC: - ldr r0, [r4, #0x20] - cmp r0, #0 - bne _080810E8 - movs r0, #0xf0 - lsls r0, r0, #9 - str r0, [r4, #0x20] -_080810E8: - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #2 - bne _080810F8 - adds r0, r4, #0 - bl sub_08016A30 -_080810F8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080810FC -sub_080810FC: @ 0x080810FC - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xa] - cmp r0, #0x5f - beq _0808110E - adds r0, r2, #0 - bl sub_08081598 - b _0808112E -_0808110E: - movs r1, #0 - movs r0, #2 - strb r0, [r2, #0xc] - strb r1, [r2, #0xd] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r1, r2, #0 - adds r1, #0x3b - movs r0, #0x11 - strb r0, [r1] - ldr r0, _08081130 @ =gPlayerEntity - adds r1, r2, #0 - bl CopyPosition -_0808112E: - pop {pc} - .align 2, 0 -_08081130: .4byte gPlayerEntity - - thumb_func_start sub_08081134 -sub_08081134: @ 0x08081134 - push {r4, lr} - adds r4, r0, #0 - bl sub_080814A4 - adds r1, r4, #0 - adds r1, #0x6c - ldrh r0, [r1] - adds r0, #0x50 - strh r0, [r1] - adds r0, r4, #0 - bl sub_08081150 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08081150 -sub_08081150: @ 0x08081150 - push {lr} - movs r1, #2 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x10] - movs r1, #0x80 - orrs r1, r2 - strb r1, [r0, #0x10] - ldr r1, _08081180 @ =0x0000FF80 - strh r1, [r0, #0x36] - ldrb r3, [r0, #0x1b] - movs r2, #0x3f - adds r1, r2, #0 - ands r1, r3 - movs r3, #0x40 - orrs r1, r3 - strb r1, [r0, #0x1b] - ldrb r1, [r0, #0x19] - ands r2, r1 - orrs r2, r3 - strb r2, [r0, #0x19] - ldr r0, _08081184 @ =0x0000012D - bl PlaySFX - pop {pc} - .align 2, 0 -_08081180: .4byte 0x0000FF80 -_08081184: .4byte 0x0000012D - - thumb_func_start sub_08081188 -sub_08081188: @ 0x08081188 - push {lr} - adds r2, r0, #0 - movs r0, #2 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r0, r2, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #2 - bne _080811A8 - adds r0, r2, #0 - bl sub_08016A30 -_080811A8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_080811AC -sub_080811AC: @ 0x080811AC - push {r4, lr} - adds r4, r0, #0 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl GetTileTypeByEntity - adds r4, #0x6e - strh r0, [r4] - pop {r4, pc} - - thumb_func_start sub_080811C8 -sub_080811C8: @ 0x080811C8 - movs r1, #2 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x18] - subs r1, #6 - ands r1, r2 - strb r1, [r0, #0x18] - bx lr - .align 2, 0 - - thumb_func_start sub_080811D8 -sub_080811D8: @ 0x080811D8 - push {lr} - bl sub_08081188 - ldr r0, _080811E8 @ =0x00000215 - bl PlaySFX - pop {pc} - .align 2, 0 -_080811E8: .4byte 0x00000215 - - thumb_func_start sub_080811EC -sub_080811EC: @ 0x080811EC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x69 - ldrb r0, [r0] - cmp r0, #6 - beq _08081200 - adds r0, r4, #0 - bl sub_080AEFE0 - b _08081206 -_08081200: - adds r0, r4, #0 - bl sub_0806F69C -_08081206: - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - ldr r0, [r4, #0x20] - cmp r0, #0 - bgt _08081228 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - bl sub_080814A4 -_08081228: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808122C -sub_0808122C: @ 0x0808122C - push {lr} - ldr r2, _08081244 @ =gUnk_0811E814 - adds r1, r0, #0 - adds r1, #0x69 - ldrb r1, [r1] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08081244: .4byte gUnk_0811E814 - - thumb_func_start sub_08081248 -sub_08081248: @ 0x08081248 - push {r4, lr} - adds r4, r0, #0 - bl sub_08081500 - adds r0, r4, #0 - bl sub_080814C0 - cmp r0, #0 - beq _08081264 - adds r0, r4, #0 - movs r1, #0 - bl sub_08081404 - b _0808126A -_08081264: - adds r0, r4, #0 - bl sub_0800442E -_0808126A: - pop {r4, pc} - - thumb_func_start sub_0808126C -sub_0808126C: @ 0x0808126C - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0808153C - pop {r4, pc} - - thumb_func_start sub_0808127C -sub_0808127C: @ 0x0808127C - push {r4, lr} - adds r4, r0, #0 - bl sub_080814C0 - cmp r0, #0 - beq _08081292 - adds r0, r4, #0 - movs r1, #0 - bl sub_08081404 - b _08081298 -_08081292: - adds r0, r4, #0 - bl sub_0808153C -_08081298: - pop {r4, pc} - .align 2, 0 - - thumb_func_start nullsub_113 -nullsub_113: @ 0x0808129C - bx lr - .align 2, 0 - - thumb_func_start sub_080812A0 -sub_080812A0: @ 0x080812A0 - push {lr} - bl sub_08081500 - pop {pc} - - thumb_func_start sub_080812A8 -sub_080812A8: @ 0x080812A8 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080002D0 - cmp r0, #0xf - beq _080812E4 - adds r0, r5, #0 - adds r0, #0x6e - ldrh r4, [r0] - adds r0, r5, #0 - bl GetTileTypeByEntity - cmp r4, r0 - beq _080812E4 - movs r0, #0 - strb r0, [r5, #0x15] - movs r2, #0 - strh r0, [r5, #0x24] - ldrb r1, [r5, #0x18] - subs r0, #4 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - adds r0, r5, #0 - adds r0, #0x69 - strb r2, [r0] - adds r0, r5, #0 - bl sub_080810A8 -_080812E4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080812E8 -sub_080812E8: @ 0x080812E8 - push {r4, lr} - adds r4, r0, #0 - ldr r3, _0808131C @ =gPlayerState - adds r0, r3, #0 - adds r0, #0x26 - ldrb r1, [r0] - movs r2, #0x80 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _08081318 - ldr r0, [r3, #0x30] - ands r0, r2 - cmp r0, #0 - bne _08081318 - ldr r1, _08081320 @ =gPlayerEntity - adds r0, r4, #0 - bl sub_080177A0 - cmp r0, #0 - beq _08081318 - adds r0, r4, #0 - bl sub_080810FC -_08081318: - pop {r4, pc} - .align 2, 0 -_0808131C: .4byte gPlayerState -_08081320: .4byte gPlayerEntity - - thumb_func_start nullsub_510 -nullsub_510: @ 0x08081324 - bx lr - .align 2, 0 - - thumb_func_start sub_08081328 -sub_08081328: @ 0x08081328 - push {r4, lr} - adds r4, r0, #0 - ldr r2, [r4, #0x54] - ldrh r1, [r2, #8] - movs r0, #0xc2 - lsls r0, r0, #2 - cmp r1, r0 - beq _08081342 - adds r0, r4, #0 - movs r1, #0 - bl sub_08081404 - b _08081364 -_08081342: - adds r0, r2, #0 - adds r1, r4, #0 - bl CopyPosition - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - ldr r2, _08081368 @ =gPlayerEntity - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_080177A0 - cmp r0, #0 - beq _08081364 - adds r0, r4, #0 - bl sub_080810FC -_08081364: - pop {r4, pc} - .align 2, 0 -_08081368: .4byte gPlayerEntity - - thumb_func_start sub_0808136C -sub_0808136C: @ 0x0808136C - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _080813B2 - ldr r3, [r5, #0x54] - ldr r0, [r3, #0x2c] - str r0, [r5, #0x2c] - ldr r0, [r3, #0x30] - str r0, [r5, #0x30] - ldrb r2, [r3, #0x1b] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r4, [r5, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r4 - orrs r0, r2 - strb r0, [r5, #0x1b] - ldrb r0, [r3, #0x19] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r5, #0x19] - ands r1, r2 - orrs r1, r0 - strb r1, [r5, #0x19] - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r5, #0 - bl sub_08003FC4 - b _080813BA -_080813B2: - adds r0, r5, #0 - movs r1, #1 - bl sub_08081404 -_080813BA: - pop {r4, r5, pc} - - thumb_func_start sub_080813BC -sub_080813BC: @ 0x080813BC - push {lr} - ldr r2, _080813D0 @ =gUnk_0811E840 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080813D0: .4byte gUnk_0811E840 - - thumb_func_start sub_080813D4 -sub_080813D4: @ 0x080813D4 - movs r3, #1 - movs r1, #1 - strb r1, [r0, #0xd] - strb r1, [r0, #0x1d] - ldrb r2, [r0, #0x18] - subs r1, #5 - ands r1, r2 - orrs r1, r3 - strb r1, [r0, #0x18] - bx lr - - thumb_func_start sub_080813E8 -sub_080813E8: @ 0x080813E8 - push {lr} - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_080813F0 -sub_080813F0: @ 0x080813F0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _08081402 - adds r0, r4, #0 - bl sub_080810FC -_08081402: - pop {r4, pc} - - thumb_func_start sub_08081404 -sub_08081404: @ 0x08081404 - push {lr} - cmp r1, #0 - beq _08081418 - adds r1, r0, #0 - adds r1, #0x86 - ldrh r0, [r1] - cmp r0, #0 - beq _08081418 - bl SetFlag -_08081418: - bl DeleteThisEntity - pop {pc} - .align 2, 0 - - thumb_func_start sub_08081420 -sub_08081420: @ 0x08081420 - push {r4, lr} - adds r4, r0, #0 - bl CheckShouldPlayItemGetCutscene - cmp r0, #0 - bne _08081438 - ldrb r0, [r4, #0xa] - ldrb r1, [r4, #0xb] - bl GiveItem - movs r0, #0 - b _0808144C -_08081438: - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldrb r0, [r4, #0xa] - ldrb r1, [r4, #0xb] - movs r2, #0 - bl CreateItemEntity - movs r0, #1 -_0808144C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start CheckShouldPlayItemGetCutscene -CheckShouldPlayItemGetCutscene: @ 0x08081450 - push {r4, lr} - movs r4, #0 - ldr r1, _08081478 @ =gUnk_080FD5B4 - ldrb r2, [r0, #0xa] - lsls r0, r2, #3 - adds r0, r0, r1 - ldrb r1, [r0, #3] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08081470 - adds r0, r2, #0 - bl GetInventoryValue - cmp r0, #0 - bne _08081472 -_08081470: - movs r4, #1 -_08081472: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_08081478: .4byte gUnk_080FD5B4 - - thumb_func_start sub_0808147C -sub_0808147C: @ 0x0808147C - lsls r0, r0, #3 - ldr r1, _08081488 @ =gUnk_0811E84C - adds r0, r0, r1 - ldrb r0, [r0, #4] - bx lr - .align 2, 0 -_08081488: .4byte gUnk_0811E84C - - thumb_func_start sub_0808148C -sub_0808148C: @ 0x0808148C - push {lr} - lsls r0, r0, #3 - ldr r1, _080814A0 @ =gUnk_0811E84C - adds r1, r0, r1 - ldrh r0, [r1, #2] - cmp r0, #0 - beq _0808149E - bl PlaySFX -_0808149E: - pop {pc} - .align 2, 0 -_080814A0: .4byte gUnk_0811E84C - - thumb_func_start sub_080814A4 -sub_080814A4: @ 0x080814A4 - push {lr} - adds r1, r0, #0 - adds r0, #0x69 - ldrb r0, [r0] - cmp r0, #0xa - bne _080814B6 - adds r1, #0x6c - movs r0, #0x78 - b _080814BC -_080814B6: - adds r1, #0x6c - movs r0, #0x96 - lsls r0, r0, #2 -_080814BC: - strh r0, [r1] - pop {pc} - - thumb_func_start sub_080814C0 -sub_080814C0: @ 0x080814C0 - push {r4, lr} - adds r4, r0, #0 - bl sub_0805E40C - cmp r0, #0 - bne _080814FA - adds r0, r4, #0 - adds r0, #0x6c - ldrh r1, [r0] - subs r1, #1 - strh r1, [r0] - lsls r0, r1, #0x10 - cmp r0, #0 - bne _080814E0 - movs r0, #1 - b _080814FC -_080814E0: - lsls r0, r1, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x59 - bhi _080814FA - ldrb r2, [r4, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - movs r0, #1 - eors r1, r0 - subs r0, #5 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] -_080814FA: - movs r0, #0 -_080814FC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08081500 -sub_08081500: @ 0x08081500 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x68 - ldrb r0, [r5] - cmp r0, #0 - bne _08081538 - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_080044EC - cmp r0, #0 - bne _08081522 - movs r0, #1 - strb r0, [r5] - b _08081538 -_08081522: - cmp r0, #1 - bne _08081532 - ldrb r0, [r4, #0xa] - bl sub_0808148C - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer -_08081532: - adds r0, r4, #0 - bl sub_080AEFE0 -_08081538: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0808153C -sub_0808153C: @ 0x0808153C - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x68 - ldrb r0, [r5] - cmp r0, #1 - bhi _08081596 - cmp r0, #0 - bne _0808157E - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08081596 - adds r0, r4, #0 - bl sub_0800442E - cmp r0, #0 - bne _08081596 - movs r0, #1 - strb r0, [r5] - movs r0, #0xf0 - lsls r0, r0, #9 - str r0, [r4, #0x20] - ldrb r0, [r4, #0xa] - bl sub_0808148C - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - b _08081596 -_0808157E: - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08081596 - movs r0, #2 - strb r0, [r5] - ldrb r0, [r4, #0xa] - bl sub_0808148C -_08081596: - pop {r4, r5, pc} - - thumb_func_start sub_08081598 -sub_08081598: @ 0x08081598 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _080815AC - adds r0, r4, #0 - movs r1, #1 - bl sub_08081404 -_080815AC: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0xe - strb r0, [r4, #0xe] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x10 - orrs r0, r1 - movs r1, #8 - rsbs r1, r1, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] - ldr r0, _08081618 @ =gPlayerEntity - str r0, [r4, #0x54] - adds r1, r4, #0 - bl CopyPosition - ldrh r0, [r4, #0x36] - subs r0, #4 - strh r0, [r4, #0x36] - ldrb r0, [r4, #0xa] - cmp r0, #0x5f - beq _08081614 - adds r0, r4, #0 - bl sub_08081420 - cmp r0, #0 - beq _08081614 - adds r0, r4, #0 - movs r1, #1 - bl sub_08081404 -_08081614: - pop {r4, pc} - .align 2, 0 -_08081618: .4byte gPlayerEntity diff --git a/include/entity.h b/include/entity.h index 420a3193..f186e8f0 100644 --- a/include/entity.h +++ b/include/entity.h @@ -99,10 +99,7 @@ typedef struct Entity { /*0x45*/ u8 currentHealth; /*0x46*/ u16 field_0x46; /*0x48*/ BoundingBox* boundingBox; - /*0x4c*/ u8 field_0x4c; - /*0x4d*/ u8 field_0x4d; - /*0x4e*/ u8 field_0x4e; - /*0x4f*/ u8 field_0x4f; + /*0x4c*/ struct Entity* field_0x4c; /*0x50*/ struct Entity* parent; /*0x54*/ struct Entity* attachedEntity; /*0x58*/ u8 animIndex; @@ -125,7 +122,7 @@ typedef struct Entity { /*0x68*/ union SplitHWord field_0x68; /*0x6a*/ union SplitHWord field_0x6a; /*0x6c*/ union SplitHWord field_0x6c; - /*0x6e*/ u8 filler4[2]; + /*0x6e*/ union SplitHWord field_0x6e; /*0x70*/ union SplitWord field_0x70; /*0x74*/ union SplitHWord field_0x74; /*0x76*/ union SplitHWord field_0x76; diff --git a/include/functions.h b/include/functions.h index 78b686c5..18663686 100644 --- a/include/functions.h +++ b/include/functions.h @@ -221,7 +221,7 @@ extern u32 sub_0807CF88(u32, u8*); extern u32 sub_0807D008(u32, void*); extern void sub_0807D184(u32, char*); extern u32 sub_0806F520(); -extern void sub_0806F4E8(); +extern void sub_0806F4E8(Entity*); extern u32 sub_0806F3E4(Entity*); extern void sub_0804A7D4(Entity*); extern void sub_08033744(Entity*); @@ -262,4 +262,9 @@ extern void sub_08004542(Entity*); extern void sub_08077B20(); extern u32 sub_080040A8(Entity*); extern u32 sub_08017850(Entity*); +extern void sub_080809D4(void); +extern void sub_08080CB4(Entity*); +extern u32 GetTileTypeByEntity(Entity*); +extern u32 sub_0800442E(Entity*); +extern void sub_08081404(Entity*, u32); #endif diff --git a/include/room.h b/include/room.h index 9e0bacbd..8a1d4430 100644 --- a/include/room.h +++ b/include/room.h @@ -12,32 +12,34 @@ typedef struct { */ typedef struct { - u16 unk2; - u8 unk3; - u8 unk4; - u8 areaID; - u8 roomID; - u16 roomOriginX; - u16 roomOriginY; - s16 roomScrollX; - s16 roomScrollY; - u8 unk5; - u8 unk6; - u8 filler[4]; - u8 screenShakeMagnitude; - u8 unk7; - u16 screenShakeTime; - u16 filler2[3]; - u16 width; - u16 height; - u8 filler3[6]; - union SplitWord bg3OffsetX; - union SplitWord bg3OffsetY; - Entity* cameraTarget; + /*0x00*/ u16 unk2; + /*0x02*/ u8 unk3; + /*0x03*/ u8 unk4; + /*0x04*/ u8 areaID; + /*0x05*/ u8 roomID; + /*0x06*/ u16 roomOriginX; + /*0x08*/ u16 roomOriginY; + /*0x0A*/ s16 roomScrollX; + /*0x0C*/ s16 roomScrollY; + /*0x0E*/ u8 unk5; + /*0x0F*/ u8 unk6; + /*0x10*/ u8 filler[4]; + /*0x14*/ u8 screenShakeMagnitude; + /*0x15*/ u8 unk7; + /*0x16*/ u16 screenShakeTime; + /*0x18*/ u16 filler2[3]; + /*0x1E*/ u16 width; + /*0x20*/ u16 height; + /*0x22*/ u8 filler3[6]; + /*0x28*/ union SplitWord bg3OffsetX; + /*0x2C*/ union SplitWord bg3OffsetY; + /*0x30*/ Entity* cameraTarget; } RoomControls; typedef struct { - u8 filler[6]; + u8 filler[4]; + u8 field_0x4; + u8 filler1[1]; u8 itemForSaleIndex; u8 field_0x7; u8 field_0x8; diff --git a/linker.ld b/linker.ld index 5fe3b009..7b060878 100644 --- a/linker.ld +++ b/linker.ld @@ -669,8 +669,9 @@ SECTIONS { src/code_0807CC3C.o(.text); asm/code_0807CC3C.o(.text); src/code_0808091C.o(.text); + asm/code_0808091C.o(.text); /* objects */ - asm/itemOnGround.o(.text); + src/object/itemOnGround.o(.text); asm/deathFx.o(.text); asm/itemForSale.o(.text); src/object/button.o(.text); diff --git a/src/code_0808091C.c b/src/code_0808091C.c index dcb86728..ae04dcad 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -5,10 +5,12 @@ #include "room.h" extern void sub_0805E5A8(); +extern void sub_08080BC4(void); extern RoomControls gRoomControls; extern u32 gUnk_0200B650; extern u32 gUnk_02025EB0; +extern u8 gUnk_02000070; extern void DoExitTransition(ScreenTransitionData*); extern void sub_080809D4(); @@ -53,7 +55,6 @@ void sub_08080930(void) } u32* GetLayerByIndex(u32 param_1) - { if (param_1 == 2) { @@ -64,9 +65,79 @@ u32* GetLayerByIndex(u32 param_1) } void sub_08080964(u16 time, u32 magnitude) - { gRoomControls.screenShakeTime = time; gRoomControls.screenShakeMagnitude = magnitude & 7; return; } + +void sub_08080974(u32 arg0, u32 arg1) { + u32 var0, var1; + RoomControls* roomControls = &gRoomControls; + + var0 = roomControls->roomOriginX; + if (arg0 <= var0 + 120) { + roomControls->roomScrollX = var0; + } else { + var0 += roomControls->width; + var1 = var0 - 120; + if (arg0 < var1) { + var1 = arg0; + } + roomControls->roomScrollX = var1 - 120; + } + + var0 = roomControls->roomOriginY; + if (arg1 <= var0 + 80) { + roomControls->roomScrollY = var0; + } else { + var0 += roomControls->height; + var1 = var0 - 80; + if (arg1 < var1) { + var1 = arg1; + } + roomControls->roomScrollY = var1 - 80; + } + + sub_080809D4(); + gUnk_02000070 = 1; +} + +void sub_080809D4(void) { + register Entity* target asm("r4"); + int x, y; + int var1, var0; + RoomControls* roomControls = &gRoomControls; + roomControls->unk6 &= 0xFB; + + target = roomControls->cameraTarget; + x = target->x.HALF.HI; + var0 = roomControls->roomOriginX; + if (x <= var0 + 120) { + roomControls->roomScrollX = var0; + } else { + var0 += roomControls->width; + var1 = var0 - 120; + if (x < var1) { + var1 = (u16)target->x.HALF.HI; + } + roomControls->roomScrollX = var1 - 120; + } + + target = roomControls->cameraTarget; + y = target->y.HALF.HI; + var0 = roomControls->roomOriginY; + if (y <= var0 + 80) { + roomControls->roomScrollY = var0; + } else { + var0 += roomControls->height; + var1 = var0 - 80; + if (y < var1) { + var1 = (u16)target->y.HALF.HI; + } + roomControls->roomScrollY = var1 - 80; + } + + sub_08080BC4(); + gUnk_02000070 = 1; +} diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c index d25b4d9a..e40617af 100644 --- a/src/enemy/acroBandits.c +++ b/src/enemy/acroBandits.c @@ -316,8 +316,8 @@ void sub_08031E48(Entity* this, Entity* child) { child->field_0x6c.HALF.LO = this->field_0x6c.HALF.LO; child->field_0x70.HALF.LO = this->field_0x70.HALF.LO; child->field_0x70.HALF.HI = this->field_0x70.HALF.HI; - child->filler4[0] = this->filler4[0]; - child->filler4[1] = this->filler4[1]; + child->field_0x6e.HALF.LO = this->field_0x6e.HALF.LO; + child->field_0x6e.HALF.HI = this->field_0x6e.HALF.HI; child->field_0x7c.WORD = (s32)this; } diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c index fea8f7e7..ffa1dc94 100644 --- a/src/enemy/moldworm.c +++ b/src/enemy/moldworm.c @@ -186,7 +186,6 @@ void sub_08023330(Entity* this) { } } -extern u32 GetTileTypeByEntity(Entity*); void sub_08023A68(Entity*); void sub_08023AB0(Entity*); diff --git a/src/enemy/peahat.c b/src/enemy/peahat.c index 66ff3199..664e1615 100644 --- a/src/enemy/peahat.c +++ b/src/enemy/peahat.c @@ -12,7 +12,6 @@ extern const s8 gUnk_080CA5D4[]; void sub_080205F8(Entity*); void sub_08020604(Entity*); -extern u32 sub_0800442E(Entity*); extern u32 sub_08049F1C(Entity*, Entity*, u32); extern void sub_0804AA1C(Entity*); diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c index 021a8b44..e550363c 100644 --- a/src/enemy/wisp.c +++ b/src/enemy/wisp.c @@ -72,7 +72,7 @@ void sub_08033650(Entity* this) { } void sub_08033658(Entity* this) { - sub_0806F4E8(); + sub_0806F4E8(this); } void sub_08033660(Entity* this) { @@ -146,4 +146,4 @@ void sub_08033744(Entity* this) { } } this->direction = temp; -} \ No newline at end of file +} diff --git a/src/object/itemOnGround.c b/src/object/itemOnGround.c new file mode 100755 index 00000000..22684903 --- /dev/null +++ b/src/object/itemOnGround.c @@ -0,0 +1,442 @@ +#include "global.h" +#include "entity.h" +#include "flags.h" +#include "functions.h" +#include "player.h" + +static void sub_08081150(Entity*); +static u8 sub_0808147C(u32); +static void sub_080814A4(Entity*); +static u32 sub_080814C0(Entity*); +static void sub_08081500(Entity*); +static void sub_0808153C(Entity*); +static void sub_08081598(Entity*); +static void sub_080813BC(Entity*); +static void sub_080810FC(Entity*); +static bool32 CheckShouldPlayItemGetCutscene(Entity*); + +extern u32 sub_080002D0(Entity*); +extern u32 sub_080177A0(Entity*, Entity*); +extern void GiveItem(u32, u32); +extern u32 sub_0805E40C(Entity*); + +extern void (*const gUnk_0811E7D4[])(Entity*); +extern void (*const gUnk_0811E7E8[])(Entity*); +extern void (*const gUnk_0811E814[])(Entity*); +extern void (*const gUnk_0811E840[])(Entity*); +extern BoundingBox gUnk_080FD1A8; + +typedef struct { + u8 unk0[3]; + u8 unk3; + u8 unk4[4]; +} Unk_080FD5B4; + +extern const Unk_080FD5B4 gUnk_080FD5B4[]; + +typedef struct { + u8 unk0[2]; + u16 sfx; + u8 unk4; + u8 unk5[3]; +} Unk_0811E84C; + +extern const Unk_0811E84C gUnk_0811E84C[]; + +void ItemOnGround(Entity* this) { + if (this->bitfield & 0x80) { + switch (this->bitfield & 0x7F) { + case 20: + this->action = 3; + this->flags &= 0x7F; + this->spriteSettings.b.draw = 1; + this->field_0x3c |= 0x10; + this->attachedEntity = this->field_0x4c; + break; + case 0: + case 1: + case 4: + case 5: + case 6: + case 8: + case 9: + case 10: + case 11: + case 12: + case 30: + sub_08081598(this); + break; + } + } + + if (sub_0806F520(this)) { + sub_080813BC(this); + } else { + gUnk_0811E7D4[this->action](this); + } + + if (this->entityType.form == 0x5C) { + gRoomVars.field_0x4++; + } + + sub_08080CB4(this); +} + +void sub_08080F20(Entity* this) { + if (this->field_0x86 && CheckFlags(this->field_0x86)) { + DeleteThisEntity(); + } + + if (this->entityType.form != 0x60) { + this->spriteSettings.b.draw = 1; + this->spritePriority.b1 = 3; + this->spriteSettings.b.shadow = 0; + this->damageType = 7; + this->field_0x3c = 0x47; + this->field_0x40 = 0x44; + this->currentHealth = 0xFF; + this->boundingBox = &gUnk_080FD1A8; + switch (this->entityType.form - 0x3F) { + case 0: + case 21: + case 22: + case 23: + case 24: + case 25: + case 29: + case 30: + case 31: + case 32: + this->flags2 = 0x17; + break; + default: + this->flags2 = 0x11; + break; + } + + this->field_0x68.HALF.HI = this->actionDelay; + this->field_0x6a.HALF.LO = 0; + this->field_0x6c.HWORD = 0; + this->field_0x68.HALF.LO = 0; + this->actionDelay = 0; + sub_0805E3A0(this, 3); + this->field_0x1c = sub_0808147C(this->entityType.form); + gUnk_0811E7E8[this->field_0x68.HALF.HI](this); + } else { + Entity* entity = CreateObject(0x40, 0x60, 0); + if (entity) { + entity->actionDelay = 0; + if (this->actionDelay == 1) { + entity->entityType.parameter = 2; + } + + CopyPosition(this, entity); + DeleteThisEntity(); + } + } +} + +static void sub_080810A8(Entity* this) { + this->action = 1; + sub_080814A4(this); + if (this->direction & 0x80) { + this->direction &= 0x1F; + if (this->nonPlanarMovement == 0) { + this->nonPlanarMovement = 0x100; + } + } else { + this->direction |= 0xFF; + } + + if (this->field_0x20 == 0) { + this->field_0x20 = 0x1E000; + } + + if (this->collisionLayer == 2) { + sub_08016A30(this); + } +} + +static void sub_080810FC(Entity* this) { + if (this->entityType.form != 0x5F) { + sub_08081598(this); + } else { + this->action = 2; + this->previousActionFlag = 0; + this->flags |= 0x80; + this->flags2 = 0x11; + CopyPosition(&gPlayerEntity, this); + } +} + +void sub_08081134(Entity* this) { + sub_080814A4(this); + this->field_0x6c.HWORD += 80; + sub_08081150(this); +} + +static void sub_08081150(Entity* this) { + this->action = 2; + this->flags |= 0x80; + this->height.HALF.HI = -0x80; + this->spriteOrientation.flipY = 1; + this->spriteRendering.b3 = 1; + PlaySFX(0x12D); +} + +static void sub_08081188(Entity* this) { + this->action = 2; + this->flags |= 0x80; + if (this->collisionLayer == 2) { + sub_08016A30(this); + } +} + +void sub_080811AC(Entity* this) { + this->action = 2; + this->spriteSettings.b.draw = 0; + this->field_0x6e.HWORD = GetTileTypeByEntity(this); +} + +void sub_080811C8(Entity* this) { + this->action = 2; + this->spriteSettings.b.draw = 0; +} + +void sub_080811D8(Entity* this) { + sub_08081188(this); + PlaySFX(0x215); +} + +void sub_080811EC(Entity* this) { + if (this->field_0x68.HALF.HI != 6) { + sub_080AEFE0(this); + } else { + sub_0806F69C(this); + } + + sub_08003FC4(this, 0x2800); + if (this->field_0x20 <= 0) { + this->action = 2; + this->flags |= 0x80; + sub_080814A4(this); + } +} + +void sub_0808122C(Entity* this) { + gUnk_0811E814[this->field_0x68.HALF.HI](this); +} + +void sub_08081248(Entity* this) { + sub_08081500(this); + if (sub_080814C0(this)) { + sub_08081404(this, 0); + } else { + sub_0800442E(this); + } +} + +void sub_0808126C(Entity* this) { + UpdateAnimationSingleFrame(this); + sub_0808153C(this); +} + +void sub_0808127C(Entity* this) { + if (sub_080814C0(this)) { + sub_08081404(this, 0); + } else { + sub_0808153C(this); + } +} + +void nullsub_113(Entity* this) { +} + +void sub_080812A0(Entity* this) { + sub_08081500(this); +} + +void sub_080812A8(Entity* this) { + if (sub_080002D0(this) != 0xF && this->field_0x6e.HWORD != GetTileTypeByEntity(this)) { + this->direction = 0; + this->nonPlanarMovement = 0; + this->spriteSettings.b.draw = 1; + this->field_0x68.HALF.HI = 0; + sub_080810A8(this); + } +} + +void sub_080812E8(Entity* this) { + PlayerState* playerState = &gPlayerState; + if ((playerState->swimState & 0x80) && + !(playerState->flags.all & 0x80) && + sub_080177A0(this, &gPlayerEntity)) { + sub_080810FC(this); + } +} + +void nullsub_510(Entity* this) { +} + +void sub_08081328(Entity* this) { + Entity* other = this->attachedEntity; + if (!(other->entityType.type == 8 && other->entityType.subtype == 3)) { + sub_08081404(this, 0); + } else { + CopyPosition(other, this); + this->height.HALF.HI--; + other = &gPlayerEntity; + if (sub_080177A0(this, other)) { + sub_080810FC(this); + } + } +} + +void sub_0808136C(Entity* this) { + if (--this->actionDelay) { + Entity* other = this->attachedEntity; + this->x.WORD = other->x.WORD; + this->y.WORD = other->y.WORD; + this->spriteOrientation.flipY = other->spriteOrientation.flipY; + this->spriteRendering.b3 = other->spriteRendering.b3; + sub_08003FC4(this, 0x2800); + } else { + sub_08081404(this, 1); + } +} + +static void sub_080813BC(Entity* this) { + gUnk_0811E840[this->previousActionFlag](this); +} + +void sub_080813D4(Entity* this) { + this->previousActionFlag = 1; + this->field_0x1d = 1; + this->spriteSettings.b.draw = 1; +} + +void sub_080813E8(Entity* this) { + sub_0806F4E8(this); +} + +void sub_080813F0(Entity* this) { + if (sub_0806F3E4(this)) { + sub_080810FC(this); + } +} + +void sub_08081404(Entity* this, u32 arg1) { + if (arg1 && this->field_0x86) { + SetFlag(this->field_0x86); + } + + DeleteThisEntity(); +} + +bool32 sub_08081420(Entity* this) { + if (CheckShouldPlayItemGetCutscene(this)) { + sub_0805E3A0(this, 6); + CreateItemEntity(this->entityType.form, this->entityType.parameter, 0); + return TRUE; + } else { + GiveItem(this->entityType.form, this->entityType.parameter); + return FALSE; + } +} + +static bool32 CheckShouldPlayItemGetCutscene(Entity* this) { + bool32 result = FALSE; + if ((gUnk_080FD5B4[this->entityType.form].unk0[3] & 0x2) || !GetInventoryValue(this->entityType.form)) { + result = TRUE; + } + return result; +} + +static u8 sub_0808147C(u32 arg0) { + const Unk_0811E84C* var0 = &gUnk_0811E84C[arg0]; + return var0->unk4; +} + +void sub_0808148C(u32 arg0) { + const Unk_0811E84C* var0 = &gUnk_0811E84C[arg0]; + if (var0->sfx) { + PlaySFX(var0->sfx); + } +} + +static void sub_080814A4(Entity* this) { + if (this->field_0x68.HALF.HI == 10) { + this->field_0x6c.HWORD = 120; + } else { + this->field_0x6c.HWORD = 600; + } +} + +static u32 sub_080814C0(Entity* this) { + if (!sub_0805E40C(this)) { + if (--this->field_0x6c.HWORD == 0) { + return TRUE; + } + + if (this->field_0x6c.HWORD < 90) { + this->spriteSettings.b.draw ^= 1; + } + } + + return FALSE; +} + +static void sub_08081500(Entity* this) { + if (this->field_0x68.HALF.LO == 0) { + u32 var0 = sub_080044EC(this, 0x2800); + if (var0 == 0) { + this->field_0x68.HALF.LO = 1; + } else { + if (var0 == 1) { + sub_0808148C(this->entityType.form); + UpdateSpriteForCollisionLayer(this); + } + + sub_080AEFE0(this); + } + } +} + +static void sub_0808153C(Entity* this) { + if (this->field_0x68.HALF.LO > 1) + return; + + if (this->field_0x68.HALF.LO == 0) { + if (!sub_08003FC4(this, 0x1000) && !sub_0800442E(this)) { + this->field_0x68.HALF.LO = 1; + this->field_0x20 = 0x1E000; + sub_0808148C(this->entityType.form); + UpdateSpriteForCollisionLayer(this); + } + } else { + if (!sub_08003FC4(this, 0x2800)) { + this->field_0x68.HALF.LO = 2; + sub_0808148C(this->entityType.form); + } + } +} + +static void sub_08081598(Entity* this) { + if (this->currentHealth == 0) { + sub_08081404(this, 1); + } + + this->flags &= 0x7F; + this->action = 4; + this->actionDelay = 14; + this->field_0x20 = 0x20000; + this->spriteSettings.b.draw = 1; + this->spritePriority.b1 = 2; + this->spritePriority.b0 = 3; + this->attachedEntity = &gPlayerEntity; + CopyPosition(this->attachedEntity, this); + this->height.HALF.HI -= 4; + if (this->entityType.form != 0x5F && sub_08081420(this)) { + sub_08081404(this, 1); + } +} diff --git a/src/object/pot.c b/src/object/pot.c index b7cfc8d6..0e2e9af1 100755 --- a/src/object/pot.c +++ b/src/object/pot.c @@ -18,11 +18,9 @@ extern BoundingBox gUnk_080FD340; // TODO: should be const extern u32 sub_08016A30(Entity*); extern u32 sub_080001DA(u32, u32); -extern u32 GetTileTypeByEntity(Entity*); extern void sub_08078930(Entity*); extern u32 sub_080002B8(Entity*); extern void sub_08016A6C(Entity*); -extern u32 sub_0800442E(Entity*); void Pot(Entity* this) { gUnk_0811F090[this->action](this);